Вступ:
Давайте подивимось на стандартний калькулятор у 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
?