Kreuzmuster aus zwei Saiten drucken

9

Wenn zwei Saiten garantiert die gleiche Länge haben, drucken Sie das Kreuz .

Das Kreuz zweier Saiten wird wie folgt erhalten.

  1. Geben Sie das zweite Zeichen der zweiten Zeichenfolge und dann das erste Zeichen der ersten Zeichenfolge aus.
  2. Geben Sie das erste Zeichen der zweiten Zeichenfolge und dann das zweite Zeichen der ersten Zeichenfolge aus.
  3. Verwerfen Sie das erste Zeichen jeder Zeichenfolge.
  4. Wenn die Zeichenfolgen jeweils mehr als ein Zeichen enthalten, fahren Sie mit Schritt 1 fort.

Zum Beispiel, wenn die beiden Zeichenfolgen sind

Truck
Tower

das kreuz und quer ist

oTTrwroueuwcrcek

wie in der folgenden Abbildung dargestellt.

Diagramm

Jede Farbe repräsentiert eine andere Iteration der Kreuzung. Die Zahlen zeigen die Indizes der entsprechenden Zeichen in der Ausgabe.

K Split X.
quelle
Sie sollten eine Antwort erst akzeptieren, wenn mindestens eine Woche vergangen ist. Sie kann jederzeit geschlagen werden.
Pavel
@Phoenix okay, ich werde das nächste Mal daran denken (dies war meine erste Frage zu diesem Stapelaustausch)
K Split X

Antworten:

6

Gelee , 10 8 Bytes

żṚj@¥2\U

Probieren Sie es online aus!

Wie es funktioniert

żṚ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
quelle
Wow das ist ziemlich erstaunlich
K Split X
Erklärung bitte?
Shaggy
@ Shaggy Ich habe meine Antwort bearbeitet.
Dennis
6

JavaScript (ES6), 51 Byte

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

Arnauld
quelle
3

Haskell , 44 38 Bytes

Durchgestrichen 44 ist immer noch 44

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

Etwas weniger Golf / vielleicht etwas besser lesbar:

[_]      # [_]      = ""
(a:b:bs) # (x:y:ys) = y:a:x:b:((b:bs) # (y:ys))
Julian Wolf
quelle
1
Fun Fact: Zumindest in meinem Browser ist durchgestrichen 44 nicht mehr 44 in der Kopfzeile: o
HyperNeutrino
2

PHP> = 7,1, 64 Bytes

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

PHP Sandbox Online

Jörg Hülsermann
quelle
0

C ++ 14, 115 112 Bytes

Als unbenanntes Lambda sollten Parameter wie folgt sein 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 und Verwendung:

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