Developing a wheel for a second time
Klucz perl ; 2006-12-31 15:48:52 (2006-12-31 20:51:11); komentarze (5) i trackbacki (0)
...a jak mi się nudzi to programuje w PERLu. Dziś stwierdziłem, że zrobię skrypcik do wysyłania SMSów przez SMSowe API Ery. Pobawiłem się i proszę: SendSMS-Era 1.0. Pierwszy raz zalecam uruchomić po prostu i patrzeć co się dzieje.
Wymagania:
Zapraszam do używania i zgłaszania błędów.
Aktualizacja: SendSMS-Era w wersji 1.1 obsługuje też wysyłanie z bramki sponsorowanej.
Klucz programowanie perl ; 2006-05-15 22:39:35; komentarze (8) i trackbacki (0)
TetraVex to jednoosobowa gra planszowa o wyjątkowo prostych zasadach. Jest plansza w postaci prostokąta, na której są kwadratowe pola. Są też klocki - jest ich tyle ile pól. Każdy klocek ma na brzegach cyfrę. Gra polega na tym, żeby poukładać klocki na polach tak, żeby stykające się klocki miały na dotykających się brzegach tę samą liczbę. Proste? Tak, dla planszy 2x2 albo 3x3. Ale przy 6x6 jest pewien problem.
Ja mam czasem takie przebłyski, że muszę coś napisać w PERLu. No i napisałem - solver do tetravexa.
Działa on na zasadzie przeszukiwania drzewa rozwiązań z odcinaniem. Ma ono głębokość n i każdy węzeł ma 'zagłębienie - n' gałęzi. Daje to n silnia możliwości. Jednak w każdym momencie można stwierdzić czy dalsze przeszukiwanie drzewa ma sens.
Solver działa to funkcja rekurencyjna operująca na jednej kolejce i jednym stosie. Funkcja sprawdza warunek czy może się dany klocek na danym miejscu znaleźć. Jeżeli tak, to wrzuca go na stos, usuwa z kolejki, i przekazuje kolejke i stos rekurencyjnie do siebie samej. Jeżeli dany klocek nie pasuje do miejsca, przewija kolejke i próbuje jeszcze raz. Jeżeli cała kolejka została przewinięta i żaden klocek nie pasował, to zwraca niemożliwość rozwiązania. Jeżeli wynik z wywołania rekurencyjnego to zero czyli brak rozwiązań, to zdejmuje element ze stosu i ładuje na koniec kolejki.
Skrypt przyjmuje dwa argumenty z linii poleceń - szerokość i wysokość planszy. Potem czyta odpowiednią ilość czteroznakowych ciągów oddzielonych spacją. Pierwszy z tych znaków to cyfra na górze klocka, i potem kolejno zgodnie ze wskazówkami zegara - cyfra prawa, dolna i lewa.
Sprawdzanie czy dany klocek może się znaleźć na odpowiedniej pozycji jest sprawdzane poprzez porównanie odpowiednich jednoznakowych podciągów.
Nie ma żadnego zarządzania błędami we wprowadzaniu danych. Jeżeli zestaw klocków jest niemożliwy do ułożenia na danej planszy to program to wypisze. Działa on koszmarnie wolno, dla planszy 6x6 jak jest się szczęśliwym to można czekać kilka minut [teoretycznie jednak może trafić w pierwszej próbie]. Jak każdy mój program - mało testowany.
Jest Open-Source do nauki PERLa. Jest dostępny jako tetravex-solver.