Défi:
Avec une chaîne contenant uniquement des lettres majuscules et / ou minuscules (celle que vous préférez), mettez-la tape
horizontalement pour la corriger. Nous faisons cela en vérifiant la différence de deux lettres adjacentes dans l'alphabet ( en ignorant wrap-around et seulement aller de l' avant), et remplissant l'espace avec autant TAPE
/ tape
que nous aurions besoin.
Exemple:
Entrée: abcmnnnopstzra
sortie:abcTAPETAPETmnnnopTAstTAPETzra
Pourquoi?
- Entre
c
etm
devrait êtredefghijkl
(longueur 9), nous remplissons donc ceci avecTAPETAPET
; - Entre
p
ets
devrait êtreqr
(longueur 2), nous remplissons donc ceci avecTA
; - Entre
t
etz
devrait êtreuvwxy
(longueur 5), nous remplissons donc ceci avecTAPET
.
Règles du challenge:
- La différence ne s'applique que vers l'avant, donc pas de bande entre
zra
. - Il est possible d’avoir plusieurs lettres identiques identiques
nnn
. - Vous êtes autorisé à saisir les données dans n'importe quel format raisonnable. Peut être une chaîne unique, un tableau / une chaîne, un tableau / une liste, etc. La sortie offre la même flexibilité.
- Vous êtes autorisé à utiliser des minuscules et / ou des majuscules comme vous le souhaitez. Ceci s’applique à la fois à l’entrée, à la sortie et à
TAPE
. - Il est possible que cela ne
TAPE
soit pas nécessaire, auquel cas l'entrée reste inchangée.
Règles générales:
- C'est du code-golf , donc la réponse la plus courte en octets est gagnante.
Ne laissez pas les langues de code-golf vous décourager de poster des réponses avec des langues autres que le code de golf. Essayez de trouver une réponse aussi courte que possible à n'importe quel langage de programmation. - Les règles standard s'appliquent à votre réponse, vous êtes donc autorisé à utiliser STDIN / STDOUT, fonctions / méthode avec les paramètres appropriés et des programmes complets de type de retour. Ton appel.
- Les failles par défaut sont interdites.
- Si possible, veuillez ajouter un lien vers un test pour votre code.
- Ajoutez également une explication si nécessaire.
Cas de test:
Input: "abcmnnnopstzra"
Output: "abcTAPETAPETmnnnopTAstTAPETzra"
Input: "aza"
Output: "aTAPETAPETAPETAPETAPETAPEza"
Input: "ghijk"
Output: "ghijk"
Input: "aabbddeeffiiacek"
Output: "aabbTddeeffTAiiaTcTeTAPETk"
Input: "zyxxccba"
Output: "zyxxccba"
Input: "abccxxyz"
Output: "abccTAPETAPETAPETAPETAPExxyz"
Input: "abtapegh"
Output: "abTAPETAPETAPETAPETtaTAPETAPETAPETApeTgh"
Input: "tape"
Output: "taTAPETAPETAPETApe"
ab[TAPETAPETAPETAPET]TA[TAPETAPETAPETA]PE[T]gh
(ajouté le[]
pour le rendre plus lisible).Réponses:
05AB1E ,
1412 octetsEssayez-le en ligne!
Explication
la source
-d
pour obtenir le dump opération par opération de pile brute de ce qui se passe au lieu d'une explication, mais j'essaie de les publier aussi, ce n'est pas simple, en particulier sur certains à moi LOL.Gelée , 13 octets
Essayez-le en ligne!
Explication
la source
abctapetapetmnnnopapstetapezra
au lieu deabctapetapetmnnnoptasttapetzra
.Haskell , 58 octets
Essayez-le en ligne! La fonction
f
revient sur la chaîne et examine les caractères consécutifsx
ety
.cycle"TAPE"
donne la chaîne infinie"TAPETAPETAPE..."
.[x..y]
obtient la plage de caractères dex
ày
inclus, nous devons donc soustraire deux de la longueur. Au cas où celax
se produirait plus tard dans l’alphabet, lesy
deux caractères étant identiques, nous obtenons un nombre négatif après soustraction, mais heureusement, nous les acceptons également et nous ne prenonstake
rien.la source
Perl 5 ,
-F
46 octetsEssayez-le en ligne!
la source
P,E,T,A
au lieu deT,A,P,E
, mais je remarque maintenant que vous avez utilisé((P,E,T,A)x7)[2..-$^H+($^H=ord)
au lieu de((T,A,P,E)x7)[0..-$^H+($^H=ord)-2
sauvegarder deux octets. Bonne réponse!^H
(\x08
)!do$0
), mais ce n’est que 2 octets ici, donc je ne me suis pas ennuyé.Python 2 ,
968780 octetsEssayez-le en ligne!
la source
Haskell , 64 octets
Gère les chaînes de lettres majuscules ou minuscules, mais pas les deux.
Essayez-le en ligne!
la source
C, 84 octets
Essayez-le en ligne!
C (exécuté à l'invite de commande Windows), 81 octets
Sortie:
la source
Python 3 , 98 octets
Essayez-le en ligne!
-1 octet grâce à Asone Tuhid
la source
Scala , 66 octets
Essayez-le en ligne!
Explication
la source
PHP , 85 octets
Essayez-le en ligne!
Explication
la source
Javascript,
131127 octets4 octets économisés grâce à Rick Hitchcock.
Déroulé
Mon problème ici est que Javascript n’a aucun moyen propre d’obtenir la distance entre les personnages a et b.
la source
charCodeAt
une variable:z=(a=>[...a].reduce((x,y)=>x+[...Array((f=y[c='charCodeAt']()-x.slice(-1)[c]())>1?f-1:0)].reduce((e,r,t)=>e+"TAPE"[t%4],"")+y))
Python 2/3 ,
7069 octetsEssayez-le en ligne!
la source
Charbon de bois , 20 octets
Essayez-le en ligne! Explication:
la source
Pip , 29 octets
Prend l'entrée en tant qu'argument de ligne de commande (minuscule ou majuscule, peu importe). Essayez-le en ligne!
Explication
la source
JavaScript (ES6),
8078 octetsLa distance entre deux caractères peut être déterminée en convertissant leur concaténation en base 36, soustraction 370, module 37.
Par exemple,
(parseInt('cy',36)-370)%37 == 22
.Nous pouvons ensuite utiliser
padEnd
pour combler les lacunes et la récursion pour gérer la boucle.Cas de test:
Afficher l'extrait de code
la source
K4 , 48 octets
Solution:
Exemples:
Explication:
Solution assez simple, mais un nombre d'octets élevé ... Recherchez les deltas, prenez-les dans la chaîne
"TAPE"
, joignez-les à la chaîne d'origine coupée où les deltas sont> 1.la source
Excel VBA, 106 octets
Une fonction de fenêtre immédiate VBE anonyme qui prend une entrée sous forme de chaîne de caractères majuscule via une cellule
A1
et est transmise à la fenêtre immédiate VBE.la source
Ruby ,
5953 octetsEssayez-le en ligne!
C’est en fait assez simple: nous prenons l’entrée comme
division de notre chaîne de caractères enun tableau de caractères (grâce à Asone Tuhid pour l'avoir signalé) et appliquons l'opération de réduction, où nous justifions chaque caractère à la longueur requise en utilisant "TAPE" comme chaîne de remplissage.la source
K (oK) , 33 octets
Essayez-le en ligne!
{ }
fonction anonyme avec argumentx
-':x
soustrayez chaque avant (utilisez un 0 imaginaire avant le premier item)1_
déposer le premier élément0,
ajouter un 0-1+
ajouter -10|
max (0, ...)(
...)#\:"TAPE"
remodeler la chaîne"TAPE"
en chaque élément de la liste de gauche(
...),'x
ajouter le caractère correspondant dex
à chaque chaîne remodelée,/
tout concaténerla source
Ruby ,
78 77 6462 octets-1 octet grâce à Kevin Cruijssen
Essayez-le en ligne!
la source
ord-l[-1].ord-1
parord+~l[-1].ord
. Bonne réponse, cependant. +1 de moi.Java (JDK) , 91 octets
Essayez-le en ligne!
Explication
Crédits
var
la source
int p=123
sauverait un personnage. Peu importe ce qui sep
trouve dans la première itération, à condition que ce soit plus grand ou égal au premier caractère. La plus grande valeur que le premier caractère puisse avoir est'z'
== ASCII122
, donc 123 est suffisant. De plus, si vous utilisiez des lettres majuscules, vous pourriez utiliser 91 au lieu de 123, en enregistrant un autre caractère.C # (.NET Core) ,
122111 octets11 octets sauvés grâce à @KevinCruijssen
Essayez-le en ligne!
Explication:
la source
while
unfor
et la suppression des crochets:for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+=t[(e-d)%4]);
. :) Oh, et puisque vous utilisez unet="ETAP"
seule fois, vous pouvez l' utiliser directement, et le changementstring
devar
sauver 7 autres octets:s=>{var r=""+s[0];for(int i=1,e,d;i<s.Length;r+=s[i++])for(e=d=s[i]-s[i-1];d-->1;r+="ETAP"[(e-d)%4]);return r;}
.Yabasic , 119 octets
Une fonction anonyme qui prend une entrée en tant que chaîne en majuscule et une sortie vers STDOUT.
Essayez-le en ligne!
la source
Python 3, 90 octets
Essayez-le en ligne
la source
**title**
à#title
. Aussi, voudriez-vous ajouter un lien TryItOnline avec un code de test?Clojure,
139119 octetsFonction anonyme qui prend la chaîne et retourne celle enregistrée. Comme toujours, Clojure ne semble pas très performant. Ce que je ne pouvais pas vraiment comprendre, c'est chercher le prochain personnage de manière courte. Sur le dernier personnage, j'aurais un
OutOfBoundsException
raison évidente. Alors je mets uncycle
autour. Peut-être y a-t-il une solution plus élégante.Ungolfed
Mise à jour
Réussi à supprimer quelques octets. Se débarrasser de la
if
déclaration embêtante en décrémentant la différence.take
produit une liste vide si le nombre est inférieur ou égal à 0, ce qui entraîne à son tour une chaîne vide.Ungolfed
la source
APL (Dyalog Classic) , 30 octets
Essayez-le en ligne!
{ }
fonction anonyme avec argument⍵
⎕a⍳⍵
trouver des index de ses caractères dans l'alphabet2-/
différences par paires (prev moins next)1+
ajouter 1-
nier0⌈
max (0, ...)0,
ajouter un 0⍴∘'TAPE'¨
remodeler cycliquement la chaîne'TAPE'
à chaque⍵,¨⍨
ajoute chaque caractère de l'argument à la chaîne remodelée correspondante∊
aplatirla source
CJam ,
2725 octetsEssayez-le en ligne!
Loin, loin des autres langues de golf, mais je suis fier de ce golf quand même.
Explication
la source
Husk ,
26 à25 octetsEssayez-le en ligne!
la source
PowerShell , 72 octets
Essayez-le en ligne!
la source
Java,
213166153 octetsessayez-le en ligne
S'il vous plaît aidez-moi à le rendre meilleur.
Thanks to @cairdcoinheringaahing for the tip on whitespaces. Thanks to @R.M for the tip on tape string. Thanks to @KevinCruijssen for the lambda and expressions tips.
la source
"TAPETAPETAPETAPETAPETAPET".substring...
.int a=1,l=i.length;a<=l;a++
can beint a=0,l=i.length;++a<=l;
,char u=i[a-1];o+=u;if(a<l){char n=
can bechar u=i[a-1],n;o+=u;if(a<l){n=
,(n-u)
doesn't need the parenthesis, andn-u-1
can ben+~u
. Also, your answer is currently a snippet instead of a function. To make it a lambda you'll need to addi->{
in front and}
at the end. So in total: Try it online. 153 bytes