Существует существующая «игра», в которой пираты рационально делят золотые монеты по определенным правилам. Цитата из Википедии :
Есть 5 рациональных пиратов, A, B, C, D и E. Они находят 100 золотых монет. Они должны решить, как их распределить.
У пиратов строгий порядок старшинства: A превосходит B, кто выше C, кто выше D, кто выше E.
Правила распространения в пиратском мире таковы: самый старший пират должен предложить распределение монет. Пираты, включая автора, затем голосуют за то, чтобы принять это распределение. В случае равного голосования голосующий имеет решающий голос. Если распределение принято, монеты раздаются и игра заканчивается. Если нет, тот, кто предлагает, сбрасывается с пиратского корабля за борт и умирает, а следующий самый старший пират делает новое предложение, чтобы снова запустить систему.
Пираты основывают свои решения на трех факторах. Прежде всего, каждый пират хочет выжить. Во-вторых, учитывая выживание, каждый пират хочет максимизировать количество золотых монет, которые получает каждый. В-третьих, каждый пират предпочел бы выбросить другого за борт, если все остальные результаты были бы равны. Пираты не доверяют друг другу и не дают и не выполняют никаких обещаний между пиратами, кроме предложенного плана распределения, который дает каждому пирату целое количество золотых монет.
Вызов
Возьмите в качестве входных данных целое число n
1 <= n <= 99, где n
указано количество пиратов, и выведите распределение монет, начиная с первого пирата.
Тестовые случаи (первая строка - это ввод; вторая - вывод):
1
100
2
100 0
3
99 0 1
5
98 0 1 0 1
Это код-гольф , поэтому выигрывает самое короткое решение в байтах.
n < 100
? Слишком укомплектованные, позолоченные пиратские корабли также нуждаются в распределительной помощи.Ответы:
Желе ,
1110 байтПопробуйте онлайн! или проверьте все тестовые случаи одновременно .
Как это устроено
Для ввода n задача сводится к созданию списка x, 0, 1, 0,… длины n , сумма которого равна 100 .
источник
Python, 33 байта
Вычисляет первое значение, добавляет некоторые
0, 1, 0, 1...
, усекает до длиныn
.Обратите внимание, что
-n/2+101
не может быть сокращено до,101-n/2
потому что унарные и двоичные-
имеют разный приоритет: первый анализируется как,(-n)/2
а второй как101-(n/2)
.Рекурсия была намного длиннее (45):
источник
MATL , 12 байт
При этом используется текущая версия (9.2.2) языка / компилятора, которая является более ранней, чем эта проблема.
пример
объяснение
источник
Pyth, 13 байт
Тестовый пакет .
источник
Python,
6258 байтРЕДАКТИРОВАТЬ: Рад, что я сделал это одной строки. Но я проигрываю для Python. Поэтому это только для справки. Спасибо @Zgarb
Он принимает входные данные, создает список четности всех чисел от 1 до i. Затем устанавливает первый элемент в i в 101-sum (n) и печатает.
Попробуй здесь
источник
Javascript ES6, 45 байт
Спасибо @Neil за 1 байт!
источник
202-a>>1
сохраняет байт.𝔼𝕊𝕄𝕚𝕟, 14 символов / 26 байтов
Try it here (Firefox only).
Не плохо, но и не хорошо ...
объяснение
источник
Серьезно,
2317 байтРЕДАКТИРОВАТЬ : Спасибо @quintopia
Использует тот же подход, что и мой ответ Python, но я делаю по модулю 2 с использованием отображения, и несколько раз я вращаю свой стек.
Пояснение :
Этот код вводит ввод (я назову это
i
). Далее толкаетrange(1,i+1)
и делает функцию. Затем нажимает 2, вращает стек и, наконец, принимает модуль.Затем отобразите эту функцию на итерируемый диапазон. Это дает паритет каждого элемента в списке.
Наконец, дублирует стек, суммирует список четности, нажимает 2, 10 ^ 2 и 100 + 1 и вычитает сумму (позвольте мне назвать это значение
n
). Затем код нажимает 0, вращает стек на 1 и устанавливает элемент индекса 0 списка в n. Полученный список неявно печатается.источник
,R`2@%`M;Σ2╤u-0(T
Japt, 14 байт
Еще одна проблема, когда я обнаружил, что хочу встроить, я только что подумал добавить ...
Попробуйте онлайн!
источник
ActionScript 3, 87 байт
function x(n){var l=[],i=1;for (l[0]=int(101-n/2);i<n;){l[i]=++i%2;}return l.join(" ")}
Это не лучший язык для игры в гольф, но мне нравится публиковать ответы в формате as3.
источник
05AB1E , 12 байт (не в комп.)
Попробуйте онлайн!
источник
s)˜
может быть¸ì
.Perl
514944 байтовНужны следующие параметры perlrun
-E
источник
QBIC ,
2825 байтобъяснение
источник