Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Golfrätsel: Passwort/Cheat Eingabe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
25.08.2006, 00:35 Uhr
Lensflare



Hallo.

kennt ihr die Cheateingabe so wie zum Beispiel bei Doom 2?

Wenn nicht, hier eine kurze Beschreibung:
Man hat kein Eingabefeld, sondern drückt einfach die Buchstaben
auf der Tastatur, ohne diese auf dem Bildschirm zu sehen.
Und wenn man dann die richtige Kombination eingegeben hat,
dann wird der cheat aktiviert. Ganz ohne Bestätigung per
Eingabetaste oder ähnlichem.

So eine Funktion wollte ich in C realisieren und ich dachte mir
dass es auch gut als Golfrätsel zu gebrauchen sein könnte

Also hier ist der code:


C++:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

const int a = 4; //Anzahl der Cheats
const char *pw[a] = {"thisisacheat","purepower","unvisible","ifeelsogood"}; //ein Beispiel für die Cheatliste

int getpw(char c);

int main()
{

  int pw_index;
  char key;
  
  while(1)
  {
    key = 0;
    if(kbhit())
    {
      key = getch();
      pw_index = getpw(key);
    }
    else pw_index = -1;
    
    if(pw_index != -1)
    {
      printf("\npassword correct (%s)\n", pw[pw_index]);
    }
  }
}

int getpw(char c)
{
  //hier zählen die Zeichen
}



Die Funktion getpw bekommt nach jeder Beutzereingabe den jeweiligen Buchstaben übergeben.
Sobald ein cheat erfolgreich eingegeben wurde, gibt die Funktion den Index des cheats zurück.
Ansonsten wird -1 zurückgegeben.

Zu schreiben ist also der Inhalt der Funktion
int getpw(char c)

Es zählt die Anzahl der Zeichen zwischen den geschweiften Klammern der Funktion.

Regeln/Hinweise:

-> Die Passwörter/Cheats bestehen nur aus gewöhnlichen Kleinbuchstaben.
Keine Zahlen, keine Sonderzeichen.

-> Es passt jeweils nur ein Passwort/Cheat auf eine Benutzereingabe.
Also folgende cheats zusammen sind ausgeschlossen: "godmode" und "god",
weil der cheat "god" aktiviert werden würde, wenn man "godmode" eigeben will.
Solche Fälle sind also zu vernachlässigen, weil sie nicht vorkommen dürfen ^^

-> Es soll mit beliebig vielen und beliebig langen Wörtern und beliebig oft möglich sein.

-> Es darf nicht auf undefinierten Speicher zugegriffen werden.
(also nicht sowas: int i; if(i==0) ... )

-> Es darf nur C (kein C++) und die Funktionen der "includeten" libs verwendet werden.


Wie viele Zeichen meine erste Lösung gerade hat, will ich noch nicht verraten

Ich wünsche viel Spass.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 25.08.2006 um 00:36 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.08.2006, 11:02 Uhr
kronos
Quotenfisch
(Operator)


Der Array geht so nicht in C...
Ich schlag vor du machst
C++:
#define a 4
d'raus.


Bearbeitung:
85 Zeichen zw. den Klammern

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 25.08.2006 um 11:52 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.08.2006, 12:38 Uhr
Lensflare



Wie meinst du das?
Der (heißt es wirklich der array?) array "pw" geht so nicht in C aber wenn ich "a" per "#define" definiere, dann geht das?

oder meinst du als zweiten punkt, dass ich das "a" lieber so definieren sollte?


zu den 85 Zeichen:
bist du dir sicher dass es auch richtig funktioniert? Ich hatte erst auch eine Lösung mit wenigen Zeichen aber dann ist mir aufgefallen, dass ich auch die erste hälfte eines cheats und die zweite hälfte eines anderen cheats eingeben konnte um einen von den beiden zu aktivieren
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.08.2006, 13:19 Uhr
kronos
Quotenfisch
(Operator)



Zitat von Lensflare:
Wie meinst du das?
Der (heißt es wirklich der array?) array "pw" geht so nicht in C aber wenn ich "a" per "#define" definiere, dann geht das?

oder meinst du als zweiten punkt, dass ich das "a" lieber so definieren sollte?

const-Variablen können in C nicht benutzt werden um die Größe eines nicht-lokalen Arrays zu bestimmen.


Zitat:
zu den 85 Zeichen:
bist du dir sicher dass es auch richtig funktioniert? Ich hatte erst auch eine Lösung mit wenigen Zeichen aber dann ist mir aufgefallen, dass ich auch die erste hälfte eines cheats und die zweite hälfte eines anderen cheats eingeben konnte um einen von den beiden zu aktivieren

Hm, was nicht funktioniert ist die Eingabe z.B. von "purepurepower"... aber tut das bei dir?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.08.2006, 23:55 Uhr
Lensflare




Zitat von kronos:

const-Variablen können in C nicht benutzt werden um die Größe eines nicht-lokalen Arrays zu bestimmen.


achso. danke für die info.
ich dachte schon du willst darauf hinaus, dass ich bei

C++:
#define a 4

3 bytes einspare



Zitat von kronos:

Hm, was nicht funktioniert ist die Eingabe z.B. von "purepurepower"... aber tut das bei dir?


Jo, das funktioniert bei mir.
Das gleiche Problem hatte ich auch. Mit dem Ansatz bin ich jedoch dann nicht weitergekommen.
Ich habe ihn verworfen und hab was anderes gemacht. Jedoch mit viel mehr Zeichen.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.08.2006, 01:40 Uhr
kronos
Quotenfisch
(Operator)


Dann muss man wohl die Eingabe buffern, das ist mir zu lang zum golfen...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.08.2006, 02:32 Uhr
Lensflare



Wieso zu lang?
Das macht es doch umso interessanter
Man kann mehr kürzen.

Ich habe die Eingabe gebuffert, aber muss ja nicht die einzige Möglichkeit sein.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
26.08.2006, 17:56 Uhr
kronos
Quotenfisch
(Operator)


Okay, aber nur weil mir so langweilig ist.
183, im ersten Anlauf.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 26.08.2006 um 17:56 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.08.2006, 20:54 Uhr
Lensflare



wenns auch richtig funktioniert, respekt!

ich habe bei meinem ersten (funktionierenden) Anlauf 337 Zeichen ^^
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.08.2006, 23:23 Uhr
kronos
Quotenfisch
(Operator)


Sind sogar 180:

C++:
static char*x,v,w,y,z,*u;x=realloc(x,y+2);sprintf(u=x,"%s%c",y?x+!v:"",c);
for(z=v=0;!(w==y?v=++y:0)&&pw[z][w]==u[w++]||(w=0,*++u)||(u=x,++z<a);)
if(!pw[z][w])return(y=0)+z;return-1;

Mit Rekursion kann man da sicher noch was 'rausholen, aber es spielt ja eh keiner mit.
Ist das nur das Sommerloch oder hat keiner mehr Lust???
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 28.08.2006 um 23:24 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: