এএসসিআইআই আর্ট ব্রেসেনহ্যাম লাইন অঙ্কন


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

সি 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 পূর্ণসংখ্যা কমান্ড লাইন থেকে পড়া হয়।

সম্পর্কে newline বারে বার ব্যবহৃত লিখেছেন ^Jসিনট্যাক্স (লাইনফীড অর্থ), নিম্নলিখিত ' \' অক্ষর সামান্য বিখ্যাত সিনট্যাক্স ব্যবহার ইন্ডেন্টযুক্ত হয়: Write(string:width)

এটি divপূর্ণসংখ্যা-বিভাজনের জন্য একটি জঘন্য দেলফি (কেবলমাত্র পরিবর্তে \)। আহ ভালো...


খুব সুন্দর এবং সংক্ষিপ্ত। Read(input,x,y)সংক্ষিপ্ত করা যেতে পারে read(x,y), এবং ছাড়া programএবংapptype এটি হয়ে যায় 157 টি অক্ষর।
ওয়াউটার ভ্যান নিফটারিক

@ ওয়াটার ভ্যান নিফটারিক: কয়েক ঘন্টা পরে এবং এটি এখন 109 টি অক্ষরে নেমে এসেছে! বামে জয়ের মতো আরও কিছু ভাবেন না ...
প্যাট্রিকভিএল

এটি এখানে লেখার একটি চতুর ব্যবহার ()। আমি মূর্ত যে rewriting if(i*y+x div 2)mod x<y thenথেকে if(i*y*2+x)mod(x*2)<y*2thenসাহায্য করতে পারে, কিন্তু এটা অক্ষরের সঠিক একই পরিমাণ।
ওয়াউটার ভ্যান নিফটারিক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.