ASCII कला ब्रेसेनहैम लाइन ड्राइंग


17

सबसे छोटा संभव प्रोग्राम लिखें जो ASCII कला में ब्रेसेनहैम रेखा खींचता है। आपके प्रोग्राम को दो पूर्णांकों xऔर y(कमांड लाइन या स्टड, अपनी पसंद) लेना चाहिए और एक एएससीआईआई रेखा खींचना चाहिए जो ऊपरी बाएं में शुरू होती है और दाएं xइकाइयों और नीचे yइकाइयों में जाती है। आपको ब्रेशेनहैम के एल्गोरिदम के अनुसार पात्रों _और \पात्रों का उपयोग करना चाहिए और उन्हें सही स्थान पर रखना चाहिए

आप मान सकते हैं x >= y, इसलिए किसी भी ऊर्ध्वाधर खंड की आवश्यकता नहीं है।

ध्यान दें कि क्योंकि आप _चरित्र का उपयोग कर रहे हैं, इसलिए आपके साथ एक पंक्ति y=3के लिए पाठ की 4 पंक्तियों को आउटपुट करने की आवश्यकता होगी (और जब आप आवश्यक न हों तो एक प्रमुख रिक्त पंक्ति का उत्सर्जन कर सकते हैं)।

उदाहरण:

11 3
_
 \___
     \___
         \_
11 1
_____
     \_____

5 4

\
 \_
   \
    \

उन बिंदुओं के लिए जो बिल्कुल आधे रास्ते पर हैं, आप या तो गोलाई चुन सकते हैं:

10 1
____
    \_____
or
_____
     \____

जवाबों:


7

पर्ल, 74

/ /;print int(.5+$_*$'/$`)>int(.5+--$_*$'/$`)?$/.$"x$_.'\\':'_'for 1..$`

-nविकल्प के साथ चलाएँ (कोड आकार में गिना गया)।

$ perl -n bresenham.pl <<<'11 3'
_
 \___
     \___
         \_
$ perl -n bresenham.pl <<<'11 1'
_____
     \_____
$ perl -n bresenham.pl <<<'5 4'

\
 \_
   \
    \
$ perl -n bresenham.pl <<<'10 1'
____
    \_____

5

C 136 123 वर्ण

z,x,y,i,f;main(){for(scanf("%d%d",&x,&y);i<=x;i++){f=f?printf("_"):1;z+=y;if(2*z>=x&&i<x)f=0,z-=x,printf("\n%*c",i+1,92);}}

4

डेहरी, 109

काफी छोटा है अगर आप मुझसे पूछें:

var x,y,i:Word;begin Read(x,y);for i:=1to(x)do if(i*y+x div 2)mod x<y then Write(^J,'\':i)else Write('_')end.

2 पूर्णांक कमांड लाइन से पढ़े जाते हैं।

नई ^Jपंक्ति शायद ही कभी इस्तेमाल किए गए वाक्यविन्यास (जिसका अर्थ है लाइनफ़ीड) द्वारा लिखा गया है , निम्न ' \' वर्ण अल्पज्ञात वाक्यविन्यास का उपयोग करते हुए प्रेरित है Write(string:width):।

यह divपूर्णांक-विभाजन (केवल के बजाय \) के लिए एक पिटी डेल्फी है । ठीक है...


बहुत साफ सुथरा और छोटा। Read(input,x,y)को छोटा किया जा सकता है read(x,y), और इसके बिना programऔर apptypeयह 157 अक्षर बन जाता है।
राउटर वैन निफ्ट्रिक

@Wouter van Nifterick: कुछ घंटों बाद और अब यह 109 वर्णों तक नीचे है! लगता है कि लेफ्ट जीतने के लिए बहुत कुछ नहीं है ...
PatrickvL

यह यहाँ लिखने का एक चतुर प्रयोग है। मुझे लगा कि पुनर्लेखन if(i*y+x div 2)mod x<y thenसे if(i*y*2+x)mod(x*2)<y*2thenमदद मिल सकती है, लेकिन यह पात्रों की सटीक समान राशि है।
राउटर वैन निफ्ट्रिक

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.