Ліва рука проти права - виклик машиністів


32

Ваше завдання полягає в тому, щоб нахилити кожну сторону клавіатури один проти одного і створити дві програми однією мовою, одна використовуючи лише клавіші з лівої сторони стандартної клавіатури, яка виводить Pollinium milk; plump pumpkin; lollipop?, а одна - за допомогою клавіш праворуч, що видає Weatherheaded sweetheart haberdasheress!.

Правила

Точні дозволені клавіші для лівої програми:

123456!@#$%^QWERTYqwertyasdfghASDFGH`zxcvb~ZXCVB

а для правої програми:

7890-=&*()_+uiop[]UIOP{}jkl;'\JKL:"|nm,./NM<>?

Існують чотири вільні клавіші Esc( \x1b), Tab( \x09), Space( \x20) і Enter( \x0aі / або \x0d), які можна використовувати в будь-якому, ні, або в обох рішеннях.

Ваш рахунок буде загальним числом байтів для обох програм. Хоча я використовував цей термін program, ваші подання можуть бути як повноцінними програмами, так і функціями, як зазвичай, і обидва можуть бути різного типу (наприклад, одна повноцінна програма та одна функція).

Результат повинен містити бажаний текст, будь-яка кількість пробілів пробілу та пробілів є чітким, доки в ньому відображається точний текст.

Стандартні лазівки заборонені .

Виграють найкоротші рішення в кожній мові.


6
Чому Н - ліва рука?
tsh

1
@tsh Я хотів розділити клавіатуру 6/6 (або максимально наблизитись до цієї), щоб спробувати зберегти більш рівну кількість символів для кожної "руки".
Дом Гастінгс

8
// Можливо, я повинен пізнати пробіли та пізніше ...
tsh

@tsh, я думаю, відповідь пробілу неминуча! Не впевнений, наскільки це було б конкурентоспроможно! Можливо, я повинен був би звернутися до цього, занадто пізно зараз!
Дом Гастінгс

Чи нормально, якщо програма також має інший (непробільний простір) вихід, якщо вона містить запитувані тексти?
Гжегож Оледзкі

Відповіді:


12

Perl 5 , 261 = 88 + 173 байт

Це приклад, коли "мовні параметри не враховуються" є проблемою. Рішення жорсткої сторони використовує -p, лівий бік - ні. Так вважається це однаковою мовою чи ні? І чи повинні виходити варіанти з лівого / правого набору символів?

Зліва 88

використовуйте -M5.10.0(або -Eз командного рядка), щоб активувати sayЗнову сперечається, якщо цей параметр повинен вважатися кодом і повинен надходити з лівого боку або якщо він підпадає під "параметри встановлення мовної версії не враховуються"

say eYYYYZYEYWYYYYYWQYEYQWQEYQYYZYWYYYYYQYQW^q%565504004w4052bw!504!w!04!204bw56550!6!h%

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

Право 173

Запустити з -pопцією (яка також складається з правильних символів)

}{*_=\(uuuuuuuuuuuuuiuuuuuuuuuuiuuuuuuuuuuuuuui&Uiipjipjiijij0puiipjiipp0jijipjipjipipp7|Ouiujujjuiuuu0kouuujuiju0jijujuikjujukk7&"7oulio7iouloli77ooliou7liiu7o7lu7io7o77i")

Це майже напевно можна вдосконалити, але поки що це було досить важко, щоб щось працювати. Не маючи доступу до print, say, $_і sub{}робить висновок каверзне

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


Не хвилюючись прапорами, я радий, що це дійсно. Набагато коротше рішення, ніж те, з чим я замислювався, як я телефонував evalчерез &{(u&I.._)[9-7].O.(P|'"'&_).("U::u"&"o::o").("&"|p).(uo&il).(u&i.._)[9-8].("{|o"&"}uu").(j..u)[9]}!
Дом Гастінгс

12

Пробіл , 1175 1143 655 645 638 632 639 578 (293 + 285) байт

Це треба було зробити ..; p
Однозначно можна пограти в гольф, заповнивши стопку, перевернуту і надрукувавши її в кінці кінців в певному циклі, але це лише моя друга програма Whitespace коли-небудь, тому я ще не повинен розібратися в цьому .. EDIT: Гольф.

+7 байт, тому що я неправильно написав pumpkinяк pumkin.. (Дякую, що помітили, @ fəˈnɛtɪk .)

Букви S(пробіл), T(вкладка) та N(новий рядок) додаються лише як підкреслення.
[..._some_action]додано лише як пояснення.

Лівосторонні Pollinium milk; plump pumpkin; lollipop?:

[S S T  T   S T T   T   T   N
_Push_-47_?][S S S T    S N
_Push_2_p][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_p][S S T  T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S T  S S T   N
_Copy_1st_l][S S T  T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   T   N
_Push_-3_k][S S S T S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S S T  S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S S T    S N
_Push_2_p][S S T    T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S N
_Push_-2_l][S S S T S N
_Push_2_p][S S T    T   S S T   T   T   S N
_Push_-78_space][S S T  T   T   S S T   T   N
_Push_-51_;][S S T  T   T   N
_Push_-3_k][S S T   T   S N
_Push_-2_l][S S T   T   S T N
_Push_-5_i][S S T   T   N
_Push_-1_m][S S T   T   S S T   T   T   S N
_Push_-78_space][S S T  T   N
_Push_-1_m][S S S T T   T   N
_Push_7_u][S S T    T   S T N
_Push_-5_i][S S S N
_Push_0_n][S S T    T   S T N
_Push_-5_i][S S T   T   S N
_Push_-2_l][S N
S _Duplicate_-2_l][S S S T  N
_Push_1_o][S S T    T   T   T   T   S N
_Push_-30_P][N
S S N
_Create_Label_LOOP][S S S T T   S T T   T   S N
_Push_110][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Спробуйте його в режимі он-лайн (лише з просторами, вкладками та новими рядками).

Правобічні Weatherheaded sweetheart haberdasheress!:

[S S T  T   S S S T S S N
_Push_-68_!][S S S T    T   T   S N
_Push_14_s][S N
S _Duplicate_14_s][S S S N
_Push_0_e][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   S N
_Push_14_s][S S T   T   S S N
_Push_-4_a][S S T   T   N
_Push_-1_d][S S S T T   S T N
_Push_13_r][S S S N
_Push_0_e][S S T    T   T   N
_Push_-3_b][S S T   T   S S N
_Push_-4_a][S S S T T   N
_Push_3_h][S S T    T   S S S T S T N
_Push_-69_space][S S S T    T   T   T   N
_Push_15_t][S S S T T   S T N
_Push_13_r][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S S N
_Push_0_e][S N
S _Duplicate_0_e][S S S T   S S T   S N
_Push_18_w][S S S T T   T   S N
_Push_14_s][S S T   T   S S S T S T N
_Push_-69_space][S S T  T   N
_Push_-1_d][S S S N
_Push_0_e][S S T    T   N
_Push_-1_d][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   S T N
_Push_13_r][S S S N
_Push_0_e][S S S T  T   N
_Push_3_h][S S S T  T   T   T   N
_Push_15_t][S S T   T   S S N
_Push_-4_a][S S S N
_Push_0_e][S S T    T   T   T   S N
_Push_-14_W][N
S S N
_Create_Label_LOOP][S S S T T   S S T   S T N
_Push_101][T    S S S _Add][T   N
S S _Print_as_char][N
S N
N
_Jump_to_Label_LOOP]

Спробуйте його в режимі он-лайн (лише з просторами, вкладками та новими рядками).


Пояснення:

Він спочатку будує стек перевернутим. Натискання числа здійснюється наступним чином:

  • S на початку: Увімкнути маніпуляцію зі стеком
  • S: Натисніть на те, що випливає з числа до стеку
  • S/ T: Підпишіть біт, де Sє позитивним і Tнегативним
  • Деякі Tі Sбуло N: Put числа в двійковому вигляді в стек ( T=1і S=0).

Тоді він перекинеться на стек, перевернутий і надрукує все як символи. Це робиться так:

  1. Натисніть 0 ( SSSN)
  2. Натисніть всі цифри, що вказують на перевернуті символи, як пояснено вище
  3. Створіть Label_0( NSSN)
    1. Скопіюйте верхню частину стека ( SNS)
    2. Якщо це значення дорівнює 0: Перейти до Label_1( NTSTN)
    3. Ще: Поп і надрукуйте верхню частину стека як символ ( TNSS)
    4. Перейти до Label_0( NSNN)
  4. Створити Label_1( NSSTN)

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

  1. Усі числа знижуються на однакову кількість (і в першій програмі, і в другій) для зменшення двійкових цифр, що використовуються для нині менших чисел, а між кроками 3.2 та 3.3 додаються два наступні кроки:100 110102 101

    • Натисніть 110 ( SSSTTSTTTSN) у програмі 1 або 101 ( SSSTTSSTSTN) у програмі 2
    • Розмістіть і додайте два перших значення стека один з одним, і результат - новий верх стека ( TSSS)
  2. Я також використав SNSу деяких випадках дублювати вершини стека, який використовується для ГОЛЬФ ll, ll, eeі ss.

  3. Крім того, крок 4 (створення Label_1) було видалено повністю. Він вийде з помилкою, але все одно виведе все правильно ( що дозволено відповідно до мета ).

  4. Можна скопіювати n'-ве значення з верхньої частини стека (з STSіндексом + 0 n), що коротше, ніж створення нового числа в деяких випадках.
    У першій програмі я це зробив для: другий pу pop( STSSTN(копія 1-й) коротший SSSTTSSN(створити номер для 'p')), другий lу lol( STSSTN(копія 1-й) коротший SSSTSSSN(створити число для 'l') )), другий pу p p( STSSTN(копія 1-й) коротший SSSTTSSN(створити номер для 'p')), другий pу pumlp( STSSTTN(копія 3-й) коротший SSSTTSSN(створити номер для 'p')), другий pу pmup( STSSTSN( копія 2-го) коротше, ніжSSSTTSSN(створити номер для 'p')), другий mу m m( STSSTN(копія 1-го) коротший SSSTSSTN(створити номер для 'm')), другий iу ini( STSSTN(копія 1-й) коротший SSSTSTN(створити номер для 'i')) ).
    У другій програмі це не робиться для жодної. Відстань між деякими досить коротким, як ereі ded, але і створенням номера для «х» ( SSTTN) або «D» ( SSTTSN) є коротше або рівною довжиною , як і копія 1 ( STSSTN), так що я не міг застосувати цей прийом в друга програма для збереження байтів. ПРИМІТКА. Після кроку 7 для гольфу, не все це вже застосовується.

  5. В обох програмах я змінив крок 1 циклу з SSSN(Push 0) на SSN(Push error_value) та видалив кроки 3.1 ( SNSдублювання) та 3.2 ( NTSTNякщо 0: вихід). Тепер він просто вийде з помилкою, яка SSNє невідомим значенням, як тільки спробує отримати доступ до неї.

  6. Видалено SSN(error_value) повністю в обох програмах. Тепер він зупиниться з помилкою " Can't do Infix Plus ", коли він намагатиметься виконувати функцію Add, не залишаючи нічого в стеку.

  7. Змінено постійні значення 100і 102до, 110і 101відповідно. Тут програма Java використовується для генерування 110константи; і тут програма Java використовується для генерування 101константи. Зауважте, що зараз використовується менше копій, ніж описано в пункті 4 вище, оскільки нові значення в багатьох випадках коротші, ніж копії, тому повторне натискання їх коротше.


ST-матеріал - просто натиснути число як двійкове, пробіл як 0, вкладка як 1. Вихід - це TNSS, тому у вас є додаткові два пробіли на початку кожної програми. Він також, ймовірно, зберігає байти для дублювання, а потім додає / віднімає кожен символ і перебирає значення в кінці.
Джо Кінг

1
Ти неправильно написав гарбуз.
fəˈnɛtɪk

@ fəˈnɛtɪk Whoops lol .. Слід виправити зараз, дякую, що помітили.
Kevin Cruijssen

4

Ленгуаг, це багато байтів

Ліва рука 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 повторень aсимволу, що еквівалентно наступній програмі Brainfuck:

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

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

Права рука 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 повторень pсимволу, що еквівалентно наступній програмі Brainfuck:

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

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



3

Fission , 958 + 752 = 1710 байт

._.

Зліва

D
z
^@$$$$$$$$$$$$$$$$$$$@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~@!!@~~~@!@$$$$$@!@~~~~~@!@$$$$$$$$$$$$@!@~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$@!@~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@~~~~@!@$$$$$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$$$@!@~~~~~~~~@!@$$$@!@~~~~~@!@~~@!@$$$$$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~@!@$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@!@$$$@!@~~~@!!@~~~@!@$$$$$$$@!@~@!@$@!@~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~@!V

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

Правильно

                                           } \} \    } \      } \    } \   } \   } \    } \   } \       } \    } \   } \ } \       } \   } \                                           } \   } \    } \    } \   } \   } \   } \} \      } \    } \    } \                                           } \ } \ } \   } \    } \   } \   } \    } \   } \   } \   } \    } \      } \ 
O________________________________________I'/O\/O\__u'/O\____i'/O\++p'/O\___/O\_i'/O\__u'/O\___/O\_____i'/O\++p'/O\+++/O\+/O\_______/O\_i'/O\_________________________________________I'/O\_u'/O\++p'/O\____/O\___/O\_i'/O\_u'/O\/O\____i'/O\++u'/O\__u'/O\_________________________________________I'/O\_/O\+/O\+++/O\____/O\___/O\_i'/O\++p'/O\___/O\_i'/O\_u'/O\____/O\____i'/O\+++++++P'L

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

Гаразд, тут ми насправді ._.
Перша класна особливість Fission полягає в тому, що він має 4 команди для створення командних покажчиків, атомів AKA:, RLDUтому у мене є дві команди для лівої та правої груп.
Друга щаслива принадність - це 2 команди для виведення !і O, які трапляються в різних групах.
Втретє чарівність. Обидва вихідні коміри виводять ASCII еквівалент маси атомів. Тому мені потрібно змінити це якось. Мені пощастило! Обидва + (+1 mass)і _ (-1 mass)знаходяться в одній групі і всім необхідним три $ (+1 energy), ~ (-1 energy), @ (swap mass and energy)в іншій групі.

Також є дзеркала для управління атомами в обох групах! Але я не використовував їх у першій програмі

Тож мене ніщо не зупинить, але це не може бути компактно, встановлюючи маси крок за кроком.

Перша програма

Перша програма складається лише з Dz^@$~!V

D   create atom, going down
z   set its mass to ASCII code of 'z'
^   split atom in 2, dividing their mass. One goes left, second - right

Запуск може бути спрощеним (просто R), але за допомогою ділення зберігається кілька байтів для першої літери.
Атом, що йде ліворуч, обгортає і стикається V, що змушує його спускатися і загортатися нескінченно, нічого не роблячи.
Другий атом йде річ і зустріне купу повторних шаблонів @...@!для кожної літери для виведення.

@   swap atom's mass and energy
... increament or decrement energy until it would match desired ASCII code
@   swap again
!   print character by atoms mass

Врешті-решт вона зіткнеться Vі поділить долю першого атома. Немає можливості їх знищити або зупинити лівою частиною клавіатури.

Друга програма

Друге - з підйомами та падіннями. У мене є команди безпосередньо змінювати масу, але команда виведення Oзнищує атоми, тому мені потрібно якось їх зберегти.
Програма запускається праворуч Lз того, що атом йде ліворуч.

Повторний шаблон:

} \
/O\...X'

'ставить наступний розширений код ASCII в масі атомів, тому код деяких Xзберігається спочатку, ніж маса змінюється на _та +точне значення.
Іноді X'пропускається, якщо коротше використовувати просто _і +.

Атом виходить зліва, дзеркало два рази і удари }зліва. У цьому випадку }працює як клонер, посилаючи два однакових атома вгору і вниз. Вниз атом відбивається дзеркалом і йде ліворуч. Вгору атом обгортає, б'є в одне дзеркало, але знизу, і так відображає право, зустрічаючи Oта друкуючи.
Зрештою, останній атом зустрічається остаточним Oдля руйнування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.