Codility, Jaki najtrudniejszy oraz najdłuższy test?

Codility, Jaki najtrudniejszy oraz najdłuższy test?
lambdadziara
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 18 godzin
  • Postów:442
0

zaprosili mnie na test codility z motorolli i ciekawa jestem co mnie czeka. Jaki byl najtrudniejszy challenge codility jaki musieliscie napisac i ile mieliscie na to czasu i jakie wynik?

edytowany 1x, ostatnio: Adam Boduch
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Najdłuższy jaki mialem to 3 zadania, 3h na całość. Ale nie kierowałbym się tym, ten co były 3h zrobiłem w mniej niż godzinę, a miałem też kiedyś taki z chyba jednym zadaniem i limitem 1h i ledwo się wyrobiłem, bo miał jakiś dziwny corner case który wychodził dopiero jak już zaklepałeś rozwiązanie i testowałeś specjalne przypadki i wymagał przemodelowania tego dość mocno, wrzucenia jakichś priority queue i poczarowania trochę.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
Zobacz pozostałe 7 komentarzy
Shalom
@lambdadziara: no jasne, przecież o to chodzi! Że nie kolega ci pisze na boku a ty potem cltr+v, tylko piszesz i tłumaczysz co robisz i dyskutujecie w trakcie, trochę taki peer-programming tylko remote
lambdadziara
Tak ale bez skajpa przez samo codility, mozna sprawdzic, czy ktos oszukiwal? Ja googluje zawsze, nawet jak znam prawidlowa odpowiedz, zeby sie upewnic :) chodzi o pyt wielokrotnego wyboru
superdurszlak
Na egzaminie inżynierskim też masz zamiar googlować odpowiedzi dla pewności?
lambdadziara
a ktos w ogole nie zdaje tego egzaminu? myslalam ze to masowka, jak matura :)
superdurszlak
U nas wstyd było zejść poniżej 90% w pierwszym rzucie, nie wiem jak z tymi, którzy z obroną zwlekali do oporu :P
OG
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 4 lata
  • Postów:71
0

Raz to pisałem, było na to godzina i z tego co pamiętam to było zaimplementować RLE, i coś tam jeszcze rekurencyjnie chyba przechodzenie drzewa inorder, więc raczej niezbyt trudne.

Darck
Run Length Encoding?
PO
  • Rejestracja:prawie 10 lat
  • Ostatnio:6 dni
  • Postów:153
2

Ja miałem 3 zadania i 3h. Generalnie bardzo dobrze sobie przeczytać od razu wszystkie zadania i zacząć od najłatwiejszego.

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8399
0

Coś w tym jest. Bo jak się zacznie od najtrudniejszego, to potem można go i tak ani jego nie skończyć, ani reszty.

Swoją drogą taktyka dotycząca zdawania testów powinna być uczona w szkołach - gdzie też trzeba zdawać różnego rodzaju testy, czy maturę - a np. na maturze cholernie dużo zależy nie tylko od strategii (czyli nie tylko od tego, jak się będziesz uczył przed maturą), ale również od taktyki (czyli jak konkretnie będziesz rozwiązywać te testy, w której kolejności, albo co zrobić jak się nie udaje zadanie itp.).

Ja np. nie zdałem dobrze matury, bo miałem kiepską taktykę, i zabrakło mi czasu na rozwiązywanie zadań. Podobnie na testach programistycznych. Mogę umieć programować, ale ze słabą taktyką i tak źle zrobię test (właśnie, mam zrobić dzisiaj test na Devskillerze, ale pewnie mi i tak źle pójdzie)


Zobacz pozostałe 9 komentarzy
WeiXiao
No nie wiem. Jeżeli dobrze wyklepiesz kiełbasy i inne tego typu zbiory, to takie zadania robisz z marszu. Nie zastanawiasz się nad głupotami, bo po prostu już rozwiązywałeś takie zadania kilka+ razy.
LukeJL
No w sumie tak, mi tej kiełbasy zabrakło. Uczyłem się raczej ogólnie wiedzy z liceum, ale nie pomyślałem, że najważniejsze jest klepanie zadań na czas (bo wydawało się, że czasu będzie aż za dużo, tylko na egzaminie jakoś bardzo szybko leci ten czas)
LukeJL
swoją drogą ludzie, żeby maturę zrobić dobrze i zdać na wymarzony kierunek i tak zwykle poprawiają. Mało kto chyba robi dobrze za pierwszym razem.
WeiXiao
chyba na medycynie :D
LukeJL
@WeiXiao nom, na medycynę na pewno.
Brickcloak
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:11
3

Pisałem testy i na Hackerranku i na Codility. Na Devskillerze jeszcze mi się nie zdarzyło. W moim wypadku wyniki tych testów często były bardzo skrajne. Za to dzisiaj odrzucam wszystkie zapytania, gdzie Codility i Hackerrank są pierwszym etapem rekrutacji. Nie mam na te testy czasu i chęci. Jakbym miał na te syntetyczne zadania tyle czasu, co na studiach, to tak. Dziś nie :-)

Berylo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 miesiące
  • Postów:344
0

Raz miałem zadanie gdzie podane były dwa prostokąty, oba w postaci 4 punktów na osi współrzędnych. Trzeba było napisać algorytm, który sprawdza czy te prostokąty nachodzą na siebie (problem kolizji). Czas 15-20min - nie zdałem :D
Trochę przegieli z czasem moim zdaniem i to było zadanie na zasadzie: "jak wiesz jak to zrobisz to zrobisz, jak nie to nie zdążysz rozkminić"

edytowany 1x, ostatnio: Berylo
Zobacz pozostałe 18 komentarzy
superdurszlak
@iksde: A potem okaże się, że algorytm miał działać z maksymalną dokładnością typu double, więc potrzebujesz lekko licząc macierz rozmiaru 10^17 x 10^17 :D
IK
W sumie racja, nie trzeba trzymać tej macierzy w pamięci.
superdurszlak
I nadal potrzebujesz sprawdzić 10^34 wirtualnych punktów :P Czyli używając do tego superkomputera z maksymalną mocą obliczeniową 1 EFlops (10^18 Flops) i wykorzystując go w 100%, wciąż potrzebujesz zaledwie 316mln lat by wykonać obliczenia :D
IK
Ty mówisz 316mln lat, ja mówię "w skończonym czasie" :D
superdurszlak
Codility / Hackerrank i inne hocki-klocki mówią Timeout :D
Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
2
Berylo napisał(a):

Raz miałem zadanie gdzie podane były dwa prostokąty, oba w postaci 4 punktów na osi współrzędnych. Trzeba było napisać algorytm, który sprawdza czy te prostokąty nachodzą na siebie (problem kolizji). Czas 15-20min - nie zdałem :D
Trochę przegieli z czasem moim zdaniem i to było zadanie na zasadzie: "jak wiesz jak to zrobisz to zrobisz, jak nie to nie zdążysz rozkminić"

To tylko pokazuje 'sensowność' tych zadań. Sam co jakiś czas siadam i próbuję porozwiązywać coś typowo algorytmicznego chociażby dla siebie. Kolega dostał Codility 3 zadania. Co z tego, że rozwiązał je dobrze skoro wyniki były 80% - 50% - 10%? ;-)

Ja również jak @Brickcloak omijam takie rekrutacje. Wolę pogadać z kimś na żywo i podyskutować nad jakimś problemem nawet na zasadzie pseudokodu jeżeli już tak bardzo chcą ten typ rekrutacji. Chociaż osobiście wolałbym skupiać się na rekrutacji typowo pod wykonywane stanowisko co niestety ma miejsce 1-2 razy na 10.


"Trolling is a art"
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
1

Mi by się podobało gdyby taki code test miał coś wspólnego z tym co rzeczywiście tworzy się w takiej firmie. Czyli jesli aplikacje enterprajs w Springu, to mamy kawałek aplikacji webowej a kolejny mamy dodać, przy czym to prędzej pasowałby na normalnej rozmowie - dobry sposób na sprawdzenie czy ktoś rzeczywiście ktos jest np. into SOLID czy tylko umie pięknie toerię powiedzieć :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Berylo
Myślę że te testy mierzą bardziej inteligencję i wyczucie algorytmiczne niż umiejętność programowania. Ma to uzasadnienie na stanowiskach w których się robi coś takiego
AF
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 dni
  • Postów:172
2

Problem z takimi zadaniami jest taki, że często są faktycznie trudne i zajmuje mi chwilę optymalne rozgryzienie problemu ale po zrobieniu podobnego zadania / zobaczeniu rozwiązania każde kolejne podobne rozwiązuje się szybko (i wtedy te limity czasowe mają sens). Czyli często sprowadza się to do pamięciówki i 'grindowania' zadań. Na niektórych forach jest to wręcz nazywane 'leetcode/codility grind'. Od takich zadań wolę dostać zadanie i możliwość dyskusji z rekruterem. Podczas takich rekrutacji wręcz razem dochodziliśmy do wspólnego rozwiązania - oni widzieli że umiem myśleć a ja widziałem jak dobrze się współpracuje.

cepa
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 dni
0

Trzy zadania, jedno proste z algorytmem o złożoności O(n), drugie nieco trudniejsze ze wskaźnikami i optymalnym rozwiązaniem O(nlogn) i trzecie przejebane z teori liczb z ciągiem Fibonacciego - "określ ostatnie chyba 6 cyfr n-tej liczby ciągu Fibonacciego gdzie 1 <= n <= 1000000", jak nie kojarzysz ciągu Pisano to ni-chu-ja. :P

Brickcloak
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 2 lata
  • Postów:11
1
cepa napisał(a):

jak nie kojarzysz ciągu Pisano to ni-chu-ja. :P

Piszesz taki test, wymyślasz rozwiązanie, a potem w pracy encja na twarz i pchcasz, a największym wysiłkiem jest ręczny deploy wielgachnej aplikacji, bo nikt nigdy nie miał czasu, żeby to zautomatyzować :-)

leggo
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Chorzów
  • Postów:65
1

to co teraz zrobię jest pewnie nie do końca legalne, ale najbardziej popier..... pytanie, jakie miałem na codility to było to:

screenshot-20190212224828.png

przeczytałem to 5 razy, zrobiłem jak umiałem i chyba trochę źle :D
znaczy czegoś tam brakowało, jakiegoś warunkowego ifa.

Berylo
nawet bym nie próbował tego robić jakbym dostał coś takiego na rekrutacji. Nie wiem ile by musieli płacić w tej firmie albo jak bardzo zdesperowany bym musiał być, żeby dać się wciągnąć w proces rekrutacji, który tak wygląda
Hispano-Suiza
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 5 lat
2
leggo napisał(a):

przeczytałem to 5 razy, zrobiłem jak umiałem i chyba trochę źle :D
znaczy czegoś tam brakowało, jakiegoś warunkowego ifa.

Mi by się nie chciało tego czytać. Po pierwsze dlatego, że wygląda na kolejne zadanie z serii masz X punktów - skonstruuj z nich kamasutrę.
Po drugie dlatego,że po zatrudnieniu w tej firmie prawdopodobnie wszystkie taski z całego roku nie miałyby długości tego zadania, a wtedy zwyczajnie bym się wk...zdenerwował, że zatruwano mój czas czymś czym nie zajmuję się w pracy.
Dalszy scenariusz miałby dwa zakończenia - wymyślający taką rekrutację dostałby w dziób, a zaraz potem papier na stół z wypowiedzeniem. Drugi wariant to papier z wypowiedzeniem i w dziób.

Chyba, że rekrutowałeś się do jakiejś agencji kosmicznej robiącej zaawansowane algorytmy do sterowania statkami kosmicznymi - to wtedy okej :-)


"Trolling is a art"
Shalom
No, ten algorytm który przedstawiłem poniżej faktycznie jest porównywalny ze sterowaniem statkami kosmicznymi xD
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
2

Trochę bez sensu to zadanie, bo polega na zauważeniu pewnego matematycznego triku, mianowicie ze jeśli (a - b) mod M == 0 to znaczy, że a mod M == b mod M, więc można przelecieć wszystkie liczby w tablicy i policzyć dla każdej właśnie taką wartość a następnie sprawdzić ile razy ten sam wynik wystąpił i wybrać największy ;]
Jest to o tyle bez sensu że jak wpadniesz na ten trik, to jest do zrobienia w 5 minut w kilku linijkach, a jak nie wpadniesz to dupa.

Kopiuj
def solve(A, m):
    counts = collections.defaultdict(int)
    for a in A:
        counts[a%m] +=1
    return max(counts.values())

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 4x, ostatnio: Shalom
leggo
Też używałem modulo w tym zadaniu, ale przekombinowałem chyba trochę. Działało na zbiorze testowym, ale nie do końca na innych zbiorach :D
Shalom
Zakresy danych są tak dobrane że widać ze musi być O(n) albo O(nlogn) bo O(n^2) już będzie za duże. Ale tak jak mówię, cała trudność tutaj to zauważyć taką matematyczną własność, więc z punktu widzenia rekrutacji dla programisty to jest bez sensu zupełnie.
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8399
4

Najtrudniejsze jakie miałem kiedyś na Codility to obliczyć liczbę rodzin, która się zmieści na pokładzie samolotu. Ta, może to powinno być super łatwe, ale nie umiałem wykminić algorytmu w odpowiedniej ramie czasowej. W realnym świecie nawet jeśli wykminienie algorytmu zajęłoby mi pół dnia a nie 30 minut, to nikt by problemu nie robił XD (chodzi mi o to, że w realnym świecie nie planuje się zadań do wykonania w 30 minut, tylko raczej na ileś dni, więc 30 minutowa zamuła w realnej pracy nic nie znaczy).

Odchodząc do Codility, to w Devs'killlerze miałem teraz to zadanie z drzewkiem (jak ktoś miał zadanie JavaScript z drzewkiem w Devs'killlerze, to pewnie to samo). Drugi raz w życiu to samo zadanie dostałem, ale znowu mi się nie udało zrobić (Częciowo dlatego, że Devs'killer miał crasha i rzucał błędami). Dostałem mega dziwną odpowiedź od HRki (że niby doceniają profil, doświadczenie, ale dziękują za udział, czyżby chodziło o słaby test w Devs-killerze? Dziwne to wszystko).

Moim zdaniem to, że komuś się coś nie udało pod presją czasu, w stresie i z mglistymi wymaganiami, nie znaczy, że jest złym developerem.


Hispano-Suiza
Dostales standardowa regulke z HR, a zadania nikt nie sprawdzal bo nie osiagnelo jakiegos tam progu %. Ot cala historia :]
LukeJL
@Hispano-Suiza chyba masz rację xD odpisała mi, że kierowali się po części wynikami testu (a to, że parę pytań w teście nie miało sensu (i napisałem tam swoje uwagi), i że cała platforma testująca była do d**y, już nikogo nie obchodzi xD)
DC
  • Rejestracja:około 12 lat
  • Ostatnio:około godziny
  • Postów:409
4

W realnym świecie nawet jeśli wykminienie algorytmu zajęłoby mi pół dnia a nie 30 minut, to nikt by problemu nie robił XD (chodzi mi o to, że w realnym świecie nie planuje się zadań do wykonania w 30 minut, tylko raczej na ileś dni, więc 30 minutowa zamuła w realnej pracy nic nie znaczy).
Moim zdaniem to, że komuś się coś nie udało pod presją czasu, w stresie i z mglistymi wymaganiami, nie znaczy, że jest złym developerem.

To troche tak jakby klub pilkarski zrobil rekrutacje na nowego napastnika i przyszedlby taki Cristiano Ronaldo ze swoim CV.
No bardzo ladne CV panie Ronaldo, duzo doswiadczenia w pilce noznej. Tutaj zapraszamy do naszej testowej drużyny na sparing i ma pan 10 minut zeby strzelic gola z przewrotki.

Oj nie udało się no trudno, faktycznie doswiadczenia pan ma... oddzwonimy ;)

edytowany 2x, ostatnio: dbCooper
leggo
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Chorzów
  • Postów:65
0

Wracając trochę do pierwszego postu, jak to jest, że ja też jestem w trakcie rekrutacji do motoroli i nie miałem testu codility?
@lambdadziara jak Ci poszło?

Zobacz pozostałe 5 komentarzy
lambdadziara
nie poszlo w ogole... Test ok, rozmowa telefoniczna, moze jakis background check... cos im sie nie spodobalo. Ale ostatni tydzien co chwile wchodzi mi ktos na linkedina co mnie martwi, bo nie ma na nim ciekawego :) nic to, sprobuje w kwietniu, dla odmiany - linux academy
superdurszlak
ktoś z docelowego zespołu mógł zobaczyć Twoje żale na forum :P
szarotka
Ale że wszystko poszło ok lambadziara a nie powiedzieli czemu nie?
superdurszlak
@szarotka: w Krakowie to normalne, raz miałem tak że rekruterka włożyła naprawdę sporo energii w zapewnianie mnie przez ładnych parę tygodni co kilka dni, że już, już będzie feedback i że już są prawie gotowi, i żebym ze 2-3 dni zaczekał, i jakoś do dziś go nie dostałem :P
leggo
mam być w czwartek w motoroli na rozmowie z menedżerem chyba.
ZE
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

Jest gdzieś zbiór przykładów zadań na codility ?
Mozliwe że będę miał tam zadanie do wykonania i chciałbym popatrzeć jak to mniej więcej wygląda i się rozwiązuje.
Zdaje mi się że to trochę pomyłka bo te zadania nie mają odzwierciedlenia w praktyce programistycznej (nie licząc pewnych wyjątków) no ale co zrobić.

Zobacz pozostały 1 komentarz
ZE
racja, nie zauważyłem tego na pierwrzy rzut oka, sorry za bezsensowne pytanie
Hispano-Suiza
(...) no ale co zrobić. - mieć to w d*pie.
Hispano-Suiza
@LukeJL: Ja bym w tym nie chciał brać udziału. Na pierwszym miejscu jest Tadeusz Sznuk.
LukeJL
nom, to samo zauważyłem.
A5
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 lat
  • Postów:1
2

Gdyby firma chciała sprawdzić jak sobie człowiek radzi z zadaniami to by go zaprosiła na rozmowę z rozwiązywaniem zadań przy tablicy :)

Testy typu codility to testy psychologiczne.
Równie dobrze mogłyby pytać o zwierzą jakim chcesz być. :)

Test codility ma wyłonić ludzi na tyle zaangażowanych w szukanie pracy, że aż im się chce brać udział w takim wyścigu szczurów. Test po stronie pracodawcy nie angażuje ani ludzi ani czasu; można testować 1oo albo 5oo ludzi.
Po teście 2 tygodnie albo 4 oczekiwania na kolejny etap rekrutacji.
Po czwartym etapie zostaną mierni, bierni ale zdeterminowani; prawdopodobieństwo, że nie nie rzucą pracy nad betonowym projektem w skostniałej organizacji jest rośnie. :)

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8399
4

rozmowę z rozwiązywaniem zadań przy tablicy

Rozwiązywanie zadań przy tablicy też badają raczej w dużej mierze cechy psychologiczne - sposób myślenia, inteligencję, odporność na stres, odwagę do przyznania się do niewiedzy (ew. umiejętność zrobienia zadania pomimo własnej niewiedzy, umiejętność snucia domysłów, kombinowania).

No i robienie zadań przy tablicy to też test osób rekrutujących. Warto popatrzeć sobie jak będą reagować, czy np. jak ci coś nie pójdzie, to będą próbowali cię naprowadzać, czy może będą mieć satysfakcję i wzrok typu "ale leszcz, nie umie tego" (jeśli to drugie, to raczej nie warto z nimi pracować).


ZE
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

Tam czas wykonania zadania wpływa jakoś na ocenę?

Shalom
masz górny limit czasu w którym masz się zmieścić
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:minuta
  • Postów:8399
1

Ja tam słabo wychodzę w takich testach, bo w normalnej pracy muszę się rozgrzać najpierw (np. wdrożyć w taska, dopytać o nieścisłości, zrobić research), a dopiero potem mogę zasuwać jak rakieta, jak już ogarniam, co jest do zrobienia i jak to zrobić. Chociaż przy nietrywialnych rzeczach okazuje się, że pierwsza implementacja jest do d**y. Czyli teoretycznie jest trochę dłużej, ale i tak się opłaca, bo potem jest to bardziej utrzymywalne.

Natomiast takie testy badają, czy ktoś potrafi zapieprzać już na wstępie i robić zadania wyczynowo.

Swoją drogą, czy ktoś z was jest dobry w te całe Codility i podobne? Jeśli tak, to czy samo przyszło, czy ćwiczyliście?

Ja muszę powiedzieć, że to mi trochę na ambicję wchodzi, i może poćwiczę sobie zadania, żeby móc np. w 5-10 minut rozwiązywać zadania przeznaczone na kilkadziesiąt minut. I może się nauczę najbardziej spotykane algorytmy, żeby nie musieć kombinować, tylko z pamięci jechać.

Ale jak dla mnie Codility itp. to raczej programowanie wyczynowe niż developerka. Jak ktoś tego używa do rekrutacji to trochę jakby zatrudniano kierowców autobusów na podstawie tego, czy potrafią robić tricki na motocyklu.


edytowany 1x, ostatnio: LukeJL
ZE
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

Kopiuj
function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

ale nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:około godziny
  • Postów:1473
0
zergeling napisał(a):

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

Kopiuj
function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

ale nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

Pewnie przez to, że sortujesz na początku. Ta tablica może przyjmować 1000 000 000 elementów a ty to sortujesz to wynik jest jaki jest

edytowany 1x, ostatnio: szydlak
ZE
bez sortowania to tak nie zadziała, jeśli chodzi o performance to miałem 100%
PO
Nie trzeba tego sortować. Tutaj jest myk żeby znać wzór na sume ciągu arytmetycznego.
superdurszlak
  • Rejestracja:prawie 7 lat
  • Ostatnio:2 dni
  • Lokalizacja:Kraków
  • Postów:1999
0
zergeling napisał(a):

Zrobiłem:
Lesson 4
Counting Elements

PermCheck

Kopiuj
function solution($A) {
    // write your code in PHP7.0
    
    $max = max($A);
    arsort($A);

    foreach($A as $value)
    {
        if($max == $value)
        {
            $max--;
            continue;
        }else
        {
            return 0;
        }
    }
    
    return 1;
}

nie kumam czemu tylko 66%, tzn nie wiem co jest nie tak w tym rozwiązaniu

A co to zadanie miało sprawdzić? Czy tablica to ciąg elementów 1...N?

Może wystarczyłoby coś w stylu (pseudokodem, nie babram się w PHP)?

Kopiuj
return A.min() == 1 and A.max() == A.size() and A.toSet().size() == A.size()

ZE
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

A non-empty array A consisting of N integers is given.

A permutation is a sequence containing each element from 1 to N once, and only once.

For example, array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

is a permutation, but array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

is not a permutation, because value 2 is missing.

The goal is to check whether array A is a permutation.

Write a function:

int solution(int A[], int N);

that, given an array A, returns 1 if array A is a permutation and 0 if it is not.

For example, given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3
A[3] = 2

the function should return 1.

Given array A such that:

A[0] = 4
A[1] = 1
A[2] = 3

the function should return 0.

Write an efficient algorithm for the following assumptions:

N is an integer within the range [1..100,000];
each element of array A is an integer within the range [1..1,000,000,000].

edytowany 1x, ostatnio: zergeling
SZ
Tak na marginesie :P, All Rights Reserved. Unauthorized copying, publication or disclosure prohibited
SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:około godziny
  • Postów:1473
0

Mi ten kod daje 100%, może nie jest najładniejszy ale działa :)

Kopiuj
var count = A.Count();
            int[] tab = new int[count];
            for (int i = 0; i < count; i++)
            {
                if (A[i] - 1 < count && tab[A[i]-1]==0)
                    tab[A[i] - 1] = A[i];
                else
                    return 0;
            }
            return 1;
edytowany 1x, ostatnio: szydlak
ZE
  • Rejestracja:około 9 lat
  • Ostatnio:ponad 5 lat
  • Postów:35
0

Spróbowałem rekrutacji i poległem na codility. W zasadzie poprawność była 100% ale performance na 0% :/. Operacje na tablicach do 100k rekordów i ich wartości liczbowe z bardzo dużych przedziałach ale nie mogę napisać tu treści zadania.

Shalom
Niestety 0% performance = 0% poprawności, bo twój kod zwyczajnie nie działa dla jakichkolwiek większych danych.
LI
  • Rejestracja:około 8 lat
  • Ostatnio:26 minut
  • Lokalizacja:Kraków
  • Postów:31
0

Ostatnio miałem Codility - 4 zadania na 2 godziny. Była ostra jazda. Zrobiłem 3,5 zadania i dostałem 66%.

P.S. 1 Pierwszy raz miałem sytuację (nie wiedziałem, że Codility to umożliwia) miałem zadania oprócz C#/C++/Java na FrontEnd (pisane w JQuery) oraz zapytania w SQL. Czyli 2 zadania algorytmiczne + 1 JQuery (zmiana treści na stronie) oraz specjalne zapytanie w SQL. Nie było łatwo.

P.S. 2 Codility to pikuś. Miałem ostatnio okazję zasmakować Codility Live. Generalnie to Codility + goście którzy na żywo patrzą na to co piszesz i proszą, by pisać w edytorze Codility, a nie w Visual Studio, żeby widzieli jak powstaje kod. To w połączeniu z wideo konferencją - bardzo nie polecam.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)