# ASCII art Bresenham line drawing

Write the shortest possible program that draws a Bresenham line in ASCII art. Your program should take two integers x and y (command line or stdin, your choice) and draw an ASCII line which starts in the upper left and goes right x units and down y units. You must use _ and \ characters and place them in the correct location according to Bresenham's algorithm.

You may assume x >= y, so no vertical segments are required.

Note that because you're using the _ character, for a line with y=3 you will likely need to output 4 lines of text (and you may emit a leading blank line when it isn't necessary).

examples:

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

5 4

\
\_
\
\


For points which are exactly halfway you may choose either rounding:

10 1
____
\_____
or
_____
\____


# Perl, 74

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


Run with -n option (counted in code size).

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


# C 136 123 Characters

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);}}


## Dephi, 109

Quite small if you ask me :

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.


The 2 integers are read from the command line.

The newline is written by the seldomly used ^J syntax (meaning LineFeed), the following '\' character is indented using the little-known syntax :Write(string:width).

It's a pitty Delphi div for integer-divide (instead of just \). Ah well...

• Pretty neat and short. Read(input,x,y) can be shortened to read(x,y), and without program and apptype it becomes 157 characters. – Wouter van Nifterick Mar 12 '11 at 14:36
• @Wouter van Nifterick : A few hours later and it's down to 109 characters now! Don't think there's much to win left... – PatrickvL Mar 13 '11 at 9:47
• That's a clever use of write() here. I figured that rewriting if(i*y+x div 2)mod x<y then to if(i*y*2+x)mod(x*2)<y*2then could help, but it's the exact same amount of characters. – Wouter van Nifterick Mar 13 '11 at 14:57

# APL (Dyalog Classic), 39 bytes

{⍉↑(-1++\a)↑¨'_\'[a←-2-/⌊.5+⍵×⍺÷⍨⍳1+⍺]}
`

Try it online!