タイプライターでサル


8

キーボードのキーを押しても、文字が常に画面に表示されるとは限りません。これが危険な接続によるものかどうかに関係なく、対応するキーが押されたときに文字が画面に表示される確率を制御するスクリプトを書くことにしました。

ある日、サルを購入してキーボードに座ってみることにしました。好奇心旺盛なあなたは、サルがハムレット全体を書くのを助けるための重要な確率を見つけることに決めました。

課題は、パッセージが最小限の数の文字で入力されるように、各文字の確率を計算することです。

統合する必要があるすべての文字のリストを次に示します。

qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"':;.()?,

上記のリストには改行とスペースが含まれています。リスト内の文字のみを使用して、他のすべての文字を割り引いてください(パッセージから削除)。

プログラムは、STDINを介して提供されるパッセージを含むプログラムである必要があります。出力はSTDOUTでなければなりません。

これはロゼッタストーンの課題であるため、できるだけ多くのプログラムを異なる言語で作成する必要があります。

勝つためには、多くの言語で最も短いコードが必要です。

テストケース1

あなたと夏の日を比較してみましょうか。
あなたはもっと可愛くて温帯です:
荒れた風は5月の最愛のつぼみを揺さぶります、
そして夏のリースはあまりにも短い日付です

回答:

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

テストケース2

4スコア、7年前、私たちの父親はこの大陸に自由を構想し、すべての人が平等に創造されるという命題に捧げられた新しい国を生み出しました。

現在、私たちは大きな内戦に従事しており、その国、またはそのように構想され、献身的な国が長続きするかどうかをテストしています。その戦争の偉大な戦場で出会った。私たちは、その分野の一部を、その国が生きることをここに命を与えた人々のための最後の休息場所として捧げるようになりました。私たちがこれを行うべきであるということは、全体として適切で適切です。

回答:

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

こちらの理論をご覧ください

リーダーボード

C - 371 - Gerwin Dox
Java - 788 - Luminous

18
英語は私の母国語ではないので、理解力が足りないのかもしれませんが、課題を2回読んだ後でも、あなたの質問が理解できません。
マイケルM.

1
私が理解していることから、印刷可能な各文字を、対応するキーが押されたときにその文字が表示されない確率にマッピングすることになっています。確率を調整して、ランダムにキーを押すと(キーボードの猿)、ハムレットの(完全?)テキストができるだけ早く表示されるようにします。私はそれを正しく理解しましたか?
Karhell 2014年

2
各文字の出現回数をカウントし、文字の総数で除算して、テキスト内の文字の分布を効果的に求めてください。明らかに、サルがこれらの確率でタイピングした場合、彼は成功する可能性が最も高くなります。それがそうでなければ、私はあなたが何を求めているのか分かりません。
Level River St

3
プログラムまたは機能?入力形式:引数、標準入力、またはファイル?出力形式:配列またはstdout?そして最も重要なこととして、必要な記号のみを含める必要がありますか、それとも!(33)からz(122)または~(126)までのすべてを含めることができますか?全文字数で除算する場合、単純に入力の長さで除算してもいいですか、それともリストにない文字(スペースなど)を除外する必要がありますか?
Level River St

2
勝者の基準は正確には何ですか?[rosetta-stone]には過去にいくつかの異なるスコアリングメカニズムがあり、私が知る限り、デフォルトはありません。
Geobits 2014年

回答:


1

Java 788 743

編集する

ゴルフができるほどたくさん見つけました。文字付きの単語全体を置き換え、キーをに入れる方法を作成し、HashMapすべての整数変数を1つの宣言に移動しました。


これがどんな記録にも勝るとは思っていませんが、まあ。このバージョンでは、Javaは入力を受け取るメソッドをブロックするのが好きなので、何行の入力を入力する必要があります。

したがって、例は次のようになります。

4
あなたを夏の日と比較しましょうか。
あなたはもっと可愛くて温帯です:
荒れた風は5月の最愛のつぼみを揺さぶります、
そして夏のリースはすべて日付が短すぎます

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

アンゴルフ

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バイト(誰かが私に確認してもらえますか?)

たぶん私は自分の方法を再調整する必要があります、それは少し長いです。

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

また、動作することを証明できます。


371バイトを数える
Beta Decay 2014年

Microsoftの言葉によると、321(もちろんスペースなし)
Gerwin

まあ、あなたはいくつかのスペースが必要です:intn=-1動作しません。
urzeit 2014年

私はそれらのうち3つだけ必要です:)
Gerwin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.