동일한 길이를 보장하는 두 줄의 세트가 주어지면 십자형을 인쇄하십시오 .
두 줄 의 십자형 크로스 는 다음과 같이 구합니다.
- 두 번째 문자열의 두 번째 문자를 생성 한 다음 첫 번째 문자열의 첫 번째 문자를 생성하십시오.
- 두 번째 문자열의 첫 번째 문자를 생성 한 다음 첫 번째 문자열의 두 번째 문자를 생성하십시오.
- 각 문자열의 첫 문자를 버리십시오.
- 문자열에 각각 하나 이상의 문자가 있으면 1 단계로 돌아가십시오.
예를 들어 두 문자열이
Truck
Tower
골 크로스 입니다
oTTrwroueuwcrcek
다음 다이어그램에 표시된대로
각 색상은 서로 다른 교차 교차 반복을 나타냅니다. 숫자는 출력에서 해당 문자의 인덱스를 보여줍니다.
답변
젤리 , 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.
답변
자바 스크립트 (ES6), 51 바이트
f=([G,...O],[L,...F])=>O[0]?F[0]+G+L+O[0]+f(O,F):''
f=([G,...O],[L,...F])=>O[0]?F[0]+G+L+O[0]+f(O,F):''
console.log(f("Truck", "Tower"))
답변
답변
하스켈 , 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))
답변
답변
C ++ 14, 115112 바이트
명명되지 않은 람다로서 매개 변수는 다음과 같아야합니다 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);
}