Inspiré au hasard par les nombres augmentent tandis que les lettres diminuent
Étant donné une liste de lettres mixtes et des nombres entiers (par exemple ['a', 2, 3, 'b']
) augmenter les lettres d'une position dans l'alphabet (emballage à z
la a
) et diminuer le nombre de 1. Pour l'exemple ci - dessus, la sortie devrait être ['b', 1, 2, 'c']
.
- L'entrée peut être une liste de type mixte, une chaîne délimitée, une liste de chaînes, etc.
z
retourne àa
, mais1
va à0
, et0
va à-1
, etc.- L'entrée ne sera que des
[a-z]
nombres entiers. Vous pouvez choisir des majuscules[A-Z]
en entrée si cela vous est plus facile. - L'entrée est garantie non vide.
- L'entrée peut contenir uniquement des chiffres ou uniquement des lettres.
Exemples:
Input
Output
['a', 2, 3, 'b']
['b', 1, 2, 'c']
['a', 'b', 'z']
['b', 'c', 'a']
[-1, 0, 257, 'x']
[-2, -1, 256, 'y']
[0, 3, 1, 20382876]
[-1, 2, 0, 20382875]
Règles et clarifications
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Vous pouvez imprimer le résultat dans STDOUT ou le renvoyer en tant que résultat de fonction.
- La sortie ne doit pas nécessairement être au même format que l'entrée (par exemple, vous pouvez prendre l'entrée sous forme de chaîne et la sortie sous forme de liste).
- Un programme complet ou une fonction sont acceptables.
- Le cas échéant, vous pouvez supposer que les entiers d'entrée / sortie correspondent à la
int
plage native de votre langue . - Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
int
plage native de votre langue , de sorte que vous n'obtiendrez jamaisInteger.MinValue
en entrée.Réponses:
05AB1E , 5 octets
Essayez-le en ligne!
la source
Python 3 , 59 octets
Essayez-le en ligne!
-1 octet grâce à Erik l'Outgolfer
la source
-96
avec+8
enregistre un octet.''!=i*0
est de trois octets plus court que monstr(i)>'9'
bon travailPerl 5 (-p), 17 octets
Essayez-le en ligne!
Bonus de 19 octets:
TIO . Celui-ci propose quelques astuces intéressantes, mais ne parvient pas à battre la solution simple ci-dessus.
la source
Rubis , 34 octets
Pour chaque élément, essayez de renvoyer l'élément -1. Les chaînes ne peuvent pas faire cela, elles font donc une erreur et sont récupérées par la
rescue
clause, qui l'invitesucc
à la place à renvoyer la lettre suivante de l'alphabet.succ
"survole"z
et revientaa
cependant, donc nous prenons simplement le premier caractère de la chaîne retournée.Essayez-le en ligne!
la source
JavaScript (Node.js) , 55 octets
Essayez-le en ligne!
la source
Python 3 ,
182130118 octets-51 octets grâce à @AdmBorkBork et @Black Owl Kai, -1 octet grâce à @Black Owl Kai, -12 octets en remplaçant
.append()
par+=[]
et en remplaçantn+1
par-~n
Essayez-le en ligne!
Je l'ai fait pendant que la question était dans le bac à sable, mais je ne l'ai pas vue jusqu'à maintenant. : P
Non golfé
Explication
Pour chaque élément de la liste entrée
x
, il essaie de soustraire 1 et de l'ajouter à la liste éventuellement renvoyée. Si une erreur se produit (car l'élément est une chaîne), l'index de la lettre dans l'alphabet est ajouté par 1 et ce mod 26 est pris. Le mod 26 enveloppe un index de 26 à 0.la source
(x+27)%26
a le même résultat que(x+1)%26
str(d)==d
pour vérifier s'il s'agit d'une chaîne ou non, au lieu de compter sur try / except. Ensuite, puisque vous n'avez plus besoin de try / except, vous pouvez tout faire dans une liste de compréhension! Je vous laisse y réfléchir un peu plus mais vous pouvez facilement obtenir moins de 100 octets de cette façon;)J , 30 octets
Essayez-le en ligne!
la source
Gema , 55 personnages
Solution sale. S'enrouler autour de l'incrément de lettre est douloureusement long, donc nous avons une règle distincte.
L'entrée peut être n'importe quoi, utilisez simplement des séparateurs. (Vous pouvez même omettre les séparateurs entre les chiffres et les lettres. Avec le prix d'un caractère pour passer à
<L1>
vous pouvez également omettre les séparateurs entre les lettres.)Exemple d'exécution:
Essayez-le en ligne!
Gema, 66 caractères
Solution propre. Moitié relativement efficace, puis moitié pure douleur.
Exemple d'exécution:
Essayez-le en ligne!
la source
R , 77
85octetsMerci @Giuseppe pour une coqueluche de 8 octets
Essayez-le en ligne!
Prend l'entrée comme une liste. Après un gros changement de @Giuseppe, cela permet d'
Map
appliquer une fonction à la liste. Il utilisematch
pour tester un personnage. Pendant le test, la liste de lettres étendue et l'index sont enregistrés pour le retour.la source
character
s ne sont pas finis parce qu'ils sont jetésnumeric
paris.finite
et le sont doncNA
?is.finite
, j'ai pensé que j'allais m'y attaquer moiMap
etmatch
. C'est bon d'apprendre quelque chose chaque jour :)MathGolf , 14 octets
Essayez-le en ligne!
Prend la lettre en minuscule.
Explication
la source
Rétine ,
525048584137 octets-4 octets grâce à @FryAmTheEggman (et pour avoir mentionné que j'avais un bug:
1 → -1
au lieu de1 → 0
).+10 octets pour corriger un bug avec
1
et0
.. Un tel cas de bord ennuyeux qui m'a foutu pendant un bon moment .. Mais il a joué à 41 octets maintenant. (Maintenant , je suis curieux de savoir les <40 octets versions @Neil et @CowsQuack mentionnés dans les commentaires .. Merci @Neil pour la pointe de la conversion du0
à-
, et de traiter les valeurs négatives en premier. La conversion de ceux qui reviennent droit unaire à l' entier beaucoup aidé.)Apparemment, je n'ai pas besoin des limites à ce stade, donc -4 octets ..>.>
Les E / S sont séparées par des virgules.
Essayez-le en ligne.
Explication:
Translittérer tout
"zabcdefghijklmnopqrstuvwxy(z)"
vers"abcdefghijklmnopqrstuvwxyz"
:Remplacez tous les autonomes
0
par un-
:Convertissez tous les nombres en unaire, en les remplaçant par ce nombre de soulignements:
Pour toutes les valeurs négatives, avec zéro ou plusieurs lignes unaires derrière lui: conservez le signe moins et obtenez la longueur totale de cette correspondance (y compris le
-
), reconvertie en entier:En ce qui concerne les entiers positifs: faites correspondre un entier positif en faisant correspondre une seule ligne unaire, suivie de zéro ou plusieurs lignes unaires. Et puis remplacez-les par la longueur de ce groupe de capture pour supprimer cette seule ligne unaire et les reconvertir simultanément en entiers:
la source
SNOBOL4 (CSNOBOL4) , 103 octets
Essayez-le en ligne!
la source
PHP , 50 octets
Essayez-le en ligne!
Les tests
Génère des lettres / entiers séparés par
_
un séparateur de fin.En PHP, vous pouvez incrémenter des lettres directement, alors j'en ai profité. Mais le
z
est incrémenté enaa
, pour le convertir ena
, le(++$a)[0]
est utilisé qui ne sort que le premier caractère de la valeur incrémentée.la source
Japt
-m
,1312 octets-1 octet grâce à Shaggy
Essayez-le
Explication:
Remarque : se
;
transformeC
en alphabet minusculela source
z
àa
.o
-> vous¤
fera économiser un octet ici.+2
et puis-1
grâce à Shaggy ce serait plus précis! : D+2
était grâce à Oliver: PHaskell,
5251 octetsComme Haskell n'autorise pas les listes de types mixtes, les lettres et les chiffres sont pris et renvoyés sous forme de chaînes.
Essayez-le en ligne!
Vérifiez chaque élément de la liste: si la chaîne est
"z"
, return"a"
; si le premier caractère de la chaîne est>'`'
(c'est-à-dire une lettre, pas un chiffre), retournez le successeur du ou des caractères dans la chaîne; sinon, il doit être un nombre, alors convertissez-le en entier, soustrayez 1 et transformez-le à nouveau en chaîne.Edit: -1 octet grâce à @cole.
la source
Gelée , 13 octets
Essayez-le en ligne!
Solution intelligente de Jonathan Allan .
Remarque: Ce n'est pas un programme complet, le pied de page sur TIO permet de saisir à l'aide d'un argument de ligne de commande pour tester la fonction.
la source
®i‘ị®µ’e?€Øa©
est un correctif pour zéro, je crois.Ọ
cela ne fonctionne pas exactement dans ce cas. Ironique, puisque j'ai évité d'utiliser~
comme condition pour tenir compte des-1
s dans l'entrée ... Aussi, comment vais-je raccourcir®i‘ị®
...C ++ 17 (gcc) , 120 octets
Voici
f
la fonction requise;l
est à la fois le paramètre d'entrée et de sortie, et il devrait être un conteneur d'objets compatibles avecstd::variant<char, int>
ou vice versa.Essayez-le en ligne!
la source
dzaima / APL,
2120 octetsEssayez-le en ligne!
-1 grâce à ngn.
la source
(⎕l⍳⍵)⊇1⌽⎕l
->⎕l(⍳⊇1⌽⊣)⍵
K (oK) , 27 octets
Essayez-le en ligne!
-8 merci à ngn et dzaima :)
la source
{$[-9=@x;x-1;90=x;"A";`c$1+x]}'
soulignant le cas spécial et utilisant des majuscules (et le'
doit être compté comme l'entrée doit être une liste)'
devrait être compté. voici une expression légèrement plus longue qui n'a pas besoin'
et prend également en charge "z" -> "a":{`c`i[t]$(-26*x~'"z")+x+1-2*t:x~'0+x}
@'
:{(`c$97+26!-96+;-1+)[x~'0+x]@'x}
. ici-96
(qui est +1 moins le code ascii de "a") peut être remplacé par8
comme il a été pris mod 26.{(`c$65+26!14+;-1+)[x=_x]@'x}
-9=@x
->x=_x
Enchantements runiques , 36 octets
Essayez-le en ligne!
Le processus général consiste à lire l'entrée, à ajouter un 0 (coercition en chaîne), à reconvertir en nombre (le caractère unique renvoie toujours -1), à comparer avec l'entrée. S'il s'agit du même, il doit s'agir d'une valeur numérique, soustrayez 1 et imprimez. Sinon, il doit s'agir d'un caractère, soustrayez 1, comparez avec
{
. Si moins que, imprimez, sinon remplacez-le para
et imprimez.Répétez jusqu'à ce que le programme effectue un sous-dépassement de pile.
La sortie est séparée par
;
afin d' économiser 1 octet (et en a un de fin). L'entrée est séparée par des espaces.la source
Stax , 17 octets
Exécuter et déboguer
On dirait qu'il devrait être possible de faire plus court, mais je ne résiste pas à l'opportunité d'utiliser une nouvelle fonction stax de la dernière version.
Traiter l'entrée entière comme une chaîne:
eval(match) - 1
. Il s'agit de la nouvelle fonctionnalité, car le remplacement de bloc d'expression régulière n'est pas une chaîne, mais un entier.la source
Python 3, 66 octets
Éditer:
Je n'ai pas vu la solution de Jitse jusqu'à présent. L'astuce si ''! = I * 0 est génial!
la source
C #, 148 octets
Lien Repl.it
Non golfé:
la source
Fusain , 16 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Prend des entrées sur STDIN, chaque ligne étant soit une seule lettre minuscule ou un entier, et sort sur des lignes distinctes sur STDOUT. Explication:
Saisie répétée de STDIN jusqu'à ce qu'une ligne vide soit atteinte.
Faites sortir cette expression sur sa propre ligne.
S'agit-il d'une sous-chaîne de l'alphabet minuscule prédéfini?
Si c'est le cas, imprimez la lettre suivante indexée cycliquement.
Sinon, décrémentez la valeur et convertissez-la en chaîne pour une impression implicite.
la source
Zsh , 47 octets
Essayez-le en ligne!
la source
C (gcc) ,
9386 octetsEssayez-le en ligne!
L'entrée est un
NULL
tableau'\0'
terminé de chaînes terminées, par exemple{"a", "b", "c", "17", NULL}
.-7 octets grâce à @ceilingcat
la source
Perl 6 , 31 octets
Essayez-le en ligne!
Anonymous Quel que soit le lambda qui mappe chaque élément à la liste et tente d'en soustraire un, sinon l'incrémenter et prendre le premier caractère dans le cas qui
z
revient àaa
.la source
T-SQL 2012, 61 octets
Des majuscules sont nécessaires en entrée.
Utilisation d'une variable de table comme entrée.
Essayez-le en ligne
la source
SimpleTemplate, 80 octets
Ceci a été écrit dans une langue que j'ai créée.
En raison des limitations du compilateur, je ne peux plus le réduire.
Et maintenant, non golfé:
Et l'explication:
{@each argv as value}
- boucle toutes les valeurs dansargv
. (argv
contient tous les arguments passés).Si le
as <var>
n'est pas présent, la valeur par défaut_
variable est supposée.{@if value is matches "@\d+@"}
- vérifie quivalue
correspond à l'expression régulière"@\d+@"
.{@inc by -1 value}
- incrémente la valeur de -1 (fondamentalement, une décrémentation).{@echo value, "\n"}
et{@echol_}
-echol
sort les valeurs passées et ajoute une ligne à la fin.{@else}
- explicite{@inc by 1 value}
- incrémente la valeur de 1. Si leby <value>
est manquant, il est supposé être 1.{@echo value.0, "\n"}
et{@echol_.0}
-echol
sort les valeurs passées et ajoute une ligne à la fin.Cela est nécessaire en raison des règles de défi:
z wraps to a
.Quand un
@inc
est utilisé sur une chaîne, il incrémente les caractères et, une fois qu'il frappez
, il passe àaa
.La sortie du premier caractère répond au défi, au prix de 7 octets.
{@/}
- ferme ce qui{@else}
précède (facultatif).{@/}
- ferme ce qui{@each}
précède (facultatif).Vous pouvez essayer ceci sur: http://sandbox.onlinephpfunctions.com/code/7533641a0aa1fc8bf4699a9c758690de186b052f
Chaque argument passé à
render()
sera une nouvelle valeur prise en compte.la source
Perl, 64 octets
la source