Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czy jestem za głupi by programować?
Forum PHP.pl > Inne > Hydepark
porzeczki
Włączyłem pierwszy lepszy test na codility.com i głowa boli. Czy to dla was bułka z masłem? przez dwie godziny nie udało mi się napisać algorytmu na papierze, nie mówiąc o php. Coś takiego ma rozwiązać kandydat na JuniorPHP?

https://codility.com/programmers/challenges/titanium2016/
Cytat
A bracket sequence is considered to be a valid bracket expression if any of the following conditions is true:

it is empty;
it has the form "(U)" where U is a valid bracket sequence;
it has the form "VW" where V and W are valid bracket sequences.
For example, the sequence "(())()" is a valid bracket expression, but "((())(()" is not.

You are given a sequence of brackets S and you are allowed to rotate some of them. Bracket rotation means picking a single bracket and changing it into its opposite form (i.e. an opening bracket can be changed into a closing bracket and vice versa). The goal is to find the longest slice (contiguous substring) of S that forms a valid bracket sequence using at most K bracket rotations.

Write a function:

class Solution { public int solution(String S, int K); }

that, given a string S consisting of N brackets and an integer K, returns the length of the maximum slice of S that can be transformed into a valid bracket sequence by performing at most K bracket rotations.

For example, given S = ")()()(" and K = 3, you can rotate the first and last brackets to get "(()())", which is a valid bracket sequence, so the function should return 6 (notice that you need to perform only two rotations in this instance, though).

Given S = ")))(((" and K = 2, you can rotate the second and fifth brackets to get ")()()(", which has a substring "()()" that is a valid bracket sequence, so the function should return 4.

Given S = ")))(((" and K = 0, you can't rotate any brackets, and since there is no valid bracket sequence with a positive length in string S, the function should return 0.

Assume that:

string S contains only brackets: '(' or ')';
N is an integer within the range [1..30,000];
K is an integer within the range [0..N].
Complexity:

expected worst-case time complexity is O(N);
expected worst-case space complexity is O(N) (not counting the storage required for input arguments).
SmokAnalog
Na pierwszy rzut oka to zadanie jest bardzo trudne, ale musi być łatwe rozwiązanie, skoro oczekują O(n). Najtrudniejsze jest to, że trzeba znaleźć długość sekwencji, ale nie jest powiedziane, że musi być to sekwencja od początku S.

Nie lubię takich zadań, bo mnie przytłaczają biggrin.gif
porzeczki
Odetchnąłem, myślałem, że te testy są by odsiać głupich w rekrutacji, ale wychodzi na to, że to są jakieś cykliczne wyzwania dla supermądrych, którzy za rozwiązanie dostają "order", którym chwalą się na goldenline. Bardziej chodzi o powód do dumy za rozwiązanie niż wstydu za nierozwiązanie. (mam nadzieję)



dla supermądrych są cykliczne challenges https://codility.com/programmers/challenges/
dla głupich są lessons https://codility.com/programmers/lessons/
Pilsener
Ja z takich testów jeszcze nie dostałem chyba więcej niż 10% Lkingsmiley.png

Założę się o sześciopak, że to różnego rodzaju agencje rekrutacyjne, oczekują umiejętności, które ja określam jako "akademickie" bo po prostu nie potrafią inaczej smile.gif
A jak już wykażesz się wybitną znajomością algorytmiki, matematyki czy właściwości języka to dostaniesz projekt w PHP 4 z 2004 roku w którym będziesz szukał nie domkniętego tagu HTML w echo() linijka 2673 oneeyedsmiley02.png

Uczestniczyłem w kilkuset procesach rekrutacyjnych i powiem Wam, że im bardziej wyrafinowany czy wymagający proces rekrutacji tym pracodawca zazwyczaj gorszy.
Jeszcze 15 lat temu robiłem jakieś zadania testowe na 2 dni, ale dziś po prostu śmieję się i dziękuję za udział w rekrutacji, bo nie płacą mi za udzielanie się w eksperymentach socjologicznych.

Widocznie jeszcze za dużo dobrych i doświadczonych programistów jest na rynku skoro można tak przebierać.

I zauważyłem już dawno, że wymagania na Junior są większe niż na Senior (bo poza np. znajomością języka i doświadczeniem wymaga się studiowania co jest bzdurą - mam specjalnie iść na studia żeby dostać pracę jako junior?), natomiast płacą mniej. Pewnie dlatego nigdy nie spotkałem Junior Developera smile.gif
memory
Cytat
kilkuset ?

To przez 20 lat musiałbyś co miesiąc zmieniać prace
SmokAnalog
Cytat(memory @ 10.11.2016, 11:45:22 ) *
To przez 20 lat musiałbyś co miesiąc zmieniać prace

Twoje założenie jest prawidłowe jedynie w świecie, gdzie 100% rozmów kończy się posadą. Założenie jest błędne, ponieważ w Polsce nie każda rozmowa kwalifikacyjna kończy się pozytywnie. Mission failed. Au revoir. Savoir-vivre.

Aczkolwiek ja też nie wierzę w te kilkaset, pewnie było ich góra kilkadziesiąt. Rozmowy kwalifikacyjne są na tyle intensywnym przeżyciem, że łatwo się przeliczyć. Przykład:

- O em dżi, siedziałem na tym elektrycznym krześle wieki!
- Siedziałeś zaledwie 15 sekund.
porzeczki
https://codility.com/demo/results/trainingZXD8PR-UPA/

a jak rozumieć to, że funkcja zwraca raz dobre, raz złe wyniki?
SmokAnalog
Codility sprawdza Twój kod testami. Mają zestawy danych wejściowych i konfrontują Twoje dane wyjściowe z prawidłowymi. Firma, w której pracuję, używa Codility w procesie rekrutacyjnym i wiem, że te testy są bardzo złośliwe smile.gif Sprawdzają wiele przypadków szczególnych. Ale to dobrze, o to chodzi.
porzeczki
no ja rozumiem, ale dlaczego w tym konkretnym przypadku funkcja dla

100011101101110100011100001 widzi najdłuższą sekwencję zer 6 zamiast 4, a dla
1100101000000001 widzi dobrze.
SmokAnalog
Nie do końca rozumiem Twoje pytanie. Widzi 6, bo tyle zwrócił Twój algorytm, a prawidłowa odpowiedź to 4.
porzeczki
oszczerstwo i potwarz. Jak 6 skoro 4. (chyba jednak powraca główne pytanie tego tematu laugh.gif )
SmokAnalog
Cytat(porzeczki @ 10.11.2016, 15:28:47 ) *
Jak 6 skoro 4.

No właśnie 4 biggrin.gif

100011101101110100011100001

To Twój algorytm z jakiegoś powodu wywalił 6 smile.gif
porzeczki
no ja wiem, że algorytm.

Dobra mniejsza z tym.
SmokAnalog
Twój bug polega na tym, że $sequence resetujesz jedynie wtedy, kiedy jest najlepszy wynik. Widzisz to?
porzeczki
no tak
SmokAnalog
No to masz odpowiedź tongue.gif
porzeczki
jest 100%, było 66%

czyli 66% dla mnie 34% dla ciebie.

I kto jest lepszy?
aniolekx
wasz team - poniewaz zdobyl 100% ;D

Cytat(porzeczki @ 10.11.2016, 15:55:56 ) *
jest 100%, było 66%

czyli 66% dla mnie 34% dla ciebie.

I kto jest lepszy?

Pilsener
Cytat
Aczkolwiek ja też nie wierzę w te kilkaset, pewnie było ich góra kilkadziesiąt
- podczas ostatniej zmiany projektu wysłałem CV do 20 firm w najbliższej okolicy, odpowiedziało 18. Nie zawsze jest tak dobrze i czasem trzeba wysłać więcej CV - jest to trudne bo nigdy nie wiesz, ile firm odpowie, czasem 50% a czasem 90% i potem oczywiście trzeba zadzwonić i zrezygnować.
Mówiąc "udział" nie miałem na myśli rozmów czy testów, tylko liczbę pozytywnych feedbacków od firm, do których wysyłałem CV. Nie ma przecież sensu rozwiązywać zadań i chodzić na rozmowy jak potem okaże się, że to staż za 80% minimalnej albo projekt sprzed 20 lat, dlatego 90% rekrutacji kończy się po rozmowie telefonicznej/wymianie emaili.

I oczywiście każdy może sobie szukać takiego pracownika jaki mu odpowiada - jak ktoś chce mieć specjalistę od tego typu zadań to niech sobie szuka. Kiedyś dyrektor w jednej z firm w której pracowałem szukał kogoś kto umie pływać, bo nie miał z kim chodzić na basen. Niech każdy ma co lubi smile.gif
nospor
@porzeczki drobna uwaga co do
if (strpos($strbin, '0') == false) {

strpos moze rowniez zwrocic 0 wowczas
0 == false da ci TRUE;

Musisz nauczyc sie uzywac === gdy potrzeba
0 === false da FALSE
SmokAnalog
Cytat(nospor @ 14.11.2016, 10:59:07 ) *
Musisz nauczyc sie uzywac === gdy potrzeba

Czyli najlepiej prawie zawsze.
nospor
Ah, ich znow ta klotnia. Nie, nie prawie. Wg potrzeb.
daro0
No cóż:
https://codility.com/demo/results/trainingAJ3DXZ-HD8/

Wynik: 100% thumbsupsmileyanim.gif

Z tymi testami problem jest taki, że można zagiąć nawet kogoś z doświadczeniem a nie tylko studenta...
nospor
Czy rozwiazywanie tych testow polega na kopiowaniu kodu poprzednika i powielanie jego bledow na dodatek?
Czy moze daja juz tam na dzien dobry wszystkim tak "dupny" skrypt i kaza poprawiac? tongue.gif
SmokAnalog
Cytat(nospor @ 14.11.2016, 13:18:13 ) *
Ah, ich znow ta klotnia. Nie, nie prawie. Wg potrzeb.

Nie zgadzam się z Tobą po raz kolejny, no ale nie musimy się zgadzać.
nospor
Ano nie musimy smile.gif Z jednym chyba sie jednak zgodzisz: nalezy wiedziec jaka jest roznica miedzy == a === i uzywac kiedy potrzeba. Walenie na slepo zawsze === przyspozy tylko problemow, tak jak zreszta walenie na slepo zawsze ==. Czyli znowu wracamy do: wiedziec o istnieniu obydwu i uzywac wg potrzeb.... kurcze, czyli to co powiedzialem na poczatku wink.gif
SmokAnalog
Tak, zgadzam się z tym, ale uważam, że walenie na ślepo == jest o wiele bardziej tragiczne w skutkach niż walenie na ślepo ===. Moim zdaniem dobrze jest z uwagą śledzić typ zmiennych i u mnie jedno == przypada na jakieś 200 ===. Stosuję zasadę: jeśli nie wiesz jaki to typ, to się dowiedz.
nospor
Cytat
ale uważam, że walenie na ślepo == jest o wiele bardziej tragiczne w skutkach niż walenie na ślepo ===

Ale przeciez my nie mowimy tutaj o zadnym waleniu na slepo smile.gif
Ale z racji ze dzisiaj lubimy sie klucic to ja uwazam ze oba walenia na slepo sa tragiczne w skutkach smile.gif

Cytat
Moim zdaniem dobrze jest z uwagą śledzić typ zmiennych
A czy ja gdzies powiedzialem ze nie?
viking
Dobrze jeśli piszemy w PHP7 (albo 7.1 wink.gif ) z dokładniejszym typowaniem. W starszych wersjach zdecydowanie popieram @nospor.
nasty
A ja uwazam ze jesli tego nie umiesz rozwiazac to nie powinienes aplikowac na prace programsty. Rozwiazanie jest dosyc banalne:

- Robisz stos, potem lecisz po stringu i jak masz "(" to wrzucacsz push()-em na stos,
- jak masz ")" to robisz peek():
- - jak masz na peek() "(" to robisz pop() i masz domknieta pare, w przeciwnym wypadku wiesz ze masz jeden niedomnkniety nawias.
- goto 0


Ja tylko takie zadanie daje na rozmowach rekrutacyjnych bo szukam ludzi co potrafia myslec.
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.