Створіть унікально розв’язуваний кросворд… без доказів


21

Чи можете ви уявити собі розгадування кросворду New York Times без жодних підказок? Можливо, не з усією творчістю та новими словами та фразами, що з’являються в сучасних кросвордах, але з фіксованим списком слів є надія. У цьому виклику ви створюєте сітку кросворду, в якій це теоретично можливо.

Змагання

Максимізуйте кількість білих квадратів у сітці кросвордів 15х15 білого та чорного відтінку, щоб білі квадратики могли бути однозначно заповнені літерами, щоб кожне слово внизу та внизу відображалось у міжнародному списку скребблених слів.

Роз'яснення конструкції сітки

У американських газетах кросвордні сітки зазвичай побудовані так, що кожну букву "перевіряють", тобто вона є частиною як слова "через", так і "вниз". У Великобританії та інших країнах (особливо в криптовалютах ) це не обов'язково: якщо слово "через" або "вниз" буде лише однією літерою, воно не повинно бути фактичним словом (наприклад, "А" чи "Я" "). Для цього завдання дотримуйтесь більш розслаблених правил: однобуквені слова не повинні відображатися у списку слів.

Існують різні інші традиції (в США та інших країнах), жодної з яких не потрібно дотримуватися в цьому виклику. Наприклад, слова можуть бути довжиною лише дві літери, слова дозволяється повторювати, а сітка не повинна мати (обертової) симетрії.

Це навіть можливо?

Так! Можна написати короткий сценарій, щоб переконатися, що унікальним рішенням для наступної порожньої сітки зліва є заповнена сітка праворуч:

Сітка розміром 15х15 з чотирма 15-літерними словами, схрещеними на їхній четвертій та п'ятій літерах

Можна заповнити сітку в комп'ютерно-читаному форматі таким чином:

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

Ваше рішення

Сітка вгорі має 56 білих квадратів із 225 квадратів у сітці 15х15. Це слугує базовою для цього завдання. Сітки з меншою кількістю білих квадратів також можуть бути цікавими з інших причин, ніж їх оцінка, наприклад, якщо вони задовольняють деяким з естетичних традицій, згаданих вище.

Надішліть своє рішення у тому ж форматі, що і для комп'ютера, прочитаного вище. Будь ласка, додайте код, який підтверджує наявність унікального рішення для вашої сітки.

Цінуться фрагменти коду (наприклад, для пошуку простору можливостей) та обговорення того, як ви знайшли вашу сітку.

Список слів

Міжнародний список слів Scrabble раніше був відомий як SOWPODS і тепер називається Collins Scrabble Words (CSW). Він використовується в більшості країн (крім США). Ми вважаємо за краще використовувати цей список, оскільки він містить англійські написання і, як правило, має значно багато слів, ніж американський список слів. У цьому списку є кілька видань, які незначно відрізняються. Ви можете знайти різні версії цього списку, пов’язані з Вікіпедії , в Github , в Корпусі природних мов Петра Норвіга та інших місцях, які часто ще називають "SOWPODS".

Цей виклик дуже чутливий до широкого характеру вибору списку слів, але менш до дрібних деталей. Наприклад, наведений вище приклад працює з будь-яким виданням CSW, але CHце не слово в американському списку слів Scrabble. У випадку невідповідності, ми вважаємо за краще використовувати CSW19 - найновіший випуск CSW. (Якщо ми будемо використовувати цей список, який був опублікований цього року, ми можемо очікувати, що відповіді на цей виклик залишаться дійсними довше). Ви можете запитувати цей список інтерактивно на офіційному веб-сайті пошуку слів Scrabble або завантажити його (як і попереднє видання, CSW15) з обміну стеками настільних та картонних ігор або з r / scrabble Reddit .

Tldr : авторитетний список слів для цього виклику доступний у вигляді простого текстового файлу (279 496 слів, по одному на рядок) на Біржі стекових та карткових ігор .

Подальше обговорення

Одне питання, порушене у першій відповіді та коментарі, - чому існуючі кросворди (наприклад, у NYT) не відповідають на це запитання. Зокрема, запис за найменшою кількістю чорних квадратів (і, отже, найбільшою кількістю білих квадратів) для опублікованого кросворду NYT - це вже найвідоміший запис у кросвордах. Чому ми не можемо використовувати сітку записів ? Є кілька питань:

  • Багато відповідей у ​​кросвордах NYT не відображаються у нашому списку слів. Наприклад, сітка записів включає PEPCIDв себе (фірмове найменування), APASSAGETOINDIA(чотири слова власне найменування фільму та роману, написане без пробілів) та STE(абревіатура до "Сент"). Схоже, сітка записів не вирішується словами Scrabble.

  • Просто розширення списку слів, щоб включити більше слів, не обов'язково допоможе в цьому виклику: навіть якби всі слова в сітці записів з’явились у нашому списку слів, рішення не було б унікальним без доказів. Часто можна змінювати деякі букви на кінцях відповідей, зберігаючи все слово. (Наприклад, ліворуч внизу праворуч букву можна змінити з " Dна" R.) Дійсно, це частина процесу (людського) побудови під час написання кросворду, намагаючись отримати "кращі" слова.

    Причина, що звичайні кросворди (як правило) мають унікальне рішення, полягає в тому, що підказки допомагають звузити правильні відповіді. Якщо ви просто спробуєте заповнити сітку словами, не використовуючи підказки, цілком ймовірно, що можливостей буде чи багато . Ось приклад трьох різних заповнень (використовуючи список слів для цього завдання!) Для тієї ж сітки (той, який порівняно часто використовується в NYT):

Найпоширеніша сітка кросвордів NYT, заповнена трьома різними способами словами Scrabble.

  • Ще одне питання, порушене в коментарях, - це деяка кількість невіри, що це питання є проблемою кодування . Можливо, це не відразу зрозуміло, але важко навіть знайти однозначну відповідь на цей виклик . Пошук вище базової лінії включав декілька спеціально розроблених програм пошуку, на які не було гарантовано знайти відповідь. Я особисто навіть не знаю загального способу вирішення довільної сітки, якщо ви хочете відповісти в розумні терміни. Існуючі програми кросвордів можуть допомогти, але я припускаю (можливо, неправильно), що вони насправді не здійснюють повний пошук можливостей. (Я використав таку програму для трьох бічних сіток вище; це спрацювало, тому що саме ця сітка дозволяє отримати багато рішень.)

2
Мета-повідомлення, пов’язаний із цим загальним типом питань: codegolf.meta.stackexchange.com/questions/18117/…
А. Рекс,

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.") - аналогічно тому, щоб уникнути бонусів у кодовому гольфі, я вважаю за краще виклик коду про лише одне. Це означає, що всі відповіді можна порівняти як для подібних. Це також робить його чітко об'єктивним, що допоможе відновити голосування.
трихоплакс

4
2. Виберіть єдиний список слів і наполягайте на ньому для всіх відповідей. Програма tldr згадує авторський список слів, але попередня дискусія може привести людей до думки, що вони можуть вибрати будь-який із згаданих. Це може допомогти тримати суворі вимоги біля верхньої частини посади та чітко зрозуміти, що інші деталі не є частиною конкретизації завдання. В ідеалі пропустіть що-небудь зайве для специфікації, щоб посада була короткою і негайно однозначною.
трихоплакс

2
3. Зробіть включення коду, який використовується для пошуку рішення, вимогою для правильної відповіді.
трихоплакс

3
Це такий виклик, який може отримати користь від чату для обговорення підходів. Якщо ви встановите кімнату для чату і посилаєтесь на неї з кінця специфікації, ви можете розмістити там обговорення як початкові повідомлення та згадати це у виклику для людей, які хочуть знати більше.
трихоплакс

Відповіді:


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 літер надто повільне. Натомість я намагаюся заповнити прямокутники на

  • налаштування перших двох стовпців (два трибуквені слова)
  • потім перегляньте всі 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 Ви могли б прокоментувати?
Робін Райдер

Моя відповідь також була оскаржена. 🤷
А. Рекс

1

182 білі квадрати

Чотири області 3х15, з'єднані ще парою білих квадратів.

Натхненний відповіддю Робіна Райдера , я спробував утиснути ще пару білих квадратів. Я вважаю, що це рішення є унікальним, і незабаром я опублікую відповідний код підтвердження.

Комп'ютерно-читана сітка:

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

184 з монашества можна однозначно завершити монокотом
Джонатан Аллан

... зробіть це "можливо ...", оскільки я не підтверджував, що він не буде порушувати унікальність у всьому платі!
Джонатан Аллан

Мені буде цікаво переглянути ваш код підтвердження. Всі мої спроби перевірити вашу сітку жахливо повільні.
Робін Райдер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.