Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rozmowa Kwalifikacyjna - programista
Forum PHP.pl > Inne > Hydepark
Robert1985
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.
alegorn
chyba tylko 3 jest jakims ciekawszym zadaniem :] jesli dobrze zrozumialem miales za zadanie z CaMela zrobic cAmElA ?

ha, moze maly konkurs w ilu krokach kto sie zmiesci? biggrin.gif
Robert1985
Dokładnie tylko trzecie wymagało jakiegoś większego zastanowienia ja użyłem wyrażeń regularnych ,ale może ktoś zrobił to inaczej zamieszczam moje rozwiązanie:
  1. <?php
  2. $ciag = $_POST['ciag']; //ciąg z textboxa
  3. $ok = $_POST['ok']; //wartość przeslana przez submita
  4.  
  5. if (isset($ok))
  6. {
  7. //badanie długości
  8. $dlugosc = strlen($ciag);
  9. echo "Zmieniony przez Ciebie ciąg to: ";
  10. for ($i=0;$i<=$dlugosc-1;++$i)
  11. {
  12. $znak = substr($ciag,$i,1);
  13.  
  14.  
  15. if (ereg('[A-Z]',$znak))
  16. $znak[$i] = strtolower($znak);
  17.  
  18. elseif (ereg('[a-z]',$znak))
  19. $znak = strtoupper($znak);
  20.  
  21. echo "$znak";
  22. }
  23. }
  24. ?>
Fifi209
Cytat(alegorn @ 27.08.2009, 15:38:19 ) *
chyba tylko 3 jest jakims ciekawszym zadaniem :] jesli dobrze zrozumialem miales za zadanie z CaMela zrobic cAmElA ?

ha, moze maly konkurs w ilu krokach kto sie zmiesci? biggrin.gif


W jednym... str_replace...

Chyba, że chodzi o coś takiego:

MAŁE -> małe
duże -> DUŻE

strtoupper & strtolower
Robert1985
Niby dlaczego ,a jak sprawdzisz str_replace czy zczytany znak jest dużą literą czy małąquestionmark.gif Zakresy są tylko w wyrażeniach chyba nie?? Nie jestem bardzo zaawansowany w PHP więc mogę się mylic. Pewnie da się inaczej zamieść swoje rozwiązanie ,to może się czegos nauczymy,a nie krytykuj tylko.
alegorn
  1. $inp = "CaMeL tO WieLeRRoR";
  2. $low = strtolower($inp);
  3. $rew='';
  4. for($c = 0; $c<strlen($inp); ++$c ){
  5. if($inp{$c} === $low{$c}){
  6. $rew .= strtoupper($low{$c});
  7. }
  8. else{
  9. $rew .=$low{$c};
  10. }
  11. }
  12. var_dump($inp,$rew);


edit:: moze jeszcze zwrot dokleje:)
  1. string 'CaMeL tO WieLeRRoR' (length=18)
  2. string 'cAmEl To wIElErrOr' (length=18)


to tak na szybko - mysle ze moglbym jeszcze co nieco zmienic, ale to juz kosztem czytelnosci
Fifi209
Co do str_replace - mój błąd winksmiley.jpg

Ale zamiast wyrażeń można tak:
  1. $test = 'tO jEST pRZYKLADOWY tEKST';
  2.  
  3. for ($i=0; $i < strlen($test); $i++) {
  4. $x[] = $test[$i];
  5. }
  6.  
  7. foreach ($x as $l) {
  8. if (ord($l) > 64 && ord($l) < 91) {
  9. echo chr(ord($l)+32);
  10. }else if (ord($l) > 96 && ord($l) < 123) {
  11. echo chr(ord($l)-32);
  12. }else{
  13. echo $l;
  14. }
  15. }

Na pewno za pomysłowość dostałbyś plusa. ;d
Spawnm
Cytat(fifi209 @ 27.08.2009, 16:43:25 ) *
W jednym... str_replace...

Chyba, że chodzi o coś takiego:

MAŁE -> małe
duże -> DUŻE

strtoupper & strtolower


Nadal wystarczy 1 str_replace i tablece z ABCabc , abcABC...
Ale kombinujecie tongue.gif
Skie
1 i 3 to banał, ale niezbyt rozumiem zbytnio o co chodziło w 2.

Jak ten wprowadzany string miał wyglądać?
1. "1414"
2. "av1vs3"
3. "124asfa"

Czy jak?
Bo jeżeli 1 opcja to wystarczy intval(), a jeżeli 2 lub 3 to wcześniej wyciąć znaki nie-numeryczne i dopiero potem intval()

O to chodziło?
Fifi209
Cytat(Spawnm @ 27.08.2009, 16:05:38 ) *
Nadal wystarczy 1 str_replace i tablece z ABCabc , abcABC...
Ale kombinujecie tongue.gif

Powiem Ci, że pisząc posta właśnie tak myślałem... Dlatego napisałem o tej funkcji lecz jak zabrałem się za testowanie - z ciekawości - to zamieniało ale tylko na duże. ;d
(oczywiście alfabety były odwrócone)

Spróbuj tak:
  1. <?php
  2.  
  3. $test = 'tO jEST pRZYKLADOWY tEKST';
  4.  
  5. $male = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
  6. $duze = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  7.  
  8. echo str_replace(array_merge($male, $duze), array_merge($duze, $male), $test);
  9.  
  10. ?>

I będzie źle...
seth-kk
  1. $test = 'MaLe tO DuZeE';
  2.  
  3. $a = 'qazwsxedcrfvtgbyhnujmikolp';
  4. $b = strtoupper($a);
  5.  
  6. echo strtr($test, $a.$b, $b.$a); //mAlE To dUzEe

ktow wrzocic powyzsze w petle i sprawdzi wydajnosc? <.<
alegorn
cos w ten desen..?

  1. $txt = "AbC";
  2. $serch = array('a','b','c','A','B','C');
  3. $replace= array('A','B','C','a','b','c');
  4. $rep = str_replace($serch,$replace,$txt);
  5.  
  6. var_dump($txt,$rep);


o ile dobrze mysle kolejnosc elementow w tablicy ma znaczenie.
wiec b zostanie wpierw zmienione na duze, next na male....

oczywiscie o ile dobrze mysle :]
Fifi209
Cytat(alegorn @ 27.08.2009, 16:16:59 ) *
cos w ten desen..?

  1. $txt = "AbC";
  2. $serch = array('a','b','c','A','B','C');
  3. $replace= array('A','B','C','a','b','c');
  4. $rep = str_replace($serch,$replace,$txt);
  5.  
  6. var_dump($txt,$rep);


o ile dobrze mysle kolejnosc elementow w tablicy ma znaczenie.
wiec b zostanie wpierw zmienione na duze, next na male....

oczywiscie o ile dobrze mysle :]


Dobrze myślisz, ale ja również podałem taki przykład troszkę wyżej dla Spawna winksmiley.jpg zobacz sobie... ;d

@topic
A co z tym zmienianiem string na int?
Robert1985
Nie pamiętam jak to wyglądało , ja nie brałem pod uwagę ciągów '123cośtam' ale to mój błąd zaprezentuje ktoś rozwiązanie z tym trudniejszym przykładem.
Spawnm
Przecież pisałem wystarczy 1 str_replace i tablice z ABCabc , abcABC...
alegorn
Cytat(Spawnm @ 27.08.2009, 17:38:33 ) *
Przecież pisałem wystarczy 1 str_replace i tablice z ABCabc , abcABC...


hmmm ale str_replace nie zadziala prawidlowo.... a przynajmniej nie tym sposobem jakim ja napisalem..... dry.gif
Fifi209
Cytat(Spawnm @ 27.08.2009, 16:38:33 ) *
Przecież pisałem wystarczy 1 str_replace i tablice z ABCabc , abcABC...


Jeżeli jesteś pewien...
  1. $test = 'tO jEST pRZYKLADOWY tEKST';
  2.  
  3. $male = array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z');
  4.  
  5. $duze = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
  6.  
  7. echo str_replace(array_merge($male, $duze), array_merge($duze, $male), $test);

Jak wspominałem nie działa.
alegorn
a co mi tam.
kazde z rozwiazan dalem do petli * 100 - sprawdzalem kilkukrotnie, kolejnosc wynikow bez zmian


Robert1985 :: 0.0393550395966 // tyle ze o ile dobrze sprawdzilem, cos nie teges zwrot ci wyszedl
ja:: 0.0205841064453
fifi209:: 0.663460016251
seth-kk:: 0.000790119171143 party.gif

sumujac - seth-kk pobil nas o 3 miejsca po przecinku....
no coz, nic dziwnego, skoro rozwiazal zadanie bez petli (hmmmm dyskwalifikacja?questionmark.gif tongue.gif )

chociaz warto by bylo jeszcze obciazenie pamieci sprawdzic, ale to juz jutro, na dzis spadam do domu.
Fifi209
Cytat(alegorn @ 27.08.2009, 17:03:38 ) *
a co mi tam.
kazde z rozwiazan dalem do petli * 100 - sprawdzalem kilkukrotnie, kolejnosc wynikow bez zmian


Robert1985 :: 0.0393550395966 // tyle ze o ile dobrze sprawdzilem, cos nie teges zwrot ci wyszedl
ja:: 0.0205841064453
fifi209:: 0.663460016251
seth-kk:: 0.000790119171143 party.gif

sumujac - seth-kk pobil nas o 3 miejsca po przecinku....
no coz, nic dziwnego, skoro rozwiazal zadanie bez petli (hmmmm dyskwalifikacja?questionmark.gif tongue.gif )

chociaz warto by bylo jeszcze obciazenie pamieci sprawdzic, ale to juz jutro, na dzis spadam do domu.

Hmm, bardzo ciekawe. winksmiley.jpg
Czym mierzyłeś czasy? snitch.gif

Jak możesz spróbuj jeszcze z tym:
  1. $test = 'tO jEST pRZYKLADOWY tEKST';
  2. $x = strlen($test);
  3. $y=0;
  4.  
  5. while ($y < $x) {
  6. $cache = ord($test[$y]);
  7. if ($cache > 64 && $cache < 91) {
  8. echo chr($cache+32);
  9. }else if($cache > 96 && $cache < 123) {
  10. echo chr($cache-32);
  11. }else{
  12. echo $test[$y];
  13. }
  14. $y++;
  15. }

Interesuje mnie różnica między tym czasem a poprzednim (z pętlą for).
ultra_18
  1. for($i=0;$i<strlen($text);$i++)
  2. $text[$i] = ($text[$i] == strtoupper($text[$i])) ? strtolower($text[$i]) : strtoupper($text[$i]) ;
sztosz
Ma być w dowolnym języku? To ja dam to z tekstem w Pythonie:

[PYTHON] pobierz, plaintext
  1. a = 'JaKis TexT'
  2. print a.swapcase()
[PYTHON] pobierz, plaintext


Od razu piszę że nie działa dla znaków spoza ASCII, nie wiem jak wasze skrypty

dla 100 powtórzeń na moim sprzęcie uruchamiane na szybko z Aptany: 0.0019998550415

Nie twierdzę że szybko to działa, ale szybciej pisałem kod wraz z wynikiem dla 100 powtórzeń niż ten post na forum winksmiley.jpg
LBO
Mi osobiście najbardziej podoba się 3 zadanie. Sprawdza, czy programista bierze w ogóle pod uwagę lokalizację (czyli rozwiązaniom z mapami translacji mówimy nie; gratulację dla tych co użyli strtolower, strtoupper) i podstawową optymalizację (ale nie mikro-optymalizację) smile.gif

Moje rozwiązanie (nie pisałem z palca, tylko przerobiłem funkcję @ultra_18... bo mi się spodobała) to

  1. $length = strlen($text); // Wykona się tylko raz, a nie przy każdym obrocie pętli
  2. for($i=0;$i<$length;$i++)
  3. {
  4. $text[$i] = ($text[$i] == ($j = strtoupper($text[$i]))) ? strtolower($j) : $j; // Po co było 2 razy strtoupper()?
  5. unset($j); // dla pedantów
  6. }


Bardzo fajny temat, taki na czasie smile.gif

Pozdrawiam, Alan
sztosz
Cytat(LBO @ 27.08.2009, 23:34:38 ) *
Sprawdza, czy programista bierze w ogóle pod uwagę lokalizację (czyli rozwiązaniom z mapami translacji mówimy nie; gratulację dla tych co użyli strtolower, strtoupper)

Ok ja się nie założę, bo akurat PHP mnie w ogóle nie bawi, ale strtolower ani strtoupper nie zmieni Ci poprawnie case'a znaków spoza ASCII, więc nie rozumiem twojego komentarza o lokalizacji.

  1. <?php
  2. print '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
  3. print('ęóąśłżźćń');
  4. print strtoupper('ęóąśłżźćń');
  5. print strtolower('ĘÓĄŚŁŻŹĆŃ')
  6. ?>


daje mi:
  1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />ęóąśłżźćńęăąśłżŪćń��������


Ale to może ja coś źle robię.
seth-kk
ariant dla milosnikow petli winksmiley.jpg
  1. $test = 'MaLe tO DuZeE';
  2.  
  3. $a = strtolower($test);
  4. $c = strtoupper($test);
  5. $b = strlen($a);
  6. while($b--)
  7. {
  8. if($a[$b] == $test[$b])
  9. $a[$b] = $c[$b];
  10. }
Speedy
Też postanowiłem pokombinować z ascii podobnie, jak jeden z przedmówców. Założyłem, że w ciągu są tylko literki i spacje.
  1. <?php
  2. $array = str_split('tO jEsT TeST');
  3. foreach($array as $value) echo (ord($value) != 32 ) ? ( (ord($value) > 90) ? chr(ord($value) - 32) : chr(ord($value) + 32) ) : ' ';
  4. ?>

btw. Informacja dla osób, które robią tablice $literki = array('a','b','c' ... itd. poczytajcie o funkcji range winksmiley.jpg.
LBO
Cytat(sztosz @ 28.08.2009, 00:27:28 ) *
Ok ja się nie założę, bo akurat PHP mnie w ogóle nie bawi, ale strtolower ani strtoupper nie zmieni Ci poprawnie case'a znaków spoza ASCII, więc nie rozumiem twojego komentarza o lokalizacji.


No dobra, ale tu chodzi o kodowanie, a nie lokalizacje. Normalnie - dla UTF-8 - to lecą funkcje mb_* do takich rzeczy i nie mam problemu.

Dla tego domyślnego kodowania windows-cośtam funkcje strto* łapią np umlauty i na pewno jeszcze znajdą się "ogonki" dla kilku innych języków.

P.S. Mimo wszystko przyznam, że mnie trochę złapałeś smile.gif
Robert1985
Hmm.. ale rozgorzała dyskusja widzę ,że wam się podoba, moje rozwiązanie działa (nie występują też problemy z literkami i spacjami) rozwiązanie LBO bardzo ładne i zwięzłe, ale czytając ostatnie posty rzeczywiście zauważyłem ,że tylko dla liter [a-z], niestety na polskich ę Ę itp. już nie co w takim przypadku się robi?questionmark.gif?
bim2
Nie mogłem się powstrzymać smile.gif
  1. <?php
  2. mb_internal_encoding( 'UTF-8');
  3. mb_regex_encoding( 'UTF-8');
  4.  
  5. function convertStr($string)
  6. {
  7. $stop = mb_strlen($string);
  8. $result = '';
  9.  
  10. for($i = 0; $i < $stop; $i++)
  11. {
  12. $t = mb_substr( $string, $i, 1);
  13. if(mb_strtoupper($t, 'utf-8')==$t)
  14. {
  15. $result .= mb_strtolower($t, 'utf-8');
  16. } else {
  17. $result .= mb_strtoupper($t, 'utf-8');
  18. }
  19. }
  20.  
  21. return $result;
  22. }
  23.  
  24. echo convertStr('ąśąśćłóńĄŃŁÓ');
  25. ?>
LBO
Cytat(Robert1985 @ 28.08.2009, 04:53:33 ) *
Hmm.. ale rozgorzała dyskusja widzę ,że wam się podoba, moje rozwiązanie działa (nie występują też problemy z literkami i spacjami) rozwiązanie LBO bardzo ładne i zwięzłe, ale czytając ostatnie posty rzeczywiście zauważyłem ,że tylko dla liter [a-z], niestety na polskich ę Ę itp. już nie co w takim przypadku się robi?questionmark.gif?


Moje działa, tylko nie dla UTF-8 smile.gif Ale to już wina PHP sad.gif
Jak wspomniałem lepiej użyć funkcji mb_* lub przeładować te standardowe w konfiguracji (osobiście tego nie robiłem, tylko czytałem o tym).

Pozdrawiam
rzymek01
jak w dowolnym to w C napiszę tongue.gif

Kod
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
  char text[256];
  gets (text);

  int iLength = strlen(text);
  int i;
  for (i = 0; i < iLength; ++i)
    text[i] = ( islower(text[i]) ? toupper(text[i]) : tolower(text[i]) );


  // wyświetlenie czy cóś

  return 0;
}


tongue.gif
erix
Przecież wyszło Ci bardzo podobnie. tongue.gif

Poza tym, to rozmowa o programiście PHP, a nie C(PP). tongue.gif
Fifi209
Cytat(erix @ 28.08.2009, 11:02:00 ) *
Przecież wyszło Ci bardzo podobnie. tongue.gif

Poza tym, to rozmowa o programiście PHP, a nie C(PP). tongue.gif

Wyszło mu podobnie, ale założę się, że jest kilka razy szybszy od Nas. ;p

Erix, podaj swoją wersję. ;p (oczywiście nie może się pomysł powtórzyć)
mike
Śledzę ten temat i zastanawiam dlaczego nikt nie zwrócił uwagi, że takie pytanie to tragedia.

Dlaczego pytanie o podstawy myślenia i logiki pada na takiej rozmowie? No chyba, że była to rozmowa, która miała pomóc wyłonić praktykanta lub baaardzo początkującego adepta programowania w czymkolwiek.
erix
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. biggrin.gif Wykonanie Twojego kodu 1000x zabrało u mnie 1.9124290943146s, ucwords - 0.050964117050171s. 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 ;]
Fifi209
Jak Wy tak dokładnie mierzycie czas? tongue.gif Mi PHP powyżej 4 miejsc po przecinku zaczyna wariować...
erix
Przecież w każdym listingu napisałem, na końcu. ;d
Fifi209
Ok. O ile przy pierwszej pętli przy 100 wykonaniach mam średni wynik:
0.00250374317169 s

To przy drugiej...
5.25760650635E-5 s

I właśnie to miałem na myśli, mówiąc że PHP szaleje...
Pierwsza pętla wykonuje się moim zdaniem znacznie dłużej niż druga... ;/
Pawel_W
notacja wykładnicza winksmiley.jpg

dokładniej 5.25760650635 * 10^-5
Fifi209
Czyli drugi wynik:
5.25760650635E-5

To:
0.000052760650635 s ?
alegorn
hmmm.
a ja poprawilem swoje rozwiazanie

  1. $s = microtime(1);
  2. for($c=1000;$c>0;--$c){
  3. $inp = 'tO jEST pRZYKLADOWY tEKST';
  4. $low = strtolower($inp);
  5. $rew='';
  6. $len = strlen($inp);
  7. $cc=0;
  8. while($len > $cc){
  9. if($inp{$cc} === $low{$cc}){
  10. $rew .= strtoupper($low{$cc});
  11. }
  12. else{
  13. $rew .=$low{$cc};
  14. }
  15. ++$cc;
  16. }
  17. echo $rew;
  18. }


srednio wychodzi jakos tak (*1000):

0.0544149875641

co ciekawe, jesli if'a zapisac w jednej linijce czyli
  1. $rew .= ($inp{$cc} === $low{$cc})? strtoupper($low{$cc}) : $low{$cc} ;

to srednio wynik mam:
0.0692899227142

czyli spora roznica.

zastanawiam sie czy przy uzyciu petli da sie cos wycisnac jeszcze z wyniku
uzycie for - to tak *0,7 do wyniku (szacujac na oko biggrin.gif )


tyle ze i tak rozwiazanie z strtr jest najmniej 5* szybsze.....
ale co dziwnego, wszak na codzien petla sluzy do wieszania tongue.gif

Al.
empathon
Ja od dawna do budowy moich aplikacji używam tej zaawansowanej klasy. Przydaje się zwłaszcza przy budowaniu portali społecznościowych.
Gorąco polecam. Licencja MIT.

  1. <?php
  2. class RapeException extends Exception { }
  3.  
  4. class InvertRape {
  5.  
  6. private $wimp;
  7.  
  8. private $re_wimp;
  9.  
  10. public function __construct($wimp)
  11. {
  12. $this->setWimp($wimp);
  13. }
  14.  
  15. public function setWimp($wimp)
  16. {
  17. if(!strlen($wimp)) throw new RapeException('Nothing to rape!');
  18. $this->wimp = $wimp;
  19. }
  20.  
  21. public function getWimp()
  22. {
  23. return $this->wimp;
  24. }
  25.  
  26. public function setReWimp($re_wimp)
  27. {
  28. if(!strlen($re_wimp)) throw new RapeException('Your wimp is exhausted!');
  29. $this->re_wimp = $re_wimp;
  30. }
  31.  
  32. public function getReWimp()
  33. {
  34. return $this->re_wimp;
  35. }
  36.  
  37. public function invert()
  38. {
  39. $upper_split = str_split(mb_strtolower($this->getWimp(), 'UTF-8'));
  40. $lower_split = str_split(mb_strtoupper($this->getWimp(), 'UTF-8'));
  41. $wimp_split = str_split($this->getWimp());
  42.  
  43. $re_wimp = array_diff_assoc($upper_split, $wimp_split) + array_diff_assoc($lower_split, $wimp_split);
  44. ksort($re_wimp);
  45. $this->setReWimp(join($re_wimp));
  46. }
  47.  
  48. public function rapeMeOneOrMoreTimes($times = 1)
  49. {
  50. for($riped = 1; $i <= $times; $riped++){
  51. $this->setWimp($this->getReWimp());
  52. $this->invert();
  53. }
  54. }
  55. }
  56.  
  57. $inverter = new InvertRape('PóKlIkAsZ');
  58. $inverter->invert();
  59. echo $inverter->getReWimp();
alegorn
empathon:: byc moze cos zle zaimplementowalem...... (ale co skoro ctrl+c & ctrl+v questionmark.gif) zwrot jaki otrzymuje to.... pklikasz
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.