주식 시장은 지식의 속도에 관한 것입니다. 이전의 도전과 달리 현재 주가는 무작위가 아닙니다. 게임을하는 사람들에 의해 결정됩니다. 다른 사람보다 저렴한 주가를 식별 할 수 있다면 돈 버는 프로그램을 작성한 것입니다.
가격 은 사람들이 주식을 얼마나 거래하고 있는지를 나타내며, Value 는 게임이 끝날 때 주식의 가치를 나타냅니다.
각 플레이어는 각 주식의 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:value
RandomSeed
제출물을 결정 론적으로 만드는 데 사용됩니다. 제출에서 임의성을 사용하는 경우 시드로 전달 된 정수 값을 사용하십시오!- 모든 함수 호출 에는 응답이 필요 합니다. 응답이
null
또는void
인 경우 빈 문자열을 반환하십시오. command.txt
제출을 실행하기 위해 명령 행 인수를 제공 하는 을 포함 하십시오
채점
1000 턴으로 구성된 게임은 여러 번 실행됩니다. 플레이어는 ELO 시스템 에 따라 점수가 매겨 지며 비슷한 기술 수준의 플레이어와 짝을 이룹니다. 최종 ELO 점수가 가장 높은 플레이어가 승리합니다! (각 게임, ELO 점수가 각 플레이어 쌍에 대해 업데이트되도록 시스템을 수정했습니다)
컨트롤러에는 자동 다운로더가 포함되어 있으므로 헤더를 사용하여 제출을 시작하십시오 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