ASCII art การวาดเส้น Bresenham


17

เขียนโปรแกรมที่สั้นที่สุดที่วาดเส้น Bresenham ในรูปแบบ ASCII โปรแกรมของคุณควรใช้จำนวนเต็มสองจำนวนxและy(บรรทัดคำสั่งหรือ stdin, ตัวเลือกของคุณ) และวาดบรรทัด ASCII ซึ่งเริ่มต้นที่ด้านซ้ายบนและไปxหน่วยที่ถูกต้องและyหน่วยลง คุณต้องใช้_และ\ตัวละครและวางไว้ในตำแหน่งที่ถูกต้องตามอัลกอริทึมของ Bresenham

คุณอาจถือว่าx >= yดังนั้นจึงไม่จำเป็นต้องมีเซ็กเมนต์แนวตั้ง

โปรดทราบว่าเนื่องจากคุณกำลังใช้_อักขระสำหรับบรรทัดที่y=3คุณอาจต้องแสดงข้อความออก 4 บรรทัด (และคุณอาจปล่อยบรรทัดว่างนำหน้าเมื่อไม่จำเป็น)

ตัวอย่าง:

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

5 4

\
 \_
   \
    \

สำหรับคะแนนที่ครึ่งทางคุณสามารถเลือกปัดเศษได้:

10 1
____
    \_____
or
_____
     \____

คำตอบ:


7

Perl, 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

Dephi, 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 เต็มอ่านจากบรรทัดคำสั่ง

ขึ้นบรรทัดใหม่ที่เขียนโดยสินค้า seldomly ^Jไวยากรณ์ (หมายถึงเลื่อนบรรทัด) ดังต่อไปนี้ ' \ตัวละคร' Write(string:width)จะเยื้องใช้ไวยากรณ์ที่รู้จักกันน้อย:

มันเป็น Delty ที่โหดเหี้ยมdivสำหรับจำนวนเต็มหาร (แทนที่จะเป็นเพียง\) อ่า ...


สวยเนี๊ยบและสั้น Read(input,x,y)สามารถย่อให้สั้นลงread(x,y)และไม่ใส่ก็ได้programและapptypeจะกลายเป็น 157 อักขระ
Wouter van Nifterick

@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สามารถช่วย แต่ก็เป็นจำนวนเงินเดียวกันที่แน่นอนของตัวละคร
Wouter van Nifterick

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.