Desafio:
Entrada: Uma lista de números inteiros positivos distintos no intervalo .
Saída: Um número inteiro: a quantidade de vezes que a lista é embaralhada . Para uma lista, isso significa que a lista é dividida em duas metades, e essas metades são intercaladas (ou seja, embaralhar a lista [1,2,3,4,5,6,7,8,9,10]
uma vez resultaria [1,6,2,7,3,8,4,9,5,10]
, portanto, para esse desafio, a entrada [1,6,2,7,3,8,4,9,5,10]
resultaria 1
).
Regras do desafio:
- Você pode assumir que a lista conterá apenas números inteiros positivos no intervalo (ou se você optar por ter listas de entrada indexadas com 0).
- Você pode supor que todas as listas de entrada sejam uma lista embaralhada válida ou uma lista classificada que não seja embaralhada (nesse caso, a saída será
0
). - Você pode assumir que a lista de entrada conterá pelo menos três valores.
Exemplo passo a passo:
Entrada: [1,3,5,7,9,2,4,6,8]
Se você embaralhar, ele se torna uma vez:, [1,5,9,4,8,3,7,2,6]
porque todos os itens pares indexados a 0 são os primeiros [1, ,5, ,9, ,4, ,8]
e, depois, todos os itens ímpares indexados a 0 [ ,3, ,7, ,2, ,6, ]
.
A lista ainda não foi encomendada, por isso continuamos:
Se você embaralhar a lista novamente: Tornar-se [1,9,8,7,6,5,4,3,2]
novamente: [1,8,6,4,2,9,7,5,3]
Então: [1,6,2,7,3,8,4,9,5]
E finalmente [1,2,3,4,5,6,7,8,9]
:, que é uma lista ordenada, então terminamos de embaralhar.
Nós embaralhámos o original [1,3,5,7,9,2,4,6,8]
cinco vezes para chegar [1,2,3,4,5,6,7,8,9]
, então a saída é 5
neste caso.
Regras gerais:
- Isso é código-golfe , então a resposta mais curta em bytes vence.
Não permita que idiomas com código de golfe o desencorajem a postar respostas com idiomas que não sejam codegolf. Tente encontrar uma resposta o mais curta possível para 'qualquer' linguagem de programação. - As regras padrão se aplicam à sua resposta com as regras de E / S padrão , para que você possa usar STDIN / STDOUT, funções / método com os parâmetros adequados e programas completos do tipo retorno. Sua chamada.
- As brechas padrão são proibidas.
- Se possível, adicione um link com um teste para o seu código (ou seja, TIO ).
- Além disso, é altamente recomendável adicionar uma explicação para sua resposta.
Casos de teste:
Input Output
[1,2,3] 0
[1,2,3,4,5] 0
[1,3,2] 1
[1,6,2,7,3,8,4,9,5,10] 1
[1,3,5,7,2,4,6] 2
[1,8,6,4,2,9,7,5,3,10] 2
[1,9,8,7,6,5,4,3,2,10] 3
[1,5,9,4,8,3,7,2,6,10] 4
[1,3,5,7,9,2,4,6,8] 5
[1,6,11,5,10,4,9,3,8,2,7] 6
[1,10,19,9,18,8,17,7,16,6,15,5,14,4,13,3,12,2,11,20] 10
[1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20] 17
[1,141,32,172,63,203,94,234,125,16,156,47,187,78,218,109,249,140,31,171,62,202,93,233,124,15,155,46,186,77,217,108,248,139,30,170,61,201,92,232,123,14,154,45,185,76,216,107,247,138,29,169,60,200,91,231,122,13,153,44,184,75,215,106,246,137,28,168,59,199,90,230,121,12,152,43,183,74,214,105,245,136,27,167,58,198,89,229,120,11,151,42,182,73,213,104,244,135,26,166,57,197,88,228,119,10,150,41,181,72,212,103,243,134,25,165,56,196,87,227,118,9,149,40,180,71,211,102,242,133,24,164,55,195,86,226,117,8,148,39,179,70,210,101,241,132,23,163,54,194,85,225,116,7,147,38,178,69,209,100,240,131,22,162,53,193,84,224,115,6,146,37,177,68,208,99,239,130,21,161,52,192,83,223,114,5,145,36,176,67,207,98,238,129,20,160,51,191,82,222,113,4,144,35,175,66,206,97,237,128,19,159,50,190,81,221,112,3,143,34,174,65,205,96,236,127,18,158,49,189,80,220,111,2,142,33,173,64,204,95,235,126,17,157,48,188,79,219,110,250]
45
fonte
[1,3,5,7,9,2,4,6,8]
comprimento é 9, mas vou acrescentar mais alguns para os comprimentos 7 e 11, talvez. EDIT: Adicionado os casos de teste[1,3,5,7,2,4,6] = 2
(comprimento 7) e[1,6,11,5,10,4,9,3,8,2,7] = 6
(comprimento 11). Espero que ajude.[1,6,2,7,3,8,4,9,5,10]
ou[6,1,7,2,8,3,9,4,10,5]
são possíveis. No meu desafio, isso significa que a carta do topo sempre permanecerá a carta do topo, então é realmente um truque. Nunca vi alguém que usasse apenas baralhamento para embaralhar um baralho de cartas. Geralmente eles também usam outro tipo de shuffles no meio. De qualquer forma, é tarde demais para mudar o desafio agora, portanto, para o efeito desse desafio, a carta do topo sempre permanecerá a carta do topo depois de um riffle-shuffle.Respostas:
Gelatina , 8 bytes
Experimente online!
Quão?
fonte
JavaScript (ES6), 44 bytes
Versão mais curta sugerida por @nwellnhof
Espera um baralho com cartões 1-indexados como entrada.
Experimente online!
Dado um baralho[ c0 0, … , CL - 1] de comprimento eu , definimos:
E procuramos porn tal que cxn=2 .
JavaScript (ES6),
57 5250 bytesEspera um baralho com cartões indexados 0 como entrada.
Experimente online!
Quão?
Como o JS não possui suporte nativo para extrair fatias de array com uma etapa personalizada, simular toda a reprodução aleatória provavelmente seria um pouco caro (mas, para ser sincero, nem tentei). No entanto, a solução também pode ser encontrada apenas olhando para a 2ª carta e o número total de cartas no baralho.
fonte
Python 2, 39 bytes
Try it online!
-4 thanks to Jonathan Allan.
fonte
f=lambda x:2!=x[1]and-~f(x[::2]+x[1::2])
!=
can be-
. ;-)x[1]>2
I guess)R,
585545 bytesTry it online!
Simulates the sorting process. Input is 1-indexed, returns
FALSE
for 0.fonte
Perl 6 ,
3432 bytes-2 bytes graças a Jo King
Experimente online!
Semelhante à abordagem de Arnauld . O índice da segunda carta após n shuffles está
2**n % k
com k definido como na resposta de Arnauld.fonte
APL (Dyalog Unicode) ,
35262322 bytes SBCSExperimente online!
Graças a Adám pela ajuda, Erik, o Outgolfer por -3 e ngn por -1.
O link TIO contém dois casos de teste.
Explicação:
¹
fonte
∧/2≤/⍵
->⍵≡⍳≢⍵
Perl 6 ,
36 3432 bytes-2 bytes graças a nwellnhof
Experimente online!
Riffle reverso aleatório, classificando pelo módulo de índice 2 até que a lista seja classificada e, em seguida, retorna o comprimento da sequência.
É engraçado, geralmente não uso a abordagem recursiva para o Perl 6, mas desta vez acabou mais curto que o original.
Explicação:
fonte
05AB1E (herdado) , 9 bytes
Experimente online!
Explicação
fonte
Å≠
que inspirou esse desafio. :)Java (JDK) , 59 bytes
Experimente online!
Funciona de maneira confiável apenas para matrizes com tamanho menor que 31 ou soluções com menos de 31 iterações. Para uma solução mais geral, consulte a seguinte solução com 63 bytes:
Experimente online!
Explicação
Em um riffle, a próxima posição é a anterior, multiplicando dois módulos por comprimento, se for ímpar ou por comprimento - 1 se for par.
Então, eu estou iterando sobre todos os índices usando essa fórmula até encontrar o valor 2 na matriz.
Créditos
fonte
x.clone()
vez deA.copyOf(x,l)
.J ,
2826 bytes-2 bytes graças a Jonah!
Experimente online!
Inspirado seja a solução APL da Ven.
Explicação:
K (ngn / k) , 25 bytes
Obrigado a ngn pelo conselho e pelo seu intérprete K!
Experimente online!
fonte
1#@}.(\:2|#\)^:(2<1{])^:a:
para 26 bytesAPL (NARS), caracteres 49, bytes 98
por que usar no loop mais profundo, um algo que deve ser nlog (n), quando podemos usar um n linear? apenas por mais alguns bytes? [⍵≡⍵ [⍋⍵] O (nlog n) e o confronto de cada elemento para ver estão em ordem usando o teste ∧ / ¯1 ↓ ⍵≤1⌽⍵ O (n)]:
fonte
Ruby , 42 bytes
Experimente online!
Quão:
Procure o número 2 dentro da matriz: se estiver na segunda posição, o baralho não foi embaralhado; caso contrário, verifique as posições em que os embaralhamento sucessivos o colocariam.
fonte
R ,
7072 bytesExperimente online!
Agora lida com o estojo zero zero.
fonte
C (GCC)
6463 bytes-1 byte de nwellnhof
Essa é uma resposta drasticamente mais curta, com base nas respostas de Arnauld e Olivier Grégoire. Deixarei minha solução antiga abaixo, pois resolve o problema um pouco mais geral de decks com cartões que não são contíguos.
Experimente online
C (GCC) 162 bytes
Experimente online
fonte
R, 85 bytes
Experimente online.
Explicação
Método estúpido (força bruta), muito menos elegante do que seguir o cartão # 2.
Em vez de embaralhar a entrada
s
, começamos com um vetor classificadou
que embaralhamos progressivamente até que seja idêntico as
. Isso fornece avisos (mas as contagens aleatórias ainda estão corretas) para comprimentos ímpares de entrada devido à dobragem de um vetor de comprimento ímpar em uma matriz de 2 colunas; nesse caso, em R, o ponto de dados ausentes é preenchido pela reciclagem do primeiro elemento de entrada.O loop nunca terminará se fornecermos um vetor que não possa ser embaralhado.
Adendo: você salva um byte se não embaralhar. Ao contrário da resposta acima, não há necessidade de transpor com
t()
, no entanto, a ordembyrow=TRUE
é por isso queT
aparecematrix()
.R , 84 bytes
Experimente online!
fonte
PowerShell ,
116 114 108 8478 bytes-24 bytes graças a Erik a Outgolfer 's solução .
-6 bytes graças ao mazzy .
Experimente online!
fonte
Wolfram Language (Mathematica) , 62 bytes
Experimente online!
Explicação
A lista de entrada é
a
. Ele não é distribuído e comparado com a lista classificada até que correspondam.fonte
Vermelho ,
877978 bytesExperimente online!
fonte
Perl 5
-pa
, 77 bytesExperimente online!
fonte
Pitão , 18 bytes
Experimente online!
-2 graças a @Erik the Outgolfer.
O script possui duas linhas: a primeira define uma função
y
, a segunda linha chamay
com oQ
argumento implícito (stdin avaliado).¹
fonte
PowerShell ,
62717066 bytes+9 bytes quando Casos de teste com um número par de elementos adicionados.
-1 byte com splatting.
-4 bytes: agrupe a expressão com
$i
,$j
para um novo escopo.Experimente online!
fonte
Japonês ,
131110 bytesLevando meu intérprete brilhante, novo
e muito em andamentopara um test drive.Experimente ou execute todos os casos de teste
fonte
Python 3, 40 bytes
Experimente online!
Preciso atualizar a página com mais frequência: perdi a edição do Erik the Outgolfer fazendo um truque semelhante =)
fonte