Affen an einer Schreibmaschine


8

Wenn Sie eine Taste auf einer Tastatur drücken, wird der Buchstabe manchmal nicht immer auf dem Bildschirm angezeigt. Unabhängig davon, ob dies auf eine zweifelhafte Verbindung oder auf andere Weise zurückzuführen ist, haben Sie beschlossen, ein Skript zu schreiben, um die Wahrscheinlichkeit zu steuern, dass ein Buchstabe auf dem Bildschirm angezeigt wird, wenn die entsprechende Taste gedrückt wird.

Eines Tages beschließen Sie, einen Affen zu kaufen und ihn an eine Tastatur zu setzen. Wenn Sie neugierig sind, entscheiden Sie sich herauszufinden, welche Schlüsselwahrscheinlichkeiten es sind, dem Affen zu helfen, Hamlet in seiner Gesamtheit zu schreiben.

Ihre Herausforderung besteht darin, die Wahrscheinlichkeiten für jedes Zeichen so zu berechnen, dass die Passage mit der geringsten Anzahl von Zeichen eingegeben wird.

Hier ist eine Liste aller Zeichen, die Sie konsolidieren sollten:

qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"':;.()?,

Zeilenumbrüche und Leerzeichen sind in der obigen Liste enthalten. Sie dürfen nur die Zeichen in der Liste verwenden und alle anderen Zeichen rabattieren (entfernen Sie sie aus der Passage).

Das Programm muss ein Programm sein, dessen Passage über STDIN geliefert wird. Der Ausgang muss STDOUT sein.

Da dies eine Rosetta Stone-Herausforderung ist, müssen Sie so viele Programme wie möglich in verschiedenen Sprachen schreiben.

Um zu gewinnen, müssen Sie den kürzesten Code in den meisten Sprachen haben.

Testfall 1

Soll ich dich mit einem Sommertag vergleichen?
Du bist schöner und gemäßigter:
Starke Winde schütteln die süßen Knospen des Monats Mai,
und der Sommerpachtvertrag hat ein allzu kurzes Datum

Antworten:

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

Testfall 2

Vor vier Punkten und sieben Jahren haben unsere Väter auf diesem Kontinent eine neue Nation hervorgebracht, die in Freiheit konzipiert und dem Vorschlag gewidmet ist, dass alle Menschen gleich geschaffen werden.

Jetzt befinden wir uns in einem großen Bürgerkrieg und prüfen, ob diese Nation oder eine so konzipierte und engagierte Nation lange Bestand haben kann. Wir werden auf einem großen Schlachtfeld dieses Krieges getroffen. Wir sind gekommen, um einen Teil dieses Feldes als letzte Ruhestätte für diejenigen zu widmen, die hier ihr Leben gaben, damit diese Nation leben kann. Es ist insgesamt angemessen und angemessen, dass wir dies tun.

Antworten:

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

Siehe die Theorie hier .

Bestenliste

C - 371 - Gerwin Dox
Java - 788 - Luminous

18
Englisch ist nicht meine Muttersprache, daher fehlt mir vielleicht das Verständnis, aber nachdem ich die Herausforderung zweimal gelesen habe, verstehe ich immer noch nicht, was Sie fragen.
Michael M.

1
Soweit ich weiß, sollen wir jedes druckbare Zeichen einer Wahrscheinlichkeit zuordnen, dass dieses Zeichen nicht angezeigt wird, wenn die entsprechende Taste gedrückt wird. Die Wahrscheinlichkeiten müssen so angepasst werden, dass beim zufälligen Drücken von Tasten (Affe auf der Tastatur) der (vollständige?) Text von Hamlet so schnell wie möglich angezeigt wird. Habe ich das richtig verstanden?
Karhell

2
Bitten Sie uns, die Häufigkeit des Auftretens jedes Zeichens zu zählen und durch die Gesamtzahl der Zeichen zu dividieren, um die Verteilung der Zeichen im Text effektiv zu bestimmen? Wenn der Affe mit diesen Wahrscheinlichkeiten tippte, hätte er offensichtlich die größten Erfolgschancen. Wenn das nicht so ist, habe ich keine Ahnung, wonach Sie fragen.
Level River St

3
Programm oder Funktion? Eingabeformat: Argument, Standard oder Datei? Ausgabeformat: Array oder Standardausgabe? Und was am wichtigsten ist: Müssen wir nur die erforderlichen Symbole einfügen, oder können wir alles von !(33) bis z(122) oder ~(126) einschließen ? Wenn wir durch die Gesamtzahl der Zeichen dividieren, ist es in Ordnung, einfach durch die Länge der Eingabe zu dividieren, oder müssen wir die Zeichen ausschließen, die nicht in der Liste enthalten sind (Leerzeichen usw.)?
Level River St

2
Was genau sind die Gewinnkriterien? In der Vergangenheit gab es einige unterschiedliche Bewertungsmechanismen für [Rosettastein], und meines Wissens gibt es keine Standardeinstellung.
Geobits

Antworten:


1

Java 788 743

Bearbeiten

Ich habe so viel gefunden, dass ich Golf spielen konnte. Ersetzte ganze Wörter mit Buchstaben, machte eine Methode zum Einfügen von Schlüsseln in die HashMapund verschob alle ganzzahligen Variablen in eine Deklaration.


Ich erwarte nicht, dass dies irgendwelche Rekorde schlägt, aber na ja. In dieser Version müssen Sie eingeben, wie viele Eingabezeilen Sie eingeben, da Java alle Methoden blockiert, die Eingaben vornehmen.

Ein Beispiel wäre also:

4
Soll ich dich mit einem Sommertag vergleichen?
Du bist schöner und gemäßigter:
Starke Winde schütteln die süßen Knospen des Monats Mai,
und der Sommerpachtvertrag hat ein allzu kurzes Datum

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

UnGolfed

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 Bytes (kann jemand das für mich überprüfen?)

Vielleicht muss ich meine Methode nachschärfen, sie ist etwas lang.

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

Ich kann auch beweisen, dass es funktioniert.


Ich zähle 371 Bytes
Beta Decay

Microsoft Word sagt 321 (natürlich ohne Leerzeichen)
Gerwin

Nun, Sie brauchen einige Leerzeichen: intn=-1funktioniert nicht.
Urzeit

Ich brauche nur 3 von ihnen :)
Gerwin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.