לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 08-06-2005, 14:26
צלמית המשתמש של fat fish
  fat fish fat fish אינו מחובר  
 
חבר מתאריך: 20.06.03
הודעות: 5,616
אתגר מספר 2

הפעם בחרתי ללכת על משהו פשוט, שכולם יוכלו להשתתף ולהראות את הידע שצברו בתכנות.
כל!!! שפת תכנות מתאימה לבעיה זו, בעיה זו היא אלגוריתמית בעיקרה - ולכן בעיני זהו אתגר ראוי בהחלט.

אין צורך בממשקים גרפיים (מי שרוצה, שיתכבד...) - ניתן בהחלט להשתמש ב-console כדי להזין את הקלט ולהוציא את הפלט.

ועכשיו לאתגר:
אני מאמין שכולכם שמעתם את השם סודוקו, כתבו עליו כתבות, דיברו עליו בחדשות והוא מציף אתרים בתקופה האחרונה.
מטרת האתגרון, לבנות תכנית שהקלט שלה יהיה לוח סודוקו, והפלט יהיה הפתרון...
להסבר על סודוקו, על החוקים וכו...הנה האתר שיתן לכם את כל התשובות (בעברית):
http://www.sudoku.name/index-hb.php

עוד לא נקבע תאריך יעד לסיום האתגרון, מצפה להשתתפות מרובה הפעם, כי זו לא עבודה קשה...(:
בהצלחה לכולם...
_____________________________________
[ זיו ]
[ fat fish ]

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 12-06-2005, 13:12
צלמית המשתמש של minimax
  משתמשת נקבה minimax minimax אינו מחובר  
 
חבר מתאריך: 28.10.01
הודעות: 10,153
שלח הודעה דרך MSN אל minimax Facebook profile
נסיון ראשון שלי לפתור
בתגובה להודעה מספר 1 שנכתבה על ידי fat fish שמתחילה ב "אתגר מספר 2"

האלגוריתם פשוט :
1. חפש משבצת פנויה ראשונה.
2. חשב את כל האפשרויות לשבץ בה מספר.
3. עבור כל אפשרות,שלח את הלוח לרקורסיה.
4. אם הגענו למצב שאין אפשרות לשבץ מספר במשבצת ריקה,אזי אחד מהניחושים שלנו בשלב הקודם הוא שגוי. במקרה כזה,הרקורסיה נסוגה לאחור לאפשרות הבאה.
5. כשאין עוד משבצות ריקות,הפאזל נגמר.

האלגוריתם שלי פתר בינתיים פאזל אחד ברמת מדיום. הוא לא הכי יעיל,ויש בו עדיין באגים. לשמחתי,זמן הריצה הוא זניח. מי עושה לי QA?

הנה היישום בdotnet.

קוד:
<%@ Page Language="VB" Debug="true" %> <script runat="server"> function Check_for_moves(board(,) as integer,m as integer,n as integer) as integer() dim i as integer,j as integer dim legal_moves(9) as integer for i=1 to 9 legal_moves(i)=0 next for i=1 to 9 if(board(m,i)<>0) then legal_moves(board(m,i))=1 end if next for i=1 to 9 if(board(i,n)<>0) then legal_moves(board(i,n))=1 end if next '3 first cubs if (m<=3) and (n<=3) then for i= 1 to 3 for j=1 to 3 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m<=3) and (n>=4 and n<=6) then for i= 1 to 3 for j=4 to 6 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m<=3) and (n>=7) then for i= 1 to 3 for j=7 to 9 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if '3 more cubes if (m>=4 and m<=6) and (n<=3) then for i= 4 to 6 for j=1 to 3 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m>=4 and m<=6) and (n>=4 and n<=6) then for i= 4 to 6 for j=4 to 6 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m>=4 and m<=6) and (n>=7) then for i= 4 to 6 for j=7 to 9 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if '3 last cubs if (m>=7) and (n<=3) then for i= 7 to 9 for j=1 to 3 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m>=7) and (n>=4 and n<=6) then for i= 7 to 9 for j=4 to 6 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if if (m>=7) and (n>=7) then for i= 7 to 9 for j=7 to 9 if board(i,j)<>0 then legal_moves(board(i,j))=1 end if next next end if return(legal_moves) end function function solve(board as integer(,),level as integer) if level>80 then return(0) dim m as integer,n as integer,i as integer,save as integer,k as integer,l as integer,found_empty as boolean found_empty=false for m=1 to 9 for n=1 to 9 if board(m,n)=0 found_empty=true exit for end if next if found_empty then exit for end if next 'response.write(m) ' response.write(" ") ' response.write(n) 'response.write(found_empty) ' response.write("<br>") if not found_empty then response.write("found borad!!!!!") response.write("<br>") for k=1 to 9 for l=1 to 9 if l=4 or l=7 then response.write("|") end if response.write(board(k,l)) response.write (" ") next if k=3 or k=6 then response.write("<br>") response.write("------------------------") end if response.write("<br>") next return(0) end if 'if m>=9 then ' for k=1 to 9 ' for l=1 to 9 ' if l=4 or l=7 then '' response.write("|") ' end if ' response.write(board(k,l)) ' response.write (" ") ' next ' if k=3 or k=6 then ' response.write("<br>") ' response.write("------------------------") ' end if ' response.write("<br>") ' next ' end if dim temp as integer()=Check_for_moves(board,m,n) for i=1 to 9 if temp(i)=0 then save=board(m,n) board(m,n)=i solve(board,level+1) board(m,n)=save end if next end function Sub Page_Load(Sender As Object, E As EventArgs) dim board(9,9) as integer board(1,1)=0 board(1,2)=7 board(1,3)=0 board(1,4)=4 board(1,5)=0 board(1,6)=0 board(1,7)=0 board(1,8)=9 board(1,9)=0 board(2,1)=6 board(2,2)=0 board(2,3)=0 board(2,4)=0 board(2,5)=0 board(2,6)=9 board(2,7)=0 board(2,8)=2 board(2,9)=0 board(3,1)=5 board(3,2)=0 board(3,3)=0 board(3,4)=8 board(3,5)=0 board(3,6)=0 board(3,7)=7 board(3,8)=0 board(3,9)=0 board(4,1)=4 board(4,2)=0 board(4,3)=0 board(4,4)=0 board(4,5)=3 board(4,6)=0 board(4,7)=0 board(4,8)=6 board(4,9)=2 board(5,1)=0 board(5,2)=0 board(5,3)=0 board(5,4)=9 board(5,5)=0 board(5,6)=5 board(5,7)=0 board(5,8)=0 board(5,9)=0 board(6,1)=2 board(6,2)=9 board(6,3)=0 board(6,4)=0 board(6,5)=4 board(6,6)=0 board(6,7)=0 board(6,8)=0 board(6,9)=7 board(7,1)=0 board(7,2)=0 board(7,3)=4 board(7,4)=0 board(7,5)=0 board(7,6)=7 board(7,7)=0 board(7,8)=0 board(7,9)=6 board(8,1)=0 board(8,2)=5 board(8,3)=0 board(8,4)=1 board(8,5)=0 board(8,6)=0 board(8,7)=0 board(8,8)=0 board(8,9)=3 board(9,1)=0 board(9,2)=6 board(9,3)=0 board(9,4)=0 board(9,5)=0 board(9,6)=3 board(9,7)=0 board(9,8)=5 board(9,9)=0 dim board2 (9,9) as integer board2(1,1)=1 board2(1,2)=1 board2(1,3)=0 board2(1,4)=3 board2(1,5)=2 board2(1,6)=1 board2(1,7)=1 board2(1,8)=1 board2(1,9)=7 board2(2,1)=4 board2(2,2)=9 board2(2,3)=7 board2(2,4)=1 board2(2,5)=6 board2(2,6)=2 board2(2,7)=5 board2(2,8)=1 board2(2,9)=1 board2(3,1)=2 board2(3,2)=1 board2(3,3)=4 board2(3,4)=1 board2(3,5)=1 board2(3,6)=7 board2(3,7)=9 board2(3,8)=2 board2(3,9)=1 board2(4,1)=1 board2(4,2)=4 board2(4,3)=1 board2(4,4)=1 board2(4,5)=7 board2(4,6)=2 board2(4,7)=1 board2(4,8)=2 board2(4,9)=3 board2(5,1)=1 board2(5,2)=7 board2(5,3)=1 board2(5,4)=1 board2(5,5)=1 board2(5,6)=5 board2(5,7)=1 board2(5,8)=4 board2(5,9)=1 board2(6,1)=9 board2(6,2)=6 board2(6,3)=1 board2(6,4)=1 board2(6,5)=3 board2(6,6)=1 board2(6,7)=1 board2(6,8)=7 board2(6,9)=1 board2(7,1)=1 board2(7,2)=1 board2(7,3)=9 board2(7,4)=6 board2(7,5)=1 board2(7,6)=1 board2(7,7)=1 board2(7,8)=1 board2(7,9)=5 board2(8,1)=1 board2(8,2)=2 board2(8,3)=1 board2(8,4)=1 board2(8,5)=2 board2(8,6)=1 board2(8,7)=7 board2(8,8)=2 board2(8,9)=6 board2(9,1)=2 board2(9,2)=2 board2(9,3)=4 board2(9,4)=2 board2(9,5)=2 board2(9,6)=1 board2(9,7)=2 board2(9,8)=2 board2(9,9)=2 dim m as integer,n as integer,t as integer for m=1 to 9 for n=1 to 9 if n=4 or n=7 then response.write("|") end if response.write(board(m,n)) response.write (" ") next if m=3 or m=6 then response.write("<br>") response.write("------------------------") end if response.write("<br>") next solve(board,1) End Sub </script> <html> <head> </head> <body> <form runat="server"> <!-- Insert content here --> </form> </body> </html>
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה


נערך לאחרונה ע"י minimax בתאריך 12-06-2005 בשעה 13:24.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 14-06-2005, 06:22
צלמית המשתמש של minimax
  משתמשת נקבה minimax minimax אינו מחובר  
 
חבר מתאריך: 28.10.01
הודעות: 10,153
שלח הודעה דרך MSN אל minimax Facebook profile
לגבי היעילות
בתגובה להודעה מספר 7 שנכתבה על ידי AlexKarpman שמתחילה ב "שתי שאלות:"

אז בוודאי שאפשר ליעל את מה שאני עושה. הסודוקו הרגיל שמפורסם בעיתונים הוא של 9 על 9,והאלגוריתם שלי פותר אותם בלי בעיות ובזמן ריצה זניח. אם אתה רוצה לפתור לוחות של 900 על 900,אולי תהיה בעיה.
אפשרות אחת לייעול שכבר חשבתי עליה : במקום לחשב את המשבצת הראשונה הריקה,צריך לקחת בכל פעם את המשבצת שיש לה הכי פחות אפשרויות שיבוץ. זה יקטין מאד את עץ הרקורסיה. אולי כדאי לשמור את כל השיבוצים האפשריים בטבלה,ולעדכן אותה בכל מהלך.

בקשר לקימפול,אז הקוד הוא סקריפט של dotnet ולא קוד שעובר קומפילציה. לצערי,לא מותקן לי קומפיילר על המחשב. אם אתה רוצה,אתה יכול להעתיק את הקוד as is לVB ולקמפל,אולי עם כמה שינויים מינוריים.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #30  
ישן 16-07-2005, 18:24
  Avidon Avidon אינו מחובר  
 
חבר מתאריך: 30.09.04
הודעות: 66
שלח הודעה דרך ICQ אל Avidon
התוכנה שלי
בתגובה להודעה מספר 1 שנכתבה על ידי fat fish שמתחילה ב "אתגר מספר 2"

אני אסביר בקצרה: בהתחלה התוכנה מנסה לפתור את לוח הסודוקו ע"י בדיקות של לוגיקה פשוטה (בדיקה האם משבצת יכולה להיות רק מספר אחד, בדיקה האם יש מספר שרק משבצת אחת בריבוע יכולה להכיל אותו וכו') - הבדיקות האלו פותרות את לוחות הסודוקו הקלים ובזה נגמר העניין. ללוחות היותר קשים, התוכנה ממשיכה עם בדיקה של רקורסיה - היא מוצאת את המשבצת הפנויה הראשונה ומשבצת בה את המספר המוך ביותר שאין לו סתירות לוגיות (כלומר שאין אותו בטור, בשורה או בריבוע של המשבצת). הפונקציה קוראת לעצמה וכך ממשיכה עד שמגיעה למשבצת פנויה שאי אפשר להכיל בה אף מספר (בגין סתירות) - במקרה כזה היא חוזרת למשבצת הקודמת ומשנה את מספרה למספר הנמוך הבא שאין לו סתירות. במידה וכעת אין מספרים שהמשבצת יכולה להכיל, חוזרים למשבצת הקודמת וכו' וכו'...
הסיבה שהתוכנה מבצעת קודם את הבדיקות הרגילות, למרות שהיא יכול הלפתור הכל בעזרת הרקורסיה, היא כדי לחסוך זמן - הבדיוקת האלה הרבה יותר מהירות ופחות זוללות זכרון.
אולי ראוי לציין שזו הפעם הראשונה שבה התנסיתי בתכנות מונחה עצמים (תכנתתי בC ואף פעם לא ב C++) וגם הפעם הראשונה שפתרתי בעיה בעזרת רקורסיה. אני שמח לדעת שזו הייתה הצלחה

קוד:
// Solve Soduku! // #include <iostream.h> #include <conio.h> #include <stdlib.h> class Soduko { private: int S[9][9]; public: void SetSoduko(); int AScan(); int BScan(); int CScan(); int DScan(); int EScan(); void Solve(int Try); void ShowSoduko(); }; void Soduko::SetSoduko() { cout << endl; int J; for(int I=0; I<9; I++) for(J=0; J<9; J++) { cout << "S[" << I << "][" << J << "]: "; cin >> S[I][J]; if(S[I][J]==0) S[I][J]=-1; } } void Soduko::ShowSoduko() { cout << endl; int J; cout << "--------------------------------------" << endl; for(int I=0; I<9; I++) { for(J=0; J<9; J++) { if(J==8) { if(S[I][J] != -1) cout << " " << S[I][J]; else cout << " "; } else if(((J+1)%3)==0) { if(S[I][J] != -1) cout << " " << S[I][J] << " ||"; else cout << " ||"; } else if(S[I][J] != -1) cout << " " << S[I][J] << " |"; else cout << " |"; } cout << endl; if(((I+1)%3)==0) cout << "--------------------------------------" << endl; } } int Soduko::AScan() { int I,J,Loop,Count,Mispar,Num,Shu,Amu,Tmp1,Tmp2,RET=0; for(I=0; I<9; I++) for(J=0; J<9; J++) { if(S[I][J] != -1) continue; Count = 0; Num = -1; for(Mispar=1; Mispar<10; Mispar++) { for(Loop=0; Loop<9; Loop++) if(S[Loop][J] == Mispar) break; if(Loop<9) continue; for(Loop=0; Loop<9; Loop++) if(S[I][Loop] == Mispar) break; if(Loop<9) continue; if((I%3)==0) Shu = I; else if(((I+1)%3)==0) Shu = (I-2); else if(((I+2)%3)==0) Shu = (I-1); if((J%3)==0) Amu = J; else if(((J+1)%3)==0) Amu = (J-2); else if(((J+2)%3)==0) Amu = (J-1); for(Tmp1=0;Tmp1<3;Tmp1++) { for(Tmp2=0;Tmp2<3;Tmp2++) if(S[Tmp1+Shu][Tmp2+Amu] == Mispar) break; if(Tmp2<3) break; } if(Tmp1<3) continue; else { Count++; if(Count>1) break; Num = Mispar; } } if(Mispar<10) continue; else { S[I][J] = Num; RET=1; } } return(RET); } int Soduko::BScan() //Square { int I,J,Mispar,Count=0,Loop,Num,J2,I2,Shu,Amu,Tmp1,Tmp 2,Tmp3,Tmp4,Sq,RET=0; for(Sq=0;Sq<9;Sq++) { if(Sq<3) Tmp3=Sq*3; else if(Sq>5) Tmp3=(Sq-3)*3; else Tmp3=(Sq-6)*3; Tmp4=(Sq/3)*3; for(Mispar=1; Mispar<10; Mispar++) { Count = 0; Num = -1; J = Tmp4+3; for(I=Tmp3;I<(3+Tmp3);I++) { if(J<(Tmp4+3)) break; for(J=Tmp4;J<(3+Tmp4);J++) { if(S[I][J]!=-1) continue; for(Loop=0; Loop<9; Loop++) if(S[Loop][J] == Mispar) break; if(Loop<9) continue; for(Loop=0; Loop<9; Loop++) if(S[I][Loop] == Mispar) break; if(Loop<9) continue; if((I%3)==0) Shu = I; else if(((I+1)%3)==0) Shu = (I-2); else if(((I+2)%3)==0) Shu = (I-1); if((J%3)==0) Amu = J; else if(((J+1)%3)==0) Amu = (J-2); else if(((J+2)%3)==0) Amu = (J-1); for(Tmp1=0;Tmp1<3;Tmp1++) { for(Tmp2=0;Tmp2<3;Tmp2++) if(S[Tmp1+Shu][Tmp2+Amu] == Mispar) break; if(Tmp2<3) break; } if(Tmp1<3) continue; else { Count++; if(Count>1) break; Num = Mispar; J2=J; I2=I; } } } if(Count==1) { S[I2][J2] = Num; RET=1; } } } return(RET); } int Soduko::CScan() //Shura { int I,J,Mispar,Count=0,Loop,Num,J2,I2,Shu,Amu,Tmp1,Tmp 2,RET=0; for(I=0;I<9;I++) { for(Mispar=1; Mispar<10; Mispar++) { Count = 0; Num=-1; for(J=0;J<9;J++) { for(Loop=0; Loop<9; Loop++) if(S[Loop][J] == Mispar) break; if(Loop<9) continue; for(Loop=0; Loop<9; Loop++) if(S[I][Loop] == Mispar) break; if(Loop<9) continue; if((I%3)==0) Shu = I; else if(((I+1)%3)==0) Shu = (I-2); else if(((I+2)%3)==0) Shu = (I-1); if((J%3)==0) Amu = J; else if(((J+1)%3)==0) Amu = (J-2); else if(((J+2)%3)==0) Amu = (J-1); for(Tmp1=0;Tmp1<3;Tmp1++) { for(Tmp2=0;Tmp2<3;Tmp2++) if(S[Tmp1+Shu][Tmp2+Amu] == Mispar) break; if(Tmp2<3) break; } if(Tmp1<3) continue; else { Count++; if(Count>1) break; Num = Mispar; J2=J; I2=I; } } if(Count==1) { S[I2][J2] = Num; RET=1; } } } return(RET); } int Soduko::DScan() //Amuda { int I,J,Mispar,Count=0,Loop,Num,J2,I2,Shu,Amu,Tmp1,Tmp 2,RET=0; for(J=0;J<9;J++) { for(Mispar=1; Mispar<10; Mispar++) { Count = 0; Num=-1; for(I=0;I<9;I++) { for(Loop=0; Loop<9; Loop++) if(S[Loop][J] == Mispar) break; if(Loop<9) continue; for(Loop=0; Loop<9; Loop++) if(S[I][Loop] == Mispar) break; if(Loop<9) continue; if((I%3)==0) Shu = I; else if(((I+1)%3)==0) Shu = (I-2); else if(((I+2)%3)==0) Shu = (I-1); if((J%3)==0) Amu = J; else if(((J+1)%3)==0) Amu = (J-2); else if(((J+2)%3)==0) Amu = (J-1); for(Tmp1=0;Tmp1<3;Tmp1++) { for(Tmp2=0;Tmp2<3;Tmp2++) if(S[Tmp1+Shu][Tmp2+Amu] == Mispar) break; if(Tmp2<3) break; } if(Tmp1<3) continue; else { Count++; if(Count>1) break; Num = Mispar; J2=J; I2=I; } } if(Count==1) S[J2][I2] = Num; } } return(RET); } int Soduko::EScan() { int I,J,Mispar,Loop,Shu,Amu,Tmp1,Tmp2,Jan; for(I=0;I<9;I++) { for(J=0;J<9;J++) if(S[I][J]==-1) break; if(J<9) break; } if(I==9) return(1); for(Mispar=1;Mispar<10;Mispar++) { //Now, Find Stira for(Loop=0; Loop<9; Loop++) if(S[Loop][J] == Mispar) break; if(Loop<9) continue; for(Loop=0; Loop<9; Loop++) if(S[I][Loop] == Mispar) break; if(Loop<9) continue; if((I%3)==0) Shu = I; else if(((I+1)%3)==0) Shu = (I-2); else if(((I+2)%3)==0) Shu = (I-1); if((J%3)==0) Amu = J; else if(((J+1)%3)==0) Amu = (J-2); else if(((J+2)%3)==0) Amu = (J-1); for(Tmp1=0;Tmp1<3;Tmp1++) { for(Tmp2=0;Tmp2<3;Tmp2++) if(S[Tmp1+Shu][Tmp2+Amu] == Mispar) break; if(Tmp2<3) break; } if(Tmp1<3) continue; else { S[I][J] = Mispar; Jan = EScan(); if(Jan==0) { S[I][J] = -1; continue; } else return(1); } } return(0); } void Soduko::Solve(int Try) { for(int I=0;I<Try;I++) { AScan(); BScan(); CScan(); DScan(); } } void main() { Soduko So; So.SetSoduko(); So.ShowSoduko(); getch(); cout << endl << endl << endl; So.Solve(10); So.EScan(); So.ShowSoduko(); getch(); }


גרסה מקומפלת:
https://2005-uploaded.fresh.co.il/2...16/77924380.exe

עריכה: הממשק לא משהו. כדי להקליד משבצת ריקה הקישו 0. הלוח הוא מערך דו מימדי 9 על 9. (ההקלדה היא שורה שורה משמאל לימין).
_____________________________________
חתימתכם הוסרה כיוון שלא עמדה בחוקי האתר. לפרטים נוספים לחצו כאן. תוכלו לקבל עזרה להתאמת החתימה לחוקים בפורום חתימות וצלמיות.

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #31  
ישן 17-07-2005, 01:48
  בונגולים בונגולים אינו מחובר  
 
חבר מתאריך: 19.09.04
הודעות: 223
נחמד
בתגובה להודעה מספר 30 שנכתבה על ידי Avidon שמתחילה ב "התוכנה שלי"

תוכנית חביבה.
התוכנית שלי, תגיע בהמשך. אם אתה רוצה לדעת (להתכונן? לשפר?)
התוכנית שלי:
- תפתור כל סודוק בעזרת לוגיקה וללא רקורסיה.
- תהיה בעלת ממשק נחמד יחסית (אני רוצה לעשות גם שהיא תייצר קובץ HTML עם נימוקים למה היא שמה כל מספר.
- אולי תאפשר לשחק סודוקו באופן בסיסי (בלי סימונים, מדידת זמן וכו')
- תטען ותשמור מ/אל קובץ.
מה כבר מוכן:
-היא פותרת כל סודוקו כמו שכתוב למעלה.
- הממשק נמצא באמצע הדרך.
- טעינה מקובץ
מה לא מוכן:
- אני יכול להפיק הודעות דיבוג לתוך קובץ אבל עוד לא מייצר קובץ נימוקים.
- היא לא יודעת אבל לא לשמור

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #37  
ישן 24-07-2005, 03:27
  בונגולים בונגולים אינו מחובר  
 
חבר מתאריך: 19.09.04
הודעות: 223
הנה זה בא!
בתגובה להודעה מספר 1 שנכתבה על ידי fat fish שמתחילה ב "אתגר מספר 2"

טוב נו אפשר עוד לעבוד על זה הרבה אבל בכל זאת הנה הפותרת סודוקו שלי. קוראים לתוכנית הזאת סולדוקו (SolDoku) שזה Solve+Sudoku.
היא יודעת לטעון ולשמור לוחות.
היא יודעת לפתור בלי רקורסיה גם לוחות קשים במיוחד.
היא מייצרת קובץ HTML לצורך דיבוג. אני לא חושב שתמצאו בו מידע מעניין במיוחד.

מה רציתי לעשות ולא חשוב: שאפשר יהיה לעבור למצב "משחק".
שהיא תייצר קובץ נימוקים.

אם אתם רוצים לטעון לוח סודוקו אז צריך שיהיה sudoku.txt בתיקייה של הexecutable. הפורמט פשוט מאוד. כל משבצת היא פשוט סיפרה או תו אחר אם היא ריקה (מומלץ "-" (מקף)). סוף כל שורה של הלוח - סוף שורה בקובץ.


מה חשוב אבל לא עשיתי בכל זאת: לדבג עוד הרבה. וחוץ מזה יש דברים שהם באמצע למשל הממשק. אל תתיחסו.
הנה התוכנה. הקובץ הראשון מכיל רק את הקובץ שאשכרה פותר (הלוגיקה). הקובץ השני מכיל את כל הפרויקט, כולל קובץ הפעלה בתיקייה Soldoku\Soldoku\bin\Debug אם אתם רוצים להתרשם.
https://2005-uploaded.fresh.co.il/2...24/50185979.rar
https://2005-uploaded.fresh.co.il/2...24/76626895.rar

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 04:59

הדף נוצר ב 0.08 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר