다음과 같이 깃발을 가져 가십시오.
-----------------------------
| | |
| | |
|=============+=============|
| | |
| | |
-----------------------------
그리고 숫자 입력 : “파장”
파장이 5라고 가정합니다. 그런 다음 처음부터 줄을 따라 5 자마다 다음 문자를 a -
로 바꾸고 한 문자 \
아래로 모든 문자를 바꿉니다. 끝날 때까지 이것을 반복하십시오. 당신은 결국 :
-----\
| -----\
| -----\
|===== | -----\
| ====== | -----
| ==+=== |
-----\ | ====== |
-----\ | ====|
-----\ |
-----\ |
-----
끝에서 전체 파장을 만들 수 없으면 플래그가 완성됩니다. 끝까지 평평하게 유지하십시오.
모든 줄의 길이가 같고 맨 위 줄과 맨 아래 줄이 모두 -
(0x2D) 로 구성되고 나머지 문자가에 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
있거나 공백 ( )이라고 가정 할 수 있습니다. (그것의 아스키 값이 그래서
x
, 어디 31 < x < 127
)
플래그는 넓은 적어도 높이 3과 3 할 것이다.
파장은 음이 아닌 정수 (> = 0)입니다.
(파장 1을 가장 작은 파장으로 설정할 수도 있으므로 위의 예는 파장 6을 갖습니다. 괜찮습니다.)
플래그의 i / o는 행 배열 또는 여러 행이있는 문자열 일 수 있습니다.
출력 플래그에는 후행 공백이있을 수 있지만 모든 플래그에서 동일하면 선행 공백 만 가질 수 있습니다. 입력 플래그의 후행 공간이 삭제 될 수 있습니다.
채점
이것은 코드 골프이므로 바이트 단위의 가장 짧은 솔루션이 승리합니다.
테스트 사례
---
abc
---
2
--\
abc
--\
-----
| + |
-----
10
-----
| + |
-----
---------------------------------------
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& .\^/. &&&&&&|
|&&&&&& . | | . &&&&&&|
|&&&&&& |\| |/| &&&&&&|
|&&&&&& .--' '--. &&&&&&|
|&&&&&& \ / &&&&&&|
|&&&&&& > < &&&&&&|
|&&&&&& '~|/~~|~~\|~' &&&&&&|
|&&&&&& | &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
---------------------------------------
12
------------\
|&&&&&& ------------\
|&&&&&& ------------\
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& .\^/. &&&&&&|
|&&&&&& . | | . &&&&&&|
|&&&&&& . |\| |/| &&&&&&|
|&&&&&& --' '-- &&&&&&|
|&&&&&& \ /. &&&&&&|
|&&&&&& > < &&&&&&|
|&&&&&& '~|/~~|~~\|~' &&&&&&|
|&&&&&& | &&&&&&|
|&&&&&& &&&&&&|
------------\ &&&&&&|
------------\ &&&&&&|
------------\
-----------------------
|-._`-._ :| |: _.-'_.-|
| `-._`:| |:`_.-' |
|-------`-' '-'-------|
|------_.-. .-._------|
| _.-'_.:| |:._`-._ |
|-'_.-' :| |: `-._`-|
-----------------------
4
----\
|-._`----\
| `-._ :----\
|-----._`:| |: ----\
|-------`-| |:`_.-'_---
| _.--_.-' '-'_.-' .-|
|-'_.-'_.:. .-.----- |
----\-' :| |:._------|
----\| |: _`-._--|
----\ `-._ |
----\`-|
---
---------------
---------------
---------------
---------------
---------------
5
-----\
-----------\
---------------
---------------
-----\---------
-----\---
---
-------------------------------------------
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
|--------------- |
|#########################################|
| |
|#########################################|
| |
|#########################################|
-------------------------------------------
0
\
|\
|*\
| \
|** \
| *\
|** \
| ** \
|** *\
|- ** \
|#- ** \
| #-** *\
|# #- ** \
| # #- ** \
\# # #-** *\
\# # #- ** \
\# # #- **|\
\# # #-** |#\
\# # #- **| #\
\# # #- |# #\
\# # #-**| # #\
\# # #- |# # #\
\# # #-| # # #\
\# # #-# # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # #\
\# # # # # # |
\# # # # # #|
\# # # # # |
\# # # # #|
\# # # # |
\# # # #|
\# # # |
\# # #|
\# # |
\# #|
\# |
\#|
\|
\
답변
05AB1E , 25 23 26 25 바이트
Adnan 덕분에 -2
Emigna 덕분에 -1
Jonathan Allan 덕분에 +3
øvyN>²Öi¦¨'\.ø}N²÷ú}).Bø»
0이 아닌 1 인덱싱되며 +2 바이트는 괜찮습니다.
ø # Transpose.
vy } # For each column...
N>²Öi¦¨'\.ø} # Replace outside dashes with slants.
N²÷ # Current index / input #2.
ú # Prepend that many spaces to current column.
).Bø # Join, pad, transpose back.
» # Print with newlines.
Emigna / Adnan / Anyone-이러한 경사를 대체 할 수있는 더 나은 솔루션이 있었지만, 나는 엉망이되었습니다.
답변
답변
파이썬 2 , 129 바이트
lambda f,n,j=''.join:map(j,zip(*[i/n*' '+'-\\'[i%n>n-2]+j(s[1:-1])+'-\\'[i%n>n-2]+len(f[0])/n*' 'for i,s in enumerate(zip(*f))]))
답변
젤리 , 29 바이트
s”\⁹¦€Fð€0,1¦Zsð⁶ẋ;Ѐµ@"J;/z⁶
입력 및 출력 플래그는 행 목록입니다.
파장은 1 인덱스입니다.
항상 한 줄의 공백을 생성합니다.
(위의 모든 내용은 게시 된 질문에 명시 적으로 허용됩니다)
온라인으로 사용해보십시오! (IO가 예쁘게 보이도록 바닥 글-여러 줄 텍스트로 플래그를 받아받습니다)
방법?
carusocomputing의 05ab1e answer 와 매우 비슷한 방법으로 , 더 이상 골프를 치지 못했습니다.
s”\⁹¦€Fð€0,1¦Zsð⁶ẋ;Ѐµ@"J;/z⁶ - Main link: list of lists f, number p
¦ - apply to indexes (of f)
0,1 - ... 0 paired with 1 (i.e. last & first -> bottom & top)
ð€ - the previous chain with p as right argument for €ach:
s - split into chunks of length p
¦€ - apply to indexes for €ach
⁹ - ... link's right argument, p
”\ - the character '\' (a replacement - if the index is out of bounds this has no effect - although this might change in the future.)
Z - transpose the edited flag
s - split into chunks of length p
J - range of length = [1,2,...,nChunks]
ð µ@" - zip with reversed arguments (call those i):
⁶ - literal space
ẋ - repeated i times
;Ѐ - concatenate mapped across the chunks
;/ - undo the split (reduce with concatenation)
z⁶ - transpose with a filler of space characters
답변
MATL , 31 바이트
x"X@q1GQ&\Z"@b1G=?'\'5L(]h]Xhc!
온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 :
1 ,
2 ,
3 ,
4 ,
5 ,
6 ,
7 .
답변
자바 스크립트 (ES6), 175 바이트
f=(s,l,p=++l,t=s.replace(/^-*|-*$/g,s=>s.replace(/-/g,(c,i)=>++i%l?c:`\\`)))=>t.search`
`<p?t:(f(s,l,p+l,t)+`
`+` `.repeat(p)).replace(eval(`/(^|(.*)\\n)(.{${p}})/g`),`
$3$2`)
;
test=(s,l)=>document.write(`<pre>${s}
${l}${f(s,l)}</pre>`);
test(`---
abc
---`,2);
test(`-----
| + |
-----`,10);
test(`---------------------------------------
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& .\\^/. &&&&&&|
|&&&&&& . | | . &&&&&&|
|&&&&&& |\\| |/| &&&&&&|
|&&&&&& .--' '--. &&&&&&|
|&&&&&& \\ / &&&&&&|
|&&&&&& > < &&&&&&|
|&&&&&& '~|/~~|~~\\|~' &&&&&&|
|&&&&&& | &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
---------------------------------------`,12);
test(`-----------------------
|-._\`-._ :| |: _.-'_.-|
| \`-._\`:| |:\`_.-' |
|-------\`-' '-'-------|
|------_.-. .-._------|
| _.-'_.:| |:._\`-._ |
|-'_.-' :| |: \`-._\`-|
-----------------------`,4);
test(`---------------
---------------
---------------
---------------
---------------`,5);
test(`-------------------------------------------
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
|--------------- |
|#########################################|
| |
|#########################################|
| |
|#########################################|
-------------------------------------------`,0);
I / O는 개행으로 구분 된 문자열입니다. 출력에는 선행 줄 바꿈이 포함됩니다. 3 바이트의 비용으로 제거 할 수 있습니다. 출력 문자열을 직접 계산하려고 시도했지만 176 바이트가 걸렸습니다.
f=
(a,l,h=a.length)=>[...Array(h+(a[0].length-1)/++l|0)].map((_,i)=>a[0].replace(/./g,(k,j)=>((k=i-(j/l|0))&&h+~k)|-~j%l?(a[k]||'')[j]||' ':'\\'))
;
test=(s,l)=>document.write(`<pre>${s}
${l}
${f(s.split`
`,l).join`
`}</pre>`);
test(`---
abc
---`,2);
test(`-----
| + |
-----`,10);
test(`---------------------------------------
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& .\\^/. &&&&&&|
|&&&&&& . | | . &&&&&&|
|&&&&&& |\\| |/| &&&&&&|
|&&&&&& .--' '--. &&&&&&|
|&&&&&& \\ / &&&&&&|
|&&&&&& > < &&&&&&|
|&&&&&& '~|/~~|~~\\|~' &&&&&&|
|&&&&&& | &&&&&&|
|&&&&&& &&&&&&|
|&&&&&& &&&&&&|
---------------------------------------`,12);
test(`-----------------------
|-._\`-._ :| |: _.-'_.-|
| \`-._\`:| |:\`_.-' |
|-------\`-' '-'-------|
|------_.-. .-._------|
| _.-'_.:| |:._\`-._ |
|-'_.-' :| |: \`-._\`-|
-----------------------`,4);
test(`---------------
---------------
---------------
---------------
---------------`,5);
test(`-------------------------------------------
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
| * * * * *| |
|* * * * * |##########################|
|--------------- |
|#########################################|
| |
|#########################################|
| |
|#########################################|
-------------------------------------------`,0);
I / O는 문자열 배열입니다.
답변
PHP, 168 164 187 172 167 153 150 152 149 바이트
for($r=count($f=file(a));$y<$r+$e/$n=$argn;$y+=print"
")for($x=0;$x+1<$e=strlen($f[0])-1;)echo("\\".$f[$z=$y-($x/$n|0)][$x++]." ")[$z%($r-1)||$x%$n];
정적 파일에서 플래그를 가져 a
오고 STDIN에서 파장 (최소 1)을 가져옵니다.
파이프로 실행 php -nr
하거나 온라인으로 사용해보십시오 .
고장
for($r=count($f=file(a)); # import file, count lines
$y<$r+$e/$n=$argn; # loop $y through lines
$y+=print"\n") # 2. print newline
for($x=0;$x+1<$e=strlen($f[0])-1;) # 1. loop $x through columns
echo("\\".$f[ # 3. create string=backslash+character+space
$z=$y-($x/$n|0) # 1. line no. = $y - wave offset
][$x++]." " # 2. pick character from line
)
[
$z%($r-1) # if not first or last line
||$x%$n # or not last position of wave
] # then index 1 (character or space), else "\\"
;