영숫자 나선


24

입력이 주어지면 다음 나선 중 하나를 출력하는 것이 매우 간단합니다.

Input = 1A왼쪽 상단에서 시작 하는 문자로 나선을 제공합니다 .

A B C D E F
T U V W X G
S 5 6 7 Y H
R 4 9 8 Z I
Q 3 2 1 0 J
P O N M L K

Input = 2A오른쪽 상단에서 시작 하는 문자로 나선을 제공합니다 .

P Q R S T A
O 3 4 5 U B
N 2 9 6 V C
M 1 8 7 W D
L 0 Z Y X E
K J I H G F

Input = 3A오른쪽 하단에서 시작 하는 문자로 나선을 제공합니다 .

K L M N O P
J 0 1 2 3 Q
I Z 8 9 4 R
H Y 7 6 5 S
G X W V U T
F E D C B A

Input = 4A왼쪽 하단에서 시작 하는 문자로 나선을 제공합니다 .

F G H I J K
E X Y Z 0 L
D W 7 8 1 M
C V 6 9 2 N
B U 5 4 3 O
A T S R Q P

보시다시피, 나선형은 항상 시계 방향으로 이동하여 외부 에서 내부로 이동 합니다.

규칙은 간단합니다.

  • STDIN 및 STDOUT을 사용하여 전체 프로그램을 제공하거나 가능하지 않은 경우 가장 가까운 프로그램을 제공해야합니다.
  • 입력 ( 1, 2, 3, 4)이 주어지면 관련 나선을 출력하십시오.
  • 후행 공백이 허용됩니다
  • 일관되게 사용될 경우 선행 공백이 허용됩니다.
  • 출력에는 대문자를 사용해야하며 소문자는 사용할 수 없습니다.
  • 이것은 이므로 바이트 수가 가장 적은 프로그램이 승리합니다!

3
관련 . 이런 종류의 속임수 같은 느낌이지만 하나를 찾을 수 없습니다 : P
FryAmTheEggman


2
공간이 필요한가요?
Maltysen

@ Maltysen 예, 필요합니다.
Adnan

답변:


5

CJam, 45 43 42 바이트

'[,65>A,+W%(s{W%z_,@s/(@.+}A*ri{W%z}*Sf*N*

여기에서 테스트하십시오.

설명

'[,65>  e# Push the upper-case alphabet.
A,+     e# Append the digits.
W%      e# Reverse everything.
(s      e# Pull off the 9 and turn it into a string.
{       e# Repeat this 10 times to roll the string up in a spiral...
  W%z   e#   Rotate the existing grid clockwise.
  _,    e#   Duplicate grid so far and get the number of rows.
  @s    e#   Pull up the list of characters and flatten it into one string.
  /     e#   Split the string into chunks of the size of the number of rows.
  (     e#   Pull off the first chunk.
  @.+   e#   Pull up the grid so far and prepend the chunk as a new column.
}A*     e# We now have the spiral as desired, with the A in the bottom left corner.
ri      e# Read input and convert to integer.
{       e# Repeat this code that often..
  W%z   e#   Rotate the spiral clockwise.
}*
Sf*     e# Join each line with spaces.
N*      e# Join the lines with linefeeds.

10

Japt , 53 바이트 58 59 60

@ETHproductions 덕분에 5 바이트 절약

"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·

이것은 내가 그렇게 생각하지 않을 회전 명령을 사용합니다.

&& Ungolfed

"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"qS zU m_q qS} qR

             // Implicit: U = input
"FGH...SRQP" // String, " " represent newlines
qS           // Split   " "
zU           // Rotate
m_           // Loop the lines
  q qS}      // Insert spaces
qR           // Join by newlines

온라인으로 사용해보십시오


이상하게도, 온라인으로 프로그램을 실행하려고하면 변수 f를 찾을 수 없다고 불평합니다.
DavidC

@DavidCarraher Firefox에서 시도해 볼 것을 권장합니다. 인터프리터가 가장 잘 작동하는 것으로 보이는 브라우저입니다.
Downgoat

예, Firefox에서 작동합니다. 좋은.
DavidC

오, 좋아! 몇 가지 유니 코드 단축키를 사용하면 바이트 수를 5로 줄일 수 있습니다."FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
ETHproductions

@ETHproductions는 그 전에는 보지 못했습니다. 감사합니다!
사악한 양

3

Mathematica 156 바이트

초기 문자 문자열을 "ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"배열로 변환합니다. 해당 배열 시간에 Nest적용 f되며 n-1, 여기서 n은 입력 번호입니다. 배열 fTranspose-ing하고 Reverse각 행 에 적용하여 작동합니다 . g최종 배열을 문자열로 변환합니다.

s=StringJoin;r=Riffle;f=Nest[Reverse/@Transpose@#&,Partition[Characters@"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK",6],#-1]&;
g@n_:=s@r[s/@(r[#," "]&/@f[n]),"\n"]

g[4]

산출


출력을 배열로 제공 할 수 있으면 함수 g가 필요하지 않습니다.

f[4]

{{ "F", "G", "H", "I", "J", "K"}, { "E", "X", "Y", "Z", "0", "L "}, {"D ","W ","7 ","8 ","1 ","M "}, {"C ","V ","6 ","9 ","2 ", "N"}, { "B", "U", "5", "4", "3", "O"}, { "A", "T", "S", "R", "Q ","P "}}


일부 지역에서는 삽입 양식을 사용할 수 있습니다.
LegionMammal978

3

MATLAB, 61 89 바이트

b=[65:90 48:57];n=zeros(12,6);n(2:2:end)=rot90(b(37-spiral(6)),input('')-2);disp([n' ''])

조금 내려갈 수 있는지 살펴 보겠습니다. 그래도 확실하지 않습니다.

이렇게하면 A에서 Z까지의 모든 문자 배열과 0에서 9까지의 배열이 만들어지고 나선을 사용하여 올바른 순서로 데이터를 정렬합니다. 그런 다음 사용자가 지정한 양만큼 배열을 회전시킨 다음 인쇄합니다.

출력은 질문에서 허용하는대로 선행 공백을 일관되게 사용합니다 (사실 추가 바이트 비용없이 대신 후행 공백을 수행 할 수 있음). 예를 들면 다음과 같습니다.

 F G H I J K
 E X Y Z 0 L
 D W 7 8 1 M
 C V 6 9 2 N
 B U 5 4 3 O
 A T S R Q P

공백이 필요하다는 것을 알았 으므로이 원래 코드 (61)는 각 문자 사이에 공백을 추가하지 않기 때문에 유효하지 않습니다. 그러나 참고로 여기에 추가하겠습니다.

b=['A':'Z' '0':'9'];disp(rot90(b(37-spiral(6)'),6-input('')))

그리고 생산 :

ABCDEF
TUVWXG
S567YH
R498ZI
Q3210J
PONMLK

2

자바 스크립트 ES6 165 172

하드 코드 된 문자열에서 시작하여 간단한 회전

참고 1 바이트는 thx @ user81655를 저장했습니다.

p=prompt();alert("ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK".split` `.map((r,y,a)=>[...r].map((c,x)=>p<2?c:a[p<3?5-x:p<4?5-y:x][p<3?y:p<4?5-x:5-y]).join` `).join`
`)

테스트 스 니펫 :

// Test: redefine alert to write inside the snippet
alert=x=>P.innerHTML=x

p=prompt();
alert(
  "ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK"
  .split` `
  .map(
    (r,y,a)=>
    [...r].map(
      (c,x)=>p<2?c:
      a
       [p<3?5-x:p<4?5-y:x]
       [p<3?y:p<4?5-x:5-y]
    ).join` `
  ).join`\n`
)
<pre id=P></pre>


당신은 줄 바꿈 문자를 넣을 수 있습니다 자신의 내부 템플릿 문자열은 `<newline>`하나 이상의 바이트 짧다 `\n`.
user81655

@ user81655 thx, 심지어 1 바이트 카운트, 그러나 어쨌든 너무 길다
edc65

1

Pyth-60 바이트

문자열을 하드 코드하고 행렬 연산을 사용하여 모든 옵션을 가져옵니다.

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

테스트 스위트 .


2
+<G6"대신 "ABCDEF2 바이트 를 절약합니다.
PurkkaKoodari

1

루비, 173 바이트

->i{_,r,o=->s{s.map{|i|i*' '}},->s{s.transpose.map{|i|i.reverse}},%W(ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK).map(&:chars);puts i<2?_[o]:i<3?_[t=r[o]]:i<4?_[r[t]]:_[r[r[t]]]}

언 골프 드 :

-> i {
  _ = -> s { s.map{|i| i*' ' } }
  r = -> s { s.transpose.map{|i| i.reverse } }
  o = %W(ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK).map(&:chars)
  puts i<2?_[o]:i<3?_[t=r[o]]:i<4?_[r[t]]:_[r[r[t]]]
}

용법:

->i{_,r,o=->s{s.map{|i|i*' '}},->s{s.transpose.map{|i|i.reverse}},%W(ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK).map(&:chars);puts i<2?_[o]:i<3?_[t=r[o]]:i<4?_[r[t]]:_[r[r[t]]]}[4]
F G H I J K
E X Y Z 0 L
D W 7 8 1 M
C V 6 9 2 N
B U 5 4 3 O
A T S R Q P

1

파이썬, 152 바이트

s=[r for r in "ABCDEF TUVWXG S567YH R498ZI Q3210J PONMLK".split(" ")]
for i in range(1,int(input())):s=zip(*list(s)[::-1])
for x in s:print(" ".join(x))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.