Ваша задача состоит в том, чтобы расположить каждую сторону клавиатуры друг против друга и создать две программы на одном языке, одна из которых использует только клавиши на левой стороне стандартной клавиатуры, которая выводит 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
, ваши представления могут быть либо полными программами, либо обычными функциями, и оба могут быть разных типов (например, одна полная программа и одна функция).
Ваш результат должен включать в себя желаемый текст, любое количество начальных и конечных пробелов в порядке, если в нем содержится точный текст.
Стандартные лазейки запрещены .
Самые короткие решения на каждом языке выигрывают.
источник
Ответы:
Perl 5 , 261 = 88 + 173 байта
Это пример, когда «языковые опции не учитываются» - это проблема. Решение Rigt Side использует
-p
, левая сторона - нет. Так считается ли это как один и тот же язык или нет? И должны ли опции исходить из левого / правого набора символов?Слева 88
используйте
-M5.10.0
(или-E
из командной строки), чтобы активироватьsay
Опять спорный, если эта опция должна учитываться как код и должна идти с левой стороны, или если она попадает под «опции для установки языковой версии, не считаются»Попробуйте онлайн!
Право 173
Запустить с
-p
опцией (которая также состоит из правильных символов)Это почти наверняка можно улучшить, но сейчас было достаточно сложно заставить что-то работать. Не имея доступа к
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]}
!Пробелы ,
11751143655645638632639578 (293 + 285) байтовЭто должно было быть сделано ..; p
Определенно можно сыграть в гольф, заполнив стопку в обратном порядке и напечатав все в конце в некотором цикле, но это всего лишь моя вторая программа Whitespace, так что я еще не разобрался в этом ..РЕДАКТИРОВАТЬ: Гольф.+7 байт, потому что я ошибся
pumpkin
какpumkin
.. (Спасибо, что заметили, @ fəˈnɛtɪk .)Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только в качестве объяснения.Левосторонняя
Pollinium milk; plump pumpkin; lollipop?
:Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Правосторонний
Weatherheaded sweetheart haberdasheress!
:Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Объяснение:
Сначала строится стек в обратном порядке. Нажатие на номер производится следующим образом:
S
в начале: включить управление стекаS
: Толкать то, что следует как число в стекS
/T
: Знак бит гдеS
положительный иT
отрицательныйT
иS
сопровождаемыеN
: Поместите число как двоичное в стек (T=1
иS=0
).Затем он перевернет весь стек и напечатает все как символы. Это делается следующим образом:
SSSN
)Label_0
(NSSN
)SNS
)Label_1
(NTSTN
)TNSS
)Label_0
(NSNN
)Label_1
(NSSTN
)Это выше макет по умолчанию для обеих программ. Вот журнал изменений для этого макета по умолчанию, который еще больше уменьшил количество байтов:
Все числа уменьшены на одинаковую величину ( в первой программе и во второй), чтобы уменьшить двоичные цифры, используемые для теперь более низких чисел, и между шагами 3.2 и 3.3 добавлены следующие два подэтапа:
100
110
102
101
SSSTTSTTTSN
) в программе 1 или 101 (SSSTTSSTSTN
) в программе 2TSSS
)Я также использовал
SNS
в некоторых случаях дублировать вершины стека, который используется для ГОЛЬФll
,ll
,ee
иss
.Кроме того, шаг 4 (создать
Label_1
) был полностью удален. Он выйдет с ошибкой, но все равно выведет все правильно ( что разрешено в соответствии с мета ).Можно скопировать
n
'-ое значение с вершины стека (сSTS
индексом + 0n
), которое в некоторых случаях короче, чем создание нового числа.В первой программе я сделал это для: второй
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-го этапа игры в гольф это не относится.В обеих программах я изменил шаг 1 цикла с
SSSN
(Push 0) наSSN
(Push error_value) и удалил шаги 3.1 (SNS
Duplicate) и 3.2 (NTSTN
If 0: Exit). Теперь он просто выйдет с ошибкойSSN
неизвестного значения, как только попытается получить к нему доступ.Удален
SSN
(ERROR_VALUE) полностью в обеих программах. Теперь он остановится с ошибкой « Can't do Infix Plus », когда попытается выполнить функцию Add, но в стеке ничего не останется.Изменены постоянные значения
100
и102
на110
и101
соответственно. Здесь Java-программа используется для генерации110
константы; и здесь Java-программа используется для генерации101
константы. Обратите внимание, что теперь используется меньше копий, чем описано в пункте 4 выше, поскольку новые значения во многих случаях короче копий, поэтому повторное нажатие на них короче.источник
Lenguage, это много байтов
Левая рука 65721878296123796350462639500449228197646164622176218219262161264085219054330862921130017235140285847450697804123168755463678390611789188813352602373675420824698785508893489685489807676509031860196742608788337382365939621331808044899882497347443262020486908162559376082705672994569868 повторений
a
символа, что эквивалентно следующей программе Brainfuck:Попробуйте онлайн!
Правая рука 636605880289050800007960838028215177632402180834140124157618258152393860687206680356620669530585999501769442445842690365640523699585001167392310123764258380235064746704898152544431842440556280249638840374132783257375880144623575829131522611446544303839106505176776161206935275549421170646618266717893044911373119804737614528140 повторений
p
символа, что эквивалентно следующей программе Brainfuck:Попробуйте онлайн!
источник
CJam , 128 + 192 = 320 байт
Попробуйте онлайн!
Попробуйте онлайн!
источник
Деление , 958 + 752 = 1710 байт
._.
Слева
Попробуйте онлайн!
Правильно
Попробуйте онлайн!
Хорошо, здесь мы с простой удачей, на самом деле.
Первая интересная особенность Fission заключается в том, что у него есть 4 команды для создания указателей команд, атомов AKA: у
RLDU
меня есть две команды для левой и правой групп.Второй счастливый талисман - это 2 команды для вывода
!
иO
, которые встречаются в разных группах.В третий раз очарование. Обе команды вывода выводят ASCII-эквивалент массы атомов. Поэтому мне нужно как-то это изменить. Повезло мне! Оба
+ (+1 mass)
и_ (-1 mass)
находятся в одной группе и всем необходимым три$ (+1 energy)
,~ (-1 energy)
,@ (swap mass and energy)
в другой группе.Так что меня ничто не остановит, но это не может быть компактно, шаг за шагом настраивая массы.
Первая программа
Первая программа состоит только из
Dz^@$~!V
Старт может быть проще (просто
R
), но при использовании деления экономит несколько байтов для первой буквы.Атом, который идет налево, оборачивается и сталкивается
V
, что заставляет его падать и оборачиваться бесконечно, ничего не делая.Второй атом идет вправо и будет сталкиваться с кучей повторяющихся паттернов
@...@!
для каждой буквы на выходе.В конце концов он встретит
V
и разделит судьбу первого атома. Нет никакого способа уничтожить их или остановиться левой частью клавиатуры.Вторая программа
Второе приходит со своими взлетами и падениями. У меня есть команды для непосредственного изменения массы, но команда вывода
O
уничтожает атомы, поэтому мне нужно как-то их сохранить.Программа запускается справа от
L
атома, идущего влево.Повторный образец:
'
ставлю следующий encoutered кода ASCII Чары в массе атомов, поэтому код некоторыхX
хранятся первое, чем масса изменяются_
и+
к точному значению.Иногда
X'
пропускается, если короче использовать как раз_
и+
.Атом приходит слева, два раза отражается и ударяется
}
слева. В этом случае}
работает как клонер, отправляя два одинаковых атома вверх и вниз. Вниз атом отражается от зеркала и идет налево. До атома обвивается, ударяется о то же зеркало, но снизу, и поэтому отражает право, встречаяO
и печатая.В конце последний атом встречается с последним,
O
чтобы быть уничтоженным.источник