Construye un retorcido "¡Hola mundo!"

31

Su trabajo es bastante simple, escriba un programa que imprima Hello, world!, que cuando se tuerce crea un programa que imprime Twister!.

Cómo se tuercen las cuerdas

El algoritmo de torsión es muy simple. Cada columna se desplaza hacia abajo por su índice (col 0 se mueve hacia abajo 0, col 1 se mueve 1, ...). El cambio de columna se ajusta a la parte superior. Se parece a esto:

a
ba
cba
----
 cba
  cb
   c

Con todo debajo de la línea envolviendo a la cima. Ejemplo real:

Original:
\\\\\\\\\\\\
............
............
............

Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\

(Más ejemplos y un trabalenguas en tu idioma favorito están aquí )

Tanteo

Su programa debe ser un rectángulo acolchado. Este es el código de golf, ¡así que el conteo de bytes más bajo gana!

Reglas

  • Su primer programa debe imprimir Hello, world!. Solo se permite una nueva línea final.
  • Su primer y segundo programa deben estar en el mismo idioma.
  • Su segundo programa debe imprimir Twister!. Solo se permite una nueva línea final.
  • Su programa debe tener al menos 2 filas y 2 columnas.
J Atkin
fuente
3
En la página de códigos de Jelly , el carácter que corresponde (y, a todos los efectos, actúa como) el salto de línea tiene el punto de código 127 (ASCII DEL). El carácter con el punto de código 10 (salto de línea ASCII) tiene el glifo ½y toma la raíz cuadrada de un número. ¿Cuál de los dos debería considerarse la nueva línea para este desafío?
Dennis
Maldición, era yo el único que esperaba que "Twisted Hello World" usara "twisted" en sentido perverso, por lo que estaríamos emitiendo algo como "Goodbye Cruel World" en su lugar ...
DasBeasto
@ Dennis, supongo que el mejor para usar en este caso sería la jalea nueva línea.
J Atkin
@JAtkin OK, gracias por aclarar. He actualizado mi respuesta en consecuencia.
Dennis

Respuestas:

10

Jalea , 33 31 29 bytes

Original

“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ

Pruébalo en línea.

Retorcido

“ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ
“ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ

Pruébalo en línea!

Cómo funciona

En cada programa, cada línea define un enlace. El último es el enlace principal, y se ejecuta cuando se inicia el programa. Como no hay referencias al primer enlace, simplemente se ignora.

Para ambos programas, se “ɗ⁻%OḶ$“¡¦ḟṠ»obtiene la lista ['Hello, world!', 'Twister!'], utilizando la compresión estática del diccionario de Jelly .

La única diferencia entre el código original y el retorcido es el último carácter del enlace principal. selecciona la primera cadena de la lista y selecciona la última.

Dennis
fuente
2
Parece que está gritando "Holy Sh * t"
fase
42

Python 2, 59 bytes

print "  Hello, world!"[ 2::]
#rint "T w i s t e r !"[ ::2]

Retorcido:

print "T weils,twerrd!"[ ::2]
#rint "  H l o   o l !"[ 2::]

Básicamente, coloca los Twister!datos en los índices impares de la cadena y luego cambia de eliminar los dos primeros caracteres (relleno) a eliminar todos los demás caracteres.

PurkkaKoodari
fuente
Esto es mucho más inteligente que mi enfoque
wnnmaw 02 de
Esto es un poco ridículo, ¿40 votos a favor?
J Atkin
@JAtkin He notado que algunas soluciones de Python tienden a obtener grandes cantidades de ellas. No es que me queje: ~)
PurkkaKoodari
Mejor manera:print " Hello, world!" [2::]
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ funciona, pero lo mantendré como está por ahora.
PurkkaKoodari
17

Fisión , 215 162 56 53 50 bytes

Aquí hay un comienzo:

D1
\\
""
TH
we
il
sl
to
e,
r 
!w
"o
1r
;l
1d
;!
 "

Pruébalo en línea!

Cuando torcido:

D"
\1
"\
T"
wH
ie
sl
tl
eo
r,
! 
"w
1o
;r
1l
;d
 !

Pruébalo en línea!

Explicación

El Hello, world!código es bastante simple:

  • D genera un solo átomo, que va hacia abajo.
  • Los dos \(espejos) lo desvían hacia la segunda columna.
  • "Hello, world!" imprime la cadena requerida.
  • 1Es un portal. Teletransporta el átomo al siguiente 1en orden de lectura, conservando su dirección (esa es la que está al lado del r).
  • El átomo todavía se mueve hacia abajo, hacia el ;cual destruye el átomo y termina el programa.

El flujo de control para el Twister!código es un poco más ... retorcido ...

  • De nuevo, Dgenera el átomo.
  • \lo desvía hacia la derecha, hacia el 1.
  • Ahora el portal envía el átomo al siguiente 1. El átomo golpea el oque simplemente cambia su masa, pero podemos ignorar eso. El código se envuelve para que el átomo 1vuelva a golpear el mismo , saltando dos filas. Nuevamente, podemos ignorar l, el átomo se envuelve y golpea 1nuevamente. Ahora no hay más 1en el código, por lo que el átomo salta completamente hacia arriba 1en la parte superior.
  • Después de envolver los bordes una vez más, el átomo se desvía nuevamente \, ahora bajando nuevamente.
  • "Twister!" imprime el código requerido.
  • 1teletransporta el átomo una vez más, más allá del primero ;, pero hay otro ;esperando que termine el programa.
Martin Ender
fuente
Wow, muy cerca ahora! :) Estoy seguro de que hay una manera de ser más corto ...
FryAmTheEggman
¿Por qué les gusta la fisión?
J Atkin
@JAtkin ¿Por qué no lo haríamos? :)
Martin Ender
@ MartinBüttner Estaba pensando específicamente por qué para este desafío?
J Atkin
1
Los lenguajes 2D @JAtkin parecían adecuados, y Fission parecía particularmente simple porque puede elegir uno o más puntos de entrada arbitrarios en el programa.
Martin Ender
15

Fisión , 35 bytes

Enfoque de fisión n. ° 3 (n. ° 4 contando el que edité en mi primera publicación).

R"Hello, " \"tri"
T;L"!dlrow"/"es!w

Pruébalo en línea!

R;H"ldor w /"er!"
T"Le!ll,o""\"tsiw

Pruébalo en línea!

Explicación

Esta es en realidad la más simple de las soluciones de fisión hasta el momento. En ambos programas hay dos puntos de entrada: Rcrea un átomo a la derecha y Lun átomo a la izquierda. En cualquier caso, el ;destruye a uno de ellos inmediatamente.

Ahora en el Hello, world!programa, el átomo primero imprime la mitad de la cadena con "Hello, ", luego \y /(que son espejos) desvían el átomo hacia la segunda línea que va hacia la izquierda. "world!"(leer en la dirección del átomo en movimiento) imprime el resto de la cadena. Lahora es un no-op y también ;destruye este átomo, finalizando el programa.

El Twister!programa es esencialmente el mismo pero rotado 180 grados. Esta vez, el Látomo sobrevive y comienza a imprimir con "Twist". El \y /nuevamente lo desvían hacia la otra línea, ahora yendo a la derecha. "er!imprime el resto de la cadena, Rno funciona y ;finaliza el programa.

Martin Ender
fuente
¡Asombroso! Creo que esto es lo más pequeño posible, la cantidad de reutilización es impresionante.
FryAmTheEggman
4

Japt, 67 61 57 bytes

Guardado 6 bytes gracias a @JAtkin, 4 bytes gracias a @Ian

"Tzwzizsztzezzzzzzrzzzz!"rz;
"Hzezlzlzoz,z zwzorlzdz!"rz;

Retorcido:

"Hzezlzlzoz,z zwzorlzdz!"rz;
"Tzwzizsztzezzzzzzrzzzz!"rz;

Pruébelo en línea: original , retorcido

Cómo funciona

"Tzwzizsztzezzzzzzrzzzz!"rz;  // Take this string and remove all "z"s.
"Hzezlzlzoz,z zwzorlzdz!"rz;  // Take this string and remove all "z"s.
                              // Implicit: output *last* expression
ETHproducciones
fuente
Si esto funciona como creo, puede eliminar el espacio posterior Twister!reemplazando los espacios con ..
J Atkin
@JAtkin En realidad no funciona así, pero puedo guardar un montón de bytes de esa manera. ¡Gracias!
ETHproductions
"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin
Podría ser mucho más fácil de leer con un carácter de relleno diferente ...
mbomb007
44
@ mbomb007 ¿Desde cuándo es "fácil de leer" un logro? : D
yo '
4

Python, 398 414 380 456 bytes *

Logré actualizar para que cumpla con las reglas, pero aún dudo en llamarlo competitivo. Como las líneas comentadas son necesarias para que se ejecute, las he incluido en el recuento de bytes

Esta solución no sigue las reglas, ya que imprimirá mensajes de error además de la salida permitida.

Solo quería ver si esto se podía hacer en Python. Puede, pero es no bonita.

print'Hello, world!'
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     
#rint'Twister!'     

Cuando retorcido se convierte

print'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Twister!'
#rint'Hwister!'
#rint'Teister!'
#rint'Twlster!'
#rint'Twilter!'
#rint'Twisoer!'
#rint'Twist,r!'
#rint'Twiste !'
#rint'Twisterw'
#rint'Twister!o
#rint'Twister!'r
#rint'Twister!' l
#rint'Twister!'  d
#rint'Twister!'   !
wnnmaw
fuente
Creo que podría eliminar el espacio en cada línea, luego eliminar la última línea por completo.
ETHproductions
No pensé hacer eso, ya que iba en contra de las reglas del desafío inicial de torsión, ¡pero gracias!
wnnmaw
Olvidó actualizar el código;)
ETHproductions
Pensé que realmente no importaría, pero lo hice por si
acaso
1
Creo que has entendido mal. Se requiere que el código sea un rectángulo acolchado, pero puede eliminar el espacio de rint 'cada línea.
ETHproductions
2

C (gcc) , 87 bytes

Sin torcer

main(){puts(1?"Hello, world!":"Twister!");}
mai (){puts(0?"Hello, world!":"Twister!");}

Pruébalo en línea!

Retorcido

mai (){puts(1?"Hello, world!":"Twister!");}
main(){puts(0?"Hello, world!":"Twister!");}

Pruébalo en línea!

gastropner
fuente
1

Brainfuck, 467 367 285 bytes

Sin torcer

 +[  [[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.>>] [[--[<++++>--->+<]>-]<<<<.<<<-.<<+.>-.+.<----.>--.>>---.[-]]]
  [ -[[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.>>]+[[--[<++++>--->+<]>-]<<<<.<<<-.<<+.>-.+.<----.>--.>>---.[-]]]

Pruébalo en línea!

Retorcido

  [  [[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.>>] [[--[<++++>--->+<]>-]<<<<.<<<-.<<+.>-.+.<----.>--.>>---.[-]]]
 +[ -[[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.>>]+[[--[<++++>--->+<]>-]<<<<.<<<-.<<+.>-.+.<----.>--.>>---.[-]]]

Pruébalo en línea!

orthoplex
fuente
1
Puede guardar bytes utilizando el "Hola, mundo" más corto
Jo King
@JoKing ¡Gracias por la sugerencia! ¿Alguna idea de cómo encontrar un "Twister" más pequeño! programa también?
Orthoplex
1
Usando bf-crunch puedo obtener un "Twister" de 56 bytes. programa
Jo King