2つの弦の十字形の印刷


9

同じ長さであることが保証された2つの文字列のセットが与えられた場合、それらの十字を印刷します。

十字クロス次のように2つの文字列が得られます。

  1. 2番目の文字列の2番目の文字を生成し、次に最初の文字列の最初の文字を生成します。
  2. 2番目の文字列の最初の文字を生成し、次に最初の文字列の2番目の文字を生成します。
  3. 各文字列の最初の文字を破棄します。
  4. 文字列に複数の文字が含まれている場合は、手順1に戻ります。

たとえば、2つの文字列が

Truck
Tower

クリスクロスはあります

oTTrwroueuwcrcek

次の図に示すように。

図

各色は十字交差の異なる反復を表します。数字は、対応する文字のインデックスを出力に示します。


少なくとも1週間程度経過するまで回答を受け入れないでください。回答はいつでも打たれる可能性があります。
Pavel

@Phoenix大丈夫、次回もそのことを覚えておきます(これはこのstackexchangeでの最初の質問でした)
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.

うわーthatsの素晴らしいかなり
KスプリットX

説明してください?
Shaggy

@Shaggy回答を編集しました。
デニス



3

Haskell44 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
豆知識


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);
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.