Вызов:
В социальных сетях циркулирует глупая головоломка:
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