Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Golf-Rätsel! LISP-validation light

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
18.01.2007, 23:12 Uhr
0xdeadbeef
Gott
(Operator)


So, ich hab ein Rätsel:

Es geht darum zu prüfen, ob ein übergebener String klammermäßig zusammenpasst, d.h. ob jede geöffnete Klammer auch wieder geschlossen wird. Wenn ja, gib 0 zurück (Erfolg), sonst ungleich 0. Folgendes Hauptprogramm ist zum Testen geeignet:

C++:
#include <stdio.h>

int f(char const *s){
  /* Dein Code hier */
}

int main(void) {
  char s[] = "((a)b(()c(de))f()g(hi((j)(k)l m))n)"; /* passt       */
  char t[] = "((a)b(()c(de))f()g(hi((j)(k)l m)n)";  /* passt nicht */

  printf("%d, %d\n", f(s), f(t));

  return 0;
}


Par ist 50 Zeichen. Ich bin bei 40

Bearbeitung von 0xdeadbeef:

Verzählt. Par angepasst. ...und das Testprogramm, um Schlupflöcher auszumerzen.


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.01.2007 um 00:08 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.01.2007, 23:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zwischen den klammern 32
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.01.2007, 23:56 Uhr
0xdeadbeef
Gott
(Operator)


Hmm. Da musst du nen anderen Ansatz als ich entdeckt haben...zurück ans Zeichenbrett.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.01.2007, 00:16 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@beefy
definier mal genauer was für sauerein erlaubt sind und was nicht bzw wie die eingabe aussieht... Ich bin noch davon ausgegangen es gibt nur klammern... nach deinem edit scheint dem ja nicht mehr so...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 19.01.2007 um 00:18 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.01.2007, 03:04 Uhr
0xdeadbeef
Gott
(Operator)


Ah, das erklärt das. Aaaalso, prinzipiell genau das, was der Titel sagt - teilweise LISP-Validierung. Das bedeutet, zwischen den Klammern können tokens ohne Ende stehen, solange die Klammerung hinhaut, d.h. jede Klammer hat ein Gegenstück. Grober Unfug wie im Eingabestring rumschreiben ist nicht erlaubt. Und das ist es eigentlich auch schon. (Man könnte auch sagen, es geht darum rauszufinden, ob die Anzahl an ( und ) im String gleich ist)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.01.2007, 09:49 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


hmm Double-Boogie:


C++:
int f(char const *s){

  for(int i=0;*s;s++)*s==40?++i:*s==41?--i:i;
  return i;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.01.2007, 10:58 Uhr
kronos
Quotenfisch
(Operator)


Darf man Klammern zuerst schließen und dann öffnen?
Also ist das hier korrekt:

Code:
)(

--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.01.2007, 11:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@kronos
Das hab ich mich auch gefragt und mir gedacht jupp das erlaub ich mal....

@Guybrusch...

Rekursion gewinnt

sowas wie *s==40 kann man mit *s-40 abkürzen
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.01.2007, 15:10 Uhr
0xdeadbeef
Gott
(Operator)


Uh...daran hatt ich garnicht gedacht. Ich muss es wohl zulassen, denn mein Code fängt )( nicht ab \

Naja. Vielleicht nicht das perfekte Rätsel, aber zählt halt einfach, ob genausoviele ( wie ) im String sind. Nächstes mal mach ich mir vorher mehr als fünf Minuten Gedanken darum, versprochen
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.01.2007, 15:37 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von Windalf:
sowas wie *s==40 kann man mit *s-40 abkürzen

hmm stimmt spart jeweils 1 zeichen, aber ich komm auf keine Rekursive Lösung die kürzer ist...
 
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: