Los regalos han sido abiertos. Se han comido los pasteles picados. La Guerra de las Galaxias ha sido vista. La temporada navideña está comenzando a disminuir. Es probable que a estas alturas ya hayas sacado algunas galletas navideñas . Si tiene suerte, en lugar de los habituales juguetes de plástico inútiles, es posible que haya ganado una Calculadora de misterio con la que puede sorprender a sus amigos y familiares .
Este truco consta de 6 cartas cada una con una cuadrícula de números 4x8 impresa en ella. Cada tarjeta contiene un subconjunto diferente de los enteros [1,63]
. El mago le pedirá que elija un número de una tarjeta y mantenga ese número en secreto. El mago entonces preguntará qué cartas tienen ese número. Con ese conocimiento, el mago mágicamente podrá determinar y revelar el número original adivinado.
Imprima el conjunto completo de 6 tarjetas de Mystery Calculator exactamente de la siguiente manera:
1 3 5 7 9 11 13 15
17 19 21 23 25 27 29 31
33 35 37 39 41 43 45 47
49 51 53 55 57 59 61 63
- - - - - - - - - - -
2 3 6 7 10 11 14 15
18 19 22 23 26 27 30 31
34 35 38 39 42 43 46 47
50 51 54 55 58 59 62 63
- - - - - - - - - - -
4 5 6 7 12 13 14 15
20 21 22 23 28 29 30 31
36 37 38 39 44 45 46 47
52 53 54 55 60 61 62 63
- - - - - - - - - - -
8 9 10 11 12 13 14 15
24 25 26 27 28 29 30 31
40 41 42 43 44 45 46 47
56 57 58 59 60 61 62 63
- - - - - - - - - - -
16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
- - - - - - - - - - -
32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55
56 57 58 59 60 61 62 63
La salida puede o no contener una nueva línea final final. No debe haber espacios en blanco al final. Cada tarjeta está separada por 11 -
perforaciones.
- md5sum con nueva línea final:
7aa2d9339b810ec62a2b90c5e11d6f4a
- md5sum sin nueva línea final:
e9abe4e32dca3e8fbfdaa4886fc5efd2
Para aquellos de ustedes con una orientación más de Windows, también permitiré CRLF
terminaciones de línea de estilo. En ese caso, los md5 son:
- md5sum con nueva línea final:
e4f16ff9752eee2cedb5f97c7b5aec6d
- md5sum sin nueva línea final:
78c560eed3b83513e3080117ab5dc5fa
fuente
Respuestas:
Python 2 ,
99969391 bytesSale con un error, que está permitido por defecto .
Pruébalo en línea! o verificar el hash MD5 .
Cómo funciona
Después de inicializar k como 1 , ingresamos un bucle infinito que ejecuta el siguiente código.
tuple(n for n in range(64)if k&n)
crea una tupla de todos los números enteros no negativos por debajo de 64 que tienen allí j ésimo conjunto de bits, donde j es el número de iteración del bucle, es decir, 2 j = k .('%2d '*7+'%2d\n')*4
primero crea la cadena de formato'%2d %2d %2d %2d %2d %2d %2d \n'
, luego la repite cuatro veces. Esta es una plantilla para cada tarjeta, que agrega cada número entero en la tupla a dos caracteres (espacios anteriores), separa cada grupo de 8 números enteros por espacios, y los grupos mismos por saltos de línea.Ahora, la
print
declaración de Python 2 es una bestia curiosa. Toma varias expresiones, separadas por comas, y las imprime una por una. Evalúa la primera expresión, la imprime, evalúa las siguientes expresiones, la imprime, etc. hasta que no quedan más expresiones. A menos que la última expresión sea seguida por una coma, le agrega un salto de línea. Además, antepone un espacio a todas las expresiones, a menos que se impriman al comienzo de una línea.En cada iteración, primero imprimimos el resultado de aplicar la cadena de formato a la tupla. Estamos al comienzo de una línea, por lo que no se antepone espacio.
Luego, (intentamos) imprimir el resultado de
11/(k<32)*' -'
. Si k <32 , esta expresión se evalúa como' - - - - - - - - - - -'
. Nuevamente, estamos al comienzo de una línea, por lo que no se antepone espacio. No hay coma después de esta expresión, por lo queprint
agrega un salto de línea. Sin embargo, en la sexta iteración, k = 2 5 = 32 , por lo que intentar evaluar11/(k<32)*' -'
genera un ZeroDivisionError no capturado . Esto se escapa del ciclo y finaliza el programa inmediatamente.fuente
C (gcc), 105 bytes
fuente
Python 2, 132 bytes
Dividir secuencias es molesto en Python.
Pruébalo en línea .
fuente
Jalea ,
2726 bytesPruébalo en línea! o verificar el hash MD5 .
Cómo funciona
fuente
G
construcción está seriamente dominada para este desafío. Necesitaba unos 10 bytes para hacer lo mismo.Pip ,
494844 bytes43 bytes de código, +1 para
-S
bandera.Pruébalo en línea!
Explicación
fuente
Rubí, 90 bytes.
Sin golf
Bastante sencillo. Lo único que puede requerir una explicación adicional es cuándo seguir un número con una nueva línea en lugar de un espacio. Esto sucede cuando
j+1%16==0
en las primeras cuatro cartas yj+1%8
== 0 en las últimas dos. Por lo tanto, la expresión15>>i/64/4
o equivalente15>>i/256
es AND conj
para determinar si se requiere espacio o nueva línea.fuente
JavaScript (ES6), 150 bytes
fuente
Perl 6 ,
19411686 bytesIntentalo
Intentalo
Intentalo
(revise las secciones de Depuración para los resultados de MD5)
Los dos últimos fueron inspirados / transcritos de las implementaciones de Ruby y C
fuente
05AB1E , 71 bytes
Pruébalo en línea!
Este enfoque, no lo intentes. Probablemente eliminará esto por vergüenza para ser honesto. La manipulación de matrices no es mi fuerte, así que intenté generar fuerza bruta para generar las 6 secuencias y luego bombearlas juntas descuidadamente.
fuente
Lote, 249 bytes
Emite un CRLF final.
fuente
JavaScript (ES6),
103102 bytesMD5: 7AA2D9339B810EC62A2B90C5E11D6F4A
Prueba
Mostrar fragmento de código
fuente
bash / utilidades de Unix,
125124 bytesEditar: se eliminó un ^ innecesario de la expresión regular al final; la expresión regular siempre coincidirá al comienzo de la línea de todos modos.
fuente
PHP, 102 bytes
imprime una nueva línea inicial pero no posterior, y un espacio inicial en cada línea. Ejecutar
-nr
o probarlo en línea .Para PHP <5.6, reemplace
2**$c
con(1<<$c)
. PHP 5.5 podría usar en&~1<<$c?:
lugar de%2**$c||
.Para PHP <5.5, reemplace
"\n"[$n++%8]
con($n++%8?"":"\n")
.Los guiones son un carácter apagado debido al espacio inicial; agregue un espacio al primer
str_pad
parámetro (inserte un espacio antes de la segunda línea de código) para corregirlo.En cambio, eliminar el espacio inicial requiere un poco de violín y tres bytes adicionales:
printf("%c%2d",$n++%8?32:10,++$b%64);
y en23
lugar de25
.Convertir la nueva línea principal en una final le costaría otros tres bytes:
PHP, 109 bytes
coincide con todas las especificaciones y funciona con todas las versiones de PHP.
fuente
Python 2 , 89 bytes
Pruébalo en línea!
Explicación:
fuente
05AB1E , 29 bytes
Puerto de @Emigna respuesta 05AB1E 's aquí , después de lo cual añade código adicional para imprimir de acuerdo con los requisitos de este desafío.
Pruébelo en línea o verifique md5sum .
Explicación:
fuente
JavaScript, 234 bytes.
Escribiré una explicación más tarde.
Si
console.log
es necesario, el recuento de bytes sería de 247 bytes.fuente