Java i Polski SPOJ

0

Ostatnio trochę się trudziłem z jednym zadankiem ze strony SPOJu (http://pl.spoj.pl). Myślę nawet, żeby za jakiś czas (jak podciągnę trochę moje umiejętności) założyć tam konto i spróbować zrobić więcej zadań. Jak na razie wiem, że jeszcze mi brakuje, a więc wracam książki i tutków :)
Ale zawczasu mam pytanie do profesjonalistów Javy.
Czy jest sens robić tamte zadania w Javie? Jak wiadomo, język javy nie jest najlepszym wyborem jeżeli zależy nam na wydajności programu, a w zadaniach SPOJu głównie chodzi o szybkość i czas, który w większości wypadków jest mega krótki.
Oczywiście można robić zadania dla siebie, ale chodzi mi o wykonanie ich w taki sposób aby zostały zaakceptowane przez SPOJ.

Pozdrawiam,
V

0

Czy jest sens robić tamte zadania w Javie?
Jest sens, ale licz się z tym, że w rankingach nie wygrasz z programami w C czy C++.

0

w 9/10 przypadkow jak masz dobra zlozonosc obliczeniowa to przejdzie Ci w dowolnym jezyku

0

interpretowany, nawet najlepiej musi przegrać z kompilowanym. zauważ, który z języków wygrywa. spoj jest stary (niestety) o setki procent poprawiają czas zabawki z buforowaniem wejścia, a nie dowcip algorytmu. Choć jakoś ostatnio... dostałem coś od Spoja, że niby po miesiącach (a może i latach) jednak nie podobają mu się moje rozwiązania. A bo się niby nie kompiluje, albo że za wolno, nie oglądałem (bom leniwy).

0

No to wszystko jasne. Na rankingu nawet mi nie zależy. Chciałem je porobić dla siebie, ale nie ukrywam, że fajne jest to sprawdzanie poprawności przez maszynę.
Może znacie coś podobnego ale bardziej dostosowanego do Javy? Jakieś takie fajne zadanka do ćwiczenia, podzielone na różne poziomy trudności (żeby od razu nie rzucać się na głęboką wodę).

0

na tak sformułowane pytanie znajdziesz 1000 odpowiedzi u gugla, a pomiar czasu to zupełnie inna historia.
ja odnoszę się do ideone. bo czemu nie, kilo w sevr już dawno przestało ważyć kilo, ale jakiś odnośnik to jest.

0

Trochę SPOJowych zadań robiłem w wolnym czasie właśnie w Javie. Jeżeli nie zależy ci na rankingu to nie jest to taki zły pomysł.
In plus:

  • stosunkowo prosty język
  • java jest dość wdzięcznym językiem jeśli chodzi o opisywanie problemu. Nie ma uzależnienia szybkości od użycia np. wstawki w asm czy jakiejś magii na wskaźnikach (choć to też wada).

In minus:

  • dużo rzeczy, do których używałeś bibliotek, trzeba napisać samemu
  • nie można pobawić się w naprawdę zaawansowane rozwiązania jak wspomniany wyżej ASM.
  • część klas ze standardowego API jest wyłączona.

Sam silnik SPOJ też ma pewną wadę związaną z Javą. Otóż nie można sobie stworzyć własnego repozytorium z kodem. Tym samym trzeba za każdym razem wrzucać do rozwiązania dużo kodu typu szybkie odczytywanie I/O czy jakieś własne bufory do pisania.

0

Dlatego właśnie zapytałem o coś podobnego. Nie chodzi mi o same stronki z zadaniami, bo to sobie znajdę w google sam. Bardziej miałem na myśli serwis gdzie są zadania i jest dodatkowo narzędzie, które sprawdza kod. Na razie będę przerabiał SPOJ aby sobie poćwiczyć, ale jakby były jeszcze podobne stronki to z chęcią bym je zobaczył też.

0
Vendetta napisał(a):

Dlatego właśnie zapytałem o coś podobnego. Nie chodzi mi o same stronki z zadaniami, bo to sobie znajdę w google sam. Bardziej miałem na myśli serwis gdzie są zadania i jest dodatkowo narzędzie, które sprawdza kod. Na razie będę przerabiał SPOJ aby sobie poćwiczyć, ale jakby były jeszcze podobne stronki to z chęcią bym je zobaczył też.

To sobie sprawdź, całkiem przyjemne zadania http://acm.timus.ru/

1
Vendetta napisał(a)

Może znacie coś podobnego ale bardziej dostosowanego do Javy? Jakieś takie fajne zadanka do ćwiczenia, podzielone na różne poziomy trudności (żeby od razu nie rzucać się na głęboką wodę).

Mam dla Ciebie idealne rozwiązanie - Project Euler; Jest to coś w rodzaju SPOJ'a, lecz nie chodzi o czas, a o wyjście; Możesz wykonywać zadania w dowolnym języku (nawet długopisem na kartce), a podajesz wynik, który jest najważniejszy; Masz poziomy zaawansowania użytkownika, nagrody na ilość rozwiązanych zadań z danej dziedziny (np. ciągu Fibonacci'ego, trójkąta Pascala itd.), zadań jest 351 - od najłatwiejszych po bardzo trudne, do tego po rozwiązaniu zadania dostajesz możliwość udziału w lokalnym forum dla danego zadania i pochwalenia się efektywnością własnego kodu; Do tego masz rankingi, statystyki itd. itp.;

Do tego zwróć uwagę na wybór języków (na chwilę obecną):

ID Language Number of Users Average Percent Solved Score Index
1 PARI/GP 69 27% 100
2 Mathematica 1019 15% 90
3 Python 19735 9% 77
4 Haskell 3766 9% 64
5 C/C++ 21673 7% 61
6 Perl 1991 9% 59
7 Java 13524 7% 58
8 Sage 138 13% 56
9 APL/J/K 208 12% 56
10 C# 6983 7% 54
11 ML 366 10% 51
12 Ruby 3311 7% 49
13 Maple 249 10% 48
14 LISP 988 8% 48
15 Delphi 415 9% 47
16 Scala 868 8% 47
17 F# 783 8% 46
18 MUMPS 18 18% 45
19 Matlab 1667 7% 45
20 BASIC 1060 7% 42
21 RPL 13 19% 42
22 D 124 10% 42
23 Frink 6 26% 40
24 Magma 18 16% 40
25 Pencil/Paper 711 7% 40
26 Scheme 689 7% 40
27 Pascal 529 7% 38
28 Spreadsheet 372 7% 36
29 Tcl 59 10% 35
30 Clojure 778 6% 34
31 Racket 79 9% 34
32 Lua 272 7% 34
33 Assembler 129 8% 34
34 Fortran 245 7% 33
35 Forth 28 11% 32
36 Go 166 7% 31
37 Smalltalk 79 8% 30
38 R 322 6% 30
39 GAP 21 11% 29
40 Component Pascal 3 29% 27
41 ECMAScript 537 5% 27
42 Erlang 512 5% 27
43 Q 46 8% 26
44 PHP 2006 4% 26
45 COBOL 10 12% 24
46 AutoHotkey 5 17% 23
47 Prolog 93 6% 23
48 Boo 15 10% 23
49 Factor 44 7% 23
50 Ada 82 6% 23
51 PowerShell 45 6% 19
52 LabVIEW 84 5% 19
53 SAS 5 13% 18
54 Logo 26 6% 17
55 REBOL 11 8% 16
56 Nemerle 8 9% 16
57 Octave 36 5% 15
58 Squirrel 10 7% 14
59 TECO 7 8% 13
60 Maxima 2 20% 12
61 Open Quark 6 6% 9
62 Julia 4 4% 4
63 Scratch 2 2% 1
64 Bourne Shell 2 1% 0
Jak widać Java jest dość popularna; Zainteresuj się tą stronką jeśli chcesz sprawdzić swoje umiejętności w Java'ie;

Zapomniałem dodać - stronka nie jest polska, więc całość napisana jest w języku angielskim (także treść zadań); Użytkowników jest przeszło 300.000 z całego świata, więc musi być taki język a nie inny; Jeśli nie umiesz na tyle angielskiego żeby zrozumieć jakikolwiek tekst - możesz skorzystać z tłumacza Google - www.translate.google.pl

0

Obie podane stronki są bardzo ciekawe. Już nawet porobiłem parę zadanek. Na razie bardziej się skupiłem na Project Euler, bo można tam sprawdzać swoje wyniki. Dzięki ;-)

0

zauważ, co podsunął Furiat, czasem żałośnie powolne PARI/GP trzyma się dobrze. No może poza paroma "drobiazgami" potrafi mnożyć jak człowiek, to znaczy zupełnie inaczej :-)

0

Xitami, możesz rozwinąć bardziej swoją myśl? Do końca nie mogę wywnioskować czy wyraziłeś się pozytywnie o Project Euler czy negatywnie :)

1

fajne, ze swoimi zadami i waletami. do zaliczenia potrzebna tylko odpowiedź, nie jest ważne jak i w jakim czasie otrzymana. Dla własnej frajdy bomba, do wyścigów ... a kto by się przejmował.

0

Aha. No mi właśnie takie pasuje. Nie zależy mi na rankingu, robię te zadania dla siebie. Choć byłoby fajniej, gdyby sprawdzany był jeszcze kod javy. Ale jak to mówią, jak się nie ma co się lubi to się lubi co się ma :)

0

Java na spoju srednio daje rade. Przy prostych problemach i czesci srednich jeszcze mozna cos wyciagnac, ale jest spora czesc zadan, w ktorych czasy wykonania musza byc ponizej 1s a algorytmy sa dosyc zlozone, tutaj niestety java sie raczej nie nada. Jednak jesli mowisz, ze az tak duzego poziomu na razie nie masz, to latwe zadania mozesz z powodzeniem robic sobie. Tylko po czesci java bardzo upraszcza pisanie np. przy zadaniach typu dodawanie/odejmowanie duzych liczb itd. Mamy BigInty w javie, gdzie napisanie kodu sprowadza sie do zadeklraowania zmiennych i uzycia jednej metody.

W c/c++ juz gotowych bibliotek nie mamy i ten algorytm trzeba pisac samemu. Ja tam spoja lubie, zawsze w wolnym czasie cos tam sobie skrobie i juz sporo mam zrobione.
Niektore zadania sa naprawde fajne, np. te w jezyku brainfuck, oj meczylem sie z jednym troche czasu ;)

0

Post bo za dlugo troche na komentarz ;)

Nie do konca. Ta ostra optymalizacja io itp. "sztuczki" to dla zapalencow, ktorzy chca miec najnizsze czasy. Jednak zeby zaliczyc samo zadanie zazwyczaj optymalizacja nie wystarcza. Trzeba jeszcze pomyslec i dobra odpowiednie algorytmy czasami przerobic na potrzeby zadania.

Np. to zadania(kiedys challenge) http://pl.spoj.pl/problems/FACTORIZ/ spedzilo mi sen z powiek nie powiem. Uzylem w koncu sita atkina-bernsteina odpowiednio przerobionego + sprytne rozbijanie i wypisywanie.

Czy to bardzo podobne do tamtego, jednak sporo latwiejsze.
http://pl.spoj.pl/problems/DYZIO2/
Tutaj tez zadne super optymalizacje nie pomoga bez odpowiedniego przemyslenia. Trzeba zrobic wypisywanie w czasie stalym(liniowym), a zanim do tego doszedlem to tez meczylem sie z optymalizacja io, ktora urwala mi moze pol sekundy, ale to bylo i tak za malo. W koncu po wpadnieciu na pomysl zbilem do 0.09 ;p

Przy latwych zadaniach to co mowisz sie sprawdzi, ale przy trudniejszych juz jedyne co da, to zmniejszy troche czas, ale nie wplynie na samo zaliczenie.

0

ten Euler to porażka, jakbym chcial matme robic to poszedlbym do szkoly.

W SPOJu chociaz ciekawe problemy maja

1 użytkowników online, w tym zalogowanych: 0, gości: 1