Dado um array inteiro:
- Comece do primeiro número
- Avança n posições onde n é o valor da posição atual
- Exclua a posição atual, tornando a próxima posição a posição atual.
- Vá para a etapa 2 até que haja um número restante
- Imprimir esse número
Regras
A matriz envolve (o próximo número após o último número na matriz é o primeiro número).
Um zero se remove (obviamente).
Números negativos não são permitidos como entrada.
Casos de teste
[1] => 1
[1,2] => 1
[1,2,3] => 3
[1,2,2] => 1
[1,2,3,4] => 1
[6,2,3,4] => 4
[1,2,3,4,5] => 5
[0,1] => 1
[0,0,2,0,0] => 0
Exemplo passo a passo
[1,4,2,3,5]
^ start from the first position
^ jump 1 position (value of the position)
[1, 2,3,5] remove number in that position
^ take next position of the removed number (the 'new' 'current' position)
^ jump 2 positions
[1, 2,3 ] remove number in that position
^ take next position (looping on the end of the array)
^ jump 1 position
[1, 3 ] remove number in that position
^ take next position (looping)
^ jump 3 positions (looping on the end of the array)
[ 3 ] remove number in that position
print 3
Exemplo 2
[4,3,2,1,6,3]
^ start from the first position
^ jump 4 positions
[4,3,2,1, 3] remove number in that position
^ take next position
^ jump 3 positions
[4,3, 1, 3] remove number in that position
^ take next position
^ jump 1 positions
[4,3, 1 ] remove number in that position
^ take next position
^ jump 4 positions
[4, 1 ] remove number in that position
^ take next position
^ jump 1 position
[ 1 ] remove number in that position
print 1
Este é o código-golfe , a resposta mais curta em bytes vence!
code-golf
array-manipulation
workoverflow
fonte
fonte
Respostas:
Casca , 7 bytes
Isso retorna o resultado como uma lista singleton
Experimente online!
Explicação
fonte
Haskell ,
545048 bytesExperimente online!
Explicação:
f[x]=x
: Se a lista fornecida for uma lista singleton, retorne seu elemento.f(x:r)=f$ ...
: Caso contrário, recursivamente apliquef
à seguinte lista:cycle$x:r
),x+1
elementos removidos (drop(x+1)$
),r
. (snd<$>zip r
é uma alternativa mais curta paratake(length r)
).Versão anterior de 54 bytes:
Experimente online!
fonte
Ruby , 37 bytes
Modifica a matriz no local, o que parece ser aceitável como saída. Experimente online!
fonte
MATL , 21 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
Python 3 ,
5451 bytesSaída é uma lista única.
Experimente online!
fonte
CJam , 15 bytes
Experimente online!
Explicação
Em vez de acompanhar um ponteiro, apenas mudo a matriz ciclicamente para que o elemento atual esteja sempre à frente.
Uma alternativa divertida que infelizmente não salva bytes:
fonte
Flacidez Cerebral , 88 bytes
Experimente online!
Explicação
fonte
Python 2 , 55 bytes
Experimente online!
Saídas como uma lista de singleton, conforme permitido por padrão . Economizei alguns bytes graças a Dennis , lembrando-me que a modificação do argumento da função é permitida.
Como funciona
def f(a)
- Define uma função com um parâmetroa
.while a[1:]:
- Emboraa
o primeiro elemento removido seja verdade, execute o bloco de código a seguir. Uma lista com um elemento ou mais é verdadeira e listas vazias são falsas no Python; portanto, isso irá parar quandoa
atingir 1.l=a[0]%len(a)
- Pegue o primeiro elemento e obtenha o restante de sua divisão pelo comprimento dea
. Atribua o resultado al
.a[:]=a[-~l:]+a[:l]
- Girea
para a esquerda osl
elementos e remova o primeiro, enquanto atribui isso aoa
local.Python 2 , 63 bytes
Experimente online!
Embora mais longo, isso parece muito mais elegante. Também obrigado a ovs por ajudar no chat.
fonte
a,*b=input()
(python3) e salvar alguns bytes? No entanto, eu não tenho certeza de como isso afetarial
ea fatiaGeléia , 7 bytes
Experimente online!
Programa completo.
fonte
ḷ/
é malditamente inteligente.Geléia , 9 bytes
Experimente online!
-2 bytes graças a user202729
Explicação
fonte
Python 3 , 60 bytes
Experimente online!
-3 bytes graças a ovs
fonte
APL (Dyalog) ,
2018 bytesExperimente online!
fonte
Mathematica, 36 bytes
usa o algoritmo de Martin
-5 bytes de Misha Lavrov e Martin Ender
Experimente online!
fonte
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (Este pára quando há apenas um elemento porque{a}
não corresponde ao padrão{x_,y__}
.)y
, chamando a lista inteiral
e usando eml
vez de{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 bytes-4 bytes graças ao FrownyFrog
Experimente online!
Original:
([:}.{.|.])^:(1<#)^:_
Como funciona:
^:_
repita até o resultado parar de mudar^:(1<#)
se o comprimento da lista for maior que 1{.|.]
gire a lista para a esquerda seu primeiro item vezes[:}.
solte o primeiro elemento e tampe o garfoExperimente online!
fonte
JavaScript (ES6),
5460 bytesEconomizou 1 byte graças à versão fixa @Shaggy
(+6 bytes)
Modifica a matriz de entrada , que é reduzida a um singleton.
Casos de teste
Mostrar snippet de código
Quão?
Aplicamos recursivamente o algoritmo descrito no desafio. Somente a condição de parada
1/a
pode parecer um pouco estranha. Ao aplicar um operador aritmético:NaN
e1/NaN
também sãoNaN
(falsas).1/0 = +Infinity
ou1/N = positive float
a N> 0 (ambos de verdade).fonte
splice
modifica a matriz original, você poderia fazerf=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
para 52 bytesf=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
é ok, mas pode ser otimizadop+a[p]
poderiam ser removidos. O que - é claro - não é o caso. Obrigado por denunciar isso!Julia 0.6 ,
4642 bytesExperimente online!
Versão Julia simples e recursiva.
x[]
acessa o primeiro elemento de x.fonte
Java 8, 79 bytes
Este lambda aceita ae
Stack<Integer>
retorna umint
ouInteger
.Experimente Online
Ungolfed
Agradecimentos
fonte
i%=s
pode ser removido sel.get(i)
alterado porl.get(i%s)
Pitão , 9 bytes
Experimente aqui!
Isso gera o resultado como uma lista de singleton, conforme permitido por padrão .
Como funciona
Nota: Se você não quiser ver esses colchetes, basta adicionar
h
oue
na frente de todo o código.fonte
Rápido , 87 bytes
Retorna como uma lista singleton por modificar a entrada . Experimente online!
Explicação
fonte
Perl 6 ,
4645 bytes(-1 byte graças a Brad Gilbert)
Experimente online!
($_, { ... } ... 1)
gera uma sequência de listas, começando com a lista de entrada$_
, cada elemento sucessivo sendo gerado pela expressão entre colchetes e finalizando quando a lista combina de forma inteligente1
--ie, tem um comprimento de 1. O final[* - 1]
obtém o elemento final e o final[0]
tira o único elemento dessa lista de singleton.(|$_ xx *)
gera uma cópia plana e infinitamente replicada do elemento atual. Essa lista é indexada com o intervalo.[0] + (1 ..^ $_)
para extrair a próxima lista finita da série.fonte
[*-1][0]
pode ser combinado para[*-1;0]
salvar um byte. Também1..$_-1
é melhor escrever como1..^$_
salvar novamente um byte.[*-1;0]
, mas parece não ser equivalente de alguma forma. A função então retorna uma lista em vez de um número.1..^$_
otimizaçãoPerl 5 ,
474341 + 2 (-ap
) = 43 bytesExperimente online!
Recebe a entrada como números separados por espaço.
fonte
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 bytes
Experimente online!
fonte
Python 3 ,
5756 bytesExperimente online!
fonte
Java 8 , 325 bytes
Golfe:
Ungolfed:
fonte
static
palavras - chave aqui. Normalmente, as soluções de vários métodos são implementadas como membros não estáticos de uma classe emain
cria uma instância para teste. Além disso, se você fizer dessa maneira, suporta o Java 7 e poderá enviar como simplesmente uma solução "Java". Para referência futura, o formato de entrada tende a ser bastante flexível aqui; portanto, por exemplo, você pode optar por receber a entrada comoList
(o que é bastante útil para esse problema).APL + WIN, 36 bytes
Explicação:
Solicita a entrada da tela.
fonte
Python 2, 61 bytes
fonte
JavaScript,
585659 bytesRetorna o resultado como o único elemento restante na matriz de entrada que é atualizado no local.
Dois bytes salvos usando uma instrução separada por vírgula em vez de uma instrução de bloco no corpo do loop for! Três bytes perdidos para pular de um elemento excluído no final da matriz (:
Menos golfe:
fonte
[3, 5, 7, 9]
.[3,5,7,9]
. Valor esperado 5Flak cerebral , 104 bytes
H.PWiz tem uma resposta mais curta aqui que eu ajudei a fazer, você deve conferir.
Experimente online!
Explicação
fonte
Limpo , 78 bytes
Usa o mesmo método da resposta Haskell de Laikoni .
Experimente online!
fonte
R , 111
117126bytesGraças ao @ Giuseppe por jogar 11 bytes ao mudar para um loop while, obtive outros 4 removendo a função e lendo diretamente a entrada do usuário.
Não me sinto muito bem com o que foi necessário para chegar lá - tenho certeza de que existe uma solução mais elegante.
Experimente online!
Código ungolfed
fonte
f=
precisa ser incluídowhile
loop, eu acho.while
loopf=
parte da função recursiva. :(