To jest łamigłówka słowna.
Twój program powinien zaakceptować dwa słowa na standardowym wejściu.
Słowo pierwsze to słowo początkowe. Słowo drugie to słowo końcowe.
Od słowa początkowego musisz dotrzeć do słowa końcowego zmieniając / dodając / usuwając jedną literę na raz. Po każdej modyfikacji musi utworzyć nowe ważne słowo. Dodane litery są dodawane na początku lub na końcu. Możesz usuwać litery z dowolnego miejsca (ale słowo nie może składać się z trzech liter). Uwaga: Nie można zmieniać kolejności liter w celu utworzenia słowa.
Wynikiem programu jest sekwencja słów, które przechodzą od słowa początkowego do słowa końcowego.
Przykład:
Input:
Post Shot
Output:
Post
cost
coat
goat
got
hot
shot
Zwycięzca:
- Program musi zostać uruchomiony w rozsądnym czasie (mniej niż 10 sekund).
- Program, który może wygenerować najkrótszą sekwencję wyjściową do słów nagrody.
- Cynk -> Krzem
- Jeśli więcej niż jeden program otrzyma najkrótszą sekwencję, to najkrótszy program w znakach (ignorując białe znaki).
- Jeśli nadal mamy więcej niż jeden program, należy użyć daty / godziny.
Uwagi:
- Wielkie litery nie są istotne.
- Kod do zbudowania słownika nie jest wliczany do kosztu kodu.
- Nagrody i sekwencje zostaną wygenerowane z:
http://dl.packetstormsecurity.net/Crackers/wordlists/dictionaries/websters-dictionary.gz
- Nagrody i sekwencje zostaną wygenerowane z:
code-golf
word-puzzle
Martin York
źródło
źródło
Odpowiedzi:
Python, 288 znaków
(nie licząc linii czytania słownika)
na wyzwanie
zink
dosilicon
:Słownik zawiera kilka dziwnych słów ...
źródło
guester overturn
(zajmuje trochę czasu) lubregatta gyrally
(nie wraca) ;-)traceroute - 10 znaków
Szczegół
Routery są wstępnie skonfigurowane z włączonym OSPF i ustawione w ten sposób.
I tak, potrzebuję 233614 routerów, aby w pełni obsłużyć wszystkie słowa. :-)
źródło
zink->pink->pank->pani->panic->pinic->sinic->sinico->silico->silicon
naprawdę próbuję z algorytmem Dijkstra (który jest używany w OSPF) i może znaleźć tę ścieżkę wokół 1s, będę zamieść to w osobnym poście później, kiedy zacznę grać w golfa.PHP -
886689644612Ładowanie słownika:
Rzeczywisty kod (wystarczy połączyć oba):
stosowanie:
Wynik:
Powinno to trwać krócej niż 0,5 sekundy dla „Zink Silicon” i krócej niż 1 sekundę dla większości przypadków (czasem dłużej, gdy nie ma rozwiązania, ale nadal powraca).
Wykorzystuje algorytm A * z odległością Levenshteina do oszacowania dolnych granic odległości.
Niektóre interesujące testy:
vas arm
->vas bas bar barm arm
(ze słowem dłuższym niż początek i koniec)oxy pom
->oxy poxy poy pom
regatta gyrally
-> (brak, ale skrypt poprawnie się kończy)aal presolution
-> +8 znakówlenticulated aal
-> -9 znakówacarology lowness
-> 46 chmielucaniniform lowness
-> 51 chmielucauliform lowness
-> 52 chmieluoverfoul lowness
-> 54 chmieludance facia
-> niektóre słowa na ścieżce mają 4 znaki więcej niż oba początkowe / końcoweźródło
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
php -dmemory_limit=256M
.had->hand
nie jest prawidłowym posunięciem, możesz dodać tylko literę na początku lub na końcu. To samo dotyczyvest->verst
:-)Pyton
Ponieważ nie mogłem skompresować kodów dijkstra do kilkuset bajtów, oto moja wersja bez golfa.
Testy
Dodano testy user300
Trochę więcej
źródło
3 <= len(x) <= max(map(len, [nodea, nodeb]))
czy gwarantuje się, że ścieżka nigdy nie będzie przechodzić przez słowo dłużej niż słowo początkowe i końcowe?oxy pom
; najkrótsza ścieżka tooxy->poxy->poy->pom
. Wygląda również na to, że zezwalasz na permutacje i wstawianie w dowolnym miejscu, które nie są dozwolone :-)