Mencetak silang silang dari dua string

9

Diberi satu set dua string dijamin panjangnya sama, cetak silang mereka .

The berselang lintas dari dua string diperoleh sebagai berikut.

  1. Hasilkan karakter kedua dari string kedua, lalu karakter pertama dari string pertama.
  2. Hasilkan karakter pertama dari string kedua, lalu karakter kedua dari string pertama.
  3. Buang karakter pertama dari setiap string.
  4. Jika string masing-masing memiliki lebih dari satu karakter, kembali ke langkah 1.

Misalnya, jika dua string

Truck
Tower

yang berselang lintas adalah

oTTrwroueuwcrcek

seperti yang diilustrasikan dalam diagram berikut.

diagram

Setiap warna mewakili iterasi yang berbeda dari saling silang. Angka-angka menunjukkan indeks karakter yang sesuai di output.

K Split X
sumber
Anda tidak boleh menerima jawaban sampai paling tidak sekitar satu minggu berlalu, itu mungkin dikalahkan kapan saja.
Pavel
@Phoenix oke saya akan mengingatnya lain kali (ini adalah pertanyaan pertama saya di stackexchange ini)
K Split X

Jawaban:

6

Jelly , 10 8 byte

żṚj@¥2\U

Cobalah online!

Bagaimana itu bekerja

żṚ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
sumber
Wow, itu luar biasa
K Split X
Penjelasannya, tolong?
Shaggy
@ Shaggy Saya sudah mengedit jawaban saya.
Dennis
6

JavaScript (ES6), 51 byte

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

Arnauld
sumber
3

Haskell , 44 38 byte

Dicoret 44 masih 44

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

Sedikit kurang golf / mungkin sedikit lebih mudah dibaca:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
sumber
1
Fakta Menarik: Setidaknya di browser saya, mencoret 44 tidak lagi 44 di tajuk: o
HyperNeutrino
2

PHP> = 7.1, 64 byte

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

PHP Sandbox Online

Jörg Hülsermann
sumber
0

C ++ 14, 115 112 byte

Sebagai lambda tanpa nama, parameter harus seperti 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]));}

Tidak digabungkan dan digunakan:

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