Impression entrecroisée de deux cordes

9

Étant donné un ensemble de deux cordes garantis de la même longueur, imprimez leur entrecroisement .

L' entrecroisement de deux cordes est obtenu comme suit.

  1. Donnez le deuxième caractère de la deuxième chaîne, puis le premier caractère de la première chaîne.
  2. Donnez le premier caractère de la deuxième chaîne, puis le deuxième caractère de la première chaîne.
  3. Jetez le premier caractère de chaque chaîne.
  4. Si les chaînes ont plus d'un caractère chacune, revenez à l'étape 1.

Par exemple, si les deux chaînes sont

Truck
Tower

la croix est

oTTrwroueuwcrcek

comme illustré dans le diagramme suivant.

diagramme

Chaque couleur représente une itération différente de l'entrecroisement. Les nombres indiquent les indices du caractère correspondant dans la sortie.

K Split X
la source
Vous ne devez pas accepter une réponse avant au moins une semaine environ, elle peut être battue à tout moment.
Pavel
@Phoenix ok je garderai cela à l'esprit la prochaine fois (c'était ma première question sur ce stackexchange)
K Split X

Réponses:

6

Gelée , 10 8 octets

żṚj@¥2\U

Essayez-le en ligne!

Comment ça fonctionne

żṚj@¥2\U  Main link. Arguments: s, t (strings)

          Arguments:    "Truck", Tower"
ż         Ziphwith; create all pairs of corresponding characters.
          Return value: ["TT", "ro", "uw", "ce", "kr"].
     2\   Reduce each pair of adjacent strings by the quicklink to the left.
    ¥       Combine the two links to the left into a dyadic chain.
 Ṛ            Reverse the left string.
  j@          Join the second string, using the previous result as separator.
          Map:          "TT", "ro" -> join("ro", "TT") -> "rTTo"
                        "ro", "uw" -> join("uw", "or") -> "uorw"
                        etc.
          Return value: ["rTTo", "uorw", "cwue", "kecr"]
       U  Upend; reverse each string.
          Return value: ["oTTr", "wrou", "euwc", "rcek"]
          (implicit) Flatten and print.
Dennis
la source
Wow c'est assez étonnant
K Split X
Explication, s'il vous plaît?
Shaggy
@Shaggy J'ai édité ma réponse.
Dennis
6

JavaScript (ES6), 51 octets

f=([G,...O],[L,...F])=>O[0]?F[0]+G+L+O[0]+f(O,F):''

Arnauld
la source
3

Haskell , 44 38 octets

Barré 44 est toujours 44

[_]#_=""
(a:b)#(x:y)=y!!0:a:x:b!!0:b#y

Légèrement moins golfé / peut-être un peu plus lisible:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
la source
1
Fait amusant: sur mon navigateur au moins, barré 44 n'est plus 44 dans l'en-tête: o
HyperNeutrino
2

PHP> = 7.1, 64 octets

for([,$a,$b]=$argv;$c=$b[++$i];)echo$c,$a[$i-1],$b[$i-1],$a[$i];

PHP Sandbox Online

Jörg Hülsermann
la source
0

C ++ 14, 115 112 octets

En tant que lambda sans nom, les paramètres doivent être comme std::string:

#define P putchar(
[](auto A,auto B){for(int i=0;++i<A.size()&&i<B.size();P B[i]),P A[i-1]),P B[i-1]),P A[i]));}

Non golfé et utilisation:

#include<iostream>
#include<string>

using namespace std;

#define P putchar(
auto f=
[](auto A,auto B){
 for(int i=0;
     ++i<A.size() && i<B.size();
     P B[i]),
     P A[i-1]),
     P B[i-1]),
     P A[i]));
}
;

int main(){
 string A="Truck",B="Tower";
 f(A,B);
}
Karl Napf
la source