Вдохновленный этим вопросом , который далее вдохновил этот , написать программу , которая принимает два целых числа и складывает их уникальным способом, путем выполнения операции ИЛИ на сегментах , используемых для их отображения на дисплее 7-сегмента. Для справки, цифры представлены следующим образом:
_ _ _ _ _ _ _ _
| | | _| _| |_| |_ |_ | |_| |_|
|_| | |_ _| | _| |_| | |_| _|
Обратите внимание, что 1 использует два сегмента справа, а не слева. Таким способом можно создать два специальных символа, которые не являются числами. Смотрите таблицу дополнений ниже:
| 0 1 2 3 4 5 6 7 8 9
--+--------------------
0 | 0 0 8 8 8 8 8 0 8 8
1 | 0 1 a 3 4 9 8 7 8 9
2 | 8 a 2 a 8 8 8 a 8 8
3 | 8 3 a 3 9 9 8 3 8 9
4 | 8 4 8 9 4 9 8 Q 8 9
5 | 8 9 8 9 9 5 6 9 8 9
6 | 8 8 8 8 8 6 6 8 8 8
7 | 0 7 a 3 Q 9 8 7 8 9
8 | 8 8 8 8 8 8 8 8 8 8
9 | 8 9 8 9 9 9 8 9 8 9
Полезные наблюдения:
- Любая цифра плюс сама по себе равна
- 8 плюс любая цифра равна 8
- 2 плюс 1, 3 или 7 равно букве «а» (должно быть в нижнем регистре)
- 4 плюс 7 равняется 'q' или 'Q', на ваш выбор
- Числа должны быть выровнены по правому краю, поэтому цифры следует добавлять справа налево. Если одно число имеет больше цифр, чем другое, дополнительные цифры в начале должны быть неизменными. Нет начальных 0, если только число не равно 0.
- Все числа будут 0 или больше. Вам не нужно обрабатывать знак «-». (Главным образом потому, что нет подходящей суммы на сумму «-» и «1» или «7».)
Ваша программа должна принимать 2 целых числа в любом формате, который вы выберете, и выводить строку, содержащую их «сумму» при расчете таким образом. Это код-гольф, поэтому ваша программа должна быть как можно меньше.
Примеры:
- Вход: 12345, 123. Выход: 12389
- Вход: 88888, 42. Выход: 88888
- Вход: 0, 23. Выход: 28
- Вход: 120, 240. Выход: a80
- Вход: 270, 42. Выход: 2Q8 (или 2Q8)
- Вход: 1234567890, 1234567890. Выход: 1234567890
code-golf
kolmogorov-complexity
Даррел Хоффман
источник
источник
Q
быть в нижнем регистре? Фактические формы , выглядит как ,q
а неQ
a
не менее, он должен быть в нижнем регистре, так какA
выглядит совершенно иначе.Ответы:
Утилиты Bash + Common Linux, 80
Обратите внимание, что
^?
источник должен быть заменен символом ASCII 0x7f.Строка
s
- это каждая 7-сегментная цифра,0-9, a, Q
закодированная с каждым сегментом, соответствующим биту ASCII-символа.h()
Функция транслитерирует номер входа десятичных чисел в кодировке , указаннойs
, затем выводит результат в качестве исходного шестнадцатеричной строки.Две результирующие необработанные шестнадцатеричные строки редактируются
OR
вместе с использованием обычной арифметики bash, а затем выводятсяdc
с помощьюP
команды в качестве байтового потока. Затем этот поток байтов транслитерируется обратно в десятичное число + a + Q и выводится.Также обратите внимание, что при использовании
<<<
конструкции bash herestring в функции новаяh()
строка неявно добавляется к перенаправленной строке. Это не имеет значения - оно просто переводится0x0a
в конец каждой шестнадцатеричной строки; когда два шестнадцатеричных числаOR
объединены, результат остается0x0a
в последнем символе, который не транслитерируется и, таким образом, просто переводится обратно на новую строку, которая выводится после результата.Тестовый вывод:
источник
Python 2, 155 байт
Заменить
♥
сDEL
характером (0x7F).Вызов
f("12345", "123")
принты12389
.источник
%13
трюк работает. Очевидно, вы выбрали набор, в котором не было символов ниже 40, но для перевода на JavaScript я выбрал самый короткий набор. Третий набор самый длинный в JavaScript, это было бы111,5,118,117,29,121,123,37,127,125
.JavaScript (ES6),
158144 байтаСпас 14 байтов, бесстыдно украдя
%13
трюк Линн .источник
Java, 170 байт
Это ужасно долго ... но это все равно Java.
Полная программа с негольфированным кодом
Весь вывод (все дублируются один раз)
источник