Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 40. Rästel (für Kronos et. al.)

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 ] [ 4 ] [ 5 ] [ 6 ]
000
26.08.2003, 15:27 Uhr
virtual
Sexiest Bit alive
(Operator)


Golfen wir mal wieder:

Zu schreiben ist ein einfches banner Programm, möglichst kurz. Zur erklärung:
banner ist ein kleines nutzloses (?) UNIX Programm, welches den ihn übegebenden Text in Großen buchstaben ausgibt. Ich meine jetzt nicht Großbuchstaben, sondern eben Große Buchstaben.
zB sollte

Code:
# banner abc


Etwa folgende Ausgabe ergeben (_ bedeutet Leerzeichen):

Code:
_###__####___###_
#___#_#___#_#___#
#___#_#___#_#____
#####_####__#____
#___#_#___#_#____
#___#_#___#_#___#
#___#_####___###_


Der einfachheithalber soll nur ein 7x5 Font (wie in diesem Beispiel) implementiert werden und auf kleinbuchstaben verzichtet werden.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 26.08.2003 um 15:28 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.08.2003, 15:53 Uhr
virtual
Sexiest Bit alive
(Operator)


Da das Rästel vielleicht abschreckend wirkt, hier ein kleiner Hint (darf beliebig reused werden, ist ja für einen guten Zweck )

C++:
#include <stdio.h>

char letters[26][7*5+1] =
{
    " *** " "*   *" "*   *" "*****" "*   *" "*   *" "*   *",
    "**** " "*   *" "*   *" "**** " "*   *" "*   *" "**** ",
    " *** " "*   *" "*    " "*    " "*    " "*   *" " *** ",
    "**** " "*   *" "*   *" "*   *" "*   *" "*   *" "**** ",
    "*****" "*    " "*    " "**** " "*    " "*    " "*****",
    "*****" "*    " "*    " "**** " "*    " "*    " "*    ",
    " *** " "*   *" "*    " "*    " "*  **" "*   *" " *** ",
    "*   *" "*   *" "*   *" "*****" "*   *" "*   *" "*   *",
    "  *  " "  *  " "  *  " "  *  " "  *  " "  *  " "  *  ",
    "    *" "    *" "    *" "    *" "    *" "*   *" " *** ",
    "*   *" "*  * " "* *  " "**   " "* *  " "*  * " "*   *",
    "*    " "*    " "*    " "*    " "*    " "*    " "*****",
    "*   *" "** **" "* * *" "*   *" "*   *" "*   *" "*   *",
    "*   *" "*   *" "**  *" "* * *" "*  **" "*   *" "*   *",
    " *** " "*   *" "*   *" "*   *" "*   *" "*   *" " *** ",
    " *** " "*   *" "*   *" "*   *" "* * *" "*  * " " ** *",
    "**** " "*   *" "*   *" "**** " "*   *" "*   *" "*   *",
    " *** " "*   *" "*    " " *** " "    *" "*   *" " *** ",
    "*****" "  *  " "  *  " "  *  " "  *  " "  *  " "  *  ",
    "*   *" "*   *" "*   *" "*   *" "*   *" "*   *" " *** ",
    "*   *" "*   *" "*   *" "*   *" "*   *" " * * " "  *  ",
    "*   *" "*   *" "*   *" "*   *" "* * *" "** **" "*   *",
    "*   *" "*   *" " * * " "  *  " " * * " "*   *" "*   *",
    "*   *" "*   *" " * * " "  *  " "  *  " "  *  " "  *  ",
    "*****" "    *" "   * " "  *  " " *   " "*    " "*****"
};

void print(char letter)
{
    int z,s;
    /* Nur großbuchtaben */
    if (letter<'A' || letter >'Z') return;

    for(z=0; z<7; ++z)
    {
        for(s=0; s<5; ++s)
        {
            putchar(letters[letter-'A'][5*z+s]);
        }
        putchar('\n');
    }
}

int main()
{
    char c;
    for(c='A'; c<='Z'; ++c)
    {
        print(c);
        putchar('\n');
    }
}


--
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
002
26.08.2003, 16:23 Uhr
Pablo
Supertux
(Operator)


Geniale Lösung!
ich hab eine Frage zur Initialisierung von letters[26][7*5+1].
Wieso nach 7 Mal "..." kommt erst ein Komma (,) ? Das sind eindeitig 35 Zeichen (ich glaube +1 ist dort überflüssig, oder? Ich hab es ohne +1 getestet und keinen Fehler entdeckt. Ich würde sagen, dasselbe gilt auch für 26, statt 26 nur 25, oder wieso hast du immer 1 dazu gezählt? Hae ich das was verpasst? ). Was bedeutet "xxx" "yyy"? Ist nicht dasselbe wie "xxxyyy" ?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 26.08.2003 um 16:25 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.08.2003, 16:31 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
Pablo Yanez Trujillo postete
Geniale Lösung!

Das ist bei weitem noch keine Lösung. schon garkeine kurze.

Zitat:
ich hab eine Frage zur Initialisierung von letters[26][7*5+1].
Wieso nach 7 Mal "..." kommt erst ein Komma (,) ? Das sind eindeitig 35 Zeichen (ich glaube +1 ist dort überflüssig, oder?


Das sind ja alles in allem 26 C-Style Strings, jeder enthält 35 ZEichen+ terminierende NULL, Wenm Du die 1 wegläßt, sind sie nicht mehr terminiert. Macht aber - das hast Du recht - keinen wesentlichen Unetrschied hier.


Zitat:
Ich würde sagen, dasselbe gilt auch für 26, statt 26 nur 25, oder wieso hast du immer 1 dazu gezählt? Hae ich das was verpasst? ). Was bedeutet "xxx" "yyy"? Ist nicht dasselbe wie "xxxyyy" ?

Nein, die 26 ist richtif.
"xxx" "yyy" ist das glewiche wie "xxxyyy", ja.
--
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
004
26.08.2003, 16:56 Uhr
0xdeadbeef
Gott
(Operator)


Na, virtual. Da hätt ich schon ein bisschen mehr erwartet. Die Buchstaben lassen sich wunderbar als ints speichern, die mit folgender Funktion:

C++:
char *t(n,char*s){int i=0,j=5;while(j--)s[i++]=32+10*(n>>j&1);return s;}


(ungetestet, aber Prinzip ist klar, denke ich) umgewandelt kriegst. Damit dürftest du schon so um die hundert Zeichen sparen. Wenn du dann statt dieser umständlichen for/putchar-Gebastelei einfach ein puts nimmst, geht das nochmal runter. Im Endeffekt landen wir dann bei

C++:
main(){int i,j,s[6]={0};for(i=65;i<90;++i)putchar(10),for(j=0;j<7;++j)puts(t(l[(i-65)*7+j],s));}


Und halt der umgebauten Tafel. Jedenfalls, wenn ich mich nicht vertippt und/oder verdacht habe. So würde ich das anfangen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
26.08.2003, 17:17 Uhr
Pablo
Supertux
(Operator)



Zitat:
virtual postete
[quote]Pablo Yanez Trujillo postete
[i]Geniale Lösung!


Das ist bei weitem noch keine Lösung. schon garkeine kurze.[/i][/quote]

Ich weiß, dass es keine Lösung zum Rätsel ist, aber wenn man das hat, ist der Rest nur Handwerk. Die Kunst ist nämlich das Array. Deshalb hab ich Lösung gesagt.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
26.08.2003, 18:01 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
0xdeadbeef postete
Na, virtual. Da hätt ich schon ein bisschen mehr erwartet. Die Buchstaben lassen sich wunderbar als ints speichern, die mit folgender Funktion:

Ich weiß. Siehe meine signature
Es geht aber sogar noch extremer, zumindestns bekommt man den ganzenzeichensatz mit mit etwa weniger als 780 Bits (oder 98 character) theortisch komplett abgebildet. Welchen einfluß das auf den Algo hat, weiß ich noch nicht.
Meine Programm könnte zB Dazu genutzt werden, die von Dir angesprochene Tabelel zu berechnen und daraus dann das Golfprogramm zu bauen.
--
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
26.08.2003, 19:25 Uhr
0xdeadbeef
Gott
(Operator)


Wobei du da nur mit Mühe unter 300 Zeichen kommen dürftest...

Übrigens - was die sig angeht - Standardkonform ist das aber nicht... Hups, ist es doch. Wart mal kurz, das gibt ja ganz neue Möglichkeiten fürs golfen...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 26.08.2003 um 19:27 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
26.08.2003, 20:14 Uhr
virtual
Sexiest Bit alive
(Operator)


Nein, die ist nict Standardkonform, weil C99 das nicht mehr erlaubt. Und C89 ist veraltet.
--
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
009
26.08.2003, 20:40 Uhr
kronos
Quotenfisch
(Operator)


thx vitu! : ) gibt's ein par?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]     [ 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: