CodeCup.pl
Na joggerze Albiego znalazłem link do ciekawego serwisu CodeCup.pl, w którym można wziąć udział w turnieju kodowania w PHP. Co jakiś czas publikowane jest nowe zadanie. Od momentu publikacji, wraz z upływem czasu, aż do chwili rozwiązania go przez pierwszą osobę, rośnie punktowa stawka za przesłanie poprawnego kodu. Każda następna osoba, otrzymuje odpowiednio mniejszą liczbę punktów.
Dzisiaj udało mi się rozwiązać za pierwszym podejściem zadanie 15 (po ogłoszeniu wyników postaram się podzielić się moim kodem). Muszę przyznać, że
całkiem ciekawa wprawka w wymyślaniu algorytmów przydająca się jako odskocznia od monotonnego klepania serwisów www. Trochę mi tego brakowało ;). Zachęcam wszystkich programujących w PHP do udziału - zawsze ciekawsza rywalizacja jak będzie nas wiecej.
Spróbowałem też sił w pierwszym z 1 zadaniem treningowym. I tutaj zaliczyłem zonka. Moje rozwiązanie zostało uznane za niepoprawne. Kombinowałem, kombinowałem i w końcu się poddałem - zajrzałem do odpowiedzi. Jak się okazało, przykładowe rozwiązanie było prawie, że analogiczne, różniło się tylko w detalach. Jednak te detale spowodowały, że coś było nie tak. Zrobiłem jednak test polegający na porównaniu wyników dla wszystkich możliwych przypadków zwracanych przez wzorcowe rozwiązanie i moje. Wyniki zgadzały się z dokładnością do typu... Hmm, czyżby coś nie tak w danych testowych? Napisałem do admina przesyłając mu mój kod, zobaczymy co powie ;). Swoją drogą, to w tym serwisie brakuje mi jednej rzeczy przy zadaniach treningowych i rozwiązanych konkursowych. Są to właśnie testowe dane.
Kod testowy do pierwszego zadania treningowego poniżej. Jak ktoś ma jakieś uwagi, propozycje poprawek, itp. do tego kodu, to z przyjemnością poczytam. 'code1' to moja funkcja, 'code2' to gotowiec.
<?php
function code1($hours, $minutes) {
$minutesAngle = 6 * $minutes;
$hoursAngle = ($hours % 12) * 30 + (int)($minutes / 12) * 6;
$angle = abs($minutesAngle - $hoursAngle);
if (180 < $angle) {
$angle = 360 - $angle;
}
return (float)$angle;
}
function code2 ($godz, $min)
{
if ($godz>=12) $godz=$godz-12;
$l_godz=$godz*5;
$l_min=$min;
$l_godz+=floor ($min/12);
$roznica=abs($l_godz-$l_min);
if ($roznica>30) $roznica=60-$roznica;
return ($roznica*6);
}
for ($h = 0; $h <= 23; $h++) {
for ($m = 0; $m <= 59; $m++) {
$angle1 = code1($h, $m);
$angle2 = code2($h, $m);
$ok = $angle1 === $angle2 ? '[OK]' : '[FAILED]';
var_dump($angle1);
var_dump($angle2);
print "$h:$m - $angle1, $angle2 => $ok<br />";
}
}
?>
Kategorie: Studia i nauka, Techblog, Webdesign Trackback URL

Faajne, dołączyłem do zawodników ;) Zadanie 15 rozwiązane ;)
Ciekawa stronka, też chciałem spróbować.. I pomimo moich testów wygląda, że mam dobrze napisane, a strona tego nie przyjmuje.
A głupio mi pisać do adminów, bo może rzeczywiście jednak mam błąd ;)
No raczej jest błąd :>. U mnie przeszło bez problemu, więc innym też powinno :D Szukaj, ja zamiast mniejsze równe dałem równe i szukałem kruczka przez 30 minut ;)
chester: pewnie masz jakiś błąd, mi też się wydawało że ok, aż mi Albi nie wpisał w ostatnim ‘abcd’ :P
@BTM: prorok jesteś czy co?
rzeczywiście na ‘abcd’ się wywala ;]
Zmień < na <= w for() jak robisz tak samo jak ja :P
Heheh, fajnie tak popatrzeć na skrypty dwóch różnych programistów do jednego zadania. Naprawdę ciekawie to wygląda i pokazuje, że większość myśli identycznie :D