Ваша задача - взять n
элемент ввода и вывода n
последовательности Рамми, последовательность, которую я сделал (просмотр OEIS вам не поможет).
Определение
Каждый элемент последовательности Рамми представляет собой набор истинных или ложных значений. Напр .: [true, false]
.
Шаги по созданию члена последовательности Рамми довольно просты:
- Начните с первого индекса
[]
(это элемент 0). - Установите самую левую ложь на правду. Если нет ложных значений, которые нужно изменить, увеличьте длину списка на 1 и установите для всех членов нового списка значение false.
- Повторите шаг 2 до достижения элемента
n
.
пример
Давайте определим нашу функцию как rummy(int n)
(вещи в {}
шаге, чтобы добраться до ответа):
>>> rummy(5)
{[]}
{[false]}
{[true]}
{[false, false]}
{[true, false]}
[true, true]
правила
- Применяются стандартные лазейки.
- Должен работать для входов 0 через верхнюю числовую границу вашего языка.
- Вы можете выводить любым способом, который считаете нужным, при условии, что ясно, что вывод представляет собой набор truey / falseys.
пустяки
Я называю это «Рамми Рамми», потому что, начиная с индекса 2, она определяет наборы, которые вам нужно будет сложить в каждом раунде Прогрессивного Рамми , где фальси - это книга, а истина - забег.
Тестовые случаи
>>> rummy(0)
[]
>>> rummy(1)
[false]
>>> rummy(6)
[false, false, false]
>>> rummy(20)
[true, true, true, true, true]
>>> rummy(1000)
[true, true, true, true, true, true, true, true, true, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false]
code-golf
math
array-manipulation
Аддисон Крамп
источник
источник
1
в11
, вы получаете000
вместо100
. ; P1*0*
.Ответы:
JavaScript ES6,
949272706664 байтаСохранено 6 байтов благодаря Нейлу!
Я не думаю, что это может быть в гольфе больше. По крайней мере, с уравнениями.
объяснение
Это два основных уравнения (
n
является входным):Это даст общий размер выходного массива. В моей программе я использовал
>>1
вместо(...)/2
них те же, что и первый двоичный бит, имеет значение 2. Сдвиг приведет кfloor(.../2)
Это количество
true
s там будет.a
является результатом предыдущего выражения.Вот что делает синтаксис:
Этот код генерирует массив с диапазоном
[0, n)
в этом ответеn
является первым уравнением..map((_,l)=>l<n)
это перебирает вышеуказанный диапазон,l
это переменная, содержащая текущий элемент в диапазоне. Если элемент меньше, чем количество истинных значений (определяется по второму уравнению), он вернетсяtrue
, в противном случаеfalse
.источник
>>1
вместо/2|0
. Используйте(_,l)=>
вместо.keys()
.Array.from()
? Заполнить или что-то еще?[...Array(a)].map((_,l)=>)
что, как мне кажется, немного короче, но хороший прием при удалении некоторых из()
s при переключении на>>1
я этого не заметил!a*-~a/2
; Я не знаю, почему я не думал об этом раньше.Python, 51 байт
Выводит список из 1 и 0.
источник
Pyth, 8 байт
Попробуйте онлайн: демонстрация или тестовый набор
Это экспоненциально медленно.
Объяснение:
источник
Желе ,
1311 байтКод не работает в последней версии Jelly до публикации заявки, но он работал в этой версии , которая предшествовала конкурсу.
Индексы основаны на 1. Попробуйте онлайн! (занимает несколько секунд) или проверьте несколько входов одновременно .
Как это устроено
источник
05AB1E, 27 байт
Посмотрим, смогу ли я еще сыграть в гольф и добавлю объяснение утром.
Попробуйте онлайн
источник
Java,
117110 байтсоздал свой логический тип, который позволил мне сэкономить 7 байт
источник
Python 2,
6963 байтаПроверьте это на Ideone .
источник
Python 2, 61 байт
Решает для n = j · (j + 1) / 2 . Ввод взят из стандартного ввода.
Образец использования
Demo .
источник
APL (Dyalog Extended) , 21 байт SBCS
Попробуйте онлайн!
источник