Tulis ASCII-Art Obfuscated Code, baca sebagai, dan menghasilkan: "DFTBA"

8

Tantangannya adalah untuk menulis kode yang paling rumit, tertanam dalam seni ASCII yang membaca dan mencetak "DFTBA". Misalnya, yang berikut ini berbunyi 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 

Dan berikut ini, di bash mencetak DFTBA

echo "DFTBA"

Tantangannya adalah untuk menulis yang melakukan keduanya.

Kondisi menang

Jawaban yang valid, (semua kondisi sesuai kebijakan saya)

  • Dapat dengan jelas dibaca sebagai DFTBA
  • Cetak DFTBA saat dijalankan
  • Harus fungsional tanpa koneksi internet
  • memiliki huruf yang sama tingginya
  • tidak boleh memiliki lebih dari 80 kolom
  • tidak boleh memiliki lebih dari 10 baris

Poin (jumlah kemenangan tertinggi)

  • Baris * Kolom / 32
  • Keterbacaan: 25 untuk terbaca, 50 untuk sangat jelas
  • 1 poin untuk setiap karakter non-spasi berbeda yang digunakan

Batasan

Ini dapat digunakan untuk sesuatu, sehingga semua tanggapan diasumsikan dilepaskan ke domain publik. Jika Anda tidak bisa, atau memilih untuk tidak merilis jawaban Anda ke domain publik: memposting komentar / tanggapan terhadap pertanyaan awal yang mengatakan "Jawabannya ditulis dan / atau dibagikan oleh saya, mungkin tidak dianggap berada di domain publik" .

Jawaban domain non-publik dipersilakan juga! Pastikan untuk menentukan :-)

Apa itu DFTBA?

Kadang-kadang singkatan dari "Don't For Be Awesome", tapi tidak selalu ... Ceritanya panjang ... Lagu terkait ini mungkin bisa membantu menjelaskan (atau membingungkan).

Perampok
sumber
Kriteria pemenang adalah area terbesar? Itu akan dengan cepat berubah menjadi perlombaan senjata orang yang menambahkan karakter yang semakin tidak berharga untuk membuatnya lebih besar. Sebenarnya tidak ada batas atas ini.
captncraig
@CMP, direvisi, terima kasih :-)
Brigand
Apakah karakter huruf besar dan kecil dihitung secara terpisah (sebagai karakter yang berbeda)?
Shmiddty
Juga, apa yang menghentikan saya dari membuang karakter acak ke dalam kode yang tidak melakukan apa-apa? Apakah itu diizinkan?
Shmiddty
@Shmiddty, ya, semua karakter dengan kode ascii yang berbeda (tidak termasuk spasi putih). Selama ini berjalan, itu bagus :-)
Brigand

Jawaban:

6

(Saya telah membuat tulisan lengkap di sini karena cukup luas bagaimana saya sampai ke dua hasil ini)

Brainfuck, rentang ASCII lengkap 0 hingga 255: 80x10 = 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        þÿ,

Ada garis melalui tengah yang satu ini yang tidak cukup selat, tapi itu hanya tampilan di sini di CodeGolf. Jika Anda mengunduh file asli dari tautan di atas dan melihatnya di Brainfuck Developer atau Notepad alih-alih Wordpad, itu akan terlihat benar seperti ini .

Brainfuck, Bagian ASCII berkisar 0 hingga 127: 80x10 = 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        @@,
jwbensley
sumber
Jawaban yang luar biasa! Definitley skor tinggi, tetapi salah satu dari kami menghitung salah. Saya menghapus karakter yang cocok dengan \sregex (spasi putih), string to array |> unique |> length.
Brigand
Apakah Anda menjalankan regex di atas teks di atas atau teks di situs web yang saya tautkan, periksa di sana karena versi kode CodeGolf tidak sama (itu mengubah kode yang saya tempelkan).
jwbensley
21

Piet, Skor Tidak Pasti (153ish)

Program Piet

Saya mengerti bahwa ini tidak sepenuhnya sesuai dengan spesifikasi (memerlukan seni ASCII), namun kode sumber memang memberikan DFTBA yang sangat mudah dibaca. Jejaknya di bawah.

Piet mengabaikan setiap warna yang tidak berarti apa-apa. Akibatnya, saya menggunakan abu-abu sebagai "warna komentar" umum untuk menguraikan dan sejenisnya. Warna abu-abu tidak ditafsirkan (seperti yang akan Anda lihat di jejak). Saya ingin memperjelas piksel mana yang ada dalam program dan mana yang tidak.

Saya telah menggunakan 15 warna, yaitu 13 tanpa whitespce. Ini 89x32 piksel, meskipun bisa dikompresi lebih banyak. Saya menggunakan 4 op-code (kurangi, bagi, push dan outputc). Mungkin jika menggunakan penilaian bagaimana saya akan berpikir, 153?

Mungkin tidak menjamin skor, tetapi merupakan latihan yang menarik. Karena belum pernah menggunakan Piet sebelumnya, saya tidak pernah melakukan begitu banyak pemrograman coba-coba! Saya membutuhkan npiet secara ekstensif, dan jejaknya. Saya masih tidak tahu bagaimana pergerakan kursor bekerja dengan stabilitas apa pun!

Bagaimana itu bekerja:

  • D, F, T adalah konstanta untuk huruf ASCII masing-masing yang kemudian didorong ke stack, dan perintah OUTC disebut
  • B adalah ASCII untuk B x 2 (harus terlihat bagus), yang didorong ke stack, kemudian dibagi dua, kemudian diduplikasi pada stack dan perintah OUTC disebut
  • Perhatikan duplikasi sebelumnya. Itu karena aku tidak bisa membuat A terlihat bagus dalam beberapa karakter. Saya mendorong 1 ke stack, kurangi (membuat kode ASCII untuk A) dan kemudian seluruh karakter A adalah opcode untuk OUTC - tidak masalah ukurannya, karena ini adalah operasi bukan konstanta

Jejak

lochok
sumber
Jawaban keren Jadi apakah semua huruf kecuali A diabaikan?
Brigand
Sebenarnya - setiap huruf adalah konstanta dari huruf itu (kecuali A). Luas setiap huruf adalah konstan. Karenanya mengapa mereka sedikit aneh mencari :)
lochok
Oh, itu sangat keren. Bagus sekali :-)
Brigand
17

Malbolge ( 71 80 x 10) / 32 + 25 + 94 = 141.1875 144

Pembaruan: menambahkan lebih banyak jarak antar huruf untuk meningkatkan skor.

Diuji dengan penerjemah resmi Malbolge. Tentu saja, benar-benar tidak sulit untuk mencetak teks statis menggunakan Malbolge. Pengkodean yang digunakan oleh Malbolge hampir menjamin Anda akan memiliki seluruh rangkaian karakter ASCII yang dapat dicetak di sana.

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

Penjelasan kode (orang mengatakan mereka tidak memahaminya):

(Untuk informasi lebih lanjut tentang Malbolge lihat http://esolangs.org/wiki/Malbolge ).

Pertama, mari normalisasikan kode ke operasi yang diberikan di halaman di atas:

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

Juga perhatikan bahwa setelah setiap siklus instruksi, instruksi yang dieksekusi dikodekan ulang dan penunjuk kode dan penunjuk data ditingkatkan sebesar 1.

  • Pada awalnya, C(ptr kode) = D(ptr data) = 0. Ini berarti [D] = 'b' (98)dan iinstruksi dipilih. Jadi kita lompat ke alamat 99. ( Cdiatur pertama kali ke 98 dan kemudian ditingkatkan), penunjuk data sekarang 1.

  • Di 98 ada serangkaian NOP ( o). Ini memang memiliki efek bahwa mereka semua dikodekan ulang dan itu Cdan Dbertambah. Instruksi nyata berikutnya ( *) ditemukan di alamat 140, jadi sekarang C=140dan D=42.

  • *melakukan rotasi kanan (atau pembagian tiga) pada apa yang ditunjuk oleh pointer data, dan menyimpan kembali ke dalam memori dan di akumulator A. [42] = 'x' (120), so A <- [42] <- '(' (40).

  • Baris lain dari NOP menyebabkan C=154 (p)dan D=62 ( [D]='j' (106) ).

  • padalah operator gila . Saya tidak akan mereproduksi mejanya di sini, tetapi yang terjadi adalah A = [D] = crazy(A, [D]). Amasih 42, [D]adalah 106, yang artinya crazy(A, [D]) = 29504.

  • Selanjutnya <adalah output. Ini mengeluarkan akumulator, yaitu 29504, sebagai karakter ASCII. 29504 % 256 = 68, yang D, jadi sekarang kita memiliki D.
  • Sisa dari surat-surat adalah keluaran dengan cara yang sama.
marinus
sumber
Saya melihat ke Malbolge sedikit ... dan saya tidak mengerti! :-) Maukah Anda menjelaskan bagaimana kode ini bekerja?
Brigand
@FakeRainBrigand: melakukannya
marinus
Saya tidak mengerti bagaimana 141> 144.
Shmiddty
8

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

Kode:

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/

Untuk menambahkan beberapa penjelasan:

Pertama saya memetakan Number.prototype.toStringuntuk setiap huruf kecil:

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

Ini memungkinkan saya untuk menggunakan huruf kecil secara efisien.

Selanjutnya saya membuat string 'DFTBA' dengan mengubah angka menjadi karakter, misalnya:

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

(Saya bisa menggunakan fromCharCode atau toString(36)untuk semua karakter, tapi itu akan terlalu mudah)

Untuk mengisi karakter tambahan, dan mengaburkan kode lebih lanjut, saya menggunakan beberapa trik untuk membuat angka:

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

Dll

Untuk karakter yang tidak digunakan dalam kode aktual, saya menjatuhkannya di blok komentar /* ... */atau string" ... " .

Saya mulai dengan kisi 80x10, lalu mengecilkannya ke huruf saya, kemudian menyesuaikan kode saya agar sesuai (juga, terlihat lebih baik di font ini, yang terakhir |hanya kursor):

Terlihat lebih baik dalam font yang berbeda

Shmiddty
sumber
1
Bagus. Jika ada cara untuk memuluskan B akan lebih baik (itu adalah batas 8). Jadi skornya terlihat tepat bagi saya.
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

Saya akan memberi tahu Anda apa fungsinya, tetapi itu akan merusak obfu, bukan?)

primo
sumber
Luar biasa! Saya hanya menghitung 59 karakter unik (setelah menghapus spasi).
Brigand
@FakeRainBrigand oops, kau benar. Saya hanya berlari count_chardi atasnya, dan lupa untuk mengecualikan spasi putih.
Primo
6

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

Teka-teki Pemrograman pertamaku menjawab! C # benar-benar tidak terlalu bagus untuk gim ini ...

/ ** / using / * * / System; / * * / namespace F {class // oo. .Hai.       
 // 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 * / {Console.   
 // 8 d88 '888 8888 888 .88P .8' `888.  
WriteLine (/ * 88 8888 * / "DFTBA"); / ** /}}}}
Shamp00
sumber
Saya terkesan! Tidak mudah melakukan ini ketika Anda harus membuat kelas :-)
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

Tidak mudah melakukannya dengan Python karena lekukan dan spasi putih. Jadi saya melakukan satu dari banyak hal untuk membuat indentasi itu sah:

  • mendefinisikan kelas
  • menggunakan gabungan string
  • daftar dengan tanda koma
  • karakter baris lanjutan (yang akhirnya saya tidak gunakan)

Keterbacaan masih dapat ditingkatkan sedikit ...

jadkik94
sumber
4

C, (55 * 8) / 32 + 25 + 55 = 93.35

Cukup mudah untuk membuat huruf lebih besar, dan menggunakan beberapa karakter lagi.

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(      );
ugoren
sumber
3

Jawa

class  Ypnypn  {public  static    void
main(  String  []array  ){{}{}   {{{{}{
{   }  {          {     }    }   {    }
{   (  System     .     out).    print(
(   "  "          +     "    "   +    
"   "  +          "     DFTBA"   )    .
trim(  )          )     ;}}}}}   }    }
Ypnypn
sumber
Jelas keterbacaan terbaik dari semua jawaban. Saya kehabisan suara hari ini, tetapi saya akan kembali.
bballdave025