Các xoắn ốc chữ và số


24

Nhiệm vụ rất đơn giản, khi được cung cấp một đầu vào, đầu ra một trong các xoắn ốc sau:

Input = 1đưa ra một hình xoắn ốc với chữ Abắt đầu ở góc trên bên trái:

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 ra một hình xoắn ốc với chữ Abắt đầu ở góc trên bên phải:

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 ra một hình xoắn ốc với chữ Abắt đầu ở góc dưới bên phải:

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 ra một hình xoắn ốc với chữ Abắt đầu ở góc dưới bên trái:

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

Như bạn có thể thấy, hình xoắn ốc luôn đi theo chiều kim đồng hồ và di chuyển từ bên ngoài vào bên trong .

Các quy tắc rất đơn giản:

  • Bạn cần cung cấp một chương trình đầy đủ bằng STDIN và STDOUT, hoặc tương đương gần nhất nếu không thể.
  • Cho một đầu vào ( 1, 2, 3, 4), đầu ra xoắn ốc liên quan.
  • Cho phép khoảng trắng
  • Khoảng trắng hàng đầu được phép khi được sử dụng nhất quán
  • Bạn cần sử dụng chữ in hoa cho đầu ra, chữ thường không được phép.
  • Đây là , vì vậy chương trình có số byte ít nhất sẽ thắng!

3
Liên quan . Loại cảm giác này giống như một bản dupe nhưng tôi không thể tìm thấy: P
FryAmTheEggman


2
là không gian cần thiết?
Maltysen

@Maltysen Có, họ được yêu cầu.
Adnan

Câu trả lời:


5

CJam, 45 43 42 byte

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

Kiểm tra nó ở đây.

Giải trình

'[,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 byte 58 59 60

Đã lưu 5 byte nhờ @ETHproductions

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

Điều này sử dụng lệnh xoay mà tôi không bao giờ nghĩ sẽ hữu ích như vậy

Giải thích && 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

Dùng thử trực tuyến


Thật kỳ lạ, khi tôi cố gắng chạy chương trình trực tuyến, nó chùn bước và phàn nàn rằng nó không thể tìm thấy biến f.
DavidC

@DavidCarraher Tôi khuyên bạn nên thử trên Firefox, đó là trình duyệt mà trình thông dịch dường như hoạt động tốt nhất trong
Downgoat

Vâng, nó hoạt động trên Firefox. Tốt đẹp.
DavidC

Ooh tuyệt đó! Sử dụng một vài phím tắt Unicode, bạn có thể cắt số byte bằng năm:"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
ETHproductions

@ETHproductions đã không nhìn thấy những người trước đó, cảm ơn!
Evil Sheep

3

Toán học 156 byte

Chuyển đổi chuỗi ký tự ban đầu "ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK", thành một mảng. Nestáp dụng fcho n-1thời gian mảng đó , trong đó n là số đầu vào. fhoạt động bằng cách Transpose-ing mảng theo sau được Reverseáp dụng cho mỗi hàng. gchuyển đổi mảng cuối cùng thành một chuỗi.

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

Thí dụ

g[4]

đầu ra


Nếu đầu ra có thể được cung cấp dưới dạng một mảng, hàm gsẽ không cần thiết.

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 "}}


Hình thức Infix có thể được sử dụng trong một số lĩnh vực.
LegionMammal978

3

MATLAB, 61 89 byte

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

Tôi sẽ xem nếu tôi có thể làm cho nó xuống một chút. Không chắc chắn mặc dù.

Điều này tạo ra một mảng gồm tất cả các chữ cái từ A đến Z theo sau là 0 đến 9, sau đó lấy một hình xoắn ốc và sử dụng nó để sắp xếp dữ liệu theo đúng thứ tự. Mảng sau đó được xoay theo số lượng người dùng chỉ định và sau đó in ra.

Đầu ra luôn sử dụng các khoảng trắng hàng đầu như được cho phép bởi câu hỏi (thực tế không phải trả thêm chi phí byte, thay vào đó, nó có thể thực hiện các khoảng trắng ở cuối). Đây là một ví dụ:

 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

Như tôi thấy rằng các khoảng trắng là bắt buộc, mã gốc này (cho 61) không hợp lệ vì nó không thêm khoảng trắng giữa mỗi ký tự. Nhưng tôi sẽ thêm nó ở đây để tham khảo.

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

và sản xuất:

ABCDEF
TUVWXG
S567YH
R498ZI
Q3210J
PONMLK

2

JavaScript ES6, 165 172

Xoay đơn giản, bắt đầu từ một chuỗi mã hóa cứng

Lưu ý 1 byte lưu 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`
`)

Đoạn kiểm tra:

// 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>


Bạn có thể đặt các ký tự dòng mới bên trong các chuỗi mẫu `<newline>`ngắn hơn một byte `\n`.
dùng81655

@ user81655 thx, thậm chí đếm 1 byte, nhưng dù sao nó cũng rất dài
edc65

1

Pyth - 60 byte

Hardcodes chuỗi và sử dụng các hoạt động ma trận để có được tất cả các tùy chọn.

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

Phòng thử nghiệm .


2
+<G6"thay vì "ABCDEFtiết kiệm 2 byte.
PurkkaKoodari

1

Ruby, 173 byte

->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]]]}

Ung dung:

-> 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]]]
}

Sử dụng:

->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

Python, 152 byte

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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.