Мета-фон
Це було поставлено як питання щодо загадки , і миттєва реакція була "ну хтось просто вирішить це комп'ютером". Була дискусія про те, наскільки складною має бути програма для її вирішення. Що ж, "наскільки складною повинна бути ця програма" - це в значній мірі визначення коду-гольфу , тож, можливо, PPCG може вирішити проблему?
Фон
Рівняння сірники в основному нормальне математичне рівняння, але де цифра і оператори будуються фізично, поміщаючи сірники на стіл. (Основна відповідна особливість сірників тут полягає в тому, що вони досить жорсткі і мають постійну довжину; іноді люди використовують замість них інші предмети, наприклад ватні тампони.)
Для цього виклику нам не потрібно визначати конкретні правила того, як влаштовані сірники (як це пов'язане завдання); скоріше, нас просто цікавить, скільки сірників нам знадобиться, щоб представити вираз, який оцінюється на задане число.
Завдання
Ось алфавіт цифр і математичних операторів, якими ви можете скористатися, кожен з яких має вартість у відповідних таблицях:
0
, вартістю 6 сірників1
, вартістю 2 сірника2
, вартістю 5 сірників3
, вартістю 5 сірників4
, вартістю 4 сірника5
, вартістю 5 сірників6
, вартістю 6 сірників7
, вартістю 3 сірника8
, вартістю 7 сірників9
, вартістю 6 сірників+
, вартістю 2 сірника-
, вартість 1 матчу×
, вартістю 2 сірника
(Ви можете уявити , ×
як *
на виході вашої програми , якщо ви хочете, щоб уникнути необхідності використовувати не-ASCII символи. В більшості кодувань, ×
займає більше байт , ніж *
, і тому я вважаю , що більшість програм захочуть скористатися цією свободою дій .)
Вам потрібно написати програму, яка приймає негативне ціле число як вхідне (будь-яким розумним способом ) і виробляє вираз, який оцінює це ціле число як вихід (знову ж таки будь-якими розумними засобами). Крім того, вираз має бути нетривіальним: вона повинна містити принаймні один оператор +
, -
або ×
. Нарешті, вираз, який ви виводите, повинен бути найдешевшим (або прив'язаним до найдешевшого) з точки зору загальної вартості відповідника, серед усіх результатів, які в іншому випадку відповідають специфікації.
Роз'яснення
- Ви можете формувати багатоцифрові числа за допомогою виведення декількох цифр підряд (наприклад
11-1
, це дійсний результат для отримання10
). Щоб бути абсолютно точним, отримане число інтерпретується у десяткові. Цей вид конкатенації не є операцією, яка працює на проміжних результатах; лише на буквальних цифрах, які відображаються в оригінальному виразі. - Для цього завдання.
+
,-
та×
є операторами фіксації; їм потрібен аргумент зліва і справа. Вам заборонено використовувати їх у позиції префікса, як+5
або-8
. - У вас немає дужок (чи будь-який інший спосіб контролювати пріоритет). Вираз оцінюється за типовими правилами пріоритетності за замовчуванням (множення відбувається спочатку, а потім додавання та віднімання оцінюються зліва направо).
- Ви не маєте доступу до будь-яких математичних операторів чи констант, окрім перелічених вище; Рішення "бічного мислення" часто приймаються на Puzzling, але не має сенсу вимагати, щоб комп'ютер сам придумував їх, і тут, на PPCG, нам подобається, щоб це було об'єктивним, чи рішення є правильним.
- Застосовуються звичайні правила переповнення цілих чисел: ваше рішення повинно бути здатне працювати для довільно великих цілих чисел у гіпотетичній (або, можливо, реальній) версії вашої мови, в якій всі цілі числа за замовчуванням не пов'язані, але якщо ваша програма виходить з ладу на практиці через впровадження Не підтримуючи великі цілі числа, це рішення не може визнати недійсним.
- Якщо ви використовуєте одну і ту ж цифру або оператор більше одного разу, вам доведеться сплачувати її вартість відповідника щоразу, коли ви користуєтесь нею (оскільки, очевидно, ви не можете повторно використовувати одні й ті ж фізичні показники у двох різних місцях таблиці).
- Немає обмежень у часі; рішення жорстокої сили прийнятні. (Хоча якщо у вас є рішення, яке швидше, ніж груба сила, сміливо публікуйте його, навіть якщо воно довше; бачити, як альтернативні підходи порівнювати завжди цікаво.)
- Хоча писати пояснення свого коду ніколи не потрібно , це, ймовірно, буде хорошою ідеєю; Рішення з кодовим гольфом часто важко читати (особливо людям, які не знайомі з мовою, якою вони написані), і це може бути важко оцінити (і таким чином проголосувати) за рішення, якщо ви не зрозумієте, як воно працює.
Стан перемоги
Як виклик з кодовим гольфом , відповіді з меншою кількістю байтів вважаються кращими. Однак, як завжди, сміливо публікуйте відповіді з різними підходами або певними мовами, навіть якщо вони більш багатослівні, ніж деякі інші мови; мета гольфу - це дійсно побачити, наскільки ви можете оптимізувати певну програму, і робити це таким чином дає нам безліч потенційних програм для оптимізації. Тому не варто відмовлятися, якщо хтось подає рішення, використовуючи зовсім інший підхід або зовсім іншу мову, і отримає набагато коротший відповідь; цілком можливо, що ваша відповідь краще оптимізована і виявляє більше майстерності, і виборці на КППГ часто це цінують.