ASCII - trực quan hóa một biểu đồ


8

Nhiệm vụ của bạn, nếu bạn chọn chấp nhận nó, là nhập một loạt các cặp điểm tạo thành một biểu đồ, như thế này:

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

Sau đó, bạn phải xuất ra một trực quan hóa ASCII của biểu đồ.

Ví dụ: A,B C,A C,Dcó thể là:

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

Chỉnh sửa: Theo nhận xét, đây là một số hạn chế đầu vào:

  • mỗi nút có tối đa 5 kết nối (+20 nếu bạn có thể xử lý nhiều hơn)
  • đồ thị là phẳng, tức là không có đường chéo nào (+200 nếu bạn có thể xử lý ngay cả một chéo!)
  • có tối đa 16 nút (+20 nếu bạn có thể xử lý nhiều hơn)

Điểm của bạn là 999 - (độ dài mã của bạn) + (bất kỳ phần thưởng nào) .

Bắt đầu động cơ của bạn :)


code-golf, code-challengehay cái gì? Và tiêu chí / tiêu chí chiến thắng là gì?
Paul R

code-golf/ 10char
Soham Chowdhury

1
Là đồ thị được đảm bảo là phẳng? Là đại diện ASCII cần phải là phẳng? (Nếu vậy, đây là một nhiệm vụ khá khó khăn).
Peter Taylor

1
@SohamChowdhury: Planar có nghĩa là nó có thể được vẽ mà không cần vượt qua các đường.
bến tàu

2
Đây là một thử thách cực kỳ rộng và khó vào lúc này. Các công cụ như graphviz và search.cpan.org/~tels/Devel-Graph-0.12/lib/Devel/Graph.pm đã được thiết kế cho loại công việc này. Tôi cũng đã thử làm một cái gì đó tương tự trong quá khứ nhưng không thành công. Các quy tắc bổ sung rằng đồ thị là phẳng và các nút có tối đa 4 kết nối sẽ làm cho điều này trở thành một thách thức golf mã hợp lý hơn nhiều.
shiona

Câu trả lời:


7

Python 3, 168 ký tự, Điểm = 999- 168 + 240 = 1071

Chỉ cần rút ngắn Keith Randalls câu trả lời tuyệt vời .

  1. Trong Python 3, printlà một hàm và do đó có thể được viết tắt bởi p=print. Lưu 3 * (4 - 1) - 8 = 1nhân vật.

  2. Trong Python 3, inputđược sử dụng thay vì raw_input, lưu 4 ký tự.

  3. Thay vì ' '*len(V)bạn có thể sử dụng ' '*80(hoặc một cái gì đó tương tự). Điều này dẫn đến số lượng không gian kéo dài tăng lên, nhưng ai quan tâm ... nếu nó cứu được 4 người khác!

  4. Bây giờ nó trở nên thú vị: Thay vì chuỗi, sử dụng danh sách! Điều này làm cho việc cập nhật Sdễ dàng hơn nhiều, nhưng làm phức tạp việc in ấn. Tôi sẽ gọi danh sách Tđể tôi không nhầm lẫn nó với chuỗi Stừ bến.

  5. Hãy bắt đầu bằng cách biến các đỉnh thành một danh sách, không phải là một chuỗi tách biệt không gian, giúp lưu 4 ký tự. Dòng đầu ra Tphải trở thành một danh sách ( T=[' ']*40), có giá 2 ký tự.

  6. Việc in dòng hiện tại T dài hơn 5 ký tự: Tôi cần dấu ngoặc để nối chính xác danh sách các chuỗi, tôi cần thêm hai -ký tự (vì x và y chỉ lớn bằng một nửa bây giờ) và tôi cần một chức năng *để thực hiện printchức năng các phần tử của danh sách dưới dạng các đối số riêng biệt và in chúng ra tách biệt bởi khoảng trắng (và không phải là một danh sách!). (Bước này thật khó .)

  7. Dòng hiện tại có thể được cập nhật với một đơn giản T[x]=T[y]="|"thay vì S=S[:x]+'|'+S[x+1:y]+'|'+S[y+1:], tiết kiệm 19 ký tự.

  8. Để in Tlại và để in các khoảng cách cuối cùng của các đỉnh, cần có các dấu sao, có giá 2 ký tự.

  9. Và ngay khi tôi đang gõ cái này, tôi thấy rằng không có hại gì khi có một đỉnh vô hình không liên kết ( ' '). Điều này cho phép tạo ra các đỉnh ngắn hơn nhiều, tiết kiệm thêm 4 ký tự.

Hoàn toàn, tiết kiệm là 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)

Ví dụ cho thấy ảnh hưởng của 9.: Đầu vào A,B A,Cdẫn đến đầu ra

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

1
Ban đầu tôi có S và T là danh sách, nhưng trong python 2, bạn cần ''.join()rác khiến nó dài hơn. Tôi không biết *Tthứ đó tồn tại trong python3. Sân gôn tiếp theo ...
Keith Randall

19

APL ( 171 166 162 ký tự, tất cả tiền thưởng: 999 - 171 166 162 + 20 + 20 + 200 = 1068 1073 1077)

Đây là chương trình APL golf dài nhất tôi đã viết cho đến nay. Điều này có thể hơi gian lận, nhưng không có gì trong câu hỏi thực sự không phù hợp với điều này. Những gì tôi đang làm là đặt tất cả các nút trên một đường thẳng đứng và vẽ biểu đồ dưới dạng sơ đồ cung. Nó rõ ràng vẫn là một biểu đồ mặc dù.

Tôi vẫn mất vài giờ.

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

Các nút phải là chữ cái in hoa đơn, vì vậy nó hỗ trợ tối đa 26 nút. Nó có thể xử lý các đường chéo và mỗi nút có thể có nhiều kết nối như màn hình sẽ xử lý.

Ví dụ đầu ra:

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                                                 

Đó là những gì tôi đã nghĩ làm (và có thể làm). Chỉ có cách xử lý ngắn rõ ràng.
Peter Taylor

3
Đó là một bí ẩn đối với tôi cách mọi người viết APL. +1
Soham Chowdhury

7

Python, 195 ký tự, điểm = 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

Mỗi cạnh được một hàng. S là một chuỗi có các kết nối dọc mà chúng ta cần giữ khi chúng ta xây dựng biểu đồ.

Dưới đây là một số mẫu đầu vào / đầu ra:

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

và bị đánh cắp từ bến tàu:

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
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.