Hallo und herzlich willkommen zum ersten AutoIt-Hackathon
Alles was ihr zur Teilnahme braucht, ist das Script, das unterhalb im Code-Block eingefügt ist.
Kopiert es vollständig in euren Editor und lest euch die Anleitung genau durch. Zur Sicherheit auch als Dateianhang.
Vielleicht nicht in diesem, aber möglicherweise in einem der nächsten Hackathon's ist zuweilen die genaue Lesart der Aufgabe entscheidend.
Haltet euch ran. Der Erste mit der korrekten Lösung gewinnt. (im Moment leider nur den Ruhm und die Anerkennung aller anderen ...)
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, verliert keine Zeit und wir können euch schwitzen hören)
Ich wünsche allen Teilnehmern
happy coding
#cs ****************** AutoIt Hackathon 2025 ******************
Kategorie: Teil 1 - String-Manipulation
Aufgabe: "Mitarbeiter ID"
Aufwand: 10 - 30 min. (geschätzt)
Aufgabe: Erstelle eine Funktion, die eine ID generiert und als Return (String) zurückgibt.
zusätzliche Funktionen 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 vorgegeben.
Diese ist unten ersichtlich, muss so verwendet werden und aus ihr muss das Ergebnis als Return erfolgen.
Geschichte: Die Firma "Blueberry" sucht neue Mitarbeiter. Da es sich um eine Sicherheitsfirma handelt,
ist alles zugangsbeschränkt und Mitarbeiter haben nur Zutritt mit einer ID-Karte.
Die ID auf der Karte wird mit einer Funktion in der Personalabteilung erstellt.
Leider wurde diese Funktion von einem Ex-Mitarbeiter gelöscht.
Ein Backup dieser Funktion existiert nicht.
Anforderung: - Die ID ist immer 16 Zeichen lang
- Als Input in die Funktion wird ein 1-dimensionales Array übergeben:
$aData = ["Vorname","[Zweiter Vorname]","Nachname","Geburtsdatum(01.07.2000)","Geschlecht(M/W)"]
- Der Datensatz ist immer korrekt formatiert und enthält immer korrekte Daten
- Der zweite Vorname ist optional und kann auch leer sein ("")
- Der Nachname kann auch "Doppelnamen" mit Bindestrich enthalten. Die Bindestriche sollen ignoriert werden.
- Anreden oder Titel kommen nicht vor.
- Das Geburtsdatum ist im "deutschen" Format mit führenden Nullen ("01.07.2000") angegeben
- Das Geschlecht wird mit den Großbuchstaben "M" für männlich und "W" für weiblich angegeben
Zeichen 1-5: Die ersten fünf Zeichen des Nachnamens (wird mit "9"en aufgefüllt, wenn dieser weniger als 5 Zeichen lang ist)
Zeichen 6: Die Dekadenziffer des Geburtsjahres (z. B. für 1987 wäre es die 8)
Zeichen 7-8: Der Geburtsmonat 2-stellig (das 7. Zeichen wird um 5 erhöht, wenn der FMitarbeiter weiblich ist, d. h. 51-62 anstelle von 01-12)
Zeichen 9-10: Der Tag innerhalb des Geburtsmonats (01-31)
Zeichen 11: Die Jahreszahl des Geburtsjahres (z. B. für 1987 wäre es die 7)
Zeichen 12-15: Die 2 Anfangsbuchstaben des Vornamens und des zweiten Vornamens, aufgefüllt mit einer 9, wenn kein zweiter Vorname vorhanden ist
Zeichen 16: einstellige Prüfziffer (einstellige Quersumme) auf Basis der Asc-Codes der Zeichen 1-15
(jedem Zeichen ist in der ASCII Tabelle ein numerischer Wert zugeordnet.
Bilde aus allen Werten eine einstellige Quersumme)
Prüfung: Die Funktion _Check() beinhaltet die Prüfungsdatensätze und einen Hash der Lösungs-ID
Die Ausgabe zeigt an, wie viele der ID's korrekt erstellt wurden
Sobald dein Script 100% korrekte ID's erstellt, poste dein Script im Thread
Sieger: GEWONNEN HAT, WER ALS ERSTER EIN SCRIPT EINSTELLT, DASS DIE AUFGABE ZU 100% GELÖST HAT
PS: Die Verwendung von #includes ist gestattet, müssen aber im Script mit angegeben werden!
#ce ****************** AutoIt Hackathon 2025 ******************
#include <Crypt.au3> ; das include ist für die Überprüfung deines Scripts notwendig!
; um dein Script zu überprüfen, drücke "F5"
_Check()
; ================================= entferne alle Leer- und Kommentarzeilen zwishen diesem Block =================================
; ================================= und poste diesen Code-Block im Thread =================================
; eigene includes ...
Global $LineStart = @ScriptLineNumber
Func _CreateID($aUserdata)
Local $Return
; ... dein Script hier ...
Return $Return
EndFunc ;==>_CreateID
; ... weitere Funktionen ...
Global $LineEnd = @ScriptLineNumber
; ================================= entferne alle Leer- und Kommentarzeilen zwishen diesem Block =================================
; ================================= und poste diesen Code-Block im Thread =================================
; Funktion zur Überprüfung des eigenen Scripts. Nicht mit in den Thread laden!
Func _Check()
Local $aPruefDaten[][] = [[], _
["Robin", "", "Kruse", "02.04.1990", "M", "0xC395FACE1B6D7724717F05DEA657317B653FE64054560B8B259A5181FEB8156D"], _
["Jana", "Kim", "Behrens", "11.04.2010", "W", "0x97B27744E02119FD80701EE9F5ABBBB5EEDC35B4CA9D9A094688742A6DBD777E"], _
["Jana", "", "Moser", "23.03.1950", "W", "0x18C4363B3537314FB1EE539B3C6884A79E6A567AE33C134D7120569D7321BEFB"], _
["Andreas", "Mika", "Krämer", "09.10.1962", "M", "0x04C5FFC58D8E6AB92739E088FCBF9C4895B5A56D8673CD1F4A119EC5D3EBCBDF"], _
["Elisa", "Leni", "Franke", "23.12.1967", "W", "0xE44D0DCBE6932D835A330BF6E71C9A942CECE54337435A1DDBB8F5C53F81D49E"], _
["Lena", "", "Ger-Hogel", "03.06.1950", "W", "0x25FBC6A346B8208A03C616A9DE3D064598DA257B04D8A909689BC3F121E5B8F0"], _
["Laurin", "", "Bach", "02.12.1959", "M", "0x08602243838BDE089AF6FBC1CB9CCF6ABA2B964600BBC168C28C52585C71BABA"], _
["Jo", "Marlon", "Schwab", "15.04.1979", "M", "0xB70F9E86550267382A3D73BEED1DB5CD1AC15B02C0273B7C015B59FD884D7FD6"], _
["Sophia", "Martha", "Mor", "13.10.1998", "W", "0xEC4C32B604A6E4A94EF32AC1FB969AFA20339FE7D74FE81C869DF6DF343A49EF"], _
["Mira", "Martha", "Jäger", "07.03.1995", "W", "0xD877B29B01FF13CA510540CEFC7DC838C3BBC6440E3305FA51AC2AC3A3A6DDD0"]]
Local $aTestdaten[5]
Local $correct = 0
For $i = 1 To UBound($aPruefDaten) - 1
$aTestdaten[0] = $aPruefDaten[$i][0]
$aTestdaten[1] = $aPruefDaten[$i][1]
$aTestdaten[2] = $aPruefDaten[$i][2]
$aTestdaten[3] = $aPruefDaten[$i][3]
$aTestdaten[4] = $aPruefDaten[$i][4]
$CryptResultData = _Crypt_HashData(_CreateID($aTestdaten), $CALG_SHA_256)
If $CryptResultData = $aPruefDaten[$i][5] Then $correct += 1
Next
ConsoleWrite("Testergebnis: " & 100 / (UBound($aPruefDaten) - 1) * $correct & "%" & @CRLF)
EndFunc ;==>_Check
Alles anzeigen