Options -s and -p

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

@ -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 <file> 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 <file> 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");

@ -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 */

Loading…
Cancel
Save