2012-11-04 16 views
6

Ostatnio dużo grałem w Letterpress.Jaki jest rozsądny algorytm generowania liter w grze Typpress iOS?

Celem gry jest zdobycie jak największej liczby niebieskich płytek poprzez wybranie słów z liter na planszy. Kiedy grasz słowo, litery tworzące słowo zmieniają kolor na niebieski, chyba że list jest otoczony czerwonymi dachówkami.

regularne wyżywienie typograficznego wygląda następująco:

zdałem sobie sprawę, że litery na pokładzie muszą być generowane z pewnego rodzaju przepisów, w przeciwnym razie będzie to bardzo trudne do gry z niektórymi deski. Mogłem myśleć tylko o zasadzie, w której musi być liczba samogłosek. Zastanawiam się, czy istnieją inne zasady.

Dodatkowo, zastanawiam się, czy to będzie coś podobnego do generowania kości Boggle.

+7

Nie byłbym zaskoczony, gdyby był "po prostu" losowy po [histogramie liter] (http://www.google.com/?q=english%20letter%20histogram) (jak w języku angielskim lub cokolwiek innego)) słowa. Podobnie czerwone kafelki są po prostu przypadkowe. Oczywiście, musisz sprawdzić kod źródłowy, mieć inny wgląd * lub * przeprowadzić analizę na wygenerowanej tablicy, aby powiedzieć więcej. Czasami losowe jest! @ # $, Ale kto wie, być może algorytm wyznacza szanse z tendencją do wykopalisk. –

Odpowiedz

4

Postanowiłem zhackować rozwiązanie oparte na sugestii user166390. Częstotliwości, które widzisz są dla języka angielskiego, zaczerpnięte z Wikipedii. Uruchamiając program kilka razy i po prostu przyglądając się wynikom, wyglądają na całkiem grywalne. Zwykle mogę znaleźć co najmniej cztery cztero- lub pięcioliterowe słowa i nie jestem nawet bardzo dobry w tej grze! Tak czy inaczej, oto kod:

#!/usr/bin/env python 

from random import random 
from bisect import bisect_left 

letters = [c for c in "abcdefghijklmnopqrstuvwxyz"] 
frequencies = [8.167, 1.492, 2.782, 4.253, 12.702, 2.228, 2.015, 6.094, 6.966, 
       0.153, 0.772, 4.025, 2.406, 6.749, 7.507, 1.929, 0.095, 5.987, 
       6.327, 9.056, 2.758, 0.978, 2.360, 0.150, 1.974, 0.074] 

cumulative_frequencies = [sum(frequencies[0:i+1]) for i in xrange(len(frequencies))] 

for i in xrange(5): 
    line = "" 
    for j in xrange(5): 
     line += letters[bisect_left(cumulative_frequencies, random() * cumulative_frequencies[-1])] + " " 
    print line 

Chodzi o to, aby każda litera zostać wygenerowany, użyj roulette wheel algorithm aby go wybrać losowo z prawdopodobieństwem proporcjonalnym do częstotliwości podanych.

+0

To jest bardziej subtelne. Na przykład, jeśli 'Q' jest" wybrany ", w kodzie jest logika, aby upewnić się, że poprawne słowo używając' Q' jest możliwe. Itd. – jason

+0

Ok, więc generalnie zawsze będzie możliwe użycie wszystkich liter na planszy dla co najmniej jednego słowa? W takim razie jestem kompletnie zakłopotany. –

+0

Trzymaj się, na przykładowej planszy, w której OP został opublikowany, w górnym prawym rogu znajduje się 'C'. Jak, na Boga, powinieneś tego użyć? Chyba że akronimy są oczywiście dozwolone. –

1

Słyszałem, że Loren Brichter, dev, rozmawia o tym, trochę nie mogę do końca życia pamiętać. Myślę, że to było na podcastie Guy Ritchie's Debug, ale nie jestem pewien. Pamiętam kilka rzeczy.

Gwarantuje co najmniej pewną liczbę samogłosek.

Spółgłoski są generowane oddzielnie od samogłosek. Oznacza to oddzielne dystrybucje liter.

Dokonał własnej analizy słownika za grą, aby wymyślić podział liter.

Jeżeli Q jest wybrany formularz I jest gwarantowany więc słowo zawsze jest możliwe z Q.

Gram dużo. Nigdy nie kończyłem gry z jakiegokolwiek powodu, ale wszystkie litery są używane. Nie wiem, czy to gwarantuje, że słowo jest zawsze możliwe z każdą literą, ale z pewnością wydaje się, że jest to praktycznie prawdziwe, nawet jeśli nie jest wymuszone.

+0

Też słuchałem tego podcastu. Jestem pewien, że to Debugowanie. Myślę, że powiedział, że generuje maksymalnie 7 samogłosek. Jeśli tak, to zastanawiam się, jakie jest minimum i jak wymyślił tę liczbę jako maksimum. –

+0

Poczekaj, jeśli wybrano Q, zagwarantowane jest również I? W takim przypadku algorytm nie jest prostą dystrybucją. –

+0

Pamiętam, że gram w gry z Q i bez I lub U. Nadal możesz zrobić QAT lub kilka innych. Jeśli cokolwiek, to po prostu sprawdza, czy * dowolne * słowo Q jest odtwarzane. – cobbzilla

Powiązane problemy