Dada uma lista de números inteiros não negativos em qualquer formato razoável, itere sobre ele, ignorando tantos elementos quanto todo número em que você pisar diz.
Aqui está um exemplo trabalhado:
[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
Outro exemplo funcionado, não tão deltas todos iguais:
[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
Um exemplo fora dos limites:
[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)
Regras
- Você não pode usar nenhum truque chato entre eles , eles tornam o desafio chato e desinteressante.
- Você só deve devolver / imprimir o resultado final. A saída STDERR é ignorada.
- Você não pode obter a entrada como uma sequência de dígitos em nenhuma base (por exemplo, "0102513162" para o primeiro caso).
- Você deve usar a ordem da esquerda para a direita para entrada.
- Como nos exemplos trabalhados, se você sair dos limites, a execução será encerrada como se não fosse o caso.
- Você deve usar
0
para pular 0 elementos. - Dada a lista vazia (
[]
) como entrada, você deve retornar[]
.
Casos de teste
[] => []
[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]
Isso é código-golfe , então a resposta mais curta vence!
code-golf
array-manipulation
Erik, o Outgolfer
fonte
fonte
""
s à direita ?0
s à direita na saída.Respostas:
Python 2 , 36 bytes
Experimente online!
fonte
x[0]
vez dex[:1]
?[x[0]]
x[:1]
qualquer maneira ...f=lambda x:x and[x[0]]+f(x[x[0]+1:])
Python 2 ,
49 44 *41 bytesRiscado 44 ainda é regular 44 :(
* -3 graças a @ ASCII-only .
Experimente online!
Imprime os resultados separados por uma nova linha, conforme o OP permitido no bate-papo. Eu não acho que possa ficar mais curto como um programa completo não recursivo .
Como é que isso funciona?
l=input()
- Lê a lista da entrada padrão.while l:
- Abusa do fato de que listas vazias são falsas no Python, faz um loop até que a lista esteja vazia.print l[0];
- Imprime o primeiro elemento da lista.l=l[l[0]+1:]
- "Salta como um coelho" - corta o primeirol[0]+1
da lista.Vamos dar um exemplo
Dada a lista
[5, 1, 2, 3, 4, 5, 2, 1, 2, 1, 0, 0]
como entrada, executa o código seguinte (de acordo com a explicação acima) - Imprime o primeiro item da matriz:5
, cortar o primeiro 6:[2, 1, 2, 1, 0, 0]
. Em seguida, imprimir2
e cortar o primeiro 3:[1,0,0]
. Da mesma forma, produzimos1
, cortamos os 2 primeiros e obtemos[0]
. Obviamente,0
é impresso e o programa termina.fonte
Haskell,
29 2726 bytesGuardado 1 byte graças ao Zgarb.
Experimente online.
fonte
f x=x
na segunda linha, salva um byte.JavaScript (ES6),
423935 bytesSolução antiga 39 bytes
-3 bytes graças a @ThePirateBay
fonte
a=>a.map(n=>i--||r.push(i=n),r=i=[])&&r
05AB1E ,
109 bytesUsa a codificação 05AB1E . Experimente online!
fonte
Mathematica,
4644 bytesAlternativas:
fonte
C #, 68 bytes
Experimente online!
Versão completa / formatada:
O retorno de uma lista é maior em 107 bytes.
fonte
Casca ,
86 bytesExperimente online!
-2 bytes (e uma idéia de solução completamente nova) graças ao Leo!
Explicação
Estou usando a função de correspondência de padrão de lista
Γ
. É preciso uma funçãof
e uma lista com cabeçax
e caudaxs
e se aplicaf
ax
exs
. Se a lista estiver vazia,Γ
retornará um valor padrão consistente com seu tipo, nesse caso, uma lista vazia. Tomamosf
para ser↓
, que eliminax
elementosxs
. Essa função é iterada e os elementos resultantes são coletados em uma lista.fonte
Python 2 ,
5955 bytesExperimente online!
fonte
l[i:i+l[i-1]]=[]
vez disso, você pode usardel l[i:i+l[i-1]]
para salvar um bytePyth, 22 bytes
Removido um byte inútil
fonte
Python 2 ,
604241 bytes-18 bytes graças a Luis Mendo
-1 byte graças a Jonathan Frech
Experimente online!
fonte
i-=~x[i]
é um byte menor quei+=1+x[i]
.Retina , 36 bytes
A contagem de bytes assume a codificação ISO 8859-1.
Entrada e saída são separadas por avanço de linha com um avanço de linha à direita.
Experimente online! (Usa vírgulas em vez de feeds de linha para permitir suítes de teste convenientes.)
fonte
Brain-Flak , 64 bytes
Experimente online!
fonte
({}[()]<{}>)
vs({}<{}>[()])
eram os mesmos! Que coincidência!Mathematica,
6450 bytesfonte
C # (.NET Core) , 68 bytes
Experimente online!
Recebe a entrada como uma matriz de números inteiros, retorna uma sequência que contém os valores não ignorados.
fonte
using System.Linq;
e um loop normal.R, 58 bytes
Função recursiva. Pega um vetor
x
como argumento e direciona um ponteirop
. Isso imprime a entrada correspondente dex
, verifica sep+x[p]
sairia dos limites e, se não, chama a função para o novo ponteiro.Essa é uma solução comparável que retorna um vetor adequado em vez de imprimir os dígitos.
fonte
numeric(0)
? aka matriz vazia.Java (OpenJDK 8) , 53 bytes
Obrigado a @ PunPun1000 e @TheLethalCoder
Experimente online!
fonte
n
- se para o loop?(a[n+=1+a[n]]
. A função também gera um erro após a saída do valor correto, não sei o consenso sobre se isso é permitido ou não (a questão diz que algo no erro padrão é ignorado). Se essa era a intenção, você pode remover on<a.length
loop for. Finalmente, o código TIO não funciona como está, mesmo com o paren. A função deve serConsumer<int[]>
func.accept(test)
Alice , 15 bytes
Experimente online!
Entrada e saída de listas separadas por avanço de linha de números inteiros decimais.
Explicação
Armazenar um número inteiro n na fila do iterador faz com que o próximo comando seja executado n vezes. Espelhos como
/
não são comandos, então o próximo comando seráI
. Portanto, se apenas lermos e imprimirmos um valor x , leremos valores x + 1 na próxima iteração, com o último deles terminando no topo da pilha. Isso pula os elementos da lista de números necessários.fonte
Mathematica , 37 (30 anos)
Golfe adicional do método fino de user202729.
As regras não parecem especificar explicitamente o formato de saída, então talvez:
A saída para a segunda função se parece com:
0.2.4.{}
- notavelmente{}
ainda é retornada para um conjunto vazio, em conformidade com a regra final.fonte
±Drop[{x},a]
pode ser±{x}~Drop~a
porque±
tem uma precedência menor queInfix
.Lisp comum, 51 bytes
Experimente online!
fonte
Flacidez cerebral ,
6460 bytesEconomize 4 bytes com base em uma ideia de 0 '
Experimente online!
Anotado
fonte
Ruby,
36 3331Experimente online.
fonte
f=
elemento como um cabeçalho.Python 2.4, 85 bytes
Não há chance de ganhar em python com ele, mas eu amo oneliners e este pode ser interessante para os outros.
Acontece que existe um truque de mágica para acessar a lista de construção dentro da compreensão, mas funciona apenas em 2.4 e com algumas edições em <= 2.3
locals()['_[1]']
. O Python cria um nome secreto_[1]
para a lista, enquanto é criado e o armazenalocals
. Também nomes_[2]
,_[3]
... são usados para listas aninhadas.Portanto, conta o número de elementos já adicionados mais sua soma. Resultado é o índice do próximo elemento desejado.
Eu acho que deveria haver uma maneira de evitar enumerar. Como matriz de entrada aceder directamente por índice:
[ n[len(locals()['_[1]'])+sum(locals()['_[1]'])] for ... ]
. Mas não consigo descobrir uma maneira compacta de protegê-lo de um índice fora do intervalo (mantendo-o sempre alinhado)fonte
Rápido, 63 bytes
Esta é a minha primeira entrada, portanto, não tenho 100% de certeza sobre as regras, mas espero que esta resposta seja suficiente. Estou um pouco inseguro de regras sobre como inserir a entrada em um sistema. Eu tenho uma resposta mais curta se me for permitido assumir uma função em algum lugar que possa retornar a entrada.
fonte
Perl 6 , 31 bytes
Teste-o
Expandido:
Para ajudar a entender como o código funciona, sem
[*;0]
isso, seria gerada uma sequência como a seguinte:fonte
Geléia , 8 bytes
Um programa completo que imprime os resultados, cada um seguido por uma nova linha (a lista vazia não produz saída).
Experimente online!
Quão?
fonte
Python 3 , 35 bytes
Experimente online!
Execute-o com
f(*l)
ondel
está sua entrada. Indiscutivelmente esticando as regras para entrada, mas eu adoro descompactar avançado.fonte
APL (Dyalog Unicode) , SBCS de 20 bytes
Experimente online!
fonte
Perl 5 ,
3630 + 1 (-a) = 31 bytesExperimente online!
Recebe sua entrada como uma lista de números separados por espaço.
fonte
PowerShell , 25 bytes
Experimente online!
fonte