Défi:
Entrée: liste d'entiers positifs distincts dans la plage .
Sortie: Un entier: le nombre de fois que la liste est réorganisée . Pour une liste, cela signifie que la liste est divisée en deux moitiés, et ces moitiés sont entrelacées (c'est-à-dire que le réarrangement rapide de la liste [1,2,3,4,5,6,7,8,9,10]
entraînerait une fois [1,6,2,7,3,8,4,9,5,10]
, donc pour ce défi, l'entrée en [1,6,2,7,3,8,4,9,5,10]
résulterait 1
).
Règles du défi:
- Vous pouvez supposer que la liste ne contiendra que des entiers positifs dans la plage (ou si vous choisissez d'avoir des listes d'entrée indexées 0).
- Vous pouvez supposer que toutes les listes d'entrées seront soit une liste mélangée à un riffle valide, soit une liste triée qui n'est pas mélangée (dans ce cas, la sortie l'est
0
). - Vous pouvez supposer que la liste d'entrées contiendra au moins trois valeurs.
Exemple étape par étape:
Contribution: [1,3,5,7,9,2,4,6,8]
Le décompresser devient une fois:, [1,5,9,4,8,3,7,2,6]
car chaque élément pair indexé 0 vient en premier [1, ,5, ,9, ,4, ,8]
, puis tous les éléments indexés 0 impairs après cela [ ,3, ,7, ,2, ,6, ]
.
La liste n'est pas encore commandée, nous continuons donc:
Dégrouper à nouveau la liste devient: devient à [1,9,8,7,6,5,4,3,2]
nouveau: [1,8,6,4,2,9,7,5,3]
Alors: [1,6,2,7,3,8,4,9,5]
Et enfin [1,2,3,4,5,6,7,8,9]
:, qui est une liste ordonnée, nous avons donc terminé de décompresser.
Nous avons décompressé l'original [1,3,5,7,9,2,4,6,8]
cinq fois pour y accéder [1,2,3,4,5,6,7,8,9]
, donc la sortie est 5
dans ce cas.
Règles générales:
- C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
Ne laissez pas les langues de golf de code vous décourager de publier des réponses avec des langues autres que le golf de code. Essayez de trouver une réponse aussi courte que possible pour «n'importe quel» langage de programmation. - Des règles standard s'appliquent à votre réponse avec des règles d'E / S par défaut , vous êtes donc autorisé à utiliser STDIN / STDOUT, des fonctions / méthodes avec les paramètres appropriés et des programmes complets de type retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien avec un test pour votre code (par exemple TIO ).
- De plus, l'ajout d'une explication à votre réponse est fortement recommandé.
Cas de test:
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
la source
[1,3,5,7,9,2,4,6,8]
est de longueur 9, mais j'en ajouterai quelques autres pour les longueurs 7 et 11 peut-être. EDIT: Ajout des cas de test[1,3,5,7,2,4,6] = 2
(longueur 7) et[1,6,11,5,10,4,9,3,8,2,7] = 6
(longueur 11). J'espère que ça t'as aidé.[1,6,2,7,3,8,4,9,5,10]
ou[6,1,7,2,8,3,9,4,10,5]
sont possibles. Dans mon défi, cela signifie que la carte du haut restera toujours la carte du haut, donc c'est en fait un peu un con-trick .. Je n'ai jamais vu quelqu'un utiliser uniquement des riffle-shuffles pour mélanger un jeu de cartes. Habituellement, ils utilisent également un autre type de mélange entre les deux. Quoi qu'il en soit, il est trop tard pour changer le défi maintenant, donc pour ce défi, la carte du haut restera toujours la carte du haut après un mélange rapide.Réponses:
Gelée , 8 octets
Essayez-le en ligne!
Comment?
la source
JavaScript (ES6), 44 octets
Version plus courte suggérée par @nwellnhof
Attend un jeu avec des cartes 1 indexées en entrée.
Essayez-le en ligne!
Etant donné un tablier[c0,…,cL−1] de longueur L , on définit:
Et on cherchen tel que cxn=2 .
JavaScript (ES6),
57 5250 octetsAttend un jeu avec des cartes indexées 0 en entrée.
Essayez-le en ligne!
Comment?
Étant donné que JS ne prend pas en charge nativement l'extraction des tranches de tableau avec un pas personnalisé, simuler l'intégralité du riffle-shuffle serait probablement assez coûteux (mais pour être honnête, je n'ai même pas essayé). Cependant, la solution peut également être trouvée en regardant simplement la 2ème carte et le nombre total de cartes dans le jeu.
Etant donné un paquet de longueurL , ce code recherche n tel que:
oùc2 est la deuxième carte et k est défini comme:
la source
Python 2 , 39 octets
Essayez-le en ligne!
-4 merci à Jonathan Allan .
la source
f=lambda x:2!=x[1]and-~f(x[::2]+x[1::2])
!=
peut l'être-
. ;-)x[1]>2
je suppose)R ,
585545 octetsEssayez-le en ligne!
Simule le processus de tri. L'entrée est indexée sur 1, renvoie
FALSE
0.la source
Perl 6 ,
3432 octets-2 octets grâce à Jo King
Essayez-le en ligne!
Similaire à l'approche d' Arnauld . L'index de la deuxième carte après n shuffles est
2**n % k
avec k défini comme dans la réponse d'Arnauld.la source
APL (Dyalog Unicode) ,
35262322 octets SBCSEssayez-le en ligne!
Merci à Adám pour l'aide, Erik l'Outgolfer pour -3 et ngn pour -1.
Le lien TIO contient deux cas de test.
Explication:
¹
la source
∧/2≤/⍵
->⍵≡⍳≢⍵
Perl 6 ,
36 3432 octets-2 octets grâce à nwellnhof
Essayez-le en ligne!
Inverser le shuffle shuffles en triant par l'index modulo 2 jusqu'à ce que la liste soit triée, puis retourne la longueur de la séquence.
C'est drôle, je n'essaie généralement pas l'approche récursive pour Perl 6, mais cette fois-ci, elle s'est avérée plus courte que l'original.
Explication:
la source
05AB1E (hérité) , 9 octets
Essayez-le en ligne!
Explication
la source
Å≠
qui a inspiré ce défi. :)Java (JDK) , 59 octets
Essayez-le en ligne!
Fonctionne de manière fiable uniquement pour les baies de taille inférieure à 31 ou les solutions avec moins de 31 itérations. Pour une solution plus générale, consultez la solution suivante avec 63 octets:
Essayez-le en ligne!
Explication
Dans un fusil, la position suivante est la précédente fois deux modules soit de longueur si elle est impaire ou de longueur - 1 si elle est paire.
Je suis donc en train d'itérer sur tous les indices en utilisant cette formule jusqu'à ce que je trouve la valeur 2 dans le tableau.
Crédits
la source
x.clone()
au lieu deA.copyOf(x,l)
.J ,
2826 octets-2 octets grâce à Jonah!
Essayez-le en ligne!
Inspiré de la solution APL de Ven.
Explication:
K (ngn / k) , 25 octets
Merci à ngn pour les conseils et pour son interprète K!
Essayez-le en ligne!
la source
1#@}.(\:2|#\)^:(2<1{])^:a:
pour 26 octetsAPL (NARS), caractères 49, octets 98
pourquoi utiliser dans la boucle la plus profonde, un algo qui devrait être nlog (n), quand on peut utiliser un n linéaire? juste pour quelques octets de plus? [⍵≡⍵ [⍋⍵] O (nlog n) et la confrontation de chaque élément pour voir sont en ordre en utilisant le test ∧ / ¯1 ↓ ⍵≤1⌽⍵ O (n)]:
la source
Ruby , 42 octets
Essayez-le en ligne!
Comment:
Recherchez le numéro 2 à l'intérieur du tableau: s'il est en deuxième position, le jeu n'a pas été mélangé, sinon vérifiez les positions où les mélanges successifs le placeraient.
la source
R ,
7072 octetsEssayez-le en ligne!
Gère maintenant le cas de shuffle zéro.
la source
C (GCC)
6463 octets-1 octet de nwellnhof
Il s'agit d'une réponse considérablement plus courte basée sur les réponses d'Arnauld et d'Olivier Grégoire. Je vais laisser mon ancienne solution ci-dessous car elle résout le problème un peu plus général des decks avec des cartes qui ne sont pas contiguës.
Essayez-le en ligne
C (GCC) 162 octets
Essayez-le en ligne
la source
R, 85 octets
Essayez-le en ligne.
Explication
Méthode stupide (force brute), beaucoup moins élégante que de suivre la carte # 2.
Au lieu de décompresser l'entrée,
s
nous commençons par un vecteur triéu
que nous mélangeons progressivement jusqu'à ce qu'il soit identique às
. Cela donne des avertissements (mais les nombres aléatoires sont toujours corrects) pour les longueurs d'entrée impaires en raison du pliage d'un vecteur de longueur impaire dans une matrice à 2 colonnes; dans ce cas, en R, le point de données manquant est comblé par recyclage du premier élément d'entrée.La boucle ne se terminera jamais si nous fournissons un vecteur qui ne peut pas être décompressé.
Addendum: vous économisez un octet si vous ne le mélangez pas à la place. Contrairement à la réponse ci-dessus, il n'est pas nécessaire de transposer avec
t()
, cependant, l'ordrebyrow=TRUE
est la raison pour laquelleT
apparaît dansmatrix()
.R , 84 octets
Essayez-le en ligne!
la source
PowerShell ,
116114108 8478 octets-24 octets grâce à Erik le Outgolfer de solution .
-6 octets grâce à mazzy .
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 62 octets
Essayez-le en ligne!
Explication
La liste d'entrée est
a
. Il est non trié et comparé à la liste triée jusqu'à ce qu'ils correspondent.la source
Rouge ,
877978 octetsEssayez-le en ligne!
la source
Perl 5
-pa
, 77 octetsEssayez-le en ligne!
la source
Pyth , 18 octets
Essayez-le en ligne!
-2 merci à @Erik l'Outgolfer.
Le script a deux lignes: la première définit une fonction
y
, la deuxième ligne appelley
avec l'Q
argument implicite (évalué stdin).¹
la source
PowerShell ,
62717066 octets+9 octets lorsque des cas de test avec un nombre pair d'éléments ajoutés.
-1 octet avec éclaboussures.
-4 octets: encapsule l'expression avec
$i
,$j
dans une nouvelle étendue.Essayez-le en ligne!
la source
Japt ,
131110 octetsEn prenant mon brillant, nouveau
, très -Travailler en coursinterprète pour un essai routier.Essayez-le ou lancez tous les cas de test
la source
Python 3, 40 octets
Essayez-le en ligne!
J'ai besoin de rafraîchir la page plus fréquemment: j'ai raté la modification d'Erik l'Outgolfer en faisant une astuce similaire =)
la source