Tulis program atau fungsi yang mencetak string input di sekitar lingkaran diskrit yang memiliki radius minimum yang mungkin. Misalnya, untuk input This is an example
, program Anda harus menampilkan:
a si
n s
i
e h
x T
a
m
p
le
Generasi lingkaran
Anda harus menggunakan algoritma lingkaran Midpoint untuk menghitung koordinat setiap titik lingkaran diskrit. Anda dapat menemukan contoh tentang bagaimana menerapkan algoritma ini di halaman Wikipedia ini .
Berikut adalah kode pseudo dari algoritma (berdasarkan pada contoh C Wikipedia):
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
Anda dapat menggunakan algoritma yang berbeda jika dan hanya jika itu menghasilkan lingkaran yang sama persis dengan yang dihasilkan oleh algoritma Midpoint circle, untuk semua radio .
Lingkaran harus memiliki radius sekecil mungkin yang masih memungkinkan untuk menulis semua huruf dari input.
Jika lingkaran berakhir dengan lebih banyak poin daripada jumlah karakter dalam string, maka karakter yang mengisi terakhir adalah spasi .
Karakter pertama dari input harus dicetak pada titik dengan koordinat (Radius,0)
. Karakter-karakter selanjutnya dicetak dengan cara yang berlawanan arah jarum jam.
Input
Input adalah string karakter ASCII mana saja antara spasi (32) dan tilde
~
(126).
Anda dapat berasumsi bahwa input akan selalu valid, lebih pendek dari 256 karakter dan setidaknya 5 karakter.
Input dapat diambil dari STDIN, atau sebagai parameter fungsi, atau yang serupa.
Keluaran
Anda dapat menampilkan hasilnya ke STDOUT, atau mengembalikannya sebagai string dari suatu fungsi.
Anda mungkin memiliki spasi tambahan, asalkan tidak menyebabkan garis melebihi garis terpanjang (garis tengah) (dengan demikian, garis tengah tidak dapat memiliki spasi tambahan).
Garis trailing baru diizinkan.
Uji kasus
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
Mencetak gol
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
void
untuk 5 byte, dan mendeklarasikan beberapa bilangan bulat dalam cakupan global untuk beberapa byte lagi, karena variabel dalam lingkup global tanpa jenis diasumsikanint
dan secara otomatis diinisialisasi ke0
.C, 494 Bytes
Yang ini menggunakan algoritma lingkaran Midpoint aktual:
Kode De-golf:
sumber