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.


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.

Wow c'est assez étonnant
K Split X

Explication, s'il vous plaît?
Shaggy

@Shaggy J'ai édité ma réponse.
Dennis



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))

1
Fait amusant: sur mon navigateur au moins, barré 44 n'est plus 44 dans l'en-tête: o
HyperNeutrino


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);
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.