DELETED src/test.d Index: src/test.d ================================================================== --- src/test.d +++ src/test.d @@ -1,395 +0,0 @@ -import std.algorithm; -import std.array; -import std.conv; -import std.stdio; -import std.string; -import std.typecons; -import core.stdc.signal; -import core.stdc.stdlib; -import dfl.all; - -class Map -{ - private char[][] data; - bool dead = false; - bool cleared = false; - int water = 0; - int flooding = 0; - int water_proof = 10; - int underwater = 0; - int flooding_counter = 0; - - this(File input) - { - string line; - while( (line=input.readln().chomp()).length ) - data ~= line.dup; - - int width = 0; - foreach(s; data) - width = max(width, s.length); - - // space padding and sentinels - foreach(ref s; data) { - int p = s.length; - s.length = width; - s[p..$] = ' '; - s = '#' ~ s ~ '#'; - } - - // vertical sentinel - char[] sen = new char[width+2]; - sen[] = '#'; - data = sen.dup ~ data ~ sen; - - // flooding - water = H-1; - while( (line=input.readln()).length ) { - string[] ss = line.split(); - if(ss.length==2 && ss[0]=="Water") - water = H-1 - ss[1].to!int(); - else if(ss.length==2 && ss[0]=="Flooding") - flooding = ss[1].to!int(); - else if(ss.length==2 && ss[0]=="Waterproof") - water_proof = ss[1].to!int(); - } - } - - @property const - { - int W() { return data[0].length; } - int H() { return data.length; } - string toString() { - string result; - foreach(i,s; data) { - if(i) result ~= '\n'; - result ~= s.idup; - } - return result; - } - } - - int command_R() { if(dead)return 0; write("R"); return move(0, +1); } - int command_L() { if(dead)return 0; write("L"); return move(0, -1); } - int command_U() { if(dead)return 0; write("U"); return move(-1, 0); } - int command_D() { if(dead)return 0; write("D"); return move(+1, 0); } - int wait() { if(dead)return 0; update(); write("W"); return -1; } - int abort() { if(dead)return 0; cleared=true; write("A"); return gained*25; } - - int move(int dy, int dx) { - foreach(y,s; data) - foreach(x,c; s) - if(c == 'R') - return move(dy, dx, y, x); - assert(false); - } - - int gained = 0; // TODO: atode naosu - int move(int dy, int dx, int y, int x) { - if(dead) - return 0; - int score = 0; - if(data[y+dy][x+dx]=='\\') { - score += 25; - ++gained; - } - if(data[y+dy][x+dx]=='O') { - score += gained*50; - cleared = true; - } - - if(data[y+dy][x+dx]==' ' || data[y+dy][x+dx]=='.' - || data[y+dy][x+dx]=='\\' || data[y+dy][x+dx]=='O') { - data[y][x]=' '; - data[y+dy][x+dx]='R'; - } else if(dy==0 && data[y+dy][x+dx]=='*' && data[y+2*dy][x+2*dx]==' ') { - data[y][x]=' '; - data[y+dy][x+dx]='R'; - data[y+2*dy][x+2*dx]='*'; - } - update(); - return score-1; - } - - void update() { - char[][] next; - foreach(y,s; data) - next ~= s.dup; - - bool lambda = false; - for(int y=1; y+1=1; --y) - for(int x=1; x+1 water_proof) - dead = true; - } - flooding_counter ++; - if(flooding_counter == flooding) { - flooding_counter = 0; - water --; - } - } - } - - int clever() - { - if(dead) - return 0; - int sy,sx; - int[] ly,lx; - int oy,ox; - for(int y=0; y