http://www.pronix.de -> Forum -> Knobelecke

Forum: Knobelecke

Moderatoren: broesel, juergen

Thema: Finde die 12!

Finde die 12!

broesel (webmaster) am 15.12.2010 um 00:55

In diesem Thread geht es um die Frage, wie man die Vorkommen von "12" in einem Eingabestrom zählen kann.

Der Ansatz ist klar: while((c = getchar()) != EOF) /* ... */

Das Rätsel: wer kann den kürzesten Schleifenkörper bauen, der die Aufgabe löst?

Keine schäbigen Tricksereien mit dem Präprozessor und keine Funktionsaufrufe! Maximale Portabilität, kein ASCII-Getrickse! Erlaubt sind Variablen (klar), Kontrollstrukturen, Operatoren, Klammern und was man sonst so in einem Appendix über Syntax findet. Eventuell benötigte Variablen dürfen natürlich vorher definiert werden.

Wer eine kürzere Lösung als ich findet, bekommt von mir eine Flasche bestes saarländisches Bier per Post. Damit hier auch alles mit rechten Dingen zugeht, habe ich meine derzeitige Lösung per PN an Jürgen geschickt, der hiermit von der Teilnahme ausgeschlossen ist :P

Viel Spaß,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 

Re: Finde die 12!

broesel (webmaster) am 15.12.2010 um 02:43

Leider habe ich gerade selbst eine kürzere Lösung gefunden als die in Jürgens Postfach, man kann also gewinnen. Das wird mich hoffentlich lehren, nicht immer gleich die Klappe so weit aufzureissen... :>

Gruss,
Philip

--
The C Programming Quiz (externer link) - bitte Fragen einreichen :)

 

Re: Finde die 12!

Martin Conrad (webmaster) am 15.12.2010 um 06:53

Hm, ich denk mal einfach ohne Zustand ne logische Verknüpfung.
Wenn c 1 ist, dann muss c = getchar() 2 sein.

Interessant ist auch die rekursive Funktion für eine Zeichenkette variabler Länge Grafik: Smilie Zwinker

Bis denne

Martin

--
0xC0FFEE

 

Re: Finde die 12!

Patrick am 15.12.2010 um 09:19

Ich eröffne mit einer einfachen Lösung.
#include <stdio.h>
#include <stdlib.h>


int main ( void )
{
 int c,b=0, hits=0;

 while (EOF != (c=getchar()))
 {
  if(c=='1')
  {
   b=1;
   continue;
  }

  if(b && c=='2')
   hits++;

  b=0;
 }

 printf("12 ist %d mal vorgekommen.\n", hits);
 return EXIT_SUCCESS;
}

--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.

 

[EDIT] - Re: Finde die 12!

Martin Conrad (webmaster) am 15.12.2010 um 10:00

Huhu,

bei ner zweistelligen Zahl kannst du das Zwischenergebnis schlicht weglassen. Du brauchst keine Variablen ausser dem Zähler und einem char:


c = getchar();
while( c != EOF)
{
  if( c == '1')
  {
    if( (c = getchar()) == '2')hits++;
  }
  else c = getchar();
}


Bis denne

Martin

--
0xC0FFEE