Lưới tam giác: Đa giác được kết nối đơn giản


9

Trong khi chúng tôi đang ở trên một lưới tam giác đá , tôi muốn chỉ ra rằng có một tương đương với polyominoes trên một lưới tam giác. Họ được gọi là polyiamonds , và họ là hình dạng hình thành bằng cách dán tam giác đều nhau dọc theo các cạnh của họ. Trong thử thách này, bạn sẽ quyết định tập hợp con nào của lưới tam giác là đa giác và liệu chúng có lỗ hổng nào không. Bởi vì chỉ mất 9 hình tam giác để tạo một hình đa giác có lỗ trong đó, mã của bạn cần phải càng ngắn càng tốt.

Cái lưới sắt

Chúng tôi sẽ sử dụng bố trí lưới hình tam giác của Martin cho đầu vào:

một lưới tam giác

Hãy chú ý đến thực tế rằng các tâm của các hình tam giác tạo thành một lưới hình chữ nhật gần đúng và hình tam giác trên cùng bên trái "điểm" hướng lên. Chúng ta có thể mô tả một tập hợp con của lưới này, sau đó, bằng cách đưa ra một "bản đồ sao" hình chữ nhật cho biết hình tam giác nào được bao gồm và không được bao gồm. Ví dụ, bản đồ này:

** **
*****

tương ứng với các đa giác nhỏ nhất chứa một lỗ:

9-ihua có lỗ

Hố

Một polyiamond trong đó có một lỗ như ví dụ trên (một khu vực không phải là một phần của polyiamond, được bao quanh trên tất cả các bên theo vùng đó ) không phải là, nói topology, chỉ đơn giản là kết nối .

Các thách thức

Viết một hàm hoặc chương trình lấy đầu vào là "bản đồ sao" như được mô tả ở trên và đưa ra một sự thật khi và chỉ khi tập hợp con được chỉ định của lưới tam giác là một đa giác được kết nối đơn giản .

Thêm ví dụ

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

tương ứng với đa giác

13-ihua không có lỗ

được kết nối đơn giản.


*   *
** **
 ***

tương ứng với đa giác

9-ihua không có lỗ

được kết nối đơn giản.


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

tương ứng với phi- poli

13 hình tam giác không có gì thú vị

mà sẽ không được kết nối đơn giản ngay cả khi nó một polyihua.

Thông số đầu vào

  • Đầu vào sẽ chỉ bao gồm các dấu sao, dấu cách và nguồn cấp dữ liệu.
  • Ký tự đầu tiên của đầu vào sẽ luôn là dấu cách hoặc dấu hoa thị (tương ứng với hình tam giác hướng lên ở góc trên cùng bên trái của lưới).
  • Sẽ luôn có ít nhất một dấu sao trên dòng đầu tiên và cuối cùng.
  • KHÔNG đảm bảo rằng các dòng sau dòng đầu tiên sẽ không trống. Hai nguồn cấp dữ liệu liên tiếp có thể xuất hiện trong một đầu vào hợp pháp.
  • Độ dài dòng không cần phải giống nhau.

Điều kiện chiến thắng

Đây là , vì vậy câu trả lời ngắn nhất bằng byte thắng.

Các trường hợp thử nghiệm

Bản đồ thật:

1) *

2) *
   *

3) **

4) *** ***
   *******

5) *   *
   ** **
    ***

6) *
   **
    *

7)    **
     ***
   ****

8) ****
   **   *
    *****

9) ***********
   **    **  **
    ****  **  **
              **
   ************

Bản đồ giả:

1) *
   *
   *

2) * *

3) *
    *

4)  **
   **

5) ***

   ***

6) ** **
   *****

7) **  **
   *** **
    ****

8)  *
    *

9) *****
   **   *
    *****

1
câu hỏi hay Nếu lưới hình tam giác sẽ trở thành một vật, tôi có thể đề nghị rằng chúng được đại diện như là ví dụ AV VA\nVAVAVthay vì ** **\n*****nó giúp con người dễ hình dung hơn. Tôi đã thực hiện chỉnh sửa một trong các sơ đồ ASCII của Martin.
Cấp sông St

Tôi không đặc biệt quan tâm đến khả năng đọc của con người, không. Tôi muốn làm bất cứ điều gì sẽ dễ dàng hơn cho một chương trình để đọc trong khi vẫn còn nhỏ.
quintopia

Vì vậy, về cơ bản, sai iff có một phần chỉ "kết nối" bởi các góc?
Michael Klein

1
Hoặc nếu có những phần không được kết nối. Martin đặt nó theo cách này: Đúng là hình và mặt đất đều được kết nối dọc theo các cạnh, sao cho 2 lần lấp đầy là đủ để tô màu lại mặt phẳng.
quintopia

Câu trả lời:


4

Ốc , 95 byte

F&
lr|=((ul.)2 ,l~a~)d|!((ul.)2 ,l~a~)u}\*}+l\ ,~a~|{\ (lr|=((ul.)2 ,l~a~)d|!((ul.)2 ,l~a~)u}+~

Điều này thực sự bị trùng lặp, vì tôi đã không triển khai các macro hoặc bất kỳ loại tham chiếu ngược nào. Những gì nó làm là để kiểm tra xem đối với mỗi ngôi sao, có tồn tại một đường dẫn đến ngôi sao ngoài cùng bên trái trên dòng trên cùng; và đối với mỗi không gian, có một đường dẫn đến một cạnh của lưới.

F&                         ,, option F: pad lines with spaces to the length of the longest
                           ,, option &: print 1 iff match succeeds from every cell
lr                         ,, direction left or right, or
      | =((ul.)2 ,l~a~) d  ,, direction down, if we are an even number of orthogonal moves from the top left
      | !((ul.)2 ,l~a~) u  ,, or, direction up if we are odd number of moves from the top left
    }  \*                  ,, literal '*'
}+                         ,, 1 or more times
l\ ,~a~                    ,, check that we are on the leftmost * in the top line

|                          ,, the part before this is for starting on '*'; part after for starting on ' '

{ \                        ,, literal ' '
    (   lr                 ,, direction left or right, or
      | =((ul.)2 ,l~a~) d  ,, same drill as before...
      | !((ul.)2 ,l~a~) u 
}+                         ,, 1 or more times
~                          ,, end on an out of bounds cell

Tôi không hiểu làm thế nào nó hoạt động, nhưng nó hoàn toàn hoạt động.
quintopia

3

CJam, 101 98 byte

qN/_z,f{' e]}{S2*f+W%z}4*:eeee::f+:~{_(aL{+_{_2,.+1$2,.-@_:+1&!2*(a.+}%2${a1$&},\;@1$-@@}h;\;-}2*!

Hãy thử trực tuyến.

Cuối cùng tôi đã vượt qua nỗi sợ hãi của mình khi thực hiện một trận lụt ở CJam. Nó xấu như tôi mong đợi, và nó chắc chắn có thể được chơi gôn.

Ý tưởng chung là thực hiện hai lần lấp lũ (thực sự được thực hiện dưới dạng loại bỏ khỏi danh sách các ô không mong muốn). Vượt qua đầu tiên sẽ loại bỏ tất cả các không gian có thể tiếp cận từ cạnh. Vượt qua thứ hai sau đó sẽ chọn đầu tiên *theo thứ tự đọc và loại bỏ tất cả các hình tam giác có thể đạt được từ đó. Nếu và chỉ khi danh sách kết quả trống, đa giác được kết nối đơn giản:

  • Nếu polyihua có một lỗ, thì vùng lũ đầu tiên không thể tiếp cận và loại bỏ lỗ đó.
  • Nếu đầu vào bao gồm một số đa giác bị ngắt kết nối, vùng lũ thứ hai không thể tiếp cận và loại bỏ tất cả chúng.
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.