В Super Mario 3D World есть мини-игра, известная как Счастливый Дом . Он состоит из игрового автомата с 4 блоками.
Каждый блок может представлять собой одну из 5 различных иконок («Цветок», «Лист», «Колокольчик», «Вишня» или «Бумеранг»), и цель игрока - получить как можно больше одинаковых иконок ( см. Видео ).
Игрок награждается монетами, которые в свою очередь могут быть превращены в дополнительные жизни. Ваша задача - вычислить количество выигранных дополнительных жизней.
В зависимости от количества соответствующих значков количество вознаграждаемых монет выглядит следующим образом:
- Нет совпадений - 10 монет
- Одна пара - 100 монет
- Две пары - 200 монет
- Три в своем роде - 300 монет
- Четверка - 777 монет
Вы выигрываете одну дополнительную жизнь (1UP) каждые 100 монет . Таким образом, вы гарантированно выиграете ровно 1UP с одной парой , 2UP с двумя парами и 3UP с 3 в своем роде . Тем не менее, количество жизней, выигранных без матчей или 4 в своем роде, зависит от вашего начального запаса монет.
Источник: Супер Марио Вики
вход
Вам дан исходный запас монет и список из четырех значений представляющих последние значки на игровом автомате.
Выход
Число дополнительных выигранных жизней: , , , , или .
правила
- Вы можете использовать значки в любом приемлемом формате: например, в виде списка, в виде строки или в качестве 4 различных параметров.
- Каждый значок может быть представлен либо однозначным целым числом, либо одним символом . Пожалуйста, укажите набор иконок, используемых в вашем ответе. (Но вам не нужно объяснять, как они отображаются на Flower, Leaf, Bell и т. Д., Потому что это не имеет значения.)
- Вы не можете переназначить выходные значения.
- Это « код-гольф» .
Контрольные примеры
В следующих примерах мы используем список целых чисел в для представления значков.
coins icons output explanation
-------------------------------------------------------------------------
0 [1,4,2,5] 0 no matches -> 0 + 10 = 10 coins -> nothing
95 [3,1,2,4] 1 no matches -> 95 + 10 = 105 coins -> 1UP
25 [2,3,4,3] 1 one pair -> 25 + 100 = 125 coins -> 1UP
25 [4,5,5,4] 2 two pairs -> 25 + 200 = 225 coins -> 2UP
0 [2,5,2,2] 3 3-of-a-kind -> 0 + 300 = 300 coins -> 3UP
22 [1,1,1,1] 7 4-of-a-kind -> 22 + 777 = 799 coins -> 7UP
23 [3,3,3,3] 8 4-of-a-kind -> 23 + 777 = 800 coins -> 8UP
99 [3,3,3,3] 8 4-of-a-kind -> 99 + 777 = 876 coins -> 8UP
источник
Ответы:
Сборка x86-16,
564139 байтBinary:
разобранное:
Введите начальное количество монет
DX
,SI
указывающее на начало байтов «значка» (которое может быть'1'
-'5'
или любое значение байта). Выведите количество 1UP вBX
.Объяснение:
Ввод четырех байтов повторяется и сравнивается с остальными байтами справа, считая количество совпадений. Баллы за каждый тип матча присуждаются и складываются в общую сумму. Поскольку четверка в своем роде также является тройкой в своем роде, а также в одной паре, значение каждого типа оценки можно разложить следующим образом:
Примеры:
[2, 2, 2, 2]
(четыре в своем роде) = 7 1UP + 77 монет[2, 5, 2, 2]
(три в своем роде) = 3 1UP[4, 5, 5, 4]
(две пары) = 2 1UP[2, 3, 4, 3]
(одна пара) = 1 1UPЕсли количество заработанных 1UP в конце игры равно 0, присуждается 10 монет. Если общее количество монет превышает 100, присуждается дополнительная 1UP.
Вот тестовая программа для ПК DOS, которая включает в себя дополнительные процедуры для обработки целочисленных значений ввода / вывода:
Скачайте и протестируйте LUCKY.COM для DOS.
источник
Желе ,
23 22 2019 байт-1 благодаря Эрику Outgolfer (используется
³
вместоȷ2
), также использовавшемуся в более новой версии дважды-1 благодаря Грими ( вычтите одно до суммирования вместо вычитания четырех после)
Может быть, победим?
Двоичная ссылка, принимающая список и целое число, которое дает целое число.
Попробуйте онлайн! Или посмотрите тестовый набор .
Как?
Как оценка рук работает для каждого типа рук:
Альтернатива 20:
ĠẈị“¡ıKĖ‘S×4+E{»⁵+:³
источник
ȷ2
с³
предположив программы является функция в не принимает аргументы командной строки , хотя это не то , что я думаю , что вы имеете в виду под «побиваемый». : PċⱮ`’SṚḌH׳«777»⁵+:³
Zsh ,
117 ...60 байт-13 с помощью другого критерия для дифференциации, -9 с помощью комбинирования падежей, -28 с помощью замены
case
оператора на вложенную арифметическую троицу, -4 благодаря @JonathanAllan, -1 с помощью оптимизации троичностей, -2 потому что я случайно использовалecho
при добавлении Оптимизация Джонатана.Принимает монету на счет stdin и блокирует входные данные в качестве аргументов. Аргументы могут быть числами, символами или даже строками:
./foo.zsh flower leaf flower boomerang
Попробуйте онлайн:
117 104 95 67 63 6260Вот волшебство из 67-байтового ответа:
источник
C # (интерактивный компилятор Visual C #) ,
12310690 байтПорт моего ответа на Python, полученный из ответа @ Dat.
Попробуйте онлайн!
источник
Python 2 , 63 байта
Попробуйте онлайн!
У меня была та же идея, что и GammaFunction, чтобы использовать ее
sum(map(l.count,l))
в качестве «отпечатка пальца». Но вместо того, чтобы использовать арифметическую формулу для результата, я использую справочную таблицу, сначала уменьшая значение до 0-4, используя цепочку модов%14%5
. Разделив все значения точек на 100, вы сэкономили несколько байтов.источник
Python 3 , 68 байт
Попробуйте онлайн!
Порт Python моего C-порта моего Bash-порта с моим ответом Zsh, измененный с помощью страницы «Советы по игре в гольф на Python». Последний порт, я клянусь ... У меня заканчиваются языки, в которых мне удобно играть в гольф. Мне было любопытно, как эта стратегия сравнивается с другими ответами Python. Опять же, возможно, есть какой-то способ победить это.
Этот получился на удивление хорошим, поэтому я добавил таблицу ниже, обобщающую то, что происходит, чтобы другие могли портировать или улучшить это.
Python 3.8 (предварительная версия) , 63 байта
Хвала
:=
моржу!Попробуйте онлайн!
источник
Perl 6 ,
4844 байтаПопробуйте онлайн!
Функция карри
f(icons)(coins)
.источник
Python 2 ,
969189 байт-2 байта благодаря @Kevin Cruijssen
Попробуйте онлайн!
источник
(100*sum((a==b,a==c,a==d,b==c,b==d,c==d))
для -2 байтов.PHP,
153127 байт@ 640KB внес некоторые действительно умные изменения, чтобы сократить его:
Попробуйте онлайн!
источник
Python 3 ,
126111108103 байтПопробуйте онлайн!
источник
Python 3.8 (предварительная версия) , 78 байт
Dat ответ, но игра в гольф больше.
Попробуйте онлайн!
источник
Perl 5
-pF
, 46 байтПопробуйте онлайн!
Первым из входных данных является результат вращения, использующий любые 5 уникальных букв ASCII, кроме
q
(я предлагаюabcde
). Вторая строка ввода - текущее количество монет.Как?
Все задействованные числа делятся на 100, поэтому программа рассчитывает количество жизней (включая частичные), заработанных в настоящее время. Хитрость к этому решению в
map
. Если возможные записиabcde
, то каждый из$a
,$b
,$c
,$d
и$e
провести подсчет количества раз этот персонажем ранее видели. Это добавляется к текущему итогу ($q
) каждый раз, когда виден персонаж. Промежуточный итог увеличивается, если есть четыре вида (по сути, бонус в 177 монет).источник
JavaScript (Node.js) , 64 байта
Попробуйте онлайн!
Я подумал, что должен быть хотя бы один ответ JavaScript на вызов Арно!
Идея здесь в основном заключается в использовании количества различных элементов в качестве ключа поиска.
Чтобы различать 2 пары и 3 вида, входной массив сортируется и сравниваются средние 2 элемента.
источник
PHP ,
8984 байтаПопробуйте онлайн!
Ввод из командной строки, вывод в
STDOUT
:источник
Stax , 23 байта
Запустите и отладьте его
Эта программа использует любой произвольный набор из 5 целых чисел для иконок.
Процедура:
Вот вывод из экспериментального визуализатора состояния стека, над которым я работал для следующего выпуска Stax. Это распакованная версия того же кода с добавленным в комментарии состоянием стека.
Запустите этот
источник
Сетчатка 0.8.2 , 72 байта
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Принимает ввод в виде 4-значных печатных ASCII-цифр, за которыми следует начальное количество монет в цифрах. Объяснение:
Сортируйте не-цифры так, чтобы идентичные символы были сгруппированы вместе.
Четверка очков 777.
Три в своем роде баллы 300.
Каждая пара получает 100 баллов, поэтому две пары получат 200 баллов.
Если не было матчей, тогда вы все равно выигрываете!
Преобразуйте значения в одинарные и возьмите сумму.
Целое число разделить сумму на 100 и преобразовать обратно в десятичную.
источник
Сетчатка , 56 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Принимает ввод в виде 4-значных печатных ASCII-цифр, за которыми следует начальное количество монет в цифрах. Объяснение:
Четверка очков 777.
Каждая пара получает 100 баллов. При этом
w
учитываются все пары, так что они могут чередоваться, плюс три в своем роде могут быть разложены на три пары, таким образом, автоматически получая 300 баллов.Если не было матчей, тогда вы все равно выигрываете!
Преобразуйте значения в одинарные и возьмите сумму.
Целое число разделить сумму на 100 и преобразовать обратно в десятичную.
источник
APL + WIN, 42 байта
Подсказки для значков и монет.
Попробуйте онлайн! Предоставлено Dyalog Classic
источник
Баш ,
76 75 7170 байт-4 благодаря @JonathanAllan, -1 , переставляя троичный.
Bash порт моего Zsh ответа.
Попробуйте онлайн! Попробуйте онлайн! Попробуйте онлайн!Попробуйте онлайн!источник
C (gcc) ,
92 84 82 81 7978 байтов-1 на
x+=(..!=..)
-5 , возвращая через присваивание , -4 благодаря Джонатану Аллану, заменив!=
на<
, который сохраняет байты в другом месте, -1 , переставив троицу.От @ceilingcat: -2 путем объявления
i
иx
выхода из функции, -1 путем установкиx=i
и уменьшенияx
вместо этого.Еще один порт моего Zsh ответа. Я не знаком с игрой в гольф C, возможно, здесь есть еще одна хитрость, чтобы еще больше ее уменьшить.
92 84 82 81 79Попробуйте онлайн!источник
x+=a[i/4]<a[i%4];c=x?(x-6?6-x:c>89):7+(c>22);
05AB1E ,
201918 байтПорт @JonathanAllan 's Jelly ответ , так что обязательно проголосуйте за него !!
-2 байта благодаря @Grimy .
Принимает список значков в качестве первого ввода (существо
[1,2,3,4,5]
) и количество монет в качестве второго ввода.Попробуйте онлайн или проверьте все контрольные примеры . (
T‚à+
Вместо этого используется набор тестовTMI+
, который является альтернативой равных байтов.)Объяснение:
источник
777‚ßTMI
может быть777T)Åm
.0.90
есть90
монеты в этом случае? Так как вход монеты гарантированно находится в диапазоне[0,99]
, вы можете спросить OP, разрешит ли он это или нет.Скала , 88 байт
Попробуйте онлайн!
источник
Древесный уголь , 30 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Принимает ввод как количество монет и массив любых сопоставимых значений Python в виде значков. Объяснение:
Бесстыдно украсть трюк @ GammaFunction по вычислению половины суммы отсчетов.
Вычитание
2
из суммы, таким образом , приводя к значениям0, 1, 2, 3
надлежащим образом , но для 4-в своем роде, разделить2
на9
первый, в результате чего7.777...
.Но если результат равен 0, совпадений не было, поэтому замените его на
0.1
. (Использование литерала здесь не помогает, потому что мне нужен разделитель.)Разделите начальные монеты на 100 и прибавьте выигрыш, затем напишите результат и приведите к строке для неявного вывода.
источник
Pyth , 32 байта
Попробуйте онлайн!
Вдохновленный решением GammaFunction. Принимает вход как
[coins, [icons]]
.источник
PowerShell , 94 байта
Попробуйте онлайн!
раскатал:
источник
PowerShell ,
114107 байт-7 байт благодаря маззи
Попробуйте онлайн!
Большая старая троичная операция со вкусом PowerShell, построенная на группировке и сортировке количества входного списка. Сортировка необходима, потому что мы используем тот факт, что сгруппированный список становится короче, чем больше повторений. На самом деле, вот все возможные значения:
Усечение до int все еще дорого.
раскатал:
источник
0
? Попробуйте онлайн!Wolfram Language (Mathematica) , 54 байта
Попробуйте онлайн!
источник
R,
102,91, 81 байтУдалось сбросить 11 байтов (и исправить ошибку) благодаря @Giuseppe. Управляется еще 10, вдохновленными идеей @ Giuseppe's / 10.
Ungolfed
Попробуйте онлайн!
источник
as.factor()
и,f=
чтобы получить его до 88 байт.table
- я не настолько знаком с ним, как следовало бы - я начал сsummary(as.factor(v))
. Я предпочитаю оставитьf=
. Я не чувствую, что код не обходится без него, но я понимаю, что это выбор стиля.f=
; не стесняйтесь помещать ссылку TIO в ваш ответ :-)sum(s==2)
это очень помогает. Но это потребовало переписывания всего остального, и / 10 больше не экономил место (я не думаю)Сборка 8051 (компилируется в 158 байт)
Это наивный подход VEEEEEEEEEERRY, это еще не проверено и не испытано, но я уверен, что это работает. Что нужно учитывать:
1) 8051 является аккумуляторной машиной, т.е. ему нужны инструкции mov, которые могут вообще не понадобиться другим архитектурам.
2) 8051 - это 8-битная машина, поэтому для чисел> 255 необходимо проделать некоторую хитрость, что приводит к большему количеству кода и поэтому является недостатком платформы по сравнению с другими.
источник