Code Golf Asked by Keith Randall on December 6, 2020
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
_____
____
/ /;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'
____
_____
Correct answer by J B on December 6, 2020
F…·¹θ⎇‹﹪⁺×ιη⌊∕θ²θ綦_
It took a while to figure out the right formula, but it now works! Credit to the Delphi answer.
Link is to verbose version of code.
Answered by Razetime on December 6, 2020
Answered by ngn on December 6, 2020
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...
Answered by PatrickvL on December 6, 2020
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);}}
Answered by fR0DDY on December 6, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP