アダム・ウェストを称えて


90

Adam Westは亡くなりました。PPCGに関する彼の記憶に敬意を表したいと思いますが、彼が私たちの存在を知っているかどうかは疑っています。この男は多くのさまざまなことで知られていますが、元のバットマンとしての彼の役割ほど目立つものはありません。私は継父が今でも昔のバットマンとロビンを見続けていることをいつも覚えています。この挑戦は本質的に単純化されており、アダム・ウェストであった複雑な人とはまったく一致していません。しかし、これは男性のキャリアの最も象徴的なイメージであるため、私が考え出すことができる最高のものです。


これを以前に投稿したかったのですが、誰かがもっと良いものを思い付くのを待っていました。


以下を出力します(末尾のスペース/改行の有無にかかわらず):

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **

これはで、最小のバイト数が勝ちます。


7
エンコードされた文字列を禁止する必要があります。本当に面白くない!
-sergiol

7
彼は元のバットマンではなかった。その名誉はルイス・ウィルソンに属します。
シャギー

42
タイトルを見たとき、出力は「ナナナナナナナナナナナナナナナナナナ」になると思いました。
Dクルーガー

3
@DKrueger:別の質問でそうしてください:)
オリビエデュラック

4
なぜこれが昨年開始しなかったのですか?キャリー・フィッシャー、プリンス、デヴィッド・ボウイ、アラン・リックマン!

回答:


47

ゼリー、44 バイト

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’b25o99Jx$ị⁾ *s25ŒBY

オンラインでお試しください!

使い方

“¡©İ'¹!ðkW>ṅṙẏṙlœf:ߌÆ@Ƥ’

これは数値リテラルです。すべての文字はJellyのコードページの1ベースのインデックスに置き換えられ、結果は全単射の250の整数として解釈され、

58616171447449697510361193418481584558895594063391402

次に、b25ベースにその整数変換25o99置き換え099、降伏

11 1 20 4 10 1 8 4 12 4 3 6 12 4 2 9 9 5 1 99 1 24 2 5 7 11 4 4 7 3 4 3 7 2 7 1 6 2

Jx$置き換えJ 番目のベース25桁Nを有するN個のコピーJを

1 1 1 1 1 1 1 1 1 1 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 5 5 5 5 5 5 5 5 5 5 6 7 7 7 7 7 7 7 7 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 11 11 11 12 12 12 12 12 12 13 13 13 13 13 13 13 13 13 13 13 13 14 14 14 14 15 15 16 16 16 16 16 16 16 16 16 17 17 17 17 17 17 17 17 17 18 18 18 18 18 19 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 22 23 23 24 24 24 24 24 25 25 25 25 25 25 25 26 26 26 26 26 26 26 26 26 26 26 27 27 27 27 28 28 28 28 29 29 29 29 29 29 29 30 30 30 31 31 31 31 32 32 32 33 33 33 33 33 33 33 34 34 35 35 35 35 35 35 35 36 37 37 37 37 37 37 38 38

次に、ị⁾ *文字ペアへのインデックス付けを行います。インデックスは1から始まり、モジュール式であるため、奇数はスペースに、偶数はアスタリスクに置き換えられます。これにより

           *                    ****          *        ****            ****   ******            ****  *********         ***** *************************************************************************************************** ************************  *****       ***********    ****       ***    ***       **       *      **

s25結果を長さ25のチャンクに分割します。各チャンクを独自の行に書き込むと、次のようになります

           *             
       ****          *   
     ****            ****
   ******            ****
  *********         *****
 ************************
*************************
*************************
*************************
 ************************
  *****       ***********
    ****       ***    ***
       **       *      **

バウンス原子をŒB得、その最初の文字なしで逆転写しを付加することによって、各チャンクをpalindromizes

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       

最後にY、実際の改行を紹介します。


1
そして、私は思った“QƤḣọḲ£¿ẆịµñẒṢƊ¬ƒỤ2ỴÐ,ịṁ&Ḅ<ḋsḳn.⁷ṛḃṡ⁾6bḋeṁ’ṃ⁾ *s25ŒBY... 53バイトで十分に短いものだった
エリックOutgolfer

私は14種類のことを試しましたが、最終的に試行錯誤を繰り返しました。「0を99に置き換えて」という意味は、自分で試してみるまで理解できませんでした。
魔法のタコUr

156

Wordfuck5761 2686のバイト

彼の名前をソースコードとして使用すると、Adam Westに名誉が与えられると思います。

adam west adam west adam_wes t_a dam_we st_a dam_ west adam west adam west adam west_ad am_west_a dam_we st ad am we st ad am we st ad am west_a dam_we st_a dam_ west_ada m_w est ada m_w est ada m_west_ adam west_a dam_west_ adam_we st_ ad am_west ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_w est_ adam west adam west adam west adam west adam we st_adam west_ad am we st ad am we st adam_w es t_ ad am west_ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am west_a da m_ we st adam_w es t_adam_ west_ad am we st ad am west_a da m_ we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am we st adam_we st ad am we st ad am we st ad am we st_ada m_ we st ad am_wes t_ adam_we st_adam we st ad am_wes t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st ad am_west ad am we st ad am we st ad am we st adam_w es t_ ad am we st adam_w es t_adam_ west_ad am we st_ada m_ we st ad am we st ad am west_ad am we st ad am we st ad am west_a da m_ we st ad am we st ad am_west ad am we st ad am we st ad am_wes t_ ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am west_a da m_west_ ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am_wes t_ adam_we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st adam_w es t_adam_ west_ad am west_a da m_ we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st ad am we st_ada m_ west_ad am_west ad am west_a da m_ we st ad am_west ad am we st ad am we st_ada m_ we st ad am we st ad am we st ad am we st ad am we st ad am west_ad am we st ad am we st adam_w es t_ ad am we st_ada m_ west_ad am_west ad am we st adam_w es t_ ad am west_ad am we st ad am we st adam_w es t_ ad am_west ad am we st adam_w es t_ ad am we st_adam we st ad am west_a da m_ we st_adam we st ad am we st ad am_wes t_ ad am we st_ada m_ west_ad am_west ad am we st ad am we st_ada m_ we st_adam we st ad am we st ad am_wes t_ adam_we st ad am we st ad am_wes t_ ad am west_ad am we st ad am we st_ada m_ west_ad am we st ad am we st adam_w es t!

オンラインでお試しください! (トランスレインドブレインファック)

アダム・ウェストの歌 (ありがとう@carusocomputing)


69
これは酷い。大好きです。
TheWanderer

25
うーん。はい。かなり良いですが、1行目のアンダースコアを忘れたと思います。
Mateen Ulhaq

2
これをテストする方法はありますか?
シャギー

4
@Wilf PCCGへようこそ!私たちはこのサイトで実際に競争していません。もちろんこれは勝利のソリューションではありませんが、陽気なテーマに挑戦しています。すぐにあなたの答えを支持することを望みます!
ウリエル


67

Python、530 529 528 524バイト

import zlib as Holy
B=list("NNAAAnAAnnAnaAannnaaaaNaAAnNanAaAanNNaNNaNaanNNANanNNANaAnAaANANAAnAaANNnAanAaNnAaAANNAaAnNANAaaANNAanAaNaNNNAaNNanAAnNNnaaaNANANANnnaaaNaaAAAANaNaNaNAnNAAAAaaaaANAaNnnAaAaNAAaANNnaaNnNnaannaaAaananannNnAAAAAanAananANAnaAAnANAAaaaAaaanaaAAaanNAnanAAnnnANAnNAnnAnnnanaNNaaaNaNNaAAnNAaaANNNANAnAaaAaNaANnNNNaaAanaaaanaaaaaAaAaNnNnnaAnANaNnnANanNA")
A=dict(N='11',A='01',n='10',a='00')   
T=""
POP=BIFF=POW=OOF=lambda:A[B.pop()]
while B:T+=chr(int(POP()+POW()+BIFF()+OOF(),2))
print Holy.decompress(T)

5
ああ、しばらくの間、私はそんなに笑わなかった。NAanANANaNANaNAnnAnaNANanaNA
魔法のタコ

9
コードゴルフでは、バイトカウントを小さくすることになっていますが、エントリはかなり大きくなります。;)
PM 2Ring

34
時には、より大きな利益のために犠牲を払わなければなりません。
-rrauenza

1
それはバットマンが言うことのように聞こえます。;)B.pop(0)少し面倒だと思うことを認めなければなりません。リバースしBて、より効率的な(そしてより短い)を使用できるのはなぜB.pop()ですか?pop(0)一つのスロットダウン残りのすべてのリスト要素を移動しなければなりません。確かに、Cの速度で発生しますが、文字列の最後からポップするよりも効率は劣ります。
PM 2Ring

5
エイリアスはへPOPBIFFPOWOOF私は私のモニターに飲んでいたものを吐き出すました。ありがとう。+1。
rayryeng

21

JavaScript(ES6)、148 146バイト

_=>`n2zh2
f8l2b2l8
b8pep8
7cpepc
5ijiji
3yyq
0
0
0
3yyq
5afy8fa
98f69a96f8
f4f2d6d2f4`.replace(/./g,c=>'* '[(n=parseInt(c,36))&1].repeat(n/2||49))

デモ


12

Python、149 142バイト

@ PM2Ringのおかげで7バイト節約

for l in"b1d 74a13 54c4 36c4 2995 1o 0p 0p 0p 1o 257b 447343 727162".split():x=''.join(s*int(k,36)for s,k in zip(' *'*3,l));print(x+x[-2::-1])

いいね 7バイトを削ることができます:x=''.join(s*int(k,36)for s,k in zip(' *'*3,l))
PM 2Ring

心配ない。さらに短いPythonバージョンを作成することができました。;)
PM 2Ring

1
@ PM2Ringあなたは私の+1を取得
Uriel

12

MATL61 59バイト

' *'60:'*u9|K9j[~F9R,>ejc4Q,7;F\1l_=7sFR'F11:ZaY"13e)25ZvZ)

オンラインでお試しください!

使い方

これは、次の標準的な手法を使用します。

  • 画像は左右対称であるため、左半分(中央の列を含む)のみがエンコードされます。
  • イメージは列優先順(下、次に横)で線形化され、結果のシーケンスはランレングスエンコードされます。
  • 結果のランレングスはから1までの値をとる11ので、ランレングスのシーケンスはベース変換によってベースからベース11圧縮されます94(エスケープが必要な単一引用符を除く印刷可能なASCII文字)。

1
列優先では60回実行されますが、行優先では38回のみです。それはバイトを節約しますか?
デニス

@Dennis問題は、その場合、ランレングスが[1:12 20 24 99]であるため、圧縮が難しくなることです。私の最善の試みは60バイトである
ルイスメンドー

正確なセットを構築するのではなく、基数25を使用して、0を99に置き換えて、たとえばY|?それが実際に短いかどうかをテストするのに十分なMATL ATMを知りません...-
デニス

@Dennisそれは有望に見えます。セット[1:24 99]を使用して、1バイト削除しました[0:24](ベース25)を使用する場合、数バイトで0変換99する方法がわからない
ルイスメンドー

1
Y|それはゼリー/ PythonでないようMATL /オクターブでは動作しません。後者では、0 or 99利回り99 ...
デニス・

7

05AB1E、47バイト

„ *19×S•«M;Ó8ζ?èYÑ?½¨/Ž´.δòÈÖ<•25вт<19ǝ×J13ä€û»

オンラインでお試しください!


移植されたデニスのアルゴリズムは正しいですか?
エリックアウトゴルファー

@EriktheOutgolfer:replace 99 trick彼から借りました(簡単な方法で4バイトを節約しました)。まだ良い方法を探しています。
エミグナ

-1の.∞代わりに使用します€û»(ミラーは、ミラーを適用する前に、レガシーバージョンでは最初に改行のリストを暗黙的に結合します)。また、の₂в代わりに使用しようとしました25вが、残念ながら圧縮整数も1バイト長くなるため、何も保存されません•2Ø°×á[1∊Œ)’˜Àå<тIÞ‡p5ÉQ•₂в
ケビンクルイッセン

7

vim、168 156バイト

:nm N a <C-v><ESC>
:nm A a*<C-v><ESC>
:nm B aY<C-v><ESC>yyp!!rev<C-v><CR>kJh4xo<C-v><ESC>
11NA13NB7N4A10NA3NB5N4A12N4AB3N6A12N4AB2N9A9N5ABN24AB25ABkyyppjN24AB2N5A7N11AB4N4A7N3A4N3AB7N2A7NA6N2ABdd

これは、Unix環境を想定していますrev。NとAがそれぞれandを追加し、*Bがコピーとリバースを行う、かなり単純な(カウント、文字)エンコードを使用します。

実際のファイルでは、括弧で囲まれたエントリは、それらが表すリテラルバイトに置き換えられます。 <C-v>、0x16である<ESC>として0x1Bで、<CR>0x0Dがされています。

オンラインで試す


マクロ「b」と「c」を作成せずに、直接それらを再マッピングする方が速いと思います。:nm N a <C-v><esc>および:nm A a*<C-v><esc>
DJMcMayhem

@DJMcMayhemそうです。何らかの理由<C-v>で、ファイルに保存するのはそれよりも難しいと思ったので、ラウンドアバウト方式を使用してテストしました{ cat foo.vim; echo ':wq'; } | vim out.txt。なぜ<C-v><C-v>昨日試してみたのかわからない。
レイ

私はあなたがそれを機能させたことを知ってうれしいです!vimの回答を便利にテストできるもう1つの方法は、オンライン試すことです!、私が書いたエソランを実際に使用していますが、とにかく(ほとんど)後方互換性があります。-vフラグを使用すると、(のようなvimのキーの記述を使用することができます<C-v>し、その他もろもろ)
DJMcMayhem

@DJMcMayhemとても素敵です。ありがとう。
レイ

<NL>代わりに書くことはできません<NEWLINE>か?
L3viathan

7

69 54 52 48バイト

E⪪”|↖y{{﹪yc›o”n↗πf>T≔Y¿PN|ωπQβ” ⪫Eιק* μ⌕βλω‖O←

オンラインでお試しください!リンクは、コードの詳細バージョンです。編集:@ASCIIのみのおかげで、個別のフラグからインデックスのループに切り替えることで4バイト、(文書化されていない?)⸿文字を使用して7バイト、ランレングスエンコーディングにアルファベットを使用してさらに4バイトを節約しました。AtIndex自動的にモジュロを取るため、さらに2バイトを節約しました。Mapインデックス変数を自動的に作成するため、さらに4バイトを節約しました。説明:

Print(Map(

外部Mapは配列を返します。Printこれは、各要素を独自の行に印刷することでJoinこれを処理し\nます。したがって、で手動でそれらを行う必要がなくなります。

Split("anb adbke eme fjj y z z z y lhf dedhe cgbhc" " "),

文字列は、出力のすべての半行をエンコードします。交互の文字は*sとスペースの数を表します(スペースa=0で始まる行を処理するために使用されます)。スペースはデリミタの便利な選択ですが、圧縮することもできます(xも全体で55バイトに圧縮されます)。各行は個別に処理されます。(注:デバーソファイザーは、圧縮された文字列と圧縮されていない文字列の間の区切り文字の削除に失敗します。そうしないと、コードが,読みやすくなります。)

Join(Map(i, Times(AtIndex("* ", m), Find(b, l))), w)));

すべての文字をループし、適切な数の*sまたはスペースに展開します。変数mはthisの内部ループインデックスであり、文字Mapl保持します。次にJoin、定義済みの空の文字列を使用して、結果が単一の文字列に変換されますw

ReflectOverlap(:Left);

すべての行が印刷されたら、中央の列に重なるようにすべてを左に反映します。

私は改行、スペース、スターをすべて1つのループで処理しようとしましたが、実際にはさらに2バイトをこのように取りました。

Print(Join(Map("anb adbke eme fjj y z z z y lhf dedhe cgbhc", Ternary(Equals(" ", i), "\n", Times(AtIndex("* ", k), Find(b, i)))), w));
ReflectOverlap(:Left);

1
+1チャコールを習得する必要があります(HexagonyとCubixもあります)。ここにある私のお気に入りのプログラミング言語の3つ。ところで、私はあなたがすでに計画していたと思いますが、説明を追加できますか?
ケビンCruijssen

@KevinCruijssenうーん、私は冗長なコードでさえ明確化が必要だと思います...これで十分ですか?
ニール

ああ、TIOに冗長バージョンのtbhが含まれていることに気付いていませんでした。しかしそれにもかかわらず、答え自体の説明は決して痛いことはないので、時間をかけて書いてくれてありがとう。
ケビンCruijssen

木炭を学びたいのですが、コードに飛び込むことなくコードページの各文字が実際に行うことを説明する05AB1Eのようなページが必要です。
魔法のタコUr

2
@carusocomputingそれほど悪くはありません:圧縮された文字列の他に、通常の文字列(ASCII文字とピルクロー)、数字(上付き数字)、矢印(...矢印)、コマンド(通常は全角大文字)および演算子(すべてそうでない場合は、Wikiの適切なページでそれらを検索できます。
ニール

6

Clojure、833 437バイト

Clojureは定義上、簡潔さのために賞品を獲得することは決してありませんが、バットマンの2つのエピソード(count 'em- TWO)エピソード(同じBat-time、同じBat-channel!)を楽しみにしています。失う時間はありません!

クイック、ロビン-Bat-REPLへ!!!

(defn r[c n](clojure.string/join(repeat n c)))(defn pl[col](loop[i 0 c " "](print(r c (nth col i)))(if(< i (dec (count col)))(recur (inc i) (if (= c " ") "*" " "))(println))))(defn p[](loop[lines [[11 1 25 1][7 4 10 1 5 1 10 4][5 4 12 7 12 4][3 6 12 7 12 6][2 9 9 9 9 9][1 47][0 49][0 49][0 49][1 47][2 5 7 21 7 5][4 4 7 3 4 5 4 3 7 4][7 2 7 1 6 3 6 1 7 2]] i 0] (pl (nth lines i))(if (< i (dec (count lines)))(recur lines (inc i))nil)))

非ゴルフバージョン:

(defn repstr [c n]
  (clojure.string/join (repeat n c)))

(defn print-bat-signal-line [col]
  (loop [i  0
         c  " "]
    (print (repstr c (nth col i)))
    (if (< i (dec (count col)))
      (recur (inc i) (if (= c " ") "*" " "))
      (println))))

(defn print-bat-signal []
  (loop [lines [[11 1 25 1]  ; spaces asterisks spaces asterisks
                [7 4 10 1 5 1 10 4]
                [5 4 12 7 12 4]
                [3 6 12 7 12 6]
                [2 9 9 9 9 9]
                [1 47]
                [0 49]
                [0 49]
                [0 49]
                [1 47]
                [2 5 7 21 7 5]
                [4 4 7 3 4 5 4 3 7 4]
                [7 2 7 1 6 3 6 1 7 2]]
        i      0]
    (print-bat-signal-line (nth lines i))
    (if (< i (dec (count lines)))
      (recur lines (inc i))
      nil)))

RIP Adam West。これらのショーがどれほどばかげていても、子供だった私たちはあなたに敬礼します。


ゴルフされていない間、それはまだ猫の答えを打ちます。
魔法のタコUr

ゴルフバージョンが追加されました。できれば壁を登っているように見えるように、横に回します。:
ボブジャービス


6

RLEデータをエンコードするためのさまざまな手法を備えた、すべてRun Length Encodingを使用するさまざまなソリューション。

Python 3、125 121バイト

このバージョンでは、bytes文字列を使用してデータを保存します。

s=''
for c in b'<)@4/:),0/>/,3>/*981(WYYY(W*14=./4-.-4+4)2+':s+=' *'[c%2]*(c//2-19);s*=len(s)<25or print(s+s[-2::-1])or 0

ましょうs星またはスペースの文字列です。次に、バイトnエンコーディングs

n = 38 + 2*len(s) + (s[0]=='*')

Python 2、133 126バイト

このバージョンでは、アルファベットのコーディングが使用されます。文字の値は出力文字列の長さを決定し、文字の大文字と小文字はスペースまたは星で構成されるかどうかを決定します。

s=''
for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB':
 s+=' *'[c<'a']*(int(c,36)-9)
 if len(s)>24:print s+s[-2::-1];s='' 

オリジナルの133バイトPython 2ソリューション。

このバージョンでは、長さがゼロの文字列を使用しているため、スター文字列とスペース文字列を簡単に切り替えることができます。

s=''
for c,n in zip(24*' *','b1d074a13054c436c429951o0p0p0p1o257b447343727162'):
 s+=c*int(n,36)
 if len(s)>24:print s+s[-2::-1];s=''

アルファベットのコーディングを使用したワンライナーをお楽しみください。

Python 2、148バイト

print'\n'.join(''.join(s+s[-2::-1])for s in zip(*[iter(''.join(' *'[c<'a']*(int(c,36)-9)for c in'kAmgDjAceDlDcFlDbIiEaXYYYaXbEgKdDgCdCgBgAfB'))]*25))

さらに楽しく するために、バットマンのロゴのバージョンを生成するConwayのGame of Lifeのパターンを以下に示します。縦横比をテキストバージョンとほぼ同じにするには、各行を2倍にする必要がありました。このパターンは実際にはロゴを計算しませ(Lifeで計算を行うこと可能ですが、チューリング完全です)、メモリループからそれを再生するだけなので、コードゴルフエントリとして投稿することはできません(ただし私がやった)、私は数年前に書いたPythonスクリプトを使用して作成します。;)

ほとんどのLifeエンジンがロードできるかなり標準的なRLE形式でエンコードされています。GoLプログラム(例:Golly)がない場合は、このオンラインLifeエンジンを使用てオンラインで表示できます。LifeRLE ファイルをインポートできます。ここだという生活パターンのPNGバージョンは、(Gollyを含む)いくつかのライフプログラムはPNGファイルや他のさまざまな画像ファイル形式から生活パターンを読み込むことができます。


6

T-SQL、283276222バイト

SELECT CAST(DECOMPRESS(CAST('H4sIAAAAAAAEAFNQgAMtBVxAi5cLxgICdB3IAkAAVYuqEsLHIgRWjV0KqxBIvZYWujQeEaAGLdIALxeJGuinhXSvQEMCPVSQAbIcJPJQReGSSHxU9WAeSppAqEMoBwCfudAGawIAAA=='as XML).value('.','varbinary(max)'))AS varchar(max))

ここに掲載されている方法を使用して、元のバットマン文字列のGZIP圧縮を実装します。これは、SQL 2016以降でのみ機能します。

以前のSQLバージョンの場合、以前の方法(276バイト)を使用します

DECLARE @ CHAR(999)=REPLACE(REPLACE(REPLACE('PRINT SPACE(11#1$25#1&$7#4$10#1$5#1$10#4&$5#4$12#7$12#4&$3#6$12#7$12#6&$2#9$9#9$9#9&$1#47&#49&#49&#49&$1#47&$2#5$7#21$7#5&$4#4$7#3$4#5$4#3$7#5&$7#2$7#1$6#3$6#1$7#2)','#',')+REPLICATE(''*'','),'$',')+SPACE('),'&',')+CHAR(13')EXEC(@)

基本的に、次の方法を使用して、次に何を印刷するかを決定する巨大な文字列を手動でエンコードしています:

  • #7 に置き換えられます +REPLICATE('*',7)
  • $4 に置き換えられます +SPACE(4)
  • & に置き換えられます +CHAR(13)

置換後、958文字の完全な文字列は次のようになります(バットマンシンボルの各行で改行します:

PRINT 
SPACE(11)+REPLICATE('*',1)+SPACE(25)+REPLICATE('*',1)+CHAR(13)
+SPACE(7)+REPLICATE('*',4)+SPACE(10)+REPLICATE('*',1)+SPACE(5)+REPLICATE('*',1)+SPACE(10)+REPLICATE('*',4)+CHAR(13)
+SPACE(5)+REPLICATE('*',4)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',4)+CHAR(13)
+SPACE(3)+REPLICATE('*',6)+SPACE(12)+REPLICATE('*',7)+SPACE(12)+REPLICATE('*',6)+CHAR(13)
+SPACE(2)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+SPACE(9)+REPLICATE('*',9)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+REPLICATE('*',49)+CHAR(13)
+SPACE(1)+REPLICATE('*',47)+CHAR(13)
+SPACE(2)+REPLICATE('*',5)+SPACE(7)+REPLICATE('*',21)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(4)+REPLICATE('*',4)+SPACE(7)+REPLICATE('*',3)+SPACE(4)+REPLICATE('*',5)+SPACE(4)+REPLICATE('*',3)+SPACE(7)+REPLICATE('*',5)+CHAR(13)
+SPACE(7)+REPLICATE('*',2)+SPACE(7)+REPLICATE('*',1)+SPACE(6)+REPLICATE('*',3)+SPACE(6)+REPLICATE('*',1)+SPACE(7)+REPLICATE('*',2)

これは動的SQLとして実行され、次の出力を生成します。

           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       *****
       **       *      ***      *       **

5

PHP、137バイト

<?=gzinflate(base64_decode(U1CAAy0FXECLC8YAAnQNyAJAwIVFIYSPRYgLLkWEYrByLS10WTwiXAgmcYCLRPV00kGyN6BhgB4eyABZjgstyqAsuDpU5YjEgJIOEKoQigE));

オンラインでお試しください!

PHP、177バイト

foreach(["9zojk",a2878,aa4nb,b7u9z,chbf3,eze2n,jz6rj,jz6rj,jz6rj,eze2n,cepdr,ako8z,a1pc1]as$v)echo$t=strtr(substr(base_convert($v,36,2),1),10,"* "),"* "[$k++<2],strrev($t),"\n";

オンラインでお試しください!

PHP、179バイト

for(;$o=ord(kAlgDjAbeDlCcFlCbIiDaWXXXaWbEgJdDgCdBgBgAfA[$i++]);($x+=$s)%24?:print$r.("* "[$k++<2]).strrev($r)."\n".$r="")$r.=strtr(str_repeat($b=+($o>96),$s=$o-64-$b*32),10," *");

オンラインでお試しください!


最初の例には引用符が必要です
スティーブンペニー

2
@StevenPennyいいえ、そうではありません。オンライン試用リンクを確認しましたか?
-ovs

1
@StevenPennyこの場合、PHPは存在しない定数を文字列にキャストします。Codegolfで許可されている通知エラーのみをスローします。そして、base64でエンコードされた文字列の最後に欠落している「=」は自動的に追加されます
ヨルグヒュルサーマン

4

Java、296 214バイト

ゴルフ:

()->{String r="";boolean b=1<0;for(int a:";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()){for(int i=0;i<a-48;++i)r+=(b?'*':' ');if(a<49)r+='\n';else b=!b;}return r;}

ゴルフをしていない:

public class InHonorOfAdamWest {

  public static void main(String[] args) {
    System.out.println(f(() -> {
      String r = "";
      boolean b = 1 < 0;
      for (int a : ";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172".toCharArray()) {
        for (int i = 0; i < a - 48; ++i) {
          r += (b ? '*' : ' ');
        }
        if (a < 49) {
          r += '\n';
        }
        else {
          b = !b;
        }
      }
      return r;
    }));
  }

  private static String f(java.util.function.Supplier<String> f) {
    return f.get();
  }
}

";1I1074:151:4054<7<4036<7<6029999901_10a10a10a01_0257E570447345437407271636172"データに使用できます。for(char a:x){a=(int)a-48; [...]基本的に、各数値に48を加算し、それらをASCII文字に変換します。これで70〜80バイト節約できると思います。また、データをLambaにハードコーディングすると、バイト数も減ると思います。
魔法のタコUr

またboolean b=false;することができboolean b=1<0、またはより良いあなたが使用することができint、またのための宣言を組み合わせてi同じ行に;)。
魔法のタコUr

1
@carusocomputingありがとう、文字列にパックすることは考えていませんでした。あなたのものにはいくつかの悪いUnicode値がありました、私はそれを再生成しなければならなかったので、出力は今正しく表示されます。

iforループでは使用しないのでfor(int i=0;i++<a-48;)for-head として使用できると思います。
ローマングラフ

3

バブルガム、75

xxdダンプ:

00000000: cd92 b501 8050 1043 fb4c 91fa efbf 1f0e  .....P.C.L......
00000010: 2f87 d371 5814 37d3 7c35 4d2b 1826 64f6  /..qX.7.|5M+.&d.
00000020: d8aa 419c 2a11 3e75 ce25 6d1e ee9d 22e0  ..A.*.>u.%m...".
00000030: bb11 f04f 0d7f 2e38 dfc8 6926 3dad 0871  ...O...8..i&=..q
00000040: f316 1071 6db8 fc07 a408 f7              ...qm......

オンラインでお試しください


3

Coffeescript(282バイト)

t=['6bk','59mw','l2j3','2ghsf','4zg2n','9zldr','jz6rj','4u7zz','165qf','47wj']
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d)->parseInt(t[d], 36).toString(2).padStart 25, '0').forEach (d)->console.log (d+d.split('').reverse().join('').substring(1)).replace(/0/g, ' ').replace(/1/g,'*')

説明(plain-ol ES6を使用)

  • 他の人が述べたように、画像は対称であるため、エンコードで半分を捨てることができます
  • 複数の行も繰り返されるため、ルックアップテーブルの各行をトスして数バイトを節約できます
  • 各半行をバイナリに変換し(スペースとして0、*として1を使用)、Javascript(36)でその最高の基数でエンコードし、エンコード配列を作成します。
  • 最初のマップは各行を取得し、最終出力の半行に戻し、0でパディングします
  • 2番目のマップは、各行を逆の半分で連結し(中央の列を2回目に投げる)、0と1をスペースと* sに置き換えます

var t = [
    '6bk',
    '59mw',
    'l2j3',
    '2ghsf',
    '4zg2n',
    '9zldr',
    'jz6rj',
    '4u7zz',
    '165qf',
    '47wj'
];
[0,1,2,3,4,5,6,6,6,5,7,8,9].map((d) => {
    return parseInt(t[d], 36).toString(2).padStart(25, '0');
})
.forEach((d) => {
    console.log((d + d.split('').reverse().join('').substring(1))
        .replace(/0/g, ' ')
        .replace(/1/g, '*'));
});


クールな答え!サイトへようこそ!:)
DJMcMayhem

2

V、102バイト

i±³ *±± 
³ *± ´*· 
´*±² ´*µ 
´*±² ¶*³ 
µ*¹ ¹*  
²´* Ä3o²µ*jo±±*· µ*  
³*´ ³*· ´*´ 
**¶ *· **· Îæ$vp

オンラインでお試しください!

Hexdump:

00000000: 69b1 b320 2ab1 b120 0ab3 202a b120 b42a  i.. *.. .. *. .*
00000010: b720 0ab4 2ab1 b220 b42a b520 0ab4 2ab1  . ..*.. .*. ..*.
00000020: b220 b62a b320 0ab5 2ab9 20b9 2a20 200a  . .*. ..*. .*  .
00000030: b2b4 2a20 1bc4 336f b2b5 2a1b 6a6f b1b1  ..* ..3o..*.jo..
00000040: 2ab7 20b5 2a20 200a b32a b420 b32a b720  *. .*  ..*. .*. 
00000050: b42a b420 0a2a 2ab6 202a b720 2a2a b720  .*. .**. *. **. 
00000060: 1bce e624 7670                           ...$vp

これは、ランレングスエンコーディングを使用して、次のバットマン半分を生成します。

             *           
   *          ****       
****            ****     
****            ******   
*****         *********  
************************ 
*************************
*************************
*************************
************************ 
***********       *****  
***    ***       ****    
**      *       **      

そして、各行を逆にして複製します。


2

Python 2、134バイト

for w in'1D 4A13 4C4 6C4 995 O P P P O 57B 47343 27162'.split():r=''.join(c*int(k,36)for c,k in zip(3*'* ',w));print'%25s'%r+r[-2::-1]

オンラインでお試しください!

ランレングスは、ベース36の左半分から各行をエンコードします。それをミラーリングして、印刷される完全な行にします。先頭のスペースはエンコードされません。代わりに、左半分が長さ25に埋め込まれます。


私のバージョンでそのパディングトリックを使用できるといいのですが...
PM 2Ring

2

Mathematica 151バイト

Uncompress@"1:eJxTTMoPCm5iYmBQQAAtBVxAK8bA0AjGBgJ0PcgCQABXjaoWwsciBFWPXRKrEESHlha6AjwiYC1apAGQHhK10FsTOV6Chgp6CCEDZDlYdKKKw6WR+OjxD+KiJBSEQoR6AC49ZiI="

安価で創造的ではありません。文字列はCompress、必要な出力で使用される組み込みコマンドからのものです。

更新:

私は組み込みのImportString\ ExportString関数を使ってより良いことができると思いますが、結果の文字列をExportString正しくコピーして貼り付けることはできません。例えば

b = "           *                         *\n       ****          *     *          ****\n     ****            *******            ****\n   ******            *******            ******\n  *********         *********         *********\n ***********************************************\n*************************************************\n*************************************************\n*************************************************\n ***********************************************\n  *****       *********************       *****\n    ****       ***    *****    ***       ****\n       **       *      ***      *       **"
ExportString[b,"GZIP"]
ImportString[%,"GZIP"]

2行目のテキスト出力をコピー%して3行目のテキストを置き換えることはできないようです。


2

バッシュ407 322バイト

w=`yes 1|head -30|tr -d '\n'`
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
x=`printf "%.$[0x${a}]d%.$[0x${b}]s%.$[0x${c}]d%.$[0x${d}]s%.$[0x${e}]d%.$[0x${f}]s" 0 $w 0 $w 0 $w`
echo -n $x$[f<1?0:1]
rev<<<$x
}|tr 01 \ \*

オンラインでお試しください!

本当にひどい、もっと時間が必要か、ゴルフを手伝ってください。0と1の出力を生成し、最終的に音訳します。中間の列を出力するためのフラグとして最初の2行の最後の数字を0にするように注意して、0と1の量を16進数でエンコードします。printf pressisionを使用して数字または文字列のいずれかを出力し、0と1を出力します。%.$[0x${X}]Cパターンをゴルフに使用できると思います。

w=`yes 1|head -30|tr -d '\n'`  # w=111111111111111111111111111111   
for i in B1C000 74A120 54C003 36C003 299004 1C0506 0D0506 0D0506 0D0506 1C0506 257505 447342 727161
{ read a b c d e f <<<$(echo $i| fold -1| xargs)
printf "%.$[0x${a}]d
%.$[0x${b}]s
%.$[0x${c}]d
%.$[0x${d}]s
%.$[0x${e}]d
%.$[0x${f}]s" 0 $w 0 $w 0 $w
echo -n $[f<1?0:1]
printf "%.$[0x${f}]s
%.$[0x${e}]d
%.$[0x${d}]s
%.$[0x${c}]d
%.$[0x${b}]s
%.$[0x${a}]d\n" $w 0 $w 0 $w 0 
}|tr 01 \ \*

2

Pythonの3、232の 197 183 164バイト

さらに別のPython回答。しかし、退屈な圧縮コードはありません。エキサイティングな圧縮コード。

for s in map(lambda x:x+x[-2::-1],b".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&".split()):print(*((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2)))

マジックナンバー35を使用しているのは、その方法では、エスケープする必要のある制御文字、スペース、またはものが発生しないためです。スペースとスターを別々に処理しなければならないので、少しコストがかかります。

ゴルフをしていない:

for s in map(lambda x:x+x[-2::-1],   # map a list to the list and itself reversed,
                                     # minus the last (center) element
# magic string:
".$; *',$' ('.* &).* %,+, $R #T #T #T $R %()8 '')&&( *%)$(&"
.split()):                           # split on whitespace to divide into lines
 print(*(                            # unpack generator expression
(ord(s[i])-35)*" "                   # convert character to int, -25, times space
+(ord(s[i+1])-35)*"*"                # same thing with "*"
for i in range(0,len(s)-1,2)))       # for every pair in the list

このエンコード方法は、ベース36よりも優れています。最新のソリューションに合わせて調整したことを気にしないでください。;)バイト数を減らすためにできることがいくつかあります。1print呼び出しをfor。と同じ行に置くことでバイトを節約できます。2bytes文字列を使用する場合、これらのord呼び出しを取り除くことができます。3range反復子のペアをジッピングすることにより、置換できます。これらのアイデアを組み合わせたジェネレーターを次に示します((u-35)*" "+(v-35)*"*"for u,v in zip(*[iter(s)]*2))。これらの変更は、164まであなたのカウントをもたらすでしょう
PM 2Ringに

@ PM2Ringまったく気にしません。休暇に数週間行くので、変更を自由に編集してください。
L3viathan

ああ、わかった。しかし、私はあなたに新しいゴルフのないバージョンをさせます。
PM 2Ring

@ PM2Ringは既にバスに乗っているので、他の誰かがそれを承認してくれることを願っています
-L3viathan

2

PowerShell、305バイト、307バイト316バイト

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

カスタムタイプアクセラレータをより簡潔に定義する方法がない限り、他の誰かがそれをさらに短くするのを手伝ってくれるかもしれません。

編集:短縮バージョン(@rootに感謝)。エンコードされた文字列(base64エンコード前)は、8つの配列位置でトリミングできるため、範囲を縮小できます。StreamWriterがこの膨張をMemoryStreamに導入している理由は不明です。基礎となる行動についての洞察をいただければ幸いです。

[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg')),0,94),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()

ゴルフをしていない:

#Read decoded stream 
[IO.StreamReader]::new(
    (
        #Reverse GZip encoding
        [IO.Compression.GZipStream]::new(
            #Load GZip encoded string into a memory stream
            [IO.MemoryStream]::new(
                (
                    # Convert Base64 back to GZip encoded string
                    [Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')
                ),
                #Start of range
                0,
                #End of range. Stick the Memory Stream into a variable and use .Length here for non golf code
                102
            ),
            #Specify that we are decompressing
            [IO.Compression.CompressionMode]::Decompress
        )
    )
).ReadToEnd()

圧縮コード:

$s = '           *                         *
       ****          *     *          ****
     ****            *******            ****
   ******            *******            ******
  *********         *********         *********
 ***********************************************
*************************************************
*************************************************
*************************************************
 ***********************************************
  *****       *********************       *****
    ****       ***    *****    ***       ****
       **       *      ***      *       **'

#Create Memory Stream
$ms = [IO.MemoryStream]::new()
#Initialize a stream
$sw = [IO.StreamWriter]::new(
    #Create GZip Compression stream
    [IO.Compression.GZipStream]::new(
        #Reference Memory Stream
        $ms,
        #Set mode to compress
        [IO.Compression.CompressionMode]::Compress
    )
)
#Write input into stream
$sw.Write($s)
#Close the stream
$sw.Close()

#Convert Array to Base64 string
[Convert]::ToBase64String(
    #Retrieve Memory Stream as an array
    ($ms.ToArray() | select -SkipLast 8)
)

1
なぜ102?99は同じように動作します[IO.StreamReader]::new(([IO.Compression.GZipStream]::new([IO.MemoryStream]::new(([Convert]::FromBase64String('H4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbuHBUsBqAgAA')),0,102),[IO.Compression.CompressionMode]::Decompress))).ReadToEnd()
ルート

@rootそれは、私が推測するが、なぜそれが機能するのかわからない。実際に8から94まで減らして、エンコードされた入力文字列の最後の8文字を削除できます。私はこれがなぜ機能するのか理解するのに苦労しており、私がするまで答えにそれを追加したくありません。私の圧縮機能は何らかの形で誤って余分なパディングを追加していますか?
チリッシュマン

1
圧縮コードから、最後の2つの値$ms.ToArray()は両方とも0です。必要ですか?
ルート

いいえ。異なる入力文字列を試してみると、最後にちょうど2つの不要な配列位置があることが一貫しているように見えます。圧縮スクリプトに最後の2つをスキップする句を追加します。それでも、ストリームライターがヌルを最後に追加している理由がわかっていればいいのにと思います
-Chirishman

1
あなたは正しい、それはちょうど2つのテール文字以上であり、8です。配列の最後の8つの位置、を('225','193','82','192','106','2','0','0')削除して作成することができますH4sIAAAAAAAEAL1SOQ4AIAjbTfwDc///QFE8gKAJi53sNQASbYBuQC3rxfANLTBm1iaFB9JIx1Yo9Tzg7YfCBeRQS7Lwr5IfZW7Cb0VDe3I8q25TcXvrTsyXOLGTbg==。どこから来たのかわかりません。
ルート

2

Perl 5、168バイト

$_="11 *25 
7 4*10 *5 *10 4
5 4*12 7*12 4
3 6*12 7*12 6
2 9*9 9*9 9
 47
49
49
49
 47
  5*7 21*7 5
4 4*7 3*4 5*4 3*7 4
7 **7 *6 3*6 *7 *";s/$/*/gm;say s/\d+(.)/$1x$&/ger

最初の行のみの末尾のスペースに注意してください。が必要-M5.01です。これは無料です。

おそらくもっとゴルフをすることができます。


2

LaTeX、314バイト

\documentclass{book}\begin{document}\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}\catcode`.13\catcode`!13\catcode`-13\def!#1{\r*{`#1}}\def-#1{\r~{`#1}}\let.\par\tt-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B\enddocument

説明のないバージョン:

\documentclass{book}
\begin{document}
% Macro for repeating #1 (#2-64) times
\def\r#1#2{\ifnum#2>64#1\r#1{\numexpr#2-1}\fi}
% Prepare '.', '!' and '-' for usage as macro names
\catcode`.13\catcode`!13\catcode`-13
% The ASCII code of #1 (a character) is used as the number of how often '*' will be printed with \r
\def!#1{\r*{`#1}}
% Same as ! but for spaces
\def-#1{\r~{`#1}}
% . becomes a line break
\let.\par
% Set monospace font
\tt
% And finally print the whole thing
-K!A-Y!A.-G!D-J!A-E!A-J!D.-E!D-L!G-L!D.-C!F-L!G-L!F.-B!I-I!I-I!I.-A!o.
!q.!q.!q.-A!o.-B!E-G!U-G!E.-D!D-G!C-D!E-D!C-G!D.-G!B-G!A-F!C-F!A-G!B
\enddocument

2

C#(.NET Core)342333328185175バイト

_=>{var r="";for(int i=0,j,k=0;i<63;i++)for(j=0;j++<"-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)"[i]-34;){r+=i%2<1?' ':'*';if(++k%49<1)r+='\n';}return r;}

オンラインでお試しください!

アプローチを変更した後、大量のバイトが保存されました。図面を2D配列として、ファイルごとにRLEエンコードを計算しました。

{ 11, 1, 25, 1, 18, 4, 10, 1, 5, 1, 10, 4, 12, 4, 12, 7, 12, 4, 8, 6, 12, 7, 12, 6, 5, 9, 9, 9, 9, 9, 3, 47, 1, 147, 1, 47, 3, 5, 7, 21, 7, 5, 6, 4, 7, 3, 4, 5, 4, 3, 7, 4, 11, 2, 7, 1, 6, 3, 6, 1, 7, 2, 7 }

奇数インデックスはsを表し、偶数インデックスはsを表し*ます。次に、印刷可能なASCII表現をすべての数字に置き換え(「#」文字を1として)、次のようになりました:

-#;#4&,#'#,&.&.).&*(.).('+++++%Q#µ#Q%')7)'(&)%&'&%)&-$)#(%(#)$)

そのため、アルゴリズムは、この文字列を解凍し、適切な場所に改行を追加することにより、描画を計算します。


1
l変数に設定する必要はなく、ループで直接使用するだけです。.ToString(i, 2)-> .ToString(i,2)つまり、空白を削除します。
TheLethalCoder

1e10これらの数値の10進数または科学()表現でバイトを保存できますか?このチャレンジは実際にここで役立ちます。
TheLethalCoder

@TheLethalCoderいや。私はチェックしました(ところで、印象的な挑戦です)、私はすでに最小の表現を使用しているので、そこでは運がありません。数値を定数で除算できるかどうかを確認するために、それらの間の最大公約数を見つけようとしましたが、明らかに1です
チャーリー

2

PowerShell129 128バイト

-join('5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% t*y|%{(' ','*')[$i++%2]*($_-42)})-split'(.{49})'-ne''

オンラインでお試しください!

ゴルフをしていない:

-join(
    '5+C+<.4+/+4.6.616.206160/33333-Y+s*t+Y-/1?1/0.1-./.-1.5,1+0-0+1,'|% toCharArray|%{
        (' ','*')[$i++%2]*($_-42)
    }
)-split'(.{49})'-ne''

出力:

           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **

主なアイデアは非常にシンプルです

エンブレムコーディング:

  1. すべてのエンブレム行を1つの文字列に連結します
  2. スペースとアスタリスクを数える
  3. 各セグメントの長さ+ 42を文字としてエンコードします

デコード(このスクリプト):

  1. cripto-stringから各文字の42を引いた文字のコードを取得します。これはセグメントの長さです
  2. スペースまたはアスタリスクの繰り返しLength回数で構成されるセグメントの追加
  3. 49シンボルごとに新しい行を挿入して行を分割します

いくつかのスマートなもの

  1. コーディングアルゴリズムは、3つの中央のアスタリスク行を表示するコード189のシンボルを提案します。この記号はASCIIではありません。現代の環境では正常に機能しますが、スクリプトの長さにあいまいさがあります。したがって、非アスキー記号½s*t(73アスタリスク、0スペース、74アスタリスク)に置き換えます。
  2. 最後の行の右側のスペースを切り取り、1バイト節約します。ごめんなさい、バットマン。
  3. オフセットが42なのはなぜですか?ただ欲しかった:)そして、cripto-stringは見た目がいい。

追加:エンブレムのコーディングのためのScipt

(@"
           *                         *           
       ****          *     *          ****       
     ****            *******            ****     
   ******            *******            ******   
  *********         *********         *********  
 *********************************************** 
*************************************************
*************************************************
*************************************************
 *********************************************** 
  *****       *********************       *****  
    ****       ***    *****    ***       ****    
       **       *      ***      *       **       
"@ -replace"`n"-split'( +|\*+)'-ne''|%{[char]($_.Length+42)})-join''

1

Mathematica、271バイト

T=Table;f[x_]:=""<>T["*",x];m={f@49};n={f@47};g[y_]:=""<>T[" ",y];k[a_,b_,c_,d_,e_]:={(s=f@a<>g@b<>f@c<>g@d<>f@e)<>StringDrop[StringReverse@s,1]};Grid@{k[1,13,0,0,0],k[4,10,1,3,0],k[4,12,0,0,4],k[6,12,0,0,4],k[9,9,0,0,5],n,m,m,m,n,k[5,7,0,0,11],k[4,7,3,4,3],k[2,7,1,6,2]}

1

Braingolf590の 580 579 577 428 423 312バイト

LeakyNunはゴルフの神であるため、-111バイト

14#
46*6394943[92+.6,5][8]#.[# ]#*[# ]#*#
[# ][#*][# ]#*[# ]#*[# ]#*...#
[# ][#*][# ][#*][# ]#*...#
# ..[#*][# ][#*][# ][#*]#
# .[#*][# ][#*][# ][#*]#
# [#*]#
&@#0[#*]#
!&@!&@# &@#.[#*]"
  "&@4645*643646366556[#*][# ][#*][# ][#*]"
    "[#*][# ]#*..# ...[#*]# ...#*..[# ][#*]#
[# ]#*.[# ]#*[# ]#*..[# ]#*[# ]#*.&@

オンラインでお試しください!

BraingolfはASCIIアートが得意ではありませんが、私は試しました。

まさかこのclusterf ** kを説明しているわけではない


1

///171 166バイト

\r\nソースで使用していたため、5バイト節約されました(笑)。

/-/  //,/!!//'/**//&/*"//%/--//#/,,,,,!*//"/%-//!/''/"% &""" *
" !"%*% &%!
% !""!'&"!
- !*&"!'&"!'
-,&- ,&- ,*
 #'
!#
!#
!#
 #'
-!& ,,!& !*
%!" '*%!*%'& !
" *& &'&& '

オンラインでお試しください!

「最も経済的な」部分文字列を単一の文字で置き換える連続した反復を使用して圧縮されます。これはほぼ最適ですが、次の2つのいずれかが当てはまります。

  1. いくつかのメタ置換を使用しても問題ありません(動的に正規表現を挿入するなど)
  2. 経済性の低い部分文字列を最初に(可能性は低いが)置換するほうが、何らかの形で有益です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.