Побудуйте кручений "Привіт, світ!"


31

Ваше завдання досить просте, пишіть програму, яка друкує Hello, world!, що при скручуванні створює програму, яка друкує Twister!.

Як закручуються струни

Алгоритм скручування дуже простий. Кожен стовпець зміщується вниз за своїм індексом (col 0 рухається вниз 0, col 1 рухається 1, ...). Зсув стовпчика завершується до верху. Це виглядає приблизно так:

a
ba
cba
----
 cba
  cb
   c

З усім під лінією, що загортається до верху. Реальний приклад:

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

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

(Подальші приклади та твістери улюбленої мови тут )

Оцінка балів

У вашій програмі повинен бути прокладений прямокутник. Це кодовий гольф, тому виграш найнижчих байтів!

Правила

  • Ваша перша програма повинна надрукувати Hello, world!. Допускається лише один зворотний рядок.
  • Ваша перша та друга програми повинні бути однаковою мовою.
  • Ваша друга програма повинна надрукувати Twister!. Допускається лише один зворотний рядок.
  • Ваша програма повинна мати щонайменше 2 рядки та 2 стовпці.

3
На кодовій сторінці Jelly символ, що відповідає (і для всіх цілей діє таким чином), передача рядків має кодову точку 127 (ASCII DEL). Символ з кодовою точкою 10 (ASCII linefeed) має гліф ½і приймає квадратний корінь числа. Яку з двох слід вважати новою лінією цього виклику?
Денніс

Дарн, чи я був єдиним, хто сподівався, що "Скручений привіт світ" використовує "скручений" у перекрученому сенсі, щоб ми замість цього
виводили

@ Денніс Я вважаю, що кращим для використання в цьому випадку буде желе нової лінії.
J Atkin

@JAtkin Добре, дякую за уточнення. Я відповідно оновив свою відповідь.
Денніс

Відповіді:


10

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

Оригінал

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

Спробуйте в Інтернеті.

Скручений

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

Спробуйте в Інтернеті!

Як це працює

У кожній програмі кожен рядок визначає посилання. Остання є основною ланкою, і вона виконується при запуску програми. Оскільки немає посилань на перше посилання, воно просто ігнорується.

Для обох програм “ɗ⁻%OḶ$“¡¦ḟṠ»виходить список ['Hello, world!', 'Twister!'], використовуючи статичний стиснення словника Jelly .

Єдина відмінність оригіналу від скрученого коду - це останній символ основного посилання. вибирає перший рядок списку та вибирає останній.


2
Схоже, кричить "Holy Sh * t"
фаза

42

Python 2, 59 байт

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

Скручений:

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

В основному, розміщує Twister!дані в непарних індексах рядка, а потім змінюється від видалення перших двох (padding) символів до видалення всіх інших символів замість цього.


Це настільки розумніше, ніж мій підхід
wnnmaw

Це щось смішно, 40 оновлень?
J Atkin

@JAtkin Я помітив, що деякі рішення Python, як правило, отримують їх величезна кількість. Не те, що я
скаржусь

print " Hello, world!" [2::]
Більш крутий

@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Працює, але я просто триматиму його так, як зараз.
PurkkaKoodari

17

Fission , 215 162 56 53 50 байт

Ось початок:

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

Спробуйте в Інтернеті!

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

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

Спробуйте в Інтернеті!

Пояснення

Hello, world!Код досить простий:

  • D породжує єдиний атом, йде вниз.
  • Два \(дзеркала) відводять його на другий стовпчик.
  • "Hello, world!" друкує необхідний рядок.
  • 1є порталом. Він телепортує атом до наступного 1в порядку читання, зберігаючи його напрямок (це той, який знаходиться поруч з r).
  • Атом все ще рухається вниз, в ;який руйнує атом і припиняє програму.

Контрольний потік для Twister!коду трохи більше ... кручений ...

  • Знову Dпороджує атом.
  • \відхиляє його праворуч, в 1.
  • Тепер портал посилає атом наступному 1. Атом вражає те, oщо просто змінює свою масу, але ми можемо це ігнорувати. Код загортається, щоб атом 1знову потрапив у те саме , пропускаючи два ряди. Знову ми можемо ігнорувати l, атом загортається і 1знову б’є . Тепер 1у коді більше немає, тому атом пропускає весь шлях до 1вершини.
  • Після того, як ще раз обернутись по краях, атом знову відхиляється \, тепер знову знижується.
  • "Twister!" друкує необхідний код.
  • 1телепортує атом ще раз, минулий перший ;, але є ще одне ;очікування, щоб воно припинило програму.

Ух, дуже близько зараз! :) Я впевнений, що є спосіб бути коротшим ...
FryAmTheEggman

Чому ви любите поділ?
J Atkin

@JAtkin Чому б нам не? :)
Мартін Ендер

@ MartinBüttner Я конкретно думав, чому саме для цього виклик?
J Atkin

1
@JAtkin 2D мови здалися підходящими, а Fission видався особливо простим, оскільки ви можете вибрати одну або кілька довільних точок входу в програму.
Мартін Ендер

15

Розділення , 35 байт

Підхід до поділу №3 (№4, рахуючи той, який я відредагував у своєму першому дописі).

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

Спробуйте в Інтернеті!

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

Спробуйте в Інтернеті!

Пояснення

Це насправді найпростіший з рішень Fission досі. В обох програмах є дві точки входу: Rстворює праворушний атом і Lлівий атом. У будь-якому випадку ;знищення одного з них негайно.

Тепер у Hello, world!програмі атом спочатку друкує половину рядка з "Hello, ", потім \і /(які є дзеркалами) відхиляє атом на другий рядок, що йде ліворуч. "world!"(читайте в напрямку атома, що рухається) друкує решту рядка. Lтепер не працює і ;знищує і цей атом, припиняючи програму.

Twister!Програма є по суті такою ж , але з поворотом на 180 градусів. Цього разу Lатом виживає і починає друкувати "Twist". \І /знову відхиляють його на іншу лінію, тепер ладиться. "er!друкує решту рядка, Rне працює та ;завершує програму.


Дивовижний! Я думаю, що це приблизно настільки мало, наскільки це можливо, кількість повторного використання вражає.
FryAmTheEggman


4

Japt, 67 61 57 байт

Збережено 6 байт завдяки @JAtkin, 4 байти завдяки @Ian

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

Скручений:

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

Перевірте це в Інтернеті: оригінал , кручений

Як це працює

"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

Якщо це працює так, як я думаю, це є, ви можете видалити пробіл після Twister!заміни пробілів на ..
J Atkin

@JAtkin Це насправді не працює так, але я можу зберегти купу байтів таким чином. Спасибі!
ETHproductions

"T.w.i.s.t.e.r.!. . . . . "k".(newline)"H.e.l.l.o.,. .w.o.r.l.d.!"k".
J Atkin

Можливо, набагато простіше читати з іншим символом наповнення ...
mbomb007

4
@ mbomb007 Відколи досягнення "легко читати"? : D
yo '

4

Python, 398 414 380 456 байт *

Вдалося оновити, щоб воно відповідало правилам, але я все ще вагаюся називати це конкурентоспроможним. Оскільки коментовані рядки потрібні для його запуску, я включив їх у кількість байтів

Це рішення не відповідає правилам, оскільки друкує повідомлення про помилки на додаток до дозволеного виводу.

Я просто хотів подивитися, чи можна це зробити в пітоні. Може, але це не дуже.

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

Коли кручений стає

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

Я думаю, ви можете видалити пробіл у кожному рядку, а потім остаточно видалити останній рядок.
ETHproductions

Я не думав цього робити, оскільки це було проти правил первинного виклику, але спасибі!
wnnmaw

Ви забули оновити код;)
ETHproductions

Я подумав, що це насправді не має значення, але я зробив це за гарної міри
wnnmaw

1
Я думаю, що ви зрозуміли неправильно. Код повинен бути вкладеним прямокутником, але ви можете видалити пробіл rint 'у кожному рядку.
ETHproductions


1

Brainfuck, 467 367 285 байт

Розкручується

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

Спробуйте в Інтернеті!

Скручений

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

Спробуйте в Інтернеті!


1
Ви можете зберегти байти, скориставшись найкоротшим відомим "Привіт, світ!" програма
Jo King

@JoKing Дякую за пропозицію! Будь-які ідеї, як знайти менший "Twister!" програма також?
ортоплекс

1
Використовуючи bf-crunch, я можу отримати 56 байт "Twister!" програма
Jo King
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.