Tarea
Codifique una cadena que consista completamente en alfabetos en mayúscula ( A-Z) usando solo ceros y unos, usando su propio esquema favorito. ¡Pero la regla no es tan simple!
Reglas
- Su programa / función debe manejar correctamente cualquier cadena de entrada válida de longitud 8 .
- Los resultados deben tener la misma longitud para todas las entradas.
- Los resultados deben ser distintos para entradas distintas.
- Los resultados deben ser lo más cortos posible.
- Los resultados deben ser cero-uno equilibrado (tener un número similar a los de ceros). No tienen que ser iguales (es decir, perfectamente equilibrados), pero su puntaje será penalizado por eso.
No tiene que proporcionar un programa / función que decodifique su codificación.
Entrada y salida
- Puede decidir aceptar cualquier conjunto de 26 caracteres ASCII imprimibles distintos en lugar de
A-Z. - Puede decidir generar cualquier par de caracteres ASCII imprimibles distintos en lugar de
0y1. - No puede generar un número entero en lugar de una cadena de bits, ya que puede tener ceros a la izquierda y no está claro si realmente cumplió con la regla 2.
- Si decide desviarse del valor predeterminado (
A-Zentrada y01salida), debe especificar los conjuntos de caracteres de entrada / salida en su envío.
Puntuación
- Puntaje base: tamaño del código, o 1 si su programa está vacío.
- Sanciones
- Penalidad por longitud: multiplicar
1.5 ** (encoded length - 42) - No hay bonificación por ser más bajo; 42 es la longitud mínima para una codificación perfectamente equilibrada de cadenas de 8 longitudes con un tamaño de alfabeto 26.
- Penalización por estar desequilibrado: multiplica
2 ** max(abs(ones - zeros) for every valid input of length 8), dondeonesyzerosson los recuentos de 1 y 0 en cada salida, respectivamente. - Su envío debe mostrar el peor de los casos (entrada / salida) o una explicación teórica sobre el valor de la penalización.
- Penalidad por longitud: multiplicar
- El puntaje más bajo gana.
Presentación de ejemplo
Esolang hipotético, 0 bytes, puntuación 74733.8906
Aquí hay un hipotético esolang, donde un programa vacío imprime todos los códigos ASCII de los caracteres de entrada en binario.
Por ejemplo, si da AAAAAAAAcomo entrada, el programa imprimirá 10000018 veces seguidas, es decir 10000011000001100000110000011000001100000110000011000001.
El alfabeto de entrada se elige para ser CEFGIJKLMNQRSTUVXYZabcdefh. De esta manera, todos los caracteres se convierten a siete dígitos en binario, y los recuentos de cero uno difieren solo en uno por carácter (todos tienen tres 1 y cuatro 0 o viceversa cuando se convierten en binario).
La longitud de salida siempre es 56, y el desequilibrio en el peor de los casos ocurre en las entradas como CCCCCCCC, donde los ceros aparecen 8 veces más que unos.
Por lo tanto, el puntaje de esta presentación es 1.5 ** (56 - 42) * 2 ** 8 == 74733.8906.
fuente

Respuestas:
Stax , 11 bytes, 0 penalización, Puntuación 11
Este programa utiliza
[0-9A-P]para entrada y[01]salida.Ejecútelo y depúrelo en línea : haga clic en el botón Ejecutar para comenzar. Los primeros cuatro casos de prueba se ejecutan en milisegundos. El quinto en segundos. El sexto en milenios.
La representación ascii correspondiente de este programa es la siguiente.
Se apoya fuertemente en las
|Ninstrucciones, que obtienen la permutación posterior de una matriz.Todas las salidas son permutaciones de la cadena inicial. Tiene 21 ceros y 21 unos. Por lo tanto, todas las salidas tienen 42 caracteres y están perfectamente equilibradas.
fuente
Jalea , 19 bytes
Pruébalo en línea!
Explicación
fuente
Pyth,
201914 bytes, Diferencia máxima: 0, Longitud: 64, Puntuación:149636.5528142154.7251104745.5869Pruébalo en línea!
Utiliza el alfabeto en minúsculas (
[a-z]) en lugar de mayúsculas. Puede usar mayúsculas reemplazandoGporrG1, a un costo de 2 bytes.Podría haber traducido la respuesta Python 3 de HyperNeutrino para obtener una mejor puntuación, pero, francamente, quiero una respuesta que realmente funcione.
fuente
Python 2 ,
779645 bytes, Máx. (Dif.) = 0, Longitud = 48, Puntuación = 7346.95Pruébalo en línea!
El número mágico
4lnk28t9vtqgfrpfda9uyfrjhcjwjvno6aec2nwegi0g4mnublc05dher8fjm4s5gh55lu87a4itmc74t6tozcsfdbxkg82frwljy0wam1jht98g2j0bma021v5d48pwq0fklv0n1ltrxft1fpk5gt5mx5fj4p2mjqqpvcylt1xayxf1iwdmyoxgfvl7oui1oo6147bm9rqpqut9ns8hhjc77t3pqy48otovrsm1t4mmleumspkuef66ma1vi0l4mtkwaeeizuvvds9fro3vhc0mrn6ox17rdpk7xw747qf28934u5jci5q1qj81i7dyf7rf0x7hb19xm93xhxsgh4w8ifs6fhynsddbo9j938ewfvhjlbpiz50n5hanmno6c89blyx50e89z7vjq2ho2r2u2wwyu4q18kv4fi1nhmfbgjbnkdayr5kblaped4fo5u97bi9a67d89irxa0r9cinmnohfgjmh5fhkcr33(en base 36), o su equivalente decimal382136276621246556626597379364678993894472503063952720559883124988542417847157286833446006767955087631166943136913765901237281892296575754126024183763829277879554548743231384272055945084065681774297483130020386641869860456147616177702938121538230311395513497506285733567467605871232294046704309941152721616618474501854355102646152223338484615876165254236449912858255665248186687952137487016925761633237335983620006273901509768720506129789443353730706676483647298576692613113269388239830925662977837917272690235355742330377154505179476767457756888107428475384947712227312747517748632498691058764154580934614231152483398774630508576533263098942260213967880819240793990219283490212843120923539516962682466148372296338428497778127570401190309339992457562121354271, codifica las 252 permutaciones de 50sy 51s.Los primeros convertidos algoritmo
A-Zen0-25y tratan como un número en base 26, a continuación, añadir56*252**4.Luego, el número se convierte en un número base-252 de 5 dígitos, y se sustituye con la permutación correspondiente de 5
0sy 51s.Después de eso, elimine los primeros 2 bits, lo que está garantizado
01. Luego hemos codificado la cadena en una cadena de 48 bits, que consta de exactamente 240sy 241s.fuente
7346.953125).JavaScript (ES8), puntaje 22186.623779296875
Para una entrada de longitud uniforme, siempre genera 3.5 * de ceros y unos, por lo que solo paga la penalización de 1.5 ** 14. Caracteres soportados:
'+-.3569:<GKMNSUVYZ\cefijlqrtx.fuente
Jalea , 16 bytes
Utiliza
+,-./0123456789:;<=>?@ABCDpara entrada y devuelve una lista de unos y ceros.Esto intenta crear una lista de 538,257,874,440 combinaciones en la memoria, por lo que necesitará una gran cantidad de RAM para ejecutarla como está ...
Pruébalo en línea! (comprobable; longitud de entrada 3, longitud de salida 18)
Cómo funciona
fuente
Python 3 ,
985135bytes, Diferencia máxima 0, Longitud 42, puntaje 135Pruébalo en línea!
Cortesía de Bubbler.
Código sin golf:
Dado que otros enfoques parecen bastante ineficientes, he tratado de hacer un tiempo óptimo. Es claramente O (N) en N bits de codificación, lo cual es óptimo para Big-O.
Sugerencia: trate de pensar en el triángulo de Pascal para este ( este diagrama lo revela)
Resultados de muestra:
Tiempo de ejecución: <0.013 s (aproximadamente constante para todas las entradas)
fuente
Perl 5 , 55 bytes, diferencia máxima 0, longitud 42, puntaje
5655Esto funciona, pero tomará un tiempo largo pero factible (
ZZZZZZZZtomó 2.5 días en mi computadora). La memoria no es problema.Se usa
A-Zcomo entrada1yAcomo caracteres de codificación. Siempre están perfectamente equilibrados. Omite las primeras26^7 = 8031810176combinaciones equilibradas que representan cadenas de menos de 8 caracteres, pero está bien, ya que están538257874440disponibles y uso208827064575y208827064575 + 8031810176 < 538257874440.Sin embargo, en realidad "cuenta" hasta la combinación objetivo, lo que llevará mucho tiempo. Es por eso que en el enlace TIO solo usé una cadena de entrada demasiado corta (que también son compatibles) para demostrar que la salida es correcta. Funcionará un poco más que
AAAAAAantes del tiempo de espera de TIO.ZZZZZZZZdebería ser aproximadamente26^3 = 17576más lento.Pruébalo en línea!
El decodificador es casi el mismo:
Pruébalo en línea!
fuente
> <> , 75 bytes, Diferencia máxima 0, Longitud 42, puntaje 75
Pruébalo en línea!
Advertencia justa, esto llevará mucho, mucho, mucho tiempo en completarse incluso para el
AAAAAAAAcaso trivial . Corre a través de cada representación binaria de un contador hasta que1se alcanza el número binario (base 26 de la entrada) con 21 s. Si quiere probar el programa de alguna manera, puede reemplazar elab+en la tercera línea con la1que devolverá el enésimo número binario con solo uno1, ¡ Pruébelo en línea!fuente
Python 3 , 75 bytes, Diferencia máxima 0, Longitud 42, Puntuación 112
Pruébalo en línea!
Esto solo funciona en teoría debido a restricciones de memoria. Existen
538257874440distintas cadenas equilibradas de cero uno de longitud 42 y208827064575posibles entradas, por lo que algunas de las posibles salidas no se utilizarán.-37 bytes gracias a @recursive
fuente
int(s,26)para su valor de índice en lugar desum(...)si cambia su conjunto de caracteres de entrada.[0-9A-P], ¿no? En mi máquina,int("123ABC",26) == 12855114C ++, 146 bytes, longitud máxima 42, 0 desequilibrio, puntaje 146
Funciona para cualquier char 26 continuo, pero advirtiendo que se ejecuta un tiempo inaceptable
fuente
#include<algorithm>por#import<regex>.