英数字スパイラル


24

タスクは非常に単純で、入力が与えられると、次のスパイラルのいずれかを出力します。

Input = 1A左上隅から始まる文字でスパイラルを与える:

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 = 2A右上隅から始まる文字でスパイラルを与えます。

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 = 3A右下隅から始まる文字でらせんを与える:

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 = 4A左下隅から始まる文字でスパイラルを与える:

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
関連。この種は
だまされて


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

@ETHproductionsのおかげで5バイト節約

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

これは、私がこれほど便利だとは思わなかったrotateコマンドを使用します

説明&& 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のショートカットを使用すると、あなたは5でバイト数を削減することができます"FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
ETHproductions

@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

user81655のTHX、でも1バイト・カウントが、それはひどく長いとにかくそうだ@
edc65

1

Pyth-60バイト

文字列をハードコーディングし、行列演算を使用してすべてのオプションを取得します。

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

テストスイート


2
+<G6""ABCDEF2バイトを節約する代わりに。
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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.