Biorąc pod uwagę ciąg reprezentujący bieżący stan gry Monopoly na początku tury gracza, skompresuj wszystkie niezbędne dane do najmniejszej wydajności. Odpowiedzi zostaną ocenione na podstawie wielkości wyjściowej i rozmiaru źródła .
Uwaga: Istnieje wiele odmian regionalnych, ale wszystkie odniesienia w tym poście do nazw nieruchomości itp. Są oparte na tej tablicy .
Wejście:
Dane wejściowe będą podawane jako pojedynczy ;
oddzielony ciąg. Łańcuch ten jest przekazywany programowi w dowolny sposób, który jest zwyczajowo wybrany w wybranym języku, niezależnie od tego, czy jest to standardowe, argumenty itp.
Niesformatowane dane wejściowe wyglądają następująco:
numPlayers (1 to 8)
whose turn (0 to numPlayers-1)
for each player:
bankrupt? (true/false)
money (0 to 2^16-1)
get-out-of-jail-free cards (0 to 2)
position (0 to 39)
jail turns (-1 to 2)
for 28 properties:
owner (-1 to numPlayers-1)
mortgaged? (true/false)
improvement level (0 to 5)
for 16 chance cards in deck:
card index (-1 to 15)
for 16 community chest cards in deck:
card index (-1 to 15)
Przykładem sformatowanego wejścia jest:
3;1;false;1546;0;14;-1;false;7692;1;10;1;true;1;false;1;1;false;0;0;true;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;-1;false;0;0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Wykonano krok po kroku:
3;1;
Jest 3 graczy, a teraz jest tura 1 gracza (zero indeksów, więc drugi gracz)
Gracze
false;1546;0;14;-1;
false;7692;1;10;1;
true;
Pierwszy gracz:
- nie jest bankrutem
- ma pod ręką 1546 $ gotówki
- posiada 0 kart wolnych od więzienia
- zajmuje pozycję 14 (Virginia Ave)
- nie jest w więzieniu
Drugi gracz jest w więzieniu i był na jedną turę. Nie jestem pewien dlaczego , skoro ma kartę GOoJF, ale on tam jest.
Trzeci gracz jest bankrutem, a więcej informacji nie jest ani wymaganych, ani podawanych.
Nieruchomości
1;false;1;
1;false;0;
0;true;0;
-1;false;0;
-1;false;0;
-1;false;0;
...
Właściwości są wymienione w kolejności wokół planszy, zaczynając od Morza Śródziemnego, a kończąc na Boardwalk. Właściwości, które nie mogą być własnością, nie są uwzględnione na tej liście, więc będzie ich ogółem 28. Poziom ulepszenia 0
oznacza nieulepszony. Poziom 1
to jeden dom, do poziomu 5
dla hotelu. A -1
dla właściciela oznacza, że nie jest własnością żadnego gracza.
Zgodnie ze standardowymi zasadami nieruchomość obciążona hipoteką musi być własnością i nie może być ulepszana. Ulepszona nieruchomość musi być własnością i nie może być obciążona hipoteką.
Ponadto, aby poprawić właściwość, gracz musi posiadać cały blok kolorów. Na potrzeby tej gry nie obchodzi nas, czy właściwości są poprawiane „równomiernie”.
Zauważ, że te pozycje nie są takie same jak pozycje graczy podane powyżej. Na przykład gracz na 5
pozycji byłby na Reading Railroad, która jest trzecią własnością na liście (ponieważ Go, Community Chest i podatek dochodowy nie mogą być własnością). Pozycje graczy biegną od 0
(Go) zgodnie z ruchem wskazówek zegara do 39
(Boardwalk).
Karty
0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;
3;12;7;4;5;2;13;11;15;6;8;9;10;1;14;-1;
Każda z talii Chance i Community Chest ma 16
całkowitą liczbę kart. Liczby są prezentowane w takiej postaci, w jakiej pojawiają się w aktualnie potasowanej talii. W tym przykładzie pierwszą kartą wyciągniętą z talii Szansy będzie karta 0
, a następnie karta 1
(ktokolwiek przetasował tę talię jest do bani). Pierwsza karta wyciągnął z wspólnotowym piersi jest karta 3
, a następnie 12
.
Nie martw się o to, co oznacza każda karta (tekst karty), z wyjątkiem karty 0
. To jest karta Get Out of Jail Free dla tej talii. Jeśli gracz jest właścicielem, będzie on na końcu listy, reprezentowany jako -1
.
Wynik:
Musisz wyprowadzić (do konsoli, standardu lub pliku) reprezentację stanu gry. Musi zawierać wszystkie informacje wymagane do reprezentowania gry. Na przykład możesz pominąć (lub skrócić) własności nieposiadane, ponieważ nie można ich ulepszyć ani obciążyć hipoteką. Dane wejściowe nie mogą ich pominąć, ponieważ jest to lista nieindeksowana.
Kompresję należy wykonać w sposób umożliwiający obliczenie wielkości wyjściowej najgorszego przypadku. Może to zdyskwalifikować niektóre algorytmy kompresji (chyba że możesz udowodnić najgorszy przypadek i podać przykład najgorszego przypadku).
O ile Twój kod źródłowy nie jest zbyt szczegółowy, podaj wyjaśnienie, w jaki sposób gra jest reprezentowana. Odpowiedzi składające się wyłącznie z programu golfowego i skompresowanego wyjścia są odradzane. Na przykład, jeśli pomijasz pewne wartości, wyjaśnij, w jaki sposób można je uzyskać z danych wyjściowych.
Punktacja / zasady:
Punktacja opiera się zarówno na rozmiarze kompresji najgorszego przypadku w bitach , jak i rozmiarze kodu źródłowego w bajtach :
score = (outputBits * 2) + encoderSourceBytes
Pełna odpowiedź musi zawierać:
- Przykład wyjściowy
- Źródło enkodera
- Źródło dekodera (nie liczone do wyniku)
Wszystkie kodery muszą być kompletnymi programami, a standardowe luki są zabronione. Korzystanie z wbudowanych lub zewnętrznych bibliotek kompresji jest również zabronione.
Zwycięzcą jest odpowiedź o najniższym wyniku, jak zdefiniowano powyżej.
źródło
The second player is in jail, and has been for one turn. I'm not sure why, since he has a GOoJF card, but he's there.
Przebywanie w więzieniu jest dobrą grą strategiczną, ponieważ nie płacisz czynszu. :)Odpowiedzi:
(Niedawno zredagowano odpowiedź, która zwróciła moją uwagę na to pytanie, i postanowiłem spróbować, chociaż jest to stare pytanie).
Swift 1,2 - 1016 punktów (2 * 81 + 854)
Wyjście ma w najgorszym przypadku 81 bajtów i zmienia się wraz z liczbą graczy.
Każda z tych dwóch metod działa. Wersja Playground jest nieco dłuższa.
Kompresuj plac zabaw
(Zakłada się, że
Input.txt
jest wPlayground Documents Directory
)Compress.swift - uruchom w Terminalu używając
swift Compress.swift
(Zakłada się, że
Input.txt
jestDesktop
)Przykładowe wejście / wyjście
.
źródło
Pure C (3592 punktów)
Dane wyjściowe to 182 bajty. Rozmiar to O (1), więc jest to najgorszy przypadek.
Używa sscanf do odczytu plików i po prostu zrzuca struktury na dysk.
Musiałem nieco zmodyfikować dane wejściowe, ponieważ twój przykład nie zawierał 28 właściwości.
W przypadku zmiennych nazwałem je od pierwszej litery tego, co to jest, a jeśli byłoby to sprzeczne, z drugą (lub kolejną) literą. Na przykład Game, pLayer, pRoperty itp.
compress.c (680 bajtów):
compress.c (gra w golfa)
dekompresować. c :
Wejście / wyjście :
Skompresowany (182 bajty):
Uruchom!
źródło