ASCIIケイリーグラフ


26

私が定式化している別の挑戦のためにいくつかの研究をしている間、私はケイリーのグラフ、特にこれに出会いました。私はチャレンジのトップ ライターの1人なので、このためにASCIIアートチャレンジをする必要がありました。

あなたの課題は、次のように2つのジェネレーターでフリーグループのケイリーグラフのこのASCIIアート描写を作成することです。

                                               +                                               
                                              +++                                              
                                             + | +                                             
                                            ++-+-++                                            
                                             + | +                                             
                                          +    |    +                                          
                                         +++   |   +++                                         
                                        + |    |    | +                                        
                                       ++-+----+----+-++                                       
                                        + |    |    | +                                        
                                         +++   |   +++                                         
                                          +    |    +                                          
                                   +           |           +                                   
                                  +++          |          +++                                  
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                              +    |           |           |    +                              
                             +++   |           |           |   +++                             
                            + |    |           |           |    | +                            
                           ++-+----+-----------+-----------+----+-++                           
                            + |    |           |           |    | +                            
                             +++   |           |           |   +++                             
                              +    |           |           |    +                              
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                    +             +++          |          +++             +                    
                   +++             +           |           +             +++                   
                  + | +                        |                        + | +                  
                 ++-+-++                       |                       ++-+-++                 
                  + | +                        |                        + | +                  
               +    |    +                     |                     +    |    +               
              +++   |   +++                    |                    +++   |   +++              
             + |    |    | +                   |                   + |    |    | +             
            ++-+----+----+-++                  |                  ++-+----+----+-++            
             + |    |    | +                   |                   + |    |    | +             
              +++   |   +++                    |                    +++   |   +++              
               +    |    +                     |                     +    |    +               
        +           |                          |                          |           +        
       +++          |                          |                          |          +++       
      + | +         |                          |                          |         + | +      
     ++-+-++        |                          |                          |        ++-+-++     
      + | +         |                          |                          |         + | +      
   +    |           |                          |                          |           |    +   
  +++   |           |                          |                          |           |   +++  
 + |    |           |                          |                          |           |    | + 
++-+----+-----------+--------------------------+--------------------------+-----------+----+-++
 + |    |           |                          |                          |           |    | + 
  +++   |           |                          |                          |           |   +++  
   +    |           |                          |                          |           |    +   
      + | +         |                          |                          |         + | +      
     ++-+-++        |                          |                          |        ++-+-++     
      + | +         |                          |                          |         + | +      
       +++          |                          |                          |          +++       
        +           |                          |                          |           +        
               +    |    +                     |                     +    |    +               
              +++   |   +++                    |                    +++   |   +++              
             + |    |    | +                   |                   + |    |    | +             
            ++-+----+----+-++                  |                  ++-+----+----+-++            
             + |    |    | +                   |                   + |    |    | +             
              +++   |   +++                    |                    +++   |   +++              
               +    |    +                     |                     +    |    +               
                  + | +                        |                        + | +                  
                 ++-+-++                       |                       ++-+-++                 
                  + | +                        |                        + | +                  
                   +++             +           |           +             +++                   
                    +             +++          |          +++             +                    
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                              +    |           |           |    +                              
                             +++   |           |           |   +++                             
                            + |    |           |           |    | +                            
                           ++-+----+-----------+-----------+----+-++                           
                            + |    |           |           |    | +                            
                             +++   |           |           |   +++                             
                              +    |           |           |    +                              
                                 + | +         |         + | +                                 
                                ++-+-++        |        ++-+-++                                
                                 + | +         |         + | +                                 
                                  +++          |          +++                                  
                                   +           |           +                                   
                                          +    |    +                                          
                                         +++   |   +++                                         
                                        + |    |    | +                                        
                                       ++-+----+----+-++                                       
                                        + |    |    | +                                        
                                         +++   |   +++                                         
                                          +    |    +                                          
                                             + | +                                             
                                            ++-+-++                                            
                                             + | +                                             
                                              +++                                              
                                               +                                               

入力

言語の実行に明示的に入力が必要でない限り、入力はありません。

出力

上記のASCIIアート表現。

MD5ハッシュ

これは非常に大きな出力であるため、作業を確認するために、出力のサンプル形式のMD5ハッシュをいくつか示します(すべてBOMなしのUTF-8です)。

  • 正方形スペースのパディング、CR/LF改行、および末尾の改行954B93871DAAE7A9C05CCDF79B00BF3C--これは上記で使用した表現です。
  • 正方形スペースのパディング、CR/LF改行、末尾の改行なし-28405EF91DA305C406BD03F9275A175C
  • 正方形スペースのパディング、LF改行、および末尾の改行-8CA65FB455DA7EE5A4C10F25CBD49D7E
  • 正方形スペースのパディング、LF改行、末尾の改行なし-FDB1547D68023281BB60DBEC82C8D281
  • 末尾のスペース、CR/LF改行、末尾の改行はありません-77FDE8CE5D7BD1BDD47610BA23264A19
  • 末尾のスペース、CR/LF改行、末尾の改行はありません-EAD390C3EFD37F0FCACE55A84B793AB5
  • 末尾のスペース、LF改行、末尾の改行はありません-1F6CAB740F87881EB2E65BED65D08C36
  • 末尾のスペース、LF改行、末尾の改行はありません-7D41CE1E637619FEA9515D090BFA2E9C
  • 比較のために追加のMD5がある場合はお知らせください。作成してチャレンジを更新します。

ルール

  • 文字自体が正しく並んでいる限り、先頭または末尾の改行または空白はすべてオプションです。
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 可能であれば、他の人があなたのコードを試すことができるように、オンラインテスト環境へのリンクを含めてください!
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

これがパラメーター化されていないことに少し驚いています-シーケンスの6番目にあるように見えます。
ニール

この無秩序なゴルフの挑戦は非常に似ています。
DJMcMayhem

@Neil私はそうすることを考えていましたが、少しの利益のために難しさをあまりにも増大させるのではないかと恐れて、それに反対しました。
AdmBorkBork

-/ |sの実行は、元の推測では(2<<n)-n-2なく、式に従うように見え(1<<n)-1ます。
ニール

@Neil彼らは実際にはオイラー数です。
AdmBorkBork

回答:


9

JavaScriptの(ES6)、204の 195 188 180バイト

f=
_=>[...Array(9119)].map((_,i)=>~i%96?g(48+~(i/96),47-i%96,5):`
`,g=(x,y,z,n=(1<<z)-z)=>x|y?(x=x<0?-x:x)+(y=y<0?-y:y)<n?` |-+`[2*!x+!y]:z--?x>y?g(x-n,y,z):g(x,y-n,z):` `:`+`).join``
;document.write(`<pre>`+f())

スクエアスペースパディング、LFの改行、および末尾には改行文字、私はMD5をチェックしていませんが。

f=
m=>[...Array((w=(4<<m)-m*-~m-2)*~-w)].map((_,i)=>~i%w?g(w/2+~(i/w),w/2-i%w-1,m):`
`,g=(x,y,z,n=(1<<z)-z)=>x|y?(x=x<0?-x:x)+(y=y<0?-y:y)<n?` |-+`[2*!x+!y]:z--?x>y?g(x-n,y,z):g(x,y-n,z):` `:`+`).join``
<input type=number min=0 oninput=o.textContent=f(this.value)><pre id=o>+

222 216 207 199バイトのパラメータ化されたバージョン。説明:出力サイズは、46個の改行を含む9119 ASCII文字です。(パラメータ化されたバージョンの場合、出力サイズは末尾の改行を含めて計算されます。)最初に改行の期限を確認するか、そうでない場合は最終の中央の原点を基準とした座標で関数を呼び出すことにより、各文字が個別に決定されます図。この関数は、ポイントを各サイズの最も近いクロスに対して再帰的にチェックし、ポイントがクロスの中心または軸上にあるかどうかに応じて適切な文字を返します。


7

RODA284の 280 238 234バイト

{a=[1,-1]t=[]seq 1,95|t+=[" "]*95,_
f={|x,y,i,d|{s=[27,12,5,2,1][i]i++
a|{|j|{seq y,y+s*j|t[_][x]="|"f x,y+s*j,i,2-j}if[d!=2+j]}_
a|{|j|{seq x,x+s*j|t[y][_]="-"f x+s*j,y,i,3-j}if[d!=3+j]}_}if[i<5]
t[y][x]="+"}f 47,47,0,0
t|print _&""}

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

これは匿名関数です。私はセミコロンの代わりに改行を使用したので、とてもきれいにフォーマットされています!

再帰関数fは、2次元配列tでグラフを作成し、最後の行に印刷します。

27,12,5,2,1数バイトで計算する方法が見つからなかったため、ハードコードされています。


2のべき乗を計算する方法はありませんか?
ニール

@Neil b_shiftl演算子は存在しますが、このプログラムで使用するには長すぎると思います。
fergusq

私が考えることができるのは、おそらくベース3ですか?...けれども知らんロダは、ベースの変換でどのように良いです10000110001200020001> - 1168671727あわやかかわらず、あなたが以下の2つのバイトに変換し、分割することができます疑う...
マジックタコ壺

3

50 43バイト

F³²⁴«P++↷AE…¹¦⁵∧¬﹪ιX³κ⁻X²⁺κ¹⁺κ²εF⁺ε⮌ε¿κ«+κ↶

オンラインでお試しください!リンクは、コードの詳細バージョンです。私はもともとさまざまな反射と回転を試しましたが、それらは私が望むことをしないか、場合によってはバグがありました。その後、ネストループアプローチを試みましたが、ステップ数が割り切れる3の累乗の数に応じて、各内部クロス間に多数の線を引くことで機能するこの反復法に切り替えました。わずか4バイトのコストでサイズパラメータを受け入れるように簡単に変更することもできます。

NβF×⁴X³β«P++↷AE…·¹β∧¬﹪ιX³κ⁻X²⁺κ¹⁺κ²εF⁺ε⮌ε¿κ«+κ↶

編集:私はそれ以来RotateShutterOverlap、このタスクを達成するために使用する方法を考え出したが、迷惑なことに私は44バイトかかります:

A⁰ηF⁶«AηγA⁻⁺X²ιηιηJη⁰P-γ+¿γ⟲SO²⁶⁻×²γ¹»‖⟲SO⁹⁵

RotateShutterOverlap可変回転整数を受け入れた場合、40バイトに削減されます。

A⁰ηF⁶«A∨η¹γA⁻⁺X²ιηιηJη⁰P+γ+⟲SO⎇‹ι⁵Lβ²⁴⁶γ

そのまま、rotations listパラメーターを使用すると45バイトかかります。

A⁰ηF⁶«A∨η¹γA⁻⁺X²ιηιηJη⁰P+γ+⟲SO⟦⁶ײ⁺¹⁼⁵ι⟧⁻ײγ¹

これは私に浮気のように感じます。:P
HyperNeutrino

@HyperNeutrino少しハードコーディングされたバージョン:オンラインで試してみてください!または、それはあなたが意図したものではありませんか?
ニール

:PIは、これが炭にとって短すぎ、あまりにも簡単すぎることを意味しました:P
HyperNeutrino

@Neil:Oこれはすごい!私はそれを修正することができますので、あなたはバギー反射/回転の例を与えることができれば、私は思ったんだけど
ASCIIのみ

@ ASCII-onlyバグのあるリフレクションの場合、斜めのリフレクションの1つだけが機能していたと思いますが、どのリフレクションが思い出せません。エラーは未定義の変数(おそらくコピーパスタが多すぎる)だったと思います。
ニール

2

05AB1E、620バイト

•1dOœ˜‘Av–Qs†ƒFã&äuÌʹÝ2býádÙI’´Ëœ¼)Y»+™ß›[Vg“Ò¢Jù1no<V<*Ét*-¢&â-ßBÆ×090`11-øsµ–¶1VÛ==ü:¼÷ØûÍZ„æ¹=#ùÞV«¡fä&Έ'ëˆÝ=ä^‰¤?Êçù!ØèØr-3îÛ+êò‚û¢½°BéG¦U”Ü1žˆr6S‹“ŽKRK°A¹ª¿â9]}×u¬]ž„Îï›V¦Â¶4Ãï¢v£×é´Ü2Äžiqô>§17F*ÎañníÆ4]s8mÏ›HSÏ771í´‰d3´Þ|À]Uà{þñýqø’e„XÿF4–:Yl&uqžÍÒÿ¾u9¤jóHP‰çêoÒNŠX-°xpÒÿ*ejÏD0Ë+GnÊ-/§3ÜJÙˆƒÌ=ŒÒOX‰|O%wæ[n‹ã4)ôF+~´Ö{aÄ$(Þí¼”÷u–qÿBòfÂíÜìTó–xÝwû¾])<§O«\‚e°‡¾‹K…ZDPô;µ!ò&Ô¼¨1gŠ—Ÿ¦©zW¢¾×4K±ÔÄ_ìûÄ‚3¶Ñ>‚bùn±œ×)ÙCâRö裶”ˆ1ßÑֱͮ[ZéRïyÓxÓE¨cW˜{Ã’ùoE›¥ÚvA¨‹êÆýÑY½RÎ5´‘Ê™uåÄr"ãYð÷I!0¤)å‡ëž”>úèWò}é€@.ØñÈQ€ñ{Á„‘Ü’‰~Çñ=…|“ڃĬcóÇkþÛÇ–š;{¡¦½ÕrÎé–àTz€Kì2à^|¢èˆÎxž“å$œ2ô»EidœþFrSS¥ÝÜ—X¡á~îþQ˜NÜGñ¥Q)aè•4B"1230"" +-|"‡48ôû€û»

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

パターンを4分の1にカットし、シンボルをベース4に変換し、パターンの1/4をベース214に圧縮してから、対称線上で裏返しました。私は実際のアルゴリズムを使用してよりスマートなものに取り組んでいますが、完了するまではこれがここにあります。


4
それは05AB1E私が見た中で最大の答えです。xD通常、この言語の回答では620ではなく6.20に近くなります。;)
ケビンクルーイッセン

@KevinCruijssenは、イテレーション4を要求している場合、はるかに小さい母であることでしょう。05AB1Eでまだ実際のアルゴリズムに取り組んでいます...思っていたより少し難しいです。
魔法のタコUr

2

Python 3、264バイト

def F(g,p,d,k):
 for c in'-|'[d.real!=0]*(2**k-k-1):g[p]=c;p+=d
 P(g,p,k-1)
def P(g,p,k):
 if'+'==g.setdefault(p,'+')and k:
  for d in[1,1j,-1,-1j]:F(g,p+d,d,k)
g={}
P(g,0j,5)
print('\n'.join(''.join(g.get(r+c*1j,' ')for c in range(-47,48))for r in range(-47,48)))

相互に再帰的な関数のペアを使用します。Fは線を描画し、Pは「+」を挿入します。もっとゴルフはできますが、今のところ時間はありません。


1

C、236バイト

char t[95][95],i=95;f(x,y,s,n,m){if(t[y][x]<33){m=~s+(1<<s);for(n=~m;n++<m;)t[y][x+n]='-',t[y+n][x]=n==0?'+':'|';if(s--)f(x+n,y,s),f(x-n,y,s),f(x,y+n,s),f(x,y-n,s);}}main(){memset(t,32,9025);f(47,47,5);while(i--)printf("%.95s\n",t[i]);}

文字テーブルを表示する前に再帰的に構築するだけです。

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

@Neil、ブランチの長さが実際のルールに従っていることに気づかせてくれてありがとう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.