Mümkün olan en düşük yarıçapa sahip ayrı dairenin çevresine bir giriş dizesi yazdıran bir program veya işlev yazın. Örneğin, giriş This is an example
için programınızın çıktısı:
a si
n s
i
e h
x T
a
m
p
le
Çember üretimi
Ayrık dairenin her bir noktasının koordinatlarını hesaplamak için Orta nokta daire algoritmasını kullanmalısınız . Bu algoritmanın nasıl uygulanacağıyla ilgili örnekleri bu Wikipedia sayfasında bulabilirsiniz .
İşte algoritmanın sözde kodu (Wikipedia'nın C örneğine dayanarak):
integer x = radius
integer y = 0
int decisionCriterion = 1 - x
while y <= x
point at coordinates (x,y) belongs to the circle // Octant 1
point at coordinates (y,x) belongs to the circle // Octant 2
point at coordinates (-x,y) belongs to the circle // Octant 4
point at coordinates (-y,x) belongs to the circle // Octant 3
point at coordinates (-x,-y) belongs to the circle // Octant 5
point at coordinates (-y,-x) belongs to the circle // Octant 6
point at coordinates (x,-y) belongs to the circle // Octant 7
point at coordinates (y,-x) belongs to the circle // Octant 8
y++
if decisionCriterion <= 0
decisionCriterion += 2 * y + 1
else
x--
decisionCriterion += 2 * (y - x) + 1
end while
Tüm yarıçaplar için ve yalnızca Orta Nokta çemberi algoritmasının ürettiği aynı çevreleri üretiyorsa ve farklı bir algoritma kullanabilirsiniz .
Daire , girişin tüm harflerini yazmaya izin veren mümkün olan en küçük yarıçapa sahip olmalıdır .
Daire, dizedeki karakter sayısından daha fazla nokta ile sonuçlanırsa, son dolgu karakterleri boşluk olur .
Girişin ilk karakteri koordinatlarla noktaya yazdırılmalıdır (Radius,0)
. Sonraki karakterler saat yönünün tersine yazdırılır.
Girdiler
Giriş, boşluk (32) ile dalga işareti
~
(126) arasındaki herhangi bir ASCII karakterinin dizesidir .
Girişin her zaman geçerli olacağını, 256 karakterden kısa ve en az 5 karakter uzunluğunda olduğunu varsayabilirsiniz.
Giriş STDIN'den veya bir fonksiyon parametresi veya benzer bir şey olarak alınabilir.
çıktılar
Sonucu STDOUT'a gönderebilir veya bir işlevden dize olarak döndürebilirsiniz.
Çizginin en uzun çizgiyi (orta çizgiyi) aşmasına neden olmaması koşuluyla (örneğin, orta çizginin arka boşluklara sahip olmaması), arka boşluklara sahip olabilirsiniz.
Sonunda yeni bir satıra izin verilir.
Test senaryoları
Input: Hello, World!
Output:
,ol
l
W e
o H
r
l
d!
Input: 4 8 15 16 23 42
Output:
51
8
1
6 4
2 2
3 4
Input: Programming Puzzles & Code golf
Output:
gnim
uP ma
z r
z g
l o
e r
s P
&
C
od f
e Gol
Input: Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thrakatuluk agh burzum-ishi krimpatul.
Output:
zan hsa ,
g ku
ig lu
bm ta
a b
t r
u u
l d
,
g
a z
s a
h n
n h
a s
z A
g
t
h
r
a .
k l
a u
t t
u a
l p
u m
k ri
ag k
h hi
burzum-is
puanlama
Bu kod golf , bu yüzden bayttaki en kısa cevap kazanır.
void
5 byte için bırakabilir ve global kapsamdaki değişkenlerin bazılarının varsayıldığıint
ve otomatik olarak başlatıldığı için küresel kapsamdaki tamsayıların bazılarını daha fazla bayt için bildirebilirsiniz0
.