Alterner consiste à prendre une chaîne et à l’emboîter de manière alternée. Voici comment vous alternez une chaîne.
Pour une chaîne de longueur N , prenez les caractères du centre N et entourez-les de parenthèses. Donc, si notre chaîne était
Hello world!
(12 caractères), nous finirons avec(Hello world!)
Ensuite, prenez les
n-2
caractères centraux restants et entourez-les entre crochets. Dans ce cas, les 10 caractères centraux sontello world
, ainsi la prochaine itération est:(H[ello world]!)
Tant qu'il reste plus de deux caractères au milieu de la chaîne, répétez les deux dernières étapes en alternant entre
()
et[]
. Voici les dernières étapes:(Hello world!) (H[ello world]!) (H[e(llo worl)d]!) (H[e(l[l(o[ w]o)r]l)d]!)
Comme il ne reste que deux caractères au milieu de la dernière itération, nous nous arrêtons. Notre dernière chaîne est
(H[e(l[l(o[ w]o)r]l)d]!)
Notez qu’il ya deux caractères entre les parenthèses. Cela se produit lorsque l'entrée est de longueur égale. Si l'entrée avait une longueur impaire (par exemple,
Hello, world!
avec une virgule ajoutée), nous n'aurions qu'un seul caractère au milieu:(H[e(l[l(o[,( )w]o)r]l)d]!)
Pour le défi d'aujourd'hui, vous devez écrire un programme ou une fonction qui prend une chaîne en tant qu'entrée et l'alterne, générant la nouvelle chaîne. Vous pouvez prendre des entrées et des sorties dans n’importe quel format raisonnable. L'entrée comportera toujours au moins un caractère et ne contiendra que de l'ASCII imprimable. Vous pouvez également supposer que l'entrée ne contiendra pas de parenthèses ni de crochets. Pour les langues traditionnelles, cela ne devrait pas avoir trop d'importance, mais cela pourrait faciliter la tâche de certaines langues ésotériques.
Comme d’habitude, il s’agit d’une compétition de code-golf . Essayez donc de donner la réponse la plus courte possible dans la langue de votre choix. S'amuser!
Test IO
#Input #Output
"Alternesting is fun!" --> (A[l(t[e(r[n(e[s(t[in]g) ]i)s] )f]u)n]!)
"PPCG" --> (P[PC]G)
"Code-golf" --> (C[o(d[e(-)g]o)l]f)
"4 8 15 16 23 42" --> (4[ (8[ (1[5( [1]6) ]2)3] )4]2)
"a" --> (a)
"ab" --> (ab)
"abc" --> (a[b]c)
la source
()
) ou peut-on commencer par des crochets ([]
)?()
HelloWorld
.Réponses:
Python 3 ,
706965 octets-1 octet grâce à @Uriel
-4 octets grâce à @xnor
Essayez-le en ligne!
la source
C,
143137135 octetsEssayez-le en ligne!
Explication:
la source
0
. Ainsi, vous ne devriez pas avoir besoin duk=i=0,
. J'ai peut être tort. Regarde cette réponse SORetina , 52 octets
Essayez-le en ligne! La première étape insère des paires de parenthèses entre chaque paire de caractères saisis, tandis que les deuxième et troisième étapes corrigent les parenthèses alternatives entre crochets.
la source
Sed, 78
Le score inclut +1 pour l’
-r
option passée à sed.Essayez-le en ligne .
la source
JavaScript (ES6),
69 à68 octetsCas de test
Afficher l'extrait de code
la source
V ,
252625 octets12 octets de moins grâce à @DJMcMayhemEssayez-le en ligne!
Emprunté certaines des idées de @ udioca.
Enfin , nous avons également utilisé le plug - in Surround inclus dans V pour une réponse, bien que cela n'ait peut-être pas été le meilleur moyen, qui sait.Le plugin ne veut PAS être utilisé.Hexdump:
Explication:
la source
;
place du dernierf)
Essayez-le en ligne!()
et[]
est un octet plus court mais beaucoup moins coolHaskell ,
9691817977 octetsEssayez-le en ligne!
la source
(x:y)
et(init y)
.k==""=""
est plus court quek==""=k
.cycle["()","[]"]
pour juste"()[]"
: Essayez-le en ligne!cycle
est encore plus court. Vous pouvez toujours supprimer les parenthèses(init y)
.k==""=k
jusqu'à la fin et le changer en0<1=k
.Ruby ,
7977 octets-2 octets grâce à @Value Ink
Essayez-le en ligne!
la source
s.insert k=i*2,'(['[i%2];s[~k]+=')]'[i%2]
pour sauvegarder 2 octets. Essayez-le en ligne!Javascript (ES6)
110105 octetsMerci à @powelles de me l'avoir rappelé
x%y<1
.Merci @ Luke pour
a-b?y:x
Afficher l'extrait de code
La première chose à faire pour comprendre cette bête est de ne pas le faire:
Presque chaque ligne fait partie de la version jouée au golf.
Ligne 1: L'instruction de fonction devient une fonction de flèche , renommée
input
eni
. Devienti=>
.Ligne 2:
Array.from
est la nouvelle façon de convertir une chaîne de caractères en tableau, et ce que nous utilisons sur cette ligne. Cependant, parallèlement, l’ opérateur de spread est un moyen moins coûteux que l’ancien.split('')
, de le faire, comme dans la version jouée au golf. Se termine comme[...i]
.Ligne 3:
.map
boucles à travers un tableau, vous donnant trois arguments:item
(a
dans le golfed),index
; joué au golfb
, etbaseArray
ouc
. Alors que nous nous soucions seulement deitem
etindex
, nous avons gardébaseArray
(voir la ligne 4 pour savoir pourquoi). Golfs à.map((a,b,c,...)=>...
.Ligne 4: La variable
middle
, l'argument ou l'argumentd
de la version golfée est créé pour économiser quelques octets lors de sa répétition. L'argumentc
devait être conservé pour que l'argumentd
soit créé. Est converti en(...,d=i.length/2-1,...)
.Ligne 5 : La variable
alternate
, ou l'argument,e
est utilisé pour vérifier le caractère sur lequel il était "(" ou "[" ou s'il était passé au milieu, ")" et "]".b%2<1
est égal àb%2==0
parce qu'il ne peut pas être inférieur à 1, mais à 0 dans ce cas. Est égal(...,e=b%2<1)
.Ligne 6: Une variable d'aide pour me permettre de convertir les
ternary operators
auxif
déclarations. N'y a-t-il rien dans le codegolf actuel?Lignes 7-8 : Si l’index est inférieur au milieu de la chaîne, indiquez une alternance de "[" et "(". Equates à
d>b?e?'[':'(':...
.).Lignes 9-12 : Sinon (si l'index est supérieur au milieu), vérifiez si le milieu est un nombre entier, si c'est le cas, changez l'alternance. Puis définissez le symbole sur une alternance de ')' et ']'. Obfusqué à
(d%1==0?!e:e)?')':']'
.Lignes 13-15 : Si dans le milieu, définissez le symbole sur une chaîne vide. Cela ne s'applique pas aux alternants impairs, car le milieu a une décimale. Devient:
d==b?'':...
.Ligne 16 : joint le tableau de caractères en une chaîne. Équivaut à
.join``
.Ligne 17 : renvoie le symbole de départ "(" et le résultat. Corrélé à
'('+...
.la source
%2==0
à%2<1
et utiliser au[...i]
lieu dei.split
[..i] idea
, mais j'ai oublié%2<1
merci.b%2<1
pourrait être remplacé par!b%2
d==b?x:y
pourrait devenird-b?y:x
etd%1==0
pourrait devenir!d%1
.!d%1
ne fonctionne qu'avec des parenthèses:!(d%1)
et ne supprime aucun octet. J'ai oublié que 0 était le seul nombre de faussetés, pour une raison quelconque, je pensais que -1 était le faux. Corrigez-moi si je me trompe dans le deuxième cas.Gelée ,
2321 octetsEssayez-le en ligne!
-2 octets grâce à @EricTheOutgolfer
la source
ị
vers le lien d'assistance pour -2, commeLHĊRị¶ç⁾)]żUFUż@ç⁾([$
SCALA,
140138 caractères,140138 octetsJe suis désolé de ne pouvoir faire mieux ... Je suis sûr qu'il y a plusieurs façons de l'améliorer. Encore:
Essayez-le en ligne!
Merci pour ce défi, ce fut assez difficile pour moi.
EDIT: -2 octets grâce à Mar Dev.
PS: Je vais demander quelque chose cependant. Je comprends pourquoi CE CODE continue à dupliquer le caractère central de ma chaîne si ma longueur est étrange (je ne vérifie pas et ne l'ajoute pas deux fois, dans les deux chaînes
l
etr
). Mais pourquoi dois - je obtenir une paire de parenthèses lorsque je tente de corriger comme QUE ? Je ne comprends pas du tout.la source
i%2==0
pouri%2<1
sauver deux octets.Perl,
7774 (73 + 1) octetsLes expressions régulières sont des choses glorieuses. Exécuter avec l'
-p
indicateur de ligne de commande.la source
05AB1E , 31 octets
Essayez-le en ligne!
Explication
Avec des exemples à saisir:
abcd
/abcde
la source
C ++ 14,
154145 octets[Récursif]
C ++ 14, 177 octets
[Itératif]
la source
Pyth , 42 (!) Octets
Testez-le en ligne! L'entrée doit être citée.
Des explications
Donc, fondamentalement, je supprime progressivement la tête et la fin de H (la chaîne d'entrée au début) tout en concaténant les parenthèses / crochets. G est juste un booléen qui me rappelle si je dois utiliser des crochets ou des parenthèses.
la source
05AB1E ,
4942 octetsEssayez-le en ligne!
la source
PowerShell,
125119111 octetsEssayez-le en ligne!
La version précédente*
* Merci Traumatismes numériques.
la source
QuadR , 82 octets
(81 octets +1 pour le
≡
drapeau)Essayez-le en ligne!
la source
AWK, 118 octets
Testé avec gawk, mais il devrait fonctionner avec tous les interprètes awk compatibles.
la source
JavaScript, 101 octets
Pas un gagnant, mais c'était intéressant d'essayer l'
replace
approche. Cela pourrait certainement être amélioré, mais cela est devenu incontrôlable ...la source
Java (OpenJDK 8) , 124 octets
Essayez-le en ligne!
Crédits
la source