From 15c7ffdd4f73372fadb7865d3cf02e4caafc2e17 Mon Sep 17 00:00:00 2001 From: royus Date: Tue, 23 Jul 2019 17:17:10 +0900 Subject: [PATCH] w/o lining --- README.md | 6 + io.c | 28 ++- main | Bin 0 -> 20236 bytes main.dSYM/Contents/Info.plist | 20 ++ main.dSYM/Contents/Resources/DWARF/main | Bin 0 -> 17831 bytes solver.c | 318 ++++++++++++++++++++++-- 6 files changed, 341 insertions(+), 31 deletions(-) create mode 100644 README.md create mode 100755 main create mode 100644 main.dSYM/Contents/Info.plist create mode 100644 main.dSYM/Contents/Resources/DWARF/main diff --git a/README.md b/README.md new file mode 100644 index 0000000..165f761 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +Usage: + +... +!gcc *.c -O0 -lm -g -o main -Wall; +!./main +... diff --git a/io.c b/io.c index 7df667f..40df260 100644 --- a/io.c +++ b/io.c @@ -1,5 +1,5 @@ /* io.c */ -/* Last Change: 2019/06/03 (Mon) 06:32:01. */ +/* Last Change: 2019/07/23 (Tue) 17:06:53. */ #include #include"io.h" @@ -30,7 +30,7 @@ void read_problem(void){ reset_parameters(); int x,y; //size of block int i,j,k; - int nowx=0,nowblock=1,num=0; //used for block reading + int nowx=0,nowblock=1,num=0,nonzero=0; //used for block reading char c,str[32]; // must be 20 or more scanf(" %s",str); //SIZE scanf(" %hd",&W); @@ -56,19 +56,24 @@ void read_problem(void){ nowblock=1; gets(str); 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 literal 0 HcmV?d00001 diff --git a/main.dSYM/Contents/Info.plist b/main.dSYM/Contents/Info.plist new file mode 100644 index 0000000..fe7fecd --- /dev/null +++ b/main.dSYM/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleIdentifier + com.apple.xcode.dsym.main + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + dSYM + CFBundleSignature + ???? + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/main.dSYM/Contents/Resources/DWARF/main b/main.dSYM/Contents/Resources/DWARF/main new file mode 100644 index 0000000000000000000000000000000000000000..2ce32e73f4be60b8e4cb499a93e09eeba7ab9fbb GIT binary patch literal 17831 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 #include #include"solver.h" #include"io.h" -/* #include */ /* #include */ /* #include */ /* #include */ /* #include */ +#define DEBUG 0 +#define abs(a) ((a) < 0 ? - (a) : (a)) -short int connected[MAXLINE]={0}; //if line connected:2, if one end:1, otherwize:0 +/* short int connected[MAXLINE+1]={0}; //if line connected:2, if one end:1, otherwize:0 */ short int board_beta[MAXSIZE][MAXSIZE]; //big board data //edge:1~MAXLINE, line:-1~-MAXLINE, none:0, wall:SHRT_MIN -short int rank[MAXBLOCK+1]; +short int rank[MAXBLOCK+1]; //ranking of point below, 0:unused, 1~ +short int point[MAXBLOCK+1]; //XYZ +//X: search priority, Y: number of edges in board, Z: number of edges in block +short int first_block=1; +short int costrank[1+MAXBLOCK*MAXBLOCK][2]; //ranking of cost: block being in (costrank[ranking][0],costrank[ranking][0]) -void reset_board(void){ - int i,j; +void print_board_beta(void){ + short int i,j; + for(i=0;ij) + rank[i]++; + } + if(DEBUG){ + for(i=1;i<=blocks;i++){ + printf("%d ",rank[i]); + } + printf("\n"); + } + return; +} + +void reset(void){ //excluding init_points + short int i,j; for(i=0;i0) //if edge exists + point[i]++; + } + update_ranks(); return; } -void translate(void){ - int i,j; - int minw=MAXSIZE-1,maxw=0,minh=MAXSIZE-1,maxh=0; +void add_point(short int blockid,short int lineid){ //use only once + short int i,j; + for(i=1;i<=blocks;i++) + if(i!=blockid) + for(j=1;j<=4;j++) + if(block_data[i][j][2]==lineid) //if edge exists + point[i]+=10; + return; +} + +/* short int random(short int id){ //edit this to randomly place blocks */ +/* return id; */ +/* } */ + +short int search_placable(short int blockid){ //calc the cost (sum of Euclidean distance of lines), returns the number of places + short int cost[MAXSIZE][MAXSIZE][2]; //cost[x][y][0]:cost, cost[x][y][1]:rank + short int i,j,k,l,index=0; + short int place[5][2]; //(relative) place of edge #block_data[blockid][1-4][] (x,y) + short int blockw=0,blockh=0; + if(block_data[blockid][2][2]==-1){ //if monomino + return 1; + } + /* calc cost */ + for(k=1;k<=4;k++){ + place[k][0]=SHRT_MIN; + place[k][1]=SHRT_MIN; + for(i=0;i0 && board_beta[i][j]==block_data[blockid][k][2]){ + place[k][0]=i-block_data[blockid][k][0]; + place[k][1]=i-block_data[blockid][k][1]; + } + } + /* printf("%d, %d\n",place[k][0],place[k][1]); */ + } + for(k=1;k<=4;k++){ + if(block_data[blockid][k][0]>blockw) + blockw=block_data[blockid][k][0]; + if(block_data[blockid][k][1]>blockh) + blockh=block_data[blockid][k][1]; + } + /* printf("%d: %d, %d\n",blockid,blockw,blockh); */ + for(i=0;i=MAXSIZE || j+blockh>=MAXSIZE) //out of board + cost[i][j][0]=-1; + else if( 0!=board_beta[i+block_data[blockid][1][0]] [j+block_data[blockid][1][1]] //alredy something + || 0!=board_beta[i+block_data[blockid][2][0]] [j+block_data[blockid][2][1]] + || 0!=board_beta[i+block_data[blockid][3][0]] [j+block_data[blockid][3][1]] + || 0!=board_beta[i+block_data[blockid][4][0]] [j+block_data[blockid][4][1]]) + cost[i][j][0]=-1; + else{ + cost[i][j][0]=0; + /* printf("%d, %d\n",abs(i-place[k][0]),abs(j-place[k][1])); */ + /* printf("%d\n",abs(i-place[k][0])+abs(j-place[k][1])); */ + for(k=1;k<=4;k++){ + if(place[k][0]!=SHRT_MIN) + cost[i][j][0]+=abs(i-place[k][0]); + if(place[k][1]!=SHRT_MIN) + cost[i][j][0]+=abs(j-place[k][1]); + } + if(cost[i][j][0]==0) + cost[i][j][0]=abs(i-MAXSIZE/2)+abs(j-MAXSIZE/2); + /* cost[i][j][0]+=(short int)abs((int)(i-place[k][0]))+(short int)abs((int)(j-place[k][1])); */ + cost[i][j][0]=10000-cost[i][j][0]; + /* printf("%d\n",cost[i][j][0]); */ + } + } + } + //ok + /* calc costrank */ + for(i=0;ik || (i==k&&j>l))) + cost[i][j][1]++; + for(i=0;i0){ + board_beta[x+block_data[blockid][1][0]] [y+block_data[blockid][1][1]]=block_data[blockid][1][2]; + add_point(blockid,block_data[blockid][1][2]); + }else{ + board_beta[x+block_data[blockid][1][0]] [y+block_data[blockid][1][1]]=SHRT_MIN; + } + if(block_data[blockid][2][2]!=-1){ //if not monomino + for(i=2;i<=4;i++) + if(block_data[blockid][i][2]>0){ + board_beta[x+block_data[blockid][i][0]] [y+block_data[blockid][i][1]]=block_data[blockid][i][2]; + add_point(blockid,block_data[blockid][i][2]); + }else{ + board_beta[x+block_data[blockid][i][0]] [y+block_data[blockid][i][1]]=SHRT_MIN; + } + } + return; +} + +void erase_line(short int lineid){ + short int i,j; + if(lineid==0) + return; + for(i=0;i0){ //if block exists + if(block_data[i][j][2]==block_data[blockid][1][2]){ //if edge exists + point[i]-=10; + }else if(block_data[blockid][2][2]!=-1){ //if not monomino + if(block_data[i][j][2]==block_data[blockid][2][2]){ //if edge exists + point[i]-=10; + } + if(block_data[i][j][2]==block_data[blockid][3][2]){ //if edge exists + point[i]-=10; + } + if(block_data[i][j][2]==block_data[blockid][4][2]){ //if edge exists + point[i]-=10; + } + } + } + } + update_ranks(); + return; +} + +short int place_and_line(short int blockid){ + short int i,j; + if(first_block==1){ + first_block--; + place_block(blockid,MAXSIZE/2,MAXSIZE/2); + return 1; + } + j=search_placable(blockid); + for(i=1;i<=j;i++){ + place_block(blockid,costrank[i][0],costrank[i][1]); + if(try_wire(blockid)) + return 1; + remove_block(blockid); + } + return 0; +} + +void solve(void){ //solver part + short int i, flag, in_process=1; + while(in_process){ + flag=1; + for(i=1;i<=blocks;i++) + if(block_data[rank[i]][0][0]<0){ //not placed + if(!place_and_line(rank[i])){ //if not placable + point[i]+=100; + if(point[i]>10000){ //no answer + printf("Too many attempts!\n"); + in_process=0; //end solver + break; + } + reset(); + break; //solve from beginning + } + flag=0; + } + if(flag) + break; + } + return; +} + +/* void shape(void){ */ +/* return; */ +/* } */ + +void translate(void){ //translate bigboard to minimal board + short int i,j; + short int minw=MAXSIZE-1,maxw=0,minh=MAXSIZE-1,maxh=0; for(i=0;i