כותב |
|
אוריה משתמש חבר
![משתמש חבר](forum_images/3_star_rating.gif)
![סמל אישי](avatars/waveform.jpg)
הצטרף / הצטרפה: 29 January 2010 מדינה: Israel
משתמש: מנותק/ת הודעות: 230
|
נשלח בתאריך: 02 September 2010 בשעה 20:57 | | IP רשוּם
|
|
|
|
קוד:
using System;
namespace BF
{
class MainClass
{
public static char[] ch;
public static void Main(string[] args)
{
//ch = GetChars();
char[] s = new char[] { '0', '0', '0', '0' };
Hack(0, 4, s);
Console.ReadLine();
}
static char[] GetChars()
{
char[] res = new char[89];
int i = 0;
for (char n = '0'; n <= '9'; n++)
{
res[i] = n;
i++;
}
for (char n = 'a'; n <= 'z'; n++)
{
res[i] = n;
i++;
}
for (char n = 'A'; n <= 'Z'; n++)
{
res[i] = n;
i++;
}
for (char n = 'א'; n <= 'ת'; n++)
{
res[i] = n;
i++;
}
return res;
}
static bool check(char[] s)
{
char[] p = new char[] { '1', '2', '3', '4' };
if (s == p)
return true;
return false;
}
static char[] Hack(int i, int len, char[] s)
{
for(char d = '0'; d <= '9';d++)
{
s = d;
Console.WriteLine(ConvertToString(s));
if (check(s))
{
Console.WriteLine("Success!!");
return new char[]{};
}
else if(i < len - 1)
{
s = Hack(i + 1, len, s);
if(s.Length == 0)
return new char[]{};
}
}
return new char[] { };
}
static string ConvertToString(char[] c)
{
string res = "";
for (int i = 0; i < c.Length; i++)
res += c;
return res;
}
}
}
|
|
|
אני מקבל רק
0000
0000
0000
0000
0001
0002
0003
0004
0005
.
.
0009
:(
__________________ SmartProgramming
נא לא להגיב בשבת על מה שאני כותב
עדיף להשקיע עוד שעה בתיעוד, מלאבד עוד 100 שעות ויותר על שיחזר של כל הפרוייקט מההתחלה..
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
![מנהל האתר](forum_images/5_star_rating.gif)
![סמל אישי](uploads/shoshan/2005-08-27_154130_SnowDog64x64.jpg)
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 02 September 2010 בשעה 22:45 | | IP רשוּם
|
|
|
|
היי, השיטה הכי פשוטה היא רקורסיה.
אפשר גם לממש משהו לינארי פשוט שממיר מספר למחרוזת בהתבסס על אורך ומספר תוים כמו בתרגיל הידוע שלוקח מספר ומחזיר את הספרות שלו - רק שבמקום ספרות ובסיס ספירה של 10, בסיס בספירה הוא מספר התוים במערך והערך שחוזר הוא במקום המספר האות במקום של המספר במערך.
בהצלחה
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
אוריה משתמש חבר
![משתמש חבר](forum_images/3_star_rating.gif)
![סמל אישי](avatars/waveform.jpg)
הצטרף / הצטרפה: 29 January 2010 מדינה: Israel
משתמש: מנותק/ת הודעות: 230
|
נשלח בתאריך: 03 September 2010 בשעה 12:36 | | IP רשוּם
|
|
|
|
לא הבנתי את מה שכתבת עם המספרים.
בכל מקרה אני צריך גם תווים.
הנה הקוד שעובד:
קוד:
using System;
namespace BF
{
class MainClass
{
public static char[] ch;
public static void Main(string[] args)
{
ch = GetChars();
Hack(0, 4);
Console.ReadLine();
}
static char[] GetChars()
{
char[] res = new char[89];
int i = 0;
for (char n = 'a'; n <= 'z'; n++)
{
res = n;
i++;
}
for (char n = 'A'; n <= 'Z'; n++)
{
res = n;
i++;
}
for (char n = 'א'; n <= 'ת'; n++)
{
res = n;
i++;
}
for (char n = '0'; n <= '9'; n++)
{
res = n;
i++;
}
return res;
}
static bool check(char[] s)
{
char[] p = new char[] { 'a', 'b', 'c', 'd' };
bool eq = true;
for (int i = 0; i < s.Length; i++)
{
if (s != p)
eq = false;
}
return eq;
}
public static char[] s = new char[] { '0', '0',
'0', '0' };
public static bool succeed;
static void Hack(int i, int len)
{
for (int j = 0; j < 89;j++)
{
if (succeed)
return;
s = ch[j];
Console.WriteLine(s);
if (check(s))
{
Console.WriteLine("Success!!");
succeed = true;
return;
}
else if (i < len - 1)
{
Hack(i + 1, len);
if (s.Length == 0)
return;
}
}
return;
}
}
}
|
|
|
אופן השימוש:
1) אם הסיסמא מורכבת ממספרים בלבד, ב-GetChar לשים את
הלולאה של המספרים לפני כל השאר, אם זה רק עברית - אז לשים
את העברית לפני וכו'.
2) בפונקציה הראשית לשים את מספר התווים של הסיסמא:
קוד:
Hack(0, password_length);
|
|
|
3) לבנות פוקנציית אימות.
כדי להמשיך הלאה:
תוכנה במחשב: SendMessage, ע"י PInvoke
אינטרנט: המחלקה TcpClient, המסמך של Hyp3rInj3cT10n
"משחקים ב-HTTP" או מסמכים אחרים לפרטוקולים אחרים.
----------
בכל אופן, תהיתי אם אפשר לבנות רקרוסיה בפונקציה אחת, אפילו
עם הוראות goto או משהו בסגנון. כמו זה:
קוד:
static void Main(string[] args)
{
Reverse(5678);
Console.WriteLine("^^ Reqursia");
int n = 5678;
while (n > 10)
{
Console.WriteLine(n % 10);
n /= 10;
}
Console.WriteLine(n);
Console.ReadLine();
}
static void Reverse(int n)
{
if (n < 10)
Console.WriteLine(n);
else
{
Console.WriteLine(n % 10);
Reverse(n / 10);
}
}
|
|
|
האם יש מצבים שבהם אי אפשר בכלל לבנות פונקציה רקרוסיבית
ככה?
פשוט רקורסיה חונקת את המחסנית..
__________________ SmartProgramming
נא לא להגיב בשבת על מה שאני כותב
עדיף להשקיע עוד שעה בתיעוד, מלאבד עוד 100 שעות ויותר על שיחזר של כל הפרוייקט מההתחלה..
|
חזרה לתחילת העמוד |
|
|
|
|