ASCIIアート難読化コードを記述し、次のように読み取ってください:「DFTBA」


8

課題は、「DFTBA」を読み取って印刷するASCIIアートに埋め込まれた最も精巧なコードを書くことです。たとえば、次は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 

そして以下は、bashでDFTBAを出力します

echo "DFTBA"

課題は、両方を行う1つを記述することです。

勝利条件

有効な回答(私の裁量によるすべての条件)

  • DFTBAとして明確に読み取ることができます
  • 実行時にDFTBAを印刷する
  • インターネット接続なしで機能している必要があります
  • 同じ高さの文字を持っている
  • 80列以下にする必要があります
  • 10行以下にする必要があります

ポイント(最高の勝ち)

  • 行*列/ 32
  • 読みやすさ:読みやすい場合は25、非常に明瞭な場合は50
  • 使用されている空白以外の文字ごとに1ポイント

制限事項

これらは何かに使用される可能性があるため、すべての応答はパブリックドメインにリリースされると見なされます。できない、または回答をパブリックドメインに公開しないことを選択した場合:元の質問に「私が作成または共有した回答はパブリックドメインにあると見なされない可能性がある」とコメント/返信を投稿します。

非パブリックドメインの回答も歓迎します!必ず指定してください:-)

DFTBAとは何ですか?

それは時々 「恐ろしいであることを忘れてはいけない」、常にではないが...長い物語が...これの略で、関連する曲のかもしれないのヘルプが説明(あるいは混乱)。


受賞基準は本当に最大の領域ですか?それはすぐに、それを大きくするためにますます価値のないキャラクターを追加する人々の軍拡競争に変わります。これには実際に上限はありません。
captncraig 2013年

@CMP、改訂、ありがとう:-)
ブリガンド

大文字と小文字は別々に(異なる文字として)カウントされますか?
Shmiddty、2013

また、何もしないコードにランダムな文字をダンプしないようにするにはどうすればよいですか?それは許されますか?
Shmiddty、2013

@Shmiddty、はい、異なるASCIIコード(空白を除く)を持つすべての文字。それが実行される限り、それは問題ありません:-)
ブリガンド

回答:


6

(私はこれら2つの結果を得る方法が非常に広範囲であるので、ここで完全に書きまし

Brainfuck、フルASCII範囲0〜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        þÿ,

このトップのものの真ん中に線があり、かなりまっすぐではありませんが、それはここCodeGolfでの表示にすぎません。上記のリンクから元のファイルをダウンロードして、たとえばワードパッドではなくBrainfuck Developerまたはメモ帳で表示すると、このように表示されます。

Brainfuck、パートASCII範囲0〜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        @@,

素晴らしい答え!Definitleyはハイスコアですが、私たちの1人が間違ってカウントしています。\s正規表現(空白)に一致する文字を削除し、文字列を配列|>固有|>長さにしました。
ブリガンド

上記の正規表現または私がリンクしたWebサイトのテキストの上でその正規表現を実行しましたか?コードのCodeGolfバージョンが同じではないので、そこを確認してください(貼り付けたコードが変更されます)。
jwbensley 2014年

21

ピエト、スコアが不確か(153ish)

Pietプログラム

これは仕様(ASCIIアートが必要)に厳密に適合しないことを理解していますが、ソースコードは非常に読みやすいDFTBAを提供しています。トレースは以下のとおりです。

Pietは、意味がないすべての色を無視します。結果として、アウトラインなどの一般的な「コメント色」として灰色を使用しました。グレーは解釈されません(トレースで確認できます)。プログラムに含まれるピクセルと含まれないピクセルを明確にしたかったのです。

私は15色を使用しましたが、whitespceなしでは13色です。89x32ピクセルですが、さらに圧縮できます。私は4つのオペコード(減算、除算、プッシュ、出力c)を使用しました。たぶんスコアリングを使うなら、私はどう思うだろうか、153?

おそらくスコアを保証するものではありませんが、興味深い演習でした。これまでにPietを使用したことがないので、試行錯誤のプログラミングをこれまでに行ったことはありません。私は広範囲にnpietとその痕跡を必要としていました。カーソルの動きがどのように安定して機能するのか、まだわかりません!

使い方:

  • D、F、Tは、それぞれのASCII文字の定数で、スタックにプッシュされ、OUTCコマンドが呼び出されます。
  • BはB x 2のASCII(見栄えを良くするために必要)であり、スタックにプッシュされてから2で除算され、スタックに複製されて、OUTCコマンドが呼び出されます。
  • 以前の重複に注意してください。それは、Aの文字数が少ないので見栄えがしなかったためです。スタックに1をプッシュし、減算して(AのASCIIコードを作成)、A文字全体がOUTCのオペコードになります。これは定数ではない操作であるため、サイズには関係ありません。

痕跡


クールな答え。A以外の文字はすべて無視されますか?
ブリガンド2013

実際、各文字はその文字の定数です(Aを除く)。各文字の面積は定数です。それゆえ、彼らが少し奇妙に見える理由:)
lochok

ああ、それは本当にクールです。よくできました:-)
ブリガンド2013

17

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

更新:スコアを上げるために文字間のスペースを増やしました。

公式のMalbolgeインタープリターでテスト済み。もちろん、Malbolgeを使用して静的テキストを印刷することはそれほど難しくありません。Malbolgeが使用するエンコーディングにより、印刷可能なASCII文字のセット全体が含まれることがほぼ保証されます。

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

コードの説明(人々はそれを理解していないと言った):

(Malbolgeの詳細については、http: //esolangs.org/wiki/Malbolgeを参照してください)。

まず、上記のページで与えられた操作にコードを正規化しましょう:

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

また、各命令サイクルの後、実行された命令は再エンコードされ、コードポインタとデータポインタは1ずつ増加します。

  • 最初はC(code ptr)= D(data ptr)= 0です。つまり[D] = 'b' (98)i命令が選択されます。したがって、アドレス99にジャンプします(C最初に98に設定され、次に増加されます)、データポインターは1です。

  • 98では、一連のNOP(o)があります。これらは、すべて再エンコードされ、その効果であることを持っているCDインクリメントされますが。次の実際の命令(*)はアドレス140にC=140ありD=42ます。

  • *データポインタが指しているものを右回転(または3で除算)し、メモリとアキュムレータに格納しAます。[42] = 'x' (120), so A <- [42] <- '(' (40)

  • NOPの別の行によりC=154 (p)、およびが発生しD=62 ( [D]='j' (106) )ます。

  • pあるクレイジーオペレータが。ここではその表を再現しませんが、何が起こるかですA = [D] = crazy(A, [D])Aはまだ42、106 です。[D]つまり、crazy(A, [D]) = 29504

  • 次は<、出力です。これは、アキュムレータ(29504)をASCII文字として出力します。29504 % 256 = 68、つまりDなので、Dができました。
  • 残りの文字も同様に出力されます。

Malbolgeを少し調べてみましたが、わかりません。:-)このコードがどのように機能するか説明していただけませんか?
ブリガンド2013年

@FakeRainBrigand:そうしました
マリナス

私は理解していないか141> 144
Shmiddty

8

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

コード:

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

デモ:http : //jsfiddle.net/4hyyS/3/

説明を追加するには:

まずNumber.prototype.toString、各小文字にマッピングします。

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

これにより、小文字を効率的に使用できます。

次に、数値を文字に変換して文字列「DFTBA」を作成します。例:

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

fromCharCodeまたはtoString(36)すべてのキャラクターを使用できたかもしれませんが、それは簡単すぎました)

余分な文字を入力し、コードをさらに難読化するために、いくつかのトリックを使用して数字を作成します。

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

等。

実際のコードで使用されていない文字については、コメントブロック/* ... */または文字列にドロップしました" ... "

私は80x10グリッドから始めて、それを私の文字まで削り、コードをそれに合わせて調整しました(また、このフォントでは見栄えがよく、最後|は単なるカーソルです)。

別のフォントでよく見える


1
いいね。Bを滑らかにする方法があったら、それはより良いでしょう(境界線8)。スコアは私には正しいようです。
ブリガンド2013

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

私はそれが何をするかをあなたに話します、しかしそれは難読を台無しにするでしょう、それはそうではないでしょう;


驚くばかり!私は59個のユニークな文字を数えています(空白を削除した後)。
ブリガンド2013年

@FakeRainBrigandおっと、あなたは正しい。私はちょうどそれを実行し、count_char空白を除外するのを忘れました。
プリモ2013年

6

C#、(71 * 7)/ 32 + 25 + 45 = 85.53

私の最初のプログラミングパズルの答え!C#はこれらのゲームにはあまり適していません...

/ ** / using / * * / System; / * * / namespace F {class // oo。.o。       
 // 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 * / {コンソール。   
 // 8 d88 '888 8888 888 .88P .8' `888。  
WriteLine(/ * 88 8888 * / "DFTBA"); / ** /}}}}

私が感銘を受けた!クラスを作成する必要がある場合、これらを行うのは簡単ではありません:-)
ブリガンド

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

インデントと空白のため、Pythonでそれを行うのは簡単ではありません。だから私はインデントを合法にするために多くのことの一つをしました:

  • クラスを定義した
  • 文字列の連結を使用
  • 末尾にコンマを付けたリスト
  • 行継続文字(結局使用しなくなった)

読みやすさはまだ少し改善することができます...


4

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

文字を大きくして、さらに数文字使用するのは非常に簡単です。

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

ジャワ

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

間違いなく、すべての回答の中で最も読みやすい。今日は投票できませんでしたが、戻ってきます。
bballdave025
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.