Salida del Trinity Hall Prime


38

Basado en esta pregunta de Math.SE ; número copiado de esta respuesta . Número originalmente de un video de Numberphile , por supuesto.

Su tarea es generar el siguiente número primo de 1350 dígitos:

888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888111111111111111111111111888888111111111111111111111111888888111111811111111118111111888888111118811111111118811111888888111188811111111118881111888888111188811111111118881111888888111888811111111118888111888888111888881111111188888111888888111888888111111888888111888888111888888888888888888111888888111888888888888888888111888888111888888888888888888111888888811188888888888888881118888188811188888888888888881118881188881118888888888888811188881118888111888888888888111888811111888811118888888811118888111111188881111111111111188881111111118888111111111111888811111111111888811111111118888111111111111188881111111188881111111111111118888811118888811111111111111111888881188888111111111111111111118888888811111111111111111111111888888111111111111111111111111118811111111111111111111111111111111111111111111062100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

Opcionalmente, puede incluir nuevas líneas en la salida.

Reglas

  • Esto es , por lo que no hay entrada.
  • Su programa debe finalizar dentro de una hora en una computadora estándar; si está cerca, usaré el mío para las pruebas. Si su programa se ejecuta por más de un minuto o no termina en TIO, incluya el tiempo en su computadora.
  • Este es el , por lo que el código más corto, en bytes, gana.

3
"número originalmente de un video de número" creo que es originalmente del profesor mckee: P
undergroundmonorail

¿Qué hay de este prime ?
sergiol

Respuestas:


31

Gelatina , 74 71 69 68 66 bytes

“©ạ-3ṗÇñ"ỤḍV8żṢ?ḤsMVE[,Ṃƭ"ḞÇsẇʂ(ụFsẠʂẆŀṣ’ḃ19ĖŒṙị⁾81s30m0Z062 ȷ446‘

Pruébalo en línea!

Cómo funciona

El literal “©ạ-3ṗÇñ"ỤḍV8żṢ?ḤsMVE[,Ṃƭ"ḞÇsẇʂ(ụFsẠʂẆŀṣ’reemplaza todos los caracteres con sus puntos de código en la página de códigos de Jelly e interpreta el resultado como un número (biyectivo) base-250, produciendo el siguiente entero.

103877200905186099028820568168804302565394743652609510039112658230540917082292838565138059974

Luego, ḃ19convierte este número a la base biyectiva 19, produciendo la siguiente matriz de dígitos.

16,14,18,12,19,11,3,12,5,10,3,14,4,9,3,15,4,8,3,6,6,4,4,7,3,4,10,3,4,6,3,3,12,3,4,5,3,2,14,3,4,4,3,7,9,4,3,4,3,8,9,4,3,3,3,9,8,4,4,2,3,9,8,5,3,2,3,9,8,6,3,1

Ahora, ĖŒṙenumera los dígitos y realiza la decodificación de longitud de ejecución, produciendo la siguiente matriz.

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,14,14,14,14,14,14,14,14,14,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,20,20,20,20,20,20,21,21,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,25,25,25,26,26,26,26,27,27,27,27,27,27,27,27,27,27,28,28,28,29,29,29,29,30,30,30,30,30,30,31,31,31,32,32,32,33,33,33,33,33,33,33,33,33,33,33,33,34,34,34,35,35,35,35,36,36,36,36,36,37,37,37,38,38,39,39,39,39,39,39,39,39,39,39,39,39,39,39,40,40,40,41,41,41,41,42,42,42,42,43,43,43,44,44,44,44,44,44,44,45,45,45,45,45,45,45,45,45,46,46,46,46,47,47,47,48,48,48,48,49,49,49,50,50,50,50,50,50,50,50,51,51,51,51,51,51,51,51,51,52,52,52,52,53,53,53,54,54,54,55,55,55,56,56,56,56,56,56,56,56,56,57,57,57,57,57,57,57,57,58,58,58,58,59,59,59,59,60,60,61,61,61,62,62,62,62,62,62,62,62,62,63,63,63,63,63,63,63,63,64,64,64,64,64,65,65,65,66,66,67,67,67,68,68,68,68,68,68,68,68,68,69,69,69,69,69,69,69,69,70,70,70,70,70,70,71,71,71,72

Luego, ị⁾81indexa en la cadena 81 , reemplazando números impares con el carácter 8 , número par con el carácter 1 . Posteriormente, s30divide el resultado en fragmentos de longitud 30. Al mostrar un fragmento por línea, el resultado se ve de la siguiente manera.

888888888888888811111111111111
888888888888888888111111111111
888888888888888888811111111111
888111111111111888881111111111
888111111111111118888111111111
888111111111111111888811111111
888111111888888111188881111111
888111188888888881118888111111
888111888888888888111888811111
888118888888888888811188881111
888111111188888888811118881111
888111111118888888881111888111
888111111111888888881111888811
888111111111888888881111188811
888111111111888888881111118881

Ahora, m0concatena el conjunto de fragmentos con una copia invertida de sí mismo. Luego, Zcomprime el resultado, transponiendo filas y columnas.

888888888888888888888888888888
888888888888888888888888888888
888888888888888888888888888888
888111111111111111111111111888
888111111111111111111111111888
888111111811111111118111111888
888111118811111111118811111888
888111188811111111118881111888
888111188811111111118881111888
888111888811111111118888111888
888111888881111111188888111888
888111888888111111888888111888
888111888888888888888888111888
888111888888888888888888111888
888111888888888888888888111888
888811188888888888888881118888
188811188888888888888881118881
188881118888888888888811188881
118888111888888888888111888811
111888811118888888811118888111
111188881111111111111188881111
111118888111111111111888811111
111111888811111111118888111111
111111188881111111188881111111
111111118888811118888811111111
111111111888881188888111111111
111111111118888888811111111111
111111111111888888111111111111
111111111111118811111111111111
111111111111111111111111111111

0es un nilad no analizable, por lo que el resultado anterior se imprime (sin saltos de línea) y el valor de retorno se establece en 0 .

62es otro nilad no analizable, por lo que se imprime el resultado anterior ( 0 ) y el valor de retorno se establece en 62 .

ȷ446es otra nilad indescifrable. 62 se imprime y el valor de retorno se establece en 10 446 .

Finalmente, incrementa el resultado. El resultado final ( 10 446 + 1 ) se imprime cuando finaliza el programa.


oooo genial, por favor agregue una explicación: D
HyperNeutrino

@HyperNeutrino basado en la salida (pero con mi completa falta de conocimiento de Jelly), hay algo de reflejo o algo así
Stephen

1
@Stephen Bueno, quiero decir primero, es un número elegante y luego la conversión en "algo biyectivo base" (lo que sea que eso signifique, lo resolveré), y luego enumeraré, y luego ejecutaré la longitud, y luego indexaré en [8, 1]... Oh, eso es inteligente! Estoy robando este truco, espero que no te importe :))) y luego, sí, agrega todas esas cosas extrañas 06210..01. nice :)
HyperNeutrino

2
@HyperNeutrino Se agregó una explicación.
Dennis

Up votó solo por los "gráficos". Esto es bastante dulce, ojalá entendiera a Jelly :)
pinkfloydx33

7

SOGL V0.12 , 81 78 75 73 bytes

$!╚Qαūπōθ(└↓Υ8Π⁶!√|ΠΚψ░⅜Υ‛⁷>∙↓ts3]δεΧ‰“8«─'½Κ81¹¹I⌡_¹◄ø∑'¹n╬³0621"η“⌡01⁰∑

Pruébalo aquí!

Explicación:

...“                 push a big number of the RLE lengths of the top part
    8«─              convert from base 10 to base 16 (15 was the max length, and making it base 15 wasn't worth it)
       '½Κ           prepend to the array 48
          81¹        push [8, 1]
             ¹       wrap those two in an array
              I      rotate clockwise, resulting in [[8, 48], [1, 2], [8, 9], [1, 12], ...]
               ⌡_¹   flatten (iterate over, splat current items contents on stack, collect the contents in an array)
                  ◄  run-length decode

ø∑                   join as a string
  '¹n                split into lines of length 15
     ╬³              palindromize horizontally with no overlap
       0621          push 0, 6, 2, and 1
           "η“       push 445
              ⌡      that many times do
               0       push 0
                1    push 1
                 ⁰∑  join the stack together in a string

6

Jalea , 136 bytes

“ßṪṭAƭẠvµM⁾ṖOḥ⁻Ɠ×Ṣ~*pṭẒFỵṿ¦4ÇḟọLÑOcKɲ⁶2*Ḣɲ’b45;@€1ẋ/€ø“Œ\⁴rrNỊġ:,xƙŒ#ṠƲQçḷĠ%&⁻ɼiḂŀB<Ȧƈg(Ṇb>TḥḄ|ḃṘƬ#l7ƇØṃ’b94;@€8ẋ/€ðżF;0;6;2;1;0ẋ445¤;1Ḍ

Pruébalo en línea!

Explicación (números acortados)

“ßṪṭ...*Ḣɲ’b45;@€1ẋ/€ø“Œ\⁴...ƇØṃ’b94;@€8ẋ/€ðżF;0;6;2;1;0ẋ445¤;1Ḍ  Main link
“ßṪṭ...*Ḣɲ’b45;@€1ẋ/€                                             Run-length encoded 1s
“ßṪṭ...*Ḣɲ’                                                      The base-45 encoding of the list of the run-lengths of 1s
           b45                                                    in base 45
                €                                                 For each element
              ;@                                                  prepend
                 1                                                1
                    €                                             For each sublist
                   /                                              Reduce over
                  ẋ                                               Repeat list (this gets a bunch of lists of 1s)
                     ø“Œ\⁴...ƇØṃ’b94;@€8ẋ/€                       Run-length encoded 8s
                      “Œ\⁴...ƇØṃ’                                 The base-94 encoding of the list of the run-lengths of 8s
                                 b94                              in base 94
                                      €                           For each element
                                    ;@                            prepend
                                       8                          8
                                          €                       For each sublist
                                         /                        Reduce over
                                        ẋ                         Repeat list (this gets a bunch of lists of 8s)
                                           ðżF;0;6;2;1;0ẋ445¤;1Ḍ  With both of the previous lists of lists, construct the final string
                                            ż                     Interleave them
                                             F                    Flatten it
                                              ;0                  Append 0
                                                ;6                Append 6
                                                  ;2              Append 2
                                                    ;1            Append 1
                                                      ;           Append
                                                       0ẋ445¤     (Nilad)
                                                       0          0
                                                        ẋ445      445 times
                                                             ;1   Append 1
                                                               Ḍ  Convert decimal digits to a number

-121 bytes gracias a Dennis usando “...’literales en lugar de números normales


“...’Los literales guardan un montón de bytes. tio.run/…
Dennis

@Dennis Oh, Dios, eso es aún más ilegible. ¡Hermosa! ¡Gracias! : D
HyperNeutrino

0;6;2;1;Parece terriblemente prolijo.
Urna de pulpo mágico

@MagicOctopusUrn Sí, probablemente podría acortarlo un poco; Lo investigaré alguna vez: P
HyperNeutrino

6

Gelatina ,  133 84  73 bytes

“÷iþṃL7[ḲʂƘⱮ=ƬƤ¬`RẹŀẹY÷n£ị€ıø&ḟ"gPƲ_ÇḊṪ’b⁴48;ĖŒṙḂ×7‘s15m€0F;“¡©£¢‘Ḍ×ȷ446‘

Pruébalo en línea! (el pie de página formatea el número decimal con las dimensiones que dan el escudo de armas).

¿Cómo?

Una forma codificada de longitud de ejecución de un formato binario del lado izquierdo del escudo de armas 8y 1hasta la fila antes de que la que comienza se 0621refleje con el 0621agregado y luego se multiplique por 10 446 y se incremente.

“...’b⁴48;ĖŒṙḂ×7‘s15m€0F;“¡©£¢‘Ḍ×ȷ446‘ - Link: no arguments
“...’                                  - base 250 number
     b⁴                                - to base 16
       48;                             - prepend a 48
          Ė                            - enumerate [[1,48],[2,12],[3,3],[4,12],[5,3],...
           Œṙ                          - run-length decode (48 1s then 12 2s then ...)
             Ḃ                         - modulo by 2 (vectorises) evens->0 odds->1
              ×7                       - multiply by 7 (vectorises)
                ‘                      - increment (vectorises) - now all 8s and 1s
                 s15                   - split into chunks of length 15
                    m€0                - reflect each chunk
                       F               - flatten
                         “¡©£¢‘        - code-page indices = [0,6,2,1]
                        ;              - concatenate
                               Ḍ       - from decimal list to number
                                 ȷ446  - 10^446
                                ×      - multiply
                                     ‘ - increment

5

De carbón , 107 104 98 96 87 79 bytes

E³⁰✂”}∧Pt→8⌕LJε`‽∨↑¬KαfGⅉKMκ⎆wp◧⪫⊘^≦#⁸¹"π✂×OγX‹nI”×ι¹⁵×⊕ι¹⁵‖CM²⁸←621M²⁵¦¹⁴1UB0

Pruébalo en línea! Enlace al código detallado para explicación


4

Protón , 368 bytes

s=(map("8"&(*),[93,6,6,1,1,6,2,2,6,3,3,6,3,3,6,4,4,6,5,5,6,6,6,6,18,6,18,6,18,7,16,4,3,16,3,4,14,4,4,12,4,4,8,4,4,4,4,4,4,4,4,4,5,5,5,5,8,6,2]),map("1"&(*),[24,24,6,10,6,5,10,5,4,10,4,4,10,4,3,10,3,3,8,3,3,6,3,3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,3,3,5,4,4,7,14,9,12,11,10,13,8,15,4,17,2,20,23,26,44]))
q=''.join(s[0][i]+s[1][i]for i:0..len(s[0]))
print(q+'0621'+'0'*445+'1')

Pruébalo en línea!


4

Rubí , 180 bytes.

s=0;"".unpack('H*')[0].split(?f).map{|a|a.chars.map{|c|s^=2**c.to_i(16)};t=("%015b"%s).gsub ?0,?8;$><<t+t.reverse};puts'0621'+?0*445+?1

Pruébalo en línea!

178 bytes + 2 bytes para -Kn(fuerza la codificación ASCII).

43 caracteres en su mayoría no imprimibles entre las primeras comillas. Hexdump:

00000000: 733d 300a 22ff f012 3456 789a bff5 f6f7  s=0."...4Vx.....
00000010: ff8f 4f3f 012f ff8b fef7 af69 df45 8cf0  ..O?./.....i.E..
00000020: 1237 bf6a f59f 48f2 37f1 6f04 5f3f 12f0  .7.j..H.7.o._?..
00000030: 222e 756e 7061 636b 2827 482a 2729 5b30  ".unpack('H*')[0
00000040: 5d2e 7370 6c69 7428 3f66 292e 6d61 707b  ].split(?f).map{
00000050: 7c61 7c61 2e63 6861 7273 2e6d 6170 7b7c  |a|a.chars.map{|
00000060: 637c 735e 3d32 2a2a 632e 746f 5f69 2831  c|s^=2**c.to_i(1
00000070: 3629 7d3b 743d 2822 2530 3135 6222 2573  6)};t=("%015b"%s
00000080: 292e 6773 7562 203f 302c 3f38 3b24 3e3c  ).gsub ?0,?8;$><
00000090: 3c74 2b74 2e72 6576 6572 7365 7d0a 7075  <t+t.reverse}.pu
000000a0: 7473 2730 3632 3127 2b3f 302a 3434 352b  ts'0621'+?0*445+
000000b0: 3f31                                     ?1

¿Cómo?

Todos los demás estaban haciendo codificación de longitud de ejecución, por lo que quería probar algo diferente.

La versión con formato de "imagen" de la prima se puede separar en dos partes: una cuadrícula de 30x30 de 8 y 1, y una segunda sección de ceros en su mayoría que se pueden codificar. Centrándonos en la primera parte, observamos que es simétrica en el centro, por lo que si podemos producir la mitad izquierda, podemos imprimir la mitad de cada línea con su reverso.

La mitad de una línea tiene 15 caracteres. Si reemplazamos los 8 con ceros, cada línea puede interpretarse como un número binario de 15 bits. Convenientemente, en su mayor parte, la distancia de edición entre cada línea consecutiva es pequeña, por lo que decidí implementar mi solución almacenando la primera línea s( 888888888888888que se convierte en 0) y aplicando una serie de operaciones de cambio de bits s, imprimiendo el resultado cada vez .

Como cada línea tiene 15 bits de longitud, codifiqué estas operaciones como dígitos hexadecimales; por ejemplo, si la operación es b(u 11), volteamos el bit 11. Algunas líneas difieren en más de un bit, por lo que requieren una cadena de hexadecimal dígitos Nos queda un bit ( f) para que podamos usarlo como un delimitador entre estas cadenas y también como un valor de "no hacer nada". Ejemplo a continuación (puede ver estas líneas en la publicación a la que se hace referencia en la pregunta):

Line 3: 000000000000000
Line 4: 000111111111111  <-- flip bits 0 through b
Line 5: 000111111111111  <-- do nothing
Line 6: 000111111011111  <-- flip bit 5

Para poner todo eso juntos, codificaríamos 0123456789ab, luego nos separaríamos f, no haríamos nada f, entonces 5. Esto funciona porque haremos .split(?f)más adelante para obtener cada conjunto de operaciones por línea, lo que dará como resultado ["0123456789ab", "", "5"], y ""será un no-op.

La diferencia entre las líneas 3 y 4 anteriores es, con mucho, el conjunto más largo de ediciones, y la distancia de edición entre dos líneas consecutivas suele ser 0-2, por lo que diría que esta codificación es razonablemente económica, aunque estoy seguro de que puede Ser mejorado.

Toda la cadena codificada termina siendo fff0123456789abff5f6f7ff8f4f3f012fff8bfef7af69df458cf01237bf6af59f48f237f16f045f3f12f0(86 bytes), que obtendrá la cuadrícula completa de 30x30. Pero aún no hemos terminado ...

Los dígitos hexadecimales se pueden representar con 4 bits ( b-> 1100, etc.) Eso significa que si estamos dispuestos a codificar nuestra cadena de 4 bits a la vez en lugar de usar bytes, podemos reducir la longitud de la cadena a la mitad. Entonces eso es lo que hice: el hexdump muestra la cadena representada en 43 bytes. Después de eso, es sólo una cuestión de usar ingeniosa de Ruby Cadena # deshacer las maletas con H*(interpretar como cadena hexadecimal, nibble alto primero) para expandir la cadena de 43 bytes en la versión de 86 bytes que conocemos y amamos, y recorrer distintos conjunto de operaciones voltear bits: para nuestra cadena almacenada sy una operación cque hacemos s ^ 2**c.to_i(16)para voltear el bit correspondiente.

Después de completar cada conjunto de ediciones, rellenamos el binario resultante a 15 bits, cambiamos todos los 0 a 8 e imprimimos el resultado y su reverso. Como se señaló anteriormente, la parte del número después de la cuadrícula de 30x30 se puede codificar, por lo que hacemos eso como puts'0621'+?0*445+?1.

La cadena codificada final no tiene posibilidad de trabajar en TIO, por lo que la versión TIO usa escapes, que aún funcionan pero son más largos.


3

Python 2 , 760 523 329 205 196 bytes

-237 bytes gracias a Stephen. -124 bytes gracias a Jonathan Frech.

print''.join((ord(j)-34)*'81'[i%2]for i,j in enumerate(":(:((#,#(('$,$'(&%,%&(&%,%&(%&,&%(%'*'%(%(((%(%4%(%4%(%4%)%2%&#%%2%%$&%0%&%&%.%&'&&*&&)&0&+&.&-&,&/&*&1'&'3'$'6*9(<$N"))+'0621'+'0'*445+'1'

Pruébalo en línea!


526 bytes por la declaración de variables para 8y 1y combinando621
Stephen

Oh. XD Lo acabo de automatizar, así que no vi el 621. ¡Gracias!
totalmente humano

2
205 bytes comprimiendo la lista. Unos cuantos más si solo quieres usar bytes imprimibles.
Jonathan Frech

2

CJam, 532 412 340 231 210 209 bytes

". $ MBZp & 8OIoLs7Rv / BEqN # 1r ~ E $ O% 6 ^ UO = \ z: (Iw] l \ LQ.g.aWf + {2; on | YP'y $: Lc $ i $ GMCg & mRs # y0 * z` Z, C | Hf6; b / o-0 | FNK5R: OIi} {'`CJ} LOXMSA, & vzl5scm5y0 {om = A _ # / wF"' # fm92bs: A; "6NLkB) h% @ {u`hp_v + YK "'# fm92bYb2f + {[A / (\ s: A;)]}% e ~' 0445 * 1

Pruébalo en línea

La codificación de longitud de ejecución se expandió desde la base 92 (la Base 250 condujo a caracteres multibyte, por lo que tuvo que ajustarse). Además, 4341089843357287864910309744850519376se expande desde la base 92 y se convierte en binario. Un 1 significa que la longitud de ejecución es de dos dígitos, 0 significa que es un dígito. Por ejemplo, los primeros 4 dígitos de la representación binaria son 1101 porque las primeras cuatro ejecuciones son [93,8],[24,1],[6,8],[24,1](93 8, 24 1, etc.)


2

JavaScript, 454 450 332 207 204 bytes

-4 bytes gracias a Stephen. -125 bytes gracias a Shaggy y Dom Hastings.

_=>[...`]






,`].map((j,i)=>'81'[i%2].repeat(j.charCodeAt())).join``+0+621+"0".repeat(445)+1

Hay una gran cantidad de no imprimibles en esta respuesta, así que aquí hay un hexdump:

00000000: 5f3d 3e5b 2e2e 2e60 5d18 0618 0606 010a  _=>[...`].......
00000010: 0106 0605 020a 0205 0604 030a 0304 0604  ................
00000020: 030a 0304 0603 040a 0403 0603 0508 0503  ................
00000030: 0603 0606 0603 0603 1203 0603 1203 0603  ................
00000040: 1203 0703 1003 0401 0303 1003 0302 0403  ................
00000050: 0e03 0403 0403 0c03 0405 0404 0804 0407  ................
00000060: 040e 0409 040c 040b 040a 040a 0408 040f  ................
00000070: 0504 0511 0502 0514 0817 061a 022c 605d  .............,`]
00000080: 2e6d 6170 2828 6a2c 6929 3d3e 2738 3127  .map((j,i)=>'81'
00000090: 5b69 2532 5d2e 7265 7065 6174 286a 2e63  [i%2].repeat(j.c
000000a0: 6861 7243 6f64 6541 7428 2929 292e 6a6f  harCodeAt())).jo
000000b0: 696e 6060 2b30 2b36 3231 2b22 3022 2e72  in``+0+621+"0".r
000000c0: 6570 6561 7428 3434 3529 2b31            epeat(445)+1

f=
_=>[...`]






,`].map((j,i)=>'81'[i%2].repeat(j.charCodeAt())).join``+0+621+"0".repeat(445)+1

document.write(f())


Creo que devolver el valor de una función sería válido.
Stephen

Oh, claro, gracias. ¿Podrías hacer también la parte HTML? : PI, en serio, no sé mucho de esto, acabo de elegir JS por el reemplazo de expresiones regulares ordenado. EDITAR : Gracias. : D
totalmente humano

¡Puede negar las citas alrededor del último, +'1'ya que es un Stringy +'0621'puede ser +0+621!
Dom Hastings

1
222 bytes - ¡El último, lo prometo!
Shaggy

3
[...`]me
enoja mucho

2

JavaScript (ES6), 206 205 204 203 198 197 194 bytes

Se me ocurrió esto mientras trabajaba en la solución de i cri everytim , pensé que era lo suficientemente diferente como para justificar la publicación por sí mismo.

Esto incluye una carga de elementos no imprimibles entre ]y ,luego siga el enlace TIO a continuación para verlo con escapes Unicode (cada secuencia \useguida de 4 dígitos cuenta como 1 byte).

_=>`],0621ƽ1`.replace(/\D/g,(x,y)=>"810"[y<122?y&1:2].repeat(x.charCodeAt()))

Pruébalo en línea


2

MATLAB / Octave , 319 318 bytes

Este es mi primer intento en este desafío. Todavía es un poco grande y probablemente haya formas más eficientes de hacerlo, pero pensé en publicarlo de todos modos ya que el método era más interesante que simplemente comprimirlo.

for i=reshape('|871%871%8%1 8)1 8%1%8$1!8)1!8$1%8#1"8)1"8#1%8#1"8)1"8#1%8"1#8)1#8"1%8"1$8''1$8"1%8"1%8%1%8"1%8"118"1%8"118"1%8"118"1&8"1/8"1#8 1"8"1/8"1"8!1#8"1-8"1#8"1#8"1+8"1#8$1#8#1''8#1#8&1#8-1#8(1#8+1#8*1#8)1#8,1#8''1#8.1$8#1$801$8!1$831''861%891!8K1 0 6 2 1~0~0~0~0`0 1',2,[]);fprintf(repmat(i(2),1,i(1)-31));end

Pruébalo en línea!

El método utilizado aquí es hacer uso de un esquema de codificación Run-Length-Encoding.

Comenzamos con el número original y contamos el número de dígitos consecutivos. Estos se escriben en el resultado a continuación como el recuento seguido directamente por el dígito (espacio separado para mayor claridad).

938 241 68 241 68 61 8 101 8 61 68 51 28 101 28 51 68 41 38 101 38 41 68 41 38 101 38 41 68 31 48 101 48 31 68 31 58 81 58 31 68 31 68 61 68 31 68 31 188 31 68 31 188 31 68 31 188 31 78 31 168 31 48 1 38 31 168 31 38 21 48 31 148 31 48 31 48 31 128 31 48 51 48 41 88 41 48 71 48 141 48 91 48 121 48 111 48 101 48 131 48 81 48 151 58 41 58 171 58 21 58 201 88 231 68 261 28 441 0 6 2 1 4450 1

Si alguno de los valores es mayor que 95, lo dividimos en varios fragmentos de 95 o menos; esto solo sucede para los 445 0 que, en cambio, se convierten en cuatro conjuntos de 95 0 y un conjunto de 65 0. También rellenamos cualquier recuento que sea inferior a 10 con un 0 para que todos los elementos tengan tres caracteres de longitud. Esto cede con los espacios eliminados:

938241068241068061018101018061068051028101028051068041038101038041068041038101038041068031048101048031068031058081058031068031068061068031068031188031068031188031068031188031078031168031048011038031168031038021048031148031048031048031128031048051048041088041048071048141048091048121048111048101048131048081048151058041058171058021058201088231068261028441010016012011950950950950650011

En retrospectiva en este punto, podría haber hecho este paso antes de fusionarlo todo, pero creo que vives y aprendes. Hacemos algo inteligente que consiste en tomar el recuento de cada grupo (2 dígitos) y sumamos 31. Debido a que todos ellos son <96, el número resultante es el valor ASCII para un carácter imprimible (32 a 126). Dándonos cuentas de:

|7%7%% ) %%$!)!$%#")"#%#")"#%"#)#"%"$'$"%"%%%"%"1"%"1"%"1"&"/"# ""/""!#"-"#"#"+"#$##'##&#-#(#+#*#)#,#'#.$#$0$!$3'6%9!K    ~~~~` 

Después de un poco de remodelación en MATLAB para hacerlo más favorable para la decodificación, y luego también escapar de los 'caracteres con ''(de lo contrario, MATLAB divide los literales de cadena allí), nos queda la cadena inteligente:

|871%871%8%1 8)1 8%1%8$1!8)1!8$1%8#1"8)1"8#1%8#1"8)1"8#1%8"1#8)1#8"1%8"1$8''1$8"1%8"1%8%1%8"1%8"118"1%8"118"1%8"118"1&8"1/8"1#8 1"8"1/8"1"8!1#8"1-8"1#8"1#8"1+8"1#8$1#8#1''8#1#8&1#8-1#8(1#8+1#8*1#8)1#8,1#8''1#8.1$8#1$801$8!1$831''861%891!8K1 0 6 2 1~0~0~0~0`0 1

Esa es la raíz del código. En el código, todo lo que hago es reformar la matriz en una cadena 2D con 128 pares de caracteres. Para cada par, el primer personaje tiene 31 restados, y luego el segundo personaje se muestra tantas veces.

El resultado es el primo original:

888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888111111111111111111111111888888111111111111111111111111888888111111811111111118111111888888111118811111111118811111888888111188811111111118881111888888111188811111111118881111888888111888811111111118888111888888111888881111111188888111888888111888888111111888888111888888111888888888888888888111888888111888888888888888888111888888111888888888888888888111888888811188888888888888881118888188811188888888888888881118881188881118888888888888811188881118888111888888888888111888811111888811118888888811118888111111188881111111111111188881111111118888111111111111888811111111111888811111111118888111111111111188881111111188881111111111111118888811118888811111111111111111888881188888111111111111111111118888888811111111111111111111111888888111111111111111111111111118811111111111111111111111111111111111111111111062100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

Ediciones:

  • reorganicé la cuerda mágica para poder deshacerme de una transposición después de la remodelación. Guarda un byte.

2

05AB1E , 76 bytes

•ŒÆÿ¹т£Ƶ‘β\,ä¸γλaXë«Š¸þaγG(žÃÇ…»šKþÈ/?`'•20BS20öDg81s∍Ss×J30ôø.∞0D445×621s1J

Pruébalo en línea!


Esto le robó a Dennis:

888888888888888811111111111111
888888888888888888111111111111
888888888888888888811111111111
888111111111111888881111111111
888111111111111118888111111111
888111111111111111888811111111
888111111888888111188881111111
888111188888888881118888111111
888111888888888888111888811111
888118888888888888811188881111
888111111188888888811118881111
888111111118888888881111888111
888111111111888888881111888811
888111111111888888881111188811
888111111111888888881111118881

Noté que siempre alterna entre 8 y 1, así que conté las longitudes de cada carrera (Base 20):

['G', 'E', 'I', 'C', 'J', 'B', '3', 'C', '5', 'A', '3', 'E', '4', '9', '3', 'F', '4', '8', '3', '6', '6', '4', '4', '7', '3', '4', 'A', '3', '4', '6', '3', '3', 'C', '3', '4', '5', '3', '2', 'E', '3', '4', '4', '3', '7', '9', '4', '3', '4', '3', '8', '9', '4', '3', '3', '3', '9', '8', '4', '4', '2', '3', '9', '8', '5', '3', '2', '3', '9', '8', '6', '3', '1']

Lo uní todo y lo convirtió en un entero de base 10:

3954184379309026812828704944878416720438306456270310298603957651230861078960874182787979106461

Comprimido más en base-255:

ŒÆÿ¹т£Ƶ‘β\,ä¸γλaXë«Š¸þaγG(žÃÇ…»šKþÈ/?`'

Luego, después de crear el bit comprimido ... Solo tenemos que manipularlo de nuevo al original ...

20B                                 # Back to base 20.
   S                                # Each char separate...
    20ö                             # As their base 10 values...
       Dg81s∍                       # Extend '81' to the length of the array.
             Ss×J                   # Push that many 8 or 1's as told by the array.
                 30ôø.∞             # Split by the symmetrical pattern, flip it, mirror.
                       0D445×621s1  # Create the part that doesn't fit into a pattern.
                                  J # Join whole stack together.

Salida final:

88888888888888888888888888888
88888888888888888888888888888
88888888888888888888888888888
88811111111111111111111111888
88811111111111111111111111888
88811111181111111118111111888
88811111881111111118811111888
88811118881111111118881111888
88811118881111111118881111888
88811188881111111118888111888
88811188888111111188888111888
88811188888811111888888111888
88811188888888888888888111888
88811188888888888888888111888
88811188888888888888888111888
88881118888888888888881118888
18881118888888888888881118881
18888111888888888888811188881
11888811188888888888111888811
11188881111888888811118888111
11118888111111111111188881111
11111888811111111111888811111
11111188881111111118888111111
11111118888111111188881111111
11111111888881118888811111111
11111111188888188888111111111
11111111111888888811111111111
11111111111188888111111111111
11111111111111811111111111111
11111111111111111111111111111062100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

2

C (gcc) , 277 bytes

Tengo la sensación de que la cuerda podría acortarse de alguna manera.

#define F(c,n)for(c=0;c<n;c++)
i,j,k;r(d,n){F(k,n)printf("%d",d);}f(){r(8,90);F(i,128)F(j,6)r(("8111i8111i8915i8=1=i8?1Mi8?1Mi8@1mi8P1oi8p1pi8pppi8pppi8pppi@opPm?opPMOmp@Omip8@iRpR8a41a4Q81i21@1m11O1O11mR@11id811Qp2111p1111="[i]-49>>j)&1?8:1,1);r(1,42);printf("0621%0446d",1);}

Pruébalo en línea!


1

Perl 5 , 307 bytes

$d=1;print((map{($d^=9)x$_}(93,24,6,24,6,6,1,10,1,6,6,5,2,10,2,5,6,4,3,10,3,4,6,4,3,10,3,4,6,3,4,10,4,3,6,3,5,8,5,3,6,3,6,6,6,3,6,3,18,3,6,3,18,3,6,3,18,3,7,3,16,3,4,1,3,3,16,3,3,2,4,3,14,3,4,3,4,3,12,3,4,5,4,4,8,4,4,7,4,14,4,9,4,12,4,11,4,10,4,13,4,8,4,15,5,4,5,17,5,2,5,20,8,23,6,26,2,44)),0,621,0 x445,1)

Pruébalo en línea!


1

Chicle , 88 bytes

00000000: edc9 310a 0250 10c4 d02b fdb1 90dc ff64  ..1..P...+.....d
00000010: 96c1 80a2 8885 60aa d97d 7cb3 3de8 75c5  ......`..}|.=.u.
00000020: 37ab 820a 51ee 9537 942a 55c4 aaec 76b4  7...Q..7.*U...v.
00000030: cfb5 1cdc 33dd 908b ac1c 74a0 894e 03c8  ....3.....t..N..
00000040: 11cc 99ab 9c1d c661 32c5 bad6 8aad 96d2  .......a2.......
00000050: b95e 76fe fd6e bb01                      .^v..n..

Pruébalo en línea!


1

Ruby , 194 bytes

$><<?8+"~:(:((#,#(('$,$'(&%,%&(&%,%&(%&,&%(%'*'%(%(((%(%4%(%4%(%4%)%2%&#%%2%%$&%0%&%&%.%&'&&*&&)&0&+&.&-&,&/&*&1'&'3'$'6*9(<$N".bytes.reduce(""){|s,x|s+(s[-1]==?8??1:?8)*(x-34)}+"0621"+?0*445+?1

La parte superior está codificada en RLE, el resto simplemente está codificado.

Pruébalo en línea!


1

Kotlin , 339 bytes

val s="8J188J1888138<13881887148<14871886158<15861886158<15861885168<16851885178:178518851888188518851D8518851D8518851D8519851B85168315851B85158416851@85168516851>85168716861:861689168@168;168>168=168<168?168:168A1786178C1784178F1:8I188L148^130363231ǯ031"
fun x()=(0..s.length-1 step 2).map{i->(1..(s[i].toInt()-50)).map{print(s[i+1])}}

Pruébalo en línea!


1

CJam ( 108 81 bytes)

"u{èl>`#ö^½³ó!;kMðSÀËndEyvY3ÉÊÅBà#®"256bFbee{)*~}%"81"f=15/_Wf%zT6Y446,:!1

Demostración en línea

En caso de que la codificación de caracteres borre lo anterior, aquí está codificado xxd:

0000000: 2275 1e7b e86c 3e60  8d23 80f6 5ebd b3f3  "u.{.l>`.#..^...
0000010: 213b 968d 6b4d f053  c0cb 6e64 1c45 7976  !;..kM.S..nd.Eyv
0000020: 5933 c9ca 8dc5 42e0  23ae 2232 3536 6246  Y3....B.#."256bF
0000030: 6265 657b 292a 7e7d  2522 3831 2266 3d31  bee{)*~}%"81"f=1
0000040: 352f 5f57 6625 7a54  3659 3434 362c 3a21  5/_Wf%zT6Y446,:!
0000050: 31                                        1

La ejecución inicial de 8s y 1s se divide solo en la mitad izquierda y la longitud de ejecución se codifica solo como la duración de las ejecuciones alternas. Las series de más de 24 se dividen en series de como máximo 24, separadas por series de 0, de modo que las longitudes pueden codificarse en base 25 y luego codificarse en base 256 para empacarlas.


1

JavaScript (ES2017), 287 bytes

_=>"00000000000000000027wr2027wr2027a9ko261b7c23jerc23jerc1yjm0o1y8coo1y2ou01xx5q01xx5q01xx5q00yykxc9ull699d4au9dk75xffo1v2fgptj4fh8jrj3hhwvgfhmlev3hour5rhq24n3hqytj3hr4hdrhr8ykfhra0hr".replace(/.{6}/g,n=>parseInt(n,36).toString(2).replace(/0/g,8).padStart(30,8))+0+621+"0".repeat(445)+1

Utiliza un enfoque ligeramente diferente a la respuesta de @icrieverytim . -10 bytes gracias a la sugerencia de @Shaggy de usar en replacelugar de match!

f=
_=>"00000000000000000027wr2027wr2027a9ko261b7c23jerc23jerc1yjm0o1y8coo1y2ou01xx5q01xx5q01xx5q00yykxc9ull699d4au9dk75xffo1v2fgptj4fh8jrj3hhwvgfhmlev3hour5rhq24n3hqytj3hr4hdrhr8ykfhra0hr".replace(/.{6}/g,n=>parseInt(n,36).toString(2).replace(/0/g,8).padStart(30,8))+0+621+"0".repeat(445)+1
;
p.innerHTML=f()
pre{word-wrap:break-word;white-space:normal}
<pre id=p></pre>



1

/// , 260 bytes

/;/88%//:/1&13%13"//9/\/\///7/"1#95/!!!!94/%""93/8889-/000009,/11#9'/###9&/#88"9%/"""9#/389"/1119!/-----0/'''''''##8%4#;4&"8%18""&11;188"1::1&#%1#"&#8"",8"&&"&&'&&'&&'&#3"'#"#13"'#"3,"##&#"#"'"#",7#7"7%",%#%"#%,%1#%7"",4#8784,8,8%%,#%%",;411;%%41106215555!0001

Pruébalo en línea!

Nada terriblemente interesante, solo algo de compresión.



1

Python 2 , 191 190 188 bytes

s='0621'+'0'*445+'1'
a=1
for c in'L":&7(4%"%1%$%/$($-$*$+$,$)$.$\'$$($$%$#,#$#$#.#$"##0##!$#0#\'#2#&#2#&#2#&#&&&#&#%(%#&#$*$#&$#*#$&$#*#$&%"*"%&&!*!&&8&8}':s=`a`*(ord(c)-32)+s;a^=9
print s

Pruébalo en línea!

El mismo director que mi respuesta aquí

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.