Impresión cruzada entrecruzada de dos cuerdas

9

Dado un conjunto de dos cadenas garantizadas de la misma longitud, imprima su cruz entrecruzada .

La cruz entrecruzada de dos cadenas se obtiene de la siguiente manera.

  1. Ceda el segundo carácter de la segunda cadena, luego el primer carácter de la primera cadena.
  2. Ceda el primer carácter de la segunda cadena, luego el segundo carácter de la primera cadena.
  3. Descarta el primer carácter de cada cadena.
  4. Si las cadenas tienen más de un carácter cada una, regrese al paso 1.

Por ejemplo, si las dos cadenas son

Truck
Tower

la cruz entrecruzada es

oTTrwroueuwcrcek

como se ilustra en el siguiente diagrama.

diagrama

Cada color representa una iteración diferente de entrecruzamiento. Los números muestran los índices del personaje correspondiente en la salida.

K Split X
fuente
No debe aceptar una respuesta hasta que haya transcurrido al menos alrededor de una semana, podría ser superada en cualquier momento.
Pavel
@ Phoenix bien, lo tendré en cuenta la próxima vez (esta fue mi primera pregunta sobre este intercambio de pila)
K Split X

Respuestas:

6

Jalea , 10 8 bytes

żṚj@¥2\U

Pruébalo en línea!

Cómo funciona

żṚ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
fuente
Wow eso es bastante sorprendente
K Split X
¿Explicación, por favor?
Shaggy
@ Shaggy He editado mi respuesta.
Dennis
6

JavaScript (ES6), 51 bytes

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

Arnauld
fuente
3

Haskell , 44 38 bytes

Tachado 44 sigue siendo 44

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

Un poco menos golfizado / quizás un poco más legible:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
fuente
1
Dato curioso: al menos en mi navegador, tachado 44 ya no es 44 en el encabezado: o
HyperNeutrino
2

PHP> = 7.1, 64 bytes

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

PHP Sandbox en línea

Jörg Hülsermann
fuente
0

C ++ 14, 115 112 bytes

Como lambda sin nombre, los parámetros deben ser como 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]));}

Sin golf y uso:

#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
fuente