การพิมพ์กากบาดของสองสาย


9

รับชุดของสองสายรับประกันเป็นระยะเวลาเดียวกันให้พิมพ์ของพวกเขาข้ามกาก

ข้ามกากของสองสายจะได้รับดังต่อไปนี้

  1. ให้อักขระตัวที่สองของสตริงที่สองจากนั้นอักขระตัวแรกของสตริงแรก
  2. ให้ผลอักขระแรกของสตริงที่สองจากนั้นอักขระที่สองของสตริงแรก
  3. ละทิ้งอักขระตัวแรกของแต่ละสตริง
  4. หากสตริงมีอักขระมากกว่าหนึ่งตัวให้กลับไปที่ขั้นตอนที่ 1

ตัวอย่างเช่นถ้าทั้งสองสายเป็น

Truck
Tower

ข้ามกากคือ

oTTrwroueuwcrcek

ดังแสดงในแผนภาพต่อไปนี้

แผนภาพ

แต่ละสีแสดงถึงการวนซ้ำที่แตกต่างกัน ตัวเลขแสดงดัชนีของตัวละครที่เกี่ยวข้องในการส่งออก


คุณไม่ควรรับคำตอบจนกว่าจะผ่านไปอย่างน้อยหนึ่งสัปดาห์ก็อาจถูกโจมตีได้ตลอดเวลา
Pavel

@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

@Shaggy ฉันแก้ไขคำตอบแล้ว
Dennis



3

Haskell , 44 38 ไบต์

ตัดออก 44 ยังคงเป็น 44

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

golfed น้อยลงเล็กน้อย / อาจอ่านได้มากกว่า:

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

1
Fun Fact: บนเบราว์เซอร์ของฉันอย่างน้อยก็ข้าม 44 ไม่ได้ 44 ในส่วนหัว: o
HyperNeutrino


0

C ++ 14, 115 112 bytes

ในฐานะแลมบ์ดาที่ไม่มีชื่อพารามิเตอร์ควรเป็นเช่น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);
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.