Zdaje mi się, że rozumiem zadanie, a mój program zamiast próbować dalej zgadnąć, to wywala błąd, gdyż Twóje wejście jest nieprawidłowe(według mojego zrozumienia zadania). Jeśli użyte są tylko dwie liczby(w strzale 1 1 2 2 są tylko 1 i 2) to nie mogą być 3 na dobrym miejscu a jednej w ogóle nie być. Poprawnym wejściem byłoby na przykład 1 0 1 0 co oznaczałoby, że dwie liczby trzeba zamienić miejscami.
No to źle rozumiesz zadanie Do tego ja kompletnie nie rozumiem Twojego toku rozumowania.
Przypadek wyżej podany w przykładzie oznacza, że po pierwszym strzale sekretny kod to:
1 * 2 2
gdzie * to liczba z przedziału 1-6 ale inna niż 1, bo dla tej liczby sędzia zwrócił -1.
Teraz twój program może wypisać np.
1 2 2 2
i albo dostanie od sędziego
1 1 1 1
wtedy zgadłeś i zakończ program, albo znów
1 -1 1 1
zgaduj dalej. Ale teraz wiesz, że na drugim miejscu nie ma też 2.
Ok, czyli w tym zadaniu każda liczba w odpowiedzi odnosi się do liczby strzału w tej samej kolumnie. Z mojej wiedzy wynikało, że w grze mastermind odpowiedź polega na wskazaniu, że jakaś liczba(z 4, ale nie konkretna) jest na złym/dobrym miejscu, lub w ogóle nie ma jej w kodzie. I teraz znowu, albo kompletnie wszystko mylę, albo właśnie na tej zasadzie działa rozwiązujący to zadanie algorytm Knuth’a.
No cóż, po zrozumieniu o co chodziło autorowi, rozwiązałem to zadanie 2 prostymi pętlami i jest AC, aczkolwiek wciąż nurtuje mnie to, czy źle zrozumiałem zasady gry Mastermind, czy to zadanie jest po prostu źle skonstruowane.
Zadanie po dziś dzień uważam za dzikie - z tego też powodu rozwiązałem je stosunkowo późno w mojej karierze. Po prostu dziwnie się czuję, gdy sędzia mówi mi coś poza AC, a jeszcze dziwniej, gdy zwraca mi jakieś znaczki i ja mam je analizować
Zasady gry są podane na plwiki i na SPOJu.
W każdej próbie podajesz propozycje kodu - wypisujesz na standarowe wyjście cztery liczby z zakresu 1…6. w odpowiedzi otrzymujesz podpowiedź które elementy zostały wytypowane poprawnie a które nie - wczytujesz ze standardowego wejścia cztery liczby o możliwych wartościach: 1 (trafione), 0 (element nie na swoim miejscu) lub -1 (pudło).
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;
}
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.
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.
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 Trochę słabo
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 Co prawda skupia wąskie grono ale zawsze
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) 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
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), …
Stąd jak mówię: (czasami) to dobrze, że ktoś narzeka.
Ciesze się że zrobiłem coś dobrego dla Ciebie
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
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
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.