เกลียวและตัวอักษร


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

@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

บันทึก 5 ไบต์ด้วย @ETHproductions

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

นี่ใช้คำสั่งหมุนซึ่งฉันไม่เคยคิดว่าจะมีประโยชน์มาก

คำอธิบาย && ไม่อัปโหลด

"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 ไม่เคยเห็นมาก่อนขอบคุณ!
Evil Sheep

3

Mathematica 156 ไบต์

แปลงสตริงตัวอักษรเริ่มต้น"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"ให้เป็นอาร์เรย์ Nestใช้fกับอาร์เรย์n-1นั้นโดยที่ n คือหมายเลขอินพุต fทำงานโดยTranspose- อาร์เรย์แล้วตามด้วย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

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

@ user81655 ขอบคุณแม้จำนวน 1 ไบต์ แต่มันก็นานมากแล้วล่ะ
edc65

1

Pyth - 60 ไบต์

เข้ารหัสสตริงและใช้การดำเนินการกับเมทริกซ์เพื่อรับตัวเลือกทั้งหมด

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

Test Suite


2
+<G6"แทนการ"ABCDEFบันทึก 2 ไบต์
PurkkaKoodari

1

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

Ungolfed:

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

Python ขนาด 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.