Виклик:
У соціальних мережах циркулює нерозумна головоломка, на якій написано:
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
Реалізуйте функцію чи оператора, який, якщо дано два додатних цілих числа x
та y
такий, що x > y > 0
дає правильну відповідь як ціле число , де цифрами відповіді є цифри, за якими x * y
йдуть цифри, x + y
а за ними - цифри x - y
. Дуже просто.
Правила:
- Стандартні лазівки заборонені.
- Це код-гольф, тому найкоротший код в байтах виграє.
- Перевірка вхідних даних не потрібна. Ця програма може вийти з ладу або повернути сміття, якщо йому дано недійсне введення.
- Вам дозволяється використовувати числові функції та оператори (включаючи цілі чи плаваючі точки, функції математичної бібліотеки та інші функції, які приймають і повертають числа).
- Ви можете використовувати функцію, яка повертає кількість цифр числа, якщо це можливо.
- Ви НЕ дозволяється використовувати такі рядки або будь-якого виду конкатенації в будь-якому місці вашого коду.
- Результат може бути повернутий або висунутий у стек, що залежно від мови. Результатом має бути ціле число, а не рядок.
Приклад коду:
Наступний код створює діадичний оператор з ім'ям X
.
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