diff --git a/sudokuloeser.c b/sudokuloeser.c index 00044cd..0eb2c19 100644 --- a/sudokuloeser.c +++ b/sudokuloeser.c @@ -38,9 +38,10 @@ typedef struct sudoku { } sudoku; /* Allgemeine Funktionen */ - int s_einlesen(char*, sudoku*); /* Einlesen aus Datei*/ + int s_einlesen(char*, sudoku*); /* Einlesen aus Datei */ void s_ausgabe(sudoku*,int); /* Auf dem bildschirm ausgeben */ void s_ausgabe_unicode(sudoku*,int); /* Auf dem bildschirm ausgeben, Unicode Rahmenelemente */ + void s_plain(sudoku*); /* Plaintext (wie eingabe-datei) */ void print_help(int,char**); /* "Hilfe" ausgeben */ /* Loeserfunktionen */ /* Funktion fuer Backtracking */ @@ -60,10 +61,13 @@ const int OUTPUT_COLOR=1; const int OUTPUT_COLOR=0; #endif +/* Ausgabe unterdrücken */ +int silent = 0; + int main(int argc, char **argv) { sudoku s={ {{0}}, {{0}}, {{{1}}}, 81 }; char* outfile = NULL; - int st=0,sl=0,ret=0; + int st=0,sl=0,ret=0,plain=0; int c,unicode=0,color=0,outfilev=0,solve=1; #ifdef linux struct timespec ts,te,l_ts,l_te; @@ -72,7 +76,7 @@ int main(int argc, char **argv) { color = 1; #endif /* Argumente auslesen */ - while ((c = getopt (argc, argv, "cho:uUn")) != -1) + while ((c = getopt (argc, argv, "cho:uUnsp")) != -1) switch(c) { case 'h': print_help(argc,argv); @@ -92,6 +96,12 @@ int main(int argc, char **argv) { case 'n': solve = 0; break; + case 's': + silent = 1; + break; + case 'p': + plain = 1; + break; case '?': if (optopt == 'c') fprintf (stderr, "Option -%c requires an argument.\n", optopt); @@ -116,47 +126,63 @@ int main(int argc, char **argv) { if(outfilev) s_write_error( outfile ,1 ); return 1; } + /* falls nicht gelöst werden soll: */ if(solve == 0) { - (unicode == 1) ? s_ausgabe_unicode(&s,color) : s_ausgabe(&s,color); + if(unicode == 1) { + s_ausgabe_unicode(&s,color); + }else if(plain == 1) { + s_plain(&s); + }else{ + s_ausgabe(&s,color); + } exit(0); } /* Sudoku Loesen, Loseung ausgeben und in Datei schreiben */ - printf("Suche...\nProbiere es mit Logik... "); + if(!silent) printf("Suche...\nProbiere es mit Logik... "); #ifdef linux clock_gettime(CLOCK_REALTIME, &l_ts); #endif sl = sl_loes(&s); if(sl != 1) { - printf("FAIL\nNun mit Backtracking... "); + if(!silent) printf("FAIL\nNun mit Backtracking... "); sl = s_loes_track(&s,0); - printf("%s\n",(sl != 1 ? "FAIL" : "OK" )); + if(!silent) printf("%s\n",(sl != 1 ? "FAIL" : "OK" )); }else{ - printf("OK\n"); + if(!silent) printf("OK\n"); } #ifdef linux clock_gettime(CLOCK_REALTIME, &l_te); #endif if(sl == 0) { if(color) - printf("\033[31;1mDas Sudoku ist nicht loesbar!!\033[0m\n"); + fprintf(stderr,"\033[31;1mDas Sudoku ist nicht loesbar!!\033[0m\n"); else fprintf(stderr,"Das Sudoku ist nicht loesbar!!\n"); if(outfilev) s_write_error( outfile , 2 ); ret = 1; }else{ - if(color) - printf("\033[32;1mLoesung gefunden:\033[0m\n\n"); - else - printf("Loesung gefunden:\n\n"); - (unicode == 1) ? s_ausgabe_unicode(&s,color) : s_ausgabe(&s,color); + if(color) { + if(!silent) printf("\033[32;1mLoesung gefunden:\033[0m\n\n"); + }else{ + if(!silent) printf("Loesung gefunden:\n\n"); + } + if(unicode == 1) { + s_ausgabe_unicode(&s,color); + }else if(plain == 1) { + s_plain(&s); + }else{ + s_ausgabe(&s,color); + } if(outfilev) s_write( outfile ,&s ); } #ifdef linux + if(!silent) { clock_gettime(CLOCK_REALTIME, &te); t = (l_te.tv_sec + l_te.tv_nsec*0.000000001)-(l_ts.tv_sec + l_ts.tv_nsec*0.000000001); printf("\nBenoetigte Zeit (loesen): %Lfs\n",t); t = (te.tv_sec + te.tv_nsec*0.000000001)-(ts.tv_sec + ts.tv_nsec*0.000000001); printf("Benoetigte Zeit (gesamt): %Lfs\n",t); + } #endif return ret; } @@ -217,6 +243,16 @@ int s_einlesen(char * path, sudoku * sf) { return 1; } +void s_plain(sudoku* s) { + int i,j; + for(i=0;i<9;i++) { + for(j=0;j<9;j++) { + printf("%d",s->feld[i][j]); + } + printf("\n"); + } +} + void s_ausgabe(sudoku* s,int color) { int i,j; for(i=0;i<9;i++) { @@ -286,7 +322,9 @@ void print_help(int argc, char **argv) { printf(" -h Diese Hilfe\n"); printf(" -o Ausgabedatei\n"); printf(" -c Keine Farbe\n"); + printf(" -p Plaintext\n"); printf(" -n Nicht loesen, nur ausgeben\n"); + printf(" -s Nur die Lösung ausgeben\n"); printf("\033[0;1mAusgabe:\033[0m\n"); printf(" \033[32;1mgruen:\033[0m Vorgegebene Werte\n"); printf(" \033[33;1mgelb:\033[0m Mit Logik gefundene Werte\n"); @@ -299,6 +337,8 @@ void print_help(int argc, char **argv) { printf(" -U Unicode Rahmenelemente (Probleme unter Windows!)\n"); printf(" -h Diese Hilfe\n"); printf(" -o Ausgabedatei\n"); + printf(" -p Plaintext\n"); + printf(" -s Nur die Lösung ausgeben\n"); printf(" -n Nicht loesen, nur ausgeben\n"); printf("By Thomas Battermann\n"); diff --git a/sudokuloeser_nstd.c b/sudokuloeser_nstd.c index 3f1d0d2..242a34c 100644 --- a/sudokuloeser_nstd.c +++ b/sudokuloeser_nstd.c @@ -138,7 +138,13 @@ int main(int argc, char **argv) { } /* falls nicht gelöst werden soll: */ if(solve == 0) { - (unicode == 1) ? s_ausgabe_unicode(&s,color) : s_ausgabe(&s,color); + if(unicode == 1) { + s_ausgabe_unicode(&s,color); + }else if(plain == 1) { + s_plain(&s); + }else{ + s_ausgabe(&s,color); + } exit(0); } /* Sudoku Loesen, Loseung ausgeben und in Datei schreiben */