Tengo cien bóvedas, cada una dentro de otra. Cada bóveda tiene una contraseña, que consta de un solo número.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Es demasiado difícil memorizar todas estas contraseñas, y no es seguro guardar las contraseñas en una hoja de papel. La única solución que se me ocurre es utilizar un programa con exactamente cien caracteres. La contraseña de la n
bóveda de seguridad se encontrará tratando los primeros n
caracteres del código como un programa.
Por lo tanto, el primer carácter del programa, si se ejecuta como un programa por sí mismo, debe salir 95
. Los primeros dos caracteres por sí mismos deben salir 43
. Todo el programa debe salir 97
.
Admito que esto es realmente difícil. Así que haz lo mejor que puedas. Intente hacer que su programa funcione para la mayor cantidad de bóvedas posible , y memorizaré las contraseñas para el resto.
Reglas
- Si hay un empate, el ganador es la presentación más temprana.
- Lagunas estándar prohibidas. Eso incluye leer de otros archivos o de Internet.
- Tienes algunas opciones para el código:
- Un programa completo que imprime el número correcto.
- Una función que lo devuelve o lo imprime.
- Una expresión que lo evalúa (por ejemplo, en C,
4+3
evalúa a7
)
- Usted puede suponer un entorno REPL
- Usted puede utilizar diferentes técnicas para cada valor de
n
. Por ejemplo, puede usar diferentes idiomas para cada unon
o, a veces, usar un programa completo y, a veces, una función.
Nota: Este escenario es completamente ficticio. Si tiene un problema similar, no publique sus contraseñas en línea.
The only solution I can think of is to use a program with exactly one hundred characters.
¿Esto significa que cada programa tiene que tener exactamente 100 caracteres?Respuestas:
> <> (Pez), 95
Comenzando después de que
'
pone todos los personajes en la pila y al final de la línea se envuelve; cierra la cadena con el mismo'
; genera la parte superior de la pila como un número (n
) y finaliza la ejecución (;
).Los caracteres para 13 y 10 se cambiaron al espacio para no arruinar el diseño del código (ya que el pez es un lenguaje 2D).
Algunos ASCII no imprimibles desaparecen en la respuesta. Programa correcto aquí.
Gracias por Martin Büttner y Sp3000 por las mejoras de 2 y 5 bytes.
Volcado hexadecimal:
fuente
'
para analizar cadenas, solo"
, y hay múltiples"
s en el programa que deberían ser reemplazados./fish.py <(head -c 99 raw.php)
donderaw.php
está el nombre que de alguna manera terminó en el archivo fuente que descargué. ¡Ordenado! No puedo decir que lo entiendo todavía ...CJam, 40
Simplemente utilicé un enfoque codicioso (la mayoría de las veces) para imprimir el siguiente número posible (los puntos marcados finalizan correctamente):
Los siguientes números se imprimen correctamente:
Pruébalo aquí.
fuente
CJam, 56
Aquí hay un enfoque algo más elaborado. Imprime los últimos 56 números correctamente:
Lo más probable es que SE se haya tragado algunos personajes, así que aquí hay un pastebin . Puedes probar el código aquí .
Utiliza el hecho de que el desafío solicita los programas en caracteres, por lo que estoy usando caracteres Unicode para codificar los últimos 56 caracteres en una función, que luego deja el elemento correcto en la pila al incrementar una variable en cada invocación y seleccionando el elemento correspondiente. El resto del código simplemente llama a la función repetidamente.
El primer programa correcto es el que termina en el segundo
F
en el código. He jugueteado con la longitud de los caracteres que se codificarán por un tiempo hasta que logre el equilibrio correcto para hacer el mayor uso posible. Uno o dos más podrían ser posibles con este enfoque.fuente
Pyth,
9293El código anterior obviamente estará en mal estado porque SE elimina los caracteres de control, así que encuentre el código real aquí
La lógica es simple, la cadena es la representación de caracteres de cada número, a excepción de los primeros 3 que son utilizados por la lógica de conversión y algunas comillas y líneas nuevas que reemplacé con caracteres ficticios.
Intentaré aumentar la puntuación aquí.
Pruébalo en línea aquí
fuente
(vintage) C - 88
No hay necesidad de todos estos tontos idiomas de golf dedicados. Mejor volver a los viejos tiempos, antes de que los comedores de quiché y sus tonterías de "programa = algoritmo + datos" arruinaran toda la diversión.
El código es una función C, almacenada como una cadena.
Devuelve el valor binario como un entero.
Ejecútelo en DosBox con Borland Turbo C 2.0.
No hay caracteres de control en la cadena, por lo que debería funcionar un copiar y pegar.
Compilar con el
tiny
modelo de memoria o de lo contrario ...Si desarma el inicio de la cadena, verá algo como:
ya que
si
se usa como dirección de función, apunta directamente al código, seguido de las contraseñas.Todos los valores se desplazan por 35 para evitar el escape de caracteres de control y comillas dobles.
El código tiene una longitud de 11 bytes, por lo que funcionará con hasta 12 caracteres.
Desafortunadamente, el undécimo valor (34) es demasiado bajo para generar una contraseña válida con un valor de cambio aumentado (
ret
código de operación es 195, por lo que necesitaría un cambio de 161, y el cambio máximo para evitar un vuelco es 255-99 = 156) .11 caracteres producirán un valor incorrecto, y su PC virtual experimentará comportamientos indefinidos severos (y generalmente letales) con 10 caracteres o menos.
fuente
Matlab
3739Puede usar parte (sin punto y coma) de esta idea con cualquier lenguaje de programación que desee, que imprima los resultados directamente en la consola. Esto producirá al menos 39 veces las respuestas correctas. (No verifiqué aquellos en los que solo un medio número podría dar una respuesta correcta, pero he encontrado dos hasta ahora).
fuente
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- solo muestra 28 partidos‌​
después00+
012345679+-*;
Fuera de la competencia: Javascript, 173
Aquí hay una "solución", que no sigue las reglas en el sentido de que contiene un programa mucho más largo de lo requerido, pero con una longitud base de 152 caracteres
95
, y por cada carácter numérico subsiguiente agregado, hasta 22 , mostrará una contraseña adicional:Lamentablemente, solo funciona con hasta 22 caracteres (al menos en el nodo REPL, cualquier cosa anterior que parezca ignorada), lo que creo que es una limitación de la representación de números en el idioma. Si no fuera por esta limitación, usar la cadena de contraseña completa de
(llevando la longitud total a 329 caracteres) permitiría que esta lógica muestre cada contraseña.
El código no es particularmente inteligente, solo elimina algunos caracteres en comparación con las soluciones más triviales, usando:
Principalmente, estaba interesado en escribir un programa Javascript que sea válido con una longitud variable, ya que el idioma no es muy adecuado para el golf en general.
Soy nuevo en codegolf, pido disculpas si publicar estas soluciones claramente inválidas está mal visto.
fuente
Pitón 2, 39
Escribí un script que prueba muchas combinaciones de expresiones y las prueba contra las combinaciones seguras. Lo mejor que pude manejar fue 39 partidos. Me sorprendió cuántas combinaciones dieron como resultado la puntuación de 39. He incluido una muestra en mi respuesta.
Intenté incluir los
^&|
operadores lógicos pero las reglas de precedencia se complicaron.fuente
DEBUG.COM, 93
Uso:
y el resultado aparece en
AL
fuente