introduction
Dans ce défi, votre tâche consiste à simuler un certain type de jeu d'élimination. Dans le jeu, les participants se tiennent en cercle et tout le monde tient un entier. À chaque manche du jeu, chaque participant pointe du doigt la personne n
qui s'éloigne, si tel n
est le numéro qu'elle détient. Si n
est positif, ils comptent à leur droite, s'ils n
sont négatifs, ils comptent à leur gauche et s'ils n
sont nuls, ils se désignent eux-mêmes. Tout participant qui a quelqu'un pointé sur lui est éliminé et quitte le cercle; ceci termine le tour. Les tours se poursuivent jusqu'à ce qu'il ne reste plus de participants.
Contribution
Votre entrée est une liste non vide d'entiers, dans n'importe quel format raisonnable. Il représente les numéros que détiennent les participants au jeu.
Production
Votre sortie est le nombre de tours qu'il faut jusqu'à la fin du jeu.
Exemple
Considérez la liste d'entrée [3,1,-2,0,8]
. Au premier tour, les événements suivants se produisent:
- La personne qui tient
3
pointe droit sur la personne qui tient0
. - La personne qui tient
1
pointe droit sur la personne qui tient-2
. - La personne qui tient
-2
pointe vers la personne qui tient3
. - La personne qui se
0
montre du doigt. - La personne qui tient
8
pointe droit sur la personne qui tient-2
(la liste représente un cercle, donc elle s'enroule aux extrémités).
Cela signifie que 0
, -2
et 3
sont éliminés, donc le deuxième tour se fait avec la liste [1,8]
. Ici, les 1
points sur 8
et les 8
points sur eux-mêmes 8
sont éliminés. Le troisième tour se fait avec la liste [1]
, où 1
il se pointe simplement et est éliminé. Il a fallu trois tours pour éliminer tous les participants, donc la sortie correcte est 3
.
Règles et notation
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de test
[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6
n
est-ce le numéro que la personne détient?Réponses:
Pyth, 15 octets
Suite de tests grâce à kirby
Utilise le même mécanisme d'itération que @orlp, mais détecte le nombre d'itérations en utilisant
f
la fonction "Répéter jusqu'à la fausse" pour détecter[]
une fois que nous avons terminé.la source
Matlab,
9177 octetsAncienne version:
C'est un défi où matlab brille, le cœur de ce code est la suppression des entrées du tableau:
a(mod((1:l)+a-1,l)+1)=[]
ce qui est assez élégant je pense.la source
CJam, 21 octets
Suite de tests.
Prend en entrée une liste de style CJam, mais la suite de tests prend en charge la conversion du format dans le défi.
Explication
la source
ee
c'est presque exactement ce que je cherchais hier pour une autre question.C #,
251219211197193 octetsLe langage non ésotérique le plus impassible frappe de nouveau.
Ce programme attend la séquence d'entrée comme arguments de ligne de commande. Par exemple, pour entrer la liste
[5,5,5,6,6,6]
, appelez-la avec des arguments de ligne de commande5 5 5 6 6 6
.Merci à Martin Büttner pour quelques conseils.
Je l'ai joué à 197 en réalisant que je peux réutiliser le
args
tableau même s'il s'agit d'un tableau de chaînes. J'ai seulement besoin de les analyser en un entier à un seul endroit.Golfé à 193 en réalisant que
.Where(...==x).Any()
c'est plus court que.Select(...).Contains(x)
.Non golfé
la source
Pyth, 21 octets
Démo en direct avec cas de test.
la source
R, 105 octets
code
non golfé
la source
Pyth, 17 octets
Par coïncidence, très similaire à la réponse de kirbyfan.
la source
Mathematica, 71 octets
la source
(i=0;#//.l:{__}:>l~Delete~Mod[++i;Plus~MapIndexed~l,Length@l,1];i)&
Plus~MapIndexed~#
vraiment intelligent, mais je me demande s'il n'y a pas un moyen plus court d'utiliserl+Range@Length@l
.STATA, 146 octets
Utilise la version payante de STATA. Suppose que l'entrée se trouve dans un fichier séparé par des sauts de ligne appelé
a.
. Limité aux situations où pas plus de 1023 tours sont nécessaires en raison d'un nombre maximum de variables autorisé (peut être fixé au coût de 10 octets). Il lit les données et exécute une boucle jusqu'à ce qu'il n'y ait plus d'observations. Dans chaque itération, créez une variable avec la valeur de l'index vers lequel elle pointe. Pour chaque observation, si une autre observation la pointe, définissez un indicateur pour supprimer la variable. Déposez ensuite toutes les observations avec cet indicateur et incrémentez le compteur. Après la boucle, imprimez le compteur.la source
Rubis,
7874 octetsla source
awk, 66 octets
Utilise simplement
mod length array
pour le garder à l'intérieur du tableau. Dans l'entrée, les nombres doivent être séparés par des espaces.Exemple d'utilisation
Voici tous les exemples d'entrée dans le format approprié
la source
Python 2, 122 octets
la source