Schreiben Sie ASCII-Art Obfuscated Code, lesen Sie als und führen Sie zu: "DFTBA"


8

Die Herausforderung besteht darin, den aufwändigsten Code zu schreiben, der in ASCII-Grafiken eingebettet ist und "DFTBA" liest und druckt. Zum Beispiel lautet das Folgende DFTBA:

oooooooooo.   oooooooooooo ooooooooooooo oooooooooo.        .o.       
`888'   `Y8b  `888'     `8 8'   888   `8 `888'   `Y8b      .888.      
 888      888  888              888       888     888     .8"888.     
 888      888  888oooo8         888       888oooo888'    .8' `888.    
 888      888  888    "         888       888    `88b   .88ooo8888.   
 888     d88'  888              888       888    .88P  .8'     `888.  
o888bood8P'   o888o            o888o     o888bood8P'  o88o     o8888o 

Und das Folgende, in Bash druckt DFTBA

echo "DFTBA"

Die Herausforderung besteht darin, eine zu schreiben, die beides kann.

Gewinnbedingungen

Gültige Antworten (alle Bedingungen nach meinem Ermessen)

  • Kann deutlich als DFTBA gelesen werden
  • DFTBA drucken, wenn ausgeführt
  • Muss ohne Internetverbindung funktionsfähig sein
  • Buchstaben gleicher Höhe haben
  • darf nicht mehr als 80 Spalten haben
  • darf nicht mehr als 10 Zeilen haben

Punkte (höchste Summe gewinnt)

  • Zeilen * Spalten / 32
  • Lesbarkeit: 25 für lesbar, 50 für sehr klar
  • 1 Punkt für jedes verwendete Nicht-Leerzeichen

Beschränkungen

Diese können für etwas verwendet werden, sodass davon ausgegangen wird , dass alle Antworten öffentlich zugänglich sind. Wenn Sie Ihre Antwort nicht oder nicht öffentlich zugänglich machen können: Geben Sie einen Kommentar / eine Antwort auf die ursprüngliche Frage mit dem Titel "Die von mir verfasste und / oder geteilte Antwort wird möglicherweise nicht als gemeinfrei angesehen." .

Nicht gemeinfreie Antworten sind ebenfalls willkommen! Stellen Sie einfach sicher, dass Sie Folgendes angeben :-)

Was ist DFTBA?

Es steht manchmal für "Don't Forget To Be Awesome", aber nicht immer ... Lange Geschichte ... Dieses verwandte Lied könnte helfen, es zu erklären (oder zu verwirren).


Das Gewinnkriterium ist wirklich die größte Fläche? Das wird schnell zu einem Wettrüsten von Menschen, die immer mehr wertlose Charaktere hinzufügen, um es größer zu machen. Es gibt wirklich keine Obergrenze dafür.
Captncraig

@CMP, überarbeitet, danke :-)
Brigand

Zählen Groß- und Kleinbuchstaben getrennt (als unterschiedliche Zeichen)?
Shmiddty

Was hindert mich auch daran, zufällige Zeichen in den Code zu kopieren, die nichts bewirken? Ist das erlaubt
Shmiddty

@Shmiddty, ja, alle Zeichen mit unterschiedlichen ASCII-Codes (außer Leerzeichen). Solange es läuft, ist das in Ordnung :-)
Brigand

Antworten:


6

(Ich habe eine vollständige Schreib aus hier , wie es ist recht umfangreich , wie ich auf diese beiden Ergebnisse bekam)

Brainfuck, vollständiger ASCII-Bereich 0 bis 255: 80 x 10 = 800/32 = 25 + 25 + 219 = 269

+l+A+O#@e@        /+@+|+2+@@X     @*3+}+@+@YZ    q4[@>@+@@           @:+@
@+B+"+~@@N        @p+K+%>@@v@     dJ+w+@+@+@@    I@+@+@+@@         (@+  @<@
@<@      @-@      @@]                 U>@        @-@    -@@f      @.r    +@E
+@@       .@@0    @>@+@+@+@@@         @+@        @.@    <@@@      @-'    -@@
-€R       -9‚     ƒ.„-….†$c‡ˆ         ‰Š‹        Œg&Ž6H        ‘h’“7”i•–—
˜u™       Qš1›    MœL                 )nG        ?žŸ x¡¢£        `¤¥¦j@§{D¨
!©ª       «P¬­    ®bm                 ¬¯°        ±²³    ´µ\¶     ·¸F      ¹8º
»S¼      ½¾¿      ÀVÁ                 ÂTà        ÄÅk    _ÆÇÈ     ÉÊË      ÌÍÎ
ÏaÐ;ÑCÒÓsÔ        ÕÖ×                 ØoÙ        ÚÛ=Ü5ÝÞßà      áâã        äåæ
çtèéê^ëìíî        Wïð                 ñòó        ôõö÷yøùúû      üýz        þÿ,

Es gibt eine Linie durch die Mitte dieser oberen, die nicht ganz eng ist, aber das ist nur die Anzeige hier auf CodeGolf. Wenn Sie die Originaldatei über den obigen Link herunterladen und sie beispielsweise im Brainfuck Developer oder Notepad anstelle von Wordpad anzeigen, sieht sie wie folgt korrekt aus .

Brainfuck, Teil ASCII-Bereich 0 bis 127: 80 x 10 = 800/32 = 25 + 25 + 95 = 145

+l+A+O#@e@         /+@+|+2+@@X     @*3+}+@+@YZ    q4[@>@+@@           @:+@
@+B+"+~@@N         @p+K+%>@@v@     dJ+w+@+@+@@    I@+@+@+@@         (@+  @<@
@<@      @-@       @@]                 U>@        @-@    -@@f      @.r    +@E
+@@       .@@0     @>@+@+@+@@@         @+@        @.@    <@@@      @-'    -@@
-@R       -9@@     @.@-@.@$c@@         @@@        @@g&@@6@H        @h@@7@i@@@
@u@       Q@1@     M@L                 )nG        @?@@@x@@@        `@@@j@@{D@
!@@       @P@@     @bm                 ¬@@        @@@    @@\@     @@F      @8@
@S@      @@@       @V@                 @T@        @@k    _@@@     @@@      @@@
@a@;@C@@s@         @@@                 @o@        @@=@5@@@@      @@@        @@@
@t@@@^@@@@         W@@                 @@@        @@@@y@@@@      @@z        @@,

Super Antwort! Definitiv der Highscore, aber einer von uns zählt falsch. Ich habe Zeichen entfernt, die mit \sRegex (Leerzeichen), Zeichenfolge und Array |> eindeutig |> Länge übereinstimmen .
Brigand

Haben Sie diesen regulären Ausdruck über dem obigen Text oder dem Text auf der von mir verlinkten Website ausgeführt, überprüfen Sie dort, da die CodeGolf-Version des Codes nicht identisch ist (dies ändert den Code, den ich einfüge).
Jwbensley

21

Piet, Punktzahl unsicher (153ish)

Piet-Programm

Ich verstehe, dass dies nicht genau in die Spezifikationen passt (was ASCII-Grafik erfordert), aber der Quellcode bietet einen sehr lesbaren DFTBA. Die Spur ist unten.

Piet ignoriert jede Farbe, die nichts bedeutet. Infolgedessen habe ich Grau als generische "Kommentarfarbe" für Umrisse und dergleichen verwendet. Das Grau wird nicht interpretiert (wie Sie in der Spur sehen werden). Ich wollte klarstellen, welche Pixel im Programm waren und welche nicht.

Ich habe 15 Farben verwendet, das sind 13 ohne Weiß. Es ist 89x32 Pixel, könnte aber mehr komprimiert werden. Ich habe 4 Op-Codes verwendet (subtrahieren, dividieren, pushen und ausgeben). Vielleicht, wenn ich Scoring verwende, wie ich denken würde, 153?

Vermutlich keine Punktzahl, war aber eine interessante Übung. Ich habe Piet noch nie benutzt und noch nie so viel Trial-and-Error-Programmierung gemacht! Ich brauchte npiet ausgiebig und seine Spur. Ich kann immer noch nicht herausfinden, wie die Bewegung des Cursors mit irgendeiner Stabilität funktioniert!

Wie es funktioniert:

  • D, F, T sind Konstanten für ihre jeweiligen ASCII-Buchstaben, die dann auf den Stapel verschoben und der OUTC-Befehl aufgerufen werden
  • B ist das ASCII für B x 2 (muss gut aussehen), das auf den Stapel verschoben, dann durch zwei geteilt, dann auf dem Stapel dupliziert und der OUTC-Befehl aufgerufen wird
  • Beachten Sie die frühere Vervielfältigung. Das lag daran, dass ich A in so wenigen Charakteren nicht gut aussehen lassen konnte. Ich drücke 1 auf den Stapel, subtrahiere (mache den ASCII-Code für A) und dann ist das gesamte A-Zeichen der Opcode für OUTC - unabhängig von der Größe, da es sich um eine Operation handelt, die keine Konstante ist

Spur


Coole Antwort. Werden also alle Buchstaben außer A ignoriert?
Brigand

Eigentlich - jeder Buchstabe ist die Konstante dieses Buchstabens (außer A). Die Fläche jedes Buchstabens ist die Konstante. Daher sehen sie etwas komisch aus :)
Lochok

Oh, das ist wirklich cool. Schön gemacht :-)
Brigand

17

Malbolge ( 71 80 x 10) / 32 + 25 + 94 = 141,1875 144

Update: Mehr Abstand zwischen den Buchstaben hinzugefügt, um die Punktzahl zu erhöhen.

Getestet mit dem offiziellen Malbolge-Dolmetscher. Natürlich ist es nicht schwer, statischen Text mit Malbolge zu drucken. Die von Malbolge verwendete Codierung garantiert fast, dass Sie den gesamten Satz druckbarer ASCII-Zeichen darin haben.

bCBA@?>=<;       :9876543210    /.-,+*)('&%$#    "!~}|{zyxwv            uts
rqp     onm      lkjihgfedcb    a`_^]\[ZYXWVU    TSR      QPO         NML KJI
HGF      EDC     BA@                 ?>=         <;:       987       654   321
0/.      -,+     *)(                 '&%         $#"      !~}       |{z     yxw
vuW       srq    ponmlkjihg`         &^]         #a`_A]\[TxX       WVU       TSR
QPO       N0L    KJIHGFEDCBA         @?>         =<;:3W16543       ,P0/.-,+*)('&
%$#      "!~     }|{                 zyx         wvu      tsr      qpo       nml
kji      hgf     edc                 ba`         _^]       \[Z     YXW       VUT
SRQ     PO1      lYK                 JIH         GFE      DCB      A@?       >=<
;:98765432       10/                 .-,         +*)('&%$#"!       ~}|       {zy

Erklärung des Codes (Leute sagten, sie hätten ihn nicht verstanden):

(Weitere Informationen zu Malbolge finden Sie unter http://esolangs.org/wiki/Malbolge ).

Lassen Sie uns zunächst den Code auf die auf der obigen Seite angegebenen Operationen normalisieren:

iooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
*ooooooooooooop<pp<ooo*ooop<ooooooooooo*ooooooooooooooooooop<poooop<oo
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo*<vooooo
oooooooooooooooooooooooooooooooooooooooooooo

Beachten Sie auch, dass nach jedem Befehlszyklus der ausgeführte Befehl neu codiert wird und der Codezeiger und der Datenzeiger um 1 erhöht werden.

  • Zu Beginn C(Code ptr) = D(Daten ptr) = 0. Dies bedeutet [D] = 'b' (98)und die iAnweisung wird ausgewählt. Also springen wir zu Adresse 99. ( Cwird zuerst auf 98 gesetzt und dann erhöht), der Datenzeiger ist jetzt 1.

  • Bei 98 gibt es eine Reihe von NOPs ( o). Dies tun die Wirkung haben , dass sie alle wieder codiert und dass Cund Dwerden erhöht. Die nächste echte Anweisung ( *) befindet sich an der Adresse 140, also jetzt C=140und D=42.

  • *Dreht (oder dividiert durch drei) nach rechts, worauf der Datenzeiger zeigt, und speichert ihn zurück im Speicher und im Akkumulator A. [42] = 'x' (120), so A <- [42] <- '(' (40).

  • Eine weitere Reihe von NOPs verursacht C=154 (p)und D=62 ( [D]='j' (106) ).

  • pist der verrückte Operator . Ich werde die Tabelle hier nicht reproduzieren, aber was passiert, ist A = [D] = crazy(A, [D]). Aist immer noch 42, [D]ist 106, was bedeutet crazy(A, [D]) = 29504.

  • Als nächstes <wird ausgegeben. Es gibt den Akkumulator (29504) als ASCII-Zeichen aus. 29504 % 256 = 68, das heißt D, jetzt haben wir das D.
  • Der Rest der Buchstaben wird auf ähnliche Weise ausgegeben.

Ich habe ein wenig in Malbolge geschaut ... und ich verstehe es nicht! :-) Würde es Ihnen etwas ausmachen zu erklären, wie dieser Code funktioniert?
Brigand

@FakeRainBrigand: tat so
marinus

Ich verstehe nicht, wie 141> 144.
Shmiddty

8

Javascript (80 x 10) / 32 + 25? + 94 = 144

Code:

eval('for(i      =10;i<0x24;42,  Number["prot"+  "otype"][(i++    ).toString(36\
)]=Number["p"    +"rototype"]/*  */["toString"]  );alert(((+((-   ~{}).a()+(!!{\
}+!!{}+!!{}).b   ())).c(+((+!!{  }).d()+(5).e()  ))+(     +((+!!  {}).f()+(2+!!\
{}+!      !{}+!  !{}).               g())).      h(+(      (+!!   {}).      i()\
+(7)       .j()  ))+(+((2)           .k()+(      /*TVEXFGHZKJP    Q*/(      0x1\
+0x1       +0x1  )*0x3).l(           ))).m(      +((8/4+1).n()+   (+[]).o\()))+\
(+((      +!!{}  ).p()+(-~           {}).q(      ))).      r(+((  +!!{}).s()+(!\
!{}+2/*WARP*/)   .t()                ))+(+(      (+!!     {}).u(  )+(+      [])\
.v())).w(+((+    !!{}                ).y()+      (2/*Y*/).z()))   )/**      **/\
.toUpperCase     ());                "#$%\'      /,:>?@^_`9|&M    ODLB      I"')

Demo: http://jsfiddle.net/4hyyS/3/

Um eine Erklärung hinzuzufügen:

Zuerst ordne ich Number.prototype.toStringjedem Kleinbuchstaben zu:

for(i=10;i<36;Number.prototype[(i++).toString(36)] = Number.prototype.toString);

Dadurch kann ich die Kleinbuchstaben effizient verwenden.

Als nächstes konstruiere ich die Zeichenfolge 'DFTBA', indem ich Zahlen in Zeichen konvertiere, z.

(13).a(15) // 'd'

(Ich hätte fromCharCodeoder toString(36)für alle Charaktere verwenden können, aber das wäre zu einfach gewesen)

Um zusätzliche Zeichen auszufüllen und den Code weiter zu verschleiern, verwende ich einige Tricks, um die Zahlen zu erstellen:

+[]        // 0
+!!{}      // 1
!!{}+!!{}  // 2

Usw.

Für Zeichen, die im eigentlichen Code nicht verwendet werden, habe ich sie entweder in Kommentarblöcken /* ... */oder in Zeichenfolgen abgelegt " ... ".

Ich habe mit einem 80x10-Raster angefangen, das dann auf meine Buchstaben reduziert und dann meinen Code so angepasst (sieht in dieser Schriftart auch besser aus, der letzte |ist nur der Cursor):

Sieht in einer anderen Schriftart besser aus


1
Nett. Wenn es eine Möglichkeit gäbe, das B zu glätten, wäre es besser (es ist Grenze 8). Die Partitur sieht für mich also richtig aus.
Brigand

6

Perl (75 x 7) / 32 + 25 + 59 ≈ 107,4

@D=('-4*x^2      8*x^5-72*x^3  56*x^4-260*x^1  +272*x^6',         '
4*x^2    -4*x'   );$b++   ,s/  (-)  ?(\w  +)(  .x)?    (\^       \d+
 )?/      "\$$b   \[0$4             ||$2       $3<1    ]$1=     $2^I"
 .!"       $$O"   /exgemfor         +@D;       $P=pop@2;$K     =(  pop
 @1)       /+$P   and               $_.=       chr(    --$j   ?"$K*x^$j"
:"+"     .$K),    s/^               \+|\       +\B|    \b1\   *|\    ^1$/
/gx,map$1[$      j++]-=            $_*$K,      @2while$j=    @1-@2  ;print

Ich würde dir sagen, was es tut, aber das würde das Obfu ruinieren, nicht wahr?


Genial! Ich zähle nur 59 eindeutige Zeichen (nachdem ich Leerzeichen entfernt habe).
Brigand

@ FakeRainBrigand oops, du hast recht. Ich habe es einfach überfahren count_charund vergessen, Leerzeichen auszuschließen.
Primo

6

C #, (71 · 7) / 32 + 25 + 45 = 85,53

Meine erste Antwort auf Programmierpuzzles ! C # ist wirklich nicht sehr gut für diese Spiele ...

/ ** / using / * * / System; / * * / Namespace F {class // oo. .Ö.       
 // 8 '' Y8b '888' 8888 '888' 'Y8b .888.      
 // 8 888 888 8888 888 888 .8 "888.     
 / * 8 8 * / I {static void Main (string [] args    
 ) {/ * 8 888 "8888 888` 88 * / {Konsole.   
 // 8 d88 '888 8888 888 .88P .8' `888.  
WriteLine (/ * 88 8888 * / "DFTBA"); / ** /}}}}

Ich bin beeindruckt! Es ist nicht einfach, dies zu tun, wenn Sie eine Klasse erstellen müssen :-)
Brigand

6

Python, (69 * 7) / 32 + 25 + 49 = 89

oo=getattr;   o=__import__ ('sys');O='s' 'tdout';#o.        .o.
class    Y8b  :#88'     `8 8'   888   `8 `888'   `Y8b      .888.
 #88      888  888              888       888     888     .8"888.
 def      a88  (Oo,oO):         oo(       oo(o,O),'w'    'r'  'it'
 "e"      )((  (oO    )         ));       11/    0b10   ;return[88,
 88]     #d8`  888              888       888    .88P  .8'     `888.
d=Y8b().a88;  d("D"            "FT")     +[1]+d("BA"  '\n'     )#1880

In Python ist dies aufgrund von Einrückungen und Leerzeichen nicht einfach. Also habe ich eines von vielen Dingen getan, um die Einrückung legitim zu machen:

  • eine Klasse definiert
  • verwendete Verkettung von Strings
  • Liste mit einem nachgestellten Komma
  • Zeilenfortsetzungszeichen (das ich letztendlich nicht verwendet habe)

Die Lesbarkeit kann noch etwas verbessert werden ...


4

C, (55 · 8) / 32 + 25 + 55 = 93,35

Es ist ganz einfach, die Buchstaben zu vergrößern und ein paar weitere Zeichen zu verwenden.

main()    {p(O(O(O(  O(O(O(O(O(  O(O(O(O(O       (O
(p(O(O(   p()))))))  ))))))))))  ));puts(""     ,p(o
(p    (o  (o             (o      (o      (o    (o  (o
(o    (o  (o             (o      (o      (o   (o    (o
(o    (o  (o())))))      ))      ))))))))    ))))));}x=
59    ;O  ()             {x      ++      ;}  o(      ){
+x    --  ;}             p(      ){      ;;  ;;      ;;
putchar   (x             +9      );x;-x;}    q(      );

3

Java

class  Ypnypn  {public  static    void
main(  String  []array  ){{}{}   {{{{}{
{   }  {          {     }    }   {    }
{   (  System     .     out).    print(
(   "  "          +     "    "   +    
"   "  +          "     DFTBA"   )    .
trim(  )          )     ;}}}}}   }    }

Auf jeden Fall die beste Lesbarkeit aller Antworten. Ich habe heute keine Stimmen mehr, aber ich komme wieder.
bballdave025
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.