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.


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.

Wow das ist ziemlich erstaunlich
K Split X

Erklärung bitte?
Shaggy

@ Shaggy Ich habe meine Antwort bearbeitet.
Dennis



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))

1
Fun Fact: Zumindest in meinem Browser ist durchgestrichen 44 nicht mehr 44 in der Kopfzeile: o
HyperNeutrino


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);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.