Tarea
Dada una cadena de entrada de uno o más caracteres ASCII cuyos puntos de código están entre 0 y 128 (exclusivo), haga lo siguiente:
- Convierta cada carácter en su código ASCII de 7 bits (si el código ASCII es inferior a 7 bits, ponga los cero bits iniciales)
- Concatenar todos los bits (esto da como resultado
7*n
bits donden
está el número de caracteres) - Para cada bit en este flujo de bits, imprima 1 si es diferente del bit anterior e imprima 0 de lo contrario. El primer bit de salida es siempre 1.
Ejemplo
Entrada:
Hi
Salida:
11011001011101
Explicación:
La cadena "Hola" tiene los códigos ASCII
72 105
que en bits son:
1001000 1101001
Y los indicadores de bits de transición:
11011001011101
Este es el código de golf. El conteo de bytes más bajo gana.
Casos de prueba
Caso de prueba 1:
Hello World!
110110010101110011010101101010110001110000111110000110000001011101101010101100110001
Caso de prueba 2:
%% COMMENT %%
1110111111011111100001100010010100001010110101011010011101010011111110011000001101111110111
Caso de prueba 3 (crédito a Luis Mendo):
##
11100101110010
¡Felicitaciones a Luis Mendo por la solución más corta con 9 bytes en MATL!
##
(0
bit inicial; algunas respuestas actualmente fallan debido a eso)Respuestas:
MATL , 9 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 58 bytes
Pruébalo en línea!
fuente
Japt
-P
, 11 bytesAprovecha el hecho de que los espacios pueden ser forzados
0
en JavaScript cuando se intenta realizar una operación matemática o, en este caso, bit a bit.Pruébalo o ejecuta todos los casos de prueba
fuente
0100000
. También el% character (37) sería0100101
CJam , 21 bytes
Pruébalo en línea!
Explicación
Mostrando la pila con una entrada de muestra de
5
:Para ver si un bit es diferente del bit anterior, hacemos un vector (elemento-sabio) xor entre la matriz de bits y la matriz de bits sin el primer elemento. También eliminamos el último bit del resultado, porque siempre es el último bit de la matriz más larga sin cambios.
fuente
APL (Dyalog Unicode) , SBCS de 16 bytes
Programa completo Solicita una cadena desde stdin.
Pruébalo en línea!
⍞
solicitud de entrada ("una cita en una consola")11⎕DR¨
cambiar cada carácter a poco booleano D ata R ePresentation1↓¨
soltar el primer bit de cada∊
ϵ nlist (aplanar)2≠/
diferencia por pares1,
anteponer unofuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
Carbón , 25 bytes
Pruébalo en línea!El enlace es a la versión detallada del código. Explicación:
Convierta todos los caracteres a binario y rellene con una longitud de 7 y luego imprímalos, pero deje el cursor sobre el último dígito.
Repita hasta que el cursor esté sobre el primer dígito.
Calcule si los dígitos son diferentes y sobrescriba cada dígito con la diferencia.
Sobrescriba el primer dígito con a
1
.fuente
PowerShell ,
735649 bytesPruébalo en línea!
-17 bytes gracias a mazzy :)
fuente
Ruby
-p
,6857 bytes-11 bytes robando descaradamente el método utilizado por la solución Python de xnor .
Pruébalo en línea!
Solución original:
Pruébalo en línea!
fuente
Octava ,
3630 bytesFix gracias a Luis Mendo
-2 bytes gracias a Sanchises
Pruébalo en línea!
fuente
de2bi
.Python 2 , 104 bytes
Pruébalo en línea!
Una puñalada rápida.
fuente
a*128+ord(c)
! Pero no es elreduce
ylambda
tipo de costosa?Dardo ,
213168bytesOne-liner anterior
Pruébalo en línea!
Esta verbosidad y falta de complementos fáciles de construir realmente está matando a este. Sin embargo, todavía logró sacar un trazador de líneas.
fuente
Stax ,
1312 bytesEjecutar y depurarlo
Si se garantiza que todos los caracteres de entrada tienen el séptimo bit establecido, como algunas respuestas suponen, se puede hacer en 10 bytes.
fuente
Kotlin , 182 bytes
Pruébalo en línea!
Espero poder mejorar esto pronto, siento que debe haber algunos puntos para mejorar, pero no puedo pensar en este momento
fuente
Perl 5
-p
, 60 bytesPruébalo en línea!
fuente
C (gcc (MinGW)), 90 bytes
Requiere un compilador que proporcione
itoa()
.fuente
Ruby
-p
, 50 bytes.Pruébalo en línea!
Explicación
Primera línea, igual que la respuesta de Value Ink :
Segunda linea:
En Rubí se puede utilizar la interpolación en los literales Regexp, por ejemplo
/Hello #{name}/
, y para las variables que comienzan con$
o@
se pueden omitir las llaves, así que si por ejemplo$&
es"0"
entonces el grawlixy/#$&$/
convierte/0$/
.fuente
K (ngn / k) ,
913 bytesSolución:
Pruébalo en línea!
Explicación:
Notas:
fuente
#
por ejemplo (la salida solo tiene 6 bits)Emojicode , 263 bytes
Pruébelo en línea aquí.
Sin golf:
fuente
JavaScript (V8) ,
15095 bytes-55 gracias a @dana
Pruébalo en línea!
fuente
Python3.8 , 72 bytes
Solución:
Explicación:
Desde que Python 3.8 introdujo expresiones de asignación (en lugar de las declaraciones de asignación estándar), he querido usarlas en una comprensión de lista que necesita recordar el último elemento. Esta no es la mejor manera de hacer esto, pero demuestra un método interesante de usar la expresión de asignación.
El código crea una función lambda que toma el argumento requerido, que es la cadena a convertir. Cuando se llama, la función procede de la siguiente manera. Cada carácter en a se convierte a su código de carácter al que se agrega 128 para tratar con caracteres de 6 bits (la representación binaria siempre será de 8 bits y podemos cortar el primer bit). Este número se convierte en binario y el encabezado (0x) y el 1 inicial de agregar 128 se cortan. Estas nuevas cadenas se unen en una cadena más grande.
Para cada carácter en esta nueva cadena (que contiene la representación concatenada de 7 bits del texto), se verifica si el carácter es el mismo que el anterior. ¿Qué pasa con el primer personaje? El primer carácter de resultado siempre debe ser "1", por lo que solo debemos asegurarnos de que lo que esté en la última variable de carácter no sea "1" ni "0". Hacemos esto reutilizando el parámetro original ahora que ya no lo estamos usando. Esto puede ser un problema si la cadena original era un solo "0" (un solo "1" simplemente funciona) pero lo ignoraremos.
Durante la comparación, el carácter anterior se evaluó primero, por lo que cuando usamos la expresión de asignación para establecer la variable de carácter anterior al carácter actual, no afecta la evaluación de las expresiones de comparación.
La comparación produce Verdadero o Falso, que también se puede usar como 1 o 0 respectivamente en Python, por lo que se usan para buscar un "1" o "0" en una cadena
fuente
bin(ord(i)+128)[3:]
->f"{ord(i):07b}"
Tcl ,
215167140 bytesPruébalo en línea!
Utiliza shift-by-one y exclusive-or para detectar transiciones. Lleva lsb del carácter actual al msb del siguiente carácter. Combina la salida para cada carácter uniendo la lista devuelta por lmap.
Utiliza lambdas con argumentos predeterminados para guardar bytes en la inicialización y comandos repetidos.
Depende en gran medida del orden de operación. Funciona para cadena vacía.
fuente
05AB1E (heredado) , 12 bytes
Utiliza la versión heredada de 05AB1E, ya
j
que une implícitamente las cadenas, lo que requiere un explícitoJ
después dej
de la nueva versión de 05AB1E.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Haskell , 137 bytes
Pruébalo en línea!
El mayor problema aquí es convertir booleanos (resultado del XOR) a '0' / '1'.
fuente
Python 3 ,
8884 bytesPruébalo en línea!
Siento que las tareas deberían ser evitables, pero no se me ocurrió ninguna forma de hacerlo.
Actualizar:
fuente
PHP , 90 bytes
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 80 bytes
Pruébalo en línea!
fuente
JavaScript (V8) , 73 bytes
Pruébalo en línea!
fuente