Vous et certains copains allez au bowling. Il y a un total de N quilleurs. Cependant, il n'y a que des chaises N -1 pour s'asseoir. La solution est simple: celui qui le fait actuellement n'a pas de chaise. Puis, à la fin de leur tour, ils s'assoient sur la chaise de la personne suivante.
Prenons un exemple. Dites que vous êtes nommé A , et vos amis à quatre nom figure B , C , D et E . Chaque joueur se déplace dans l'ordre alphabétique, vous devez donc y aller en premier. Puisqu'il y a 5 joueurs, il n'y a que 4 sièges. Vos amis sont assis dans les quatre sièges dans cet ordre:
CEBD
Vous partez, et vous obtenez une grève! C'est au tour de B ensuite, alors asseyez-vous sur sa chaise. Maintenant, cela ressemble à ceci:
CEAD
B s'en va. Gutterball! Puis il se trouve dans C place de, et C va au prochain tour.
PERLE
puis C s'assoit sur la chaise de D.
BEAC
et D est assis sur la chaise d' E
BDAC
et enfin, E est assis sur votre chaise.
BDEC
Vous remarquerez que maintenant le siège de tout le monde est (pseudo) mélangé. Vous devez savoir, après X tours, qui sera assis où?
Contribution
Votre programme doit prendre deux entrées de l'utilisateur, une chaîne et un nombre. Aucune invite n'est nécessaire. La chaîne sera composée de 1 à 51 caractères alphabétiques (BZ et az) sans répétition. Cela représente l'ordre que vos amis ont choisi de s'asseoir. Il n'y aura pas de A majuscule parce que c'est vous, et vous allez toujours en premier. Le nombre sera le nombre total de tours (pas de jeux) auxquels vous et vos amis jouez. Ce nombre sera positif et de taille raisonnable (moins de 1000).
Sortie
Votre programme doit imprimer l'ordre dans lequel vos amis sont assis après X tours, et dont c'est le tour. Ainsi, par exemple, si après X tours la commande était BEDGCAHF et que c'était le tour de Z , votre programme doit imprimer exactement ceci:
BEDGCAHF
It is Z's turn.
Voici quelques exemples d'entrées et de sorties.
input: E, 4
E
It is A's turn.
input: E, 5
A
It is E's turn.
input: Bb, 2
AB
It is b's turn.
input: dgOPZXKDQYioHflFhpqzUsSaeILwckVNEtGTCJBvnruRyWMmjxb, 999
JNuvFDqjwEPVnMSlOWXgAZyGKordIRBtkamziphcUYbxfCsTQeH
It is L's turn.
Règles
Tout le monde suit l'ordre alphabétique, les majuscules ayant priorité sur les minuscules.
Il s'agit de code-golf, donc les failles standard s'appliquent et les soumissions sont notées en octets .
{({}[()])({}<({}<(([])<{{}({}<>)<>([])}{}<>>)<>>)<>{({}[()]<({}<>)<>>)}{}<>>)}
Réponses:
Pyth, 37 octets
Démonstration en ligne: compilateur / exécuteur Pyth
L'algorithme est un peu basé sur la solution de @ isaacg. Comme lui, je commence par l'ordre initial des sièges et j'utilise à plusieurs reprises la fonctionnalité de
X
remplacement de pour remplacer le joueur suivant par le joueur actuel.Mais contrairement à son implémentation, qui remplace le caractère du joueur suivant par le joueur actuel dans l'ordre des places assises, je l'utilise de manière plus large. Je remplace chaque personnage du joueur actuel par le joueur suivant et chaque personnage du joueur suivant par le joueur actuel. Ceci est accompli en passant les deux joueurs comme deuxième argument et en omettant le troisième argument (
XG"ab")
au lieu deXG"a""b"
). Étant donné que le joueur actuel ne fait pas partie de la chaîne (il joue), le premier remplacement n'a aucun effet. Mais cela me permet de générer les deux joueurs en même temps, tandis que @isaacg doit les générer individuellement.Une autre nouvelle fonctionnalité folle que j'utilise est l'opérateur d'affectation. Jusqu'à récemment, il a
=N1
été traduit enN = 1
, qui a été exécuté avec Python. Mais de nos jours, il se compile pourassign('N',1)
. Cette fonction assigneN
avec 1 et renvoie la valeur (mais ne l'imprime pas). Cela permet d'enregistrer des résultats intermédiaires, qui se produisent par exemple lors d'une opération de réduction. Grâce à cela, j'ai pu stocker la paire de joueurs, qui a changé de position en dernier, et imprimer le deuxième joueur.Explication détaillée
la source
Pyth,
3938 octetsCeci est basé autour des applications répétées de la recherche et de remplacement fonctionnement,
X
. Le premier bit définit une fonction de recherchey
, qui trouve leb
e joueur dans l'ordre des joueurs. Ensuite, nous effectuons à plusieurs reprises des substitutions pour trouver l'ordre final des places assises et enfin imprimer à qui appartient le tour.De manière amusante, le code pour trouver l'ordre final des places assises est plus court (18 octets) que le code pour imprimer à qui il appartient (21 octets).
Le code prend la chaîne assise sur la première ligne de STDIN et le nombre de tours sur la seconde.
Manifestation.
Explication:
la source
%
, si vous insérez une seule chose. Même++
économiserait un octet, mais la meilleure façon (2 octets) est d'utiliserp
:pyQ"It is ""'s turn
++
le même nombre d'octets que%
, etp
enregistre seulement 1 octet.CJam,
494543 octetsJe pense que cela fonctionne. Il exécute simplement l'algorithme tel quel.
Essayez-le en ligne.
Explication
la source
Python 3, 110
Une version optimisée de la solution
replace
de Sp3000 utilisant . La listeS
parcourt les lettres dans l'ordre. Nous effectuons des remplacements répétés dans la chaîne donnée de chaque caractère deS
par le précédent.la source
Extrait 10 ,
5956 octetsExemple
Explication
La première entrée est la liste des joueurs, assignée à la variable
x
.La deuxième entrée est le nombre de tours avec lequel le programme obtient
ny
.Merci à Sp3000 pour l'idée d'utiliser "replace".
la source
Python 3, 128 octets
Prend deux lignes d'entrée via STDIN - ordre de placement initial puis nombre de tours.
Il s'agit essentiellement de la même idée de recherche et remplacement que ma solution CJam . La seule partie délicate est que nous restons
A
à l' arrière de l'ordre de bowling et faisons de notre indexi
l'index du prochain joueur, profitant ainsi de l'indexation par -1 et évitantIndexError
s.C'est quelques octets plus court en Python 2, mais je poste Python 3 pour comparaison avec la solution OP.
la source
int(input())
sur la ligne 4 devient l'entrée (-4) de sorte que s'annule. Retirez ensuite les parenthèses de l'impression et ajoutez un espace pour un total de 127. Suis-je en train de manquer quelque chose?exec
JavaScript (ES6) 116
116 octets en tant que programme avec E / S via une fenêtre contextuelle. 114 comme fonction testable.
Exécutez l'extrait de code dans Firefox pour tester.
la source
PowerShell, 168 octets
J'ai décidé que toutes mes réponses sur ce site seront dans PowerShell. Un jour, j'aurai une réponse qui pourra rivaliser ...
appeler la fonction comme ceci:
x Bb 2
la source
Cette réponse ne va pas gagner, mais je vais la jeter quand même.
Python 3, 167 octets
la source
Pépin , 54 octets
Pas très compétitif, mais au moins je peux montrer les chaînes mutables de Pip et la commande Swap. Prend l'ordre des sièges et le nombre de tours comme arguments de ligne de commande (qui sont respectivement attribués à
a
etb
).Explication:
Il aurait été de 49 si j'avais pris la peine d'implémenter
SS
(trier en tant que chaînes) en même temps que je l'ai faitSN
(trier en numérique) ... Eh bien, les dangers d'avoir un langage en développement.la source
Python 2 , 105 octets
Essayez-le en ligne!
Golf de:
la source
Perl 5 , 102 + 1 (-n) = 103 octets
Essayez-le en ligne!
Contribution
Ordre des places, suivi du nombre de tours sans espaces:
la source