สร้างคำไขว้ที่ไม่ซ้ำกันที่แก้ไขได้ ... โดยไม่ต้องมีเงื่อนงำ


21

คุณลองนึกภาพการไขปริศนาอักษรไขว้ New York Times โดยไม่มีเบาะแสใด ๆ อาจจะไม่ได้กับความคิดสร้างสรรค์และคำและวลีใหม่ทั้งหมดที่ปรากฏในปริศนาอักษรไขว้ที่ทันสมัย ​​แต่มีรายการคำคงที่มีความหวังบางอย่าง ในความท้าทายนี้คุณสร้างตารางตัวต่อไขว้ซึ่งเป็นไปได้ในทางทฤษฎี

ความท้าทาย

เพิ่มจำนวนสี่เหลี่ยมสีขาวให้ใหญ่ที่สุดในตารางตัวต่อปริศนาไขว้ขนาด 15x15 สีขาวและสีดำเพื่อให้สี่เหลี่ยมสีขาวนั้นเต็มไปด้วยตัวอักษรที่ไม่ซ้ำกัน

ชี้แจงการก่อสร้างตาราง

ในหนังสือพิมพ์ของสหรัฐอเมริกากริดไขว้มักจะถูกสร้างขึ้นเพื่อให้ตัวอักษรทุกตัวมีการ "ตรวจสอบ" ซึ่งหมายความว่ามันเป็นส่วนหนึ่งของทั้งคำ "ข้าม" และคำ "ลง" ในสหราชอาณาจักรและที่อื่น ๆ (โดยเฉพาะในปริศนาอักษรไขว้ที่คลุมเครือ ) กรณีนี้ไม่จำเป็นว่า: หากคำว่า "ข้าม" หรือ "ลง" จะเป็นตัวอักษรเพียงตัวเดียวก็ไม่จำเป็นต้องเป็นคำที่แท้จริง (เช่น "A" หรือ "ฉัน" ") สำหรับความท้าทายนี้ให้ปฏิบัติตามกฎที่ผ่อนคลายมากขึ้น: คำตัวอักษรเดียวไม่จำเป็นต้องปรากฏในรายการคำ

มีประเพณีอื่น ๆ อีกมากมาย (ในสหรัฐอเมริกาและที่อื่น ๆ ) ซึ่งไม่จำเป็นต้องปฏิบัติตามในการท้าทายนี้ ตัวอย่างเช่นคำอาจมีความยาวเพียงสองตัวอักษรคำได้รับอนุญาตให้ทำซ้ำและตารางไม่จำเป็นต้องมีความสมมาตร (การหมุน)

เป็นไปได้ไหม

ใช่ หนึ่งสามารถเขียนสคริปต์สั้น ๆ เพื่อตรวจสอบว่าโซลูชั่นที่ไม่ซ้ำกันไปยังตารางว่างเปล่าต่อไปนี้ทางด้านซ้ายเป็นตารางที่เต็มไปทางด้านขวา:

ตารางขนาด 15x15 ที่มีตัวอักษร 15 ตัวสี่คำตัดกันที่ตัวอักษรที่สี่และที่ห้า

หนึ่งสามารถแสดงกริดที่เต็มไปในรูปแบบที่คอมพิวเตอร์สามารถอ่านได้ดังนี้:

###CH##########
###YE##########
###AM##########
CYANOCOBALAMINE
HEMOCHROMATOSES
###CH##########
###OR##########
###BO##########
###AM##########
###LA##########
###AT##########
###MO##########
###IS##########
###NE##########
###ES##########

ทางออกของคุณ

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

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

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

รายการคำ

รายการคำศัพท์นานาชาติ Scrabble เป็นที่รู้จักกันในชื่อ SOWPODS และปัจจุบันเรียกว่าCollins Scrabble Words (CSW) มันถูกใช้ในประเทศส่วนใหญ่ (ยกเว้นสหรัฐอเมริกาโดยเฉพาะ) เราชอบที่จะใช้รายการนี้เพราะมันมีการสะกดแบบอังกฤษและโดยทั่วไปมีคำจำนวนมากกว่ารายการคำอเมริกัน มีหลายรุ่นของรายการนี้ซึ่งแตกต่างกันเล็กน้อย คุณสามารถค้นหารุ่นต่าง ๆ ของรายการนี้ที่เชื่อมโยงจาก WikipediaบนGithubในคลังภาษาธรรมชาติของ Peter Norvigและที่อื่น ๆ มักจะเรียกว่า "SOWPODS"

ความท้าทายนี้มีความไวสูงต่อลักษณะทั่วไปของการเลือกรายการคำ แต่น้อยกว่านั้นสำหรับรายละเอียดที่เล็กกว่า ตัวอย่างเช่นตัวอย่างพื้นฐานด้านบนใช้ได้กับ CSW รุ่นใดก็ได้ แต่CHไม่ใช่คำในรายการคำศัพท์ American Scrabble ในกรณีที่มีความคลาดเคลื่อนเราต้องการใช้ CSW19 ซึ่งเป็น CSW รุ่นล่าสุด (หากเราใช้รายการนี้ซึ่งเปิดตัวในปีนี้เราสามารถคาดหวังคำตอบสำหรับความท้าทายนี้ที่จะใช้งานได้อีกต่อไป) คุณอาจจะสอบถามรายชื่อนี้ได้โต้ตอบอย่างเป็นทางการข่วนค้นหาคำไซต์หรือดาวน์โหลดได้ (เช่นเดียวกับรุ่นก่อนหน้านี้ CSW15) จากคณะกรรมการและบัตรเกมส์ Stack แลกเปลี่ยนหรือReddit ของ R

TLDR : รายการคำสิทธิ์สำหรับความท้าทายนี้สามารถใช้ได้เป็นไฟล์ข้อความธรรมดา (279,496 คำต่อหนึ่งบรรทัด) มากกว่าในคณะกรรมการและบัตรเกมส์ Stack แลกเปลี่ยน

การอภิปรายเพิ่มเติม

ปัญหาหนึ่งที่เกิดขึ้นในคำตอบก่อนหน้านี้และแสดงความคิดเห็นคือเหตุผลที่มีปริศนาอักษรไขว้ที่มีอยู่ (เช่นใน NYT) ไม่ตอบคำถามนี้ โดยเฉพาะการบันทึกจำนวนสแควร์สีดำจำนวนน้อยที่สุด (และสแควร์สสีขาวจำนวนมากที่สุด) สำหรับการไขว้ NYT ที่เผยแพร่นั้นเป็นเร็กคอร์ดที่โด่งดังที่สุดในไขว้ ทำไมเราไม่สามารถใช้บันทึกตาราง ? มีปัญหาเล็กน้อย:

  • คำตอบหลายคำในปริศนาอักษรไขว้ NYT ไม่ปรากฏในรายการคำศัพท์ของเรา ตัวอย่างเช่นตารางบันทึกรวมถึงPEPCID(ชื่อแบรนด์), APASSAGETOINDIA(ชื่อที่เหมาะสมสี่คำสำหรับภาพยนตร์และนวนิยายที่เขียนโดยไม่มีช่องว่าง) และSTE(ตัวย่อสำหรับ "Sainte") ปรากฏว่าตารางบันทึกไม่สามารถแก้ไขได้ด้วยคำ Scrabble

  • การขยายรายการคำศัพท์ให้ครอบคลุมคำอื่น ๆ ไม่จำเป็นต้องช่วยในความท้าทายนี้: แม้ว่าคำทั้งหมดในตารางบันทึกปรากฏในรายการคำศัพท์ของเราการแก้ปัญหาก็จะไม่ซ้ำกันหากไม่มีเงื่อนงำ มักจะเป็นไปได้ที่จะเปลี่ยนตัวอักษรบางตัวที่ส่วนท้ายของคำตอบในขณะที่รักษาทุกคำ (ตัวอย่างเช่นตัวอักษรล่างขวาสุดสามารถเปลี่ยนจาก a Dเป็นR.) อันที่จริงนี่เป็นส่วนหนึ่งของกระบวนการก่อสร้าง (คน) เมื่อเขียนคำไขว้พยายามที่จะได้คำว่า "ดีกว่า"

    สาเหตุของปริศนาอักษรไขว้ธรรมดา (ปกติ) มีทางออกที่ไม่เหมือนใครคือเบาะแสช่วย จำกัด คำตอบที่ถูก ถ้าคุณเพียงแค่พยายามที่จะกรอกตารางด้วยคำพูดได้โดยไม่ต้องใช้ปมก็มีแนวโน้มว่ามีอย่างใดอย่างหนึ่งจะไม่มีความเป็นไปได้หรือหลายความเป็นไปได้ นี่คือตัวอย่างของการเติมที่แตกต่างกันสามแบบ (ใช้รายการคำสำหรับความท้าทายนี้!) สำหรับกริดเดียวกัน (อันที่ค่อนข้างใช้บ่อยใน NYT):

ตารางไขว้ NYT ที่พบมากที่สุดซึ่งเติมด้วยสามวิธีที่แตกต่างกันด้วยคำ Scrabble

  • อีกประเด็นในการแสดงความคิดเห็นเป็นจำนวนไม่เชื่อบางอย่างที่คำถามนี้เป็นความท้าทายการเข้ารหัส บางทีมันอาจจะไม่ชัดเจนในทันที แต่มันก็ยากที่จะหาคำตอบที่ถูกต้องสำหรับความท้าทายนี้ การค้นหาพื้นฐานข้างต้นเกี่ยวข้องกับโปรแกรมค้นหาหลายรายการที่ออกแบบมาเป็นพิเศษซึ่งไม่รับประกันว่าจะได้คำตอบ ฉันไม่รู้ด้วยซ้ำถึงวิธีทั่วไปในการแก้ไขกริดโดยพลการหากคุณต้องการคำตอบในเวลาที่เหมาะสม โปรแกรมสร้างคำไขว้ที่มีอยู่สามารถช่วยได้ แต่ฉันคิดว่า (อาจไม่ถูกต้อง) ว่าพวกเขาไม่ได้ทำการค้นหาความเป็นไปได้ทั้งหมด (ฉันใช้โปรแกรมดังกล่าวสำหรับกริดแบบเคียงข้างกันสามอันด้านบนสิ่งนี้ใช้งานได้เนื่องจากกริดเฉพาะนั้นอนุญาตให้ใช้กับโซลูชันจำนวนมาก)

2
โพสต์ Meta ที่เกี่ยวข้องกับคำถามทั่วไปประเภทนี้: codegolf.meta.stackexchange.com/questions/18117/ …
A. Rex

3
1. ดรอปตัวเลือกสุนทรียศาสตร์ (" Grids with fewer white squares may also be interesting for reasons other than their score, for example if they satisfy some of the aesthetic traditions mentioned above.") - คล้ายกับการหลีกเลี่ยงโบนัสในการตีกอล์ฟฉันต้องการความท้าทายเกี่ยวกับรหัส ซึ่งหมายความว่าคำตอบทั้งหมดสามารถเปรียบเทียบได้เช่นกัน นอกจากนี้ยังทำให้มันชัดเจนวัตถุประสงค์ซึ่งจะช่วยในการเปิดการลงคะแนนอีกครั้ง
trichoplax

4
2. เลือกรายการคำเดียวและยืนยันทุกคำตอบ tldr กล่าวถึงรายการคำที่ใช้เขียน แต่การอภิปรายล่วงหน้าอาจทำให้คนคิดว่าพวกเขาสามารถเลือกสิ่งที่กล่าวถึง อาจช่วยรักษาข้อกำหนดที่เข้มงวดใกล้กับส่วนบนของโพสต์และทำให้ชัดเจนว่ารายละเอียดอื่น ๆ ไม่ได้เป็นส่วนหนึ่งของข้อกำหนดของความท้าทาย จะเป็นการดีถ้าไม่ใช้ฟุ่มเฟือยกับสเป็คเพื่อให้โพสต์สั้นและไม่น่าสงสัยในทันที
trichoplax

2
3. ทำการรวมรหัสที่ใช้ในการค้นหาโซลูชันเป็นข้อกำหนดสำหรับคำตอบที่ถูกต้อง
trichoplax

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

คำตอบ:


9

180 สี่เหลี่ยมสีขาว

กริดเปล่า วิธีการแก้

กลยุทธ์ของฉันคือหาสี่เหลี่ยมเล็ก ๆ ที่ไม่มีสี่เหลี่ยมจัตุรัสสีดำเพื่อให้สามารถเติมได้อย่างมีเอกลักษณ์ 2×kรูปสี่เหลี่ยมผืนผ้าทั้งหมดมีวิธีแก้ไขปัญหาหลายอย่าง สำหรับ3×kรูปสี่เหลี่ยมมีโซลูชั่นที่หลากหลายสำหรับkระหว่าง 3 และ 14 k=15แต่มีว่าวิธีการแก้ปัญหาหนึ่งสำหรับ

จากนั้นฉันก็ใส่สี่เหลี่ยม 4 อันในตาราง ซึ่งหมายความว่าแต่ละคำจะปรากฏขึ้น 4 ครั้งในการแก้ปัญหาซึ่งมักจะขมวดคิ้วในการสร้างคำไขว้ แต่ตกลงสำหรับความท้าทายนี้ ในทางกลับกันโซลูชันนี้มีทั้งซ้าย / ขวาและบน / ล่างสมมาตร!

ตารางที่คอมพิวเตอร์อ่านได้:

HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES

นี่คือรหัส R ที่ฉันใช้เพื่อค้นหาวิธีแก้ปัญหาทั้งหมดสำหรับขนาดกริดที่กำหนด การวนคำที่มีทั้งหมด 15 คำออกตัวช้าเกินไป แต่ฉันลองกรอกสี่เหลี่ยมด้วย

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

ตัวอย่างเช่นสำหรับการแก้ปัญหาในที่สุดรหัสใส่ครั้งแรกในHOPและEVOเสร็จสมบูรณ์แล้วลงHETERNORMATIVE, OVEROPINIONATEDและPOSSESSEDNESSESและในที่สุดก็มีการยืนยันทุกคำ 3 ตัวอักษร ( HOP, EVO,TES , ERS, ROE, OPS, NIS, ONE, RID, MON, ANE, TAS, ITS, VEE, EDS)

รหัส R

library(fastmatch)
f = "scrabble-wordlist.txt"
d = read.table(f, skip=2, as.is=T, na.strings=NULL)

d$l = apply(d, 2, nchar)
d3 = d[d$l==3, 1]

sp = function(s) strsplit(s, "")[[1]]
cm = function(v) paste0(v, collapse="")
d3s = sapply(d3, sp)

f3 = function(l){
  m = matrix("", 3, l)

  md = sapply(d[d$l == l, 1], sp)
  nf = 0

  a1 = seq(1, 3*l, by=3); a2 = a1 + 1; a3 = a1 + 2

  for(i in 1:ncol(d3s)){
    m[, 1] = d3s[, i]

    id1 = as.matrix(md[, md[1, ] == m[1, 1]])
    id2 = as.matrix(md[, md[1, ] == m[2, 1]])
    id3 = as.matrix(md[, md[1, ] == m[3, 1]])

    if(any(ncol(id1) == 0, ncol(id2) == 0, ncol(id3) == 0)) next

    for(j in 1:ncol(d3s)){
      m[, 2] = d3s[, j]

      jd1 = as.matrix(id1[, id1[2, ] == m[1, 2]])
      jd2 = as.matrix(id2[, id2[2, ] == m[2, 2]])
      jd3 = as.matrix(id3[, id3[2, ] == m[3, 2]])

      if(any(ncol(jd1) == 0, ncol(jd2) == 0, ncol(jd3) == 0)) next

      for(k1 in 1:ncol(jd1)){
        m[1, ] = jd1[, k1]

        for(k2 in 1:ncol(jd2)){
          m[2, ] = jd2[, k2]

          for(k3 in 1:ncol(jd3)){
            m[3, ] = jd3[, k3]

            w = paste0(m[a1], m[a2], m[a3])
            if(all(w %fin% d3)){
              nf = nf + 1
              print(m)
            }
            if(nf >= 2){
              print(c(l, nf))
              return()
            }
          }
        }
      }
    }
  }

  return(nf)
}

f3(15)เรียกว่าเป็น ใช้เวลาสองสามชั่วโมงบนคอมพิวเตอร์ส่วนตัวของฉัน


@downvoter คุณช่วยแสดงความคิดเห็นได้ไหม?
Robin Ryder

คำตอบของฉันก็ downvote 🤷
A. Rex

1

สี่เหลี่ยมสีขาว 182 อัน

พื้นที่ 3x15 สี่จุดเชื่อมต่อกันด้วยพื้นที่สีขาวสองสามแห่ง

โดยได้แรงบันดาลใจจากคำตอบของ Robin Ryderฉันพยายามที่จะบีบในอีกสองสามสีขาว ฉันเชื่อว่าโซลูชันนี้มีเอกลักษณ์และฉันจะโพสต์รหัสยืนยันในไม่ช้า

ตารางที่คอมพิวเตอร์อ่านได้:

HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
B##############
INCOMMUNICATIVE
NEUROANATOMICAL
DETERMINATENESS
###############
HETERONORMATIVE
OVEROPINIONATED
POSSESSEDNESSES
B##############
INCOMMUNICATIVE
NEUROANATOMICAL
DETERMINATENESS

184 ตั้งแต่ monot cot สามารถทำได้อย่างสมบูรณ์แบบด้วย monocot
Jonathan Allan

... ทำให้ "อาจ ... " เนื่องจากฉันไม่ได้ตรวจสอบมันจะไม่ทำลายเอกลักษณ์ในกระดาน!
Jonathan Allan

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