Hallo und herzlich willkommen zum zweiten AutoIt-Hackathon
Alles was ihr zur Teilnahme braucht, ist das Script, das unterhalb im Code-Block eingefügt ist.
Diesmal gibt es das Script ausschließlich im Code-Block um Differenzen zu vermeiden.
Kopiert es vollständig in euren Editor und lest euch die Anleitung genau durch.
Vielleicht nicht in diesem, aber möglicherweise in einem der nächsten Hackathon's ist zuweilen die genaue Lesart der Aufgabe entscheidend.
Diesmal gewinnt derjenige, dessen Script die Tests zu 100% bewältigt und am schnellsten ist.
Ich weiß das mit der Geschwindigkeit ist so eine Sache in AutoIt. Daher bitte ich Andy (sofern er wieder mitmacht) nicht in Assembler zu proggen.
Ihr könnt eigene Funktionen erstellen, Globale Variablen deklarieren usw ...
Postet eure Lösung hier in diesen Thread. (den markierten Code-Block im Script)
Klinkt euch gerne auf Discord mit ein (am Besten mit Audio, so könnt ihr weiter coden und wir können euch schwitzen hören)
Ich wünsche allen Teilnehmern
happy coding
PS: ab Dienstag abend 20:00 Uhr gibt es hier meine Lösung der Aufgabe und dann werte ich die Lösungen der Teilnehmer aus.
#cs ****************** AutoIt Hackathon 2025 / 2 ******************
Kategorie: Teil 2 - String-Manipulation
Schwierigkeit: Level II
Aufgabe: "CypherEnigma"
Aufwand: 1 - 2 Std. (geschätzt)
Lerninhalt: In dieser Aufgabe geht es um die Erstellung von Arrays, den "zero-based" Index, das "schleifen" durch Arrays,
eine "umlaufende" Zählung durch Arrays und ASCII-Zeichen.
Die Vereinfachung durch Globale Variablenerstellung, das Auslagern von Operationen in eigene Funktionen
und vielleicht auch um die Nutzung von "Modulo" ;-)
Die Aufgabe wurde bewusst relativ einfach gehalten und würde so nicht als Verschlüsselung nutzen.
Es geht hier mehr darum, die Aufgabe korrekt zu verstehen und umzusetzen. Dabei sind "alle" Anmerkungen in der Aufgabe wichtig!
Aufgabe: Erstelle eine Funktion, die als Input 5 Parameter übernimmt und eine verschlüsselte Zeichenkette zurückgibt
Parameter 1: (String mit ASCII-Zeichen (theoretisch Dec 0 - Dec 255)) als Steuerzeichen werden ausschließlich "HT", "LF" & "CR" enthalten sein!
Parameter 2: ($nKlein als Zahl) Verschiebefaktor für Kleinbuchstaben
Parameter 3: ($nGross als Zahl) Verschiebefaktor für Großbuchstaben
Parameter 4: ($nSonder als Zahl) Verschiebefaktor für Sonderzeichen (ASCII 32 - 126 außer Klein- und Großbuchstaben)
Parameter 5: ($nExtra als Zahl) allgemeiner Verschiebefaktor, n-tes Zeichen in Parameter 1 * $nExtra
Alle nicht betrachteten ASCII-Zeichen werden unverändert übernommen.
Der Verschiebefaktor kann auch größer als die Anzahl Zeichen der entsprechenden Zeichengruppe sein! (Beispiel $nKlein=155)
Für jedes Zeichen des übergebenen Strings ist die Verschiebung in der entsprechenden Zeichengruppe vorzunehmen.
Dabei wird als Verschiebung der feste Verschiebeparameter der Gruppe ($nKlein, $nGross, $nSonder) plus
dem Extra Verschiebungsfaktor $nExtra, der sich mit jedem angewandten Zeichen mit sich selbst addiert, angewendet.
z. B. das 3te Zeichen in Param1: ("u") wird um die Summe der Verschiebefaktoren ($nKlein + ($nExtra + $nExtra + $nExtra))
auf die Gruppe Kleinbuchstaben angewendet.
Wenn das Ende der Zeichengruppe erreicht ist, wird am Anfang wieder begonnen und weiter verschoben.
Alle Texte werden als String übergegeben.
Steuerzeichen und die ASCII Zeichen jenseits von Dec 126 werden 1:1 übernommen
Prüfung: Die Funktion _Check() beinhaltet die Prüfungsdatensätze und für jeden Text einen Hash der Lösung
Die Ausgabe zeigt an, wie viele der Texte korrekt verschlüsselt wurden
Sobald dein Script 100% korrekte Texte verschlüsselt hat, poste dein Script im Thread
Sieger: Gewonnen hat der Teilnehmer, dessen Funktion alle 7 Texte korrekt verschlüsselt und
2000 Durchläufe der Test-Texte in der kürzesten Zeit verschlüsselt
PS: Zusätzliche Funktionen und Globale Variablen können erstellt werden, müssen aber im Lösungspost mit angegeben werden.
Es gilt der Code-Block, der im Thread als Antwort gepostet wird.
Als einzige Vorgabe für das Script wird die Funktion samt Namen und Paremeterübernahme vorgegeben.
Diese ist unten ersichtlich, muss so verwendet werden und aus dieser muss das Ergebnis als Return erfolgen.
Die Verwendung von #includes ist gestattet, müssen aber im Script mit angegeben werden!
#ce ****************** AutoIt Hackathon 2025 / 2 ******************
; um dein Script zu überprüfen, drücke "F5"
; ===== dein Code-Block ab hier =====
Func _CypherEnigma($sString, $nKlein, $nGross, $nSonder, $nExtra)
Local $Return
Return $Return
EndFunc ;==>_CypherEnigma
; ===== dein Code-Block bis hier =====
; Funktion zur Überprüfung des eigenen Scripts. Nicht mit in den Thread laden!
#include <Crypt.au3> ; das include ist für die Überprüfung deines Scripts notwendig!
ConsoleWrite(_Check() & @CRLF)
Func _Check()
Local $aPruefDaten[][] = [[], _
["donaudampfschifffahrtgesellschaft", 5, 0, 0, 0, "0x53E2F132EAF79CE13689BB73846682788E8771B0063CC9CB9501F5C07EEBCDAA"], _
["dieser satz beinhaltet nur kleine buchstaben und leerzeichen", 5, 0, 2, 0, "0x5992BF8319893D0295A57477F19A78E8D286197A0B5AC5A6894DD2EA3CDE603B"], _
["In diesem Satz musst du schon Klein und Grossbuchstaben verschieben", 8, 3, 0, 0, "0x431C76C6E9CA4F350E45774613827182E3D91E173332A35A4FF436AA3173ED73"], _
["Damit es noch etwas schwieriger wird, kommen hier noch Sonderzeichen dazu!", 4, 7, 9, 0, "0xF253F31D8EE1A6DCBCF8FA73CA3A458791F9D69E6934484B3FFDC828B3903FC1"], _
["Bisher wurde auf die Extra-Verschiebung verzichtet. Dies ändert sich jetzt mit diesem Satz.", 3, 7, 2, 5, "0xB85541C2C4A026A24A2742D113BD26FA6EE3AA8972EAD3EC99A4F0572EA5F45E"], _
["Die Krone erlangst du aber nur, wenn du schnöden Sonderzeichen wie z.B. @,&,%,^," & @CRLF & _
"üblen Umlauten wie 'Übernatürlicher Cräcker' und eine Verschiebung über die Grenze" & @CRLF & _
"der Anzahl Zeichen im Alphabet beherrscht." & @CRLF & _
"Nur dann hast du 90% erreicht. :-)", 23, 35, 17, 33, "0x559CDDFD354A0CA84567A9DED88867DC95B4DEE55788DE155BBD07CA4010AE41", ""], _
["und wenn du diesen Text auch entschlüsselst, dann bist du mein Held. ^^" & @CRLF & _
"Eine Auflistung der Kleinbuchstaben: abcdefghijklmnopqrstuvwxyz" & @CRLF & _
"Eine Auflistung der Großbuchstaben: ABCDEFGHIJKLMNOPQRSTUVWXYZ" & @CRLF & _
"Eine Auflistung ausgewählter Sonderzeichen: !§=$&Z)§&;:_-" & @CRLF & _
"und eine Extra-Verschiebung beginnend mit 252 Zeichen. inkl. TAB ==> ;-)", 147, 92, 42, 252, "0x726F77BE455F42DDB7E02F1E20AF85CC61BAFC8C8A372B357815E200AE4FB03C", ""]]
Local $correct = 0
For $i = 1 To UBound($aPruefDaten) - 1
$CryptResultData = _CypherEnigma(String($aPruefDaten[$i][0]), $aPruefDaten[$i][1], $aPruefDaten[$i][2], $aPruefDaten[$i][3], $aPruefDaten[$i][4])
If _Crypt_HashData($CryptResultData, $CALG_SHA_256) = $aPruefDaten[$i][5] Then
ConsoleWrite("Testergebnis Test " & $i & ": okay" & @CRLF)
$correct += 1
Else
ConsoleWrite("Testergebnis Test " & $i & ": not okay" & @CRLF)
EndIf
Next
Return @CRLF & "Testergebnis (" & $correct & "/" & (UBound($aPruefDaten) - 1) & "): " & Round(100 / (UBound($aPruefDaten) - 1) * $correct,2) & "%"
EndFunc ;==>_Check
Alles anzeigen