Die Firma EyBiM hat ein neues Sicherheitssystem entwickelt - vereinfacht gesagt handelt es sich um einen Chip mit X "Sicherheitsbits".
Bsp: [1,1,1,1,1,1]
Sofern alle Bits gesetzt sind, wird ein OK Signal gesendet (und dadurch ein Schloss aufgemacht bzw. eine Tür geöffnet).
Regeln zum Setzen der Bits:
das höchste Bit (links) kann beliebig gesetzt oder gelöscht werden.
sonst: ein Bit kann nur dann gesetzt oder gelöscht werden, wenn das nächsthöhere Bit gelöscht und die anderen höherwertigen Bits gesetzt sind.
D.h das "nächstlinkere" Bit muss 0 sein und die anderen "linkeren" Bits (sofern vorhanden) 1 entsprechen.
Formaler ausgedrückt:
Sei A ein Array mit Bits =[a1,a2,a3,...,an]
Das i-te Bit kann nur dann gesetzt/gelöscht werden, wenn:
a)es das erste Bit ist <=> i=1
b)wenn das Bit i-1=0 ist und alle anderen Bits von 1 bis i-2=1 sind.
Bsp:
x,0,0,0,0,0 <- x kann beliebig sein.
0,x,0,0,0,0 <- x kann beliebig sein.
1,0,x,0,0,0 <- x kann beliebig sein.
1,1,0,x,0,0, <- x kann beliebig sein.
Die Sicherheitsprüfung besteht nun darin, mit einem biometrsichen Scanner einige Daten auszulesen, daraus einen Startzustand für den Chip zu bilden (z.B 1,1,0,1,0,0). Nach diesem Schritt führt der User seine persönliche Security-Card ein. Auf dieser Karte ist einfach eine Abfolge an Schritten gespeichert, so dass der Chip aus dem Startzustand in den [1,1,1,1,1,1] Zustand kommt.
Damit bleibt ein Diebstahl/Verlust der Karte unproblematisch.
Ganz zufälligerweise ist der Startzustand des Chips für Dich gleich den ersten 6 Bits Deiner Habo-Userid.
Berechne nun eine (für Dich gültige) Abfolge von Schritten.
Bsp: von [0,0,0] nach [1,1,1]
Optimalerweise sollte Dein Programm die Abfolge von jedem angegebenen Startzustand berechnen können.
Wenn Du Dich an das Ausgabeformat in diesem Beispiel hälst, bekommst Du einen Bonus
Edit: hab mal die Schwierigkeit etwas höher gesetzt.
Bsp: [1,1,1,1,1,1]
Sofern alle Bits gesetzt sind, wird ein OK Signal gesendet (und dadurch ein Schloss aufgemacht bzw. eine Tür geöffnet).
Regeln zum Setzen der Bits:
das höchste Bit (links) kann beliebig gesetzt oder gelöscht werden.
sonst: ein Bit kann nur dann gesetzt oder gelöscht werden, wenn das nächsthöhere Bit gelöscht und die anderen höherwertigen Bits gesetzt sind.
D.h das "nächstlinkere" Bit muss 0 sein und die anderen "linkeren" Bits (sofern vorhanden) 1 entsprechen.
Formaler ausgedrückt:
Sei A ein Array mit Bits =[a1,a2,a3,...,an]
Das i-te Bit kann nur dann gesetzt/gelöscht werden, wenn:
a)es das erste Bit ist <=> i=1
b)wenn das Bit i-1=0 ist und alle anderen Bits von 1 bis i-2=1 sind.
Bsp:
x,0,0,0,0,0 <- x kann beliebig sein.
0,x,0,0,0,0 <- x kann beliebig sein.
1,0,x,0,0,0 <- x kann beliebig sein.
1,1,0,x,0,0, <- x kann beliebig sein.
Die Sicherheitsprüfung besteht nun darin, mit einem biometrsichen Scanner einige Daten auszulesen, daraus einen Startzustand für den Chip zu bilden (z.B 1,1,0,1,0,0). Nach diesem Schritt führt der User seine persönliche Security-Card ein. Auf dieser Karte ist einfach eine Abfolge an Schritten gespeichert, so dass der Chip aus dem Startzustand in den [1,1,1,1,1,1] Zustand kommt.
Damit bleibt ein Diebstahl/Verlust der Karte unproblematisch.
Ganz zufälligerweise ist der Startzustand des Chips für Dich gleich den ersten 6 Bits Deiner Habo-Userid.
Berechne nun eine (für Dich gültige) Abfolge von Schritten.
Bsp: von [0,0,0] nach [1,1,1]
von [1,0,0] nach [1,1,1][[0,0,0],[1,0,0],[1,0,1],[0,0,1],[0,1,1],[1,1,1]]
[[1,0,0],[1,0,1],[0,0,1],[0,1,1],[1,1,1]]
Optimalerweise sollte Dein Programm die Abfolge von jedem angegebenen Startzustand berechnen können.
Wenn Du Dich an das Ausgabeformat in diesem Beispiel hälst, bekommst Du einen Bonus

Edit: hab mal die Schwierigkeit etwas höher gesetzt.