Options -s and -p

main
Thomas Ba. 14 years ago
parent b40834c661
commit 093d838b5f

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

@ -138,7 +138,13 @@ int main(int argc, char **argv) {
} }
/* falls nicht gelöst werden soll: */ /* falls nicht gelöst werden soll: */
if(solve == 0) { 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); exit(0);
} }
/* Sudoku Loesen, Loseung ausgeben und in Datei schreiben */ /* Sudoku Loesen, Loseung ausgeben und in Datei schreiben */

Loading…
Cancel
Save