Печать крест крест из двух струн

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 Split 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]));}

Ungolfed и использование:

#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);
}
Карл Напф
источник