एक प्रोग्राम या फ़ंक्शन लिखें जो असतत सर्कल के चारों ओर एक इनपुट स्ट्रिंग प्रिंट करता है जिसमें न्यूनतम संभव त्रिज्या होता है। उदाहरण के लिए, इनपुट के लिए This is an example
, आपका प्रोग्राम आउटपुट होना चाहिए:
a si
n s
i
e h
x T
a
m
p
le
सर्किल पीढ़ी
आप असतत सर्कल के प्रत्येक बिंदु के निर्देशांक की गणना करने के लिए मिडपॉइंट सर्कल एल्गोरिथ्म का उपयोग करेंगे । आप इस विकिपीडिया पृष्ठ पर इस एल्गोरिथ्म को कैसे लागू करें, इस पर उदाहरण पा सकते हैं ।
यहाँ एल्गोरिथ्म का छद्म कोड है (विकिपीडिया के C उदाहरण पर आधारित):
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
आप एक अलग एल्गोरिथ्म का उपयोग कर सकते हैं यदि और केवल अगर यह ठीक उसी सर्कल का उत्पादन करता है जो मिडपॉइंट सर्कल एल्गोरिदम का उत्पादन करता है, सभी त्रिज्याओं के लिए ।
सर्कल में सबसे छोटा संभव त्रिज्या होना चाहिए जो अभी भी इनपुट के सभी अक्षरों को लिखने की अनुमति देता है।
यदि सर्कल स्ट्रिंग में वर्णों की संख्या से अधिक बिंदुओं के साथ समाप्त होता है, तो अंतिम भरने वाले अक्षर रिक्त स्थान होंगे ।
निर्देशांक के साथ बिंदु पर इनपुट का पहला वर्ण मुद्रित किया जाना चाहिए (Radius,0)
। बाद के पात्रों को एक एंटीकॉकवाइज फैशन में मुद्रित किया गया है।
इनपुट
इनपुट अंतरिक्ष (32) और टिल्ड
~
(126) के बीच किसी भी ASCII वर्ण का एक स्ट्रिंग है ।
आप मान सकते हैं कि इनपुट हमेशा मान्य होगा, 256 वर्णों से छोटा और कम से कम 5 वर्ण लंबा होगा।
इनपुट STDIN से लिया जा सकता है, या एक फ़ंक्शन पैरामीटर के रूप में, या कुछ भी समान हो सकता है।
आउटपुट
आप परिणाम को STDOUT में आउटपुट कर सकते हैं, या इसे फ़ंक्शन से स्ट्रिंग के रूप में वापस कर सकते हैं।
आपके पास अनुगामी स्थान हो सकते हैं, बशर्ते कि वह सबसे लंबी रेखा (मध्य एक) से अधिक की रेखा का कारण न बने (जैसे, मध्य रेखा में अनुगामी स्थान नहीं हो सकते)।
अनुगामी नई लाइन की अनुमति है।
परीक्षण के मामलों
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
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स में सबसे कम जवाब जीतता है।
void
5 बाइट्स के लिए ड्रॉप कर सकते हैं , और कुछ और बाइट्स के लिए वैश्विक स्कोप में कुछ पूर्णांक घोषित कर सकते हैं , क्योंकि एक प्रकार के बिना वैश्विक स्कोप में चर ग्रहणint
किए जाते हैं और स्वचालित रूप से आरंभिक होते हैं0
।