Виклик:
У соціальних мережах циркулює нерозумна головоломка, на якій написано:
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