Левая рука против правой руки - вызов машинисток


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
Почему Н левой рукой?
февраля

1
@tsh Я хотел разделить клавиатуру на 6/6 (или как можно ближе к ней), чтобы попытаться сохранить более четное количество символов для каждой «руки».
Дом Гастингс

8
// Может быть, я должен изучить пробелы и вернуться позже ...
18:18

@tsh, я думаю, пробельный ответ неизбежен! Не уверен, насколько конкурентоспособным это будет, хотя! Возможно, мне следовало обратиться к этому, слишком поздно сейчас!
Дом Гастингс

Это нормально, если у программы есть и другой (не пробельный) вывод, если он включает запрошенные тексты?
Гжегож Оледзки

Ответы:


12

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

Это пример, когда «языковые опции не учитываются» - это проблема. Решение Rigt Side использует -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, так что я еще не разобрался в этом .. РЕДАКТИРОВАТЬ: Гольф.

+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: Поместите число как двоичное в стек ( 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, но создание числа для 'e' ( SSTTN) или 'd' ( SSTTSN) оба короче или имеют одинаковую длину, как копия 1st ( STSSTN), поэтому я не мог применить этот трюк в Вторая программа для сохранения байтов. ПРИМЕЧАНИЕ. После 7-го этапа игры в гольф это не относится.

  5. В обеих программах я изменил шаг 1 цикла с SSSN(Push 0) на SSN(Push error_value) и удалил шаги 3.1 ( SNSDuplicate) и 3.2 ( NTSTNIf 0: Exit). Теперь он просто выйдет с ошибкой 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 .. Нужно исправить сейчас, спасибо, что заметили.
Кевин Круйссен

4

Lenguage, это много байтов

Левая рука 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 повторений aсимвола, что эквивалентно следующей программе Brainfuck:

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

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

Правая рука 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 повторений pсимвола, что эквивалентно следующей программе Brainfuck:

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

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



3

Деление , 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'

'ставлю следующий encoutered кода ASCII Чары в массе атомов, поэтому код некоторых Xхранятся первое, чем масса изменяются _и +к точному значению.
Иногда X'пропускается, если короче использовать как раз _и +.

Атом приходит слева, два раза отражается и ударяется }слева. В этом случае }работает как клонер, отправляя два одинаковых атома вверх и вниз. Вниз атом отражается от зеркала и идет налево. До атома обвивается, ударяется о то же зеркало, но снизу, и поэтому отражает право, встречая Oи печатая.
В конце последний атом встречается с последним, Oчтобы быть уничтоженным.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.