Impressão cruzada de duas cordas

9

Dado um conjunto de duas cordas que garantem o mesmo comprimento, imprima a cruz .

O cruzamento de duas cordas é obtido da seguinte maneira.

  1. Rendimento o segundo caractere da segunda seqüência e, em seguida, o primeiro caractere da primeira seqüência.
  2. Rendimento o primeiro caractere da segunda seqüência e, em seguida, o segundo caractere da primeira seqüência.
  3. Descarte o primeiro caractere de cada sequência.
  4. Se as seqüências tiverem mais de um caractere cada, volte para a etapa 1.

Por exemplo, se as duas strings forem

Truck
Tower

a cruz é

oTTrwroueuwcrcek

conforme ilustrado no diagrama a seguir.

diagrama

Cada cor representa uma iteração diferente do cruzamento. Os números mostram os índices do caractere correspondente na saída.

K Divisão X
fonte
Você não deve aceitar uma resposta até que pelo menos uma semana tenha passado, ela poderá ser vencida a qualquer momento.
Pavel
@Phoenix bem, eu vou manter isso em mente na próxima vez (esta foi a minha primeira pergunta sobre este Stackexchange)
K Dividir X

Respostas:

6

Geléia , 10 8 bytes

żṚj@¥2\U

Experimente online!

Como 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
fonte
Uau, isso é incrível
K Split X
Explicação, por favor?
Shaggy
@ Shaggy eu editei minha resposta.
Dennis
6

JavaScript (ES6), 51 bytes

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

Arnauld
fonte
3

Haskell , 44 38 bytes

Riscado 44 ainda é 44

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

Um pouco menos golfe / talvez um pouco mais legível:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
fonte
11
Curiosidade: Pelo menos no meu navegador, o 44 riscado não é mais o 44 no cabeçalho: o
HyperNeutrino 30/17
2

PHP> = 7.1, 64 bytes

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

Sandbox do PHP Online

Jörg Hülsermann
fonte
0

C ++ 14, 115 112 bytes

Como lambda sem nome, os parâmetros devem 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]));}

Ungolfed e 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
fonte