Фондовий ринок - все про швидкість знань. На відміну від попередніх проблем, поточна ціна акцій не є випадковою: вона визначається тими, хто грає в гру. Якщо ви можете ідентифікувати недооцінені акції раніше, ніж будь-хто інший, тоді ви написали собі програму для отримання грошей.
Ціна стосується того, скільки людей торгують акціями, тоді як вартість стосується суми, на яку коштує акція в кінці гри.
Кожен гравець починається з 1000 кожної акції та 0 відносної чистої вартості. Кожна акція має секретне значення, а ваш результат в кінці гри - це(stockValue for each ownedStock) + netWorth . Ваша чиста вартість може бути негативною. У грі з N-гравцями є N запасів.
Кроки:
Гра виконує наступні кроки:
- Вам надається таємна вартість одиничного запасу.
- Ви робите пропозицію продати X акцій Y за $ Z
- Усі гравці отримують пропозиції, і кожен може вибрати одного, щоб прийняти
- Усі гравці інформуються про прийняті пропозиції
- Поверніться до кроку 2
Кожен з етапів детально описаний нижче:
void secretValue(int stockType, int value):- Значення, яке ви дізнаєтесь, не розкривається жодному іншому гравцю.
- Значення між
0і1000 - Низькі значення більше схожі на великі, ніж високі (квадратний рівномірний розподіл)
Offer makeOffer(List<Stock> currentStock)- Ви можете повернутися,
nullщоб не робити пропозицій.
- Ви можете повернутися,
Offer acceptOffer(List<Offer> offers)- Ви можете повернутися,
nullщоб прийняти жодну з них - Якщо немає доступних пропозицій, це не буде викликано
- Якщо ви приймаєте, ваша чиста вартість знижується на $ Z (може піти негативно) і отримаєте X запасів Y. З продавцем продається навпаки.
- Якщо ви приймаєте пропозицію, обмін відбудеться негайно, і пропозиція буде видалена, тому додаткові гравці не зможуть її прийняти.
- Ви можете повернутися,
void acceptedOffers(List<Offer> offers)- Включає також прийняті вами пропозиції
Статичні змінні або запис у файли заборонено. (Немає постійних даних від гри до гри) Несерйозні претенденти допускаються.
Інтерфейси:
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();
}
Подання, що не належить Java:
- Всі виклики складаються з двох рядків: Перший рядок функція викликається:
SecretValue,MakeOffer,AcceptOffer,AcceptedOffers,SetRandom, і другий рядок , що містить фактичні дані. - Запаси відформатовані з
:роздільником:stockType:stockAmount. - Пропозиції відформатовані
@роздільником:offer@price - Списки відформатовані
;роздільником SecretValueвідформатований:роздільником:stockType:valueRandomSeedвикористовується для того, щоб зробити ваше подання детермінованим. Якщо у вашій подачі використовується випадковість, будь ласка, використовуйте ціле значення, передане як насіння!- На всі функціональні дзвінки потрібна відповідь. Якщо відповідь
nullабоvoid, повертає порожній рядок. - Будь ласка, включіть,
command.txtщо дає аргументи командного рядка для запуску вашої подачі
Оцінка балів
Ігри, що складаються з 1000 оборотів, будуть запущені кілька разів. Гравці отримуватимуться за системою ELO та поєднуються з гравцями аналогічних рівнів кваліфікації. Гравець із найвищим підсумковим балом ELO виграє! (Я змінив систему, щоб кожна гра, оцінки ELO оновлювалися для кожного гравця, що поєднувався)
Контролер включає в себе Autodownloader, тому , будь ласка , почніть уявлення з заголовком: Name, Language. Якщо ваше подання відсутнє на Java, кожен код коду повинен починатися з імені файлу. (виключаючи командний файл, який має бути першим блоком у вашій публікації)
Біг
Є два способи запустити цей проект:
Завантажте вихідний код, компілюйте та запустіть. Ви можете знайти джерело на Github . Біжи
git clone --recursive https://github.com/nathanmerrill/StockExchange.gitЗавантажте виконуваний файл JAR. Подання повинні бути розміщені у вашому поточному робочому каталозі в
/submissionsпапці. Ви можете завантажити лише JAR , лише подані матеріали або те і інше
Перейдіть, runщоб запустити проект (опція за замовчуванням), або перейдіть, downloadщоб завантажити всі подані матеріали, що знаходяться в цьому питанні.
Табло
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