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.

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.


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.


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.

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.


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

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

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


1

Brainfuck, 467 367 285 Bytes

Aufgedreht

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

Probieren Sie es online!

Verdrehte

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

Probieren Sie es online!


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.