17
2
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
_____
\____
Pretty neat and short.
Read(input,x,y)
can be shortened toread(x,y)
, and withoutprogram
andapptype
it becomes 157 characters. – Wouter van Nifterick – 2011-03-12T14:36:34.237@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 – 2011-03-13T09:47:31.747
That's a clever use of write() here. I figured that rewriting
if(i*y+x div 2)mod x<y then
toif(i*y*2+x)mod(x*2)<y*2then
could help, but it's the exact same amount of characters. – Wouter van Nifterick – 2011-03-13T14:57:07.450