Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Golf: Maya-Zahlen

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 <
000
12.02.2005, 11:39 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Eine "geliehene" Aufgabe: Zu golfen ist eine Funktion, die Maya-Zahlen in ints umwandelt. Ich zitier hier einfach mal von codefairway.net:

----------

Ein Beispiel: die Zahl .| : .: .: | - entspricht 19545300.

Verwirrt? Das Zahlensystem der Mayas und Azteken beruht auf einer Zwanzigerbasis - offensichtlich wurde mit Fingern und Zehen gezählt. Die Zahlzeichen sind:

* . steht für 1 Stein
* : steht für 2 Steine
* | steht für 5 Steine (oder einen Stock, da streiten die Archäologen noch)
* - steht für eine Muschel, die Null symbolisiert.

.:| .:||| ::| ::|| . ergibt die 1427881, folgendermassen berechnet:
20**4*(3+5) + 20**3*(3+15) + 20**2*(4+5) + 20**1*(4+10) + 20**0*(1)
= 1280000 + 144000 + 3600 + 280 + 1
= 1427881

Aufgabe ist es einen Konverter zu schreiben der eine Mayazahl in das Dezimalsystem umwandelt. Die Zahl wird als String übergeben, das Ergebnis ist eine Integerzahl. Die Maya-Zahlen haben zwischen einer und sieben Stellen (getrennt durch ein Leerzeichen).

----------

Rumpf:

C++:
int teeOff(char* mayaZahl)
{
   // .........
}





P.S. par sind 80 Zeichen zwischen den geschweiften Klammern :-)
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 12.02.2005 um 17:41 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.02.2005, 12:36 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ne geile aufgabe hab leider kein zeit muss zum fussball... und abends ist party... und morgen muss ich für klausur lernen... hättest du die nicht gestern reinstellen können
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.02.2005, 15:52 Uhr
0xdeadbeef
Gott
(Operator)


94, im ersten Anlauf, bzw. 83 zwischen den Klammern:

C++:
f(char*s){int r=0;char*p="-.:  |";for(;*s;++s)if(*s-32)r+=strchr(p,*s)-p;else r*=20;return r;}


...allerdings ohne irgendwelche Prüfmechanismen, der String musswohlgeformt sein.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.02.2005, 17:29 Uhr
enno-tyrant
Frag nicht!


mist -> mein code hat schon 70 zeilen, die zeichen zähle ich gar nicht erst
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.02.2005, 17:38 Uhr
Bruder Leif
dances with systems
(Operator)


57 Zeichen Kleiner Tip: Standards und Mathematik sind schön
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.02.2005, 22:34 Uhr
0xdeadbeef
Gott
(Operator)


Naja - ich bin schon mal runter auf 86 bzw. 75 zwischen den Klammern. In C99 wärens zwar insgesamt mehr Zeichen wegen des größeren Rumpfes, aber im Funktionskörper könnte man ein Semikolon einsparen (for(int r=0;*s;++s)) - kommt also drauf an, wie mans rechnet.

C++:
f(char*s){int r=0;char*p="-.:  |";for(;*s;++s)r=*s-32?r+strchr(p,*s)-p:r*20;return r;}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.02.2005, 18:45 Uhr
xXx
Devil


Bruder Leif, poste mal deinen Code mit 57 Zeichen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.02.2005, 19:16 Uhr
enno-tyrant
Frag nicht!


jo, wär ich mittlerweile auch dafür
--
...um etwas zu verstehen muß man wissen wie es funktioniert...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.02.2005, 21:11 Uhr
Bruder Leif
dances with systems
(Operator)


OK, hier isser:


C++:
#include <stdio.h>

int teeOff(char*m){int r=0;for(;*m;m++)r+=*m<33?r*19:*m>45?*m/24:0;return r;}

int main()
{
   printf("%d\n", teeOff(".| : .: .: | -"));
   if(teeOff(".| : .: .: | -") == 19545300) printf("OK\n");
   return 0;
}



Die Verrückten bei codefairway.net machen das in C#, sieht ziemlich genauso aus. Nur dass die nochmal drei Bytes gespart haben, und ich komm ums Verrecken nicht drauf, wo... irgendwo in der Mathematik...
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: