Skip to content

Instantly share code, notes, and snippets.

@jsuchal
Created February 6, 2022 23:14
Show Gist options
  • Save jsuchal/5c0e2092e93dcbdbbedf8f84821cba30 to your computer and use it in GitHub Desktop.
Save jsuchal/5c0e2092e93dcbdbbedf8f84821cba30 to your computer and use it in GitHub Desktop.
Slovka Solver
require 'active_support/all'
def pattern(word, candidate)
[0,1,2,3,4].map do |i|
if word[i] == candidate[i]
'X'
elsif word[i] != candidate[i] && candidate.include?(word[i])
'x'
else
'.'
end
end
end
def matches(candidate, guess)
word, pattern = guess
[0,1,2,3,4].all? do |i|
case pattern[i]
when 'X'
word[i] == candidate[i]
when 'x'
word[i] != candidate[i] && candidate.include?(word[i])
when '.'
!candidate.include?(word[i])
end
end
end
def filter(candidates, guess)
candidates.select do |candidate|
matches(candidate, guess)
end
end
vocabulary = File.read('vocabulary.txt').split("\n").map(&:parameterize)
candidates = vocabulary
guesses = [
['drevo', '.....'],
['sanka', 'X....'],
['putec', '..x.x'],
]
guesses.each do |guess|
candidates = filter(candidates, guess)
puts "After #{guess} there are #{candidates.count} left."
raise "Error! No matches" if candidates.count < 1
if candidates.count == 1
puts "Found #{candidates.first}"
exit(0)
end
end
stats = Hash.new(0)
best = nil
vocabulary.each do |word|
candidates.each do |candidate|
pattern = pattern(word, candidate)
stats[word] += filter(candidates, [word, pattern]).count
end
if best.nil? || stats[word] < stats[best]
best = word
end
puts "#{word} = #{stats[word]} (best so far #{best} = #{stats[best]})"
end
puts "Best next guesses:"
puts stats.sort_by { _2 }.first(5)
achát
adept
afekt
agáva
agent
akcia
akord
akosi
aktér
albín
aktív
album
aleja
alebo
algol
alibi
ampér
angín
anjel
anály
anóda
aorta
apríl
alarm
archa
areál
aréna
argot
astra
aróma
arzén
aspik
astma
atašé
aspoň
anión
ambit
avšak
atlas
audit
autor
avízo
árešt
bager
bahno
balet
balič
balík
balón
banán
banda
babka
bacha
baník
barak
baran
banka
barok
barón
basta
bašta
batoh
barel
bazár
bazén
bábka
bacil
bájka
baret
báseň
bázeň
bárka
baťko
barla
bobok
bodák
bodec
bobor
bodka
bočka
boháč
bojar
bohém
bodaj
bojko
bokom
borba
borec
boršč
boxer
botel
bôčik
bralo
brada
brána
brdce
brest
breza
brloh
brvno
brzda
bronz
bôžik
bubák
bubon
budík
bucko
bomba
kosec
kotúč
kotúľ
kotva
kováč
kozák
kozľa
kozol
kotol
kozub
kožák
kôlňa
krach
kraul
trefa
krava
krása
krčah
krčma
kôpor
kreol
krédo
krhla
krimi
kríza
kríže
krpáň
kroch
kriak
krúpa
krpec
krveľ
kryha
krysa
kŕdeľ
kŕmič
krvák
kšeft
ktosi
junec
jupka
jutro
južan
jurta
kacír
kačka
kadet
kahan
kajak
kajka
kakao
kaluž
kamea
kameň
kamoš
kamsi
kamža
kanál
kanec
kanoe
kanón
kanva
kaňon
kapia
kapor
kapsa
kaput
kapún
karas
karát
karta
kasár
kábel
káčer
káder
kánon
kačín
kabát
kader
kapec
chata
chlap
chlop
chlór
chlad
chmeľ
chňap
chrám
chren
chróm
chasa
chaos
chrup
chrst
chúďa
chvat
chyža
húžva
chrum
hybaj
chyba
hydra
hymna
idiot
idióm
chova
ideál
idyla
hyena
ihlan
imelo
imidž
hvizd
igric
ingot
fujak
fukso
chmat
fuška
fušer
fúkač
fuzáč
fúria
fusak
futro
gadžo
galop
gamba
garda
garáž
garde
gazda
gagot
gáfor
gazík
gánok
gágor
gejša
gesto
géčko
gibon
glanc
fúrik
glosa
gnóma
grapa
ikona
grman
grunt
guláš
gulag
grand
grant
goral
datív
dátum
datľa
dávno
debil
debet
dcéra
debna
dedič
debut
decko
decht
deľba
dekan
dereš
delta
devón
dežma
démon
diera
dieťa
dieža
diéta
dinár
dielo
dezén
dióda
dipól
divák
disko
dlaba
dlaha
díler
dávka
diván
ďateľ
cirok
cirka
cisár
citát
civil
címer
cimra
crkot
cifra
cupot
cveng
čačka
čadič
clona
čajka
čakan
čapík
cysta
čapta
časom
čatár
čárda
dôkaz
dôvod
dráma
dražé
dráha
dôraz
drdol
drevo
často
drina
drieň
drkot
driek
drozd
droga
druzg
drvič
držba
dubák
dukát
dunčo
dumka
dudok
dupľa
dupot
dural
dusík
dúška
dúšok
kasňa
kasta
kašeľ
kaška
katar
kauza
cukor
kazak
kazár
kdesi
kázeň
kečka
kečup
keďže
kefír
kepeň
keper
kesón
kibic
kiosk
katan
kisňa
klaun
kelím
kavka
klbko
klíma
klišé
klada
klika
knuta
kniha
kocka
kobra
kľuka
klzák
čemer
čepeľ
čereň
čerta
česáč
čiara
čeľaď
činel
čibuk
činka
čižma
čípok
číslo
česák
kobka
čmára
čoraz
črpák
čudák
čížik
čuvač
dakde
čipka
dakto
črvoč
dália
črevo
darca
darmo
popis
opica
popod
popol
popri
penis
ďalej
popuk
ďasno
porno
ponor
porub
popud
posol
poník
posun
porto
posyp
pošta
pošva
poryv
potaš
poter
potme
potom
poťah
posed
povoz
pozér
pozor
posuv
povel
potok
pôdoj
pôrod
pôvod
pôvab
prasa
prask
práca
práve
právo
prach
bedač
behák
bedrá
behom
bedľa
belák
belko
behúň
bedár
berla
beľmo
betón
beťár
bežka
bežec
bibas
bidlo
bičík
bieda
biľag
bivak
bitka
bisťu
bizón
bizam
blato
blana
blbec
bíreš
blaho
hojno
blcha
blkom
blkot
blesk
blond
blúza
manéž
mango
mamka
manna
aféra
manko
margo
marka
marža
marón
maród
marec
masáž
maser
masér
maska
maslo
mašľa
match
matka
masív
mazák
mazna
mánia
mecén
mazut
medza
medzi
melón
menáž
mamut
menza
merač
mesto
mešec
maras
menič
medik
šiška
širák
šišak
škála
šírka
škrek
škola
škoda
škrob
škára
škuta
šmrnc
šnaps
šnúra
šofér
šľapa
špára
špina
ticho
nitka
šípka
šperk
šport
špunt
šteňa
štart
štiap
štica
špurt
šrafa
štich
špión
štráf
štrng
štóla
štuka
štras
štváč
šťuka
šťava
papek
papáč
parák
paroh
parom
parta
pasák
pasát
šmuha
čmuha
pasca
pasia
pasta
pašák
pašie
pauza
pavúk
pavúz
pazúr
pažba
páper
panva
pápež
pária
pasáž
pásak
páska
párok
páter
pátos
peceň
šitie
pedál
peháň
pekáč
pekár
peklo
pasus
peleš
pečeň
pásmo
rotor
rovno
rôsol
rožok
rubač
roveň
rubár
rováš
rubáš
rubín
rudka
rukáv
ruina
ruman
rumba
rušič
rúbaň
rúcho
rúčka
rúško
rušeň
rybár
rydlo
rozum
rýdzi
rytec
sabat
sadba
rypák
sáčik
sadlo
ryska
rehot
remeň
renta
repík
repka
retuš
relax
reťaz
reuma
revue
rezák
rezeň
rezba
režim
rezok
réžia
revír
riasa
riava
ricín
rifle
rigol
rikša
rígeľ
rival
rieka
rímsa
rínok
rítus
robot
rodák
rodeo
rodič
roháč
rohož
rokľa
rojko
rondo
román
rolka
rolák
metal
metér
meter
metro
metla
metál
metán
miera
mihot
mihom
misál
minca
misia
míner
mixér
mínus
mitra
mixáž
mláďa
mláka
mláto
mlieč
mnoho
močka
model
mních
modla
modus
modem
mohár
rubeľ
sádka
mohér
modul
nikto
nitár
nomád
nikel
nosáň
notes
notár
norma
norka
novic
nugat
nosič
núdza
ňufák
nymfa
občan
obava
obdiv
občas
objav
oblak
objem
obeta
oblet
oblek
obnos
obora
obrad
obrat
oblok
oblúk
nylon
hlien
hlava
hĺbič
hliva
hlina
hĺbka
hľuza
hltan
hmota
nóvum
hnida
hobeľ
hoboj
hobra
hodno
hokej
holáň
holeň
holič
holub
homár
honba
honec
honor
hopsa
horák
horár
horda
horec
horor
hotel
pyrit
pylón
pytač
rabín
rabat
radlo
radca
radno
rafáč
radok
rahno
radža
rakva
ramár
rapeľ
rajón
rapot
rampa
razba
rapík
rasca
razič
ražeň
ražné
razia
razom
rámec
rádio
rámus
rároh
rákoš
rázga
rébus
regál
rebro
ladič
lajda
radar
lajno
ladom
lalot
lalok
lampa
lanýž
lapaj
hltač
lapák
lapač
largo
larva
rande
lanár
latex
laser
lazár
lazúr
lámač
lámka
lápis
lávka
láger
látka
lebeň
ledva
ledač
legát
lejak
lekár
lekno
légia
lebka
láska
ľalia
ľavák
lagan
dĺžeň
dláto
dlháň
dobré
dobro
dĺžka
dohán
dogma
dohad
dojem
dojča
dojič
dojka
dohra
lapka
dolár
dolka
domec
domov
dopad
doňho
dopis
dolet
dopyt
doraz
dosah
doska
dotaz
dotyk
dovoz
dozor
lavór
ľapot
dokár
hovno
hrana
hrada
hrant
hrbáč
hovor
hrach
hrdza
hriva
hrboľ
hrmot
hrdlo
hrôza
hroch
hruda
hrúza
hrvoľ
hubár
hrtan
hudba
hukot
humno
hurka
humor
humus
hurma
husár
hrkot
hudec
húfom
penka
perón
perla
perie
petit
pevec
husle
piest
pieta
pijak
piano
pijan
piket
pikle
pilot
pílka
pipka
pirát
pinka
piroh
pitva
pilát
pivár
pizza
pižmo
pínia
písmo
plast
plást
pláca
plebs
plech
plece
plesk
pitka
preso
preto
priam
priča
princ
pisár
príma
prior
proso
proti
prečo
próza
prsia
próba
prvok
priek
prvák
pŕška
psina
prova
psíča
pudel
pudlo
pukot
pumpa
pšeno
pupeň
pusta
psota
putňa
puška
púder
pútko
pýcha
pútec
pupok
pútač
kocúr
kočík
kočka
punkt
kokos
kokus
koláč
kolár
koláž
kolík
kolok
kolos
koľaj
koľko
kohút
psica
kombi
kojot
kompa
komín
konča
kočiš
konto
koňmo
komik
kopáč
kopec
komár
kopov
koral
koráľ
koráb
konár
korán
korec
korba
korma
korok
korzo
kosák
kosba
kódex
kólia
kópia
koreň
siláž
silúr
simka
koňak
sirup
sipot
sisal
sitár
sivoň
sivko
sínus
síran
sinka
sítie
skala
skade
skaut
skaza
skejt
skica
sklár
sklad
skalp
sklon
skoba
sklep
skóre
skrat
skruž
skunk
skoro
skyva
sláva
slieň
slina
sliva
slama
fifik
fikot
fikus
fidli
fičúr
finiš
filip
fixka
fixír
fígeľ
firma
fjord
finta
fízel
flóra
fluór
flirt
fľask
fľaša
flauš
forma
fotel
forte
fotón
foyer
fóbia
fókus
fólia
fórum
frank
fráza
fotka
frčka
freón
frfot
frkan
frkot
frmol
frnda
front
silon
froté
fufna
fučka
naraz
nazad
nažka
nápev
náplň
nápoj
nápor
náraz
nárok
národ
nárez
náruč
nárys
náter
nátoň
nával
násyp
náuka
návod
nápis
návyk
názor
názov
necht
nečas
nečin
neduh
nemoc
neraz
nekov
návej
neter
netto
niečo
nárek
nieto
nerez
nikde
nikam
guráž
gumák
gusto
habán
habit
gunár
hajde
halda
hanba
návrh
fréza
hasák
haluz
hasič
hašiš
háčik
háčko
hádač
hádka
hálka
hámor
hánka
hárok
hárem
háveď
helma
herec
herňa
hertz
heslo
hever
hádam
zavše
závan
záver
závej
závet
záves
závod
závoj
závin
závit
závoz
zážih
zdrap
zboka
zdola
zdvih
zdroj
zeler
zeman
zebra
zeleň
zenit
zhluk
zhora
zhoda
zhuba
zhryz
zjazd
zinok
zloba
zlato
zmier
zmena
zľava
trala
trasa
trast
tranz
tramp
tráva
trend
trdlo
treba
tresk
tréma
trhač
trhan
trest
trhák
triko
trias
trnka
trkot
troje
tromf
trova
trpák
trtáč
truľo
trúba
tržba
trysk
tŕpka
tŕnie
tucet
tubus
bufet
bujón
buklé
bujak
buksa
bunda
buľva
burza
butik
buket
buxus
burič
búrka
bydlo
byľku
bytie
cárok
cedák
byvol
cecok
celok
celta
cepík
cesta
cesto
céčka
céder
cezeň
céčko
cieva
bukas
cícer
cieňa
harfa
mokka
morka
moped
busta
morča
motel
motív
bunka
motúz
motor
motýľ
mozog
móres
mrcha
mrena
mreža
možno
mrmot
mrzák
mucha
mrkva
mulat
mumák
mumps
murár
murín
mudrc
muška
mušľa
mužík
mydlo
múmia
dymák
dvoje
dvere
džbán
motto
efekt
edikt
egreš
ekzém
elita
džber
džudo
email
enzým
empír
erika
estét
epika
etapa
etika
etuda
extra
epeda
fagan
fagot
facka
fajta
fakír
fakľa
faloš
farár
farad
farba
fajka
fauna
farma
fenig
fenol
fešák
fetiš
fánka
fiala
fénix
tatra
tatko
tavič
tavba
taška
taxík
tehla
tečna
tchor
telex
tátoš
telúr
temer
tempo
tenis
tento
tenor
tenže
mozoľ
terén
teraz
terno
tesák
teror
tesil
tesár
tetka
tešla
tiger
tieto
tiara
ťažba
ťažeň
eidam
tepna
moták
tilda
tikot
tiráž
tirák
tisíc
titan
titán
titul
tíško
tlama
tlkot
tiket
tlupa
toast
tlapa
točka
točňa
tlmič
toľko
tonáž
tonik
tonus
tobôž
topor
torba
torta
torzo
totem
topás
tovar
toxín
trakt
stroj
strom
strop
strýc
struk
stuha
stvol
topoľ
totiž
sudca
suita
sujet
sukňa
sufix
sudba
super
surma
sumec
sušeň
sušič
súbeh
súboj
súbor
tokár
súčet
súčin
sused
súhrn
súkno
súcno
súlož
súper
súpis
súcit
súsek
sústo
súšie
súlad
súťaž
sútok
súžba
summa
súhra
ušiak
súvis
úloha
úmera
únava
úplet
úroda
úskok
úsmev
ústav
ústie
ústrk
úsvit
ústup
úšust
útlak
lakeť
pálka
útvar
úvaha
úvrat
ultra
úžina
úžera
vačok
úľuba
vagón
vačka
vajce
vajda
vábec
valal
varič
úškrn
varta
valec
válov
vazal
väzeň
vatra
váľok
vánok
várka
vášeň
vážka
vápno
vdych
vdova
vecko
varuj
večer
varák
včera
vedno
vedro
vedľa
veľmi
včela
velúr
veslo
vedec
vesta
vesna
verva
vetva
vďaka
svrab
vejár
sykot
sviňa
synak
sýpka
sýtič
syseľ
šafeľ
šafár
šakal
šaľba
šalát
šamot
šaman
šanca
šarža
šanta
šarha
šatňa
šabľa
svist
šelak
šálka
šatka
šášie
šepmo
šábes
šerif
šerpa
šibač
véčko
šibák
šička
šidlo
šibal
šimeľ
šepot
inšie
istič
islam
iskra
išpán
jagot
jahňa
jakot
japan
jarec
jarka
jadro
jarmo
jalec
jarok
šifra
jaseň
šifón
jasle
javor
jazda
jazyk
jáger
jatka
jasot
jeden
jedák
jedľa
jedoš
jedlo
jelša
jeleň
jeseň
jodid
jogín
jidiš
junač
junák
joule
judáš
obrus
obrna
obrok
obrva
obruč
obsah
obrys
obťah
obtok
obuch
obvod
obzor
ocino
octan
oceán
obraz
odbor
jazva
odboj
odbyt
odkaz
odber
odlet
odliv
odkop
odlev
odnož
odpad
odpis
odľud
odpor
odroň
odhad
odraz
odsun
odsek
kufor
kubík
kukla
kujon
kulma
kulak
šelma
kurič
kurín
kutáč
kuruc
kupec
kuvik
kužeľ
kumšt
kúdeľ
kutil
kupón
kukuk
kúria
kúzlo
kúkoľ
kvaka
kvark
kvóta
kvôli
kúpač
kvázi
kutňa
kýbeľ
kyvot
kúpeľ
kytka
štyri
šunka
šupom
kyjak
šuška
šuter
šúľok
šuhaj
švung
tabak
tajga
šupák
tabla
tablo
talón
talár
tamto
tamže
takže
takto
tanec
tango
tapír
tanín
tábor
tácňa
tália
ťahák
tárač
ťahúň
ťapot
ťapša
ťahač
ťapka
vojna
vokáň
vokál
volán
volej
švola
kúdol
voľba
vonku
vozeň
voľno
vozič
vôbec
vpich
vplyv
vpred
vpust
vrana
vrava
volič
vôkol
vráta
vrece
vresk
vrhač
vrkoč
vrták
tarok
voška
vrása
vŕtač
všade
zadok
zamak
zajac
zamat
zaňho
zafír
zaraz
zatým
záder
zádrh
záhon
záhyb
zákal
zákaz
zákop
zákos
záliv
zámik
zámer
záloh
zákon
zámka
zánik
zámok
zápal
západ
zápas
zápis
zárez
zápor
zásah
zásek
zásyp
zápač
zátrh
záťah
zával
záťaž
tučko
tumor
tuleň
tuner
tunel
tupec
turné
tuzex
zátka
tužka
tuším
tútor
tyran
týfus
týmus
túžba
učivo
ucháň
tulák
udica
uhlie
ulica
ulita
uhlík
úkrok
úklon
úhona
úľava
úkryt
vtáča
vydaj
vydra
vyhňa
vstup
výbeh
výboj
výbor
výčin
výčap
výdrž
výfuk
výhra
úklad
výkal
výber
výkon
výdaj
výkrm
výjav
výkyv
výlet
výkup
výlov
výmaz
výmer
výmoľ
výnos
výpad
výpar
výpek
výpis
výplň
výpon
výkop
výrez
výrok
výkaz
výron
zmija
znova
výlev
zobák
výraz
zopár
zosun
zošit
zrada
zrast
zosuv
zrazu
zrána
výdoj
zubáč
zubor
zubár
zupák
zvada
zvoľa
zvrat
žabča
zrebe
žabec
žaket
žatva
žáner
žblnk
žemľa
žaluď
spiež
spola
žalár
spona
spoza
spraš
splín
sprej
spolu
sprvu
spust
spred
srdce
sraľo
srnča
srieň
sršeň
srnec
splav
stena
stesk
stade
stisk
stádo
stoka
stóra
stráž
stred
stopa
stráň
streh
strek
strih
stret
stres
striž
pleso
plnič
pleva
plisé
plnka
pľuha
pľúca
pobyt
počas
pocit
počet
pocta
poéma
počin
podeň
pohár
podľa
pohyb
pohan
pojem
pokál
pohov
pokrm
pohon
pokus
poker
poliš
pokyn
pokým
polka
polom
pomer
polos
pompa
pokoj
pomoc
poňho
sadza
sadra
salón
salto
samba
salva
samec
splna
satan
satén
salaš
satyr
sauna
sánka
scéna
schod
polyp
ponad
sebec
sedem
samit
sejba
sedma
sedlo
sekta
semiš
selén
senát
senáž
saldo
sečka
sever
séria
sépia
sezam
sérum
siena
seter
sekáč
silák
siaha
sídlo
sedan
vezír
video
vchod
sféra
viera
sifón
vikár
vinič
vinea
viola
viťúz
visáž
višňa
vitaj
vizáž
víťaz
vírus
vízia
vízum
vjazd
vklad
vlaha
vlani
vláda
vloha
vľavo
vnada
vnúča
vodca
vodič
vodák
vodné
vojak
ženba
žĺtok
žetón
žezlo
žiara
židák
žieňa
žitie
živáň
živec
vidno
vodík
žinka
život
vodka
žľaza
žmurk
žolík
žumpa
župan
žervé
ženáč
žúžoľ
lepič
lelek
lepok
lepra
lemeš
letáč
leták
lesák
letec
letka
letún
lezec
ležmo
liana
liace
lieno
zubáľ
lievč
ligot
likér
limba
limit
lipeň
letok
linka
liter
lizák
živel
lišta
líder
líška
líšťa
línia
lokaj
živio
lokňa
lokša
lomka
libra
lišaj
žízeň
lokál
výrub
výsek
výsev
výsyp
výška
výter
výtlk
výťah
vývar
vývin
vývod
vývoz
vývoj
vývrt
výtok
výzor
vyžla
výzva
vzdor
vzlet
vzlyk
vznik
vzpor
vztyk
vzťah
weber
xenón
xerox
začas
záber
zábeh
záčin
zábal
ornát
osebe
osada
osivo
osoba
osteň
osúch
osvit
osika
oštep
ošiaľ
otava
otlak
otras
otčim
otrok
oveľa
otvor
oznam
ožran
ôstie
packa
pagáč
padák
ôsmak
pahýľ
palác
pajác
paloš
palma
paľba
panák
pamuk
pampa
panel
panic
panna
palec
pádlo
pánča
waltz
vzadu
slnko
slovo
slych
sluha
sľuda
sluch
smejo
smola
smrad
smalt
sloha
soboľ
smrek
snaha
sodík
slnce
sokel
sokol
socha
solux
somár
sojka
solič
sonda
sonet
sobáš
sosna
sopeľ
sotva
sovok
spara
sovča
sorta
sopka
odtok
odušu
odvod
sopľa
odvar
ofera
ofina
spása
odval
ofset
ohlas
ohava
ohmat
ohrev
okraj
ohľad
okres
okrem
okruh
oktán
olovo
odvoz
oltár
omelo
onuca
oliva
opera
opiát
opona
opora
opuka
opuch
orech
oplan
organ
orgán
orgie
ópium
orloj
orkán
lomoz
lopár
lopta
losos
lotor
lotos
lovec
lôžko
luhár
lupeň
lupič
lurex
lutna
luxus
lúmen
lúpež
lymfa
lyzol
lyska
lýtko
ľudák
ľuľok
macko
maces
mačka
madam
maggi
mafia
ľudia
magma
maják
majer
malér
malta
maľba
mágia
major
myrta
myrha
myseľ
mýlka
mýtus
nabok
načas
načim
nadeň
nadir
nadol
nafta
naháč
nahor
nanič
nanuk
naňho
naoko
náboj
nábeh
nábor
náčrt
náčuv
nácia
nádej
nádor
nádrž
náhle
gajdy
grogy
dávny
derby
diéty
držky
droby
kdeby
akoby
biela
párty
mlčky
nikdy
hobby
skusy
slipy
traky
trapy
trópy
tatry
vágne
táčky
vtedy
sťaby
počty
sánky
vidly
pádne
okovy
náhly
náhon
nájom
nákup
nákyp
nálet
nálev
nálož
nález
nános
námet
nápad
ňadro
okolo
omega
sluka
cnosť
akosť
peruť
slasť
zvesť
spleť
spúšť
smršť
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment