Il y a un petit jeu d'échauffement d'improvisation où vous vous arrangez en cercle et envoyez des zips, zaps et zops autour en pointant une personne et en disant le mot suivant dans la séquence, puis ils font de même jusqu'à ce que vous soyez tous réchauffés ou peu importe.
Votre tâche consiste à créer un programme qui donne au mot suivant dans l'ordre donné un mot d'entrée. (Zip -> Zap -> Zop -> Zip) Comme il y a beaucoup de façons différentes de dire ces trois mots et flairs qui peuvent y être ajoutés, votre programme devrait imiter la duplication de casse et de lettre et porter des suffixes.
Pour élaborer, votre entrée sera un ou plusieurs Z
s, puis un ou plusieurs I
s, A
s ou O
s (tous la même lettre), puis un ou plusieurs P
s, (toutes les lettres jusqu'à ce point peuvent être en casse mixte) suivies de un suffixe arbitraire (qui peut être vide). Vous devez laisser les séries de Z
s et P
s, ainsi que le suffixe exactement tels qu'ils ont été reçus, puis changer le I
s en A
s, A
s en O
s ou O
s en I
s, en préservant la casse à chaque étape.
Exemples de cas de test
zip ==> zap
zAp ==> zOp
ZOP ==> ZIP
ZiiP ==> ZaaP
ZZaapp ==> ZZoopp
zzzzOoOPppP ==> zzzzIiIPppP
Zipperoni ==> Zapperoni
ZAPsky ==> ZOPsky
ZoPtOn ==> ZiPtOn
zipzip ==> zapzip
zapzopzip ==> zopzopzip
zoopzaap ==> ziipzaap
Règles et notes
- Vous pouvez utiliser n'importe quel encodage de caractères pratique pour l'entrée et la sortie, à condition qu'il prenne en charge toutes les lettres ASCII et qu'il ait été créé avant ce défi.
- Vous pouvez supposer que le mot d'entrée est une variante de Zip, Zap ou Zop. Toutes les autres entrées entraînent un comportement non défini.
- Les entrées valides correspondront parfaitement à l'expression régulière
Z+(I+|A+|O+)P+.*
(dans le cas mixte)
- Les entrées valides correspondront parfaitement à l'expression régulière
Bon golf!
z
et les premièresp
. Le suffixe peut contenir n'importe quoi.Réponses:
JavaScript (Node.js) ,
69 63 5754 octetsEssayez-le en ligne!
Comment?
Nous traitons la chaîne d'entrée caractère par caractère.s
Nous réutilisons comme indicateur: dès qu'une valeur numérique y est stockée, nous savons que nous ne devons rien mettre à jour d'autre.s
Pour identifier4
"p"
(112) et"P"
(80), nous utilisons le fait que leurs codes ASCII sont des multiples de et que les codes ASCII des autres lettres au début de la chaîne ( , et les voyelles) ne le sont pas."z"
"Z"
Pour activer une voyelle avec le code ASCII dans son homologue tout en laissant et sans changement, nous utilisons la fonction suivante:c n
z
Z
Commenté
la source
C (gcc) ,
81 ... 61 4846 octetsSauvegardé 2 octets grâce à @Grimy
Port de ma réponse JS . Sorties en modifiant la chaîne d'entrée.
Essayez-le en ligne!
Commenté
la source
*++s%4
à un moment donné mais j'ai négligé l'optimisation qui en résulte ...)Stax , 19 octets
Exécuter et déboguer
la source
Retina 0.8.2 , 21 octets
Essayez-le en ligne! Translittère les lettres jusqu'au premier inclus
p
, bien que lez
etp
ne soit pas dans la section de translittération ne soit donc pas affecté. Le premierO
est cité parce qu'il se développe normalement13567
et le secondo
est cité parce qu'il est lui aussi magique; dans la première partie de la translittération, elle se développe dans l'autre chaîne. La translittération qui en résulte est donc deIAOIiaoi
àAOIiaoi
puis la suppression des doublons des lettres sources se traduit parIAOiao
àAOIaoi
.la source
C, 43 octets
Essayez-le en ligne!
Basé sur la réponse d'Arnauld . J'ai fait une recherche par force brute pour trouver la formule la plus courte qui transforme a => o, o => i, i => a, z => z.
la source
Japt ,
2220 octets-2 octets grâce à Oliver
Essayez-le en ligne!
la source
R ,
11076 octets-36 octets grâce à Krill
Cette fonction prend une entrée d'une chaîne.
Essayez-le en ligne!
la source
s
- chaîne que nous allons traduire, puis en la remplaçant par une copie traduite: 76 octetsPerl 6 ,
4133 octetsEssayez-le en ligne!
Substitution simple insensible à la casse pour déplacer la section des voyelles.
la source
Python 3.8 (pré-version) ,
8178 octetsEssayez-le en ligne!
Python 2 , 98 octets
Essayez-le en ligne!
la source
Java (JDK) , 52 octets
Essayez-le en ligne!
la source
s->{for(int i=0;s[++i]%4>0;)s[i]^=s[i]%16*36%98%22;}
52 octets .Perl 5, 31 octets
TIO
la source
SNOBOL4 (CSNOBOL4) , 183 octets
Essayez-le en ligne!
la source
Python 2 , 84 octets
Essayez-le en ligne!
la source
C # (Visual C # Interactive Compiler) , 60 octets
Basé sur la réponse de Grimy's C.
Essayez-le en ligne!
la source
aoi
voyelles, au lieu de seulement celles avant le premierp
/P
. Une chose au golf cependant:("iao".IndexOf((char)(c|32))+1)%4
peut être-~"iao".IndexOf((char)(c|32))%4
C / C ++ (compilateur VC ++) 192 octets
c'est un essai plutôt naïf mais de toute façon
une version légèrement plus lisible est la suivante
la source
Rubis , 40 octets
Essayez-le en ligne!
la source
05AB1E (hérité) , 22 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Peut certainement être joué un peu plus.
Utilise la version héritée de 05AB1E au lieu de la réécriture Elixir, car
+
fusionne les champs dans des listes de même longueur, tandis que la nouvelle version aurait plutôt besoin d'une paire-zip-join‚øJ
.Explication:
la source
PHP, 30 octets
trop simple pour un TiO:
Exécuter en tant que tuyau avec
-nF
. Pour PHP 7.2, mettez les littéraux de chaîne entre guillemets.la source
oia
voyelles au lieu de seulement celles avant le premierp
/P
, n'est-ce pas?