Votre défi consiste à écrire un programme ou une fonction qui, lorsque deux chaînes de longueur égale sont définies, permute tous les autres caractères et génère / renvoie les chaînes résultantes dans l'un ou l'autre ordre.
Exemples
"Hello," "world!" --> "Hollo!" "werld,"
"code" "golf" --> "codf" "gole"
"happy" "angry" --> "hnpry" "aagpy"
"qwerty" "dvorak" --> "qvertk" "dworay"
"1, 2, 3" "a, b, c" --> "1, b, 3" "a, 2, c"
"3.141592653589" "2.718281828459" --> "3.111291623489" "2.748582858559"
"DJMcMayhem" "trichoplax" --> "DrMcMoylex" "tJichapham"
"Doorknob" "Downgoat" --> "Doonkoot" "Dowrgnab"
"Halloween" "Challenge" --> "Hhlloeegn" "Caallwnee"
Règles
- Les chaînes ne contiendront que des caractères ASCII (32-126).
- Les chaînes auront toujours la même longueur et ne seront jamais vides.
- Vous pouvez accepter une entrée dans n’importe quel format approprié: paramètres séparés, éléments d’un tableau, séparés par un ou plusieurs sauts de ligne, voire concaténés. La seule restriction est qu'une chaîne doit précéder complètement l'autre (par exemple,
a1\nb2\nc3
for"abc", "123"
est invalide). - La sortie peut être dans l’un ou l’autre ordre (c’est-à-dire que vous pouvez commencer à permuter à partir du premier ou du deuxième caractère) et dans tout format valide mentionné ci-dessus. (Tableau à 2 éléments, séparés par une ou plusieurs nouvelles lignes, concaténés, etc.)
Notation
C'est du code-golf , donc le code le plus court en octets pour chaque langue gagne.
DrMcMoylex
. : DRéponses:
Haskell, 37 octets
Zip les deux chaînes, en échangeant les caractères, puis les décompresse.
Une alternative récursive de 37 octets:
la source
Python, 42 octets avec golf I / O
Échange tous les autres caractères des deux listes. Prend en entrée deux listes de caractères et les édite en les modifiant .
donne
la source
Vim,
18, 17 octetsEssayez-le en ligne!
Ceci utilise l'interpréteur V en raison de la compatibilité ascendante. L'entrée se présente sous ce format:
Explication:
la source
x
au lieu deyl
puis jusP
au lieu de secondevP
:lqqxjvPkPll@qq@q
[save]
bouton? De toute façon, ça ne marche pas pour moi . La vraie raison est que, lorsque vous êtesx
le dernier caractère de la ligne, votre curseur se déplace vers la gauche, ce qui perturbe le placement de la permutation.Haskell, 41 octets
Retourne une paire avec les chaînes. Exemple d'utilisation:
( (unzip.).(#) ) "Hello," "world!"
->("Hollo!","werld,")
.Approche récursive simple: prenez le premier caractère de chaque chaîne sous forme de paire et ajoutez un appel récursif avec les chaînes restantes échangées.
unzip
fait une paire de listes de la liste des paires.la source
05AB1E ,
11 à10 octetsEssayez-le en ligne!
Explication
input =
["code", "golf"]
utilisé à titre d'exemple.la source
Perl, 48 octets
Bytecount comprend 47 octets de code et d'
-p
indicateur.Courir avec
-p
et-E
drapeau. Attendez-vous à chaque chaîne sur une ligne différente:Explications :
-p
: capturer une entrée$_
et l’imprimer à la fin. (pour obtenir et imprimer la première chaîne)<>
: obtenir une ligne de saisie. (pour obtenir la deuxième chaîne).=~
: Appliquer une expression rationnelle<>
:s%%%geer
, où , grâce àr
la chaîne modifiée est retournée (puis imprimé grâce àsay
).La regex:
.\K(.)
trouve deux caractères, et remplacera le second par le résultat de l'évaluation de ce code"s/.{$-[0]}\\K(.)/$1/;\$1"
:La première partie
s/.{$-[0]}\\K(.)/$1/
applique une regex à$_
:.{$-[0]}
saute les premiers caractères pour atteindre le même point que la regex externe (car$-[0]
contient le index du premier groupe de capture, donc dans ce cas, l'index des caractères à substituer), puis nous capturons un caractère avec(.)
et remplacez-le par le caractère de la regex externe ($1
). Et puis nous ajoutons$1
donc le résultat de"s/.{$-[0]}\\K(.)/$1/;\$1"
est le caractère que nous avons capturé dans la regex interne.Vous avez peut-être remarqué que
$1
vous vous référez au caractère que nous voulons remplacer dans les deux chaînes (donc deux caractères différents), nous jouons donc avec le/ee
modificateur de la regex qui évalue le côté droit de la regex deux fois: le premier ne remplacera que le caractère$1
isn 'pas précédé par le\
.la source
Python, 55 octets
Trancher!
58 octets:
64 octets:
Accumule de manière récursive les caractères des deux chaînes dans
s
ett
, et renvoie la paire à la fin. L'alternance est effectuée en commutant les chaînes d'entrée à chaque appel récursif. La sortie d'une chaîne séparée par des espaces avait la même longueur:Cela évite de près une stratégie récursive différente consistant à prendre alternativement les caractères de chaque chaîne, chacune des deux chaînes possibles étant la première. (65 octets)
la source
MATL ,
111098 octetsMerci à ETHproductions pour 1 octet de moins!
L' entrée est un tableau 2D contenant les deux chaînes, telles que:
['Halloween'; 'Challenge']
. Les chaînes de sortie sont dans l'ordre inverse.Essayez-le en ligne!
Explication
Ancienne version: 9 octets
Explication
la source
Gelée , 5 octets
L'entrée est sous forme d'arguments séparés, la sortie est concaténée.
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça marche
la source
Gelée ,
986 octetsMerci à Dennis d' avoir économisé 2 octets!
Utilise le codage Jelly .
Essayez-le en ligne!
la source
ṙ"J$
au lieu deĖṙ@/€
. De plus, il n'est pas nécessaire de séparer la chaîne, vous pouvez donc supprimer le fichierY
.V , 12 octets
Essayez-le en ligne!
Rien d’intéressant, juste un portage direct de ma réponse vim pour pouvoir rivaliser avec (mais pas battre) 05AB1E.
la source
Pyke, 9 octets
Essayez-le ici!
la source
JavaScript (ES6), 51
54Éditez 3 octets enregistrés thx @Neil
Fonction avec tableau entrée / sortie
J'aime celui-ci de plus, mais c'est 55 (2 chaînes en entrée, tableau en sortie)
Tester
la source
replace
vous permet d' économiser 3 octets:p=>p.map((w,i)=>w.replace(/./g,(c,j)=>a[i+j&1][j]))
.Pyth, 8 octets
Essayez-le en ligne: démonstration
Transpose les mots, inverse les "index actuels" de chaque paire de lettres, transpose à nouveau.
la source
JavaScript (ES6), 55 octets
Je voulais faire quelque chose d'intelligent avec l'utilisation de regexp pour remplacer les caractères de remplacement, mais cela a pris
6757 octets:la source
f=([a,...A],[b,...B])=>a?[a+f(B,A)[0],b+f(A,B)[0]]:[""]
pour la même longueur.map
, il m'a supprimé 10 octets de ma réponse d'expressions rationnelles. Encore trop longtemps cependant.Perl, 40 octets
Inclut +1 pour
-n
Donne des chaînes sous forme de lignes sur STDIN
interlace.pl
la source
Java,
132103100 octetsMerci à Kevin Cruijssen d’avoir suggéré de retourner le tableau (parmi d’autres améliorations) et d’avoir économisé 29 octets! Aussi Olivier Grégoire pour 3 octets!
Appelé comme ça:
Sortie:
Hollo,werld!
Tirant parti du fait que l’entrée peut en principe être formatée de quelque manière que ce soit (dans ce cas, un tableau de caractères unique de chaînes délimitées par une virgule), ainsi que des règles de sortie relativement indulgentes.
la source
char[]c(char[]s,int l){for(int o=l,t;o-->0;)if(l%2>0){t=s[l];s[l]=s[l+o+1];s[l+o+1]=(char)t;}return s;}
( 103 octets ) avec le résultat renvoyé au lieu d’être imprimé directement. Exemple de saisieSystem.out.println(c("Hello,world!".toCharArray(), 5));
; Exemple de sortie:Hollo,werld!
.Hollo!werld,
et nonHollo,werld!
(la ponctuation est incorrecte). Je pense que cela peut être corrigé avec une valeur d'entrée de 6 au lieu de 5.t
surchar
, pourquoi ne le déclarez-vous pas directement dans la boucle forchar
? Vous épargnerez quelques octets pour le faireC, 124 octets
Appeler avec:
La longueur de la chaîne est limitée à 98 caractères.
la source
Octave ,
6461 octetsFonction anonyme qui entre un tableau de caractères 2D avec chaque chaîne d'une ligne et génère la sortie au même format.
Essayez chez Ideone .
la source
Raquette 208 octets
Ungolfed:
Essai:
Sortie:
Ci-dessus est la version récursive.
Version itérative:
Ungolfed:
la source
PowerShell v2 +, 82 octets
Je joue encore au golf ...Nope. Vous ne pouvez pas sembler jouer cela sans utiliser une regex comme d’autres réponses (boo on en copiant des algorithmes).Nous prenons donc
$a
et en$b
tant que chaînes, définissons index$i
sur0
, transposons en$a
tant quechar
-array et l'envoyons via une boucle|%{...}
. A chaque itération, nous concaténons des chaînes sur$c
et$d
en indexant dans un tableau-select (c’est-à-dire qu’il alterne en arrière). Ensuite, nous partons$c
et$d
sur le pipeline, et la sortie via impliciteWrite-Output
se produit à la fin du programme.la source
Lithp , 120 caractères (+3 pour le drapeau -v1)
Ligne divisée en 2 pour plus de lisibilité:
Nécessite le
-v1
indicateurrun.js
car certaines fonctions ne font pas encore partie de la bibliothèque standard.Exemple d'utilisation:
Cela montre que je n'ai pas passé assez de temps sur la bibliothèque standard. Avoir à utiliser
js-bridge/1
deux fois et la forme regex longue, ainsi que d’appeler map en utilisantinvoke/*
tout, contribue à ce que cela dure beaucoup plus longtemps que nécessaire.Je pense qu'il est temps de travailler sur ma bibliothèque standard.
la source
PHP, 79 octets
Version précédente PHP, 82 octets
la source
for(...)echo$a[1+$i%2][$i];echo" $y";
(-2)for(;$i<=strlen(($a=$argv)[1]);$y.=$a[2-$i%2][$i++])echo$a[1+$i%2][$i]??" $y";
Notice: String offset cast occurred in Command line code on line 1
C,
5452 octetsSuppose que la sortie
c
a déjà la longueur souhaitée.Usage:
}
Si vous insistez pour créer la sortie, voici une solution de 91 octets :
Usage:
la source
C, 150 octets
J'ai utilisé les omissions typiques des fichiers d'en-tête et
main()
du type de retour et de l'instruction de retour. Il jette un avertissement, mais compile sans problème. J'ai également utilisé une astuce spécifique à GCC qui permet les déclarations de tableau avec des expressions variables.Le programme attend les chaînes de la ligne de commande et doit donc être exécuté avec
./a.out string1 string2
.Ou plus lisiblement,
la source
Mathematica, 51 octets
Prend l'entrée sous forme de tableau de deux tableaux de caractères, avec une sortie au même format. La fonction construit simplement le nouveau tableau en utilisant une opération (mod 2).
la source
QBasic 4.5, 172 octets
Aïe, celui-ci devient douloureux avec le vieux QBasic ...
Fait amusant: utiliser
DEFSTR
plus d'octets sauvegardés que le coût, car je pourrais maintenant les utiliserA
au lieu dea$
.la source
QBIC , 112 octets
QBIC peut rationaliser une grande partie de la plate-forme QBasic, mais le
MID$
moteur principal doit toujours être exécuté dans QBasic car il manque une fonction de sous-chaîne à QBIC. Néanmoins, me sauve 60 octets.la source
MIND$
=>MIN$
en texte.Java, 68 octets
Ungolfed et test
la source
APL, 12
Explication: {...} définit une fonction, ⍵ est le bon argument. La prise (↑) crée une matrice à partir des deux chaînes, puis fait pivoter chaque colonne () n fois, où n est la partie entre parenthèses (). C'est défini comme l'iota de la longueur du premier argument. (Ex: longueur = 5 ==> 1 2 3 4 5). Ainsi, la première colonne est tournée une fois, la deuxième deux fois (pour revenir aux positions d'origine), la troisième colonne trois fois, etc.
Essayez-le sur tryapl.org
la source