Кредит Геобитсу в ТНБ за идею
Пост без достаточно подробно недавно положенный интересная игра:
2 ребенка сидят перед множеством конфет. Каждый кусочек конфеты пронумерован от 1 до x
, x
причем общее количество конфет присутствует. Существует ровно 1 вхождение каждого числа.
Цель игры состоит в том, чтобы дети ели конфеты и умножали значения конфет, которые они съели, чтобы получить окончательный результат с более высоким результатом.
Однако в оригинальном сообщении пропущена ключевая информация, например, как выбирается конфета, поэтому дети в нашей истории решили, что старший ребенок пойдет первым и может съесть до половины конфеты, однако, как только он объявит об окончании своей очереди, он не может передумать.
Один из детей в этой игре не любит конфеты, поэтому он хочет съесть как можно меньше, и однажды он видел, как его отец однажды написал какой-то код, и подумал, что он может использовать полученные навыки, чтобы определить, сколько конфет ему нужно есть, чтобы обеспечить победу, и в то же время есть как можно меньше.
Соревнование
Учитывая общее количество конфет x
, ваша программа или функция должны выдавать наименьшее количество конфет, которое он должен съесть, чтобы обеспечить победу n
, даже если его противник съел все оставшиеся конфеты.
Естественно, чем больше число, тем больше число, поэтому, сколько бы вы ему ни дали, он съест самые n
большие числа.
Правила
x
всегда будет положительным целым числом в диапазоне,0 < x! <= l
гдеl
верхний предел возможностей обработки вашего языка- Это гарантирует , что ребенок всегда будет есть
n
наибольшее число, например , дляx = 5
иn = 2
он будет есть4
и5
Контрольные примеры
x = 1
n = 1
(1 > 0)
x = 2
n = 1
(2 > 1)
x = 4
n = 2
(3 * 4 == 12 > 1 * 2 == 2)
x = 5
n = 2
(4 * 5 == 20 > 1 * 2 * 3 == 6)
x = 100
n = 42
(product([59..100]) > product([1..58]))
x = 500
n = 220
(product([281..500]) > product([1..280]))
счет
К сожалению, нашему храброму участнику нечего написать свой код, поэтому он должен расположить кусочки конфеты в символы кода, в результате ваш код должен быть как можно меньше, наименьший код в байтах выигрывает!
источник
x = 0
Также должны быть обработаны, так как0! = 1
? (Возможно,x
также следует указывать как положительное целое число?)Ответы:
Python 3 , 76 байт
Попробуйте онлайн!
Полагается на то, что за едуn конфет нужно еще выиграть, а общее количество конфет составляет x , x!(x−n)!>(x−n)! должно быть верно, что означаетx!>((x−n)!)2 .
-1 от Скидсдев
-3-6 от БМО-3 от Спарра
+6 чтобы исправить
x = 1
источник
from math import factorial as F
n*(F(x)>F(x-n)**2)or f(x,n+1)
. Аналогичноx<2or x*F(x-1)
для первого, который короче, чем импорт.import math;F=math.factorial
которыми я, вероятно, должен пойти, найти мета-подсказку Python, чтобы упомянуть ...F=lambda x:x<2or x*F(x-1)
три байта меньше?JavaScript (ES6), 53 байта
Попробуйте онлайн!
Рабочий диапазон
Интересно, что различия между детскими продуктами всегда достаточно велики, поэтому потеря точности, присущая кодированию IEEE 754, не является проблемой.
В результате это работает для0 ≤ n ≤ 170 . Кроме того, и мантисса, и переполнение экспоненты (выход + бесконечность ) и нам понадобятся BigInts (+1 байт).
Как?
Пустьп будет конфетным продуктом другого ребенка, и пусть Q будет нашим собственным конфетным продуктом.
Начнем сp = n ! (все конфеты для другого ребенка) и Q= 1 (ничего для нас).
Мы повторяем следующие операции, покаQ≥ р :
Результатом является количество необходимых итераций. (На каждой итерации мы «берем следующую самую высокую конфету у другого ребенка».)
комментарии
Это реализовано как одна рекурсивная функция, которая сначала вычисляетн ! и затем входит в цикл, описанный выше.
источник
Желе , 9 байт
Попробуйте онлайн! Или посмотрите набор тестов .
Как?
источник
R ,
704138 байт-29 потому что Денис знает все внутренние функции
-3 переключение на вход сканирования ()
Попробуйте онлайн!
Довольно простая R-реализация ответа nedla2004 на Python3 .
Я чувствую, что есть более чистая реализация 1-обработки, и я хотел бы потерять фигурные скобки.Я злюсь, я не вернулся к тому, какой подход, безумнее, что я использовал строгий менее чем, но еще более безумно, что я не знал, что есть
cumprod()
функция. Отличная оптимизация от Дениса.источник
APL (Dyalog Unicode) , 10 байт
Попробуйте онлайн!
Порт Денниса ответ . Спасибо, ну, Деннис за это.
Как:
Поскольку этот ответ был сделан не мной, я оставлю свой оригинальный ответ ниже.
APL (Dyalog Unicode) ,
14 1211 байтПопробуйте онлайн!
Префиксная молчаливая функция. В основном порт Джонатана от Dyalog .
Спасибо ngn и H.PWiz за помощь в чате. Спасибо ngn также за то, что спасли мне байт.
Спасибо Деннису за то, что он указал, что мой оригинальный код был неправильным. Оказывается, это спасло меня 2 байта.
Использует
⎕IO←0
.Как:
источник
+/
в скобках указано одно, то композиции могут быть опущены:(+/!>×\)⌽∘⍳
Haskell ,
5251 байтИспользуя простой подход: мы проверяем, является ли продукт последнегоN числа, которые х !( х - н ) ! меньше, чем произведение первого N числа, а именно ( х - н ) ! и занимает меньше всего N для которого это правда.
Попробуйте онлайн!
источник
Желе , 7 байт
Попробуйте онлайн!
Как это устроено
источник
Python 3 ,
183176149 байтПопробуйте онлайн!
Это намного быстрее, чем некоторые другие решения - умножение 0 (N) вместо O (N²) - но мне не удается уменьшить размер кода.
-27 от Джо Кинга
источник
Чисто , 57 байт
Попробуйте онлайн!
Простое решение.
источник
05AB1E ,
1511 байтПопробуйте онлайн!
Использует тот же подход, что и мои представления Python . Очень новичок в 05AB1E, поэтому любые советы по коду или объяснению очень ценятся.
-4 байта благодаря Кевину Круйссену
источник
1
. Если оператор if верен, он помещает индексN
в стек и выходит из программы (неявно выводя этот индекс). Для ввода1
оператор if будет ложным, но он будет выводить свой ввод1
неявно после этого цикла с одной итерацией.!
, теперь, когда стек пуст, так как мы больше не дублируем / дублируем if-результат.1
выводящий ввод неявно когда стек пуст. :)Желе , 14 байт
Попробуйте онлайн!
Ручки 1 правильно.
источник
Уголь , 20 байтов
Попробуйте онлайн!Ссылка на подробную версию кода. Объяснение:
Product
в пустом списке в Charcoal возвращается,None
а не1
, так что я должен логическиOr
это.источник
PHP , 107 байт
Попробуйте онлайн!
Использует то же самоеИкс2> ( ( x - 1 ) ! )2 метод, как другие использовали.
Для выполнения этой задачи используется функция факториала из представления PHP (спасибо @ donutdan4114)
источник
Wolfram Language (Mathematica) , 43 байта
Попробуйте онлайн!
источник
05AB1E , 7 байтов
Порт Деннис ♦ Желе ответ , поэтому обязательно проголосуй за него, если тебе нравится этот ответ!
Попробуйте онлайн или проверьте все тесты .
Объяснение:
источник
Japt
-x
, 7 байтПорт Денис Желе решение.
Работает только на практике до того момента,
n=4
как мы попадаем в научную нотацию выше этого.Попытайся
источник
C # (.NET Core) , 93 байта
Попробуйте онлайн!
Основано на ответе javascript @ Arnauld's.
источник
C (gcc) , 68 байт
Попробуйте онлайн!
Изменить: торговля байтами против mults, не делать 2 * x mults вместо x + n
Редактировать: переход к int вместо long через макрос. Сбой на 34 с долго.
Ну, у меня есть это в C. Сбой в 21.
Существует некоторая двусмысленность относительно того, хочет ли хороший ребенок всегда выигрывать или никогда не проигрывать ... как вы думаете?
источник
Python 3 , 75 байт
Попробуйте онлайн!
Версия 74 байта
но эта версия переполнилась за 500 ...
источник