Khỉ ở một máy đánh chữ


8

Đôi khi, khi bạn nhấn một phím trên bàn phím, chữ cái không luôn hiển thị trên màn hình. Cho dù điều này là do kết nối tinh ranh hay nói cách khác, bạn đã quyết định viết một tập lệnh để kiểm soát xác suất của một chữ cái hiển thị trên màn hình khi nhấn phím tương ứng.

Một ngày nọ, bạn quyết định mua một con khỉ và ngồi xuống bàn phím. Tò mò, bạn quyết định tìm hiểu xem xác suất chính là gì để giúp con khỉ viết Hamlet hoàn toàn.

Thử thách của bạn là tính toán xác suất cho mỗi ký tự để đoạn văn được gõ với số lượng ký tự ít nhất.

Dưới đây là danh sách tất cả các nhân vật bạn nên hợp nhất:

qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"':;.()?,

Dòng mới và không gian được bao gồm trong danh sách trên. Bạn chỉ phải sử dụng các ký tự trong danh sách, giảm giá tất cả các ký tự khác (xóa chúng khỏi đoạn văn).

Chương trình phải là một chương trình với đoạn được cung cấp qua STDIN. Đầu ra phải là STDOUT.

Vì đây là một thử thách Rosetta Stone, bạn phải viết càng nhiều chương trình bằng các ngôn ngữ khác nhau càng tốt.

Để giành chiến thắng, bạn cần có mã ngắn nhất trong số nhiều ngôn ngữ nhất.

Trường hợp kiểm tra 1

Tôi sẽ so sánh bạn với một ngày hè?
Ngươi thật đáng yêu và ôn hòa hơn:
Những cơn gió gồ ghề làm rung chuyển những nụ yêu của tháng Năm,
và mùa hè cho thuê quá ngắn

Câu trả lời:

{
'\n': 0.017543859649122806,
' ': 0.16959064327485379,
'!': 0.0,
'"': 0.0,
"'": 0.011695906432748537,
'(': 0.0,
')': 0.0,
',': 0.0058479532163742687,
'.': 0.0,
'0': 0.0,
'1': 0.0,
'2': 0.0,
'3': 0.0,
'4': 0.0,
'5': 0.0,
'6': 0.0,
'7': 0.0,
'8': 0.0,
'9': 0.0,
':': 0.0058479532163742687,
';': 0.0,
'?': 0.0058479532163742687,
'A': 0.0058479532163742687,
'B': 0.0,
'C': 0.0,
'D': 0.0,
'E': 0.0,
'F': 0.0,
'G': 0.0,
'H': 0.0,
'I': 0.0058479532163742687,
'J': 0.0,
'K': 0.0,
'L': 0.0,
'M': 0.0058479532163742687,
'N': 0.0,
'O': 0.0,
'P': 0.0,
'Q': 0.0,
'R': 0.0058479532163742687,
'S': 0.0058479532163742687,
'T': 0.0058479532163742687,
'U': 0.0,
'V': 0.0,
'W': 0.0,
'X': 0.0,
'Y': 0.0,
'Z': 0.0,
'a': 0.08771929824561403,
'b': 0.0058479532163742687,
'c': 0.0058479532163742687,
'd': 0.046783625730994149,
'e': 0.093567251461988299,
'f': 0.0058479532163742687,
'g': 0.011695906432748537,
'h': 0.052631578947368418,
'i': 0.011695906432748537,
'j': 0.0,
'k': 0.0058479532163742687,
'l': 0.046783625730994149,
'm': 0.046783625730994149,
'n': 0.023391812865497075,
'o': 0.070175438596491224,
'p': 0.011695906432748537,
'q': 0.0,
'r': 0.052631578947368418,
's': 0.052631578947368418,
't': 0.058479532163742687,
'u': 0.029239766081871343,
'v': 0.0058479532163742687,
'w': 0.0058479532163742687,
'x': 0.0,
'y': 0.017543859649122806,
'z': 0.0
}

Trường hợp thử nghiệm 2

Bốn điểm và bảy năm trước, cha chúng ta đã mang đến cho lục địa này một quốc gia mới, được hình thành trong tự do và dành riêng cho đề xuất rằng tất cả mọi người đều được tạo ra như nhau.

Bây giờ chúng tôi đang tham gia vào một cuộc nội chiến lớn, kiểm tra xem quốc gia đó, hay bất kỳ quốc gia nào được quan niệm và tận tâm như vậy, có thể chịu đựng được lâu dài. Chúng tôi được gặp trên một chiến trường vĩ đại của cuộc chiến đó. Chúng tôi đã đến để dành một phần của lĩnh vực đó, như một nơi an nghỉ cuối cùng cho những người ở đây đã cho cuộc sống của họ rằng quốc gia đó có thể sống. Nó hoàn toàn phù hợp và đúng đắn mà chúng ta nên làm điều này.

Câu trả lời:

{
'\n': 0.0036036036036036037,
' ': 0.18018018018018017,
'!': 0.0,
'"': 0.0,
"'": 0.0,
'(': 0.0,
')': 0.0,
',': 0.010810810810810811,
'.': 0.0090090090090090089,
'0': 0.0,
'1': 0.0,
'2': 0.0,
'3': 0.0,
'4': 0.0,
'5': 0.0,
'6': 0.0,
'7': 0.0,
'8': 0.0,
'9': 0.0,
':': 0.0,
';': 0.0,
'?': 0.0,
'A': 0.0,
'B': 0.0,
'C': 0.0,
'D': 0.0,
'E': 0.0,
'F': 0.0018018018018018018,
'G': 0.0,
'H': 0.0,
'I': 0.0018018018018018018,
'J': 0.0,
'K': 0.0,
'L': 0.0,
'M': 0.0,
'N': 0.0018018018018018018,
'O': 0.0,
'P': 0.0,
'Q': 0.0,
'R': 0.0,
'S': 0.0,
'T': 0.0,
'U': 0.0,
'V': 0.0,
'W': 0.0036036036036036037,
'X': 0.0,
'Y': 0.0,
'Z': 0.0,
'a': 0.082882882882882883,
'b': 0.0054054054054054057,
'c': 0.025225225225225224,
'd': 0.03783783783783784,
'e': 0.10270270270270271,
'f': 0.016216216216216217,
'g': 0.023423423423423424,
'h': 0.041441441441441441,
'i': 0.057657657657657659,
'j': 0.0,
'k': 0.0,
'l': 0.027027027027027029,
'm': 0.0072072072072072073,
'n': 0.063063063063063057,
'o': 0.066666666666666666,
'p': 0.010810810810810811,
'q': 0.0018018018018018018,
'r': 0.050450450450450449,
's': 0.028828828828828829,
't': 0.093693693693693694,
'u': 0.010810810810810811,
'v': 0.014414414414414415,
'w': 0.014414414414414415,
'x': 0.0,
'y': 0.0054054054054054057,
'z': 0.0
}

Xem lý thuyết ở đây .

Bảng xếp hạng

C - 371 - Gerwin Dox
Java - 788 - Luminous

18
Tiếng Anh không phải là tiếng mẹ đẻ của tôi nên có thể tôi thiếu kỹ năng hiểu nhưng sau khi đọc thử thách hai lần, tôi vẫn không hiểu bạn đang hỏi gì.
Michael M.

1
Theo những gì tôi hiểu, chúng tôi phải ánh xạ từng ký tự có thể in thành xác suất để ký tự đó không hiển thị khi nhấn phím tương ứng. Các xác suất phải được điều chỉnh sao cho khi nhấn các phím ngẫu nhiên (khỉ trên bàn phím), văn bản (đầy đủ?) Của Hamlet sẽ hiển thị càng sớm càng tốt. Tôi đã hiểu đúng chưa?
karhell

2
Bạn đang yêu cầu chúng tôi đếm số lần mỗi ký tự xuất hiện và chia cho tổng số ký tự, có hiệu quả phân phối các ký tự trong văn bản không? Rõ ràng nếu con khỉ gõ những xác suất này, nó sẽ có cơ hội thành công lớn nhất. Nếu đó không phải là nó, tôi không biết bạn đang yêu cầu gì.
Cấp sông St

3
Chương trình hay chức năng? Định dạng đầu vào: đối số, stdin hoặc tập tin? Định dạng đầu ra: mảng hoặc thiết bị xuất chuẩn? Và quan trọng nhất, chúng ta có phải chỉ bao gồm các ký hiệu được yêu cầu hay chúng ta có thể bao gồm mọi thứ từ !(33) đến z(122) hoặc ~(126) không? Khi chúng ta chia cho tổng số ký tự, bạn có thể chỉ cần chia cho độ dài của đầu vào hay chúng ta phải loại trừ các ký tự không có trong danh sách (khoảng trắng, v.v.)?
Cấp sông St

2
Có gì chính xác các chỉ tiêu chiến thắng là gì? Trước đây đã có một vài cơ chế tính điểm khác nhau cho [đá Rosetta] và không có một mặc định nào theo như tôi biết.
Geobits

Câu trả lời:


1

Java 788 743

Biên tập

Tìm thấy rất nhiều tôi có thể chơi golf xuống. Đã thay thế toàn bộ các từ w / chữ cái, phương thức được thực hiện để đưa các khóa vào HashMapvà di chuyển tất cả các biến số nguyên sang một khai báo.


Không mong đợi điều này để đánh bại bất kỳ hồ sơ, nhưng oh tốt. Phiên bản này YÊU CẦU bạn nhập số lượng dòng đầu vào mà bạn cung cấp vì java thích chặn bất kỳ phương thức nào nhận đầu vào.

Ví dụ sẽ là:

4
Tôi có nên so sánh bạn với một ngày hè không?
Ngươi thật đáng yêu và ôn hòa hơn:
Những cơn gió gồ ghề làm rung chuyển những nụ yêu của tháng Năm,
và mùa hè cho thuê quá ngắn

import java.util.*;class A{static HashMap<Character,Double>m=new HashMap<Character,Double>();public static void main(String[]g){Scanner s=new Scanner(System.in);int n,k,e,i='@';for(;i++<'[';)g((char)i);for(i='`';i++<'{';)g((char)i);for(i='/';i++<':';)g((char)i);char[]r={' ','!','"','\'',':',';','.','(',')','?',','};p(r);e=s.nextInt();s.nextLine();String l="";n=0;k=0;while(k<e){l=s.nextLine();for(i=0;i<l.length();i++){char c=l.charAt(i);m.put(c,m.get(c)+1);n++;}k++;n++;}m.put('\n',(double)(e-1));for(Iterator b=m.entrySet().iterator();b.hasNext();){Map.Entry p=(Map.Entry)b.next();System.out.println(p.getKey()+" = "+((double)p.getValue())/(n-1));b.remove();}}static void p(char[]a){for(char b:a)g(b);}static void g(char a){m.put(a,0.0);}}

Vô duyên

import java.util.*;
class A{
static HashMap<Character,Double>m=new HashMap<Character,Double>();
public static void main(String[]g){
    Scanner s=new Scanner(System.in);
    int n,k,e,i='@';
    for(;i++<'[';)g((char)i);
    for(i='`';i++<'{';)g((char)i);
    for(i='/';i++<':';)g((char)i);
    char[]r={' ','!','"','\'',':',';','.','(',')','?',','};
    p(r);
    e=s.nextInt();
    s.nextLine();
    String l="";
    n=0;
    k=0;
    while(k<e){
        l=s.nextLine();
        for(i=0;i<l.length();i++){
            char c=l.charAt(i);
            m.put(c,m.get(c)+1);
            n++;
        }
        k++;
        n++;
    }
    m.put('\n',(double)(e-1));
    for(Iterator b=m.entrySet().iterator();b.hasNext();){
        Map.Entry p=(Map.Entry)b.next();
        System.out.println(p.getKey()+" = "+((double)p.getValue())/(n-1));
        b.remove();
    }
}
static void p(char[]a){
    for(char b:a)g(b);
}
static void g(char a){
    m.put(a,0.0);
}

}


0

C, 324 byte (ai đó có thể kiểm tra điều đó cho tôi không?)

Có lẽ tôi cần phải chia sẻ lại phương pháp của mình, nó hơi dài.

main(){char*d="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!\"':;.()?,\n ",*p,*s,*c=calloc(1,1000),*r=c;int n=-1;do{scanf("%c",++r);for(p=d;*p;p++)n+=*p==*r?1:0;}while(*((short*)(r-1))!=2570);p=d;for(;*p;p++){int q=0;for(s=c;*(s+1);s++)q+=(*s==*p?1:0);printf("'%c':%f\n",*p-10?*p:244,(float)q/n);}free(c);}

Ngoài ra, tôi có thể chứng minh rằng nó hoạt động.


Tôi đếm 371 byte
Phân rã Beta

Từ Microsoft nói là 321 (dĩ nhiên không có dấu cách)
Gerwin

Vâng, bạn cần một số không gian: intn=-1không hoạt động.
urzeit

Tôi chỉ cần 3 người trong số họ :)
Gerwin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.