Knobelaufgabe
Verfasst: 04.05.2013 21:07
Hi Leute,
ich habe eine Knobelaufgabe für euch, die ich übrigens selbst noch nicht gelöst habe. Folgender Code:
Wir ihr seht, gibt es eine Funktion 'breakIt()', die laut Aufgabenstellung eine Zahl zwischen 0 und 2.000.000.000 bekommt und als zweiten Parameter einen String, der nur die Buchstaben 'a' und 'b' enthält. Die Funktion berechnet dann einen Hash des Strings 's' in Abhängigkeit zu 'r', der zwischen 0 und 2^32 liegt.
An dem Beispiel sieht man, dass zwei unterschiedliche Strings den selben Hash generieren können. Es gibt aber auch Strings, bei denen das nicht so ist.
Aufgabe ist nun eine Funktion zu schreiben, die zu einem 'r' und einem String 's' einen weiteren String 's2' generiert, der in Zusammenhang mit 'r' den selben Hash hat wie 's', wobei 's' ungleich 's2' und Len(s2) = Len(s) sein muss. Falls ein solcher String 's2' nicht existiert, soll einfach nichts ausgegeben werden.
So, ihr habt Zeit bis morgen Abend. Ich übrigens auch.
ich habe eine Knobelaufgabe für euch, die ich übrigens selbst noch nicht gelöst habe. Folgender Code:
Code: Alles auswählen
EnableExplicit
Procedure.q breakIt(r.q, s.s)
Protected rMul.q = 1, hash.q = 0
Protected l.i = Len(s)
Protected *c.Character = @s + (l - 1) * SizeOf(Character)
Protected i.i
For i = 1 To l
hash ! ((*c\c - 'a') * rMul)
*c - SizeOf(Character)
rMul * r
rMul & $ffffffff
Next
ProcedureReturn hash
EndProcedure
Debug breakIt(35476431, "aaaababaaaaaaabbaaaaaabbbbbaaaaa")
Debug breakIt(35476431, "aaaaabaabbbbbbbaabbaabaaababbaab")
Debug breakIt(443, "aaabbabbabbbbbababababababbaaaaaaaaaaa")
Debug breakIt(443, "aaabbababbababaabaabbbbbbaababbabaabab")
An dem Beispiel sieht man, dass zwei unterschiedliche Strings den selben Hash generieren können. Es gibt aber auch Strings, bei denen das nicht so ist.
Aufgabe ist nun eine Funktion zu schreiben, die zu einem 'r' und einem String 's' einen weiteren String 's2' generiert, der in Zusammenhang mit 'r' den selben Hash hat wie 's', wobei 's' ungleich 's2' und Len(s2) = Len(s) sein muss. Falls ein solcher String 's2' nicht existiert, soll einfach nichts ausgegeben werden.
So, ihr habt Zeit bis morgen Abend. Ich übrigens auch.
