グラフをASCIIで視覚化する


8

あなたの使命は、それを受け入れることを選択した場合、次のように、グラフを形成する一連のポイントペアを入力することです。

A、BC、AB、AA、DA、EF、GC、G

次に、グラフのASCII視覚化を出力する必要があります。

たとえば、次のA,B C,A C,Dようになります。

A-----------------B
 \                
  \                  
   C---------D

編集:コメントに従って、ここにいくつかの入力制約があります:

  • 各ノードには最大5つの接続があります(さらに処理できる場合は+20)
  • グラフは平面です。つまり、線が交差しません(1つの交差でも処理できる場合は+200)
  • 最大16個のノードがあります(さらに処理できる場合は+20)

スコアは999-(コードの長さ)+(ボーナス)です。

エンジンを始動してください:)


code-golfcode-challenge、または何?そして、勝利の基準/基準は何ですか?
Paul R

code-golf/ 10char
Soham Chowdhury

1
グラフは平面であることが保証されていますか?ASCII表現は平面である必要がありますか?(もしそうなら、これは非常に挑戦的な仕事です)。
Peter Taylor

1
@SohamChowdhury:Planarは、線を交差させることなく描画できることを意味します。
マリナス

2
現在、これは非常に幅広く困難な課題です。graphvizやsearch.cpan.org/~tels/Devel-Graph-0.12/lib/Devel/Graph.pmなどのツールは、この種のジョブ用に設計されています。私も過去に似たようなことを試みましたが失敗しました。グラフが平面でノードに最大4つの接続があるという追加のルールは、これをより賢明なコードゴルフチャレンジにします。
shiona 2013年

回答:


7

Python 3、168文字、スコア= 999- 168 + 240 = 1071

Keith Randallsの素晴らしい答えを短くするだけです。

  1. Python 3では、printは関数であるため、で短縮できますp=print3 * (4 - 1) - 8 = 1文字を保存します。

  2. Python 3では、のinput代わりにが使用されraw_input、4文字が保存されます。

  3. 代わりに' '*len(V)使用できます' '*80(または同様のもの)。これにより、後続スペースの数が増えますが、気になる人は...さらに4文字節約できます!

  4. 興味深いことに、文字列の代わりにリストを使用してください。これにより、の更新がSはるかに簡単になりますが、印刷が多少複雑になります。リストを呼び出すTのでS、マリナスの文字列と混同しないようにします。

  5. まず、スペース区切りの文字列ではなく、頂点をリストにして、4文字節約します。出力行TT=[' ']*402文字のリスト()になる必要があります。

  6. 現在の行 の印刷Tが5文字長くなります。文字列のリストを正しく連結するために角かっこが必要です。さらに2 -文字必要です(xとyのサイズが約半分である*ため)、print関数にリストの要素を個別の引数として、それらをスペースで区切って出力します(リストとしてではありません!)。(このステップは大変でした。)

  7. 現在の行T[x]=T[y]="|"S=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:]、19文字を節約するの代わりにシンプルで更新できます。

  8. T再度印刷する場合、および頂点を最後に間隔を空けて印刷する場合は、アスタリスクが必要です。これには2文字かかります。

  9. そして、これを入力している最中に、接続されていない非表示の頂点(' ')があっても害はないことがわかります。これにより、頂点のセットをより短く作成でき、さらに4文字を節約できます。

全体として、節約は1 + 4 + 4 + 4 - 2 - 5 + 19 - 2 + 4 = 27です。

R=input()
p=print
V=list(set(R)-{','})
T=[' ']*40
for e in R.split():x,y=sorted(map(V.index,e[::2]));p(*T[:x]+["+"+"--"*(y-x-1)+"-+"]+T[y+1:]);T[x]=T[y]="|";p(*T)
p(*V)

9.の効果を示す例:入力A,B A,Cが出力につながる

+-----+                                                                        
|     |                                                                        
+---+ |                                                                        
|   | |                                                                        
A   C B

1
私はもともとリストとしてSとTを持っていましたが、Python 2 ''.join()ではそれを長くしたゴミが必要です。私はそれが*Tpython3に存在することを知りませんでした。次のゴルフ...
キースランドール

19

APL(171の 166 162の文字、すべてのボーナス999 - 171 166 = 162 + 20 + 20 + 200 1068 1073 1077)

これは、私がこれまで書いた中で最も長いゴルフAPLプログラムです。これは少し浮気するかもしれませんが、これを実際に許可しない質問には何もありません。私がしていることは、すべてのノードを垂直線上に配置し、グラフを円弧図として描画することです。それは明らかにまだグラフです。

まだ数時間かかりました。

V←' '⍴⍨99,⍨2×⍴P←∪,C←(2,⍨2÷⍨⍴G)⍴G←G/⍨⎕A∊⍨G←⍞⋄V[2×⍳⍴P;50]←P⋄M←1⋄G←⍴D←{⍵[⍋⍵]}¨↓P⍳C⋄{V[A B←⍵;L←50+M×⌽⍳G]∘←'-'⋄V[A+⍳B-A;⊃L]∘←'|'⋄V[⍵;⊃L]∘←'+'⋄M×←¯1⋄G-←1}¨2×D[⍒|-/↑D]⋄V

ノードは単一の大文字でなければならないので、最大26ノードをサポートします。交差した線を処理でき、各ノードはディスプレイが処理するのと同じ数の接続を持つことができます。

出力例:

A,B C,A C,D

      +-A--+                                              
      |    |                                              
      +-B  |                                              
           |                                              
        C+-+                                              
         |                                                
        D+   

A,B C,A B,A A,D A,E F,G C,G

          +--A-+-+-+                                           
          |    | | |                                           
          |  B-+ | |                                           
          |      | |                                           
        +-+--C   | |                                           
        |        | |                                           
        |    D---+ |                                           
        |          |                                           
        |    E-----+                                           
        |                                                      
        |   +F                                                 
        |   |                                                  
        +---+G                                                 


 T,H E,Q U,I C,K B,R O,W N,F O,X J,U M,P S,O V,E R,T H,E L,A Z,Y D,O G,S

               +---+----------T                                                 
               |   |                                                            
               |   +-------+--H                                                 
               |           |                                                    
               |           +--E---------+-------+                               
               |                        |       |                               
               |              Q---------+       |                               
               |                                |                               
               |     +--------U---------------+ |                               
               |     |                        | |                               
               |     +--------I               | |                               
               |                              | |                               
               |              C-------+       | |                               
               |                      |       | |                               
               |              K-------+       | |                               
               |                              | |                               
               |       +------B               | |                               
               |       |                      | |                               
               +-------+------R               | |                               
                                              | |                               
             +----------------O-----+-----+-+ | |                               
             |                      |     | | | |                               
             |                W-----+     | | | |                               
             |                            | | | |                               
             |           +----N           | | | |                               
             |           |                | | | |                               
             |           +----F           | | | |                               
             |                            | | | |                               
             |                X-----------+ | | |                               
             |                              | | |                               
             |                J-------------|-+ |                               
             |                              |   |                               
             |                M---+         |   |                               
             |                    |         |   |                               
             |                P---+         |   |                               
             |                              |   |                               
             |   +------------S-------------+   |                               
             |   |                              |                               
             |   |            V-----------------+                               
             |   |                                                              
             |   |            L-+                                               
             |   |              |                                               
             |   |            A-+                                               
             |   |                                                              
             |   |           +Z                                                 
             |   |           |                                                  
             |   |           +Y                                                 
             |   |                                                              
             +---|------------D                                                 
                 |                                                              
                 +------------G                                                 

それは大体私が考えていた(そしてまだそうかもしれない)ことです。それを処理する明らかな短い方法のみ。
Peter Taylor

3
人々がAPLをどのように書くかは私には謎です。+1
Soham Chowdhury 2013年

7

Python、195文字、スコア= 999-195 + 20 + 200 + 20 = 1044

R=raw_input()
V=' '.join(set(R)-set(' ,'))
S=' '*len(V)
for e in R.split():x,y=sorted(map(V.index,e[::2]));print S[:x]+'+'+'-'*(y-x-1)+'+'+S[y+1:];S=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:];print S
print V

各エッジは行を取得します。Sは、グラフを作成するときに維持する必要のある垂直接続を持つ文字列です。

以下に入出力のサンプルを示します。

A,B C,A B,A A,D A,E F,G C,G
+---+        
|   |        
+-+ |        
| | |        
+---+        
| | |        
+-------+    
| | |   |    
+-----+ |    
| | | | |    
| | | | | +-+
| | | | | | |
| +-------+ |
| | | | | | |
A C B E D G F

マリナスから盗まれた:

T,H E,Q U,I C,K B,R O,W N,F O,X J,U M,P S,O V,E R,T H,E L,A Z,Y D,O G,S
                +-----------------------+          
                |                       |          
      +-----------------------+         |          
      |         |             |         |          
      |       +-----------------------+ |          
      |       | |             |       | |          
  +---------------+           |       | |          
  |   |       | | |           |       | |          
  | +-------------------------------+ | |          
  | | |       | | |           |     | | |          
  | | |       | | |       +---------------+        
  | | |       | | |       |   |     | | | |        
  | | |     +---------------+ |     | | | |        
  | | |     | | | |       | | |     | | | |        
  | | |     | | | |       +---------------------+  
  | | |     | | | |       | | |     | | | |     |  
  | | |     | | | | +-----------------+ | |     |  
  | | |     | | | | |     | | |     | | | |     |  
  | | |     | | | | | +---------+   | | | |     |  
  | | |     | | | | | |   | | | |   | | | |     |  
  | | |     | | | | | |   +-------+ | | | |     |  
  | | |     | | | | | |   | | | | | | | | |     |  
  | | +-------------------------------------+   |  
  | | |     | | | | | |   | | | | | | | | | |   |  
  | | |     | | | | | |   | | | | | +---+ | |   |  
  | | |     | | | | | |   | | | | | | | | | |   |  
  | | +---------+ | | |   | | | | | | | | | |   |  
  | | |     | | | | | |   | | | | | | | | | |   |  
+-----------------------+ | | | | | | | | | |   |  
| | | |     | | | | | | | | | | | | | | | | |   |  
| | | |     | | | | | | | | | | | | | | | | | +---+
| | | |     | | | | | | | | | | | | | | | | | | | |
| | | | +-----------------+ | | | | | | | | | | | |
| | | | |   | | | | | | | | | | | | | | | | | | | |
| | | | | +-----------------------+ | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | |
A C B E D G F I H K J M L O N Q P S R U T W V Y X Z
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.