Yin and yang: Difference between revisions

Simplified D code
(→‎{{header|SVG}}: Added a rendering.)
(Simplified D code)
Line 5:
 
=={{header|D}}==
<lang d>import std.stdio, std.string, std.algorithm, std.array;
{{incorrect|D|The output does not sufficiently resemble a Yin-yang symbol.}}
 
<lang d>import std.stdio, std.string, std.algorithm ;
struct SquareBoard {
enum W : char { Void =' 0', Yan = 1'.', Yin = 2'#', I ='?' 3} ;
 
enum Tiles = [" ","·","#","?"] ;
immutable int size scale;
intW[][] pix ;
alias int delegate(int) Draw ;
 
this(int s) {
struct Board { // a square board
immutablescale int scale= s;
pix = new intW[][](sizes * 12 + 1,size s * 12 + 1) ;
immutable int size ;
}
int[][] pix ;
 
this(int s) {
string toString() {
scale = s ;
auto rows = map!q{ (cast(char[])a).idup }(pix);
size = s*12 ;
return join(array(rows), "\n");
pix = new int[][](size + 1,size + 1) ;
}
 
alias pix this ;
void drawCircle(Draw)(int cx, int cy, int cr, Draw action) {
auto rr = (cr scale* =scale) s^^ 2;
static string str(int v) { return Tiles[(v % 4)] ; }
foreach (y, ref r; pix)
string toString foreach (x, ref v; r) {
string[]auto sdx = x - cx * scale;
foreach(auto rdy ;= pix)y - cy * scale;
if (dx ^^ 2 s+ ~dy ^^ 2 <= reduce!"a~b"(map!str(rrr)) ;
return s.join v = action("\n"x) ;
}
}
 
void drawCircle(int cx, int cy, int cr, Draw action) {
BoardSquareBoard yanYin() {
auto rr = (cr*scale)^^2 ;
foreach foreach(y, ref r ; pix) // clear
r[] = foreach( x , ref v W.Void; r) {
drawCircle(6, 6, 6,
auto dx = x - cx*scale ;
(int autox){ dyreturn =(x y< - cy6*scale) ? W.Yan : W.Yin; });
drawCircle(6, 3, 3, if(dx^^2int +x){ dy^^2return <=W.Yan; rr});
drawCircle(6, 9, 3, (int x) { return W.Yin ; } ) ;
v = action(x) ;
drawCircle(6, 9, 1, (int x){ return W.Yan; });
drawCircle(6, 3, 1, (int x) { return W.Yin ; } ) ;
}
alias pixreturn this ;
}
Board yanYin() {
foreach(r ; pix) // clear
r[] = 0 ;
drawCircle(6,6,6, (int x) { return (x < 6*scale) ? Yan : Yin ; }) ;
drawCircle(6,3,3, (int x) { return Yan ; } ) ;
drawCircle(6,9,3, (int x) { return Yin ; } ) ;
drawCircle(6,9,1, (int x) { return Yan ; } ) ;
drawCircle(6,3,1, (int x) { return Yin ; } ) ;
return this ;
}
}
 
void main(string[] args) {
writeln(BoardSquareBoard(2).yanYin()) ;
writeln(BoardSquareBoard(1).yanYin()) ;
}</lang>
Output:
Anonymous user