Los basicos:
Tendrá que proporcionar un juego de adivinanzas de palabras de nueve niveles en la menor cantidad de caracteres posible (en el idioma que elija).
Las métricas:
- Proporcione una lista de palabras (una palabra por línea, separada por una nueva línea) (por ejemplo,
/usr/share/dict/words
o similar podría hacer). Está bien canalizar un nombre de archivo o la lista de palabras en su solución. - Proporcione 9 niveles con longitud de palabra creciente (palabras con 4 caracteres
->
12 caracteres):
Nivel 1: una palabra aleatoria de la lista de palabras que contiene 4 caracteres Nivel 2: una palabra aleatoria de la lista de palabras que contiene 5 caracteres. ... ... Nivel 8: una palabra aleatoria de la lista de palabras que contiene 11 caracteres. Nivel 9: una palabra aleatoria de la lista de palabras que contiene 12 caracteres.
- En cada nivel, ofusque una palabra elegida al azar de la lista (con una longitud de palabra específica, por supuesto) y reemplace un cierto número de caracteres por el asterisco (
*
). El número de caracteres a reemplazar:current_word_length / 3
(redondear hacia abajo). Aleatorice qué caracteres reemplazar. - Deje que el jugador "adivine" la palabra (solo una
try
por nivel), dé su opinión (correct
owrong
) y dé puntos en consecuencia. Cuando es correcto, el jugador gananumber_of_obfuscated_characters * 10 points
. - Imprime el puntaje actual al final de cada nivel.
El formato (y muestra de E / S):
Asegúrese de seguir el siguiente esquema de formato:
Nivel 1 # encabezado de nivel ======= # g * ek # palabra ofuscada geek # entrada del usuario correcta # conjetura validación puntuación: 10 # puntuación de impresión # # Nivel 2 ======= l * nux linux correcto puntuación: 20 Nivel 3 ======= corrió ** m aleatorio correcto puntuación: 40 ... Nivel 9 ======= sem *** act * ve semiinactivo incorrecto puntuación: 90
Ganador:
La solución más corta (por recuento de caracteres de código). Diviértete jugando al golf!
sem***act*ve
==>semelfactive
Respuestas:
Perl, 180 caracteres
¿Ruby golpeando a Perl? ¡Eso no servirá! :-)
Al igual que la solución Ruby de jsvnm, pero a diferencia del código Perl de Joel Berger, este script toma el nombre de archivo de una lista de palabras como un parámetro de línea de comando. Es decir, debe ejecutarlo así:
Aquí hay una versión de golf:
La declaración
vec($_, rand $n, 8) = 42 while ($= = $n/3) > y/*//
contiene algunos trucos interesantes. Primero, 42 es el código ASCII de un asterisco; Resulta que usarvec
para modificar caracteres individuales en una cadena es más corto que hacerlo consubstr
. En segundo lugar, la variable$=
solo toma valores enteros, por lo que usarla para almacenar la cantidad de letras ocultas me ahorra unint
. Finalmente,y/*//
es una forma corta de contar el número de asteriscos en una cadena usando el operador de transliteración.Editar: guardé 7 caracteres al usar
$@
para almacenar el puntaje dividido entre 10 y agregarle un cero durante la salida (que, pensándolo bien, habría sido más corto que la versión anterior, incluso si hubiera usado una variable normal) .Edición 2: resulta que la incrustación de nuevas líneas literales en las cadenas de salida ahorra un char sobre el enredo
$,
.fuente
Rubí (188)
toma el nombre del archivo para leer palabras como argumento.
fuente
Bash, 350 caracteres
fuente
Perl: 266
o con un poco más de espacio en blanco
¡y creo que con un poco de trabajo podría mejorar!
fuente
R, 363 caracteres
fuente
Python 335
Sé que llego un poco tarde a la fiesta, pero Python no está representado, así que pensé qué diablos:
Y semi-sin golf:
fuente
K, 198
Asume un diccionario d en el directorio de trabajo actual.
Sin golf:
fuente