Esta es la secuela de este desafío de Adnan . Si te gusta este desafío, es probable que también te guste el otro. ¡Echale un vistazo!
Una prueba de elección múltiple con 8 preguntas cada uno con 4 opciones podría tener las respuestas: BCADBADA
. Convertido a cuatro matrices diferentes, con verdadero y falso si la letra actual es la respuesta, se verá así
Q#: 1 2 3 4 5 6 7 8
B C A D B A D A
A: [0, 0, 1, 0, 0, 1, 0, 1]
B: [1, 0, 0, 0, 1, 0, 0, 0]
C: [0, 1, 0, 0, 0, 0, 0, 0]
D: [0, 0, 0, 1, 0, 0, 1, 0]
Esto se puede comprimir usando un poco de lógica. Cada una de las opciones A
, B
, C
y D
puede ser representado por dos valores verdadero / falso se muestra a continuación:
A: 1 0
B: 0 1
C: 0 0
D: 1 1
Usando esta lógica, podemos comprimir los cuatro vectores anteriores a solo dos:
1 2 3 4 5 6 7 8
B C A D B A D A
[0, 0, 1, 1, 0, 1, 1, 1]
[1, 0, 0, 1, 1, 0, 1, 0]
Es decir, la solución a su prueba es simplemente: 00110111
, 10011010
. Al concatenar estos, obtenemos el número binario
0011011110011010
, o 14234
en decimal. ¡Usa este valor decimal para hacer trampa en tu prueba!
Reto
Tome un número N
en el rango (incluido) [0, 65535]
y envíe una cadena con la respuesta a la prueba de opción múltiple.
Casos de prueba:
14234
BCADBADA
38513
ABBDCAAB
0
CCCCCCCC
120
CBBBBCCC
65535
DDDDDDDD
39253
ABCDABCD
La salida puede estar en mayúsculas o minúsculas, pero no puede usar otros símbolos.
fuente
A=10, B=01
, entoncesC=nor(A,B)
, yD=and(A,B)
, inspirado por el desafío de Adnan. En retrospectiva, podría haber sido mejor hacerlo al revés, pero bueno ... Demasiado tarde ahora ...Respuestas:
Jalea , 14 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
05AB1E ,
191816 bytesCódigo:
Utiliza la codificación CP-1252 . Pruébalo en línea!
Explicación:
Primero, agregamos
65536
al número (žH
es una constante definida para65536
), que también está10000000000000000
en binario. Esto es para rellenar el número con ceros. Tomemos el número14234
como ejemplo.14234 + 65536
es igual a79770
. Que en binario es:Eliminamos el primer carácter, lo que resulta en:
Dividimos la cuerda en dos pedazos usando
2ä
:Después de eso, comprimimos la matriz con
ø
:Convertirlos nuevamente a decimal (usando
C
) da como resultado:Ahora, solo necesitamos indexarlo con la cadena
cbad
. La versión comprimida para esta cadena es’c‰±’
, que también se puede probar aquí . Finalmente, obtenemos los caracteres en el índice de la matriz anterior. Para el ejemplo anterior, esto da como resultado:fuente
JavaScript (ES6),
5548 bytesVersión no recursiva (55 bytes)
Usando una expresión regular, podemos hacer:
fuente
Python 2, 53 bytes
Pruébalo en Ideone .
fuente
(n&257)%127
pero es más largo. Lástima que 127 es primo. Quizás puedas pensar en una forma de optimizarlo.Conjunto CP-1610 , 24 DECLE (30 bytes)
Este código está destinado a ejecutarse en una Intellivision . (1)
Un código de operación CP-1610 está codificado con un valor de 10 bits, conocido como 'DECLE'. La función real es de 24 DECLEs de largo, comenzando en
$4809
y terminando en$4820
.Sin embargo los registros de la CPU son de 16 bits de ancho, por lo que apoyará cualquier valor de entrada en
0x0000
..0xFFFF
.Salida
(1) Dado que al menos un compilador, varios emuladores y archivos ROM de reemplazo libres de derechos de autor están disponibles gratuitamente, creo que no infringe ninguna regla de envío de PPCG. Pero por favor avíseme si me equivoco.
fuente
CJam , 22 bytes
Pruébalo en línea!
Explicación
Impulsado por la magia ...
La asignación de pares de bits a letras en este desafío es un poco arbitraria. Si representamos
ABCD
por0, 1, 2, 3
(para poder agregarlos al carácterA
), entonces queremos la siguiente asignación:Este mapeo se puede calcular con una pequeña fórmula mágica:
((i1 == i2) + 1) ^ i1
donde el control de igualdad regresa0
o1
. Consulte la siguiente tabla, donde cada columna corresponde a una entrada, cada fila corresponde a una operación y cada celda mostrará la pila en ese punto:Con eso en mente, aquí está el desglose completo del código fuente:
Una solución alternativa con el mismo número de bytes que es decididamente menos mágica:
Y en caso de que sea útil para cualquier persona, si a su vez el
i1
yi2
bits de nuevo en un solo número (es decir, cuando se desea el mapeo0 -> 2, 1 -> 1, 2 -> 0, 3 -> 3
) esto puede ser calculada aún más fácilmente como(~n - 1) & 3
o(~n - 1) % 4
si su lengua se pone módulo en valores negativos derecha. Creo que esto se puede escribir de manera concisa como3&~-~n
en muchos idiomas. En CJam, esto resulta ser un byte más largo, debido a la conversión adicional desde la base 2.fuente
PHP, 57 bytes
Versión sin operadores Bitwise 70 Bytes
fuente
$i
define la variable ?Mathematica,
75736866 bytesGracias a @MartinEnder por guardar 2 bytes.
fuente
#+##
yInfix
trabajo, pero el usoStringPart
es inevitable porque el jefe de"C"["B","A","D"][[#+##]]
es"C"
, noList
;StringJoin
no funciona#
y#2
eran las listas completas.Perl, 42 bytes
Incluye +1 para
-n
Dar entrada en STDIN:
Solo el código:
fuente
JavaScript,
113939088 bytes¡Muchas gracias a @Neil por ayudarme a ahorrar 20 bytes!
-3 bytes gracias a @Cyoce
Por desgracia, carece de funciones como JavaScript
decbin
,bindec
ystr_pad
que tiene PHP.fuente
(65536+n).toString(2).slice(1)
y[+b[i+8]+2*b[i]]
sería más corto, por ejemplo.padStart
, si se acepta en una versión futura de ECMAscript, se traduciría en un ahorro mayor.{…;return }
, useeval("…")
padStart
ahora existe en ECMAScript.MATL, 16 bytes
Pruébalo en línea!
o Verificar todos los casos de prueba
Explicación
fuente
Julia, 73 bytes
Otorga una función f que toma N como entrada y devuelve la respuesta como cadena.
Intentalo
Dependiendo de si una matriz de caracteres cuenta como una cadena, se puede omitir la unión ( 67 bytes )
Intentalo
fuente
R, 110 bytes
Se le ocurrió una solución vectorizada en R. Esto probablemente debería ser fácil de obtener al llegar a una conversión más inteligente int a conversión binaria.
fuente