Atajos de menú
Tradicionalmente, se puede acceder a los menús de los usuarios mediante métodos abreviados de teclado, como Alt + (a letter)
simplemente presionar la letra cuando todos los cuadros de texto están desenfocados ( estilo gmail ).
Tu tarea
Dadas las entradas del menú como entrada, su tarea es otorgar a cada entrada del menú una letra de acceso directo adecuada.
Escriba una función o un programa que acepte un conjunto de palabras: las entradas del menú (como una matriz de cadenas, o su equivalente en el idioma), y devuelve un diccionario o un hashmap, de una sola letra a una entrada del menú.
Puede usar un parámetro y devolver un valor, o usar el STDIN y enviar sus resultados a STDOUT. Usted está no permite asumir una variable global / alcance ya está poblada con la entrada.
Algoritmo para determinar la letra correcta
- Básicamente es la primera letra disponible de la palabra. Ver supuestos y ejemplos a continuación.
- En caso de que todas las letras de la entrada no estén disponibles, el acceso directo sí lo estará
(a letter) + (a number)
. La letra que eliges de la entrada es arbitraria. El número debe comenzar desde 0 e incrementarse en 1, de modo que todos los accesos directos sean únicos. Ver tercer ejemplo a continuación.
Supuestos
- La entrada será un conjunto, es decir, sin repeticiones, cada entrada es única.
- La longitud de la entrada puede ser cualquier número entero no negativo (hasta MAX_INT de su idioma).
- Sensibilidad a mayúsculas y minúsculas: la entrada distingue mayúsculas de minúsculas (pero se mantendrá única al ignorar mayúsculas y minúsculas) Los resultados deben contener las entradas originales con su carcasa original. Sin embargo, las letras de acceso directo de salida no distinguen entre mayúsculas y minúsculas.
- Todas las palabras de entrada no terminarán con números.
- No se probará ninguna "entrada malvada". La "entrada malvada" es tal que debe incrementar el contador de una letra determinada más de 10 veces.
Ejemplos
Los ejemplos a continuación están en JSON, pero puede usar su equivalente de idioma para una matriz y un Diccionario, o, en caso de que esté usando E / S STD, cualquier formato legible para su entrada y salida (como csv, o incluso espacio- valores separados).
1)
Input: ['File', 'Edit', 'View', 'Help']
Output: {f:'File', e:'Edit', v:'View', h:'Help'}
2)
Input: ['Foo', 'Bar', 'FooBar', 'FooBars']
Output: {f:'Foo', b:'Bar', o:'FooBar', a:'FooBars'}
3)
Input: ['a', 'b', 'aa', 'bb', 'bbq', 'bbb', 'ba']
Output: {a:'a', b:'b', a0:'aa', b0:'bb', q:'bbq', b1:'bbb', b2:'ba'}
Condiciones ganadoras
El código más corto gana. Solo se permite ASCII.
['ab', 'a']
dar{a:'ab', a0:'a'}
o{b:'ab', a:'a'}
?Respuestas:
Javascript ( ES6 )
106105100Esta función toma la entrada como una matriz y genera un objeto javascript.
Resultados:
Sin golf / comentado:
fuente
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaaa', 'aaaaaaaaaaaa']
, pero creo que podemos ignorar estos casos extremos, ¿no?11
? No puede presionar una tecla dos veces en un método abreviado de teclado: PPython 2.x -
176170157114bytesEnfoque muy simple, pero alguien tiene que patear el juego.
Ejemplos:
Creo que la única explicación requerida es el código sin golf. (Esta es realmente la versión original)
fuente
JavaScript (ECMAScript 6) - 107 caracteres
Explicación:
Pruebas:
fuente
PHP> = 5.4 - 149 caracteres
De acuerdo con los estándares de PHP (inserte sniggers aquí) , la entrada no es JSON válida, ya que usa en
'
lugar de"
, así que he sido un poco descarado y estoy usando la entrada como una declaración de variable real:Usando los ejemplos:
Sin golfificar es bastante básico:
fuente
json_encode
invocación).echo
no funciona con matrices; peroprint_r($c);
lo haría, ahorrando 9 bytes.str_split(strtoupper($w))
yucfirst($w[0])
puede resolver eso (+21); o$s=strtoupper($w);
(+18)PowerShell ,
9183 bytesPruébalo en línea!
Lanza una excepción si no se encuentra un acceso directo adecuado.
Desenrollado:
fuente
PHP, 153 bytes
ejecutar con
php-r '<code>' <<EOF
+ Enter +<word1>
+ Enter +<word2>
+ Enter + ... +EOF
+ Entertrabajando en argv para 155 bytes :
corre con
php -r '<code>' <word1> <word2> ...
(-13 bytes con un global definido: en
foreach($i as$w)
lugar deforeach($argv as$i=>$w)if($i)
)fuente