Monos en una máquina de escribir

8

A veces, cuando presiona una tecla en un teclado, la letra no siempre se muestra en la pantalla. Si esto se debe a una conexión dudosa o de otra manera, ha decidido escribir un script para controlar la probabilidad de que se muestre una letra en la pantalla cuando se presiona la tecla correspondiente.

Un día, decides comprar un mono y sentarlo frente al teclado. Siendo curioso, decides averiguar cuáles son las probabilidades clave para ayudar al mono a escribir Hamlet en su totalidad.

Su desafío es calcular las probabilidades para cada personaje para que el pasaje se escriba en el menor número de caracteres.

Aquí hay una lista de todos los personajes que debe consolidar:

qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"':;.()?,

Las líneas nuevas y los espacios se incluyen en la lista anterior. Solo debe usar los caracteres de la lista, descontando todos los demás caracteres (eliminarlos del pasaje).

El programa debe ser un programa con el pasaje suministrado a través de STDIN. La salida debe ser STDOUT.

Dado que este es un desafío de Rosetta Stone, debe escribir tantos programas en diferentes idiomas como sea posible.

Para ganar, debe tener el código más corto en la mayor cantidad de idiomas.

Caso de prueba 1

¿Te comparo con un día de verano?
Eres más encantador y más templado: los
vientos fuertes sacuden los queridos capullos de mayo,
y el contrato de arrendamiento del verano tiene una fecha demasiado corta

Responder:

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

Caso de prueba 2

Hace cuatro años y siete años, nuestros padres dieron a luz en este continente una nueva nación, concebida en libertad, y dedicada a la proposición de que todos los hombres son creados iguales.

Ahora estamos involucrados en una gran guerra civil, probando si esa nación, o cualquier nación tan concebida y tan dedicada, puede perdurar por mucho tiempo. Nos encontramos en un gran campo de batalla de esa guerra. Hemos llegado a dedicar una parte de ese campo, como un lugar de descanso final para aquellos que aquí dieron sus vidas para que esa nación pudiera vivir. Es totalmente apropiado y apropiado que hagamos esto.

Responder:

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

Mira la teoría aquí .

Tabla de clasificación

C - 371 - Gerwin Dox
Java - 788 - Luminous
Decaimiento Beta
fuente
18
El inglés no es mi lengua materna, así que tal vez me faltan habilidades de comprensión, pero después de leer el desafío dos veces, todavía no entiendo lo que estás preguntando.
Michael M.
1
Por lo que entiendo, se supone que debemos asignar cada carácter imprimible a una probabilidad de que ese carácter no se muestre cuando se presiona la tecla correspondiente. Las probabilidades tienen que ajustarse para que al presionar las teclas al azar (¿mono en el teclado) el texto (completo?) De Hamlet aparezca lo antes posible. ¿Lo entendí bien?
karhell
2
¿Nos está pidiendo que cuentemos el número de veces que aparece cada carácter y que lo dividamos por el número total de caracteres, para dar efectivamente la distribución de caracteres en el texto? Obviamente, si el mono tecleara con estas probabilidades, tendría mayores posibilidades de éxito. Si no es así, no tengo idea de lo que está pidiendo.
Level River St el
3
Programa o función? Formato de entrada: argumento, stdin o archivo? Formato de salida: matriz o stdout? Y lo más importante, ¿tenemos que incluir solo los símbolos requeridos, o podemos incluir todo, desde !(33) hasta z(122) o ~(126)? Cuando dividimos por el número total de caracteres, ¿está bien simplemente dividir por la longitud de la entrada, o tenemos que excluir los caracteres que no están en la lista (espacio, etc.)?
Level River St el
2
¿Cuál es exactamente el criterio ganador? Ha habido algunos mecanismos de puntuación diferentes para [rosetta-stone] en el pasado, y no hay un defecto por lo que yo sé.
Geobits

Respuestas:

1

Java 788 743

Editar

Encontré tanto que podía jugar golf. Reemplazó palabras enteras con letras, hizo un método para poner claves en el HashMapy movió todas las variables enteras a una declaración.


No esperaba que esto batiera ningún récord, pero bueno. Esta versión REQUIERE que ingrese cuántas líneas de entrada le está dando, ya que a java le gusta bloquear cualquier método que tome entrada.

Entonces, el ejemplo sería:

4
¿Te comparo con un día de verano?
Eres más encantador y más templado: los
vientos fuertes sacuden los queridos capullos de mayo,
y el contrato de arrendamiento del verano tiene una fecha demasiado corta

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

Sin golf

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

}

Luminoso
fuente
0

C, 324 bytes (¿alguien puede verificar eso por mí?)

Tal vez necesito reafilar mi método, es un poco largo.

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

Además, puedo demostrar que funciona.

Gerwin
fuente
Cuento 371 bytes
Decaimiento Beta
Microsoft Word dice 321 (sin espacios, por supuesto)
Gerwin
Bueno, necesitas algunos espacios: intn=-1no funciona.
urzeit
Solo necesito 3 de ellos :)
Gerwin