# Möglichst unverständliches Programm



## Xadian (10. Jul 2006)

Hey Leute,

ich hatte vor ner Weile mal ein kleines Programm hier (in Pseudocode), was darauf ausgelegt war möglichst klein (wenig Zeilen) zu sein und dabei so unverständlich wie möglich zu sein. Jetzt wollt ich das wem ziegen und finds nicht mehr wieder. Aber da es sowas bestimmt öfter gibt wollt ich mal wissen, ob mir jemand nen Link zu sowas geben kann.
Sollte halt einfach möglichst kurz sein und seine Aufgabe (durch entsprechend unübersichtliche Programmierung) so gut es geht verschleiern (z.B. durch GOTO oder so). Pseudocode wär am besten oder C,C++,C#,Java oder Ada wären mir am liebsten (anderes geht aber zur Not auch). Und die Aufgabe muss nicht komplex sein (das was ich hatte hat glaub ich einfach nur nen int Wert berechnet aber es war recht schwer rauszufinden welchen genau).

mfg
xadian


----------



## Jockel (10. Jul 2006)

http://www.ioccc.org/


----------



## foobar (10. Jul 2006)

Frag hier: http://www.perl-community.de/ mal nach die werden sich freuen *ggg*


----------



## moormaster (10. Jul 2006)

http://de.wikipedia.org/wiki/Esoterische_Programmiersprache

das sollte reichen, um undurchsichtige Programme zu erstellen ^^


----------



## RaoulDuke (10. Jul 2006)

Ist zwar Perl und kein Java, funktioniert aber:


```
''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')
    .('`'        |'!')        .('`'        |',')        .'"'.        '\\$'
    .'=='        .('['        ^'+')        .('`'        |'/')        .('['
    ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')
    .';-'        .'-'.        '\\$'        .'=;'        .('['        ^'(')
    .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')
   .'_\\{'      .'(\\$'      .';=('.      '\\$=|'      ."\|".(      '`'^'.'
  ).(('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'
 ).('['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).
 '\\"'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(
 '{'^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.
 ('{'^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(
 '`'|"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).
 '\\"\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).
 '+_,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(
 '`'|"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(
 '{'^"\[").(  '`'|"\$").(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^
 '[').("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|
 ')').("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^
 '.').("\`"|  '.').("\`"|  '$')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^
 '+').("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(
 '`'|('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';
```


----------



## 0xdeadbeef (10. Jul 2006)

99 Bottles?
Da gibt's auch echte Klassiker wie Whitespace und Brainfuck


----------



## The_S (11. Jul 2006)

RaoulDuke hat gesagt.:
			
		

> Ist zwar Perl und kein Java, funktioniert aber:
> 
> 
> ```
> ...



WTF? Was in Gottes Namen ist das???


----------



## RaoulDuke (11. Jul 2006)

Ich hab es ausprobiert, es erzeugt tatsächlich diese Ausgabe:

http://www.99-bottles-of-beer.net/lyrics.html

Wie das genau funktioniert konnte ich allerdings leider noch nicht festellen, irgendwie baut das Programm wohl über Schleifen und Reguläre Ausdrücke dynamisch Code zusammen und interpretiert den. Sehr krasse Nummer auf jeden Fall.


----------



## Lim_Dul (11. Jul 2006)

Diese Java Version von 99 Bottles of Beer ist auch cool:


```
public class BeerSongLoader extends ClassLoader {
  private static final String BEER_SONG =
	  
    " #§$%MBVC?*9@QW68Q986@9                                                                   " +
    " @6######%§##%@#9##§§##§9                                                                 " +
    "   #C##§@#9#   ##$##§9#?#                                                                 " +
    "   #§Q#?##§W    #?##§6#9#                                                                 " +
    "   #§8##$##9    ###$##$§#         ?##$$#?##           $%#?##$M#?         ##$B#?#  #$V#?#  " +
    "   #$C#?##$?    #9###$##       $*#C##$9#9##$@       ##$Q#9##$W##$6   #C##$8#§### V%QV*V6V " +
    "   *CM%6#§###%$?$*BV#§#       ##MM%V8   VMVB#§#   ##?CMV8B  %CMC$V*  V6VC#§##§M$?$*MQV9V§ " +
    "   CVV§$8VQV§V6VC$8B%CMC$    V*V6VC%    @#Q##§B  ##§V#§##    §CV9V§C   VV§$8VQV§V6VC$8B%C " +
    "   MC$V*V6VCM$CBV*VQVMVBC$  #§##%WC@%#$QV%V?V8V* V%VB$Q%#$%V6V8$#VWV   8C$VB$#V$  V8CMCM  " +
    "   VQVBC%CQ%     §$%%§$#V$V 8CMCMVQVBCQ%§%QC@%#  CW$#V$V8CMCMVQVBC%C   W$#V8VV$#          " +
    "   V$VBVBC$#     §###§V6#§# ##§M6#C##            %##Q##%§              ##%$#Q##           " +
    "   %%##%M#§#     ##6$#V8V6$  #CMV?VB$#           CCV§VQVQ$             Q$##§###$          " +
    "  $6#9#§##$WC   @%#$QV%V?V    8V*V%VB$Q%#$%MCV8   $#CMV8$#CMV?VB$#C%   CMV8C$VB$          " +
    "  #V§V6VM$#V$CBC*$#C%V8VWV      B$#VWV8C$VB#§##$    VCQ%#%QBMV§V@VB$  #V8V6VB$#VMV8C      " +
    " CV6$#V§V6VM$#C#V§C%C%$#          V*CM$#V§C$V         8CBV6VMCW$Q$    ##§###$C@%##§#      " +
    "                                                                                          " +
    " ##$C@%§#§###8$#V8V6$#C                                                                   " +
    " MV?VB$#CCV§VQVQ$6#9#9#Q#                                                                 " +
    "   #§?##§*#§   ##§#V9V§CV                                                                 " +
    "   V§$8VQV§V    6VC$8M8V$                                                                 " +
    "   V9VBV%CM#    C##%B#Q##         %V##%C#C#           #%?#Q##%*#         #%9#§##  #?M$VB  " +
    "   VBC$B%V8V    6VC#§##§       #V9V§CVV§$8VQV       §V6VC$8B%CMC$V   *V6VC#§###C C$VBC#VQ " +
    "   V§V%VB#§##MM$?MQV9V§       CVV§$8V   QV§V6VC   $8M%V?V§  C$B%VBC  §CBVBV6V%VB%@MQV9V§C " +
    "   VV§$8VQV§V6VC$8M%V?V§C    $B%VBC§    CBVBV6V  %VB%@$*M    QV9V§CV   V§$8VQV§V6VC$8B%CM " +
    "   C$V*V6VC%@#§###VV§C#C#V  BV6VM#§##$W$?MQV9V§C VV§$8VQV§V6VC$8B%CM   C$V*V6VC%  @$*MQV  " +
    "   9V§CVV§$8     VQV§V6VC$8 B%CMC$V*V6VCM$CBV*V  QVMVBC$%@#§##§§V9V§   CVV§$8VQV          " +
    "   §V6VC$8M*     V6CMVBVCVB C$#§###CC            VV§VQCBV              BM8VV#§#           " +
    "   #§V$?M*$*     MQV9V§CVV§  $8VQV§V6V           C$8M*V6CM             VBVCVBC$%          " +
    "  @#§##§CV9V§   CVV§$8CMVB    C?CM$8MWVBC%C%V§V   CVBMVV8C$VWV§CM#§#   ##VVVV8C$          " +
    "  VWV§CM#§##%*$?MQV9V§CVV§      $8VQV§V6VC$8B%CM    C$V*V6VC%@B@MQV9  V§CVV§$8VQV§V6      " +
    " VC$8M8V$V9VBV%CM%@$*MQV          9V§CVV§$8VQ         V§V6VC$8B%CM    C$V*V6VC%@##$§      " +
    "                                                                                          " +
    " ##§M##§§###########$##                                                                   " +
    " #§##§B##§V###§##§C######                                                                 " +
    "   §§###§###   §#######B$                                                                 " +
    "   9@C###§@§    #########                                                                 " +
    "   ##§##§?##    §*###§##§         C######?V           ###C###M##         ####C9@  @###$B  " +
    "   *@C###%MQ    §#V%%W§Q       *@##V*§$#MM6$@       @@###$B*@C###%   $W§$#B§$#V@ V###C@V# " +
    "   ##?§$#*@V###?$W@V###       ?§$#9@V   ###?§$#   @@V###?§  $#Q@V##  #?$W§$#W§$#6@V###C@V " +
    "   ###?§$#8@V###?@V##§##B    @W##§§B    *#%§Q@?  ##§$B%B*    #M§Q§#V   %V#§#VMC#@?##§$B%@ " +
    "   ?##§%@V###?BC?M#$889C88  **$@@V##§#@######### ####C§$*M§QCC@@#V*?   M%V*Q9?C%  B§Q%CM  " +
    "   @C9V@Q8C$     *@6#M9B§%6 %@Q*§B6#C?CQ?*9WQ%9  9QVC#89B§#*6CQ%#*B§   V?9$9QMV§          " +
    "   M@Q@V6V88     8V9§@W96M$ §??V8M@C%            %**MQ@§*              $§VC%$@*           " +
    "   C§8?M98QC     #M$9W%$6B9  VV$$§WCMQ           $%#W8§#QB             ?W8C?$W9@          " +
    "  96C9@V?%$*6   89BVWV@W8@    VM$M#CC8V$@M$6M*%   V#$MC6W#§%%%*8#CM@   M*B@%9$W?          " +
    "  $9$99M$?*8B$VM8CC§CW6W@*      %W%CC?@#§?B8@W%9    ?*%$9B%8Q*§BQ$Q9  6@V9#?V98C$M$M      " +
    " M@%??C88M$86M$QV§WC?B?V          Q%§B8§#%?MQ         B6§BM?B9@#$%    WQMW?BBBB?#§§6      ";

  @Override public Class<?> loadClass(String name) throws ClassNotFoundException {
    String alphabet = "";
    byte[] code = new byte[946];
    int i = 0, j = 0;
    boolean firstNibble = false;
    while (i < 946) {
      while (BEER_SONG.charAt(j) == ' ') j++;
      if (alphabet.length() < 16)
        alphabet += BEER_SONG.charAt(j++);
      else if (firstNibble = !firstNibble)
        code[i] = (byte)(alphabet.indexOf(BEER_SONG.charAt(j++)) * 16);
      else
        code[i++] += alphabet.indexOf(BEER_SONG.charAt(j++));
    }
    return name.equals("BeerSong") ? defineClass(name, code, 0, 946) 
                                   : findSystemClass(name);
  }

  public static void main(String[] args) throws Throwable {
    Class<?> beerSong = new BeerSongLoader().loadClass("BeerSong");
    System.out.println(beerSong.newInstance());
  }
}
```
http://www.99-bottles-of-beer.net/language-java-1162.html


----------



## foobar (11. Jul 2006)

@Lim_Dul pretty cool


----------



## gekkonier (18. Jul 2006)

RaoulDuke hat gesagt.:
			
		

> Ich hab es ausprobiert, es erzeugt tatsächlich diese Ausgabe:
> 
> http://www.99-bottles-of-beer.net/lyrics.html
> 
> Wie das genau funktioniert konnte ich allerdings leider noch nicht festellen, irgendwie baut das Programm wohl über Schleifen und Reguläre Ausdrücke dynamisch Code zusammen und interpretiert den. Sehr krasse Nummer auf jeden Fall.



Perl hat die möglichkeit innerhalb von Regexen Code zu generieren (der natürlich auch wieder durch die Maschine verändert werden kann, rekursiv sozusagen).
Da hat Perl die Nase vorn.

Es gibt übrigens für Perl Programme, denen man als Parameter eine Schablone (z.B. wie schaun diese Flaschen aus) und ein Script übergibt und die Obfuscation für einen übernimmt. IMHO ist das Flaschenprogramm auch so entstanden. Selber würde man wahrscheinlich mehrere Wochen daran rumkauen.


----------



## foobar (18. Jul 2006)

> Perl hat die möglichkeit innerhalb von Regexen Code zu generieren


Du meinst Code zu evaluieren:


```
s/foo(.*?)bar/&myFunction($1)/sieg;
```
Der Modifier e bewirkt daß der 2 der Ersetzenteil evaluiert wird. Sowas wünsche ich mir auch in Java . ich wäre schon zufrieden wenn es in Java ein paar schönere Stringoperationen wie in perl gäbe oder eine Syntx für Methodenpointer.


----------



## gekkonier (19. Jul 2006)

foobar hat gesagt.:
			
		

> Du meinst Code zu evaluieren:


Jupp, meinte ich eigentlich


----------



## unknown_member (1. Jan 2007)

@ Lim Dul: Wirklich krass!


____
MfG, unknown_member


----------

