30 / 56
Aug 2018

Witam, napisałem program i niby wszystko działa dobrze, jednak sędzie zwraca Przekroczono limit czasu

#include “iostream”
#include “cstdlib”
#include "ctime"
using namespace std;

int main()
{
int liczba1,liczba2,liczba3,liczba4;
srand(time(NULL));
int a = (rand() % 6) + 1;
int b = (rand() % 6) + 1;
int c = (rand() % 6) + 1;
int d = (rand() % 6) + 1;
for(int i = 0; i < 10; i++)
{
cin >> liczba1 >> liczba2 >> liczba3 >> liczba4;
int prawda1, prawda2, prawda3, prawda4;
if (liczba1 == a) prawda1 = 1;
else if (liczba1 == b || liczba1 == c || liczba1 == d)
prawda1 = 0;
else prawda1 = -1;

	if (liczba2 == b) prawda2 = 1;
	else if (liczba2 == a || liczba2 == c || liczba2 == d)
		prawda2 = 0;
	else prawda2 = -1;
		
	if (liczba3 == c) prawda3 = 1;
	else if (liczba3 == a || liczba3 == b || liczba3 == d)
	prawda3 = 0;
	else prawda3 = -1;

	if (liczba4 == d) prawda4 = 1;
	else if (liczba4 == a || liczba4 == b || liczba4 == c)
		prawda4 = 0;
	else prawda4 = -1;

	cout << prawda1 << " " << prawda2 << " " << prawda3 << " " << prawda4 << endl;

	if (prawda1 == 1 && prawda2 == 1 && prawda3 == 1 && prawda4 == 1)
		break;
}
return 0;

}

Możesz wytłumaczyć co robi twój program? Bo wydaje mi sie że nie to czego wymaga zadanie.

Na początku losuje 4 cyfry, później wczytuje 4 liczby i sprawdza czy zgadzają się z tymi wylosowanymi.

Przeczytaj zadanie uważnie, i określ kto ma zgadywać. Ty uważasz że komputer, a czy na pewno ?

1 month later

Dobra już się całkowicie pogubiłem. Tego nie da się zrealizować bo taka gra wymaga interakcji obu stron. A jak mam nawiązać interakcję ze spojem? Spoj nie jest w stanie ani mi udzielać odpowiedzi kiedy ja jestem graczem, ani też nie jest w stanie odgadywać moich liczb (wylosowanych randomowo?), no chyba że w każdej rundzie będzie strzelał na ślepo.

ten sędzia jest w stanie pobierać twoje odpowiedzi i generować odpowiedź na nie. W opisie jest opisana interakcja i działa tak jak opisano. 570 rozwiązań chyba skutecznie mówi że da sie zrealizować

Ktoś mi podesłał gotowca krótkiego na kilka linijek. Wynika z tego że to mój program ma być graczem a sędzie na spoju będzie wypisywał 1, 0 albo -1. Ale jak to technicznie jest zrobione to nie wiem bo musiałby być po stronie serwera jakiś skrypt który będzie przetwarzał moje wpisywane liczby. Tak czy inaczej zadanie bez sensu bo bez kompletnie żadnej implementacji AI da się to za każdym razem rozwiązać maksymalnie w 6 próbach.

człowiek uczy się przez całe życie (choć być może nie każdy). Do tej pory myślałem, że spoj służy do zabawy/nauki/programowania. A tu okazuje się że jeszcze do narzekania: zadanie niejasne, za trudne, za łatwe, nie da się zrobić, a jeżeli się da, to niczego nie uczy

No zadanie zaskoczyło mnie dwukrotnie. Pierwsze to że spoj może w jakiś sposób komunikować się z testowanym programem, pierwszy raz takie zadanie mi się trafiło. A drugie to myślałem że będzie trzeba trochę pokombinować ułożyć jakiś skomplikowany algorytm odpowiednio reagujący na odpowiedzi . Jak padnie “1” to reaguj tak,jak padnie “-1” to reaguj jeszcze inaczej itp… A tu wystarczy metodą głupiego po kolei podstawiać wszystkie liczby… Dosłownie zero algorytmiki :wink: Trochę słabo :wink:

Ależ informacje o interaktywnej wersji sędziego są dostępne nawet na forum (wystarczy poszukać). Oczywiście żadnego skryptu nie ma bo i po co?

Ależ to zadanie łatwe, które w większym stopniu ma oswoić Cię z tego rodzaju problemami aniżeli nauczyć jakichś minimaxów. Gotowiec i szok “o kurde, to faktycznie da się zrobić” to wystarczający efekt

A wg mnie to dobrze, że ktoś narzeka. Nie grozi nam stanie się śmietanką alias “kółko wzajemnej adoracji”. Każdy przeczyta, wyciągnie wnioski (albo i nie) i tyle.

A mogę prosić o jakiś link bo nic takiego nie widzę. A swoją drogą to chyba nie ma obowiązku przeczytania wszystkich tematów na forum aby poznać funkcjonowanie spoja? Fajnie byłoby jakby był przypięty temat dla nieobeznanych użytkowników z tymi wszystkimi zasadami. Szczególnie co znaczy “nieokreślona ilość danych wejściowych” itp.

Dobrze to ująłeś że takie kółko nie powstanie, bo tu już takie kółko funkcjonuje od ładnych kilku lat :wink: Co prawda skupia wąskie grono ale zawsze :wink:

Na pewno? Ciągle marudzenie jest irytujące po prostu. Tym bardziej że tu raczej brakuje filtrów

Ostatnio mam nieco więcej luzu niż bym chciał. Za mało by zrobić coś tak ambitnego jak testy do zadań, które chciałem wstawić na SPOJa - próbowałem to robić na raty, ale nie wychodzi mi to. Muszę znaleźć dzień by nad tym siąść i basta. Za mało by skupić się na jakimś zadaniu i je rozwiązać - próbowałem trzy razy podejść do Cwanego Lutka i zawsze coś mi przeszkodziło więc już nie próbuję.

Są jednak rzeczy, które można robić na raty. Np. co jakiś czas wejść na forum i odpisać ludziom. Marudzenie @manjaro sprawiło jednak, że jakoś nieszczególnie mi się chciało tu wchodzić i odpisywać (robiłem to sporadycznie w naprawdę wolnych chwilach). Co więc zrobiłem? Odpocząłem, spacerowałem, rozmyślałem, a nawet spłodziłem pliki źródłowe, dzięki którym mam nadzieję w przyszłości rozwiązywać zadania na SPOJu bez użycia STLa (i nie tylko) :wink: Obecnie postanowiłem poświęcić trochę czasu książkom. Nienaukowym. A tym bardziej nietechnicznym: teraz “Ogień i furia. Biały dom Trumpa”, a wkrótce “Antoni Macierewicz. Biografia nieautoryzowana”. Po co, skoro nie interesuje się polityką? Z czystej ciekawości i dla poznania jakichś ciekawych anegdotek :wink:

Na prawdę nie żałuję i pomimo młodego wieku pozwolę sobie mędrkować, że SPOJ SPOJem, zadanka zadankami, nauka nauką i kariera karierą ale trzeba też trochę się zrelaksować, napić jakiegoś dobrego miodu pitnego, coś przeczytać, gdzieś wyjść, może coś pomajsterkować, pobyć ze znajomymi… Po czymś takim każdy przejaw defetyzmu albo malkontenctwa innych ludzi nie stanowi dla Ciebie niczego innego niż źródła refleksji nad ludzką naturą, problemami (ludzkimi i SPOJowymi), … :wink:

Stąd jak mówię: (czasami) to dobrze, że ktoś narzeka.

Ciesze się że zrobiłem coś dobrego dla Ciebie :wink:
P.S moja żona też mówi że jestem malkontentem, dotąd myślałem że przesadza ale muszę się nad tym głębiej zastanowić, może coś w tym jest jednak :wink:
A swoją drogą Wy nie marudzicie bo zrobiliście te zadania kilka lat temu kiedy funkcjonowało stare forum, gdzie była kopalnia wiedzy. Teraz patrzycie na wszystko z góry i się dziwicie że ktoś czegoś nie wie albo nie rozumie funkcjonowania spoja. Jakby był na forum przypięty temat FAQ dla początkujących to byłoby mniej marudzenia :wink:

No brawo! Brawo Ty. I niby skad sie wziela ta kopalnia? Tak sama z siebie? A brawo, za KOMPletnie bzdurne usprawiedliwienie marudzenia.

Jezeli chodzi o kolka wzajemnej adoracji, to faktycznie zauwazam ich istnienie. Ale do twojego, wiecznych malkontentow sie nie pisze.

PS
Klikam na smartfonie I nie chce mi sie dalej gadac

Hipotetycznie wystarczy że ktoś wrzuci dobry kod z małym błędem i pyta dlaczego nie działa. I już w tym momencie reszta forumowiczów ma prawie gotowca. A w każdym razie ma pomysł jak ugryźć problem. Kto skorzystał na tym to skorzystał. Później forum poszło w diabły. A dzisiaj te osoby co skorzystały się dziwią że ktoś nowy nie wie jak się zabrać do problemu… Szczyt hipokryzji.

Odkąd nie działa stare forum wielu ludzi rozwiązało ten problem (w tym ja) i jakoś nie narzekali. Jak im (i mi) się udało to zrobić? Otóż nie robili durnych i nadmiarowych założeń, które Ty robisz nieustannie. Przykłady? Pokolei:

Czy ktoś Ci powiedział (zagwarantował), że takiego AI nie ma? Jeżeli nie to dlaczego przyjąłeś, że go nie ma i się dziwisz, że program jakoś reaguje (dokładnie: że sędzia może być interaktywny)?

Udowodniłeś jakoś niemożność skrócenia obliczeń? Czy ponownie tylko tak przyjąłeś bo tak Ci się wydaje?

Z dawnych rzeczy:

Ale dlaczego? Wszystkie gry mają nieskończoną pętlę na przykład (jest tam while(true)). Dlaczego w ogóle wpadłeś na pomysł przekonania samego siebie, że to jest durne?

Również tego nie dowiodłes. Po prostu Ty nie znałeś innego wyjścia i założyłeś ponownie, że go po prostu nie ma. Pewnie jakbyś całe życie pracował w kopalni pod ziemią to nie wierzyłbyś w istnienie słońca bo go sobie nie wyobrażasz.

Już Ci dawno temu odpowiedziałem i zrozumiałeś, że w tym jest sens, ale dlaczego postawiłeś na początku tezę, że jest to kompletnie bez sensu? Gdybyś jej nie postawił nie miałbyś tylu pytań. Jeżeli jest jakaś funkcja języka programowania (nawet słynne z C++ goto lub właśnie taka dziwna pętla) to prawdopodobnie ma to jakiś sens bo mądrzejsi od Ciebie (i ode mnie) tworzą języki programowania. Więc powiedz jakim cudem można ich tak obrażać pisząc, że coś co zrobili jest bez sensu? Jak można nie czuć tej różnicy lat doświadczenia?

Piszę to wszystko bo się nazbierało i nie po to by Cię ochrzanić, poniżyć czy cokolwiek tylko byś zauważył prostą rzecz: że jeżeli nie będziesz robił (niesprawdzonych uprzednio) założeń, a zawsze dasz możliwość wystąpienia czegoś o czym nie wiedziałeś to rozwiążesz niezłą gamę zadań łatwiej, szybciej i bez wzbudzania wątpliwej jakości dyskusji na forum (niekoniecznie z Twojej strony, ale z Twojej przyczyny).

Gdy teraz znajdziesz zadanie na spoju, które na przykład bierze pod uwagę Twoje rozwiązanie z innego zadania to znów tu napiszesz “przecież nie ma takiej możliwości żeby zadania się łączyły! Co to jest? Jak niby ma to działać? To niemożliwe. Znowu jakieś durne zadanie” czy też pomyślisz w ten sposób (tak jak ja to często robię gdy napotkam coś nowego) jak: “o… nie wiedziałem, że kody mogą się łączyć… ciekawe jak to rozwiązać?”.

Nie mówię, że takie zadanie jest (zapewne takiego nie ma), ale gdyby było… mógłbyś przestać robić założenia, które Cię ograniczają? Zamykasz się w swoich jedynie pomysłach i nie możesz wpaść na to jak coś działa bo przeczy Twoim przekonaniom, temu w co wierzysz. A to nauka przecież, a nie wiara.

Inny przykład… co zrobisz jak znajdziesz w końcu zadanie takie jak chciałby tu wstawić @tarpauwatratar (pisane z pamięci… jeszcze to potrafię :wink: ) czyli zadanie typu:
“sprawdź czy liczba z zakresu 1 < n < 10^100 taka jak 12567235678654567876432345676434567643245676543234561 jest liczbą pierwszą i wykonaj to w czasie O(1)”

bo ja zacząłem rozkminiać “ciekawe czy się da? no raczej tak zwyczajnie sitem to nie. A może w zadaniu chodzi o coś innego, o jakiś szyfr albo wystarczy sprawdzić czy jest parzysta, sumę cyfr czy się dzieli przez trzy, a potem… no właśnie co? Ciekawe zadanie.”

bo przewiduję, że zrobisz wtedy wielką burdę w stylu:

“No nie ma takiej możliwości by sprawdzić pierwszość liczby w czasie O(1) gdyby była taka możliwość to matematycy by ją chyba znali nie? A jakoś do dzisiaj szuka się sensownego wzoru na liczby pierwsze i żaden z dotychczas odkrytych nie ma złożoności poniżej O(n^3)…”

Łapiesz intrygę? Chcę Ci pomóc: przestań. Proszę przestań robić te swoje założenia i się przy nich upierać (i w życiu i w małżeństwie i w programowaniu).

A dlaczego mam zakładać że sędzia potrafi być interaktywny? Mam założyć też że potrafi obiad ugotować i posprzątać mieszkanie? Zakładam zgodnie z logiką tak jak w stu poprzednich zadaniach że sędzia jedynie podstawia zestaw liczb i sprawdza wyniki. Skąd normalny człowiek ma wiedzieć co potrafi spojowy sędzia? Połowa ludzi tutaj wstawia w swoich pierwszych kodach windowsowe “system pause”. Założyli pewnie że spojowi to nie robi różnicy. No bo dlaczego mieli założyć inaczej? Mieli się ograniczać? Wejdź na forum pasja informatyki tam takich tematów jest na pęczki. Powtarzam po raz n-ty, brakuje tutaj takiego FAQ gdzie wszystkie tego typu sprawy byłyby wypisane i wyjaśnione.

@manjaro
"A dlaczego mam zakładać że sędzia potrafi być interaktywny?"
Nie zrozumiałeś mojej wypowiedzi, prawda? Nie chciałem byś to zakładał tylko byś nic nie zakładał.
Dostrzegasz różnicę?
Czyli byś myślał raczej “może może ugotować obiad, a może nie. Nie wiem jak działa spoj od środka więc może potrafi być interaktywny, a może nie - nie wiem”. Wtedy szybciej byś doszedł do tego, że jednak może być niż gdy założyłeś od początku “nie wiem jak działa spoj, ale z pewnością nie jest interaktywny, no bo jak jakiś skrypt? Jakieś AI?”.
Ja też nie wiem, ale bez takich uprzedzeń nie mam błędnych odpowiedzi z powodu błędnych założeń.
Wszystko co napisałeś dalej tylko potwierdza, że to by pomogło. Ludzie piszą “system pause” bo właśnie założyli (jak piszesz), że spojowi to nie robi różnicy, a można było tego nie zakładać.
FAQ by się przydał, ale brak nieuzasadnionych założeń również.

PS. FAQ możesz napisać Ty jak coś. Nic nie stoi na przeszkodzie.

Bo SPOJOwi faktycznie nie robi aż takiej, aby nie zaliczyć, ale oglądającym kody tak.

Normalny nie musi wiedzieć. Koder-programista-rozwiązywacz też nie musi, wystarczy jak będzie się trzymał założeń zadania [zwykłego, interaktywnego, łątwego, trudnego itd…]

Ale chyba nie tobie ani żadnemu z pytających. Przecież nie ma obowiązku czytać [całego] forum ani żadnych FAQ [tych istniejących i tych hipotetycznych]. Jeżeli już, to takich FAQ, brakuje raczej mi i innym podpowiadającym, abyśmy nie musieli po n-ty raz podpowiadać tych samych rzeczy pytającym. Mimo tego braku jednak ja sobie jakoś radę dam, chociaż oczywiście też mam problemy, ale współczuję tobie.

Wysnuwasz jakieś dziwne swoje teorie spiskowe. Jak do tej pory byłem i jestem niezwykle cierpliwy i na nikogo nie patrzę z góry, a szczególnie gdy dopiero raczkuje na SPOJu. Dziwię się natomiast, jeżeli zamiast pytać, Ty czy tobie podobni użytkownicy zaczynają od pretensji i obrażania autorów zadań czy pomagających na forum i od tzw marudzenia.

PS
Moja żona daje mi odczyć, że marnuję czas, siedząc przy komputerze. Jestem coraz bardziej skłonny dzięki między innymi Tobie, przyznać jej całkowicie rację w odniesieniu do poświęcania mojego czasu na forum, czytanie, czytanie i czasami ale coraz rzadsze, odpowiadanie oraz bezsensowne dyskutowanie z Tobą.

Nic o mnie nie wiesz, ale jednak wymyślasz historie i obrażasz mnie. Jednak robiąc tak, nie szkodzisz mi, ale sobie i innym użytkownikom. No i ten niesmak, o którym już pisałem, odczuwany chyba nie tylko przezemnie.

Wątpię, czy ten “niesmak” jesteś w stanie wymazać obiecanym @yula’i bukietem róż, ale to już twój problem.