Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

6 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> Rozmowy na temat prac konkursowych
rzymek01
post 3.11.2010, 23:49:13
Post #1





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


Wydzielone z: http://forum.php.pl/index.php?s=&showt...st&p=803748 - DeyV

------------------------



nie mam jak zainstalowac, na płycie mam live bez żadnego serwera nic, a jak chce cos instalowac typu serwer etc to chce już zainstalowanego systemu

PS. nie ma co juz kombinowac, pozostawię starą wersję co wysłałem juz jakis czas temu z tą moją funkcją, która w językach kompilowanych na pewno działałaby szybciej, ale php jest interpretowany i tutaj z tym jest różnie :/

Już jest północ to można pisać o zadaniach biggrin.gif

Ten post edytował DeyV 4.11.2010, 08:55:00


--------------------
:]
Go to the top of the page
+Quote Post
flashdev
post 3.11.2010, 23:59:42
Post #2





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(rzymek01 @ 3.11.2010, 23:49:13 ) *
Już jest północ to można pisać o zadaniach biggrin.gif


Spieszy Ci się zegarek winksmiley.jpg

Edit:
No i koniec konkursu.

Ten post edytował flashdev 4.11.2010, 00:00:41


--------------------
Go to the top of the page
+Quote Post
rzymek01
post 4.11.2010, 00:00:45
Post #3





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


no co ty, juz mam 2 po biggrin.gif


--------------------
:]
Go to the top of the page
+Quote Post
Pawel_W
post 4.11.2010, 00:10:00
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


no to nie wiem, wklejamy? biggrin.gif
Go to the top of the page
+Quote Post
rzymek01
post 4.11.2010, 00:14:32
Post #5





Grupa: Zarejestrowani
Postów: 592
Pomógł: 62
Dołączył: 3.08.2006

Ostrzeżenie: (0%)
-----


co mogę napisać,
patrząc z czysto algorytmicznego punktu widzenia, istotne części programu to:
1. generowanie fibo
2. dekodowanie ciągu
3. szukanie parametrów

ad1. tutaj jedyne co wymyśliłem, to liczenie każdego wyrazu ciągu modulo 36, aby od razu mieć pozycje w alfabecie i nie wyobrażam sobie poza tym liczenia fibo bez modulo 36, bo nie wiem jaki typ danych pomieściłby np. milionowy + jeden wyraz ciągu

ad2. i ad3. tutaj wymysliłem coś takiego, że dekoduje od lewej i od prawej równolegle i od razu porównuje czy to co odkodowałem to przypadkiem nie cyfra, bo w całym ciągu moga wystąpić tylko cyfry przy parametrach,
zaletą jest to, że o ile parametry nie znajdują się na samym środku, to nie muszę dekodować całego ciągu i ogolnie w miare szybko znajduje parametry,
wadą tego rozwiązania jest język PHP biggrin.gif, tzn. własna funkcja napisana PHP jest zawsze wolniejsza od wbudowanych, także nie wiem, czy akurat w przypadku PHP nawet preg_match by nie było szybsze, teoretycznie nie, ale trzeba miec na uwadze co napisalem wyzej

Generowanie prostokątów mam po bozemu, idę sobie po kolei jak każą, operacje to same dodawania i raz na obieg modulo, także O(K*W), ale przy ograniczeniu K i W do 20, sądze, że ten fragment kodu ma być po prostu poprawny i nie jest aż tak istotna złozoność budowania tych postokątów

PS. no i złożoność mojego programu:
n - długość ciągu
punkty 1,2 i 3 w czasie O(2n)=O(n)
prostokąty w czasie O(3*K*W)=O(K*W)

Ten post edytował rzymek01 4.11.2010, 00:17:09


--------------------
:]
Go to the top of the page
+Quote Post
flashdev
post 4.11.2010, 00:14:47
Post #6





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(Pawel_W @ 4.11.2010, 00:10:00 ) *
no to nie wiem, wklejamy? biggrin.gif


Dekodowanie ciągu:

  1. $length = strlen($argv[1]);
  2.  
  3. $rot_str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  4. $rot_arr = array('A' => 0, 'B' => 1, 'C' => 2, 'D' => 3, 'E' => 4, 'F' => 5, 'G' => 6, 'H' => 7, 'I' => 8, 'J' => 9, 'K' => 10, 'L' => 11, 'M' => 12, 'N' => 13, 'O' => 14, 'P' => 15, 'Q' => 16, 'R' => 17, 'S' => 18, 'T' => 19, 'U' => 20, 'V' => 21, 'W' => 22, 'X' => 23, 'Y' => 24, 'Z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35);
  5. $rot_len = 36; //strlen($rot_str);
  6.  
  7. $prev1 = $length;
  8. $prev2 = 0;
  9. for( $i = 0; $i < $length; ++$i ){
  10. $curr = ($prev2 + $prev1)%$rot_len;
  11. $prev2 = $prev1;
  12. $prev1 = $curr;
  13. $argv[1][$i] = $rot_str[($rot_arr[$argv[1][$i]] - $curr + $rot_len ) % $rot_len];
  14. }
  15.  
  16. $params = array();
  17. preg_match('/K([0-9])+/', $argv[1], $params['k']);
  18. preg_match('/W([0-9])+/', $argv[1], $params['w']);
  19. preg_match('/A([0-9])/', $argv[1], $params['a']);
  20. preg_match('/Z([0-9])/', $argv[1], $params['z']);
  21.  
  22. $cols = $params['k'][1] + 0;
  23. $rows = $params['w'][1] + 0;
  24. $min = $params['a'][1] + 0;
  25. $max = $params['z'][1] + 0;


W sumie, tej części kody nawet nie optymalizowałem. Udało się komuś pozbyć tej pętli? smile.gif
Testowałem wersję z array_map, ale była nawet trochę wolniejsza dla krótkich oraz długich ciągów.


--------------------
Go to the top of the page
+Quote Post
Pawel_W
post 4.11.2010, 00:15:46
Post #7





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


http://wklej.org/hash/d9a8df00ee8/

no to ja zaszaleje, cały kod smile.gif
Go to the top of the page
+Quote Post
starach
post 4.11.2010, 00:31:42
Post #8





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

Ostrzeżenie: (0%)
-----


Cytat(Pawel_W @ 4.11.2010, 00:15:46 ) *
http://wklej.org/hash/d9a8df00ee8/

no to ja zaszaleje, cały kod smile.gif
Wszystkie zmienna walnął z pojedyńczych liter ale o define('LF', "\n") już zapomniał. ;P

Ładny kod. Niestety ja zdążyłem napisać tylko dekodowanie fib'a i mnie choroba do reszty rozłożyła... nadal jestem ledwo ciepły, ale ciekawość wzięła górę. winksmiley.jpg
Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2010, 00:32:16
Post #9





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Pawel_W - wyprzedziles moj kod, ale chyba brakuje ci "\n" za 3cim prostokatem


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
flashdev
post 4.11.2010, 00:35:48
Post #10





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(Pawel_W @ 4.11.2010, 00:15:46 ) *
http://wklej.org/hash/d9a8df00ee8/

no to ja zaszaleje, cały kod smile.gif


Zrobiłem po 5 testów w każdej serii po 500 pomiarów dla Twojego i mojego dekodowania.
Kod
Domyslne wejscie: 'I3OHUI5Y0UXU7VQS9U63C'

Twoje:
av:    0.00082    sd:    0.00265
av:    0.00068    sd:    0.00030
av:    0.00083    sd:    0.00052
av:    0.00071    sd:    0.00035
av:    0.00075    sd:    0.00038

moje:
av:    0.00094    sd:    0.00093
av:    0.00060    sd:    0.00031
av:    0.00057    sd:    0.00030
av:    0.00058    sd:    0.00029
av:    0.00062    sd:    0.00034

Dluzszy ciag wejsciowy: str_repeat('I3OHUI5Y0UXU7VQS9U63C', 1e3)

Twoje:
av:    0.00078    sd:    0.00050
av:    0.00066    sd:    0.00031
av:    0.00067    sd:    0.00035
av:    0.00067    sd:    0.00031
av:    0.00067    sd:    0.00034

moje:
av:    0.00059    sd:    0.00031
av:    0.00062    sd:    0.00033
av:    0.00059    sd:    0.00031
av:    0.00060    sd:    0.00032
av:    0.00057    sd:    0.00026


Trudno powiedzieć żeby były jakieś znaczące różnice.

Edit:
Poniżej podaję kod, którym mierzę czasy. Może się komuś przyda.
http://wklej.org/id/412325/

Ten post edytował flashdev 4.11.2010, 00:52:24


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2010, 00:39:15
Post #11





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Zrob dluzsze pomiary. Oficjalne testy sa po 1000 razy. U mnie daje to jakies 48s dla pojedynczego odpalenia ciagu z instrukcji.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
flashdev
post 4.11.2010, 00:41:13
Post #12





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(dr_bonzo @ 4.11.2010, 00:39:15 ) *
Zrob dluzsze pomiary. Oficjalne testy sa po 1000 razy. U mnie daje to jakies 48s dla pojedynczego odpalenia ciagu z instrukcji.


Zrobiłem 4 * 5 serii po po 500 pomiarów, czyli w sumie 4 * 2500 pomiarów.
Funkcję, którą mierzę czas podałem już wcześniej. Wykorzystuję require.

Aha i av to średnia oczywiście z tych 500 pomiarów, a sd to odchylenie standardowe.

Ten post edytował flashdev 4.11.2010, 00:42:33


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2010, 00:42:50
Post #13





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


ah, niedoczytalem


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
flashdev
post 4.11.2010, 00:44:28
Post #14





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(Pawel_W @ 4.11.2010, 00:15:46 ) *
http://wklej.org/hash/d9a8df00ee8/

no to ja zaszaleje, cały kod smile.gif


@Pawel_W bardzo fajnie to zrobiłeś z jednym preg`iem. Ale sam już się nie brałem za optymalizację tego bo nie wiem czy był sens. Wie ktoś może dokładnie jakie jest ograniczenie co do długości paramteru podawanego przy wywołaniu programu w linii poleceń?


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2010, 00:50:47
Post #15





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


@Pawel_W

Kod
preg_match_all('#([KWAZkwaz]{1}[0-9]{1,2})#', $d, $m);


A co jak w odkodowanym kodzie bedzie "....K32XXXXXW7XXXX..."

to jaka wartosc bedzie miec K ?


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
8rol
post 4.11.2010, 00:52:23
Post #16





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 10.10.2009

Ostrzeżenie: (0%)
-----


@Pawel_W, spróbuj uruchomić swój skrypt z parametrem SLK92YNR (tj. K5W5A2Z7). Wydaje mi się, że coś jest wtedy nie tak.
Go to the top of the page
+Quote Post
flashdev
post 4.11.2010, 00:57:53
Post #17





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(8rol @ 4.11.2010, 00:52:23 ) *
@Pawel_W, spróbuj uruchomić swój skrypt z parametrem SLK92YNR (tj. K5W5A2Z7). Wydaje mi się, że coś jest wtedy nie tak.


Sprawdziłem, działa dobrze:

Kod
array(4) {
  ["K"]=>
  string(1) "5"
  ["W"]=>
  string(1) "5"
  ["A"]=>
  string(1) "2"
  ["Z"]=>
  string(1) "7"
}


--------------------
Go to the top of the page
+Quote Post
zegarek84
post 4.11.2010, 01:04:46
Post #18





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


http://wklej.org/id/412327/


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
dr_bonzo
post 4.11.2010, 01:12:05
Post #19





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A to moj kod: http://paste-it.net/public/je4eef6/


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
8rol
post 4.11.2010, 01:28:03
Post #20





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 10.10.2009

Ostrzeżenie: (0%)
-----


dr_bonzo, wydaje mi się, że masz pewien problem z odbieraniem parametrów, dla przykładu: TN156JBHY (k5aw6a2z7).
Go to the top of the page
+Quote Post

6 Stron V   1 2 3 > » 
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.04.2024 - 20:05