Учитывая 95 печатных символов в ASCII плюс символ новой строки, разбейте его на две равные, 48 групп символов (далее называемые группой A и группой B). Создайте взаимно-однозначное сопоставление по вашему выбору (на ваше усмотрение) между двумя группами. Другими словами, A
может отображаться a
и наоборот, но A
может также отображаться >
и наоборот, если это то, что вам нужно для вашей программы.
Разобрав ASCII на две группы, напишите две программы и / или функции, используя только символы в каждой группе соответственно. Другими словами, напишите одну программу / функцию, которая использует только символы в группе A, и другую программу / функцию, которая использует только символы в группе B.
Эти программы должны быть в состоянии получить один символ в качестве ввода. Программа, написанная с символами в группе A, должна выводить / возвращать один и тот же символ, если ввод был символом группы A, и отображенный символ группы A, если он получил символ группы B; Программа группы А должна всегда выводить символ группы А. Точно так же программа группы B должна выводить один и тот же символ, если это символ группы B, и отображенный символ группы B, если ввод является символом группы A.
Это может быть не так ясно, так что вот пример. Если вы предполагаете, что все заглавные буквы находятся в группе A, а все строчные буквы - в группе B, и вы выбрали однозначное сопоставление этих букв от одного к другому, то: Пример ввода / вывода:
Программа А:
Input Output
A A
D D
a A
q Q
Программа Б:
Input Output
A a
D d
a a
q q
Другие правила:
- Две программы не обязательно должны быть на одном языке.
- Они не должны быть обеими программами или обеими функциями; один может быть программой, другой функцией, это нормально.
- Им не нужно работать одинаково, иметь одинаковую длину и все такое; они просто должны соответствовать другим правилам выше.
- Да, только одна из ваших программ может использовать символы новой строки, и только одна может использовать пробелы (это может быть та же самая или другая программа).
- Вам не нужно использовать все 48 символов в каждой программе.
Стандартные лазейки запрещены, как обычно.Все программы должны быть автономными, без файлов, которые вы выбрали.
Критерии оценки: код-гольф . В частности, сумма байтов текста двух программ.
Пожалуйста, оставьте свой ответ следующим образом:
Язык - # байт + Язык - # байт = # байт
Однозначное описание вашего отображения. Если это сложно, используйте диаграмму следующим образом:
ABCDEFGHIJKLMNOPQRSTUVWXYZ (etc.) zyxwvutsrpqonmlkjihgfedcba (etc.)
Или вы можете просто объяснить это (сначала 48 карт, затем последние 48 в последовательности), а затем ваш ответ как обычно.
источник
+
и>
, а другая --
и<
. Затем вы должны попытаться сгенерировать недостающие операторы, такие как,
или.
в программе, которые не могут их использовать.Ответы:
CJam - 11 байтов + CJam - 25 байтов = 36 байтов
Персонажи выбираются в чередующихся группах по 16 человек:
Круто, что несколько отображений можно получить с помощью клавиши Shift :)
Программа А:
Попробуйте онлайн
Программа Б:
Попробуйте онлайн
Объяснение:
Программа А:
Программа Б:
источник
\n
), это просто не легко увидеть без проверки HTML. Вы можете добавитьi
в конце программы, чтобы вместо этого увидеть код ASCII (илиci
также иметь дело с вводом новой строки, так как в этом случае он выводит строку новой строки, а не символ)_0=
на0=_
так, чтобы он всегдаCJam -
46442611 байт + GolfScript -1421251159368474036 байт = 47 байтСпасибо Питеру Тейлору за игру в гольф на 6 байт от программы GolfScript (и прокладывание пути для многих других).
Благодаря Деннису за игру в гольф 15 байтов от программы CJam и 4 байта от программы GolfScript.
Группа A: все символы с четным кодом.
Группа B: все символы с кодом нечетного символа плюс символ новой строки.
Я использую очевидное сопоставление между ними, то есть пару тех символов, которые отличаются только младшим битом, а также
~
и\n
. Вот полная карта (столбцы):Программа A (CJam, протестируйте ее здесь ):
Программа B (GolfScript, протестируйте ее здесь ):
объяснение
Программа А
(Устаревший, обновлю завтра.)
Эта программа должна преобразовывать коды нечетных символов в четные, т. Е. Устанавливать младший значащий бит в 0. Очевидный способ сделать это - побитовое И с 126 (или 254 и т. Д.), Но короче установить его на 1 (через побитовое ИЛИ с 1) вместо этого и затем уменьшите результат. Наконец, нам нужно исправить новые строки вручную:
Программа Б
(Устаревший, обновлю завтра.)
Эта программа может просто установить младший значащий бит на 1 с помощью побитового ИЛИ с 1 сейчас. Но он должен проверить оба
\v
(код символа 0x0B) и<DEL>
(код символа 0xFF) вручную и установить их~
вместо этого. В GolfScript у меня не было доступа к eval, но вместо этого вы можете добавить строку в блок (которая затем становится частью кода в этом блоке), которую я мог бы отобразить на вход с помощью%
:А что касается сгенерированного кода в блоке:
источник
Java - 1088 байт + Java - 1144 байт = 2232 байта
Спасибо @ durron597 за помощь в игре 1090 байт из первой программы.
Доказательство того, что это можно сделать на одном языке (и не только на esolang).
Используйте трюк с Юникодом, чтобы преобразовать первый символ во все символы Юникода. Второй использует отражение, чтобы получить доступ к System.out для печати в std. вне. Он не может использовать U, потому что это было использовано в первой программе. Я знаю, что это может быть лучше, но я хотел сначала опубликовать правильное решение.
Группы довольно произвольно отображаются, но в основном первая требует только u, \ и шестнадцатеричных цифр (в любом случае).
Группы:
Первая программа:
Эквивалентно
Вторая программа:
Попробуйте их здесь: https://ideone.com/Q3gqmQ
источник
void x(int z)
, это тоже персонажи из первого набора символовИСПРАВЛЕНО! Pyth - 23 байта + Pyth - 30 байтов = 53 байта
упс Исправление ошибки --- пожалуйста, будьте терпеливытот же ASCII раскол, что и у Мартина:
Prog # 1: Тест онлайн
Prog # 2: онлайн тест
источник