Вызов:
В социальных сетях циркулирует глупая головоломка:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Реализуйте функцию или оператор, который, когда ему дано два положительных целых числа x
и так y
, что x > y > 0
дает правильный ответ в виде целого числа , где цифры ответа - это цифры, за x * y
которыми следуют цифры, за x + y
которыми следуют цифры x - y
. Очень просто.
Правила:
- Стандартные лазейки запрещены.
- Это код-гольф, поэтому выигрывает самый короткий код в байтах.
- Проверка входных данных не требуется. Эта программа может аварийно завершить работу или вернуть мусор при неправильном вводе.
- Вы можете использовать числовые функции и операторы (включая целочисленные и с плавающей точкой, функции математической библиотеки и другие функции, которые принимают и возвращают числа).
- Вам разрешено использовать функцию, которая возвращает количество цифр числа, если это применимо.
- Вы не можете использовать строки или любые виды конкатенации в любом месте вашего кода.
- Результат может быть возвращен или помещен в стек, в зависимости от языка. Результатом должно быть целое число, а не строка.
Образец кода:
Следующий код создает двоичный оператор с именем X
.
Х ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
Объяснение:
В APL вы оцениваете справа налево.
⍺ and ⍵
левый и правый операнд соответственно⌊10⍟⍺-⍵
гласит:floor of log10(⍺-⍵)
. Сначала выполняется вычитание, затем логарифм, затем пол. Справа налево log10 делается для того, чтобы посчитать цифры⍺-⍵
(потом вы должны сложить 1).⍺×⍵×10*(...)
гласит:10 to the (...)th power, multiplied by ⍵, multiplied by ⍺
Следовательно,
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵
это произведение, смещенное влево на сумму количества цифр суммы и разности. Умножение на степень 10 сместит целое число влево.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)
сумма, сдвинутая влево на количество цифр разницы.(⍺-⍵)
это разница. Сдвиг не требуется здесь.X←{...}
как вы определяете оператор в APL.
Примеры:
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU dc:
Следующий код создает макрос с именем a
:
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
Объяснение:
sx
иsy
вытолкнуть элемент из стека и сохранить его в регистрахx
иy
, соответственно.lx
иly
загрузить элемент из регистровx
иy
соответственно и поместить его в стек.d
дублирует последний элемент в стеке.^
вычисляет силу двух чисел.Z
выскакивает число и возвращает его количество цифр. Это сделано потому, чтоdc
не имеет функции логарифма.[...]sa
хранит макрос в реестреa
.la
загружает это.x
выполняет макрос в верхней части стека.
Примеры:
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153