Codegolf — Создайте Запутанную Игру «Привет, Мир!»

  • Автор темы IgLa2010
  • Обновлено
  • 19, Oct 2024
  • #1
;

Ваша задача довольно проста: напишите программу, которая печатает

 
 Twister! 
, that when twisted creates a program that prints Hello, world! .

Как скручиваются струны

Алгоритм скручивания очень прост. Каждый столбец смещается вниз на свой индекс (столбец 0 перемещается вниз на 0, столбец 1 перемещается на 1,...). Сдвиг столбца переносится наверх. Это выглядит примерно так:

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

Все, что находится под строкой, переносится наверх. Реальный пример:

a ba cba ---- cba cb c

(Дальнейшие примеры и твистеры на вашем любимом языке — здесь). здесь)

Подсчет очков

Ваша программа должна представлять собой дополненный прямоугольник. Это код-гольф, поэтому побеждает наименьшее количество байтов!

Правила

  • Ваша первая программа должна печатать Twister! . Only one trailing newline is allowed.
  • Ваша первая и вторая программы должны быть на одном языке.
  • Ваша вторая программа должна печатать Hello, world! . Only one trailing newline is allowed.
  • Ваша программа должна иметь как минимум 2 строки и 2 столбца.

#code-golf #string #restricted-source #source-layout #hello-world

IgLa2010


Рег
12 Feb, 2013

Тем
87

Постов
190

Баллов
665
  • 26, Oct 2024
  • #2

Питон 2, 59 байт

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

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

Витой:

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

По сути, ставит mai (){puts(1?"Hello, world!":"Twister!");} main(){puts(0?"Hello, world!":"Twister!");} data in the odd indices of the string and then changes from removing the first two (padding) characters to removing every other character instead.

 

Любочка


Рег
09 Apr, 2011

Тем
67

Постов
198

Баллов
553
  • 26, Oct 2024
  • #3

Деление, 215 162 56 53 50 байт

Вот начало:

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

Попробуйте онлайн!

При скручивании:

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

Попробуйте онлайн!

Объяснение

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!' code is fairly simple:

  • "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 spawns a single atom, going downwards.
  • два "Hzezlzlzoz,z zwzorlzdz!"rz; "Tzwzizsztzezzzzzzrzzzz!"rz; (mirrors) deflect it onto the second column.
  • "Tzwzizsztzezzzzzzrzzzz!"rz; "Hzezlzlzoz,z zwzorlzdz!"rz; prints the required string.
  • R;.e..o..w..l..". R"T"lw!,i!os!dt\; .;H..l.. "!re"!/. is a portal. It teleports the atom to the next R"Hello, world!"; R;."..!..!!.!".\. .;T..w..i".se.t/. в порядке чтения, сохраняя направление (это то, что рядом с ).
  • Атом все еще движется вниз, в which destroys the atom and terminates the program.

Поток управления для ['Hello, world!', 'Twister!'] code is a bit more... twisted...

  • Снова, “ɗ⁻%OḶ$“¡¦ḟṠ» spawns the atom.
  • “ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ “ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ deflects it to the right, into the “ɗ⁻%OḶ$“¡¦ḟṠ»Ṫ “ɗ⁻%OḶ$“¡¦ḟṠ»Ḣ .
  • Теперь портал отправляет атом в следующий ; . The atom hits the R который просто меняет свою массу, но мы можем это игнорировать. Код повторяется, поэтому атом попадает в одно и то же место. "er! again, skipping down two rows. Again, we can ignore the / , атом совершает оборот и ударяется о \ again. Now there is no further "Twist" в коде, поэтому атом пропускает весь путь обратно к L at the top.
  • После повторного обтекания краев атом снова отклоняется на Twister! , now going down again.
  • ; prints the required code.
  • L teleports the atom once more, past the first "world!" , но есть еще один / waiting for it to terminate the program.
 

Boburisee


Рег
17 Apr, 2004

Тем
80

Постов
188

Баллов
618
  • 26, Oct 2024
  • #4

Деление, 35 байт

Подход деления №3 (№4, если считать тот, который я отредактировал из своего первого поста).

\

Попробуйте онлайн!

"Hello, "

Попробуйте онлайн!

Объяснение

На самом деле это самое простое из решений деления. В обеих программах есть две точки входа: Hello, world! creates a right-going atom and ; левый атом. В любом случае, L destroys one of them immediately.

Теперь в R program, the atom first prints half the string with R;H"ldor w /"er!" T"Le!ll,o""\"tsiw , затем R"Hello, " \"tri" T;L"!dlrow"/"es!w и ; (которые являются зеркалами) отклоняют атом на вторую линию, идущую влево. ; (read in the direction of the moving atom) prints the rest of the string. 1 теперь не используется и "Twister!" destroys this atom as well, terminating the program.

\ program is essentially the same but rotated by 180 degrees. This time, the 1 атом выживает и начинает печатать с 1 . The 1 and l again deflect it onto the other line, now going right. 1 печатает оставшуюся часть строки, o is a no-op and 1 завершает программу.

 

Penelopa8


Рег
10 Jul, 2011

Тем
60

Постов
200

Баллов
520
  • 26, Oct 2024
  • #5

Желе, 33 31 29 байты

Оригинал

1

Попробуйте онлайн.

витой

\

Попробуйте онлайн!

Как это работает

В каждой программе каждая строка определяет ссылку. Последняя ссылка является основной и выполняется при запуске программы. Поскольку ссылок на первую ссылку нет, она просто игнорируется.

Для обеих программ D yields the list Twister! , с использованием Статическое сжатие словаря Jelly.

Единственная разница между оригинальным и перекрученным кодом — это последний символ основной ссылки. ; selects the first string of the list, and r выбирает последний.

 

Hugo.rn


Рег
01 Oct, 2012

Тем
78

Постов
183

Баллов
573
  • 26, Oct 2024
  • #7

Япт, 67 61 57 байт

Сэкономлено 6 байт благодаря @JAtkin, 4 байта благодаря @Ian

"Hello, world!"

Витой:

\

Проверьте это онлайн: Оригинал, витой

Как это работает

D ||answer||

Python, 398 414 380 456 байт*

Удалось обновить так, чтобы оно соответствовало правилам, но я пока сомневаюсь назвать это конкурентоспособным. Поскольку для запуска необходимы закомментированные строки, я включил их в подсчет байтов.

Это решение не соответствует правилам, так как помимо разрешенного вывода будет печатать сообщения об ошибках.

Я просто хотел посмотреть, можно ли это сделать на Python. Можно, но это так нет симпатичный.

Hello, world!

Когда скручивание становится

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

С (ГКК), 87 байт

Раскрученный

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

Попробуйте онлайн!

витой

Twister!

Попробуйте онлайн!

 

Zeus001


Рег
02 Nov, 2004

Тем
87

Постов
211

Баллов
686
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно