Construisez un «Hello world!» Tordu

31

Votre travail est assez simple, écrivez un programme qui imprime Hello, world!, qui une fois tordu crée un programme qui imprime Twister!.

Comment les cordes sont tordues

L'algorithme de torsion est très simple. Chaque colonne est décalée vers le bas par son index (col 0 descend 0, col 1 se déplace 1, ...). Le décalage de colonne se déplace vers le haut. Cela ressemble un peu à ceci:

a
ba
cba
----
 cba
  cb
   c

Avec tout sous la ligne enveloppant vers le haut. Exemple réel:

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

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

(D'autres exemples et quelques twisters dans votre langue préférée sont ici )

Notation

Votre programme doit être un rectangle matelassé. C'est le code-golf donc le nombre d'octets le plus bas gagne!

Règles

  • Votre premier programme doit s'imprimer Hello, world!. Une seule nouvelle ligne de fin est autorisée.
  • Vos premier et deuxième programmes doivent être dans la même langue.
  • Votre deuxième programme doit s'imprimer Twister!. Une seule nouvelle ligne de fin est autorisée.
  • Votre programme doit avoir au moins 2 lignes et 2 colonnes.
J Atkin
la source
3
Dans la page de codes de Jelly , le caractère qui correspond à (et, à toutes fins, agit comme) le saut de ligne a le point de code 127 (ASCII DEL). Le caractère avec le point de code 10 (saut de ligne ASCII) a le glyphe ½et prend la racine carrée d'un nombre. Lequel des deux devrait être considéré comme la nouvelle ligne pour ce défi?
Dennis
Darn, étais-je le seul qui espérait que "Twisted Hello World" utilisait "twisted" dans le sens pervers, donc nous produirions quelque chose comme "Goodbye Cruel World" à la place ..
DasBeasto
@Dennis Je suppose que le meilleur à utiliser dans ce cas serait la nouvelle ligne de gelée.
J Atkin
@JAtkin OK, merci pour la clarification. J'ai mis à jour ma réponse en conséquence.
Dennis

Réponses:

10

Gelée , 33 31 29 octets

Original

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

Essayez-le en ligne.

Tordu

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

Essayez-le en ligne!

Comment ça marche

Dans chaque programme, chaque ligne définit un lien. Le dernier est le lien principal, et il est exécuté au démarrage du programme. Puisqu'il n'y a aucune référence au premier lien, il est simplement ignoré.

Pour les deux programmes, “ɗ⁻%OḶ$“¡¦ḟṠ»donne la liste ['Hello, world!', 'Twister!'], en utilisant la compression de dictionnaire statique de Jelly .

La seule différence entre le code original et le code torsadé est le dernier caractère du lien principal. sélectionne la première chaîne de la liste et sélectionne la dernière.

Dennis
la source
2
On dirait qu'il crie "Holy Sh * t"
phase
42

Python 2, 59 octets

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

Tordu:

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

Fondamentalement, place les Twister!données dans les indices impairs de la chaîne, puis passe de la suppression des deux premiers caractères (remplissage) à la suppression de tous les autres caractères à la place.

PurkkaKoodari
la source
C'est tellement plus intelligent que mon approche
wnnmaw
C'est un peu ridicule, 40 votes positifs?
J Atkin
@JAtkin J'ai remarqué que certaines solutions Python ont tendance à en obtenir d'énormes quantités. Pas que je me plains: ~)
PurkkaKoodari
print " Hello, world!" [2::]
Plus
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Works, mais je vais le garder tel quel pour l'instant.
PurkkaKoodari
17

Fission , 215 162 56 53 50 octets

Voici un début:

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

Essayez-le en ligne!

Lorsqu'il est tordu:

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

Essayez-le en ligne!

Explication

Le Hello, world!code est assez simple:

  • D engendre un seul atome, descendant.
  • Les deux \(miroirs) le dévient sur la deuxième colonne.
  • "Hello, world!" imprime la chaîne requise.
  • 1est un portail. Il téléporte l'atome au suivant 1dans l'ordre de lecture, en conservant sa direction (c'est celui à côté du r).
  • L'atome descend toujours, dans le ;qui détruit l'atome et termine le programme.

Le flux de contrôle du Twister!code est un peu plus ... tordu ...

  • Encore une fois, donne Dnaissance à l'atome.
  • \le dévie vers la droite, dans le 1.
  • Maintenant, le portail envoie l'atome au suivant 1. L'atome frappe le oqui change juste sa masse, mais nous pouvons l'ignorer. Le code s'enroule pour que l'atome frappe de 1nouveau la même chose , sautant deux lignes. Encore une fois, nous pouvons ignorer le l, l'atome s'enroule et frappe à 1nouveau. Maintenant, il n'y a plus 1dans le code, donc l'atome saute tout en 1haut.
  • Après avoir enroulé les bords une fois de plus, l'atome est de nouveau dévié par \, puis redescend.
  • "Twister!" imprime le code requis.
  • 1téléporte l'atome une fois de plus, après le premier ;, mais il y en a un autre qui ;attend qu'il termine le programme.
Martin Ender
la source
Wow, très proche maintenant! :) Je suis sûr qu'il y a un moyen d'être plus court ...
FryAmTheEggman
Pourquoi aimez-vous la fission?
J Atkin
@JAtkin Pourquoi pas nous? :)
Martin Ender
@ MartinBüttner Je pensais précisément pourquoi pour ce défi?
J Atkin
1
Les langages 2D @JAtkin semblaient appropriés, et Fission semblait particulièrement simple car vous pouvez choisir un ou plusieurs points d'entrée arbitraires dans le programme.
Martin Ender
15

Fission , 35 octets

Approche de la fission # 3 (# 4 en comptant celle que j'ai éditée de mon premier post).

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

Essayez-le en ligne!

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

Essayez-le en ligne!

Explication

Celui-ci est en fait la plus simple des solutions de fission à ce jour. Dans les deux programmes, il y a deux points d'entrée: Rcrée un atome de droite et Lun atome de gauche. Dans les deux cas, le ;détruit immédiatement l'un d'eux.

Maintenant dans le Hello, world!programme, l'atome imprime d'abord la moitié de la chaîne avec "Hello, ", puis \et /(qui sont des miroirs) dévient l'atome sur la deuxième ligne à gauche. "world!"(lu dans le sens de l'atome en mouvement) imprime le reste de la chaîne. Lest maintenant un no-op et ;détruit également cet atome, mettant fin au programme.

Le Twister!programme est essentiellement le même mais tourné de 180 degrés. Cette fois, l' Latome survit et commence à imprimer avec "Twist". Le \et le /dévie à nouveau sur l'autre ligne, maintenant à droite. "er!imprime le reste de la chaîne, Rest un no-op et ;termine le programme.

Martin Ender
la source
Incroyable! Je pense que c'est à peu près aussi petit que possible, la quantité de réutilisation est impressionnante.
FryAmTheEggman
4

Japt, 67 61 57 octets

6 octets enregistrés grâce à @JAtkin, 4 octets grâce à @Ian

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

Tordu:

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

Testez-le en ligne: Original , Twisted

Comment ça marche

"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
ETHproductions
la source
Si cela fonctionne comme je le pense, vous pouvez supprimer l'espace de fin après Twister!en remplaçant les espaces par ..
J Atkin
@JAtkin Cela ne fonctionne pas vraiment comme ça, mais je peux enregistrer un tas d'octets de cette façon. Merci!
ETHproductions
"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin
Pourrait être beaucoup plus facile à lire avec un caractère de remplissage différent ...
mbomb007
4
@ mbomb007 Depuis quand est "facile à lire" une réussite? : D
yo '
4

Python, 398 414 380 456 octets *

J'ai réussi à mettre à jour pour qu'il soit conforme aux règles, mais j'hésite toujours à appeler cela compétitif. Étant donné que les lignes commentées sont nécessaires pour qu'il s'exécute, je les ai incluses dans le nombre d'octets

Cette solution ne suit pas les règles, car elle affichera des messages d'erreur en plus de la sortie autorisée.

Je voulais juste voir si cela pouvait se faire en python. C'est possible, mais ce n'est pas joli.

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!'     

Quand tordu devient

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
la source
Je pense que vous pouvez supprimer l'espace dans chaque ligne, puis supprimer complètement la dernière ligne.
ETHproductions
Je n'ai pas pensé à faire ça car c'était contraire aux règles du défi de torsion initial, mais merci!
wnnmaw
Vous avez oublié de mettre à jour le code;)
ETHproductions
Je pensais que cela n'aurait pas vraiment d'importance, mais je l'ai fait pour faire bonne mesure
wnnmaw
1
Je pense que vous avez mal compris. Le code doit être un rectangle rembourré, mais vous pouvez supprimer l'espace rint 'sur chaque ligne.
ETHproductions
2

C (gcc) , 87 octets

Sans torsion

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

Essayez-le en ligne!

Tordu

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

Essayez-le en ligne!

gastropner
la source
1

Brainfuck, 467 367 285 octets

Sans torsion

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

Essayez-le en ligne!

Tordu

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

Essayez-le en ligne!

orthoplex
la source
1
Vous pouvez économiser des octets en utilisant le plus court "Hello, world!" programme
Jo King
@JoKing Merci pour la suggestion! Toutes les idées comment trouver un "Twister!" Plus petit programme aussi?
orthoplex
1
En utilisant bf-crunch, je peux obtenir un "Twister!" De 56 octets programme
Jo King