字母数字螺旋


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


2
需要空间吗?
Maltysen 2015年

@Maltysen是的,它们是必需的。
阿德南(Adnan)2015年

Answers:


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 ®¬¸} ·

这使用了我从未想过会有用的旋转命令

说明&&取消高尔夫

"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 2015年

是的,它可以在Firefox上运行。真好
DavidC

哦,太好了!使用一些Unicode快捷方式,您可以将字节数减少5:"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
ETHproductions 2015年

@ETHproductions之前没有看到这些,谢谢!
邪恶的羊

3

Mathematica 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' ''])

我会看看我能否把它弄下来。虽然不确定。

这将创建一个由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>`中,比短1个字节`\n`
user81655 2015年

@ user81655 thx,即使1个字节也是如此,但是它是如此之长
edc65


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

取消高尔夫:

-> 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))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.