Skocz do zawartości

Zadanie dla programisty


Rekomendowane odpowiedzi

Ponieważ dużo tutaj jest informatyków, a więc ludzi z natury kreatywnych, mam następujący temat:

Potrzebuję krótkie zadanie do zrobienia dla programisty, takie na góra dwa dni, żeby mógł się wykazać swoją wiedzą, a przede wszystkim inteligencją. Nie chodzi o ślepą znajomość jakiegoś języka programowania czy środowiska, ale właśnie spryt i umiejętność znajdowania rozwiązania. Preferowana tematyka baz danych i SQL, ewentualnie Delphi, ale tutaj już nie za bardzo można się wykazać. Jeżeli rozwiązanie będzie jednolinijkowe, tym lepiej, byle nie dało się go znaleźć łatwo w Google.

Stawiam piwo.

Odnośnik do komentarza
Udostępnij na innych stronach

Gdybyś Ty był kreatywny to byś nie zadawał takich pytań na forum, bo sam byś wymyślił zadanie. Poszedłeś na łatwiznę jak większość ludzi.

 

P.S. To podaj odpowiedź skoro Ty jesteś kreatywny.

Problem w tym, że odpowiedzi na większość takich zadań są już w Google (nawet na takie, do których sam doszedłem). A za Einsteina się nie uważam, więc trudno wymyślić coś nowego. Gdyby nie było Google, to byle głupek wymyśliłby proste zadanie i podniecał się, że żaden z jego kolesi z klatki schodowej nie zna odpowiedzi.

Odnośnik do komentarza
Udostępnij na innych stronach

Jake, nie oceniaj mojej kreatywności, bo mnie nie znasz i nie masz prawa wyciągać takich wniosków.

 

A przy okazji - podaj mi link, gdzie google odpowiada na moje zadanie.

Jesteś nauczycielem? Oni tak mają - poszukają zadania w Google, co zajmuje im 5 minut, a że uczeń znajdzie odpowiedź w drugie 5 minut, to już ich nie obchodzi, Ważne, że oni mają to z głowy, bo to przecież takie męczące.

 

Pseudofilozoficzne zadania mnie nie interesują, ale np. takie, jak znaleźć w tablicy rekordy, które zawierają tylko litery. To akurat proste.

Edytowane przez jake
Odnośnik do komentarza
Udostępnij na innych stronach

Jesteś nauczycielem? Oni tak mają - poszukają zadania w Google, co zajmuje im 5 minut, a że uczeń znajdzie odpowiedź w drugie 5 minut, to już ich nie obchodzi, Ważne, że oni mają to z głowy, bo to przecież takie męczące.

 

Nie trafiłeś - nie jestem, natomiast powtórzę raz jeszcze: skoro dalej brniesz w przekonaniu, że znalezienie zadania i odpowiedzi zajmuje 5 minut to znajdź odpowiedź na moje pytanie i na nie odpowiedz. Zadanie jest proste i żadne pseudofilozoficzne.

 

Zresztą nie ma sensu ciągnąć dalej tego tematu, bo i tak wyjdzie na moje.

 

Najlepszego.

Odnośnik do komentarza
Udostępnij na innych stronach

Mamy 2 typy klientów (A i B).

Klient typu A może mieć 'córki' wtedy parent pokazuje na 'matkę'

Do transakcji zawsze dochodzi między A i B ( nie ma możliwości aby w jedną transakcje zaangażowane był A i A lub B i B ) przy czym 'córka' jest również typu A.

 

 

CREATE TYPE c_type AS ENUM ('A', 'B');

 

create table customers

( id serial,

parent int REFERENCE customer (id),

typ c_type,

name text

);

 

 

trochę podobną sytuacje mamy z produktami ( zakładamy że ilość produktów jest stała i znama ) czli są produkty główne i pod produkty.

Transakcja może być zawarta zaróno na produkt główny jak i na pod produkt.

 

CREATE TABLE products

(

id serial,

parent int REFERENCE products(id),

name text

)

 

 

 

 

wreszcie tabela reprezentująca operacje

 

create table transactions

( id int,

payer int REFERENCE customer (id),

partner int REFERENCE customer (id),

product int REFERENCE product (id),

secondary_id int,

fee numeric,

CONSTRAINT transactions_pkey PRIMARY KEY (id,payer,product,secondary_id)

);

 

 

id to indetyfikator 'transakcji' możemy myśleć że jest identyfikator kontraktu między stronami.

Kontrakt musi obejmować wykonanie jednej lub więcej usług (do ilości produktów) ( produktów ).

Jeden kontrakt zawsze skutkuje conajmniej dwoma wpisami

np kontrakt 1 między A:321 i B:5432 na wykonanie usług 8 i 9 będzie reprezentowany tak:

1;321;5432;8;NULL,1.1

1;5432;321;8;NULL,0.1

1;321;5432;9;NULL,1.43

1;5432;321;9;NULL,32.11

 

 

Jak widać z przykłądu powyżej fee za pojedynczą usługę jest różne po każdej ze stron.

 

Secondary id jest użyty tylko kiedy występuje więcej jak jedna usługa danego typu w obrębie kontraktu.

Ale uwaga jeśli w obrębie jednego kontraktu występują np dwie usługi P3 to ilość transakcji P3 w raporcie o którym mowa w zadaniu to 1.

Przykłąd - Usługa poinformowanie SMS - liczymy za każdego SMS ale traktujemy w raporcie jak 'pakiet'

 

Teraz wreszcie zadanie.

 

Trzeba wygenerować raport przychodów i iliści transakcji per Klient A i każdy produkt podstwowy.

Dodatkowo policzyć wpływ wynikający z transakcji od każdego klienta typu A oraz rozbić to na wpływ od owego klienta i 2gich strom wszystkich jego transakcji oraz to samo per każdy produkt i ilość ptrnsakcji takiego prduktu i średnie.

 

 

spodziewamy się takiej tabelki na wyjściu

 

total_fee,total_tr_cnt,total_avg_fee,A_sum_fee,A_avg_fee,B_sum_fee,B_avg_fee,P1_total_fee,P1_A_sum_fee,P1_B_sum_fee,P1_tr_cnt,P1_avg_fee,P1_A_avg_fee,P1_B_avg_fee ...

A1

A2

A3

A4

.

.

.

 

gdzie kolumny znaczą

total_fee - suma wpływów dla wiersza

total_tr_cnt - ilość transakcji dla wiersza

total_avg_fee - średnia fee dla wiersza

A_sum_fee - suma wpływów od klienata typu A dla wiersza

A_avg_fee - średni fee od klienata typu A dla wiersza

B_sum_fee - suma wpływów od klienata typu B dla wiersza

B_avg_fee - średni fee od klienata typu B dla wiersza

P1_total_fee - suma fee dla produktu P1 dla wiersza

P1_A_sum_fee - suma fee dla produktu P1 od klienta typu A dla wiersza

P1_B_sum_fee - suma fee dla produktu P1 od klienta typu B dla wiersza

P1_tr_cnt - ilość transakcji produktu P1 dla wiersza

P1_avg_fee - średnie fee dla wiersza

P1_A_avg_fee - średnie fee produktu P1 od klienta typu A dla wiersza

P1_B_avg_fee - średnie fee produktu P1 od klienta typu B dla wiersza

 

 

Oczywiście każdy produkt musi być zmapowany do Master produktu a każdy klient do master produktu

No i część P powinna być powielona do ilośći master produktów

 

 

 

Zadanie nie jest łatwe ani do zrozumienia ani do wykonania ani do napisania.

Jest to uproszczony sceneriusz czegoś z czym walczyłem ( wygrałem ) niedawno.

Moje rozwiązanie ma jakieś 180 lini ( jest to jedno zapytanie SQL )

ilość wierszy w tabeli transactions to od 1.2 - 2.5 mln

w pliku wyjściowym jest niecałe 900 wierszy i kolumn do AW.

czs wykonania zależy - ale waha się do 90-550 sekund - oparte na PostgreSQL 9.3

( ale mój przypadek jest bardziej złożony )

Odnośnik do komentarza
Udostępnij na innych stronach

A co to w ogóle znaczy "myśl przewodnia tematu"? To się nazywa pleonazm.

 

Mamy 2 typy klientów (A i B).

Chyba jednak zbyt skomplikowane, ale dzięki. Może kiedyś wykorzystam.

 

no i teraz jake zabłyśnie jaki jest inteligentny ,ba nawet może podwyżka będzie :)

Mylisz się i to bardzo. Na pewno nie moja.

Odnośnik do komentarza
Udostępnij na innych stronach

ale np. takie, jak znaleźć w tablicy rekordy, które zawierają tylko litery.

Nie wiem czy chcesz zadania rodem z przedszkola programistycznego czy coś z algorytmiki, ale tutaj masz jedno:

Mając listę N liczb wiemy o nich, że wszystkie liczby na liście występują dwukrotnie oprócz jednej. Czyli lista wygląda na przykład tak:

12 12 10 10 13 15 15

Liczba która jest tutaj sama to 13.

Dla danej listy znajdź jedną liczbę niepasującą. Nic nie zakładaj o przedziale liczbowym.

Rozwiąż to zadanie w czasie liniowym i pamięci stałej(!). Wszystkie chwyty dozwolone.

Edytowane przez piwosz
Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.