Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Seltsame Ausgabe

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
27.06.2009, 20:31 Uhr
Hans
Library Walker
(Operator)


Hi,

hier irgendwo im Forum bin ich vor ein paar Wochen mal auf diesen "Golfball" gestossen.

C++:
main(){int x=0,y=1228443207;for(;x<105;++x,y=x<32?y:x<64?3392743058u:x<96?611502372:137)putchar((x+1)%21 ?y&1<<x?64:32:10);}



In besser lesbarer Form gebracht sieht das z.B. so aus:

C++:
main()
{ int x=0,
      y=1228443207;
  
  for( ; x<105 ; ++x, y=x<32 ? y:x < 64 ? 3392743058u : x<96 ? 611502372:137)
     putchar ((x+1)%21 ? y&1 << x ? 64:32 : 10);

  return 0;
}



Die Frage ist jetzt, wie man auf die Konstanten kommt, so das die Ausgabe entsteht, die das Programm liefert?

Hinweis am Rande: Das hatte irgendwer mal als Unterschrift unter seinen Beiträgen, ich kann es aber nicht mehr wieder finden, deshalb der neue Thread.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2009, 21:19 Uhr
0xdeadbeef
Gott
(Operator)


Das ganze ist lediglich ein langes Bitmuster. x läuft praktisch als Bitindex durch die vier Zahlen 1228443207, 3392743058, 611502372 und 137, wobei jedes 21te Bit ignoriert wird (Zeilenumbruch). Wenn man die entsprechend zeilenumgebrochen als Binärzahlen hinschreibt, ergibt sich

Code:
111000100111000100011
100100100100100100101
100100100111000101001
100100100100100110100
111000100100100100010


...und es wird halt einfach nur jede 0 als Leerzeichen und jede 1 als @ ausgegeben (und das letzte Bit der Zeile ignoriert).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.06.2009 um 21:21 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.06.2009, 17:44 Uhr
Hans
Library Walker
(Operator)


Hi,

thank's Beefy, - wieso bin ich da eigentlich nicht von selber drauf gekommen???
Muss wohl 'ne falsche Analysemethode sein, oder ich hab an der falschen Stelle gesucht...

Nun ja, jetzt ist es auf jeden Fall klar. - Wer's nicht glaubt, jage das hier durch den Compiler...

C++:
#include <stdio.h>

int main()
{ int x=0,
  y=1362695057;
  for ( ; x<168 ; ++x, y = x<32 ? y : x<64 ? 877741332 : x<96 ? 961830661 \
        : x<128 ? 1363253201 : x<160 ? 340870420 : 57)
  putchar ((x+1)%24 ? y & 1<<x ? 42:32 : 10);  
  return 0;
}



Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 28.06.2009 um 17:45 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.06.2009, 13:56 Uhr
0xdeadbeef
Gott
(Operator)


Ich hab hier noch etwas alten Golf-Code rumliegen. Stammt, wenn ich mich recht entsinne, aus virtuals Feder - bereinigt sieht das etwa so aus:

C++:
#include <stdio.h>
#include <stddef.h>

char const font[] =
  "NONO__NQDPQAQQNONON_QQQQQ_QQQQAAQQDPIA[QQQQQQDQQQQQPQQAQAAAQDPEAUSQQQQADQQQ"
  "JJH_OAQOOA_DPCAQUQOQONDQQQDDDQQAQAAYQDPEAQYQAUQPDQQUJDBQQQQAAQQDQIAQQQAIQQD"
  "QJ[QDAQONO_ANQDNQ_QQNAVQNDNDQQD_";

int main(void) {
  char const text[] = "OXDEADBEEF";
  size_t i, k;
  char const *p;

  for(i = 0; i < 7; ++i) {
    for(p = text; *p; ++p) {
      for(k = 0; k < 6; ++k) {
        putchar((font[*p - 'A' + 26 * i] >> k & 1) ? '#' : ' ');
      }
    }

    putchar('\n');
  }

  return 0;
}


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

Dieser Post wurde am 30.06.2009 um 13:58 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.06.2009, 16:53 Uhr
0xdeadbeef
Gott
(Operator)


Wo ich doch grad so viel Spaß damit habe - hier die etwas erweiterte Schrift:

C++:
#include <stdio.h>
#include <stddef.h>

char const font[][97] = {
  "@DJ@DSBDHB@@@@@PNDNNH_L_NN@@@" "@@NNNONO__NQDPQAQQNONON_QQQQQ_NAND@D@A@P@L@ADPAF@@@@@@@D@@@@@@HDB@",
  "@DJJNSEDDDJD@@@PQFQQLABPQQ@@\\""@GQQQQQQAAQQDPIA[QQQQQQDQQQQQPBAHJ@H@A@P@B@A@@AD@@@@@@@D@@@@@@DDD@",
  "@D@_AHE@DDND@@@HSDPPJAAHQQDDB" "_HP]QQAQAAAQDPEAUSQQQQADQQQJJHBBHQ@@NON^NB^OFXIDKGNO^MNNQQQQI_DDD@",
  "@D@JNDB@DD__@_@DUDHLIOODN^@@A" "@PHU_OAQOOA_DPCAQUQOQONDQQQDDDBDH@@@PQQQQOQQDPEDUIQQQRADQQQJIHBDHJ",
  "@D@JPBU@DDND@@@BYDDP_PQDQPDDB" "_HDYQQAQAAYQDPEAQYQAUQPDQQUJDBBHH@@@^QAQOB^QDPCDUIQO^BNDQQUDNDDDDE",
  "@@@_NYI@DDJDD@@AQDBQHQQDQH@D\\""@G@AQQQQAAQQDQIAQQQAIQQDQJ[QDABPH@@@QQQQABPQDREDUIQAPBPDYJUJHBDDD@",
  "@D@JDYV@HB@@B@DANN_NHNNDNF@B@" "@@DNQONO_ANQDNQ_QQNAVQNDNDQQD_NPN@_@^ON^NBNQNLINUINAPGNLVDJQF_HDB@"
};

int main(void) {
  char const text[][21] = {
    "Hallo, Hans!",
    "Wie geht es dir?",
    "Mir geht es gut,",
    "allerdings sind die",
    "Zeilen viel zu kurz;",
    "ich kriege keine 20",
    "Buchstaben nebenei-",
    "nander in mein",
    "Emacs-Fenster."
  };
  size_t i, j, k;
  char const *p;

  for(i = 0; i < sizeof(text) / sizeof(text[0]); ++i) {
    for(j = 0; j < 7; ++j) {
      for(p = text[i]; *p; ++p) {
    for(k = 0; k < 6; ++k) {
      putchar((font[j][*p - ' '] >> k & 1) ? '#' : ' ');
    }
      }
      putchar('\n');
    }
    putchar('\n');
  }

  return 0;
}


...kann alle druckbaren ASCII-Zeichen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 30.06.2009 um 16:53 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.06.2009, 17:54 Uhr
Hans
Library Walker
(Operator)


Hi,




Zitat von 0xdeadbeef:


C++:
...
   "allerdings sind die",
    "Zeilen viel zu kurz;",
    "ich kriege keine 20",
    "Buchstaben nebenei-",
    "nander in mein",
    "Emacs-Fenster."
...





*gg* Ich auch nicht.


Code:
#   #        ##    ##                     #   #                     #
#   #         #     #                     #   #                     #
#   #  ###    #     #    ###              #   #  ###  ###    ###    #
#####     #   #     #   #   #             #####     # #  #  #       #
#   #  ####   #     #   #   #             #   #  #### #  #   ###    #
#   # #   #   #     #   #   #   #         #   # #   # #  #      #
#   #  ####  ###   ###   ###   #          #   #  #### #  #   ###    #

#   #   #                           #       #                               #
#          ###
#   #                               #       #                               #
          #   #
#   #  ##    ###         ####  ###  ####   ###         ###   ###         ####  #
#   # ##      #
#   #   #   #   #       #   # #   # #   #   #         #   # #           #   #
#    #  #    #
# # #   #   ####         #### ####  #   #   #         ####   ###        #   #
#    #      #
## ##   #   #               # #     #   #   #         #         #       #   #
#    #
#   #  ###   ###         ###   ###  #   #   ##         ###   ###         ####  #
##  ###     #

#   #   #                           #       #
      #
## ##                               #       #
      #
# # #  ##   # ##         ####  ###  ####   ###         ###   ###         #### #
  #  ###
#   #   #    #  #       #   # #   # #   #   #         #   # #           #   # #
  #   #
#   #   #    #           #### ####  #   #   #         ####   ###         #### #
  #   #
#   #   #    #              # #     #   #   #         #         #           # #
##   #     #
#   #  ###  ###          ###   ###  #   #   ##         ###   ###         ###   #
# #   ##   #

       ##    ##                   #   #                                   #
        #           #   #
        #     #                   #
        #           #
###    #     #    ###  # ##   ####  ##   ###    ####  ###         ###   ##   ##
#    ####        ####  ##    ###
    #   #     #   #   #  #  # #   #   #   #  #  #   # #           #       #   #
#  #   #       #   #   #   #   #
####   #     #   ####   #    #   #   #   #  #   ####  ###         ###    #   #
#  #   #       #   #   #   ####
#   #   #     #   #      #    #   #   #   #  #      #     #           #   #   #
#  #   #       #   #   #   #
####  ###   ###   ###  ###    ####  ###  #  #   ###   ###         ###   ###  #
#   ####        ####  ###   ###

#####         #    ##                             #          ##



Das ist zwar aus einem DOSen-Fenster, aber naja...

Das Problem mit dem zu schmalen Bildschirmfenster müsste sich aber lösen lassen, wenn man den Text als Laufschrift ausgibt. - Hab zwar noch keinen Plan, wie das geht, - aber 'ne Idee dazu.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 30.06.2009 um 18:02 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.06.2009, 17:56 Uhr
0xdeadbeef
Gott
(Operator)


Machs halt ein bisschen breiter.

Bearbeitung:

Pasten ist schwierig, der nimmt mir führende Leerzeichen weg.



Nachtrag:

Ansonsten tut's vielleicht auch das hier:

C++:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>

char const font[][97] = {
  "@DJ@DSBDHB@@@@@PNDNNH_L_NN@@@" "@@NNNONO__NQDPQAQQNONON_QQQQQ_NAND@D@A@P@L@ADPAF@@@@@@@D@@@@@@HDB@",
  "@DJJNSEDDDJD@@@PQFQQLABPQQ@@\\""@GQQQQQQAAQQDPIA[QQQQQQDQQQQQPBAHJ@H@A@P@B@A@@AD@@@@@@@D@@@@@@DDD@",
  "@D@_AHE@DDND@@@HSDPPJAAHQQDDB" "_HP]QQAQAAAQDPEAUSQQQQADQQQJJHBBHQ@@NON^NB^OFXIDKGNO^MNNQQQQI_DDD@",
  "@D@JNDB@DD__@_@DUDHLIOODN^@@A" "@PHU_OAQOOA_DPCAQUQOQONDQQQDDDBDH@@@PQQQQOQQDPEDUIQQQRADQQQJIHBDHJ",
  "@D@JPBU@DDND@@@BYDDP_PQDQPDDB" "_HDYQQAQAAYQDPEAQYQAUQPDQQUJDBBHH@@@^QAQOB^QDPCDUIQO^BNDQQUDNDDDDE",
  "@@@_NYI@DDJDD@@AQDBQHQQDQH@D\\""@G@AQQQQAAQQDQIAQQQAIQQDQJ[QDABPH@@@QQQQABPQDREDUIQAPBPDYJUJHBDDD@",
  "@D@JDYV@HB@@B@DANN_NHNNDNF@B@" "@@DNQONO_ANQDNQ_QQNAVQNDNDQQD_NPN@_@^ON^NBNQNLINUINAPGNLVDJQF_HDB@"
};

size_t get_term_columns(void) {
  size_t cols = 80;
  char const *col_env = getenv("COLUMNS");

  if(col_env != NULL) {
    sscanf(col_env, "%lu", &cols);
  }

  return cols;
}

int main(void) {
  char const text[] =
    "Hallo, Hans! Wie geht es dir? Mir geht es gut, allerdings sind die Zeilen"
    " viel zu kurz; ich kriege keine 20 Buchstaben nebeneinander in mein "
    "Emacs-Fenster.";
  size_t i, j, k, lpl = get_term_columns() / 6;
  char const *p;
  char const *q;

  for(p = text, q = p; *q; p += lpl) {
    for(j = 0; j < 7; ++j) {

      for(i = 0, q = p; *q && i < lpl; ++q, ++i) {
        for(k = 0; k < 6; ++k) {
          putchar((font[j][*q - ' '] >> k & 1) ? '#' : ' ');
        }
      }
      putchar('\n');
    }
    putchar('\n');
  }

  return 0;
}


...ist aber natürlich nicht schön wortweise getrennt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 30.06.2009 um 18:02 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.06.2009, 18:07 Uhr
Hans
Library Walker
(Operator)


Na das sieht doch schon wesentlich besser aus.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 30.06.2009 um 18:08 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.06.2009, 19:59 Uhr
0xdeadbeef
Gott
(Operator)


Ich versuch's nochmal. Kompletter Zeichensatz:

Code:
--------------------------------------------------------------------------------
        #    # #          #   ##  #  #      #      #   #                      
        #    # #   # #   ###  ##  # # #     #     #     #    # #    #        
        #         ##### #        #  # #           #     #    ###    #        
        #          # #   ###    #    #            #     #   ##### #####      
        #          # #      #  #    # # #         #     #    ###    #        
                  #####  ###  #  ## #  #          #     #    # #    #     #  
        #          # #    #   #  ##  ## #          #   #                 #    

                #  ###    #    ###   ###     #  #####   ##  #####  ###   ###  
                # #   #  ##   #   # #   #   ##  #      #        # #   # #   #
               #  ##  #   #       #     #  # #  #     #        #  #   # #   #
#####         #   # # #   #      #    ##  #  #  ####  ####    #    ###   ####
             #    #  ##   #     #       # #####     # #   #   #   #   #     #
            #     #   #   #    #    #   #    #  #   # #   #   #   #   #    #  
        #   #      ###   ###  #####  ###     #   ###   ###    #    ###   ##  

                               ###   ###   ###  ####   ###  ####  ##### #####
              ###       ###   #   # #   # #   # #   # #   # #   # #     #    
  #     #    #    #####    #      # # ### #   # #   # #     #   # #     #    
            #               #    #  # # # ##### ####  #     #   # ####  ####  
  #     #    #    #####    #    #   #  ## #   # #   # #     #   # #     #    
        #     ###       ###         #     #   # #   # #   # #   # #     #    
       #                        #    ###  #   # ####   ###  ####  ##### #    

_###  #   #   #       # #   # #     #   # #   #  ###  ####   ###  ####   ###  
#   # #   #   #       # #  #  #     ## ## #   # #   # #   # #   # #   # #   #
#     #   #   #       # # #   #     # # # ##  # #   # #   # #   # #   # #    
#     #####   #       # ##    #     #   # # # # #   # ####  #   # ####   ###  
#  ## #   #   #       # # #   #     #   # #  ## #   # #     # # # #   #     #
#   # #   #   #   #   # #  #  #     #   # #   # #   # #     #  #  #   # #   #
_###  #   #   #    ###  #   # ##### #   # #   #  ###  #      ## # #   #  ###  

##### #   # #   # #   # #   # #   # #####  ###  #      ###    #           #  
  #   #   # #   # #   # #   # #   #     #  #    #        #   # #           #  
  #   #   # #   # #   #  # #   # #     #   #     #       #  #   #            
  #   #   # #   # #   #   #     #     #    #      #      #                    
  #   #   # #   # # # #  # #    #    #     #       #     #                    
  #   #   #  # #  ## ## #   #   #   #      #        #    #                    
  #    ###    #   #   # #   #   #   #####  ###      #  ###        #####      

      #               #         ##        #       #       # #      ##        
      #               #        #          #                 #       #        
_###  ####   ###   ####  ###   #     #### ####   ##      ## #  #    #   ## #  
    # #   # #   # #   # #   # ####  #   # #   #   #       # # #     #   # # #
_#### #   # #     #   # ####   #     #### #   #   #       # ##      #   # # #
#   # #   # #   # #   # #      #        # #   #   #    #  # # #     #   # # #
_#### ####   ###   ####  ###   #     ###  #   #  ###    ##  #  #   ###  # # #

                                      #                                      
                                      #                                      
###    ###  ####   #### # ##   ###   ###  #   # #   # #   # #   # #  #  #####
#  #  #   # #   # #   #  #  # #       #   #   # #   # #   #  # #  #  #     #  
#  #  #   # ####   ####  #     ###    #   #   # #   # # # #   #    ###    #  
#  #  #   # #         #  #        #   #   #  ##  # #  # # #  # #     #   #    
#  #   ###  #         # ###    ###    ##   ## #   #    # #  #   #  ##   #####

   #    #    #          
  #     #     #        
  #     #     #        
_#      #      #   # #  
  #     #     #   # #  
  #     #     #        
   #    #    #          


Unterstriche sind eigentlich Leerzeichen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 30.06.2009 um 20:03 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.07.2009, 16:55 Uhr
0xdeadbeef
Gott
(Operator)


In dem Zusammenhang - getenv("COLUMNS") funktioniert nicht, wenn COLUMNS von der Shell nicht exportiert wurde. Das hier:

C++:
size_t get_term_columns(void) {
  size_t cols = 80;
  char const *col_env = getenv("COLUMNS");

  if(!col_env || sscanf(col_env, "%lu", &cols) != 1) {
    struct winsize wsz;
    if(!ioctl(STDOUT_FILENO, TIOCGWINSZ, &wsz)) {
      cols = wsz.ws_col;
    }
  }

  return cols;
}


funktioniert auf POSIX-Systemen zuverlässiger.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 01.07.2009 um 17:16 Uhr von 0xdeadbeef editiert.
 
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: