Tome una cadena que scontenga 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 A4como 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 -> 0110100Concatenar los números binarios en un nuevo número binario
A4 -> 1000001 & 0110100 -> 10000010110100Divida el nuevo número binario en fragmentos, donde no
1puede haber un0a su izquierda. No debe dividir1s consecutivos .10000010110100 -> 100000, 10, 110, 100Convierta estos números binarios a decimales
100000, 10, 110, 100 -> 32, 2, 6, 4Toma la suma de estos números:
32 + 2 + 6 + 4 = 44
Entonces, la salida para la cadena A4deberí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

8372realidadRespuestas:
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*128se usa para desplazarse a la izquierdas7 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Ãxpuede serxn2. También puede usarTen lugar de0guardar 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 :-))Ttruco, no sabía que podía (ab) usar variables para eso, eso es muy útil. La función automática sexn2ve 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 Systemes 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 queSystemsea. Por ejemplo, en C # enSystem.Console...lugar deusing System;Console...Perl 6 , 62 bytes
fuente
.ordslugar de.comb».ord. El prefijo a[~]menudo se puede usar en lugar de.join.combexiste 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 confyl.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
rpara acumular el resultado actual yRpara acumular el resultado total. Si el bit anteriorpes0y el bit actualces1entonces, dividimos un nuevo fragmento y lo acumulamosR, de lo contrario, actualizamos elry mantenemosRcomo 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
1difieren. 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