Alfanümerik sarmal


24

Görev, bir girdi verildiğinde aşağıdaki spirallerden birini basmak çok basittir:

Input = 1Asol üst köşede başlayan harf ile bir spiral verir :

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 = 2Asağ üst köşeden başlayan harf ile bir spiral verir :

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 = 3Asağ alt köşeden başlayan harf ile bir spiral verir :

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 = 4Asol alt köşeden başlayan harf ile bir spiral verir :

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

Gördüğünüz gibi, spiral hep gider saat yönünde gelen ve hamle dışarıya karşı içten .

Kurallar basit:

  • STDIN ve STDOUT veya mümkün değilse en yakın eşdeğerini kullanarak tam bir program sağlamanız gerekir.
  • Bir giriş ( 1, 2, 3, 4) verildiğinde ilgili spirali çıkar.
  • Sondaki boşluklara izin verilir
  • Sürekli kullanıldığında önde gelen boşluklara izin verilir
  • Çıktı için büyük harf kullanmanız gerekir, küçük harflere izin verilmez.
  • Bu , yani en az baytlık program kazanıyor!

3
İlgili . Bu tür bir dupe gibi geliyor ama birini bulamıyorum: P
FryAmTheEggman


2
boşluklar gerekli mi?
Maltysen

@Maltysen Evet, zorunludur.
Adnan

Yanıtlar:


5

CJam, 45 43 42 bayt

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

Burada test et.

açıklama

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

@ETHproductions sayesinde 5 byte kurtarıldı

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

Bu, hiç bu kadar yararlı olacağını düşünmediğim dönme komutunu kullanır.

Açıklama & & 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

Çevrimiçi deneyin


Garip bir şekilde, programı çevrimiçi olarak çalıştırmaya çalıştığımda, değişkenleri bulamadığından şikayet ediyor ve şikayet ediyor.
DavidC

@DavidCarraher Firefox'ta denemenizi öneriyorum, tercümanın en iyi çalıştığı tarayıcı bu
Downgoat

Evet, Firefox'ta çalışıyor. Güzel.
DavidC

Oh güzel! Birkaç Unicode kısayolu kullanarak, bayt sayısını beş "FGHIJK EXYZ0L DW781M CV692N BU543O ATSRQP"¸zU ®¬¸} ·
azaltabilirsiniz

@ETHproductions daha önce görmedim, teşekkürler!
Kötü Koyun

3

Mathematica 156 bayt

İlk harf dizesini "ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"bir diziye dönüştürür. bu dizi zamanları için Nestgeçerlidir , burada n giriş numarasıdır. Her satıra uygulandıktan sonra diziyi çalıştırarak çalışır . Son diziyi bir dizgeye dönüştürür.fn-1fTransposeReverseg

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

Örnek

g[4]

çıktı


Çıktı bir dizi olarak verilebilirse, fonksiyon ggereksiz olacaktır.

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


Giriş formu bazı bölgelerde kullanılabilir.
LegionMammal978

3

MATLAB, 61 89 bayt

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

Bakalım onu ​​biraz aşağı indirebilir miyim. Emin değilim.

Bu, A'dan Z'ye ve ardından 0'dan 9'a kadar tüm harflerin bir dizisini oluşturur, ardından bir spiral alır ve verileri doğru sırayla düzenlemek için kullanır. Dizi daha sonra kullanıcının belirlediği miktarla döndürülür ve ardından yazdırılır.

Çıktı, soru tarafından izin verildiği şekilde sürekli olarak önde gelen alanları kullanır (aslında ek bir bayt maliyeti olmadan, bunun yerine izleyen boşluklar yapabilir). İşte bir örnek:

 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

Boşlukların gerekli olduğunu gördüğüm gibi, bu orijinal kod (61 için) geçerli değildir çünkü her karakter arasına boşluk koymaz. Ama buraya referans olarak ekleyeceğim.

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

ve üretir:

ABCDEF
TUVWXG
S567YH
R498ZI
Q3210J
PONMLK

2

JavaScript ES6, 165 172

Sabit kodlu bir dizeden başlayarak basit döndürme

Not 1 bayt kaydedilen 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 pasajı:

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


Yeni satır karakterlerini kendilerinin içine koyabileceğiniz şablon dizeleri `<newline>`bir bayttan daha kısadır `\n`.
user81655

@ user81655 thx, 1 byte bile sayıyor, ama yine de çok uzun sürüyor
edc65

1

Pyth - 60 bayt

Dizgiyi kodlar ve tüm seçenekleri almak için matris işlemlerini kullanır.

jjL\ @[_CKc6"ABCDEFTUVWXGS567YHR498ZIQ3210JPONMLK"KC_K__MK)Q

Test Takımı .


2
+<G6"yerine "ABCDEF2 bayt kaydeder.
PurkkaKoodari

1

Ruby, 173 bayt

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

Kullanımı:

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

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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.