Несколько лет назад Hot Wheels создали простую флеш-игру под названием «Formula Fuelers Racers» *. Чтобы играть в игру, вы выбираете три ингредиента из холодильника, чтобы положить их в свой автомобиль, который затем сравнивается со случайно сгенерированным компьютером компьютера. Оказывается, механика этой игры довольно проста. Во-первых, фактическое «время» гонки вашего автомобиля генерируется случайным образом и не имеет никакого отношения к тому, выиграете вы или нет. Во-вторых, победитель гонки определяется по количеству баллов, которое рассчитывается по выбранным ингредиентам (допускается дублирование ингредиентов, и порядок имеет значение). Каждый ингредиент имеет связанную «ценность» и связанную «операцию», как показано в следующей таблице:
# ingredient val op
1 Hot Salsa 2 +
2 Root Beer 1 +
3 Milk 1 +
4 Pickle Juice 2 +
5 Mystery Lunch -3 *
6 BBQ Sauce 2 +
7 Egg 1 +
8 Ketchup 2 +
9 Mustard -1 *
10 Melon 1 +
11 Chocolate Milk 1 +
12 Mayonnaise -2 *
13 Baby Food 0 +
14 Pepper 1 +
15 Salt 2 +
16 Syrup -1 *
17 Salad Dressing 2 +
18 Orange Juice 1 +
19 Soy Sauce 2 +
Для удобства эта задача будет относиться к ингредиентам по их номеру, а не по названию. Вот шаги для вычисления счета:
- Сначала инициализируйте счет значением первого ингредиента.
- Затем используйте операцию второго ингредиента, чтобы объединить текущий счет и значение второго ингредиента, чтобы получить обновленный счет.
- Наконец, используйте операцию третьего ингредиента, чтобы объединить текущий счет и значение третьего ингредиента, чтобы получить окончательный счет.
Чем выше баллы, тем лучше, и они всегда побеждают.
Например, ингредиенты 1 2 3
имеют оценку (2+1)+1 = 4
. Ингредиенты 7 5 6
имеют оценку (1*-3)+2 = -1
. Поэтому 1 2 3
бьет 7 5 6
.
Вызов
В этом задании вы должны написать программу, которая берет упорядоченный список из 3 целых чисел и выдает соответствующий результат.
вход
Ваша программа может принять список из трех целых чисел в наиболее удобном формате. Вам разрешается использовать либо 1-индексацию для названий ингредиентов (как указано выше), либо 0-индексацию (вычтите 1 из каждого индекса выше).
Ouput
Ваша программа должна вывести единственное целое число, указывающее счет.
Тестовые случаи
4 5 5 => 18 // max score
5 5 5 => -27 // min score
13 13 13 => 0
1 2 3 => 4
7 5 6 => -1
16 2 19 => 2
19 7 12 => -6
* Эта страница довольно устарела и не работает в некоторых браузерах, но вам не нужно играть в игру для этого испытания.
источник
Ответы:
Желе , 24 байта
Принимает список 0-индексированных ингредиентов.
Попробуйте онлайн! или посмотрите набор тестов
Как?
Используется слегка запутанная форма сжатия значений в виде числа 6 и тот факт, что мультипликативные записи являются отрицательными. Вместо того, чтобы просто сдвигаться вверх на 3, чтобы получить цифры base-6, используются увеличенные дополненные значения - это экономит байты, позволяя
Ị
атому выбирать отрицательные элементы перед этапом дополнения, одновременно сохраняя байт в base-250. сжатия.источник
zẈ€$ụ¤
читаются как их (1-индексированные) индексы на кодовой странице Jelly, которые[123,188,13,37,226,4]
интерпретируются как число base-250:123*250**5+188*250**4+13*250**3+37*250**2+226*250**1+4*250**0=120851767994004
(см. строковый литерал в руководстве) .)JavaScript (ES6),
8984827873 байтаПринимает ввод как массив из 3 целых чисел, используя 0-индексирование.
Контрольные примеры
Показать фрагмент кода
Предыдущая версия, 78 байт
Принимает 3 целых числа в синтаксисе карри
(a)(b)(c)
, используя 0-индексирование.Как это работает
Немного необычным в этом коде является то, что он принимает только 2 аргумента в «обычном» синтаксисе каррирования
a => b =>
и в конечном итоге возвращает функцию, которая принимает 3-й.Сломать
Контрольные примеры
Показать фрагмент кода
источник
Befunge,
7473 байтаПопробуй это здесь!Странно, что мой код работает только с этим одним интерпретатором.
Вторая строка в основном содержит все значения из таблицы. Нечисловые значения на самом деле являются отрицательными значениями, поскольку они идут перед цифрами в таблице ASCII. Там есть немного логики, которая определяет, является ли число отрицательным или нет, и если это так, это число умножается на результат.
Правая сторона третьего ряда инициализирует первый номер. Если бы мне не пришлось это делать, я мог бы сэкономить много байтов.
источник
PHP, 128 байт
PHP, 138 байт
Онлайн версия
расширенный
источник
Python 2 ,
123110107 байтПопробуйте онлайн!
-3 байта благодаря @mathjunkie
источник
5445054524413452545
тогда вычитание 3 может сэкономить вам тонны байтов.n=[n+i,n*i][i<0]
внутри цикла спасает вас 3 байта05AB1E , 29 байт
Попробуйте онлайн!
На самом деле это работает для любого количества входов, так как вы можете иметь автомобили с 4 или более характеристиками или автомобили с двумя. Это не было преднамеренным, просто как это закончилось.
источник
CJam ,
4338 байтТам может быть способ сжать список дальше ...
Использует индексирование на основе 0.
Попробуйте онлайн!
объяснение
Эта программа использует тот факт, что значение является мультипликативным, а не аддитивным, если и только если оно отрицательное.
источник
+ *
трюк!Луа,
140131 байтисточник
JavaScript,
8572 байтаПринимает ввод в формате
[a,b,c]
-13 байтов благодаря ETHproductions
источник
x=>(b="...",b<0?"*":"+")+b
чтобы избежатьreturn
, я думаю. (Кроме того, вам не нужно[... ]
, индексирование работает со строками)a=a=>eval(a.map(x=>(b="5445054524413452545"[x]-3,b<0?"*":"+")+b)).join``)
у вас работает?)
после того, как+b
я считаюR
125123 байтаАнонимная функция, которая принимает три целых числа в качестве входных данных. Определяет список значений и операций, а затем просто оценивает те, которые вызываются вводом, т.е.
o3(o2(v1,v2),v3)
. Есть почти наверняка лучший способ сделать это!Обновление: после некоторой переделки у меня есть альтернатива, тоже 123 байта . Опять же, анонимная функция, но принимает входные данные как один вектор из трех значений. Использует тот же подход, определяя список значений и операций и оценивая его.
источник
Haskell,
186116112108 байтОсновная функция есть
k
. Новичок в Code Golf, так что я уверен, что есть несколько байтов, которые я мог бы сбрить с умным использованием$
оператора по сравнению с круглыми скобками. Я, вероятно, обновлю ответ, поскольку продолжаю находить улучшения.По сути, программа может быть разбита следующим образом:
*
там, где положительные значения всегда+
)v
сопоставленных с входными целыми числами, выбирает соответствующие операции и значения из каждого и возвращает правильный вывод.ОБНОВИТЬ
Отдельное спасибо за указание на трюк fromEnum! Это сработало хорошо. Также я пропустил ту часть в правилах, где указано, что приемлемым решением может быть функция, которая принимает список целых чисел. Это спасло огромное количество работы.
ОБНОВЛЕНИЕ 2
В соответствии с другими предложениями побрил несколько байтов путем переупорядочения операций, создания else-защиты, которая всегда оценивается как True, и сопоставления с шаблоном на W, который соответствует шаблону в списке из 3 элементов. Спасибо за предложения!
ОБНОВЛЕНИЕ 3
Еще одно спасибо Лайкони за то, что он указал мне на правила игры в гольф, о которых я не знал. Кроме того, отображение v на мой вход для создания списка частично примененных функций было феноменальной идеей и сэкономило мне 4 дополнительных байта!
источник
[Int] -> Int
вместо чтения из стандартного ввода и записи в стандартный вывод. Это разрешено по умолчанию, но в этом случае в задаче даже упоминается, что допустимо использование списка целых чисел в качестве входных данных.fromEnum
вместо,digitToInt
вероятно, будет короче, потому что это позволяет вам отбросить импорт.v=(map((-51+).fromEnum)"95 ... 5"!!)
сохраняет две скобки.o x|x<0=(*)|0<1=(+)
сохраняет один байт во второй охране.w
это дополнительное пространство осталось. Кроме того, поскольку вам нужно обрабатывать только списки длиной 3, вы можете использовать ихw[x,y,z]=
как сопоставление с образцом.Haskell,
9287 байтовПопробуйте онлайн!
Основываясь на ответе @ maple_shaft, я просто немного его разложил.
Спасибо @Laikoni за 5 байтов!
источник
f=
потому что анонимные функции разрешены в качестве представления. Они нужны только для того, чтобы заставить пример tio работать.C
171161 байтисточник
8086 машинный код, 62 байта
Последние три байта содержат вход (с нулевым индексом). Эй, вы сказали мне, что я мог бы использовать наиболее удобный формат ввода. В этом случае это жесткое кодирование!
Выход - это код ошибки, возвращенный в оболочку.
Как это работает:
источник