İki dizgiden çapraz baskı


9

Aynı uzunlukta olması garanti edilen iki dizgi seti göz önüne alındığında, onların çaprazlarını yazdırın .

İki telin çapraz kesiti aşağıdaki gibi elde edilir.

  1. İkinci dizenin ikinci karakterini, ardından ilk dizenin ilk karakterini verin.
  2. İkinci dizenin ilk karakterini, ardından ilk dizenin ikinci karakterini verin.
  3. Her dizenin ilk karakterini atın.
  4. Dizelerin her birinde birden fazla karakter varsa, 1. adıma geri dönün.

Örneğin, iki dize

Truck
Tower

çaprazlama çapraz olan

oTTrwroueuwcrcek

aşağıdaki şemada gösterildiği gibi.

diyagram

Her renk farklı bir çapraz geçiş yinelemesini temsil eder. Sayılar, çıktıdaki karşılık gelen karakterin dizinlerini gösterir.


Bir cevabı en az bir hafta geçene kadar kabul etmemelisiniz, herhangi bir zamanda yenilebilir.
Pavel

@Phoenix tamam Bunu bir dahaki sefere aklımda tutacağım (bu bu stackexchange'teki ilk sorumdu)
K Split X

Yanıtlar:


6

Jöle , 10 8 bayt

żṚj@¥2\U

Çevrimiçi deneyin!

Nasıl çalışır

żṚ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.

Vay bu oldukça şaşırtıcı
K Split X

Açıklama, lütfen?
Shaggy

@Shaggy Cevabımı düzenledim.
Dennis



3

Haskell , 44 38 bayt

44 çarpı hala 44

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

Biraz daha az golf / belki biraz daha okunabilir:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))

1
Eğlenceli Gerçek: En azından tarayıcımda, 44 üstbilgide artık 44 yok: o
HyperNeutrino


0

C ++ 14, 115 bayt

Adsız lambda olarak parametreler şöyle olmalıdır 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 ve kullanımı:

#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);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.