Rod moderuje grę karcianą między dwoma graczami: George'em i Timem. Obecnie Tim tasuje karty. Rod podejrzewa, że Tim próbuje oszukiwać, więc potrzebuje twojej pomocy, aby sprawdzić, czy losowanie jest sprawiedliwe.
Tim wykonuje przetasowane rozdawanie: tnie stos kart z dołu talii, a następnie tnie różne części z wierzchu stosu na wierzch talii i kilkakrotnie powtarza ten proces.
Rod jest orłem i widzi dokładnie, ile kart wycina Tim za każdym razem, jednak nie może obliczyć i śledzić kart tak szybko, jak Tim tasuje. W tym momencie wchodzisz: Rod chciałby napisać program lub funkcję, która pobiera szczegółowe informacje o tasowaniu i określa, czy tasowanie jest sprawiedliwe, słabe, czy podstępne.
- Jeśli po tasowaniu mniej niż 25 par sąsiadujących kart pozostanie w sąsiedztwie (w tej samej kolejności), tasowanie jest sprawiedliwe i gra może być kontynuowana.
- Jeśli co najmniej 25 (ale nie wszystkie) pary sąsiednich kart pozostaną obok siebie, tasowanie jest słabe, a Rod rozbije Tima nad głową i poprosi go o przetasowanie jeszcze trochę.
- Jeśli na końcu wszystkie karty pozostaną w tej samej pozycji, Tim oczywiście oszukuje, a Rod uderzy go dużym pstrągiem.
To jest kod golfowy, więc wygrywa najkrótszy kod.
Wejście:
Otrzymasz ciąg liczb od 0 do 52 (oba wyłączne) oddzielonych spacją, w kilku liniach, gdzie każda linia reprezentuje rundę tasowania, która zaczyna się i kończy ze wszystkimi kartami ułożonymi razem.
W każdej linii pierwsza liczba to liczba kart, które Tim wycina z dołu talii, a każda kolejna liczba to liczba kart, które upuszcza z ręki na wierzch talii. Jeśli jakieś karty pozostaną po ostatnim numerze na linii, powinieneś założyć, że Tim umieszcza je na wierzchu talii.
Dane wejściowe są gwarantowane. Jest co najmniej jedna linia liczb, a każda linia zawiera co najmniej 2 liczby. Pierwsza liczba w każdej linii nie jest mniejsza niż suma wszystkich innych liczb w tej samej linii. Końcowy znak nowej linii jest opcjonalny, możesz założyć, że wejście ma jedno lub że go nie ma.
Wynik:
Twój program powinien wydrukować / zwrócić „fair”, jeśli losowanie jest sprawiedliwe, „słabe”, jeśli losowanie jest słabe, i „trick”, jeśli Tim utrzymuje wszystkie karty w tej samej kolejności. Końcowy znak nowej linii jest opcjonalny.
Przykład:
Zakłada się, że talia zawiera 52 karty, ale w celach demonstracyjnych użyję mniejszej talii 10 kart.
Wejście:
5 3 1
4 2 2
Początkowa talia, patrząc od góry: 0 1 2 3 4 5 6 7 8 9
5
➜ 0 1 2 3 4
( 5 6 7 8 9
w ręce)
3
➜ 5 6 7 0 1 2 3 4
( 8 9
w ręce)
1
➜ 8 5 6 7 0 1 2 3 4
( 9
w ręce)
koniec linii ➜ 9 8 5 6 7 0 1 2 3 4
4
➜ 9 8 5 6 7 0
( 1 2 3 4
w ręce)
2
➜ 1 2 9 8 5 6 7 0
( 3 4
w ręce)
2
➜ 3 4 1 2 9 8 5 6 7 0
4 pary pozostają obok siebie:(3 4) (1 2) (5 6) (6 7)
Przypadki testowe:
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
Wynik: fair
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5 5
43 5 5 5 5 5 5 5
Wynik: weak
29 24
19 18
38 2 1 8 13 6 4
47 15 16 5 2 1 7
34 22 9 3
44 9 10 11 3 1 7
33 18 4 2 3 3
Wynik: fair
24 6 12 4
25 3 19
36 4 25 2
19 11 1 3
15 9 3
37 5 27
Wynik: weak
26 13
26 13
26 13
26 13
Wynik: trick
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Wynik: weak
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Wynik: trick
50 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
49 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Wynik: fair
Wymagania:
- Jeśli napiszesz funkcję, może ona albo czytać ze standardowego wejścia, albo odbierać dane wejściowe jako pojedynczy parametr ciągu. Ponadto funkcja może wydrukować wydruk lub go zwrócić.
- Program musi być uruchamiany w systemie Linux przy użyciu ogólnodostępnego oprogramowania.
- Kod źródłowy musi używać tylko znaków ASCII.
- Brak standardowych luk.