Друк крижового хреста з двох рядків


9

Враховуючи набір з двох рядків, гарантованих однакової довжини, надрукуйте їх хрестики хрестом .

Хрест хрест з двох рядків виходять наступним чином .

  1. Вийшов другий символ другого рядка, потім перший символ першого рядка.
  2. Виходять перший символ другого рядка, потім другий символ першого рядка.
  3. Відмовтеся від першого символу кожного рядка.
  4. Якщо рядки мають більше одного символу, поверніться до кроку 1.

Наприклад, якщо два рядки

Truck
Tower

хрест хрест є

oTTrwroueuwcrcek

як показано на наступній схемі.

діаграма

Кожен колір являє собою різну ітерацію схрещування. Цифри показують відповідні індекси символів у висновку.


Ви не повинні приймати відповідь, поки щонайменше не минув тиждень, її можна побити будь-коли.
Павло

@Phoenix гаразд, я маю це на увазі наступного разу (це було моє перше запитання щодо цієї стаккшн)
K Split X

Відповіді:


6

Желе , 10 8 байт

żṚj@¥2\U

Спробуйте в Інтернеті!

Як це працює

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

Нічого собі дивовижно
K Спліт X

Пояснення, будь ласка?
Кудлатий

@Shaggy Я відредагував свою відповідь.
Денніс



3

Haskell , 44 38 байт

Закреслений 44 все ще 44

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

Трохи менше гольфу / можливо трохи читабельніше:

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

1
Факт веселощів: У моєму браузері принаймні закреслений 44 більше не 44 у заголовку: o
HyperNeutrino


0

C ++ 14, 115 112 байт

Як неназвана лямбда, параметри повинні бути такими 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]));}

Безголівки та використання:

#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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.