Zbuduj pokręcone „Witaj świecie!”

31

Twoje zadanie jest dość proste, napisz program, który drukuje Hello, world!, który po przekręceniu tworzy program, który drukuje Twister!.

Jak skręca się sznurki

Algorytm skręcania jest bardzo prosty. Każda kolumna jest przesunięta w dół o indeks (kolumna 0 przesuwa się w dół 0, kolumna 1 przesuwa się 1, ...). Przesunięcie kolumny zawija się do góry. Wygląda to tak:

a
ba
cba
----
 cba
  cb
   c

Wszystko pod linią zawija się do góry. Prawdziwy przykład:

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

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

(Dalsze przykłady i twistery w twoim ulubionym języku są tutaj )

Punktacja

Twój program musi być wypełnionym prostokątem. To jest golf golfowy, więc wygrywa najmniej bajtów!

Zasady

  • Twój pierwszy program musi zostać wydrukowany Hello, world!. Dozwolony jest tylko jeden znak nowej linii.
  • Twój pierwszy i drugi program muszą być w tym samym języku.
  • Drugi program musi zostać wydrukowany Twister!. Dozwolony jest tylko jeden znak nowej linii.
  • Twój program musi mieć co najmniej 2 wiersze i 2 kolumny.
J Atkin
źródło
3
Na stronie kodowej Jelly znak, który odpowiada (i, dla wszystkich celów, zachowuje się jak), linefeed ma punkt kodowy 127 (ASCII DEL). Znak o punkcie kodowym 10 (wysuw wiersza ASCII) ma glif ½i przyjmuje pierwiastek kwadratowy z liczby. Który z nich należy uznać za nową linię tego wyzwania?
Dennis
Cholera, czy byłem jedynym, który miał nadzieję, że „Twisted Hello World” używa „twisted” w perwersyjnym sensie, więc zamiast tego
będziemy wydawać
@Dennis Podejrzewam, że lepszym rozwiązaniem w tym przypadku byłaby galaretka nowej linii.
J Atkin
@JAtkin OK, dziękuję za wyjaśnienie. Zaktualizowałem odpowiednio swoją odpowiedź.
Dennis

Odpowiedzi:

10

Galaretka , 33 31 29 bajtów

Oryginalny

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

Wypróbuj online.

Skręcone

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

Wypróbuj online!

Jak to działa

W każdym programie każda linia definiuje łącze. Ostatni jest głównym łączem i jest wykonywany podczas uruchamiania programu. Ponieważ nie ma żadnych odniesień do pierwszego linku, jest on po prostu ignorowany.

W przypadku obu programów “ɗ⁻%OḶ$“¡¦ḟṠ»zwraca listę ['Hello, world!', 'Twister!']przy użyciu statycznej kompresji słownika Jelly .

Jedyną różnicą między oryginalnym a skręconym kodem jest ostatni znak głównego linku. wybiera pierwszy ciąg listy i wybiera ostatni.

Dennis
źródło
2
Wygląda na to, że krzyczy „Holy Sh * t”
faza
42

Python 2, 59 bajtów

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

Skręcone:

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

Zasadniczo umieszcza Twister!dane w nieparzystych indeksach ciągu, a następnie zmienia się z usuwania pierwszych dwóch znaków (wypełniania) na usuwanie wszystkich pozostałych znaków.

PurkkaKoodari
źródło
To jest o wiele mądrzejsze niż moje podejście
wnnmaw
To trochę śmieszne, 40 entuzjastów?
J Atkin
@JAtkin Zauważyłem, że niektóre rozwiązania w języku Python mają tendencję do uzyskiwania ich ogromnych ilości. Nie narzekam: ~)
PurkkaKoodari
Cooler way:print " Hello, world!" [2::]
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Działa, ale zachowam to na razie.
PurkkaKoodari
17

Rozszczepienie , 215 162 56 53 50 bajtów

Oto początek:

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

Wypróbuj online!

Po skręceniu:

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

Wypróbuj online!

Wyjaśnienie

Hello, world!Kod jest dość prosty:

  • D spawnuje pojedynczy atom, schodząc w dół.
  • Dwa \(lustra) odchylają go do drugiej kolumny.
  • "Hello, world!" wypisuje wymagany ciąg.
  • 1to portal. Teleportuje atom do następnego 1w kolejności czytania, zachowując swój kierunek (to ten obok r).
  • Atom nadal przesuwa się w dół, w ;który niszczy atom i kończy program.

Przepływ sterujący dla Twister!kodu jest nieco bardziej ... zakręcony ...

  • Ponownie Dspawnuje atom.
  • \odbija go w prawo, do 1.
  • Teraz portal wysyła atom do następnego 1. Atom uderza w tę, októra właśnie zmienia swoją masę, ale możemy to zignorować. Kod jest zawijany, więc atom 1ponownie uderza w to samo , przeskakując o dwa rzędy. Ponownie możemy zignorować l, atom owija się i uderza 1ponownie. Teraz nie ma już więcej 1w kodzie, więc atom przeskakuje z powrotem 1na górę.
  • Po ponownym owinięciu się wokół krawędzi atom jest ponownie odchylany \, a teraz znów spada.
  • "Twister!" drukuje wymagany kod.
  • 1teleportuje atom jeszcze raz, obok pierwszego ;, ale ;czeka go kolejne zakończenie programu.
Martin Ender
źródło
Wow, już bardzo blisko! :) Jestem pewien, że istnieje sposób, aby być krótszym ...
FryAmTheEggman
Dlaczego lubicie rozszczepienie?
J Atkin
@JAtkin Dlaczego nie mielibyśmy? :)
Martin Ender
@ MartinBüttner Właśnie zastanawiałem się, dlaczego warto podjąć to wyzwanie?
J Atkin
1
Języki 2D @JAtkin wydawały się odpowiednie, a rozszczepienie wydawało się szczególnie proste, ponieważ możesz wybrać jeden lub więcej dowolnych punktów wejścia do programu.
Martin Ender
15

Rozszczepienie , 35 bajtów

Podejście do rozszczepienia nr 3 (nr 4 licząc to, które zedytowałem z pierwszego postu).

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

Wypróbuj online!

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

Wypróbuj online!

Wyjaśnienie

To właściwie najprostsze z dotychczasowych rozwiązań Fission. W obu programach są dwa punkty wejścia: Rtworzy atom skierowany w prawo i atom skierowany Lw lewo. W obu przypadkach ;jeden z nich niszczy natychmiast.

Teraz w Hello, world!programie, atom pierwsze pół drukuje ciąg z "Hello, ", wtedy \i /(które są lustra) odchylić atom na drugą linią idąc w lewo. "world!"(odczytany w kierunku poruszającego się atomu) drukuje resztę ciągu. Ljest teraz bezczynny i ;niszczy również ten atom, kończąc program.

Twister!Program jest zasadniczo taki sam, ale obrócone o 180 stopni. Tym razem Latom przeżyje i zacznie drukować "Twist". \I /ponownie odwrócić go na drugą linię, teraz będzie dobrze. "er!wypisuje pozostałą część łańcucha, Rjest no-op i ;kończy działanie programu.

Martin Ender
źródło
Niesamowity! Myślę, że jest to tak małe, jak to tylko możliwe, ilość ponownego użycia jest imponująca.
FryAmTheEggman
4

Japt, 67 61 57 bajtów

Zaoszczędź 6 bajtów dzięki @JAtkin, 4 bajty dzięki @Ian

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

Skręcone:

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

Przetestuj online: oryginalny , skręcony

Jak to działa

"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
ETHprodukcje
źródło
Jeśli działa to tak, jak myślę, możesz usunąć końcowe spacje Twister!, zastępując je spacjami ..
J Atkin
@JAtkin W rzeczywistości tak to nie działa, ale w ten sposób mogę zapisać kilka bajtów. Dzięki!
ETHprodukcje
"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin
Może być o wiele łatwiejszy do odczytania przy użyciu innego znaku wypełniającego ...
mbomb007
4
@ mbomb007 Od kiedy „łatwe do odczytania” osiągnięcie? : D
yo '
4

Python, 398 414 380 456 bajtów *

Udało mi się zaktualizować, aby był zgodny z zasadami, ale nadal waham się nazywać to konkurencyjnym. Ponieważ wiersze z komentarzem są potrzebne do uruchomienia, umieściłem je w liczbie bajtów

To rozwiązanie nie jest zgodne z regułami, ponieważ oprócz dozwolonych danych wyjściowych będą drukować komunikaty o błędach.

Chciałem tylko sprawdzić, czy można to zrobić w Pythonie. Może, ale to nie całkiem.

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

Kiedy skręca się

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
źródło
Myślę, że możesz usunąć spację w każdej linii, a następnie całkowicie usunąć ostatnią linię.
ETHprodukcje
Nie pomyślałem o tym, ponieważ było to sprzeczne z zasadami początkowego wyzwania skręcania, ale dzięki!
wnnmaw
Zapomniałeś zaktualizować kod;)
ETHproductions
Uznałem, że to nie będzie miało znaczenia, ale zrobiłem to dobrze
wnnmaw
1
Myślę, że źle zrozumiałeś. Kod musi być wypełniony prostokątem, ale możesz usunąć spację z rint 'każdej linii.
ETHprodukcje
2

C (gcc) , 87 bajtów

Rozkręcony

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

Wypróbuj online!

Skręcone

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

Wypróbuj online!

gastropner
źródło
1

Brainfuck, 467 367 285 bajtów

Rozkręcony

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

Wypróbuj online!

Skręcone

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

Wypróbuj online!

orthoplex
źródło
1
Możesz oszczędzać bajty, korzystając z najkrótszego znanego „Cześć, świecie!” program
Jo King
@JoKing Dziękujemy za sugestię! Wszelkie pomysły, jak znaleźć mniejszy „Twister!” program też?
orthoplex
1
Za pomocą bf-crunch mogę uzyskać 56-bajtowy „Twister!” program
Jo King