Na giełdzie chodzi o szybkość wiedzy. W przeciwieństwie do poprzednich wyzwań, bieżąca cena akcji nie jest losowa: jest ona określana przez osoby grające w grę. Jeśli potrafisz zidentyfikować akcje po zaniżonych cenach przed kimkolwiek innym, oznacza to, że sam napisałeś program do zarabiania pieniędzy.
Cena odnosi się do tego, za ile ludzie handlują akcjami, a Wartość odnosi się do kwoty, na jaką zapasy są warte na koniec gry.
Każdy gracz zaczyna od 1000 każdego stada i 0 względnej wartości netto. Każdy czas ma tajną wartość, a twój wynik na koniec gry wynosi(stockValue for each ownedStock) + netWorth
. Twoja wartość netto może być ujemna. W grze N-player jest N akcji.
Kroki:
Gra wykonuje następujące kroki:
- Otrzymujesz tajną wartość pojedynczej akcji.
- Składasz ofertę sprzedaży akcji X z Y za $ Z
- Wszyscy gracze otrzymują oferty i każdy może wybrać jedną z nich
- Wszyscy gracze są informowani o zaakceptowanych ofertach
- Wróć do kroku 2
Każdy z kroków podano szczegółowo poniżej:
void secretValue(int stockType, int value)
:- Wartość, której się uczysz, nie jest ujawniana żadnemu innemu graczowi.
- Wartość jest pomiędzy
0
i1000
- Niskie wartości są bardziej podobne do występowania niż wysokie (rozkład równomierny w kwadracie)
Offer makeOffer(List<Stock> currentStock)
- Możesz wrócić,
null
aby nie składać oferty.
- Możesz wrócić,
Offer acceptOffer(List<Offer> offers)
- Możesz wrócić,
null
aby zaakceptować żadną z nich - Jeśli nie ma dostępnych ofert, nie zostanie to wywołane
- Jeśli zaakceptujesz, twoja wartość netto spadnie o $ Z (może spaść) i otrzymasz X Y akcji. Przeciwnie dzieje się ze sprzedawcą.
- Jeśli zaakceptujesz ofertę, wymiana nastąpi natychmiast, a oferta zostanie usunięta, więc dodatkowi gracze nie będą mogli jej zaakceptować.
- Możesz wrócić,
void acceptedOffers(List<Offer> offers)
- Obejmuje również zaakceptowane oferty
Zmienne statyczne lub zapisywanie do plików jest niedozwolone. (Brak trwałych danych z gry do gry) Nie poważni rywale są dozwolone.
Interfejsy:
public final class Stock {
public Stock(int stockType, int amount);
public int getType();
public int getAmount();
public Stock minus(Stock other);
public Stock plus(Stock other);
public Stock minus(int amount);
public Stock plus(int amount);
public Stock setAmount(int amount);
}
public class Offer {
public Offer(Stock offer, int payment);
public Stock getOffer();
public int getPayment();
}
Zgłoszenia inne niż Java:
- Wszystkie połączenia składa się z dwóch linii: Pierwsza linia jest funkcja miano:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, a drugi wiersz zawierający aktualne dane. - Zapasy są sformatowane przy użyciu
:
separatora:stockType:stockAmount
. - Oferty są formatowane za pomocą
@
separatora:offer@price
- Listy są formatowane za pomocą
;
separatora SecretValue
jest sformatowany za pomocą:
separatora:stockType:value
RandomSeed
służy do deterministycznego przesłania. Jeśli przesłanie odbywa się losowo, użyj wartości całkowitej przekazanej jako ziarno!- Wszystkie wywołania funkcji wymagają odpowiedzi. Jeśli odpowiedź brzmi
null
lubvoid
, zwróć pusty ciąg. - Podaj
command.txt
argument, który podaje argumenty wiersza poleceń, aby uruchomić przesyłanie
Punktacja
Gry składające się z 1000 tur będą rozgrywane wiele razy. Gracze będą punktowani zgodnie z systemem ELO i parowani z graczami o podobnych poziomach umiejętności. Gracz z najwyższym końcowym wynikiem ELO wygrywa! (Zmodyfikowałem system, aby w każdej grze wyniki ELO były aktualizowane dla każdej pary graczy)
Kontroler zawiera autodownloader, więc proszę rozpocząć składanie z nagłówkiem: Name, Language
. Jeśli przesłanie nie odbywa się w Javie, każdy blok kodu powinien zaczynać się od nazwy pliku. (z wyłączeniem pliku poleceń, który powinien być pierwszym blokiem w poście)
Bieganie
Istnieją 2 sposoby uruchomienia tego projektu:
Pobierz kod źródłowy, skompiluj i uruchom. Możesz znaleźć źródło na Github . Biegać
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
Pobierz plik wykonywalny JAR. Zgłoszenia należy umieścić w bieżącym katalogu roboczym w
/submissions
folderze. Możesz pobrać tylko plik JAR , tylko zgłoszenia lub oba
Przekaż, run
aby uruchomić projekt (opcja domyślna), lub przekaż, download
aby pobrać wszystkie przesłane dotychczas odpowiedzi na to pytanie.
Tablica wyników
1. 1308.1220497323848 Cheater
2. 1242.0333695640356 InsideTrader
3. 1158.3662658295411 UncleScrooge
4. 1113.8344000358493 BlackMarket
5. 1051.8370015258993 DartMonkey
6. 983.0545446731494 WarGamer
7. 939.457423938002 Spammer
8. 901.4372529538886 DumbBot
9. 859.0519326039137 ShutUpAndTakeMyMoney
10. 852.9448222849587 VincentKasuga
11. 718.2112067329083 Profiteer