Borsa tamamen bilginin hızı ile ilgili. Önceki zorluklardan farklı olarak , mevcut hisse senedi fiyatı rastgele değildir: oyunu oynayanlar tarafından belirlenir. Düşük fiyatlı bir stoğu herhangi birinden önce tanımlayabilirseniz, kendinize bir para kazanma programı yazdınız.
Fiyat ne kadar insan için hisse senedi alım satım yapar, Değer ise oyunun sonunda hisse senedi miktarını ifade eder.
Her oyuncu, her hisse senedi için 1000 ve 0 göreceli net değer ile başlar. Her hisse senedi gizli bir değere sahiptir ve oyunun sonunda puanınız(stockValue for each ownedStock) + netWorth
. Net değeriniz negatif olabilir. N oyunculu bir oyunda, N hisse var.
Adımlar:
Oyun aşağıdaki adımları takip eder:
- Tek bir hisse senedinin gizli değeri verilir.
- X of Y hisse senedini $ Z karşılığında satmayı teklif ettin
- Tüm oyunculara teklif verilir ve her biri kabul etmek için birini seçebilir
- Tüm oyuncular kabul edilen tekliflerden haberdar edilir
- 2. adıma geri dönün
Her bir adım aşağıda ayrıntılı olarak verilmiştir:
void secretValue(int stockType, int value)
:- Öğrendiğiniz değer başka hiçbir oyuncuya açıklanmaz.
- Değer
0
ve arasında1000
- Düşük değerler, yüksek değerlerden daha fazla meydana gelmeye benzer (kare dağılım)
Offer makeOffer(List<Stock> currentStock)
null
Teklif vermemek için geri dönebilirsiniz .
Offer acceptOffer(List<Offer> offers)
null
Hiçbirini kabul etmek için geri dönebilirsiniz .- Kullanılabilir teklif yoksa, bu numara aranmaz
- Kabul ederseniz, net değeriniz $ Z ile düşer (negatif olabilir) ve X hissesinin X değerini alır. Tersi satıcıda gerçekleşir.
- Bir teklifi kabul ederseniz, değişim hemen gerçekleşecek ve teklifler kaldırılacak, böylece ek oyuncular kabul edemez.
void acceptedOffers(List<Offer> offers)
- Kabul edilen tekliflerinizi de içerir
Statik değişkenlere veya dosyalara yazma izin verilmez. (Oyundan oyuna kalıcı veri yok) Ciddi olmayan yarışmacılara izin verilir.
Arabirimler:
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 dışı gönderimler:
- Tüm çağrılar iki hat oluşmaktadır: İlk satır çağrılan fonksiyonudur:
SecretValue
,MakeOffer
,AcceptOffer
,AcceptedOffers
,SetRandom
, ve gerçek veri içeren ikinci hat. - Stoklar bir ile biçimlendirilir
:
sınırlayıcı:stockType:stockAmount
. - Teklifler bir
@
sınırlayıcıyla biçimlendirilir :offer@price
- Listeler
;
sınırlayıcı ile biçimlendirilmiş SecretValue
:
sınırlayıcı ile biçimlendirilmiş :stockType:value
RandomSeed
Gönderiminizi deterministik yapmak için kullanılır. Gönderiminiz rastgelelik kullanıyorsa, lütfen tohum olarak geçen tamsayı değerini kullanın!- Tüm işlev çağrıları gerek bir yanıt. Yanıt
null
veya isevoid
, boş bir dize döndürün. - Lütfen
command.txt
gönderinizi çalıştırmak için komut satırı argümanlarını veren bir tane ekleyin.
puanlama
1000 turdan oluşan oyunlar birçok kez oynanacak. Oyuncular ELO sistemine göre puanlanacak ve benzer beceri seviyelerinde oyuncularla eşleştirilecektir. En yüksek final ELO puanı olan oyuncu kazanır! (Sistemi değiştirdim, böylece her oyun, ELO puanları her oyuncu eşleşmesi için güncellenir)
Bir başlık ile Gönderiminizi başlayın böylece kontrolör, bir autodownloader içerir: Name, Language
. Gönderiminiz Java değilse, her kod bloğu dosyanın adıyla başlamalıdır. (yazınızdaki ilk satır olması gereken komut dosyası hariç)
Koşu
Bu projeyi yürütmenin 2 yolu vardır:
Kaynak kodu indirin, derleyin ve çalıştırın. Kaynağı Github'da bulabilirsiniz . Koşmak
git clone --recursive https://github.com/nathanmerrill/StockExchange.git
JAR çalıştırılabilir dosyasını indirin. Gönderimler mevcut çalışma dizininizdeki
/submissions
klasöre yerleştirilmelidir. Sadece JAR , sadece gönderileri veya her ikisini de indirebilirsiniz.
Aktarın run
projeyi (varsayılan seçenek) çalıştırın veya geçmek download
şimdiye kadar bu sorunun tüm gönderimleri indirmek için.
sayı tahtası
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