Пропустите, как кролик!

Erik the Outgolfer 08/26/2017. 30 answers, 2.887 views
code-golf array-manipulation

Учитывая список неотрицательных целых чисел в любом разумном формате, перебирайте его, пропуская столько элементов, сколько указано на каждом целе, на котором вы стучите.


Вот пример:

[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] 

Это , поэтому самый короткий ответ выигрывает!

5 Comments
Erik the Outgolfer 07/28/2017
Песочница (только для пользователей 2k +)
3 Shaggy 07/28/2017
Да, просто заметила это. / ставит очки на
2 Rod 07/28/2017
Вероятно, лепрекон ¯ \ _ (ツ) _ / ¯
1 Roman Gräf 07/28/2017
Можно ли иметь конечные нули в моем массиве? спасет меня ~ 18 байт
1 Erik the Outgolfer 07/28/2017
@ RomanGräf Извините, но нет, это было бы слишком неоднозначно, так как есть случаи, когда вы должны иметь завершение 0 с на выходе.

30 Answers


Rod 07/28/2017.

Python 2 , 36 байт

 f=lambda x:x and x[:1]+f(x[x[0]+1:]) 

Попробуйте прямо сейчас!

4 comments
Mr. Xcoder 07/28/2017
Я ожидал, что вы перейдете, но не так уж плохо :)
Erik the Outgolfer 07/28/2017
Вы не можете сделать x[0] вместо x[:1] ?
Rod 07/28/2017
@EriktheOutgolfer да, но это должен быть список, поэтому это будет [x[0]]
Erik the Outgolfer 07/28/2017
@Rod Вы не сохраняете никаких байтов с x[:1] любом случае ... f=lambda x:x and[x[0]]+f(x[x[0]+1:])

Mr. Xcoder 08/19/2017.

Python 2 , 49 46 * 41 байт

Перечеркнутый 4 по-прежнему регулярный 4 :(

* -3 thanks to @ASCII-only .

 l=input()
while l:print l[0];l=l[l[0]+1:] 

Попробуйте прямо сейчас!

Распечатывает результаты, разделенные новой строкой, поскольку OP разрешен в чате. Я не думаю, что он может стать короче, чем non-recursive full program .


Как это работает?

  • 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] качестве входных данных, код выполняет следующее (согласно объяснению выше) - печатает первый элемент array: 5 , обрезать первые 6: [2, 1, 2, 1, 0, 0] . Затем мы печатаем 2 и обрезаем первые 3: [1,0,0] . Аналогично, мы выводим 1 , обрезаем первые 2, и получаем [0] . Конечно, 0 печатается, и программа завершается.

1 comments

w0lf 07/28/2017.

Haskell, 29 27 26 байт

 j(x:y)=x:j(drop x y)
j x=x 

Благодаря Zgarb сохранено 1 байт.

Попробуйте в Интернете.

2 comments
Zgarb 07/28/2017
f x=x на второй строке сохраняет байт.
w0lf 07/28/2017
@ Zgarb Cool, спасибо!

Adnan 07/28/2017.

05AB1E , 10 9 байт

[¬Dg>#=ƒ¦ 

Использует кодировку 05AB1E . Попробуйте прямо сейчас!

1 comments
Magic Octopus Urn 07/28/2017
Да, это намного лучше, чем я думал.

Martin Ender 07/28/2017.

Mathematica, 46 44 байт

SequenceCases[#,NO 

Альтернативы:

SequenceCases[#,NO 
1 comments
Mr.Wizard 07/28/2017
Ух ты, здорово!

Johan Karlsson 07/28/2017.

JavaScript (ES6), 42 39 35 байт

a=>a.map((n,i)=>a.splice(i+1,n))&&a 

 let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] пусть f = let f = 
a=>a.map((n,i)=>a.splice(i+1,n))&&a

console.log(f([]))                                                     // => []
console.log(f([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))                     // => [0, 1, 3, 7]
console.log(f([5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]))                   // => [5, 2, 1, 0]
console.log(f([0, 1, 0, 2, 5, 1, 3, 1, 6, 2]))                         // => [0, 1, 2, 3]
console.log(f([4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2])) // => [4, 3, 3, 4]
console.log(f([0, 2, 0, 2, 4, 1, 2]))                                  // => [0, 2, 4] 

Старое решение 39 байт

a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r 

-3 bytes thanks to @ThePirateBay

1 comments
ThePirateBay 07/28/2017
39 байт a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r

TheLethalCoder 07/28/2017.

C #, 68 байт

 a=>{for(int i=0;i 

Попробуйте прямо сейчас!

Полная / Отформатированная версия:

 namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} система пространства имен namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} класс P namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} static void Main () namespace System
{
    class P
    {
        static void Main()
        {
            Action> f = a =>            {
                for (int i = 0; i < a.Count; i += a[i] + 1)
                    System.Console.Write(a[i] + " ");
            };

            f(new Collections.Generic.List() { });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });Console.WriteLine();
            f(new Collections.Generic.List() { 5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 1, 0, 2, 5, 1, 3, 1, 6, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 4, 5, 1, 3, 8, 3, 0, 1, 1, 3, 1, 2, 7, 4, 0, 0, 1, 2 });Console.WriteLine();
            f(new Collections.Generic.List() { 0, 2, 0, 2, 4, 1, 2 });Console.WriteLine();

            Console.ReadLine();
        }
    }
} 

Возврат списка длиннее 107 байт.

 a=>{var l=new System.Collections.Generic.List();for(int i=0;i 
3 comments
2 TheLethalCoder 07/28/2017
Почему кто-то остановил это?
Thomas Ayoub 07/31/2017
Чтобы обойти свой счет и сделать идеальный 5k?
TheLethalCoder 07/31/2017
@ThomasAyoub Мы можем только предположить, что кто-то с OCD да.

Zgarb 07/28/2017.

Husk , 8 6 байт

←TU¡Γ↓ 

Попробуйте прямо сейчас!

-2 байта (и совершенно новая идея решения) благодаря Лео!

объяснение

Я использую функцию соответствия шаблону списка. Он принимает функцию f и список с head x и tail xs и применяет f к x и xs . Если список пуст, Γ возвращает значение по умолчанию, соответствующее его типу, в этом случае - пустой список. Возьмем f чтобы быть , которое удаляет x элементов из xs . Затем эта функция повторяется, и полученные элементы собираются в списке.

←TU¡Γ↓  Implicit input, e.g. [0,2,0,2,4,1,2]
    Γ↓  Pattern match using drop
   ¡    iterated infinitely: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[],[],[],...
  U     Cut at first repeated value: [[0,2,0,2,4,1,2],[2,0,2,4,1,2],[4,1,2],[]]
 T      Transpose: [[0,2,4],[2,0,1],[0,2,2],[2,4],[4,1],[1,2],[2]]
←       First element: [0,2,4] 
5 comments
Leo 07/28/2017
Вы можете сбросить значение по умолчанию ø, и все будет по-прежнему волшебным образом работать :)
Leo 07/28/2017
Или, для еще меньших байтов, tio.run/##yygtzv7//1HbhJDQQwvPTX7UNvn////RBjpGOiBsomOoYxQLAA
Zgarb 07/28/2017
@Leo О, ничего себе, это умно!
Erik the Outgolfer 07/28/2017
Почему вы это сделали?
Zgarb 07/28/2017
@ErikTheOutgolfer Это была ошибка (я нахожусь на телефоне и, видимо, что-то толкал). Я пытаюсь его отменить ...

Ruud 07/28/2017.

Python 2 , 59 55 байт

 l=input()
i=0
while l[i:]:i+=1;l[i:i+l[i-1]]=[]
print l 

Попробуйте прямо сейчас!

2 comments
1 Rod 07/28/2017
Вы можете использовать l[i:i+l[i-1]]=[] вместо del l[i:i+l[i-1]] для сохранения байта

Dave 07/28/2017.

Pyth, 22 байт

VQ aY.(Q0VeY .x.(Q0 ;Y 

Удален бесполезный байт

4 comments
Erik the Outgolfer 07/28/2017
Я вижу там 23 байта.
Dave 07/28/2017
Typo :) извините ...
3 Wheat Wizard 07/28/2017
Я не уверен, почему вы голосуете. Существует вероятность, что, когда вы отредактировали исправление своего ответа, это вызвало «автоматическое голосование». Причины этого автоматического downvote являются запутанными и ужасными, но это происходит, если система считает ваш ответ «низким качеством» на основе его эвристики. Возможно также, что кому-то не понравился ваш ответ, но в данный момент я не вижу в этом ничего плохого, поэтому я не знаю, почему это так.
isaacg 07/31/2017
Я рад, что вы используете Pyth!

Rod 07/28/2017.

Python 2 , 60 42 байта

-18 байт благодаря Луису Мендо

 x=input()
i=0
while 1:print x[i];i+=1+x[i] 

Попробуйте прямо сейчас!


Martin Ender 07/28/2017.

Retina , 36 байт

Количество байтов предполагает кодирование ISO 8859-1.

.+
$*
((1)*¶)(?<-2>1*¶)*
$1
%M`.
0$ 

Входные и выходные данные разделяются на линии с помощью трейлинг-линии.

Попробуйте прямо сейчас! (Использует запятые вместо строк, чтобы разрешить удобные тестовые пакеты.)


Riley 07/28/2017.

Brain-Flak , 64 байта

([]){{}(({})<>)<>{({}[()]<{}>)}{}([])}{}<>([]){{}({}<>)<>([])}<> 

Попробуйте прямо сейчас!

([]){{}                          ([])}{}                         # Until the stack is empty
       (({})<>)<>                                                # Copy TOS to off stack
                 {({}[()]<{}>)}{}                                # Pop TOS times
                                        <>([]){{}({}<>)<>([])}<> # Reverse off stack 
2 comments
6 DJMcMayhem 07/28/2017
Святое дерьмо! Я написал решение, а затем прокрутил вниз, чтобы опубликовать его, но, оказывается, мы написали то же самое решение byte-for-byte! Даже такие незначительные детали, как ({}[()]<{}>) vs ({}<{}>[()]) были одинаковыми! Какое совпадение!
2EZ 4RTZ 07/28/2017
@DJMcMayhem ворует всю славу XD

user202729 07/28/2017.

Mathematica, 64 50 байт

±x_List:=Prepend[±Drop[x,1+#&@@x],#&@@x]
±_=±{}={} 
1 comments
Mr.Wizard 07/28/2017
Я не мог сопротивляться дальнейшему гольфу этого аккуратного кода; мой ответ ниже.

jkelm 07/28/2017.

C # (.NET Core) , 68 байт

 n=>{var t="";for(int i=0;i 

Попробуйте прямо сейчас!

Принимает ввод как массив целых чисел, возвращает строку, содержащую не пропущенные значения.

3 comments
TheLethalCoder 07/28/2017
Хороший способ сделать это и входит в том же количестве, что и печать.
jkelm 07/28/2017
Мне нравятся простые решения. Тем не менее, я должен изучить LINQ, хотя, как я видел, это сокращает так много c # lambdas ..
TheLethalCoder 07/28/2017
Сокращает его, потому что вы можете неявно возвращать большую часть времени. Хотя это вызов между неявным возвратом с using System.Linq; и нормальный цикл.

Jarko Dubbeldam 07/28/2017.

R, 58 байт

f=function(x,p=1)NO 

Рекурсивная функция. Принимает вектор x качестве аргумента и задает указатель p . Это печатает соответствующую запись x , проверяет, будет ли p+x[p] выйти за пределы, а если нет, вызывает функцию для нового указателя.

f=function(x,p=1,s=x[1])`if`((z<-x[p]+p+1)>sum(x|1),s,f(x,z,c(s,x[z]))) 

Это сопоставимое решение, которое возвращает правильный вектор вместо печати цифр.

3 comments
Giuseppe 07/28/2017
как насчет ввода numeric(0) ? aka пустой массив.
Jarko Dubbeldam 07/28/2017
@Giuseppe Я посмотрю на это, когда буду за моим компьютером
Giuseppe 08/24/2017
57 байт! и он также обрабатывает пустой случай.

Roman Gräf 07/28/2017.

Java (OpenJDK 8) , 53 байта

Благодаря @ PunPun1000 и @ TheLethalCoder

 a->{for(int n=0;;n+=1+a[n])System.out.println(a[n]);} 

Попробуйте прямо сейчас!

5 comments
TheLethalCoder 07/28/2017
Будет ли печать результатов, как и в ответе на C #, сохранить что-нибудь?
Roman Gräf 07/28/2017
@TheLethalCoder
TheLethalCoder 07/28/2017
Можете ли вы сохранить байт, переместив n в цикл?
TheLethalCoder 07/28/2017
Плюс это пока не работает.
PunPun1000 07/28/2017
Вы потеряете парс после (a[n+=1+a[n]] . Функция также выдает ошибку после вывода правильного значения, я не знаю, какой консенсус о том, разрешено это или нет (вопрос скажем, что-либо стандартная ошибка игнорируется). Если это было намерение, вы можете удалить n в цикле for. Наконец, код n не работает, как есть, даже с помощью paren. Consumer и используйте func.accept(test)

Martin Ender 07/28/2017.

Алиса , 15 байт

/$.. \h&
\I@nO/ 

Попробуйте прямо сейчас!

Ввод и вывод списков, разделенных линией десятичных целых чисел.

объяснение

/   Switch to Ordinal mode.
I   Read a line.
.   Duplicate it.
n   Logical NOT (gives truthy if we're at EOF).
/   Switch to Cardinal.
    The IP wraps around to the left.
\   Switch to Ordinal.
$@  Terminate the program if we're at EOF.
.   Duplicate the input line again.
O   Print it.
\   Switch to Cardinal.
h   Increment the value.
&   Store the result in the iterator queue.
    The program wraps around to the beginning. 

Сохранение целого числа n в очереди итератора приводит к выполнению следующей команды n раз. Зеркала вроде / не являются командами, поэтому следующей командой будет I . Поэтому, если мы просто читаем и печатаем значение x , мы будем читать значения x+1 на следующей итерации, причем последняя из них заканчивается поверх стека. Это пропускает необходимые элементы списка номеров.


Mr.Wizard 07/28/2017.

Mathematica , 37 (30o)

Дальнейшая игра в гольф из тонкого метода user202729.

±NO 

В правилах явно не указывается выходной формат, поэтому, может быть:

±NO 

Вывод для второй функции выглядит так: 0.2.4.{} - особенно {} по-прежнему возвращается для пустого набора, соответствующего окончательному правилу.

2 comments
1 JungHwan Min 07/28/2017
±Drop[NO может быть ±NO поскольку ± имеет более низкий приоритет, чем Infix .
Mr.Wizard 07/28/2017
@JungHwanMin Я пропустил это; благодаря!

Jenny_mathy 07/28/2017.

Mathematica, 65 байт

(s=#;t=1;w={};While[t<=Length@s,AppendTo[w,k=s[[t]]];t=t+k+1];w)& 

Попробуйте прямо сейчас!


w0lf 07/28/2017.

Ruby, 36 33 31

f=->l{a,*l=l;a&&f[l.drop(p a)]} 

Попробуйте в Интернете.

4 comments
sethrin 07/30/2017
Вы можете вычесть f= как элемент заголовка.
w0lf 07/30/2017
@sethrin Даже если мне нужно назвать это рекурсивно?
sethrin 07/30/2017
Хм, хороший вопрос. Наверное, нет. Между прочим, мне очень понравилось ваше решение.
w0lf 07/30/2017
@sethrin Спасибо! :)

AnonymousReality 07/28/2017.

Swift, 63 байта

func a(d:[Int]){var i=0;while i 

Это моя первая запись, когда-либо, поэтому я не уверен на 100% правил, но, надеюсь, этого ответа достаточно. Я немного не уверен в правилах ввода данных в систему. У меня есть более короткий ответ, если мне позволили где-то использовать функцию, которая может вернуть вход.

2 comments
Stephen 07/28/2017
Добро пожаловать в PPCG! Правила по умолчанию - это то, что вы можете либо иметь код, который работает как полная программа, поэтому вводить (обычно) в STDIN и выводить (обычно) в STDOUT or функцию, поэтому вводить (обычно) из параметров функции и выводить (обычно) из возврат функции.
AnonymousReality 07/28/2017
@StepHen - спасибо! Я предполагаю, что тогда моя другая версия недействительна. С нетерпением ждем возможности внести свой вклад!

Perl 6 , 31 байт

 {(@_,{.[1+.[0]..*]}...^0)[*;0]} 

Попробуй это

Expanded:

 {  # bare block lambda with implicit parameter 「@_」
  (
    # generate a sequence

    @_,

    {
      .[ # index into previous value in the sequence
        1 + .[0]  # start by skipping one plus the first element
                  # of the previous value in the sequence
        ..  *     # use that to create a Range with no end
      ]
    }

    ...^  # keep doing that until: (and throw away last value)
    0     # it generates an empty list

  )[ *; 0 ]  # from every value in the sequence, get the first element
} 

Чтобы понять, как работает код, без [*;0] это создаст последовательность, такую ​​как:

 [0, 1, 0, 2, 5, 1, 3, 1, 6, 2],
   (1, 0, 2, 5, 1, 3, 1, 6, 2),
         (2, 5, 1, 3, 1, 6, 2),
                  (3, 1, 6, 2) 

Renzo 07/29/2017.

Общий Lisp, 51 байт

(do((x(read)(nthcdr(1+(print(car x)))x)))((not x))) 

Попробуйте прямо сейчас!


C ++ (gcc), 172 байта

#includeint main(){std::istream& i=std::cin;char c;int a,b;while(i>>c&&i>>a){std::cout<>c&&i>>b);}std::cout< 

Попробовать онлайн

Ужасный (c/91?"":" ") Предназначен для правильного интервала в выходе. Без него (-15 байт) вывод имеет форму: [0,2,4] , когда я меняю его на простой вывод " " (-9 bytes), как [ 0, 2, 4] (дополнительное пространство в начале) ,

<<(c/93?"":"]") на конце только для обработки [] пустого входного угла

Не печатает конечную конечную линию.

1 comments
Erik the Outgolfer 07/30/2017
Вы также можете печатать числа, разделенные разделителем без цифр, без необходимости [] и у вас может быть пустой вывод для этого края, и нет необходимости (c/91?"":" ") . Вам не нужно соответствовать формату примеров в вызове.

Jonathan Allan 07/29/2017.

Желе , 8 байт

ḢṄ‘ṫ@µL¿ 

Полная программа, распечатывающая результаты, за которыми следует новая строка (пустой список не выводит).

Попробуйте прямо сейчас!

Как?

ḢṄ‘ṫ@µL¿ - Main link: list of non-negative integers  e.g. [2,5,4,0,1,2,0]
       ¿ - while:           Iteration:  1                  2             3          4        5
      L  -   length (0 is falsey)       7                  4             3          1        0
     µ   - ...do:                                                                            stop
Ḣ        -   head (pop & modify)        2 ([5,4,0,1,2,0])  0 ([1,2,0])   1 ([2,0])  0 ([0])
 Ṅ       -   print it (and yield it)   "2\n"              "0\n"         "1\n"      "0\n"
  ‘      -   increment                  3                  1             2          1
   ṫ@    -   tail from index            [0,1,2,0]          [1,2,0]      [0]         []
         -
         -                       i.e. a resulting in the printing of: '''2
                                                                         0
                                                                         1
                                                                         0
                                                                         ''' 
2 comments
Erik the Outgolfer 07/30/2017
Наконец, ответ Желе! BTW Я могу сделать это в 7 байт.
Erik the Outgolfer 07/30/2017
И у меня также есть функция возврата списка в 18 байт.

Evpok 07/30/2017.

Python 3 , 35 байт

 f=lambda h=0,*t:t and[h,*f(*t[h:])] 

Попробуйте прямо сейчас!

Запустите его с f(*l) где l - ваш ввод. Возможно, растягивают правила ввода, но я просто люблю расширенную распаковку.


cliffroot 07/28/2017.

Clojure, 67 байт

#(nth(reduce(fn[[z k]b](if(= z 0)[b(conj k b)][(- z 1)k]))[0[]]%)1) 

Начинается с начальных параметров [0 []] , где 0 - это счетчик, а [] - результат. Если первый элемент в этом списке равен 0 добавляет элемент n из аргумента в результат и далее проходит этот список [n [... n]] противном случае уменьшается первый элемент. (это объяснение кажется мне ужасным)

Смотреть онлайн


Dead Possum 07/28/2017.

Python 2.4, 85 байт

Нет шансов выиграть у него на питоне, но я люблю oneliners, и это может быть интересно другим.
Оказывается, есть фантастический магический трюк, чтобы получить доступ к списку зданий внутри понимания, но он работает только в 2.4 и с некоторыми изменениями в <= 2.3
locals()['_[1]'] это так. Python создает секретное имя _[1] для списка, в то время как оно создается и сохраняет его в locals . Также имена в именах _[2] , _[3] ... используются для вложенных списков.

lambda n:[j for i,j in enumerate(n)if i==len(locals()['_[1]'])+sum(locals()['_[1]'])] 

Поэтому он подсчитывает количество уже добавленных элементов плюс их сумму. Результат - это индекс следующего желаемого элемента.
Я думаю, что должен быть способ избежать перечислить. Подобно доступу к входному массиву непосредственно по индексу: [ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ] . Но я не могу найти компактный способ защитить его от индекса за пределами диапазона (сохраняя его oneliner)

введите описание изображения здесь


Neil 07/28/2017.

Пакет, 69 байт

:l
@if not "%1"=="" echo %1&(for /l %%i in (0,1,%1)do @shift)&goto l 

(Мне нужно () s вокруг, for противном случае goto происходит внутри цикла.)

Related questions

Hot questions

Language

Popular Tags