Получив список неотрицательных целых чисел в любом приемлемом формате, переберите его, пропустив столько элементов, сколько говорит каждое целое число, на которое вы наступаете.
Вот рабочий пример:
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | []
^ First element, always include it
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0]
^ Skip 0 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1]
^ Skip 1 element
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2]
^ Skip 2 elements
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] | [0, 1, 2, 3]
Skip 3 elements; you're done
Другой работающий пример, не все-равные-дельты:
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | []
^ First element, always include it
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4]
^ Skip 4 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3]
^ Skip 3 elements
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] | [4, 3, 3, 4]
Skip 4 elements; you're done
Необычный пример:
[0, 2, 0, 2, 4, 1, 2] | []
^ First element, always include it
[0, 2, 0, 2, 4, 1, 2] | [0]
^ Skip 0 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2]
^ Skip 2 elements
[0, 2, 0, 2, 4, 1, 2] | [0, 2, 4]
Skip 4 elements; you're done (out of bounds)
правила
- Вы не можете использовать скучные читы среди этих , они делают задачу скучной и неинтересной.
- Вы должны только вернуть / распечатать окончательный результат. Вывод STDERR игнорируется.
- Вы не можете получить ввод в виде строки цифр в любой базе (например, «0102513162» для первого случая).
- Вы должны использовать слева направо для ввода.
- Как и в проработанных примерах, если вы выходите за пределы, выполнение прекращается, как будто в противном случае.
- Вы должны использовать
0
для пропуска 0 элементов. - Учитывая пустой список (
[]
) в качестве входных данных, вы должны вернуться[]
.
Контрольные примеры
[] => []
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] => [0, 1, 3, 7]
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0] => [5, 2, 1, 0]
[0, 1, 0, 2, 5, 1, 3, 1, 6, 2] => [0, 1, 2, 3]
[4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2] => [4, 3, 3, 4]
[0, 2, 0, 2, 4, 1, 2] => [0, 2, 4]
Это код-гольф , поэтому выигрывает самый короткий ответ!
code-golf
array-manipulation
Эрик Outgolfer
источник
источник
""
?0
s в выходных данных.Ответы:
Python 2 , 36 байт
Попробуйте онлайн!
источник
x[0]
вместоx[:1]
?[x[0]]
x[:1]
случае вы не сохраняете ни одного байта ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 байтВычеркнул 44, все еще регулярно 44 :(
* -3 благодаря @ ASCII-only .
Попробуйте онлайн!
Печатает результаты, разделенные новой строкой, так как OP разрешен в чате. Я не думаю, что это может быть немного короче, как нерекурсивная полная программа .
Как это работает?
l=input()
- Читает список из стандартного ввода.while l:
- Злоупотребляет тем фактом, что пустые списки являются ложными в Python, циклы, пока список не пуст.print l[0];
- печатает первый элемент списка.l=l[l[0]+1:]
- «Пропускает как кролик» - обрезает первоеl[0]+1
из списка.Давайте возьмем пример
Учитывая список в
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]
качестве входных данных, то код выполняет следующий ( в соответствии с приведенным выше объяснением) - печать первого элемента массива:5
, обрезать первые 6:[2, 1, 2, 1, 0, 0]
. Мы затем распечатать2
и дифферента первые 3:[1,0,0]
. Аналогично, мы выводим1
, обрезаем первые 2 и получаем[0]
. Конечно,0
печатается и программа завершается.источник
Haskell,
29 2726 байтовСохранено 1 байт благодаря Zgarb.
Попробуйте онлайн.
источник
f x=x
во второй строке сохраняет байт.JavaScript (ES6),
423935 байтСтарое решение 39 байт
-3 байта благодаря @ThePirateBay
источник
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 байтовИспользует кодировку 05AB1E . Попробуйте онлайн!
источник
Mathematica,
4644 байтаАльтернативы:
источник
C #, 68 байт
Попробуйте онлайн!
Полная / Отформатированная версия:
Возвращение списка длиннее на 107 байтов.
источник
Шелуха ,
86 байтПопробуйте онлайн!
-2 байта (и совершенно новая идея решения) благодаря Лео!
объяснение
Я использую функцию соответствия шаблонов списка
Γ
. Он принимает функциюf
и список с головойx
и хвостомxs
и применяетсяf
кx
иxs
. Если список пуст,Γ
возвращает значение по умолчанию, соответствующее его типу, в этом случае пустой список. Мы беремf
на себя то↓
, что отбрасываетx
элементыxs
. Затем эта функция повторяется, и полученные элементы собираются в список.источник
Python 2 ,
5955 байтПопробуйте онлайн!
источник
l[i:i+l[i-1]]=[]
вместо этого,del l[i:i+l[i-1]]
чтобы сохранить байтPyth, 22 байта
Удален бесполезный байт
источник
Python 2 ,
604241 байт-18 байт благодаря Луису Мендо
-1 байт благодаря Джонатану Фреху
Попробуйте онлайн!
источник
i-=~x[i]
на один байт корочеi+=1+x[i]
.Сетчатка , 36 байт
Число байтов предполагает кодировку ISO 8859-1.
Вход и выход разделены переводом строки с завершающим переводом строки.
Попробуйте онлайн! (Использует запятые вместо перевода строки, чтобы обеспечить удобные тестовые наборы.)
источник
Brain-Flak , 64 байта
Попробуйте онлайн!
источник
({}[()]<{}>)
против({}<{}>[()])
были одинаковыми! Какое совпадение!Mathematica,
6450 байтисточник
C # (.NET Core) , 68 байт
Попробуйте онлайн!
Принимает ввод как массив целых чисел, возвращает строку, содержащую пропущенные значения.
источник
using System.Linq;
и нормальным циклом.R, 58 байт
Рекурсивная функция. Принимает вектор в
x
качестве аргумента и инициирует указательp
. Он печатает соответствующую записьx
, проверяет,p+x[p]
выйдет ли он за пределы, и если нет, вызывает функцию для нового указателя.Это сопоставимое решение, которое возвращает правильный вектор вместо печати цифр.
источник
numeric(0)
? ака пустой массив.Java (OpenJDK 8) , 53 байта
Благодаря @ PunPun1000 и @TheLethalCoder
Попробуйте онлайн!
источник
n
в цикл?(a[n+=1+a[n]]
. Функция также выдает ошибку после выдачи правильного значения, я не знаю толкования о том, разрешено ли это или нет (вопрос действительно говорит что-либо, что стандартная ошибка игнорируется). Если это было намерение, то вы можете удалитьn<a.length
цикл for. Наконец, код TIO не работает как есть, даже с пареном. Функция должна бытьConsumer<int[]>
и использоватьfunc.accept(test)
Алиса , 15 байт
Попробуйте онлайн!
Ввести и вывести разделенные переводом строки списки десятичных целых чисел.
объяснение
Хранение целого числа n в очереди итератора приводит к выполнению следующей команды n раз. Зеркала вроде
/
не являются командами, поэтому следующая команда будетI
. Поэтому, если мы просто прочитаем и напечатаем значение x , мы будем читать значения x + 1 на следующей итерации, причем последние из них окажутся на вершине стека. Это пропускает необходимые элементы списка номеров.источник
Mathematica , 37 (30?)
Дальнейшее игра в гольф по методу user202729.
Кажется, что правила явно не указывают формат вывода, поэтому возможно:
Вывод для второй функции выглядит следующим образом:
0.2.4.{}
- в частности{}
, все еще возвращается для пустого набора, соответствующего окончательному правилу.источник
±Drop[{x},a]
может быть±{x}~Drop~a
потому, что±
имеет более низкий приоритет, чемInfix
.Common Lisp, 51 байт
Попробуйте онлайн!
источник
Брейн-Флак ,
6460 байт4 байта сохраняются на основе идеи от 0 '
Попробуйте онлайн!
аннотированный
источник
Руби,
36 3331Попробуйте онлайн.
источник
f=
как элемент заголовка.Python 2.4, 85 байт
У меня нет шансов победить в питоне, но я люблю однопользовательских, и этот может быть интересен другим.
Оказывается, есть хитрая волшебная уловка для доступа к списку зданий внутри понимания, но она работает только в 2.4 и с некоторыми правками в <= 2.3
locals()['_[1]']
она есть. Python создает секретное имя_[1]
для списка, пока он создается, и хранит его вlocals
. Кроме названия_[2]
,_[3]
... используются для вложенных списков.Таким образом, он подсчитывает количество уже добавленных элементов плюс их сумму. Результатом является индекс следующего желаемого элемента.
Я думаю, что должен быть способ избежать перечисления. Как доступ к входной массив непосредственно по индексу:
[ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]
. Но я не могу придумать компактный способ защитить его от индекса вне диапазона (при этом оставляя его на одном уровне)источник
Swift, 63 байта
Это моя первая запись, так что я не уверен на 100% в правилах, но, надеюсь, этого ответа достаточно. Я немного не уверен в том, как получить вход в систему. У меня есть более короткий ответ, если мне позволили взять функцию где-нибудь, которая может вернуть ввод.
источник
Perl 6 , 31 байт
Попробуй это
Expanded:
Чтобы помочь понять, как работает код, без
[*;0]
этого генерируется последовательность, подобная следующей:источник
Желе , 8 байт
Полная программа, печатающая результаты, за которыми следует новая строка (пустой список не выводит).
Попробуйте онлайн!
Как?
источник
Python 3 , 35 байт
Попробуйте онлайн!
Запустите его,
f(*l)
гдеl
ваш вклад. Можно растягивать правила ввода, но мне просто нравится расширенная распаковка.источник
APL (Dyalog Unicode) , 20 байтов SBCS
Попробуйте онлайн!
источник
Perl 5 ,
3630 + 1 (-a) = 31 байтПопробуйте онлайн!
Принимает его как список чисел, разделенных пробелами.
источник
PowerShell , 25 байт
Попробуйте онлайн!
источник