Monyet di Mesin Ketik

8

Terkadang ketika Anda menekan tombol pada keyboard, huruf tidak selalu ditampilkan di layar. Apakah ini karena koneksi yang cerdik atau sebaliknya, Anda telah memutuskan untuk menulis skrip untuk mengontrol kemungkinan surat ditampilkan di layar ketika tombol yang sesuai ditekan.

Suatu hari, Anda memutuskan untuk membeli monyet dan duduk di keyboard. Menjadi penasaran, Anda memutuskan untuk mencari tahu apa probabilitas utama untuk membantu monyet menulis Hamlet secara keseluruhan.

Tantangan Anda adalah menghitung probabilitas untuk setiap karakter sehingga bagian tersebut diketik dalam jumlah karakter paling sedikit.

Berikut daftar semua karakter yang harus Anda konsolidasi:

qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"':;.()?,

Baris baru dan spasi termasuk dalam daftar di atas. Anda hanya harus menggunakan karakter dalam daftar, mendiskon semua karakter lain (menghapusnya dari bagian).

Program harus merupakan program dengan bagian yang disediakan melalui STDIN. Outputnya harus STDOUT.

Karena ini adalah tantangan Rosetta Stone, Anda harus menulis sebanyak mungkin program dalam berbagai bahasa.

Untuk menang, Anda harus memiliki kode terpendek dalam jumlah bahasa terbanyak.

Test case 1

Haruskah aku membandingkanmu dengan hari musim panas?
Engkau lebih cantik dan lebih beriklim:
Angin kencang mengguncang tunas-tunas kesayangan Mei,
Dan sewa musim panas terlalu singkat untuk kencan

Menjawab:

{
'\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
}

Uji kasus 2

Empat skor dan tujuh tahun yang lalu ayah kita melahirkan di benua baru ini sebuah negara baru, diciptakan dalam kebebasan, dan didedikasikan untuk proposisi bahwa semua manusia diciptakan sama.

Sekarang kita terlibat dalam perang saudara yang hebat, menguji apakah negara itu, atau negara mana pun yang dikandung dan dipersembahkan, dapat bertahan lama. Kami bertemu di medan perang besar dari perang itu. Kami datang untuk mendedikasikan sebagian dari ladang itu, sebagai tempat peristirahatan terakhir bagi mereka yang di sini memberikan hidup mereka agar bangsa itu dapat hidup. Sangat tepat dan patut kita melakukan ini.

Menjawab:

{
'\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
}

Lihat teorinya di sini .

Papan peringkat

C - 371 - Gerwin Dox
Java - 788 - Luminous
Peluruhan Beta
sumber
18
Bahasa Inggris bukan bahasa ibu saya jadi mungkin saya kurang memiliki keterampilan memahami tetapi setelah membaca tantangan dua kali, saya masih tidak mengerti apa yang Anda tanyakan.
Michael M.
1
Dari apa yang saya mengerti, kita seharusnya memetakan setiap karakter yang dapat dicetak ke probabilitas karakter yang tidak ditampilkan ketika tombol yang sesuai ditekan. Probabilitas harus diubah sehingga ketika menekan tombol secara acak (monyet pada keyboard) teks (penuh?) Hamlet muncul sesegera mungkin. Apakah saya benar?
karhell
2
Apakah Anda meminta kami menghitung berapa kali setiap karakter muncul dan membaginya dengan jumlah total karakter, yang secara efektif memberikan distribusi karakter dalam teks? Jelas sekali jika si monyet mengetik dengan probabilitas-probabilitas ini, ia akan memiliki peluang sukses terbesar. Jika bukan itu, saya tidak tahu apa yang Anda minta.
Level River St
3
Program atau fungsi? Format input: argumen, stdin atau file? Format output: array atau stdout? Dan yang paling penting, apakah kita harus memasukkan hanya simbol yang diperlukan, atau bisakah kita memasukkan semuanya dari !(33) hingga z(122) atau ~(126)? Ketika kita membaginya dengan jumlah karakter, apakah boleh untuk membagi dengan panjang input, atau kita harus mengecualikan karakter yang tidak ada dalam daftar (spasi, dll.)?
Level River St
2
Apa sebenarnya kriteria yang menang? Ada beberapa mekanisme penilaian yang berbeda untuk [rosetta-stone] di masa lalu, dan tidak ada standar sejauh yang saya ketahui.
Geobits

Jawaban:

1

Java 788 743

Edit

Ditemukan begitu banyak sehingga saya bisa bermain golf. Mengganti seluruh kata dengan huruf, membuat metode untuk memasukkan kunci HashMap, dan memindahkan semua variabel integer ke satu deklarasi.


Tidak mengharapkan ini untuk mengalahkan rekor apa pun, tapi oh well. Versi ini MEMBUTUHKAN Anda untuk memasukkan berapa baris input yang Anda berikan karena java suka memblokir metode apa pun yang membutuhkan input.

Jadi contohnya adalah:

4
Haruskah aku membandingkan kamu dengan hari musim panas?
Engkau lebih cantik dan lebih beriklim:
Angin kencang mengguncang tunas-tunas kesayangan Mei,
Dan sewa musim panas terlalu singkat untuk kencan

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);}}

Tidak disatukan

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);
}

}

Bercahaya
sumber
0

C, 324 byte (dapatkah seseorang memeriksanya untuk saya?)

Mungkin saya perlu mengubah metode saya, ini agak lama.

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);}

Juga, saya dapat membuktikan bahwa itu berhasil.

Gerwin
sumber
Saya menghitung 371 byte
Peluruhan Beta,
Kata Microsoft mengatakan 321 (tanpa spasi, tentu saja)
Gerwin
Nah, Anda perlu beberapa ruang: intn=-1tidak berfungsi.
urzeit
Saya hanya membutuhkan 3 dari mereka :)
Gerwin