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


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.