"Rozrywki PHP -owe" - zadania

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

"Rozrywki PHP -owe" - zadania

Post autor: swpok »

Chcąc podnieść poziom merytoryczny tegoż forum, a także, z powodu nadmiaru wolnego czasu, nieproporcjonalnie mającego się do chęci kontynuowania moich niektórych projektów postanowiłem stworzyć ten oto topik.

Zapewne większość z was zacznie się głowić "o co chodzi", otóż, chciałbym zapoczątkować zabawę polegającą na rozwiązywaniu różnorakich problemów, oczywiście w PHP. Zasady są proste. Załóżmy, raz na tydzień będzie pojawiało się zadanie do zrobienia. Drogą dedukcji można wywnioskować, że termin składania rozwiązań będzie oscylował pomiędzy datami "premier" problemów. Jeżeli w miarę postępu czasu nikt nie upora się z tym zadaniem będę prezentował podpowiedzi. Więc, każdy powinien się czegoś nauczyć. Nie chce stworzyć, czegoś pokroju "ale jestem super, ja umiem, a wy nie".

Kryteria oceniania:
1 punkt - za wydajność
1 punkt - za spełnienie jednego warunku(x warunków - x punktów[przy zastrzeżeniu, że na przysłowiowej tacy, nie wszystkie warunki muszą być podane. Czasami trzeba będzie się wykazać sprytem, za co oczywiście będą dodatkowe punkty] )
1 punkt - innowacyjność
2 punkty - Przysłanie rozwiązania przed podpowiedziami(każda podpowiedź minus jeden punkt możliwy do uzyskania)

Regulamin:
Pytania, odpowiedzi i sugestie prosiłbym kierować do mnie na PW. W sprawie zadań można porozumiewać się z innymi użytkownikami forum poprzez ShoutBox'a, gg, tudzież inne formy komunikacji ;-] .

Aktualny ranking, będzie prezentowany na stronie : www.swpok.[regulamin forum: punkt 2.13]/ranking.txt
Ostatnio zmieniony 23 lut 2007, 17:01:19 przez swpok, łącznie zmieniany 11 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Zadanie nr. 1 - "Translator dzikich trzynastek" :

Ułóż algorytm, który będzie :
- zamieniał co drugą literę w wyrazie na dużą
- obsługiwał ciągi w postaci(wyraz-spacja-wyraz)
- uwzględniał znaki interpunkcyjne, takie jak ".,;" itd.
- uwzględniał polskie znaki diakrytyczne

Zaprezentuj algorytm z zdaniem : "(...)Ola poszła do zoo, gdzie zobaczyła krokodyla...." .

Mówiąc, w bardziej przyjaznej formie, zadaniem jest napisanie translatora zwykłej polszczyzny do języka "dzikich" trzynastek ;-].

Pierwsza podpowiedź(23.10.2006 , 16:53) :
strtoupper - funkcja zamieniająca wszystkie litery w string -u na duże
Przyda się też pętla for(), dla niektórych przydatna może być również pętla foreach i wyrażenia regularne.

W bardziej wydajnym rozwiązaniu, natomiast nieodzowna staje się znajomość tablicy znaków ASCII ;-] i o niebo "lżejszych" od wyrażeń, funkcji operujących na ciągach.

Druga podpowiedź(26.10.2006 , 17:58) :
Analiza zadania, czyli co musimy zrobić. Zadaniem naszym jest napisać skrypt zamieniający co drugą literę w wyrazie na dużą. Najlepiej jest to sobie rozrysować, czyli np. wyraz "mama" m - 0 , a - 1, m -2, a - 3. Po konwersji wyraz ten powinien, więc wyglądać mniej więcej tak : "MaMa". Skrypt powinien obsługiwać całe ciągi złożone z wyrazów, a także uwzględniać polskie znaki diakrytyczne i interpunkcyjne.
W tym zadaniu będziemy korzystać z własności PHP polegającej na odwoływaniu się do poszczególnych znaków w ciągu jak do elementów w tablicy np.

Kod: Zaznacz cały

$string 'mama';
echo 
$string{0}; // wyswietla m 

Jak było powiedziane w pierwszej podpowiedzi potrzebna nam będzie pętla for().
W, owej pętli iteracyjnie "przejedziemy" po wszystkich literach w ciągu, co drugą literę zmieniając na dużą. Aby to zrobić musimy skonstruować warunek, który przefiltruje nam ciąg, odrzucając wszystkie znaki inne od liter polskiego alfabetu uwzględniając oczywiście polskie znaki diakrytyczne. W tym pomoże nam znajomość tablicy znaków ASCII, którą mamy np. tutaj, a także funkcja wykrywająca czy dany znak jest polskim "ogonkiem" np. funkcja strpos. Po wykryciu pozostaje nam sprawdzenie, czy litera jest rzeczywiście co drugą w wyrazie i zamienienie jej na dużą.

Przykładowa odpowiedź :
http://www.swpok.ovh.org/zadania/list.php?x=pr1

Odpowiedź nadesłana przez HighVoltag'a :
http://www.swpok.ovh.org/zadania/list.php?x=r1

Powodzenia.
Ostatnio zmieniony 30 paź 2006, 15:49:32 przez swpok, łącznie zmieniany 3 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Zadanie nr. 2 - "Archimedes byłby dumny ;-]" brzmi następująco :

Napisz skrypt, który :
- będzie obliczał x podniesiony do potęgi n. Przy założeniach, że x należy do zbioru liczb całkowitych dodatnich, a n jest liczbą naturalną(zakładamy, że do tego zbioru należy, także 0)
- zaimplementuj to w sposób rekurencyjny

Za to zadanie można uzyskać max 7 punktów.
Czas na rozwiązanie : 6 dni.

Powodzenia.

Pierwsza podpowiedź(4.11.06, 20:45)
Kluczowym punktem do prawidłowego rozwiązania tego zadania jest zrozumienie zasad rekurencji. Np. http://pl.wikipedia.org/wiki/Rekurencja lub przykład z PHP : http://webcity.pl/webcity/porady.php/t/69.
Oczywiście niezbędne jest znajomość podstawowych prawideł matematycznych.

Przykładowe rozwiązanie : http://www.swpok.[regulamin forum: punkt 2.13]/zadania/list.php?x=pr2

Nadesłane :
Mati - http://www.swpok.[regulamin forum: punkt 2.13]/zadania/list.php?x=r2-a
Mlody007 - http://www.swpok.[regulamin forum: punkt 2.13]/zadania/list.php?x=r2-b
Ostatnio zmieniony 05 lis 2006, 20:19:02 przez swpok, łącznie zmieniany 7 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox FreeBSD 1024x768
Kontakt:

Post autor: swpok »

Zgodnie z obietnicą prezentuję zadanie nr. 3.
Zadanie nr. 3 - "Pogoda (nie) dla bogaczy"

Napisz skrypt, bądź oskryptowanie, które :
- Dla miast takich jak : Warszawa, Wrocław, Szczecin pobierze informacje o aktualnej temperaturze(w *C), zachmurzeniu, ciśnieniu, a także ew. opadach.
- Zapisze te informacje w formie XML -owej
- Przedstawi podane wiadomości w formie graficznej jak i tekstowej.

Za to zadanie można uzyskać maksymalnie 12 punktów.
Czas na rozwiązanie 21 dni.

Powodzenia.

EDIT: Z uwagi na poziom zadania, termin oddania przedłużam o 7 dni. Pojutrze zostanie opublikowana pierwsza podpowiedź, a za 2 dni dokładna analiza zadania.

Pierwsza podpowiedź(15.11.2006, 13:37) :
Do tego zadania przyda się znajomość :
- biblioteki CURL
- biblioteki SimpleXML
- najlepiej programowania obiektowego

Najlepiej napisać dwie klasy, z których jedna będzie pobierać, przetwarzać i w końcu zapisywać dane do XML -a. Kolejna klasa natomiast miała by za zadanie odczytywać owe informacje i prezentować je.

Druga podpowiedź(18.11.2006, 15:01) :
Naszym zadaniem jest napisanie oskryptowania, które by to pobierało odpowiednie informacje z strony internetowej, następnie zapisywało do formatu XML, aby później sprezentować nam owe dane w przystępnej formie. W przypadku takich zadań najlepszym rozwiązaniem będzie podzielenie funkcjonalności między parę klas. Dzięki, temu zyskujemy niepowtarzalną przejrzystość kodu. Moim zdaniem, najważniejszy tuż po wydajności aspekt współczesnych skryptów i aplikacji. Dość tego gadania, lepiej przystąpmy do pracy.

Jak już wspominałem podane nieco wyżej warunki zadania spełnimy za pomocą dwóch klas. Omówmy funkcjonalność pierwszej. Główne zadanie tej funkcji to pobranie zawartości strony, gdzie prezentowane są aktualne dane pogodowe, następnie "sprasowanie" tych informacji za pomocą wyrażeń regularnych , a na koniec zapisanie tego w formacie XML.
Niezastąpione w tym skrypcie okażą się biblioteki takie jak : CURL i SimpleXML. Aby, mieć aktualne wyniki atmosferyczne, skrypt uruchamiamy cyklicznie, za pomocą np. CRON -a, lub Windows'owego menadżera zadań(SCHA£KS).

Przyszedł czas, na spełnienie drugiej części warunków zadania, tj. prezentacji wyników. W tym celu piszemy prostą klasę, która przeparsuje dokument XML, a następnie w wybranej przez nas formie zaprezentuje wynik.

Podsumowując, rozwiązując to zadanie nauczysz się najważniejszych wg. mnie zagadnień programowania obiektowego tj. enkapsulacji danych jak i rozdzielania warstw aplikacji, między warstwę "biznesową", a "prezentacji". Są to podstawy, jednak jakże nieodzowne dla kogoś kto wiąże swoją przyszłość z programowaniem(niezależnie w jakim języku ;-]).

EDIT :
Z uwagi na to, że jak na razie nikt nie przysłał do mnie prawidłowego rozwiązania, prezentuje przykładową odpowiedź na pierwszą część zadania : http://www.swpok.[regulamin forum: punkt 2.13]/zadania/list.php?x=pr3

Do niedzieli czekam na rozwiązania drugiej części zadania, za którą można uzyskać 6 punktów.
Ostatnio zmieniony 23 lis 2006, 21:29:07 przez swpok, łącznie zmieniany 7 razy.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Zadanie nr. 4 - "Zabawy kryptograficzne"

Dany jest zakodowany ciąg : UEhQIGplc3Qgc3VwZXIg
Wasze zadanie polega na tym, aby podać nazwę algorytmu, w którym został zakodowany owy string, a także ciągu przed kodowaniem.

Za to zadanie można uzyskać maksymalnie 2 punkty.
Czas na rozwiązanie : 3 dni.

Powodzenia.

Rozwiązanie :
Ciąg został zakodowany algorytmem base64. Jego pierwotna treść oznajmia nam : "PHP jest super".
Niestety nikomu nie chciało/udało się rozwiązać tego zadania ....
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Z uwagi na znikome zainteresowanie zadaniami wstrzymuje prace nad następnymi problemami. Może to przez ten brak czasu ;-]. Następne zadanie pojawi się na początku szkolnej przerwy świątecznej tj. w piątek 22 grudnia. Mam nadzieję, że wtedy już nikt nie będzie miał wymówki.

Chciałbym także przypomnieć, iż zadań w sumie planuje 7. Osoba, która zbierze najwięcej punktów uzyska stopień moderatora działu PHP, "na mój koszt" ;-]
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Zadanie nr. 5 - "Dalsze STRING'owe dywagacje"

Napisz funkcje, która zwróci ciąg w odwrotnej kolejności znaków.
Zaprezentuj wynik działania funkcji z ciągiem : "Ola, idź do przedszkola !".

Za to zadanie maksymalnie można uzyskać 6 punktów.
Czas na rozwiąznie : 7 dni.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Awatar użytkownika
swpok
Posty: 510
Rejestracja: 25 wrz 2005, 13:50:56
Lokalizacja: Syreni gród.
Płeć: Mężczyzna
User Agent: Firefox Windows 1024x768
Kontakt:

Post autor: swpok »

Konkurs jak widać umarł śmiercią naturalną. Zostawiam podczepiony topik dla potomnych, może za jakiś czas użytkowników tegoż forum ogranie chęć rozwiązania podobnych zadań.
Dzień bez uszczypliwości powinno siê uwa¿aæ dniem straconym.
Zablokowany