รับสองจากหนึ่ง


12

ดังที่เราเห็นในคำถามนี้คำแถลงเชิงตรรกะที่ซับซ้อนสามารถแสดงออกได้ในแง่ของการเชื่อมต่ออย่างง่ายของเรือกวาดทุ่นระเบิดทั่วไป อย่างไรก็ตามเรือกวาดทุ่นระเบิดทั่วไปยังคงมีความซ้ำซ้อน

เพื่อหลีกเลี่ยงความซ้ำซ้อนเหล่านี้เราได้กำหนดเกมใหม่ที่เรียกว่า "Generalized-1 Minesweeper"

Generalized-1 Minesweeper เป็นเวอร์ชั่น Minesweeper ที่เล่นบนกราฟโดยพลการ กราฟมีจุดสุดยอดสองประเภทคือ "ตัวบ่งชี้" หรือ "ค่า" ค่าสามารถเป็นได้ทั้งเปิดหรือปิด (ทุ่นระเบิดหรือทึม) อย่างไรก็ตามสถานะของมันไม่เป็นที่รู้จักของผู้เล่น ตัวบ่งชี้บอกว่าหนึ่งในเซลล์ที่อยู่ติดกันอยู่บน (เหมือง) ตัวบ่งชี้ไม่นับเป็นเหมือง

ตัวอย่างเช่นบอร์ดต่อไปนี้สำหรับเรือกวาดทุ่นระเบิด Generalized บอกเราว่าเซลล์ A และ B เป็นได้ทั้งเหมืองหรือไม่เป็นเหมือง

เกมง่ายๆ

(ในไดอะแกรมตัวบ่งชี้ถูกทำเครื่องหมายเป็นสีเทาในขณะที่ค่าเป็นสีขาว)

ซึ่งแตกต่างจากเรือกวาดทุ่นระเบิดทั่วไปที่คุณคลิกค่าที่ปิดเพื่อแสดงตัวบ่งชี้ไม่มีช่างดังกล่าวในเรือกวาดทุ่นระเบิดทั่วไป ผู้เล่นเพียงแค่กำหนดว่ารัฐของกราฟสามารถตอบสนองตัวบ่งชี้

เป้าหมายของคุณคือสร้าง2เรือกวาดทุ่นระเบิด General-1 คุณจะสร้างโครงสร้างในทั่วไป-1 เรือกวาดทุ่นระเบิดดังกล่าวว่ามี 8 เซลล์ที่เฉพาะเจาะจงสำหรับการกำหนดค่าที่เป็นไปได้ทั้งหมดของค่าได้ว่าสองเซลล์บน นี่หมายความว่ามันทำงานได้ดีเหมือน2ในเรือกวาดทุ่นระเบิดแบบดั้งเดิม เมื่อคุณเขียนวิธีการแก้ปัญหาของคุณคุณไม่ควรมีค่าเฉพาะในใจสำหรับเซลล์ค่า (ในการตอบคำถามของ H.PWiz อนุญาตให้เซลล์ค่าบางค่าสามารถอนุมานได้จากสถานะ)

เกณฑ์การให้คะแนน

คำตอบของคุณจะได้รับคะแนนตามจำนวนของจุดยอดในกราฟสุดท้ายลบ 8 (สำหรับ 8 อินพุต) โดยมีคะแนนต่ำกว่าจะดีกว่า หากคำตอบสองคำเสมอกันในเมตริกนี้ตัวแบ่งไทเบรกจะเป็นจำนวนขอบ


ขอบใด ๆ เชื่อมต่อจุดยอดตัวบ่งชี้และจุดสุดยอดค่าหรือไม่?
xnor

@xnor เพื่อเพิ่มคะแนนของพวกเขาที่พวกเขาควรจะได้ แต่ฉันไม่รู้สึกว่าฉันต้องการที่จะทำให้กฎ ขอบที่ไม่เชื่อมต่อค่ากับตัวบ่งชี้จะไม่เปลี่ยนพฤติกรรมของกราฟ
Ad Hoc Garf Hunter

เมื่อ 6 ถูกหักออกจากคะแนนอะไรคือ 6 อินพุต ไม่มีเซลล์ 8 เซลล์ใช่ไหม
xnor

@xnor ขออภัยควรเป็น 8 แก้ไขได้ในขณะนี้
Ad Hoc Garf Hunter

คุณหมายถึงอะไรโดย "โครงสร้าง ... เช่นมี 8 เซลล์เฉพาะที่การกำหนดค่าที่เป็นไปได้เพียงอย่างเดียวเท่านั้นที่มีสองเซลล์ใน" การกำหนดค่าที่เป็นไปได้เพียงอย่างเดียวควรจะมีสองเหมืองหรือไม่
dylnan

คำตอบ:


7

42 จุดยอด, 56 ขอบ

เครือข่ายเหมืองแร่

ตัวแปรแต่ละตัวเป็นจุดสุดยอดค่าและแต่ละกล่องเป็นจุดยอดตัวบ่งชี้ที่มีขอบกับตัวแปรที่อยู่ภายใน ปัจจัยการผลิตที่มีx 1 , ... , x 8 ตัวอย่างเช่นนี่คือวิธีแก้ปัญหาของเหมืองที่x 3และx 5โดยที่เหมืองจะเน้นสีเขียว

โซลูชั่นเครือข่ายเหมืองแร่

ข้อ จำกัด ในแนวนอนทำให้แน่ใจได้ว่าหนึ่งในตัวและหนึ่งตัวของนั้นมีของฉันอย่างแน่นอน ในคอลัมน์สองคอลัมน์นั้นrไม่ถือเหมือง แต่จะอยู่ในอีกหกคอลัมน์ (โปรดทราบว่าaและbไม่สามารถมีเหมืองในคอลัมน์เดียวกันได้) อินพุตxแต่ละตัวอยู่ตรงข้ามกับrในคอลัมน์ดังนั้นทั้งสองอินพุตมีเหมืองตามที่ต้องการ

สำหรับkอินพุตสิ่งนี้ใช้5k+2จุดยอด ( 3kค่าและ2k+2ตัวบ่งชี้) และ7kขอบ ที่นี่k=8อินพุตให้ 42 จุดยอดและ 56 ขอบ


3

50 จุดยอด, 89 ขอบ

ขึ้นอยู่กับตรรกะประตูจากคำตอบของ H.PWiz

  A&B      C&D      E&F      G&H
   |        |        |        |
b--1--a  d--1--c  f--1--e  h--1--g
|  |  |  |  |  |  |  |  |  |  |  |
1--?--1  1--?--1  1--?--1  1--?--1
|     |  |     |  |     |  |     |
A     B  C     D  E     F  G     H

แต่ละรายการ*เปิดเมื่ออินพุตทั้งสองนั้นเปิดอยู่ เพื่อจัดการกับกรณีของการป้อนข้อมูลเดียวเราจะใช้ค่ากลางa=A&!Bฯลฯ การเชื่อมต่อทั้งสามค่าa, bและA&Bการป้อนข้อมูลของระดับมัธยมศึกษาจากประตูช่วยให้เรามีการป้อนข้อมูลที่มีประสิทธิภาพของA|B(นี้จะช่วยประหยัดกว่าจุด!(!A&!B)):

      *              *
      |              |
   #--1--#        #--1--#
   |  |  |        |  |  |
   1--?--1        1--?--1
  |||   |||      |||   |||
  A|B   C|D      E|F   G|H

*s เหล่านี้เปิดถ้าอินพุตสองตัว (ตรงกับอินพุตดั้งเดิมทั้งสี่) เปิดอยู่ยกเว้นในกรณีของคู่ที่กล่าวถึงข้างต้นแล้ว ในขณะเดียวกันเราสามารถเชื่อมต่อ#*#โหนดกับประตูสุดท้ายได้ เราจึงมีผลลัพธ์ดังต่อไปนี้:

A&B
C&D
E&F
G&H
(A|B)&(C|D)         [4 cases]
(E|F)&(G|H)         [4 cases]
(A|B|C|D)&(E|F|G|H) [16 cases]

สิ่งเหล่านี้ครอบคลุมทั้ง 28 กรณีของสองอินพุต จากนั้นยังคงเชื่อมต่อตัวบ่งชี้สุดท้ายกับค่าทั้งเจ็ดนี้ หากเปิดอินพุตน้อยกว่าสองอินพุตจะไม่มีการเปิดใด ๆ ดังนั้นตัวบ่งชี้จะปิด หากมีมากกว่าสองอินพุตเปิดอยู่มากกว่าหนึ่งจะเปิดและตัวบ่งชี้จะปิด


อ่าฉันมีความคิดคล้าย ๆ กัน แต่จบลงด้วยการสร้างเวอร์ชั่นที่ซับซ้อนกว่านี้ เยี่ยมมาก!
justhalf

ฉันไม่เชื่อว่ามี 43 จุดยอด คุณแสดงอย่างชัดเจนถึง 42 ดังนั้นคุณกำลังบอกว่าคุณต้องการเพียงหนึ่งการเชื่อมต่อเท่านั้น?
H.PWiz

ที่จริงถ้าผมได้วาดอย่างถูกต้องกราฟที่คุณอธิบายผมคิดว่ามันช่วยให้รัฐเช่นACE, BDF, ADG...
H.PWiz

@ H.PWiz ฉันเห็นสิ่งที่คุณหมายถึง ... ฉันคิดว่าบางทีฉันสามารถแก้ไขได้ด้วยขอบพิเศษเพื่อให้การแสดงออกที่(a&b)+((a|b)&(c|d))+(c&d)+((a|b|c|d)&(e|f|g|h))+(e&f)+((e|f)&(g|h))+(g&h)==1ไม่เหมาะสมกับคุณ?
Neil

บางทีสำหรับฉันแล้วการแสดงออกนั้นดูเหมือนว่ามันจะแก้ปัญหาได้ทั้งหมด และฉันไม่รู้ว่าคุณจะเพิ่มขอบอะไรลงไปได้
บ้าง

2

197 จุดยอด, 308 ขอบ

ฉันมากับคำตอบนี้เมื่อคืน แต่ระงับการโพสต์ไว้เพราะมันเป็นคะแนนที่สูงมาก อย่างไรก็ตามเนื่องจากมันเป็นคำตอบอื่น ๆ อีกมากมายดังนั้นฉันจึงควรโพสต์ไว้

ฉันใช้การตั้งค่าต่อไปนี้กับเซลล์ค่าทั้ง 28 คู่ใน ABCDEFGH

   ?*
   |
?--1--?
|  |  |
1--?--1
|     |
A     B

?ABCDEFGHหมายถึงเซลล์ค่าไม่ได้อยู่ใน ที่นี่เมื่อ?*เป็นON , AและBมีทั้งใน มิฉะนั้นAและBอาจอยู่ในการกำหนดค่าอื่น ๆ

ฉันเชื่อมต่อทั้งหมด 28 ?*วินาทีเข้ากับเซลล์ตัวบ่งชี้เดียว ซึ่งหมายความว่ามีเพียงหนึ่งในคู่ABCDEFGHจะมีสองON ซึ่งเพียงพอที่จะบังคับใช้ว่าเซลล์เอาต์พุตทั้งสองของฉันจะเปิดอยู่


1
ทราบว่าในประตูที่คุณมีแต่ละ 4 ?s สอดคล้องกับหนึ่งใน 4 A Bของสหรัฐฯ
Ad Hoc Garf Hunter

@HeebyJeebyMan ที่น่าสนใจฉันไม่ได้พิจารณาเรื่องนั้น ฉันเพิ่งพบประตูนี้โดยโชค
H.PWiz

1

354 โหนด, 428 ขอบ

เพียงเพื่อพิสูจน์ว่าเป็นไปได้ ฉันจะปรับปรุงสิ่งนี้ในภายหลังพร้อมกับแคช

(หวังว่าจะไม่มีข้อผิดพลาดของรหัส)

ฉันพยายามเขียนโปรแกรม Mathematica ที่นี่เพื่อตรวจสอบความถูกต้องของโปรแกรม แต่มันไม่ได้ผลเพราะอาจมีตัวแปรมากเกินไป

ผลลัพธ์ถูกสร้างโดยโปรแกรมคอมพิวเตอร์: ลองออนไลน์!


ฉันใช้ประตูที่มีลักษณะเช่นนี้:


               (f)
                |
                |
               (#)
              /   \
             /     \
           (d)     (e)
          /           \
         /             \
       (#) --- (c) --- (#)
     .'                  '.
   .'                      '.
(a)                          (b)

โดยที่(#)1-indicator, (a).. (f)คือค่า

จากนั้น


c = (not a) and (not b)
d = (not a) and      b
e =      a  and (not b)
f =      a  xnor     b

อีกทั้งประตูนี้


(a) ----- (#) ----- (b)

จะช่วยให้


b = not a

. ใช้ประตูทั้งสองประเภทนี้คุณสามารถสร้างการแสดงออกใด ๆ

แน่นอนว่าอันนี้มีไว้สำหรับยืนยันว่า(a)จะต้องเป็นจริง:


(a) ----- (#)

1

81 โหนด, 108 ขอบ

การใช้ 13 โหนดและ 14 ขอบเราสร้างประตู Adder ต่อไปนี้ (C (arry) = X AND Y, S (um) = X XOR Y):

X - 1 --------------?
   | |
   - 1 - S - 1 - - 1
   | | |
   | C |
Y - 1 --------------?

ใช้สี่ Adders M1, M2, M3, M4 เพื่อเพิ่ม A + B, C + D, E + F, G + H ตามลำดับโดยมีผลลัพธ์คือ C1, C2, C3, C4 และผลรวม S1, S2, S3, S4

ใช้ Adders M5 สองตัว, M6 เพื่อเพิ่ม S1 + S2, S3 + S4 พร้อมกับ Carry C5, C6 และ Sum S5, S6

ใช้หนึ่ง Adder M7 เพื่อเพิ่ม S5 + S6 เพื่อรับ C7 และ S7

ตอนนี้เชื่อมต่อการขนส่งทั้งหมดไปยังโหนดตัวบ่งชี้เดียวดังต่อไปนี้:

C1- |
C2- |
C3- |
C4 - + - 1
C5- |
C6- |
C7- |

และบังคับให้ S7 (โมดูโล 2 ของผลรวมของ 8 ค่า) เป็น 0 โดยวงจรนี้:

S7--1? - - 1

ฉันยืนยันว่าวงจรนี้บังคับค่าสองค่าABCDEFGHให้เป็น ON เนื่องจากมันสามารถเป็นเลขคู่ได้ (ตั้งแต่ S7 เป็น 0) และไม่มีค่า ON มากกว่า 3 ค่า (เนื่องจาก C1-C7 เพียงอันเดียวเปิดอยู่)

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