Baue eine verdrehte "Hallo Welt!"

31

Ihr Job ist ganz einfach: Schreiben Sie ein Programm, das druckt Hello, world!. Wenn Sie es verdrehen, erstellen Sie ein Programm, das druckt Twister!.

Wie Saiten verdreht sind

Der Verdrehungsalgorithmus ist sehr einfach. Jede Spalte wird um ihren Index nach unten verschoben (Spalte 0 verschiebt sich um 0, Spalte 1 verschiebt sich um 1, ...). Die Spaltenverschiebung wird nach oben verschoben. Es sieht irgendwie so aus:

a
ba
cba
----
 cba
  cb
   c

Alles unter der Linie nach oben. Reales Beispiel:

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

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

(Weitere Beispiele und ein Twister in Ihrer Lieblingssprache finden Sie hier )

Wertung

Ihr Programm muss ein gepolstertes Rechteck sein. Dies ist Codegolf, also gewinnt die niedrigste Bytezahl!

Regeln

  • Ihr erstes Programm muss gedruckt werden Hello, world!. Es ist nur eine nachgestellte Zeile zulässig.
  • Ihr erstes und zweites Programm müssen in derselben Sprache sein.
  • Ihr zweites Programm muss gedruckt werden Twister!. Es ist nur eine nachgestellte Zeile zulässig.
  • Ihr Programm muss mindestens 2 Zeilen und 2 Spalten enthalten.
J Atkin
quelle
3
In Jellys Codepage hat das Zeichen, das dem Zeilenvorschub entspricht (und sich für alle Zwecke so verhält), den Codepunkt 127 (ASCII DEL). Das Zeichen mit dem Codepunkt 10 (ASCII-Zeilenvorschub) hat die Glyphe ½und bildet die Quadratwurzel einer Zahl. Welches der beiden sollte als neue Linie für diese Herausforderung angesehen werden?
Dennis
Verdammt, war ich der einzige, der gehofft hat, dass "Twisted Hello World" "Twisted" im perversen Sinne verwendet, sodass wir stattdessen so etwas wie "Goodbye Cruel World" ausgeben würden.
DasBeasto
@ Tennis Ich nehme an, der bessere in diesem Fall wäre die Jelly Newline.
J Atkin
@JAtkin OK, danke für die Klarstellung. Ich habe meine Antwort entsprechend aktualisiert.
Dennis

Antworten:

10

Jelly , 33 31 29 Bytes

Original

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

Probieren Sie es online aus.

Verdrehte

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

Probieren Sie es online!

Wie es funktioniert

In jedem Programm definiert jede Zeile eine Verknüpfung. Der letzte Link ist der Hauptlink und wird beim Programmstart ausgeführt. Da es keine Verweise auf den ersten Link gibt, wird dieser einfach ignoriert.

“ɗ⁻%OḶ$“¡¦ḟṠ»Ergibt für beide Programme die Liste ['Hello, world!', 'Twister!']unter Verwendung der statischen Wörterbuchkomprimierung von Jelly .

Der einzige Unterschied zwischen dem ursprünglichen und dem verdrehten Code ist das letzte Zeichen des Hauptlinks. Wählt die erste Zeichenfolge der Liste und die letzte aus.

Dennis
quelle
2
Es sieht so aus, als würde es "Holy Sh * t" schreien
Phase
42

Python 2, 59 Bytes

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

Verdrehte:

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

Grundsätzlich werden die Twister!Daten in die ungeraden Indizes der Zeichenfolge eingefügt, und anschließend werden stattdessen die ersten beiden Zeichen (Füllzeichen) entfernt und alle anderen Zeichen entfernt.

PurkkaKoodari
quelle
Dies ist so viel schlauer als mein Ansatz
wnnmaw
Das ist irgendwie lächerlich, 40 Upvotes?
J Atkin
@JAtkin Ich habe bemerkt, dass einige Python-Lösungen dazu neigen, große Mengen davon zu bekommen. Nicht, dass ich mich beschwere: ~)
PurkkaKoodari
Cooler Weg:print " Hello, world!" [2::]
Erik der Outgolfer
@EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Funktioniert, aber ich werde es einfach so lassen, wie es ist.
PurkkaKoodari
17

Fission , 215 162 56 53 50 Bytes

Hier ist ein Anfang:

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

Probieren Sie es online!

Wenn verdreht:

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

Probieren Sie es online!

Erläuterung

Der Hello, world!Code ist ziemlich einfach:

  • D erzeugt ein einzelnes Atom, das nach unten geht.
  • Die beiden \(Spiegel) lenken es auf die zweite Säule um.
  • "Hello, world!" druckt den gewünschten String.
  • 1ist ein Portal. Es teleportiert das Atom 1in Lesereihenfolge zum nächsten und behält dabei seine Richtung bei (diejenige neben der r).
  • Das Atom bewegt sich immer noch nach unten, in das, ;was das Atom zerstört und das Programm beendet.

Der Kontrollfluss für den Twister!Code ist etwas mehr ... verdreht ...

  • Wieder Dspawnt das Atom.
  • \lenkt es nach rechts ab, in die 1.
  • Nun schickt das Portal das Atom zum nächsten 1. Das Atom trifft auf das, owas nur seine Masse ändert, aber das können wir ignorieren. Der Code wird umgebrochen, sodass das Atom wieder auf dasselbe trifft 1und zwei Zeilen nach unten überspringt. Auch hier können wir das ignorieren l, das Atom wickelt sich um und trifft das1 wieder. 1Der Code enthält jetzt kein weiteres Element, sodass das Atom ganz nach oben zurückspringt 1.
  • Nach nochmaligem Umwickeln der Kanten wird das Atom wieder durch abgelenkt \ geht nun wieder nach unten.
  • "Twister!" druckt den erforderlichen Code.
  • 1teleportiert das Atom erneut nach dem ersten ;, aber es ;wartet noch ein weiteres Mal darauf, dass es das Programm beendet.
Martin Ender
quelle
Wow, jetzt ganz nah! :) Ich bin sicher, es gibt einen Weg, kürzer zu sein ...
FryAmTheEggman
Warum liebt ihr die Spaltung?
J Atkin
@JAtkin Warum würden wir nicht? :)
Martin Ender
@ MartinBüttner Ich habe mir gerade überlegt warum für diese Herausforderung?
J Atkin
1
@JAtkin 2D-Sprachen schienen geeignet, und Fission schien besonders einfach zu sein, da Sie einen oder mehrere beliebige Einstiegspunkte in das Programm auswählen können.
Martin Ender
15

Spaltung , 35 Bytes

Teilungsansatz Nr. 3 (Nr. 4 mit der Nummer, die ich in meinem ersten Beitrag bearbeitet habe).

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

Probieren Sie es online!

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

Probieren Sie es online!

Erläuterung

Dies ist die bisher einfachste der Fission-Lösungen. In beiden Programmen gibt es zwei Einstiegspunkte: RErstellt ein nach rechts und Lein nach links gerichtetes Atom. In jedem Fall ;zerstört der eine sofort.

Jetzt im Hello, world!Programm druckt das Atom zuerst die Hälfte der Zeichenkette mit und lenkt "Hello, "dann (das sind Spiegel) das Atom auf die zweite nach links gehende Linie ab. (In Richtung des sich bewegenden Atoms lesen) Druckt den Rest der Zeichenfolge. ist jetzt ein No-Op und zerstört auch dieses Atom, wodurch das Programm beendet wird.\/"world!"L;

Das Twister!Programm ist im Wesentlichen das gleiche, aber um 180 Grad gedreht. Dieses Mal Lüberlebt das Atom und beginnt mit dem Drucken "Twist". Das \und /lenken es wieder auf die andere Linie um, jetzt gehts rechts. "er!druckt den Rest der Zeichenkette, Rist ein No-Op und ;beendet das Programm.

Martin Ender
quelle
Tolle! Ich denke, das ist so klein wie es nur geht, die Menge der Wiederverwendung ist beeindruckend.
FryAmTheEggman
4

Japt, 67 61 57 Bytes

6 Bytes dank @JAtkin gespeichert, 4 Bytes dank @Ian

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

Verdrehte:

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

Testen Sie es online: Original , Twisted

Wie es funktioniert

"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
quelle
Wenn dies so funktioniert, wie ich es glaube, können Sie das nachfolgende Leerzeichen entfernen, Twister!indem Sie die Leerzeichen durch ersetzen ..
J Atkin
@JAtkin So funktioniert es eigentlich nicht, aber so kann ich ein paar Bytes sparen. Vielen Dank!
ETHproductions
"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin
Könnte mit einem anderen
Füllzeichen
4
@ mbomb007 Seit wann ist "leicht zu lesen" ein Erfolg? : D
yo '
4

Python, 398 414 380 456 Byte *

Es ist gelungen, ein Update durchzuführen, damit es den Regeln entspricht, aber ich zögere immer noch, dies als wettbewerbsfähig zu bezeichnen. Da die kommentierten Zeilen für die Ausführung benötigt werden, habe ich sie in die Byteanzahl aufgenommen

Diese Lösung folgt nicht den Regeln, da zusätzlich zur erlaubten Ausgabe Fehlermeldungen ausgegeben werden.

Ich wollte nur sehen, ob dies in Python möglich ist. Es kann, aber es ist nicht schön.

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

Wenn verdreht wird

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
quelle
Ich denke, Sie könnten das Leerzeichen in jeder Zeile entfernen, dann die letzte Zeile insgesamt entfernen.
ETHproductions
Ich habe nicht darüber nachgedacht, da dies gegen die Regeln der anfänglichen Drehherausforderung verstößt, aber danke!
wnnmaw
Sie haben vergessen, den Code zu aktualisieren;)
ETHproductions
Ich dachte, es wäre nicht wirklich wichtig, aber ich tat es aus gutem
Grund
1
Ich denke, Sie haben falsch verstanden. Der Code muss ein gepolstertes Rechteck sein, aber Sie können das Leerzeichen rint 'in jeder Zeile entfernen .
ETHproductions
2

C (gcc) 87 Bytes

Aufgedreht

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

Probieren Sie es online!

Verdrehte

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

Probieren Sie es online!

Gastropner
quelle
1

Brainfuck, 467 367 285 Bytes

Aufgedreht

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

Probieren Sie es online!

Verdrehte

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

Probieren Sie es online!

Orthoplex
quelle
1
Sie können Bytes sparen, indem Sie die aktuell kürzeste bekannte "Hallo Welt!" Programm
Jo King
@JoKing Danke für den Vorschlag! Irgendwelche Ideen, wie man einen kleineren "Twister" findet! Programm auch?
Orthoplex
1
Mit bf-crunch bekomme ich einen 56-Byte-Twister! Programm
Jo King