Viết mã ASCII-Art Obfuscated, đọc và kết quả là: DFTBA


8

Thách thức là viết mã phức tạp nhất, được nhúng trong nghệ thuật ASCII đọc và in "DFTBA". Ví dụ: phần sau đây đọc 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 

Và sau đây, trong bash in DFTBA

echo "DFTBA"

Thách thức là viết một cái mà làm cả hai.

Điều kiện chiến thắng

Câu trả lời hợp lệ, (tất cả các điều kiện theo ý của tôi)

  • Có thể đọc rõ ràng là DFTBA
  • In DFTBA khi được thực thi
  • Phải có chức năng không có kết nối Internet
  • có chữ cái có chiều cao bằng nhau
  • không được có quá 80 cột
  • không được có quá 10 hàng

Điểm (tổng tiền thắng cao nhất)

  • Hàng * Cột / 32
  • Khả năng đọc: 25 cho dễ đọc, 50 cho rất rõ ràng
  • 1 điểm cho mỗi ký tự không phải khoảng trắng khác nhau được sử dụng

Những hạn chế

Chúng có thể được sử dụng cho một cái gì đó, vì vậy tất cả các phản hồi được giả định sẽ được phát hành vào phạm vi công cộng. Nếu bạn không thể, hoặc chọn không đưa câu trả lời của mình vào phạm vi công cộng: hãy đăng bình luận / trả lời cho câu hỏi ban đầu với nội dung "Câu trả lời được tác giả và / hoặc chia sẻ bởi tôi, có thể không được coi là thuộc phạm vi công cộng" .

Câu trả lời không công khai cũng được chào đón! Chỉ cần đảm bảo chỉ định :-)

DFTBA là gì?

Đôi khi nó là viết tắt của "Đừng quên để trở nên tuyệt vời", nhưng không phải lúc nào cũng ... Câu chuyện dài ... Bài hát liên quan này có thể giúp giải thích (hoặc nhầm lẫn).


Các tiêu chí chiến thắng là khu vực thực sự lớn nhất? Điều đó sẽ nhanh chóng biến thành một cuộc chạy đua vũ trang của những người thêm nhiều nhân vật vô giá trị để làm cho nó lớn hơn. Thực sự không có giới hạn trên về điều này.
captncraig

@CMP, đã được sửa đổi, cảm ơn :-)
Brigand

Các ký tự chữ hoa và chữ thường có được tính riêng (như các ký tự khác nhau) không?
Shmiddty

Ngoài ra, điều gì ngăn tôi bỏ các ký tự ngẫu nhiên vào mã mà không làm gì? Điều đó có được phép không?
Shmiddty

@Shmiddty, vâng, tất cả các ký tự có mã ascii khác nhau (không bao gồm khoảng trắng). Miễn là nó chạy, điều đó tốt :-)
Brigand

Câu trả lời:


6

(Tôi đã viết đầy đủ lên đây vì nó khá rộng rãi về cách tôi đạt được hai kết quả này)

Brainfuck, ASCII đầy đủ phạm vi 0 đến 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        þÿ,

Có một đường xuyên qua giữa đỉnh này không phải là eo biển, nhưng đó chỉ là màn hình hiển thị ở đây trên CodeGolf. Nếu bạn tải xuống tệp gốc từ liên kết trên và xem nó trong Brainfuck Developer hoặc Notepad thay vì Wordpad chẳng hạn, nó sẽ trông giống như thế này .

Brainfuck, Phần ASCII phạm vi 0 đến 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        @@,

Câu trả lời tuyệt vời! Definitley điểm cao, nhưng một trong số chúng tôi đang đếm không chính xác. Tôi đã xóa các ký tự khớp với \sregex (khoảng trắng), chuỗi thành mảng |> duy nhất |> chiều dài.
Brigand

Bạn đã chạy regex đó phía trên văn bản ở trên hoặc văn bản trên trang web tôi đã liên kết, kiểm tra ở đó vì phiên bản CodeGolf của mã không giống nhau (nó thay đổi mã tôi dán vào).
jwbensley

21

Piet, Điểm không chắc chắn (153ish)

Chương trình

Tôi hiểu rằng điều này không hoàn toàn phù hợp với các thông số kỹ thuật (yêu cầu nghệ thuật ASCII), tuy nhiên mã nguồn cung cấp DFTBA rất dễ đọc. Dấu vết bên dưới.

Piet bỏ qua mọi màu sắc không có nghĩa gì cả. Kết quả là, tôi đã sử dụng màu xám làm "màu nhận xét" chung chung để phác thảo và tương tự. Màu xám không được giải thích (như bạn sẽ thấy trong dấu vết). Tôi muốn làm rõ những pixel nào trong chương trình và những pixel nào không.

Tôi đã sử dụng 15 màu, trong đó có 13 màu mà không có màu trắng. Nó là 89x32 pixel, mặc dù có thể được nén nhiều hơn. Tôi đã sử dụng 4 mã op (trừ, chia, đẩy và xuất). Có lẽ nếu sử dụng tính điểm như thế nào tôi sẽ nghĩ, 153?

Có lẽ không đảm bảo một số điểm, nhưng là một bài tập thú vị. Chưa từng sử dụng Piet trước đây, tôi chưa bao giờ thực hiện nhiều chương trình thử và sai! Tôi cần npiet rộng rãi, và dấu vết của nó. Tôi vẫn không thể hiểu làm thế nào chuyển động của con trỏ hoạt động với sự ổn định!

Làm thế nào nó hoạt động:

  • D, F, T là các hằng số cho các chữ cái ASCII tương ứng của chúng sau đó được đẩy lên ngăn xếp và lệnh OUTC được gọi
  • B là ASCII cho B x 2 (cần phải có vẻ tốt), được đẩy lên ngăn xếp, sau đó chia cho hai, sau đó được nhân đôi trên ngăn xếp và lệnh OUTC được gọi
  • Lưu ý sự trùng lặp trước đó. Đó là bởi vì tôi không thể làm cho A trông đẹp trong quá ít nhân vật. Tôi đẩy 1 vào ngăn xếp, trừ (tạo mã ASCII cho A) và sau đó toàn bộ ký tự A là mã opcode cho OUTC - không quan trọng kích thước, vì đó là một hoạt động không phải là hằng số

Dấu vết


Câu trả lời tuyệt vời. Vì vậy, al các chữ cái ngoại trừ A bỏ qua?
Brigand

Trên thực tế - mỗi chữ cái là hằng số của chữ cái đó (trừ A). Diện tích của mỗi chữ cái là hằng số. Do đó, tại sao chúng trông hơi kỳ lạ :)
lochok

Ồ, thật tuyệt. Hoàn thành tốt :-)
Brigand 7/213

17

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

Cập nhật: thêm nhiều khoảng cách giữa các chữ cái để nâng điểm.

Đã thử nghiệm với trình thông dịch chính thức của Malbolge. Tất nhiên, thực sự không khó để in văn bản tĩnh bằng Malbolge. Mã hóa được sử dụng bởi Malbolge gần như đảm bảo bạn sẽ có toàn bộ bộ ký tự ASCII có thể in được trong đó.

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

Giải thích về mã (mọi người nói họ không hiểu nó):

(Để biết thêm thông tin về Malbolge, hãy xem http://esolangs.org/wiki/Malbolge ).

Trước tiên, hãy bình thường hóa mã cho các hoạt động được đưa ra ở trang trên:

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

Cũng lưu ý rằng sau mỗi chu kỳ lệnh, lệnh được thực thi được mã hóa lại và con trỏ mã và con trỏ dữ liệu được tăng thêm 1.

  • Lúc đầu, C(mã ptr) = D(dữ liệu ptr) = 0. Điều này có nghĩa [D] = 'b' (98)ihướng dẫn được chọn. Vì vậy, chúng tôi nhảy đến địa chỉ 99. ( Clần đầu tiên được đặt thành 98 và sau đó tăng lên), con trỏ dữ liệu hiện là 1.

  • Ở tuổi 98, có một chuỗi NOP ( o). Chúng có tác dụng là tất cả chúng đều được mã hóa lại và điều đó CDđược tăng lên. Hướng dẫn thực sự tiếp theo ( *) được tìm thấy tại địa chỉ 140, vì vậy bây giờ C=140D=42.

  • *thực hiện xoay phải (hoặc chia cho ba) trên những gì con trỏ dữ liệu trỏ vào và lưu lại vào bộ nhớ và trong bộ tích lũy A. [42] = 'x' (120), so A <- [42] <- '(' (40).

  • Một hàng NOP khác gây ra C=154 (p)D=62 ( [D]='j' (106) ).

  • pnhà điều hành điên . Tôi sẽ không tái tạo bảng của nó ở đây, nhưng những gì xảy ra là A = [D] = crazy(A, [D]). Avẫn là 42, [D]là 106, có nghĩa là crazy(A, [D]) = 29504.

  • Tiếp theo là <, đó là đầu ra. Nó xuất ra bộ tích lũy, là 29504, dưới dạng ký tự ASCII. 29504 % 256 = 68, đó là D, vì vậy bây giờ chúng ta có D.
  • Phần còn lại của các chữ cái là đầu ra theo cách tương tự.

Tôi nhìn vào Malbolge một chút ... và tôi không hiểu! :-) Bạn có phiền giải thích cách mã này hoạt động không?
Brigand

@FakeRainBrigand: đã làm như vậy
marinus

Tôi không hiểu làm thế nào 141> 144.
Shmiddty

8

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

Mã số:

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"')

Bản trình diễn: http://jsfiddle.net/4hyyS/3/

Để thêm một số giải thích:

Đầu tiên tôi ánh xạ Number.prototype.toStringtới từng chữ cái viết thường:

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

Điều này cho phép tôi sử dụng các chữ cái viết thường một cách hiệu quả.

Tiếp theo, tôi xây dựng chuỗi 'DFTBA' bằng cách chuyển đổi số thành ký tự, ví dụ:

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

(Tôi có thể đã sử dụng fromCharCodehoặc toString(36)cho tất cả các nhân vật, nhưng điều đó quá dễ dàng)

Để điền vào các ký tự phụ và làm xáo trộn thêm mã, tôi sử dụng một vài thủ thuật để tạo số:

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

Vân vân.

Đối với các ký tự không được sử dụng trong mã thực tế, tôi đã bỏ chúng trong các khối nhận xét /* ... */hoặc chuỗi " ... ".

Tôi đã bắt đầu với một lưới 80x10, sau đó chuyển nó xuống các chữ cái của tôi, sau đó điều chỉnh mã của mình để phù hợp với nó (cũng, trông tốt hơn trong phông chữ này, cuối cùng |chỉ là con trỏ):

Có vẻ tốt hơn trong một phông chữ khác


1
Đẹp. Nếu có bất kỳ cách nào để làm dịu B thì sẽ tốt hơn (đó là đường biên giới 8). Vì vậy, điểm số có vẻ đúng với tôi.
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

Tôi sẽ nói với bạn những gì nó làm, nhưng điều đó sẽ phá hỏng obfu, sẽ không;)


Tuyệt vời! Tôi chỉ đếm 59 ký tự duy nhất (sau khi xóa khoảng trắng).
Brigand

@FakeRainBrigand rất tiếc, bạn đã đúng. Tôi chỉ chạy count_charqua nó và quên loại trừ khoảng trắng.
primo

6

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

Câu trả lời lập trình đầu tiên của tôi trả lời! C # thực sự không tốt cho những game này ...

/ ** / bằng cách sử dụng / * * / Hệ thống; / * * / không gian tên F {class // oo. .o.       
 // 8 '`Playb` 888' 8888` 888 '`Playb .888.      
 // 8 888 888 8888 888 888 .8 "888.     
 / * 8 8 * / I {static void Main (chuỗi [] args    
 ) {/ * 8 888 "8888 888` 88 * / {Bảng điều khiển.   
 // 8 d88 '888 8888 888 .88P .8' `888.  
WriteLine (/ * 88 8888 * / "DFTBA"); / ** /}}}}

Tôi rất ấn tượng! Thật không dễ để làm những điều này khi bạn phải tạo một lớp :-)
Brigand

6

Con trăn, (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

Không dễ để làm điều đó trong Python vì thụt lề và khoảng trắng. Vì vậy, tôi đã làm một trong nhiều điều để làm cho vết lõm hợp pháp:

  • định nghĩa một lớp
  • sử dụng nối dây
  • danh sách với dấu phẩy
  • ký tự tiếp tục dòng (mà cuối cùng tôi không sử dụng)

Khả năng đọc vẫn có thể được cải thiện một chút ...


4

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

Thật dễ dàng để làm cho các chữ cái lớn hơn và sử dụng thêm một vài ký tự.

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(  )          )     ;}}}}}   }    }

Chắc chắn khả năng đọc tốt nhất của tất cả các câu trả lời. Hôm nay tôi hết phiếu, nhưng tôi sẽ quay lại.
bballdave025
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.