Scrivi un programma o una funzione che stampa una stringa di input attorno al cerchio discreto che ha il raggio minimo possibile. Ad esempio, per l'input This is an example, il tuo programma dovrebbe produrre:
a si
n s
i
e h
x T
a
m
p
le
Generazione del cerchio
È necessario utilizzare l' algoritmo del cerchio Midpoint per calcolare le coordinate di ciascun punto del cerchio discreto. Puoi trovare esempi su come implementare questo algoritmo in questa pagina di Wikipedia .
Ecco lo pseudo codice dell'algoritmo (basato sull'esempio C di 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
È possibile utilizzare un algoritmo diverso se e solo se produce gli stessi cerchi esatti che l'algoritmo del cerchio Midpoint produce, per tutti i raggi .
Il cerchio deve avere il raggio più piccolo possibile che permetta comunque di scrivere tutte le lettere dell'input.
Se il cerchio finisce con più punti rispetto al numero di caratteri nella stringa, gli ultimi caratteri di riempimento saranno spazi .
Il primo carattere dell'input deve essere stampato sul punto con le coordinate (Radius,0). I personaggi successivi vengono stampati in senso antiorario.
ingressi
L'input è una stringa di qualsiasi carattere ASCII tra lo spazio (32) e la tilde ~(126).
È possibile supporre che l'input sia sempre valido, inferiore a 256 caratteri e lungo almeno 5 caratteri.
L'ingresso può essere preso da STDIN o come parametro di funzione o qualcosa di simile.
Uscite
È possibile emettere il risultato su STDOUT o restituirlo come stringa da una funzione.
Potresti avere spazi finali, a condizione che non faccia in modo che la linea superi la linea più lunga (quella centrale) (come tale, la linea centrale non può avere spazi finali).
È consentita una nuova riga finale.
Casi test
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
punteggio
Questo è code-golf , quindi vince la risposta più breve in byte.
voiddi 5 byte e dichiarare alcuni degli interi nell'ambito globale per alcuni byte in più, poiché le variabili nell'ambito globale senza un tipo vengono assunteinte vengono inizializzate automaticamente su0.