Tome una cadena que s
contenga caracteres ASCII imprimibles como entrada y genere su "suma dividida binaria". ¿Necesitas una explicación?
¿Cómo se obtiene la suma dividida binaria?
Usaremos la cadena A4
como ejemplo en la siguiente explicación.
Convierta los caracteres a binario, tratando cada letra como un carácter ASCII de 7 bits
A -> ASCII 65 -> 1000001 4 -> ASCII 52 -> 0110100
Concatenar los números binarios en un nuevo número binario
A4 -> 1000001 & 0110100 -> 10000010110100
Divida el nuevo número binario en fragmentos, donde no
1
puede haber un0
a su izquierda. No debe dividir1
s consecutivos .10000010110100 -> 100000, 10, 110, 100
Convierta estos números binarios a decimales
100000, 10, 110, 100 -> 32, 2, 6, 4
Toma la suma de estos números:
32 + 2 + 6 + 4 = 44
Entonces, la salida para la cadena A4
debería ser 44
.
Casos de prueba:
a
49
A4
44
codegolf
570
Hello, World!
795
code-golf
string
base-conversion
binary
Stewie Griffin
fuente
fuente
8372
realidadRespuestas:
Python 2 ,
868176 bytes-5 bytes gracias Adnan
-5 bytes gracias xnor
Pruébalo en línea!
for c in input():s=s*128+ord(c)
para hacer la conversión ASCII numéricamente, donde*128
se usa para desplazarse a la izquierdas
7 veces (pasos 1 y 2)eval(('0'+new_bin).replace('01','0+0b1'))
para dividir y sumar (pasos 3, 4 y 5)fuente
eval
! Hacer la conversión ASCII numéricamente ahorra algunos bytes.Jalea , 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
MATL , 14 bytes
Pruébalo en línea!
Explicación
Considere la entrada
'A4'
como un ejemplo.fuente
05AB1E , 18 bytes
Código:
Explicación:
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
05AB1E , 14 bytes
Un puerto de mi respuesta Jelly , usando el desplazamiento 128 de la respuesta 05ab1e de Adnan (en lugar del 256 en la respuesta Jelly que escribí).
Pruébalo en línea!
¿Cómo?
fuente
JavaScript (ES6),
9792 bytesEditar: guardado 5 bytes con ayuda de @ ConorO'Brien
fuente
s=>eval([...s].map(e=>(e.charCodeAt()+128).toString(2).slice(1)).join``.replace(/1+0*/g,'+0b$&'))
creo que puede usar mi método de reemplazo para guardar un byteJapt ,
1812 bytesToma la entrada como una sola cadena.
También probé la adición 128 o 256 utilizada por otras respuestas, pero el relleno de 0 fue más corto de usar.
Se redujo la friolera de 6 bytes gracias a ETHproductions y Oliver .
Pruébalo aquí.
fuente
òÈ<YÃ
puede serò<
(con espacio final) yËn2Ãx
puede serxn2
. También puede usarT
en lugar de0
guardar en la coma. (Además, siéntase libre de unirse a nosotros en la sala de chat de Japt si alguna vez tiene preguntas o desea ayuda con el golf :-))T
truco, no sabía que podía (ab) usar variables para eso, eso es muy útil. La función automática sexn2
ve un poco extraña cuando se compila,x("n", 2)
por lo que creo que todavía tomará un poco antes de comprender completamente la lógica detrás de ellos. Con su ayuda, la solución Japt ahora está vinculada al primer lugar con la respuesta Jelly .n2
:Í
. Todavía no ha llegado a TIO, pero puede usarlo aquí: ethproductions.github.io/japt/?v=1.4.5&code=Y1+k+VQ3w/…Gelatina ,
1615 bytes-1 byte gracias a Dennis (no es necesario aplanar en 1 cuando un aplanamiento completo está bien; reemplácelo
;/
conF
)Pruébalo en línea!
¿Cómo?
fuente
;/
puede ser reemplazado conF
.PHP, 116 bytes
Versión en línea
PHP, 117 bytes
Pruébalo en línea!
PHP, 120 bytes
Pruébalo en línea!
o
fuente
Pyth , 21 bytes
Es muy largo...
Banco de pruebas.
fuente
[F #],
249245 bytesPruébalo en línea!
Nota: la versión en tio.run tiene "Sistema abierto" en el encabezado, he agregado su cuenta al código anterior. No estoy seguro de cuáles son las normas sobre las importaciones.
Sin golf
fuente
open System
es lo mismo que C # s,using System;
entonces sí, debe incluirlo en el recuento. Si puede hacerlo en F #, podría calificar completamente para lo queSystem
sea. Por ejemplo, en C # enSystem.Console...
lugar deusing System;Console...
Perl 6 , 62 bytes
fuente
.ords
lugar de.comb».ord
. El prefijo a[~]
menudo se puede usar en lugar de.join
.comb
existe lo que hace lam:g/…
cosa./11*0*/
se puede acortar a/1+0*/
. Se me ocurrió{sum map {:2($_)},comb /1+0*/,[~] .ords».fmt('%07b')}
J , 34 bytes
Pruébalo en línea!
Explicación
fuente
Mathica 193 bytes
fuente
f=FromDigits;l=Flatten;
al principio, y luego reemplazando todas las instancias de esas dos funciones conf
yl
.J , 40 bytes
uso:
devuelve 44
fuente
Clojure, 150 bytes
Bueno, esperaba que la conversión de ASCII a bytes fuera más corta que esto. El cuerpo del bucle real es bastante corto, y se usa
r
para acumular el resultado actual yR
para acumular el resultado total. Si el bit anteriorp
es0
y el bit actualc
es1
entonces, dividimos un nuevo fragmento y lo acumulamosR
, de lo contrario, actualizamos elr
y mantenemosR
como estaba.fuente
Python 123 bytes
Actualizado, gracias a Martin Ender.
fuente
lambda w:
sería suficiente para que su respuesta sea válida.lambda w:
.f=
, porque permitimos funciones sin nombre (a menos que haga referencia al nombre de la función para llamadas recursivas).K (oK) , 31 bytes
Solución:
Pruébalo en línea!
Ejemplos:
Explicación:
Convierte a valores ASCII, convierte a binario de 7 bits, aplana, encuentra dónde difiere y compara con la lista original para encontrar dónde
1
difieren. Corte en estos índices, convierta de nuevo a decimal y resuma:Prima
También administré una versión de 31 bytes en K4 , pero como no tengo TIO, publico mi solución OK.
fuente
APL (Dyalog) , 30 bytes
Pruébalo en línea!
¿Cómo?
⎕UCS⍵
- Unicodificar2⊥⍣¯1¨
- codificar cada uno en binario¯7↑¨
- y pad a la izquierda con ceros a 7 lugares∊
- aplanar1∘+⊆⊢
- partición por sí mismo aumentada en uno2⊥¨
- decodificar cada uno desde binario+/
sumafuente