ตลาดหุ้นคือทั้งหมดที่เกี่ยวกับความเร็วของความรู้ แตกต่างจากความท้าทายที่ผ่านมาราคาหุ้นปัจจุบันไม่สุ่ม: มันถูกกำหนดโดยผู้เล่นเกม หากคุณสามารถระบุหุ้นที่มีราคาต่ำกว่าก่อนใครก็แสดงว่าคุณได้เขียนโปรแกรมการทำเงิน
ราคาหมายถึงคนที่เท่าไหร่ที่มีการซื้อขายหุ้นสำหรับในขณะที่มูลค่าหมายถึงจำนวนหุ้นที่มีมูลค่าในตอนท้ายของเกม
ผู้เล่นแต่ละคนเริ่มต้นด้วย 1,000 ของแต่ละหุ้นและมูลค่าสุทธิสัมพันธ์ 0 แต่ละหุ้นมีค่าความลับและคะแนนของคุณในตอนท้ายของเกมคือ (stockValue for each ownedStock) + netWorth
มูลค่าสุทธิของคุณอาจเป็นลบ ในเกมที่มีผู้เล่น N คนจะมีหุ้น N ตัว
ขั้นตอน:
เกมดังต่อไปนี้:
- คุณจะได้รับค่าความลับของสต็อคเดียว
- คุณเสนอขายหุ้น X of 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 of 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 ได้รับการอัปเดตสำหรับการจับคู่ผู้เล่นแต่ละคน)
ควบคุมรวมถึงการ autodownloader Name, Language
ดังนั้นโปรดเริ่มต้นการส่งของคุณกับส่วนหัว: หากการส่งของคุณไม่ได้อยู่ใน Java บล็อกโค้ดแต่ละอันควรเริ่มต้นด้วยชื่อของไฟล์ (ไม่รวมไฟล์คำสั่งซึ่งควรเป็นบล็อกแรกในโพสต์ของคุณ)
วิ่ง
มี 2 วิธีในการเรียกใช้โครงการนี้:
ดาวน์โหลดซอร์สโค้ดรวบรวมและเรียกใช้ คุณสามารถหาแหล่งที่มาบน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