Druk krzyżujący dwóch strun

9

Biorąc pod uwagę zestaw dwóch strun, które mają taką samą długość, wydrukuj krzyż .

Krzyż Criss z dwóch ciągów uzyskuje się w następujący sposób.

  1. Daje drugi znak drugiego łańcucha, a następnie pierwszy znak pierwszego łańcucha.
  2. Daje pierwszy znak drugiego łańcucha, a następnie drugi znak pierwszego łańcucha.
  3. Odrzuć pierwszy znak każdego ciągu.
  4. Jeśli ciągi zawierają więcej niż jeden znak, wróć do kroku 1.

Na przykład, jeśli dwa ciągi są

Truck
Tower

przekroju przecinających się

oTTrwroueuwcrcek

jak pokazano na poniższym schemacie.

diagram

Każdy kolor reprezentuje inną iterację krzyżowania. Liczby pokazują indeksy odpowiednich znaków na wyjściu.

K Split X
źródło
Nie powinieneś akceptować odpowiedzi, dopóki nie minie co najmniej tydzień, może zostać pobity w dowolnym momencie.
Pavel
@Phoenix w porządku, będę o tym pamiętać następnym razem (to było moje pierwsze pytanie w sprawie
K Split X

Odpowiedzi:

6

Galaretka , 10 8 bajtów

żṚj@¥2\U

Wypróbuj online!

Jak to działa

żṚ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
źródło
Wow, to całkiem niesamowite
K Split X
Wyjaśnienie, proszę?
Kudłaty
@Shaggy Zredagowałem swoją odpowiedź.
Dennis
6

JavaScript (ES6), 51 bajtów

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

Arnauld
źródło
3

Haskell , 44 38 bajtów

Przekreślone 44 to wciąż 44

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

Nieco mniej golfa / może trochę bardziej czytelny:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
źródło
1
Ciekawostka: przynajmniej w mojej przeglądarce przekreślone 44 nie ma już 44 w nagłówku: o
HyperNeutrino
2

PHP> = 7.1, 64 bajty

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

PHP Sandbox Online

Jörg Hülsermann
źródło
0

C ++ 14, 115 112 bajtów

Jako nienazwana lambda parametry powinny wyglądać następująco 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]));}

Niegolfowane i użytkowanie:

#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
źródło