มีห่วงภูเขาหรือไม่?


14

ท้าทาย

กำหนดเมทริกซ์ของจำนวนเต็มบวกพิจารณาว่ามี "วงแหวน" ของภูเขาหรือไม่ คำจำกัดความที่เป็นทางการสำหรับความท้าทายนี้คือ: ให้เมทริกซ์ของจำนวนเต็มบวกมีจำนวนเต็มบวกใด ๆnที่มีวงแหวนปิดของเซลล์ในเมทริกซ์ที่ยิ่งใหญ่กว่านี้อย่างเคร่งครัดnว่าเซลล์ทั้งหมดที่อยู่ในวงแหวนนั้นน้อยกว่าหรือเท่ากับ nไปยัง

ลองทำตัวอย่างที่เป็นจริง:

3 4 5 3
3 1 2 3
4 2 1 3
4 3 6 5

หากเราตั้งค่าnเป็น2:

1 1 1 1
1 0 0 1
1 0 0 1
1 1 1 1

อย่างที่เราเห็นได้ชัดเจนว่า1s ที่ขอบนั้นกลายเป็นวงแหวน

เรากำหนดแหวนเป็นคอลเลกชันที่ได้รับคำสั่งของเซลล์ที่เซลล์ที่อยู่ติดกันในคอลเลกชันยังอยู่ติดกัน (ขอบหรือมุม) ในตาราง นอกจากนี้แหวนจะต้องมีเซลล์อย่างน้อย 1 เซลล์ภายในเซลล์ นั่นคือการพยายามที่จะใช้เฉพาะ BFS อย่างท่วมท้นทั้งเมทริกซ์ที่ไม่รวมเซลล์ในคอลเลกชันและไม่เคยข้ามเซลล์ในคอลเลกชันต้องพลาดอย่างน้อยหนึ่งเซลล์

กรณีทดสอบจริง

4 7 6 5 8 -> 1 1 1 1 1
6 2 3 1 5 -> 1 0 0 0 1 (n = 3)
6 3 2 1 5 -> 1 0 0 0 1
7 5 7 8 6 -> 1 1 1 1 1

1 3 2 3 2
1 6 5 7 2
1 7 3 7 4
1 6 8 4 6

1 3 1
3 1 3
1 3 1

7 5 8 7 5 7 8 -> if you have n = 4, you get an interesting ridge shape around the top and right of the grid
8 4 4 2 4 2 7
6 1 8 8 7 2 7
5 4 7 2 5 3 5
5 6 5 1 6 4 5
3 2 3 2 7 4 8
4 4 6 7 7 2 5
3 2 8 2 2 2 8
2 4 8 8 6 8 8

5 7 6 8 6 8 7 -> there is an island in the outer ring (n = 4), but the island is a ring
5 3 2 4 2 4 7
6 3 7 8 5 1 5
8 2 5 2 8 2 7
8 3 8 8 8 4 7
6 1 4 1 1 2 8
5 5 5 5 7 8 7

150 170 150
170 160 170
150 170 150

กรณีทดสอบเท็จ

1 2 3 2 1 -> this is just a single mountain if you picture it graphcially
2 3 4 3 2
3 4 5 4 3
2 3 4 3 2
1 2 3 2 1

4 5 4 3 2 -> this is an off-centered mountain
5 6 5 4 3
4 5 4 3 2
3 4 3 2 1

1 1 1 1 1 -> this is four mountains, but they don't join together to form a ring
1 2 1 2 1
1 1 1 1 1
1 2 1 2 1
1 1 1 1 1

3 3 3 3 3 -> there is a ring formed by the `3`s, but the `4` in the middle is taller so it doesn't qualify as a mountain ring
3 1 1 1 3
3 1 4 1 3
3 1 1 1 3
3 3 3 3 3

3 4 4 4 3
4 4 3 4 4
3 3 3 3 4
4 4 3 4 4
3 4 4 4 3

1  2  3  4  5
6  7  8  9  10
11 12 13 14 15
16 17 18 19 20
22 23 24 25 26

กฎระเบียบ

  • ช่องโหว่มาตรฐานใช้
  • นี่คือดังนั้นคำตอบที่สั้นที่สุดเป็นไบต์ในแต่ละภาษาจะถูกประกาศให้เป็นผู้ชนะในภาษานั้น ๆ จะไม่ยอมรับคำตอบ
  • อินพุตอาจถูกนำมาเป็นรูปแบบที่สมเหตุสมผลสำหรับเมทริกซ์ของจำนวนเต็มบวก
  • เอาต์พุตอาจถูกกำหนดให้เป็นสองค่าที่สมเหตุสมผลสอดคล้องกันและแตกต่างกันซึ่งระบุ [จริง] หรือ [เท็จ]

สำหรับnกรณีทดสอบ "ความจริง" ประการที่สามคืออะไรจริง ๆ แล้วความจริง? [1,2] ?
Erik the Outgolfer

@EriktheOutgolfer วงแหวนของ 3s อยู่ติดกับมุม ใช่.
user202729

คำตอบ:


3

เยลลี่ , 38 ไบต์

Ẇ€Z$⁺Ẏµ,ZẈ>2ẠµƇµḊṖZƊ⁺FṀ<,Z.ịḊṖ$€Ɗ€ƊȦ)Ṁ

ลองออนไลน์!

เอาท์พุท1ถ้าเมทริกซ์มีช่วงภูเขาเป็นอย่างอื่น0

มันทำงานอย่างไร (ล้าสมัยเล็กน้อย)

ฉันอาจย่อรหัสให้สั้นลงได้ดังนั้นส่วนนี้อาจได้รับการแก้ไขอย่างหนัก

ลิงก์ผู้ช่วย

,Z.ịḊṖ$€Ɗ€ – Helper link. Let S be the input matrix.
,Z         – Pair S with its transpose.
        Ɗ€ – For each matrix (S and Sᵀ), Apply the previous 3 links as a monad.
  .ị       – Element at index 0.5; In Jelly, the ị atom returns the elements at
             indices floor(x) and ceil(x) for non-integer x, and therefore this
             returns the 0th and 1st elements. As Jelly is 1-indexed, this is the
             same as retrieving the first and last elements in a list.
    ḊṖ$€   – And for each list, remove the first and last elements.

ตัวอย่างเช่นให้เมทริกซ์ในรูปแบบ:

A(1,1) A(1,2) A(1,3) ... A(1,n)
A(2,1) A(2,2) A(2,3) ... A(2,n)
A(3,1) A(3,2) A(3,3) ... A(3,n)
...
A(m,1) A(m,2) A(m,3) ... A(m,n)

ส่งคืนอาร์เรย์ (ลำดับไม่สำคัญ):

A(1,2), A(1,3), ..., A(1,n-1)
A(m,2), A(m,3), ..., A(m,n-1)
A(2,1), A(3,1), ..., A(m-1,1)
A(2,n), A(3,n), ..., A(m-1,n)

เรื่องสั้นสั้นเรื่องนี้จะสร้างแถวและคอลัมน์นอกสุดโดยลบมุมออก

ลิงค์หลัก

Ẇ€Z$⁺Ẏµ,ZẈ>2ẠµƇµḊṖZƊ⁺FṀ<ÇȦ)Ṁ – Main link. Let M be the input matrix.
Ẇ€                           – For each row of M, get all its sublists.
  Z$                         – Transpose and group into a single link with the above.
    ⁺                        – Do twice. So far, we have all contiguous sub-matrices.
     Ẏ                       – Flatten by 1 level.
      µ      µƇ              – Filter-keep those that are at least 3 by 3:
       ,Z                      – Pair each sub-matrix S with Sᵀ.
         Ẉ                     – Get the length of each (no. rows, no. columns).
          >2                   – Element-wise, check if it's greater than 2.
            Ạ                  – All.
               µ          )  – Map over each sub-matrix S that's at least 3 by 3
                ḊṖ           – Remove the first and last elements.
                  ZƊ         – Zip and group the last 3 atoms as a single monad.
                    ⁺        – Do twice (generates the inner cells).
                     FṀ      – Flatten, and get the maximum.
                       <Ç    – Element-wise, check if the results of the helper
                               link are greater than those in this list.
                         Ȧ   – Any and all. 0 if it is empty, or contains a falsey
                               value when flattened, else 1.
                           Ṁ – Maximum.

2

ทำความสะอาด , 224 ... 161 ไบต์

import StdEnv,StdLib
p=prod
~ =map
^ =reverse o$
@ =transpose o~(^o^)
$l=:[h:t]|h>1=l=[1: $t]
$e=e
?m=p[p(~p(limit(iterate(@o@)(~(~(\a|a>b=2=0))m))))\\n<-m,b<-n]

ลองออนไลน์!

กำหนดฟังก์ชั่น? :: [[Int]] -> Intกลับมา0ถ้ามีแหวนและ1อื่น ๆ

ทำงานโดยเปลี่ยนเมทริกซ์เป็น2s สำหรับภูเขาและ0s สำหรับหุบเขาแล้วท่วมด้วย1s จนกว่าผลลัพธ์จะหยุดการเปลี่ยนแปลง หาก0ยังคงมีอยู่สำหรับความสูงของภูเขาใด ๆ 0ของผลิตภัณฑ์ที่จะเป็น


1

JavaScript (Node.js) , 302 ไบต์

a=>a.some((b,i)=>b.some((n,j)=>(Q=(W=(i,j,f)=>[a.map((b,I)=>b.map((t,J)=>I==i&J==j)),...a+0].reduce(A=>A.map((b,I)=>b.map((t,J)=>f(I)(J)&&(A[I-1]||b)[J]|(A[I+1]||b)[J]|b[J-1]|b[J+1]|t))))(i,j,I=>J=>a[I][J]<=n)).some((b,i)=>b.some((d,j)=>d&&!i|!j|!Q[i+1]|b[j+1]==b.b))<!/0/.test(W(0,0,I=>J=>!Q[I][J]))))

ลองออนไลน์!

ตรวจสอบว่าการไหลจากจุดหนึ่งไปถึงขอบไม่ได้หรือไม่ในขณะที่เส้นขอบสามารถเดินไปทุกจุดได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.