2012-06-24 19 views
6

Niedawno zostałem poproszony w pytaniu o wywiad, aby odwrócić ciąg w perlu. Napisałem kod i chcieli, żebym podał kilka przykładowych ciągów, żeby go przetestować. Podałem im przykłady, takie jak ciąg znaków z kilkoma znakami, wiele znaków, nieprawidłowe znaki itp. Ale oni zapytali także, jaki jest najdłuższy ciąg, który przetestuję. Nie byłem pewien, co powiedzieć. Stąd to pytanie. Jaki jest najdłuższy ciąg, który mogę przetestować w kodzie perl? Od czego to zależy ? Pamięć na maszynie? Czy istnieje ograniczenie z punktu widzenia perla?Jaki jest najdłuższy ciąg jaki mogę mieć?

+0

Dostałeś pracę? – simbabque

Odpowiedz

6

Szukałem, czy znajdę oficjalną dokumentację na najdłuższym ciągu. Znalazłem jeden na http://perltutorial.org mówiący o Struny:

Perl definiuje ciąg jako ciąg znaków. Najkrótszy ciąg nie zawiera znaku ani łańcucha pustego. Najdłuższy ciąg może zawierać nieograniczoną liczbę znaków, która ogranicza się tylko do dostępnej pamięci komputera.

Nie wiem, czy to jest oficjalny dla ciebie za mało. Byłoby miło zobaczyć coś w FAQ lub Perldoc.

Przy okazji, aby oficjalnie odwrócić ciąg w Perl:

my $rev_string = reverse $string; 

Jest w Perl FAQ # 4, który ma kilka rzeczy w nim obsługi łańcucha. Pytanie o odwrócenie ciągu znaków jest starszym pytaniem do wywiadu, aby sprawdzić, czy ktoś zna ich tajemne rzeczy z Perla. Oczywiście prawie wszyscy wiedzą, że reverse odwróci tablicę, ale czy wiedzą również, że odwróci ciąg znaków? Noobies opracuje jakiś skomplikowany algorytm, a osoba przeprowadzająca wywiad będzie miała powody, by czuć się zadowolonym z siebie i nie zatrudniać tej osoby.

Osobiście, gdybym przeprowadzał z kimś rozmowę, zadałem to pytanie, a ktoś wymyślił na miejscu elegancki algorytm i pokazał mi, jak to będzie działać z krótkimi, długimi i nieważnymi postaciami. Zatrudniłbym ich. Zawsze możesz nauczyć się nowych głupich sztuczek Perla, ale szybkie myślenie na stopę jest czymś trudnym do znalezienia.

Nauczyłem się sztuczki z odwrotną struną dawno temu, gdy ktoś zadał mi to samo pytanie w wywiadzie. Sprawdziłem to i znalazłem to w FAQ i zrozumiałem, że zrobiłem to źle. Używam Perla od prawie 20 lat i nie mogę sobie przypomnieć czasu, w którym kiedykolwiek musiałem odwrócić ciąg Perla.

+5

perltutorial.org jest [niezalecane] (http://perl-tutorial.org/rejected/), wszystkie informacje są wątpliwe [przez stowarzyszenie] (http://enwp.org/Association_fallacy). Odpowiedzi na te pytania powinny zawierać autorytatywne zasoby wysokiej jakości. – daxim

+0

Procesy często mają dostęp tylko do części pamięci komputera, więc możesz ograniczyć się do znacznie mniejszej niż pamięć komputera. – ikegami

+0

@daxim - Pamiętam, że czytałem coś podobnego w Księdze Wielbłądów, ale nie mogłem go znaleźć. Znalazłem podobne stwierdzenie do powyższego w Perlmonk, ale nie ma tam też odniesienia. Być może właściwą odpowiedzią powinien być _Tylko dłuższy niż prawdopodobnie będziesz potrzebował, więc nie martw się tym._. –

5

Zasadniczo zależy to od ilości pamięci dostępnej dla twojego programu (czyli Perla). Jeśli masz maszynę 32-bitową, to gdzieś poniżej 4 GiB. Jeśli masz maszynę 64-bitową, limit jest prawdopodobnie większy i zależy od dostępnej pamięci wirtualnej. Nie ma ustalonego ograniczenia.

+0

ok. W jaki sposób można utworzyć długi ciąg lub innymi słowy, stworzyć najdłuższy ciąg możliwy do przeprowadzenia testu? Nie jestem pewien, czy istnieje potrzeba posiadania długiego łańcucha jako jednego z przypadków testowych. – user238021

+2

@ user238021: to * spowoduje * zawieszenie komputera. Otrzymałeś ostrzeżenie: perl -e 'print skalar reverse a .. "z" x999' – jm666