Crea un cruciverba unicamente risolvibile ... senza indizi


21

Riesci a immaginare di risolvere il cruciverba del New York Times senza alcun indizio? Forse non con tutta la creatività e le nuove parole e frasi che compaiono nelle parole crociate moderne, ma con un elenco di parole fisso c'è qualche speranza. In questa sfida, crei una griglia di cruciverba in cui ciò è teoricamente possibile.

La sfida

Massimizza il numero di quadrati bianchi in una griglia di cruciverba 15x15 ombreggiata in bianco e nero, in modo che i quadrati bianchi possano essere in modo univoco riempiti in di lettere in modo tale che tutte le parole attraverso e verso il basso compaiano nell'elenco internazionale delle parole Scrabble.

Chiarimenti sulla costruzione della griglia

Nei giornali statunitensi, le griglie per parole crociate sono generalmente costruite in modo tale che ogni lettera sia "controllata", il che significa che fa parte sia di una parola "attraverso" che di una "giù". Nel Regno Unito e altrove (specialmente nei cruciverba criptici ), questo non è necessariamente il caso: se una parola "attraverso" o "giù" sarebbe solo una lettera, non è necessario che sia una parola reale (come "A" o "I "). Per questa sfida, segui le regole più rilassate: le parole a una lettera non devono apparire nell'elenco delle parole.

Esistono varie altre tradizioni (negli Stati Uniti e altrove), nessuna delle quali deve essere seguita in questa sfida. Ad esempio, le parole possono contenere solo due lettere, le parole possono ripetersi e la griglia non deve avere simmetria (rotazionale).

È anche possibile?

Sì! Si può scrivere un breve script per verificare che la soluzione unica alla seguente griglia vuota a sinistra sia la griglia riempita a destra:

Griglia 15x15 con quattro parole di 15 lettere incrociate alla quarta e quinta lettera

Si può visualizzare la griglia riempita in un formato leggibile dal computer come segue:

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

La tua soluzione

La griglia sopra ha 56 quadrati bianchi su un totale di 225 quadrati nella griglia 15x15. Questo serve come base per questa sfida. Le griglie con meno quadrati bianchi possono anche essere interessanti per ragioni diverse dal loro punteggio, ad esempio se soddisfano alcune delle tradizioni estetiche sopra menzionate.

Invia la tua soluzione nello stesso formato della baseline leggibile dal computer sopra. Includi il codice che verifica l'esistenza di una soluzione unica per la tua griglia.

Sono apprezzati frammenti di codice interessanti (ad esempio per la ricerca nello spazio delle possibilità) e la discussione su come hai trovato la tua griglia.

L'elenco delle parole

L'elenco internazionale di parole Scrabble era precedentemente noto come SOWPODS e ora si chiama Collins Scrabble Words (CSW). È utilizzato nella maggior parte dei paesi (tranne in particolare negli Stati Uniti). Preferiamo usare questo elenco perché include l'ortografia britannica e generalmente ha molte parole significativamente rispetto all'elenco di parole americano. Esistono più edizioni di questo elenco che differiscono leggermente. Puoi trovare diverse versioni di questo elenco collegate da Wikipedia , su Github , nel Natural Language Corpus di Peter Norvig e altrove, spesso chiamato ancora "SOWPODS".

Questa sfida è altamente sensibile all'ampia natura della scelta dell'elenco di parole, ma meno ai dettagli più piccoli. Ad esempio, l'esempio di base sopra riportato funziona con qualsiasi edizione di CSW, ma CHnon è una parola nell'elenco di parole di American Scrabble. In caso di discrepanza, preferiamo usare CSW19, l'edizione più recente di CSW. (Se utilizziamo questo elenco, che è stato rilasciato quest'anno, possiamo aspettarci che le risposte a questa sfida rimangano valide più a lungo). Puoi interrogare questo elenco in modo interattivo sul sito ufficiale del cercatore di parole Scrabble o scaricarlo (così come la precedente edizione, CSW15) dallo Stack Stack di Board & Card Games o da Reddit's r / scrabble .

Tldr : l'elenco di parole autorevole per questa sfida è disponibile come file di testo semplice (279.496 parole, una per riga) nello scambio di stack di giochi da tavolo e di carte .

Ulteriori discussioni

Un problema sollevato in una risposta e un commento precoci è il motivo per cui le parole crociate esistenti (ad es. Al NYT) non rispondono a questa domanda. In particolare, il record per il minor numero di quadrati neri (e quindi il maggior numero di quadrati bianchi) per un cruciverba pubblicato a New York è già il record più famoso nei cruciverba. Perché non possiamo usare la griglia dei record ? Ci sono alcuni problemi:

  • Molte delle risposte nei cruciverba di NYT non compaiono nel nostro elenco di parole. Ad esempio, la griglia dei record include PEPCID(un marchio), APASSAGETOINDIA(un nome proprio di quattro parole per un film e un romanzo, scritto senza spazi) e STE(un'abbreviazione per "Sainte"). Sembra che la griglia dei record non sia risolvibile con le parole Scrabble.

  • Espandere semplicemente l'elenco di parole per includere più parole non aiuta necessariamente questa sfida: anche se tutte le parole nella griglia dei record apparissero nel nostro elenco di parole, la soluzione non sarebbe unica senza gli indizi. Spesso è possibile modificare alcune lettere alla fine delle risposte mantenendo tutto una parola. (Ad esempio, la lettera più in basso a destra può essere cambiata da a Da anR .) In effetti, questo fa parte del processo di costruzione (umano) quando si scrive un cruciverba, cercando di ottenere parole "migliori".

    Il motivo per cui le parole crociate ordinarie (di solito) hanno una soluzione unica è che gli indizi aiutano a restringere le risposte corrette. Se provi semplicemente a riempire la griglia di parole senza usare indizi, è probabile che non ci saranno né possibilità né molte possibilità. Ecco un esempio di tre diversi riempimenti (usando l'elenco di parole per questa sfida!) Per la stessa griglia (uno che viene usato relativamente frequentemente nel NYT):

La griglia di parole crociate più comuni del NYT, riempita in tre modi diversi con parole Scrabble.

  • Un altro problema sollevato nei commenti è una certa incredulità sul fatto che questa domanda sia una sfida di codifica . Forse non è immediatamente chiaro, ma è difficile persino trovare un'unica risposta valida a questa sfida . L'individuazione della linea di base di cui sopra ha coinvolto più programmi di ricerca appositamente predisposti per i quali non era garantita la risposta. Personalmente non conosco nemmeno un modo generale per risolvere una griglia arbitraria, se vuoi la risposta in tempi ragionevoli. I programmi di costruzione di parole crociate esistenti possono aiutare, ma presumo (forse in modo errato) che in realtà non eseguano una ricerca completa delle possibilità. (Ho usato un programma simile per le tre griglie affiancate sopra; questo ha funzionato perché quella particolare griglia consente molte soluzioni.)

2
Meta post relativo a questo tipo generale di domande: codegolf.meta.stackexchange.com/questions/18117/…
A. Rex

3
1. Rilasciare l'opzione estetica (" 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.") - allo stesso modo di evitare i bonus nel golf del codice, preferirei che una sfida del codice riguardasse solo una cosa. Ciò significa che tutte le risposte possono essere confrontate come per like. Lo rende anche chiaramente obiettivo, che aiuterà a riaprire i voti.
trichoplax,

4
2. Scegliere un elenco di parole singole e insistere per tutte le risposte. Il tldr menziona un elenco di parole autorevoli, ma la discussione in anticipo può indurre le persone a pensare di poter scegliere una di quelle menzionate. Può aiutare a mantenere i severi requisiti vicino all'inizio del post e a chiarire che altri dettagli non fanno parte delle specifiche della sfida. Idealmente, ometti qualsiasi cosa superflua alle specifiche per mantenere il post breve e immediatamente inequivocabile.
trichoplax,

2
3. Rendere l'inclusione del codice utilizzato per trovare la soluzione un requisito per una risposta valida.
trichoplax,

3
Questo è il tipo di sfida che potrebbe trarre vantaggio da una chat room in cui le persone possono discutere degli approcci. Se si imposta una chat room e si collega ad essa dalla fine della specifica, è possibile pubblicare la discussione lì come i post iniziali e menzionarlo nella sfida per le persone che vogliono saperne di più.
trichoplax,

Risposte:


9

180 quadrati bianchi

Griglia vuota Soluzione

La mia strategia era semplicemente quella di trovare un rettangolo più piccolo senza quadrati neri, in modo che potesse essere riempito in modo univoco. Tutti i 2×krettangoli hanno più soluzioni. Per i 3×krettangoli, esistono più soluzioni ktra 3 e 14, ma esiste esattamente una soluzione per k=15.

Quindi inserisco 4 di questi rettangoli nella griglia. Ciò significa che ogni parola appare 4 volte nella soluzione, che di solito è disapprovata nella costruzione di parole crociate, ma va bene per questa sfida. D'altra parte, questa soluzione ha simmetria sia a sinistra / destra che in alto / in basso!

Griglia leggibile da computer:

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

Ecco il codice R che ho usato per trovare tutte le soluzioni per una data dimensione della griglia. Il ciclo su tutte le triple di parole di 15 lettere è troppo lento. Invece, provo a riempire i rettangoli con

  • impostazione delle prime due colonne (due parole di 3 lettere)
  • quindi scorrere in sequenza tutte le parole di 15 lettere iniziando con le prime due lettere che ora sono risolte.
  • per ogni possibile scelta delle parole di 15 lettere, quindi verifico se nel dizionario sono presenti tutte le parole di 3 lettere generate.

Ad esempio, per la soluzione finale, il primo codice batte HOPe EVO, poi completato in HETERNORMATIVE, OVEROPINIONATEDe POSSESSEDNESSES, infine verificato tutte le parole 3 lettere ( HOP, EVO, TES, ERS, ROE, OPS, NIS, ONE, RID, MON, ANE, TAS, ITS, VEE, EDS).

Codice 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)
}

Chiamato come f3(15). Ho impiegato alcune ore sul mio personal computer.


@downvoter Potresti commentare?
Robin Ryder,

Anche la mia risposta è stata sottovalutata. 🤷
A. Rex,

1

182 quadrati bianchi

Quattro regioni 3x15 collegate da un altro paio di quadrati bianchi.

Ispirato dalla risposta di Robin Ryder , ho provato a stringere un altro paio di quadrati bianchi. Credo che questa soluzione sia unica e presto pubblicherò di conseguenza il codice di verifica.

Griglia leggibile da computer:

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

184 poiché il mon? Cot può essere completato in modo univoco con monocot
Jonathan Allan il

... rendilo "forse ..." dato che non l'ho verificato non romperà l'unicità su tutta la linea!
Jonathan Allan,

Sarei curioso di vedere il tuo codice di verifica. Tutti i miei tentativi di verificare la tua griglia sono tremendamente lenti.
Robin Ryder,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.