Буквено-цифрова спіраль


24

Завдання дуже просте, коли вводять один із наступних спіралей:

Input = 1дає спіраль з літерою, що Aпочинається у верхньому лівому куті:

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 = 2дає спіраль з літерою, що Aпочинається у верхньому правому куті:

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 = 3дає спіраль з літерою, що Aпочинається в нижньому правому куті:

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 = 4дає спіраль з літерою, що Aпочинається в нижньому лівому куті:

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 Так, вони потрібні.
— Аднан

Відповіді:


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

Збережено 5 байт завдяки @ETHproductions

"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

О, приємно! Використовуючи декілька ярликів Unicode, ви можете скоротити кількість байтів на п’ять:"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
— ETHproductions

@ETHproductions раніше цього не бачив, дякую!
— Злі вівці

3

Математика 156 байт

Перетворює початковий рядок літер "ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK", у масив. Nestзастосовується fдо цього n-1часу масиву , де n - номер введення. fпрацює шляхом Transpose-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' ''])

Я побачу, чи зможу я її трохи знизити. Не впевнений, хоча.

При цьому створюється масив усіх літер від А до Я з наступним від 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

JavaScript 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`.
— користувач81655

@ user81655 thx навіть 1 байт налічує, але все одно настільки жахливо довгий
— edc65

1

Pyth - 60 байт

Жорсткий код рядка і використовує матричні операції, щоб отримати всі параметри.

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

Тестовий сюїт .


2
+<G6"замість "ABCDEFекономить 2 байти.
— 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.