Вступ:
Давайте подивимось на стандартний калькулятор у Windows:
Для цього виклику ми розглянемо лише наступні кнопки та проігноруємо все інше:

7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
Виклик:
Вхід:
Ви отримаєте два входи:
- Одне - це те, що вказує обертання з кроком в 90 градусів
- Інший - це список координат, що представляють кнопки, натиснуті на обертовому калькуляторі.
На основі першого вводу ми обертаємо згаданий макет за годинниковою стрілкою з кроком у 90 градусів. Отже, якщо вхід є 0 degrees, він залишається таким, як є; але якщо вхід є 270 degrees, він буде повернутий три рази за годинниковою стрілкою (або один раз проти годинникової стрілки). Ось чотири можливі схеми:
Default / 0 degrees:
7 8 9 /
4 5 6 *
1 2 3 -
0 0 . +
90 degrees clockwise:
0 1 4 7
0 2 5 8
. 3 6 9
+ - * /
180 degrees:
+ . 0 0
- 3 2 1
* 6 5 4
/ 9 8 7
270 degrees clockwise / 90 degrees counterclockwise:
/ * - +
9 6 3 .
8 5 2 0
7 4 1 0
Другий вхід - це список координат у будь-якому розумному форматі † . Наприклад (0D-індекс 2D цілого масиву):
[[1,2],[2,3],[0,3],[1,0],[1,1]]
Вихід:
Виводимо як суму, так і результат (і знак рівності =).
Приклад:
Отже, якщо вхід є 270 degreesі [[1,2],[2,3],[0,3],[1,0],[1,1]], вихід стане:
517*6=3102
Правила виклику:
- † Входи можуть бути в будь-якому розумному форматі. Перший вхід може бути
0-3,1-4,A-D,0,90,180,270і т.д. другий вхід може бути 0 індексовані 2D масив, 1-індексованих 2D масив, рядок, список точкових об'єктів і т.д. Ваш виклик. Можна навіть поміняти місцями координати x і y порівняно з наведеними прикладами. Будь ласка, вкажіть, які формати введення ви використовували у своїй відповіді! - Ви можете додати пробіли (тобто
517 * 6 = 3102), якщо хочете. - Ви можете додати нулі після коми через максимум три (тобто
3102.0/3102.00/3102.000замість3102або0.430замість0.43). - Вам не дозволяється додавати дужки у висновок, тому
(((0.6+4)-0)/2)/4=0.575це не є дійсним результатом. - Ви можете використовувати інші операнди-символи для вашої мови. Так
×або·замість цього*; або÷замість/; тощо. - Оскільки калькулятор автоматично обчислює при введенні операнда, вам слід ігнорувати пріоритет оператора! Так
10+5*3вийде45((10+5)*3=45), а не25(10+(5*3)=25)
(тобто10→+→5→*(тепер на дисплеї відображається 15) →3→=(тепер відображається відповідь45)). Майте це на увазі під час використанняevalта подібних функцій на отриманій сумі. - Не буде жодних тестових випадків для поділу на 0.
- Не буде жодних тестових випадків із результатом більше трьох десяткових цифр, тому немає необхідності округлювати результат.
- Не буде жодних тестових випадків, коли кілька операндів слідують один за одним, або де дві точки слідують один за одним.
- Не буде жодних тестових випадків для від'ємних чисел. Знак мінус (
-) буде використовуватися лише як операнд, а не як негативний. - Не буде жодних тестових випадків
.##без провідного числа перед комою (тобто2+.7не буде дійсним тестовим випадком, але це2+0.7може бути).
Загальні правила:
- Це код-гольф , тому найкоротша відповідь у байтах виграє.
Не дозволяйте мовам з кодовим гольфом відштовхувати вас від публікації відповідей з мов, що не кодують гольф. Спробуйте придумати якомога коротшу відповідь на "будь-яку" мову програмування. - Для вашої відповіді застосовуються стандартні правила , тому вам дозволяється використовувати STDIN / STDOUT, функції / метод з відповідними параметрами, повноцінні програми. Твій дзвінок.
- Лазівки за замовчуванням заборонені.
- Якщо можливо, додайте посилання з тестом для вашого коду.
- Також, будь ласка, додайте пояснення, якщо це необхідно.
Тестові приклади:
Input: 270 degrees & [[1,2],[2,3],[0,3],[1,0],[1,1]]
Output: 517*6=3102
Input: 90 degrees & [[3,1],[0,0],[0,1],[3,3],[2,0],[0,3],[0,0],[0,2],[3,0],[2,1]]
Output: 800/4+0.75=200.75
Input: 0 degrees & [[0,0],[1,0],[2,0],[3,0],[1,2],[2,1],[2,2]]
Output: 789/263=3
Input: 180 degrees & [[3,0],[1,0],[1,2],[0,0],[3,2],[0,1],[2,0],[0,3],[2,1],[0,3],[3,2]]
Output: 0.6+4-0/2/4=0.575
1+-*/+-*/2воля дає 0.5на Windows (10) калькулятор.
[1,3],
2+.7?