입력:
끈
산출:
우리는 사각형이고 길이가 남을 때까지 1) 먼저, 우리는 입력 문자열의 끝에서 제거 특성을 가지고 (즉, 1, 4, 9, 16, 25, 36 등)에
따라서 abcdefghijklmnopqrstuvwxyz
(길이 26)이된다 abcdefghijklmnopqrstuvwxy
( 길이 25).
2) 그런 다음 왼쪽에서 오른쪽으로 한 번에 한 줄씩 사각형에 넣습니다.
abcde
fghij
klmno
pqrst
uvwxy
3) 우리는 이것을 다음과 같이 네 방향으로 모두 접습니다 (우리는 바깥 접힌 ‘블록’에 더 이상 전개 할 내부 문자가 없을 때까지 펼쳐집니다).
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
우리가 바깥으로 접을 때 기본적으로 다음과 같이 반영됩니다 (이 예에서 ‘인덱스’를 나타내는 설명으로 추가 된 숫자).
왼쪽을 접을 때 :
123 to: 321 123
fghij ihgf j
우리가 오른쪽을 접을 때 :
123 to: 123 321
fghij f jihg
우리가 위로 접을 때 :
3q
2l
1g
b to: b
1g 1
2l 2
3q 3
v v
아래쪽으로 접을 때 :
b b
1g 1
2l 2
3q 3
v to: v
3q
2l
1g
도전 규칙 :
- 입력에 항상 1 자 이상 (출력도 포함됨)이 있다고 가정 할 수 있습니다.
- 출력 형식은 유연하므로 STDOUT 또는 STDERR로 인쇄 할 수 있습니다. 문자열 배열 / 목록 또는 문자 2D 배열로 반환합니다. 줄 바꾸기가있는 단일 문자열; 기타
- 입력은 영숫자 (
a-zA-Z0-9
) 만 포함합니다. - 영숫자가 아닌 문자를 사용하여 도트와 같이 ASCII 아트 출력의 주변 및 / 또는 주변의 공간을 채울 수
.
있습니다. - 후행 공백과 단일 후행 줄 바꾸기는 선택 사항입니다.
- 접힌 바깥 쪽 ‘블록’에 더 이상 중심이 펼쳐지지 않을 때까지 전개를 계속합니다.
일반 규칙:
- 이것은 code-golf 이므로 바이트 단위의 최단 답변이 이깁니다.
코드 골프 언어가 코드 골프 언어 이외의 언어로 답변을 게시하지 못하게하지 마십시오. ‘모든’프로그래밍 언어에 대한 가능한 한 짧은 대답을 생각해보십시오. - 표준 규칙이 답변에 적용 되므로 STDIN / STDOUT, 적절한 매개 변수 및 리턴 유형의 전체 프로그램과 함께 함수 / 방법을 사용할 수 있습니다. 당신의 전화.
- 기본 허점 은 금지되어 있습니다.
- 가능하면 코드 테스트 링크를 추가하십시오.
- 또한 필요한 경우 설명을 추가하십시오.
테스트 사례 :
Input: abcdefghijklmnopqrstuvwxy
Output:
m
qrs
l n
ghi
abcde
ihgf jihg
mn lk on lm
srqp tsrq
uvwxy
qrs
l n
ghi
m
Input: A
Ouput:
A
Input: ThisIsATest
Output:
I
Thi
Is sI
ATe
I
Input: HowAboutAVeryLongExampleWhichIsAlsoAnEvenSquareInsteadOfOddOneAndExceeds64Chars
Output:
An
ch
xamp
i I
o E
quar
steadO
S e
s v
h s
E l
VeryLo
HowAbout
oLyreVA noLyreV
xampl Eg el Examp
hci Is hW As hi Ihc
nAo Ev sl ev so EnA
quare Sn Ie Squar
Odaetsn fOdaets
OddOneAn
steadO
S e
s v
h s
E l
VeryLo
xamp
i I
o E
quar
An
ch
Input: Lenght7
Output:
Le
ng
Input: abc
Output:
a
답변
SOGL V0.12 , 75 바이트
l√u²m√lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚
이것은 스택의 입력을 예상하므로 사용하기 쉽기 때문에 ,
처음에 추가 했습니다. 입력에 숫자 만 포함되어 있으면 문제가 발생할 수 있으므로 여기
에 테스트에 적합합니다.
70 바이트도 √lH»{ā;l⁾:A∫Ba{bIwFIWhFbž;FIbI@ž}};}¹K⁴{ē2\⌡±e{@Κ};⁴┼┼};0E{ē2\⌡№:h++}╚
작동하지만 √
문자열 에서만 구현되었으므로 문서에서 길이를 계산하지 않을 것이라고 언급하지 않았습니다.
설명:
creating a square from the input
l get the length of the input
√ get its square root
u floor that
² square it
m mold the input to that length
√ convert it to a square
creating the unfoldings of the square - the idea is to cut out the inner squares to a new array
lH»{ } (length-1)//2 times do
ā; push an empty array below ToS
l⁾ push ToS.length - 2 (ToS here is the square or the previous unfolding)
:A save a copy of that in the variable A
∫B } repeat that amount of times, saving iteration on B - cutting the inner square to the empty array
a{ } variable A times do
bIw get the b+1th row of the previous unfolding
FIW get the (current loops iteration + 1)th character of that
h swap the 2 items below ToS - so the stack now is [..., prevUnfolding, newArray, character]
Fbž at [current loops iteration; b] insert that character in the array
; swap the top 2 items - the stack now is [..., newArray, prevUnfolding]
FIbI@ž at [current loops iteration+1; b+1] insert a space
; get the now not empty array ontop of the stack
add the horizontal unfoldings
¹ wrap the stack in an array
K push the 1st item of that, which will function as the canvas
⁴{ } iterate over a copy of the remaining items
ē2\⌡ repeat (e++ divides by 2) times (default for the variable E is the input, which defaults to 0)
± reverse the array horizontally
e{ } repeat e times
@Κ add a space before ToS
;⁴┼┼ add that horizontally before and after the canvas
add the veertical unfoldings
; get the copy of the foldings above the canvas
0E reset the variable E to 0
{ } iterate the copy of the foldings
ē2\⌡ repeat (e++ divides by 2) times (default for the variable E is the input, which defaults to 0)
№ reverse the array vertically
:h++ add that vertically before and after the canvas
╚ center the canvas vertically
답변
숯 , 120 109 바이트
AI§⪪IXLθ⁰·⁵.⁰ηFη⊞υ✂θ×ιηF⁴«AυεJ⁰¦⁰F÷⁺¹η²«F⁴«F⁻η⁺κꧧεκ⁺μκ↷A⮌EεEε§ξν嶻A⎇﹪ι²Eε⮌λ⮌εεA⎇‹ι²⁻⁺²⁺κκη⁻η⁺κκκ¿﹪ι²Mκ¹M¹κ
온라인으로 사용해보십시오! 참고 A
로 변경된 이후이 ≔
와 연결이 반영됩니다. 설명:
θ Input string
L Length
X ⁰·⁵ Raise to the power 0.5
I Cast to string
⪪ . Split on the decimal point
§ ⁰ Take the first element (integer part)
I Cast to integer
A η Assign to h
계산 h = int(sqrt(len(q)))
합니다. ( Floor
아직 구현되지 않았습니다 …)
Fη⊞υ✂θ×ιη
입력에서 h
길이 의 슬라이스를 추출합니다 h
. (실제로 슬라이스를 길이로 자르는 것을 귀찮게하지 않습니다 h
.) 어딘가 의 결과가 필요하기 때문에 for
루프가 아닌 루프를 사용하며 이는 .Map
Assign
Map
Slice
F⁴«
전개는 각 방향마다 한 번씩 4 번 (아래, 오른쪽, 위, 코딩 된대로 왼쪽) 발생합니다. 이 루프의 루프 변수는 i
입니다.
Aυε
얇게 썬 끈을 복사하십시오.
J⁰¦⁰
그래서 캔버스의 기원으로 다시 이동하려면 각 펼쳐 시작 h
-by- h
같은 장소에서 광장.
F÷⁺¹η²«
반복 (h+1)/2
시간; 각 전개에 대해 한 번, 원래 사각형에 대해 한 번 더하십시오. 이 루프의 루프 변수는 k
입니다.
F⁴«
펼쳐진 사각형의 각면에 대해 한 번씩 4 번 반복합니다. (루프 변수를 사용하지 않습니다 l
.)
F⁻η⁺κκ Loop h-2k times, loop variable `m`
§εκ Take the `k`th row
§ ⁺μκ Take the `k+m`th column
Implicitly print the character
펼쳐진 사각형의 한면을 인쇄하십시오. 이것이 k
전개 되는 것이므로 , 정사각형은입니다 h-2k
. 그리고 문자를 k
원래 정사각형의 가장자리에서 빼 냅니다.
↷
사각형의 다음면을 인쇄 할 수 있도록 피벗합니다.
Eε Map over the array (element `m`, index `n`)
Eε Map over the array (element `x`, index `p`)
§ξν Take the `n`th element of `x`
⮌ Reverse
A ε Replace the array with the result
얇게 썬 끈을 회전시킵니다. (예, 그것은 ξ
. 나는 그것을 자주 사용하지 않습니다!) Eη
는 외부에도 효과가 있습니다 Map
. 회전은 배열의 너비를로 절단하는 편리한 부작용이 h
있습니다.
¶»
면을 인쇄 한 후 커서가 사각형의 가장자리에서 벗어납니다. 1면의 정사각형에 대해 한 문자를 더 적게 인쇄하면 실패하고 골프는 줄어 듭니다. 이전에 피벗 한 경우 개행을 인쇄하면 커서가 모서리로 다시 이동합니다.
﹪ι² Take `i` modulo 2
⎇ Choose either
⮌ε Reverse the array
Eε Map over the array (element `l`, index `m`)
⮌λ Reverse each element
A ε Replace the array with the result
정사각형을 세로 또는 가로로 적절히 뒤집습니다.
⎇‹ι² If `i` < 2
⁺κκ Double `k`
⁺² Add 2
⁻ η Subtract `h`
⁺κκ Else double `k`
⁻η Subtract from `h`
≔ κ Assign back to `k`.
다음 전개로 변위를 계산합니다.
﹪ι² Take `i` modulo 2
¿ If not zero
Mκ¹ `k` across and 1 down
M¹κ Else 1 across and `k` down
다음 전개로 수평 또는 수직으로 적절히 움직입니다.
다음은 다음과 같은 모든 최신 숯 기능을 사용하여 얻은 97 바이트 버전에 대한 링크입니다 Floor
. 온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다.