Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Ziffern morsen

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 ] [ 3 ]
000
07.10.2005, 13:22 Uhr
virtual
Sexiest Bit alive
(Operator)


Mal wieder ein Rätsel gefällig?
Dies sind die Morsezeichen für die Dezimalziffern:

Code:
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.


"." Steht für "kurze Signal", "-" für "Langes signal"
Vereinfachend stehen nun die Morsezeichen ohne Punkt und komma hintereinander: "....---....----.----" entspricht also der Zahl 4711.
Schreibe ein möglichst kurzes Programm, welches eine Sequenz von Morsezeichen auswertet und die Zahl dann ausgibt. Dh das Programm sollte so aufrufbar sein:

Code:
echo "....---....----.----" | prg


und dann 4711 ausgeben. Mit oder ohne Newline nach 4711, ist mir gleich. Par ist vorerst 150 (für den Teil zwischen den geschweiften Klammern von main, funktionen sind nicht erlaubt).
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 07.10.2005 um 13:25 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.10.2005, 13:34 Uhr
Tommix



Hallo,
vielleicht liegt es am Freitagnachmittag, aber wie soll man ohne Funktionen die Standardeingabe lesen?

- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.10.2005, 13:40 Uhr
DarthDevilous



er meint doch ohne selbst definierte funktionen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.10.2005, 13:56 Uhr
(un)wissender
Niveauwart



C++:
#include <iostream>
#include <string>  
#include <map>

int main(int argc, char * args[])
{
    std::map<std::string, unsigned> signs;
    signs["-----"] = 0;
    signs[".----"] = 1;
    signs["..---"] = 2;
    signs["...--"] = 3;
    signs["....-"] = 4;
    signs["....."] = 5;
    signs["-...."] = 6;
    signs["--..."] = 7;
    signs["---.."] = 8;
    signs["----."] = 9;
    
    const std::string digits(args[1]);
    unsigned value = 0;
    for(unsigned i = 0; i < digits.length(); i += 5)
    {
        value *= 10;
        value += signs[digits.substr(i, 5)];
    }
    
    std::cout << value;      
}


--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.10.2005, 14:10 Uhr
virtual
Sexiest Bit alive
(Operator)


@(un)wissender
ganz nett, aber ich meinte: "Möglichst kurzes Programm" und speziell in Deinem Fall sollte das unter 120 Zeichen liegen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.10.2005, 14:25 Uhr
Tommix



105 - nur gibt es immer am Ende eine 1 zuviel aus.
Ich komm einfach nicht dahinter.
BTW, ich unterstelle mal, daß die " nicht im Eingabestrom erscheinen sollen (unter win/dos tun sie das).


C++:
#include <stdio.h>

int main(int c, char** v)
{
while(EOF!=(c=getchar())){int n=1;for(int i=0;i<4;++i)n+=(c==getchar());n+=5*(c=='-');printf("%d",n%10);}
}



- Tommix

Dieser Post wurde am 07.10.2005 um 14:25 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.10.2005, 14:33 Uhr
virtual
Sexiest Bit alive
(Operator)


@Tommix, genau die Gänsefüßchen bitte nicht nicht berücksichtigen
Ich habe Dein programm nicht näher angeschaut, aber denkbar ist, daß echo bei Dir am Zeilenende noch ein newline spendiert...
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.10.2005, 14:34 Uhr
DarthDevilous



es wird noch hinten an den input ein newline gehängt, auch wenn es mit dem batch gemacht wird (zumindest unter win)... bin auf 108 oder wenn ich das newline behebe 112.

Bearbeitung:

ach ja, man darf doch sicher '.', '-' etc. mit zahlen (45,46) ersetzen?


Dieser Post wurde am 07.10.2005 um 14:37 Uhr von DarthDevilous editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.10.2005, 14:37 Uhr
(un)wissender
Niveauwart



C++:
#include <algorithm>
#include <iostream>
using namespace std;

int main(int j, char * args[])
{
  char*d=args[1];int i=0;for(;*d;d+=5){i*=10;j=count(d,d+5,'.');i+=*d=='-'?10-j:j;}cout<<i;  
}



89.

Ist das legal? Habe count und cout<< benutzt, fällt das unter Funktionen?
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 07.10.2005 um 14:39 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
07.10.2005, 14:44 Uhr
Tommix



Ah so, dange Virtual, DarthDevilous.

C++:
#include <stdio.h>

int main(int c, char** v)
{
while(c=getchar(),c=='.'|c=='-'){int n=1;for(int i=0;i<4;++i)n+=(c==getchar());n+=5*(c=='-');printf("%d",n%10);}
}


112 so.
Bzw.

C++:
while(c=getchar(),c==46|c==45){int n=1;for(int i=0;i<4;++i)n+=(c==getchar());n+=5*(c==45);printf("%d",n%10);}


109.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: