Schreiben Sie ein Programm oder eine Funktion, die eine Eingabezeichenfolge um den diskreten Kreis mit dem kleinstmöglichen Radius druckt. Für die Eingabe This is an example
sollte Ihr Programm beispielsweise Folgendes ausgeben:
a si
n s
i
e h
x T
a
m
p
le
Kreiserzeugung
Sie müssen den Mittelpunktkreis-Algorithmus verwenden , um die Koordinaten jedes Punkts des diskreten Kreises zu berechnen. Beispiele zur Implementierung dieses Algorithmus finden Sie auf dieser Wikipedia-Seite .
Hier ist der Pseudocode des Algorithmus (basierend auf dem C-Beispiel von 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
Sie können genau dann einen anderen Algorithmus verwenden, wenn er für alle Radien genau dieselben Kreise erzeugt wie der Mittelpunktkreis-Algorithmus .
Der Kreis muss den kleinstmöglichen Radius haben , mit dem noch alle Buchstaben der Eingabe geschrieben werden können.
Wenn der Kreis mehr Punkte als die Anzahl der Zeichen in der Zeichenfolge enthält, sind die letzten Füllzeichen Leerzeichen .
Das erste Zeichen der Eingabe muss mit Koordinaten auf den Punkt gedruckt werden (Radius,0)
. Die nachfolgenden Zeichen werden gegen den Uhrzeigersinn gedruckt.
Eingänge
Die Eingabe ist eine Zeichenfolge aus beliebigen ASCII-Zeichen zwischen dem Leerzeichen (32) und der Tilde
~
(126).
Sie können davon ausgehen, dass die Eingabe immer gültig ist, kürzer als 256 Zeichen und mindestens 5 Zeichen lang.
Die Eingabe kann von STDIN oder als Funktionsparameter oder ähnliches erfolgen.
Ausgänge
Sie können das Ergebnis entweder an STDOUT ausgeben oder es als Zeichenfolge von einer Funktion zurückgeben.
Möglicherweise haben Sie nachgestellte Leerzeichen, vorausgesetzt, die Zeile überschreitet nicht die längste Zeile (die mittlere) (als solche darf die mittlere Zeile keine nachgestellten Leerzeichen enthalten).
Eine abschließende neue Zeile ist zulässig.
Testfälle
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
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
void
für 5 Bytes löschen und einige der Ganzzahlen im globalen Bereich für einige weitere Bytes deklarieren, da Variablen im globalen Bereich ohne Typ angenommenint
und automatisch auf initialisiert werden0
.