Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Rozmowa Kwalifikacyjna - programista, Sorki za spam
Robert1985
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 7
Dołączył: 5.08.2009
Skąd: Tychy

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


Dla zainteresowanych podaję pytania jakie miałem na rozmowie kwalifikacyjnej , do rozwiązania w dowolnym języku ,można było w PHP.
1.Napisać prosty kalkulator umożliwiający: dodawanie ,odejmowanie, mnożenie, dzielenie.
W przypadku dzielenia przez zero program ma generować błąd.
2.Napisać funkcję ,która zamieni podaną przez użytkownika zmienną typu String na Integer. Wykorzystać ją w programie i zaprezentować wyniki.
3.Napisać program ,który zamnieni w podanym ciągu Duże litery na małe i na odwrót.

Czas około 30 minut.
Jeżeli będzie zainteresowanie udostępnię rozwiązania. Choć zadania nie są trudne. Ale w końcu to przedszkole.
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jeśli chodzi o tej jeden konkretny przypadek (http://forum.php.pl/index.php?s=&showt...st&p=654420):
Kod
tO jEST pRZYKLADOWY tEKST

to bym po prostu użył ucwords. (IMG:style_emoticons/default/biggrin.gif) Wykonanie Twojego kodu 1000x zabrało u mnie 1.9124290943146s, ucwords - 0.050964117050171s. (IMG:style_emoticons/default/biggrin.gif)

A jeśli chodzi o zamienianie nieregularne, to zrobiłem to nieco inaczej - zainicjowałem sobie tablicę znaków (coś a'la słownik):
  1. <?PHP
  2. $s = microtime(1);
  3.  
  4. function toChar(&$x){
  5. $x = chr($x);
  6. }
  7.  
  8. $large = range(65, 90);
  9. $small = range(97, 122);
  10.  
  11. array_walk($large, 'toChar');
  12. array_walk($small, 'toChar');
  13.  
  14. $largeToSmall = array_combine($large, $small);
  15. $smallToLarge = array_combine($small, $large);
  16.  
  17. for($i=0;$i<1000;$i++):
  18. $test = 'tO jEST pRZYKLADOWY tEKST';
  19. $out = '';
  20.  
  21. $len = strlen($test);
  22.  
  23. for($c=0;$c<$len;$c++){
  24. if(isset($largeToSmall[$test{$c}])){
  25. $out .= $largeToSmall[$test{$c}];
  26. }else if(isset($smallToLarge[$test{$c}])){
  27. $out .= $smallToLarge[$test{$c}];
  28. }else{
  29. $out .= $test{$c};
  30. }
  31. }
  32.  
  33.  
  34. endfor;
  35.  
  36. var_dump($out);
  37.  
  38. ?>


0.11851811408997s... Przy każdorazowej inicjalizacji tablic jest kilkukrotnie wolniejszy.

A gdyby zawrzeć w funkcji, nawet 1000x wykonywanej, można przecież użyć static:
  1. <?PHP
  2.  
  3. function toChar(&$x){
  4. $x = chr($x);
  5. }
  6.  
  7. function swapCase($str){
  8.  
  9. static $largeToSmall = null;
  10. static $smallToLarge = null;
  11.  
  12. if($largeToSmall===null){
  13. $large = range(65, 90);
  14. $small = range(97, 122);
  15.  
  16. array_walk($large, 'toChar');
  17. array_walk($small, 'toChar');
  18.  
  19. $largeToSmall = array_combine($large, $small);
  20. $smallToLarge = array_combine($small, $large);
  21. }
  22.  
  23. $len = strlen($str);
  24.  
  25. for($c=0;$c<$len;$c++){
  26. if(isset($largeToSmall[$str{$c}])){
  27. $out .= $largeToSmall[$str{$c}];
  28. }else if(isset($smallToLarge[$str{$c}])){
  29. $out .= $smallToLarge[$str{$c}];
  30. }else{
  31. $out .= $str{$c};
  32. }
  33. }
  34.  
  35. return $out;
  36. }
  37.  
  38. $x = microtime(1);
  39.  
  40. for($a=0;$a<1000;$a++){
  41. swapCase('asdASD');
  42. }
  43.  
  44. ?>

0.10412883758545s ;]
Go to the top of the page
+Quote Post

Posty w temacie
- Robert1985   [PHP]Rozmowa Kwalifikacyjna - programista   27.08.2009, 15:19:55
- - alegorn   chyba tylko 3 jest jakims ciekawszym zadaniem :] j...   27.08.2009, 15:38:19
|- - fifi209   Cytat(alegorn @ 27.08.2009, 15:38:19 ...   27.08.2009, 15:43:25
|- - Spawnm   Cytat(fifi209 @ 27.08.2009, 16:43:25 ...   27.08.2009, 16:05:38
|- - fifi209   Cytat(Spawnm @ 27.08.2009, 16:05:38 )...   27.08.2009, 16:08:02
- - Robert1985   Dokładnie tylko trzecie wymagało jakiegoś większeg...   27.08.2009, 15:43:10
- - Robert1985   Niby dlaczego ,a jak sprawdzisz str_replace czy zc...   27.08.2009, 15:46:59
- - alegorn   [PHP] pobierz, plaintext $inp = "CaMeL tO Wie...   27.08.2009, 15:53:38
- - fifi209   Co do str_replace - mój błąd Ale zamiast wyrażeń...   27.08.2009, 16:00:11
- - Skie   1 i 3 to banał, ale niezbyt rozumiem zbytnio o co ...   27.08.2009, 16:07:48
- - seth-kk   [PHP] pobierz, plaintext $test = 'MaLe tO DuZeE';...   27.08.2009, 16:16:12
- - alegorn   cos w ten desen..? [PHP] pobierz, plaintext $txt ...   27.08.2009, 16:16:59
|- - fifi209   Cytat(alegorn @ 27.08.2009, 16:16:59 ...   27.08.2009, 16:20:27
- - Robert1985   Nie pamiętam jak to wyglądało , ja nie brałem pod ...   27.08.2009, 16:36:27
- - Spawnm   Przecież pisałem wystarczy 1 str_replace i tablic...   27.08.2009, 16:38:33
|- - fifi209   Cytat(Spawnm @ 27.08.2009, 16:38:33 )...   27.08.2009, 16:56:40
- - alegorn   Cytat(Spawnm @ 27.08.2009, 17:38:33 )...   27.08.2009, 16:47:32
- - alegorn   a co mi tam. kazde z rozwiazan dalem do petli * 10...   27.08.2009, 17:03:38
|- - fifi209   Cytat(alegorn @ 27.08.2009, 17:03:38 ...   27.08.2009, 17:24:32
- - ultra_18   [PHP] pobierz, plaintext for($i=0;$i<strlen...   27.08.2009, 17:37:20
- - sztosz   Ma być w dowolnym języku? To ja dam to z tekstem w...   27.08.2009, 20:48:02
- - LBO   Mi osobiście najbardziej podoba się 3 zadanie. Spr...   27.08.2009, 22:34:38
|- - sztosz   Cytat(LBO @ 27.08.2009, 23:34:38 ) Sp...   27.08.2009, 23:27:28
- - seth-kk   ariant dla milosnikow petli [PHP] pobierz, plaint...   27.08.2009, 23:38:58
- - Speedy   Też postanowiłem pokombinować z ascii podobnie, ja...   27.08.2009, 23:55:17
- - LBO   Cytat(sztosz @ 28.08.2009, 00:27:28 )...   28.08.2009, 00:02:58
- - Robert1985   Hmm.. ale rozgorzała dyskusja widzę ,że wam się po...   28.08.2009, 03:53:33
- - bim2   Nie mogłem się powstrzymać [PHP] pobierz, plainte...   28.08.2009, 04:41:54
- - LBO   Cytat(Robert1985 @ 28.08.2009, 04:53...   28.08.2009, 08:06:10
- - rzymek01   jak w dowolnym to w C napiszę Kod#include <s...   28.08.2009, 08:34:49
- - erix   Przecież wyszło Ci bardzo podobnie. Poza tym, to...   28.08.2009, 11:02:00
|- - fifi209   Cytat(erix @ 28.08.2009, 11:02:00 ) P...   28.08.2009, 12:18:02
- - mike   Śledzę ten temat i zastanawiam dlaczego nikt nie z...   28.08.2009, 12:30:05
- - erix   Jeśli chodzi o tej jeden konkretny przypadek (http...   28.08.2009, 12:58:29
- - fifi209   Jak Wy tak dokładnie mierzycie czas? Mi PHP powyż...   28.08.2009, 13:13:52
- - erix   Przecież w każdym listingu napisałem, na końcu. ;d   28.08.2009, 13:22:11
- - fifi209   Ok. O ile przy pierwszej pętli przy 100 wykonaniac...   28.08.2009, 13:44:22
- - Pawel_W   notacja wykładnicza dokładniej 5.25760650635 * 1...   28.08.2009, 13:51:02
- - fifi209   Czyli drugi wynik: 5.25760650635E-5 To: 0.0000527...   28.08.2009, 13:53:31
- - alegorn   hmmm. a ja poprawilem swoje rozwiazanie [PHP] pob...   28.08.2009, 14:16:03
- - empathon   Ja od dawna do budowy moich aplikacji używam tej z...   28.08.2009, 15:02:41
- - alegorn   empathon:: byc moze cos zle zaimplementowalem........   28.08.2009, 15:23:48


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 Aktualny czas: 9.10.2025 - 16:20