Étant donné un tableau entier:
- Commencer à partir du premier numéro
- Saut en avant de n positions où n est la valeur de la position actuelle
- Supprimer la position actuelle, en faisant de la position suivante la position actuelle.
- Aller à l'étape 2 jusqu'à ce qu'il ne reste qu'un numéro
- Imprimer ce numéro
Règles
Le tableau est enveloppé (le premier chiffre après le dernier numéro du tableau est le premier).
Un zéro se supprime (évidemment).
Les nombres négatifs ne sont pas autorisés en entrée.
Cas de test
[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
Exemple pas à pas
[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
Exemple n ° 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
C'est code-golf , la réponse la plus courte en octets gagne!
code-golf
array-manipulation
flux de travail
la source
la source
Réponses:
Coque , 7 octets
Cela renvoie le résultat sous forme de liste de singleton
Essayez-le en ligne!
Explication
la source
Haskell ,
545048 octetsEssayez-le en ligne!
Explication:
f[x]=x
: Si la liste donnée est une liste singleton, retourne son élément.f(x:r)=f$ ...
: Sinon, appliquer récursivementf
à la liste suivante:cycle$x:r
),x+1
éléments supprimés (drop(x+1)$
),r
. (snd<$>zip r
est une alternative plus courte àtake(length r)
).Version précédente de 54 octets:
Essayez-le en ligne!
la source
Ruby , 37 octets
Modifie le tableau sur place, ce qui semble être une sortie acceptable. Essayez-le en ligne!
la source
MATL , 21 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
la source
Python 3 ,
5451 octetsLa sortie est une liste de singleton.
Essayez-le en ligne!
la source
CJam , 15 octets
Essayez-le en ligne!
Explication
Au lieu de garder la trace d'un pointeur, je déplace simplement le tableau de manière cyclique afin que l'élément actuel soit toujours au premier plan.
Une alternative amusante qui ne sauve malheureusement aucun octet:
la source
Brain-Flak , 88 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 55 octets
Essayez-le en ligne!
Sortie sous forme de liste de singleton, comme autorisé par défaut . Sauvegardé quelques octets grâce à Dennis , en me rappelant que la modification de l'argument de la fonction est autorisée.
Comment ça fonctionne
def f(a)
- Définit une fonction avec un paramètrea
.while a[1:]:
- Alorsa
que le premier élément supprimé est la vérité, lancez le bloc de code à suivre. Une liste avec un ou plusieurs éléments est truey, et les listes vides sont faussées en Python, elle s’arrêtera dès lors qu’ellea
atteint la longueur 1.l=a[0]%len(a)
- Prenez le premier élément et obtenez le reste de sa division par la longueur dea
. Attribuer le résultat àl
.a[:]=a[-~l:]+a[:l]
- Faites pivotera
lesl
éléments vers la gauche et supprimez le premier, tout en l’affectant à laa
place.Python 2 , 63 octets
Essayez-le en ligne!
Bien que plus long, cela semble beaucoup plus élégant. Merci également aux ovs pour avoir aidé à discuter.
la source
a,*b=input()
(python3) et économiser quelques octets? Cependant, je ne suis pas sûr de l'impact que cela pourrait avoir surl
la trancheGelée , 7 octets
Essayez-le en ligne!
Programme complet.
la source
ḷ/
sacrément intelligent.Gelée , 9 octets
Essayez-le en ligne!
-2 octets grâce à user202729
Explication
la source
Python 3 , 60 octets
Essayez-le en ligne!
-3 octets grâce aux ovs
la source
APL (Dyalog) ,
20 à18 octetsEssayez-le en ligne!
la source
Mathematica, 36 octets
utilise l'algorithme de Martin
-5 octets de Misha Lavrov && Martin Ender
Essayez-le en ligne!
la source
#//.{x_,y__}:>Rest@RotateLeft[{x,y},x]&
. (Cela s'arrête quand il n'y a qu'un seul élément parce que{a}
ne correspond plus au modèle{x_,y__}
.)y
, en appelant la liste complètel
, puis en utilisantl
plutôt que{x,y}
.#//.l:{x_,__}:>Rest@RotateLeft[l,x]&
?J ,
2117 octets-4 octets grâce à FrownyFrog
Essayez-le en ligne!
Original:
([:}.{.|.])^:(1<#)^:_
Comment ça fonctionne:
^:_
répéter jusqu'à ce que le résultat cesse de changer^:(1<#)
si la longueur de la liste est supérieure à 1{.|.]
faire pivoter la liste vers la gauche ses premiers temps d'élément[:}.
déposer le premier élément et boucher la fourchetteEssayez-le en ligne!
la source
JavaScript (ES6),
5460 octetsEnregistré 1 octet grâce à @Shaggy
Version fixe (+6 octets)
Modifie le tableau d'entrée , qui est réduit à un singleton.
Cas de test
Afficher l'extrait de code
Comment?
Nous appliquons récursivement l'algorithme décrit dans le challenge. Seule la condition d'arrêt
1/a
peut sembler un peu bizarre. Lors de l'application d'un opérateur arithmétique:NaN
et1/NaN
sont égalementNaN
(falsification).1/0 = +Infinity
ou à l'autre1/N = positive float
pour N> 0 (les deux vrais).la source
splice
modifie le tableau d'origine, vous pourriez le fairef=(a,p=0)=>1/a||f(a,p=p+a[p]%a.length,a.splice(p,1))
pour 52 octetsf=(a,p=0)=>1/a?a:f(a,p=(p%a.length+a[p%a.length])%a.length,a.splice(p,1))
est ok mais peut être optimisép+a[p]
pourraient être supprimées. Ce qui - bien sûr - n'est pas le cas. Merci d'avoir signalé cela!Julia 0.6 ,
4642 bytesEssayez-le en ligne!
Version récursive simple de Julia.
x[]
accède au premier élément de x.la source
Java 8, 79 octets
Ce lambda accepte un
Stack<Integer>
et retourne unint
ouInteger
.Essayez-le en ligne
Ungolfed
Remerciements
la source
i%=s
peut être enlevé sil.get(i)
changé parl.get(i%s)
Pyth , 9 octets
Essayez-le ici!
Le résultat est affiché sous forme de liste de singleton, comme autorisé par défaut .
Comment ça fonctionne
Remarque: Si vous ne voulez pas voir ces crochets, ajoutez simplement
h
oue
devant tout le code.la source
Rapide , 87 octets
Renvoie sous forme de liste de singleton en modifiant l'entrée . Essayez-le en ligne!
Explication
la source
Perl 6 ,
4645 octets(-1 octet merci à Brad Gilbert)
Essayez-le en ligne!
($_, { ... } ... 1)
génère une séquence de listes, commençant par la liste d'entrée$_
, chaque élément successif étant généré par l'expression d'accolade et se terminant lorsque la liste smart-matches1
-, a une longueur de 1. La fin[* - 1]
obtient le dernier élément, et le dernier[0]
prend le seul élément de cette liste de singleton.(|$_ xx *)
génère une copie plate, répliquée à l'infini de l'élément en cours. Cette liste est indexée avec la plage.[0] + (1 ..^ $_)
pour extraire la prochaine liste finie de la série.la source
[*-1][0]
peut être combiné pour[*-1;0]
sauvegarder un octet. Il1..$_-1
est également préférable d’écrire de1..^$_
nouveau pour sauvegarder un octet.[*-1;0]
, mais cela ne semble pas être équivalent en quelque sorte. La fonction retourne alors une liste plutôt qu'un nombre.1..^$_
optimisationPerl 5 ,
474341 + 2 (-ap
) = 43 octetsEssayez-le en ligne!
Prend les entrées sous forme de nombres séparés par des espaces.
la source
$x%=@F,splice@F,$x=($x+$F[$x])%@F,1while$#F;$_="@F"
Haskell , 56 octets
Essayez-le en ligne!
la source
Python 3 ,
5756 octetsEssayez-le en ligne!
la source
Java 8 , 325 octets
Golfé:
Ungolfed:
la source
static
mots - clés ici. Généralement, les solutions multi-méthodes sont implémentées en tant que membres non statiques d'une classe etmain
créent une instance à tester. De même, si vous le faites de cette manière, vous supportez Java 7 et pouvez soumettre simplement une solution "Java". Pour référence future, le format de saisie a tendance à être assez flexible ici. Vous pouvez par exemple choisir de prendre les entrées en tant queList
(ce qui est très utile pour résoudre ce problème).APL + WIN, 36 octets
Explication:
Invites pour la saisie à l'écran.
la source
Python 2, 61 octets
la source
JavaScript,
585659 octetsRenvoie le résultat en tant que seul élément restant dans le tableau d'entrée mis à jour sur place.
Deux octets enregistrés en utilisant une instruction séparée par des virgules au lieu d'une instruction block dans le corps de la boucle for! Trois octets perdus pour ignorer un élément supprimé à la fin du tableau (:
Moins joué au golf:
la source
[3, 5, 7, 9]
.[3,5,7,9]
. Valeur attendue 5Brain-Flak , 104 octets
H.PWiz a une réponse plus courte ici que j'ai aidé à faire, vous devriez vérifier.
Essayez-le en ligne!
Explication
la source
Propre , 78 octets
Utilise la même méthode que la réponse Haskell de Laikoni .
Essayez-le en ligne!
la source
R , 111
117126octetsMerci à @Giuseppe pour avoir joué 11 octets en passant à une boucle while, obtenu un autre 4 en supprimant la fonction et en lisant directement les entrées de l'utilisateur.
Je ne me sens pas très bien à propos de ce qu'il fallait pour y arriver - je suis sûr qu'il existe une solution plus élégante.
Essayez-le en ligne!
Code non-liquéfié
la source
f=
doit être incluswhile
boucle, je pense.while
bouclef=
partie de la fonction récursive. :(