স্টক এক্সচেঞ্জ


23

শেয়ার বাজার জ্ঞানের গতি সম্পর্কে সমস্ত। পূর্ববর্তী চ্যালেঞ্জগুলির বিপরীতে, বর্তমান শেয়ারের দাম এলোমেলো নয়: এটি গেমটি খেলে যারা নির্ধারিত হয়। আপনি যদি অন্য কারও আগে স্বল্পমূল্যের স্টক সনাক্ত করতে পারেন তবে আপনি নিজেরাই অর্থোপার্জন প্রোগ্রাম লিখেছেন।

দাম লোককে কতটা শেয়ারে লেনদেন করছে তা বোঝায় , যখন মানটি গেমের শেষে স্টকটির মূল্য নির্ধারণ করে।

প্রতিটি খেলোয়াড় প্রতিটি স্টকের 1000 এবং 0 আপেক্ষিক নেট মূল্য দিয়ে শুরু হয়। প্রতিটি স্টকের একটি গোপনীয় মান থাকে এবং গেমের শেষে আপনার স্কোর হয়(stockValue for each ownedStock) + netWorth । আপনার নেট মূল্য নেতিবাচক হতে পারে। এন-প্লেয়ারের একটি খেলায় এন স্টক রয়েছে।

পদক্ষেপ:

গেমটি নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করে:

  1. আপনাকে একক স্টকের গোপনীয় মূল্য দেওয়া হবে।
  2. আপনি $ Z এর জন্য এক্স অফ ওয়াই স্টক বিক্রয় করার জন্য অফার দিচ্ছেন
  3. সমস্ত খেলোয়াড় অফার দেওয়া হয়, এবং প্রত্যেকে গ্রহণ করার জন্য একটি চয়ন করতে পারেন
  4. সমস্ত খেলোয়াড়কে গৃহীত অফার সম্পর্কে অবহিত করা হয়
  5. ২ য় ধাপে ফিরে যান

প্রতিটি পদক্ষেপ নীচে বিস্তারিতভাবে দেওয়া হল:

  1. void secretValue(int stockType, int value):

    • আপনি যে মানটি শিখেন তা অন্য কোনও খেলোয়াড়ের কাছে প্রকাশিত হয় না।
    • মান 0এবং এর মধ্যে1000
    • নিম্ন মানগুলি উচ্চ মানগুলির চেয়ে বেশি হওয়ার মতো হয় (স্কোয়ার্ড ইউনিফর্ম বিতরণ)
  2. Offer makeOffer(List<Stock> currentStock)

    • আপনি nullকোনও অফার দিতে ফিরে যেতে পারেন ।
  3. Offer acceptOffer(List<Offer> offers)

    • আপনি nullতাদের কোনওটিই গ্রহণ করতে ফিরে যেতে পারেন
    • যদি কোনও উপলভ্য উপলব্ধ না থাকে তবে এই কল করা হবে না
    • আপনি যদি গ্রহণ করেন তবে আপনার নেট মূল্য worth জেড (নেতিবাচক যেতে পারে) নেমে যাবে এবং এক্স ওয়াই স্টক পাবেন। বিপরীতে বিক্রেতার সাথে ঘটে।
    • আপনি যদি কোনও প্রস্তাব স্বীকার করেন, এক্সচেঞ্জটি তত্ক্ষণাত্ ঘটবে এবং অফারটি সরানো হবে যাতে অতিরিক্ত খেলোয়াড়রা এটি গ্রহণ করতে পারে না।
  4. 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();
}

জাভাবিহীন জমা:

  • সব কল দুই লাইন দ্বারা গঠিত: প্রথম লাইন ফাংশন বলা হচ্ছে: SecretValue, MakeOffer, AcceptOffer, AcceptedOffers, SetRandom, এবং দ্বিতীয় প্রকৃত তথ্য ধারণকারী লাইন।
  • স্টক একটি বিন্যাসিত হয় :বিভেদক: stockType:stockAmount
  • অফারগুলি একটি @ডিলিমিটার দিয়ে ফর্ম্যাট করা হয় :offer@price
  • তালিকাগুলি একটি ;ডিলিমিটার দিয়ে ফর্ম্যাট করা হয়
  • SecretValueএকটি :ডিলিমিটার দিয়ে ফর্ম্যাট করা হয় :stockType:value
  • RandomSeedআপনার জমাটি নির্বিচারক করার জন্য ব্যবহৃত হয়। যদি আপনার জমাটি এলোমেলোভাবে ব্যবহার করে, দয়া করে বীজ হিসাবে পাস করা পূর্ণসংখ্যা মানটি ব্যবহার করুন!
  • সমস্ত ফাংশন কল একটি প্রতিক্রিয়া প্রয়োজন । যদি প্রতিক্রিয়া হয় nullবা void, একটি খালি স্ট্রিং ফিরে return
  • দয়া করে এমন একটি অন্তর্ভুক্ত করুন command.txtযা আপনার জমা দেওয়ার জন্য কমান্ড লাইনের যুক্তি দেয় gives

স্কোরিং

1000 টার্ন সমন্বিত গেমগুলি একাধিকবার চালানো হবে। খেলোয়াড়দের ইএলও সিস্টেম অনুযায়ী স্কোর করা হবে এবং একই জাতীয় দক্ষতার স্তরের খেলোয়াড়দের সাথে জুড়ি দেওয়া হবে। খেলোয়াড় সর্বোচ্চ চূড়ান্ত ইএলও স্কোর জিতল! (আমি সিস্টেমটি পরিবর্তন করেছি যাতে প্রতিটি গেম, প্রতিটি খেলোয়াড়ের জুটির জন্য ইএলও স্কোর আপডেট হয়)

নিয়ামক, একটি autodownloader অন্তর্ভুক্ত তাই একটি হেডার সঙ্গে আপনার জমা শুরু করুন: Name, Language। আপনার জমাটি যদি জাভাতে না থাকে তবে প্রতিটি কোড ব্লক ফাইলের নাম দিয়ে শুরু করা উচিত। (কমান্ড ফাইল বাদ দিয়ে, যা আপনার পোস্টের প্রথম ব্লক হওয়া উচিত)

চলমান

এই প্রকল্পটি চালানোর জন্য 2 টি উপায় রয়েছে:

  1. উত্স কোডটি ডাউনলোড করুন, সংকলন করুন এবং চালান। আপনি গিথুবটিতে উত্সটি পেতে পারেন । চালানgit clone --recursive https://github.com/nathanmerrill/StockExchange.git

  2. জার এক্সিকিউটেবল ডাউনলোড করুন। জমাগুলি /submissionsফোল্ডারে আপনার বর্তমান কার্যনির্বাহী ডিরেক্টরিতে রাখা উচিত । আপনি কেবল জার , কেবল জমা দেওয়া বা উভয়ই ডাউনলোড করতে পারেন

মধ্যে পাস 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

স্টক বৈশিষ্ট্যগুলি সর্বজনীন নয়,
গেটর

@ অ্যাজেন্টক্রজি পাইথন আরও ভাল?
নাথান মেরিল

বর্তমান দাম কি পূর্বের দামের সাথে সম্পর্কিত?
noɥʇʎԀʎzɐɹƆ

1
একটি চ্যাট রুম প্রশংসা করা হবে।
TheNumberOne

উত্তর:


13

চিটার, জাভা

অর্থের বিনিময়ে কিছুই বিক্রি করার চেষ্টা করে না।

import java.util.List;
import java.util.Random;
import com.ppcg.stockexchange.*;

public class Cheater extends Player {
    private Random random = new Random();

    public Offer acceptOffer(List<Offer> offers) {
        return null;
    }

    public Offer makeOffer(List<Stock> currentStock){
        Stock stock = randomStock();
        int price = random.nextInt(100) + 1;
        return new Offer(stock.setAmount(0), price);
    }
}

5
আর এভাবেই ঘটে মহা হতাশা! আমি দেখতে পেলাম যে এই অনেকগুলি বট সস্তার কেনা ...
সকরাটিক ফিনিক্স

অভিনন্দন! আমি একটি সমালোচনামূলক ত্রুটি সংশোধন করেছি এবং এখন এই বটটি প্রথমে রয়েছে!
নাথান মেরিল

বাহ, অন্যান্য বটগুলি তখন যথেষ্ট ভাল নয় যে এই বোবা বটটি জিততে পারে
justhalf

8

ওয়ার গেমার, জাভা

নিয়মের একটি নিখুঁত পরীক্ষার পরে আমি সিদ্ধান্ত নিয়েছি যে প্রাথমিক বিজয়ী পদক্ষেপটি খেলতে হবে না। যে কেউ স্টক বিক্রির প্রস্তাব দিচ্ছেন তারা সম্ভবত দাম জানেন এবং বিক্রয় থেকে লাভ করবেন। এটি টগল করা যেতে পারে সুতরাং এটি "জোকস" দ্বারা পূর্ণসংখ্যার জন্য একটি স্টক বিক্রি করার অফার তৈরি করবে MA

import java.util.List;
import com.ppcg.stockexchange.*;
import com.ppcg.kothcomm.game.AbstractPlayer;
import com.ppcg.kothcomm.utils.Tools;

import java.util.List;

public class WarGamer extends Player {
static final boolean FRAUD = false;
    /**
     * @param offers All available offers
     * @return An offer you want to accept, or null if you want to accept neither.
     */
    public Offer acceptOffer(List<Offer> offers){
        return null;
    }

    public Offer makeOffer(List<Stock> currentStock){
    if(FRAUD)
    return new Offer(new Stock(0,1),Integer.MAX_VALUE);
        //defraud shut up and take my money            
    return null;
    }
}

1
এটি সম্ভবত ভাল কাজ করবে, আমি আশা করি ব্যতীত এমন কিছু এন্ট্রি থাকবে যা তাদের পথে কিছুটা উঁচু হয়ে যাবে d সাধারণত আছে।
Geobits

এটি সংকলন করে না।
রেইনবোল্ট

@ রেনবোল্ট এর নির্ভরতা রয়েছে। আপনার উপস্থিত থাকা নিশ্চিত করা দরকার।
রোহান ঝুনঝুনওয়ালা

@ রেনবোল্ট কি সংকলনের ত্রুটিটি পাচ্ছেন
রোহান ঝুনঝুনওয়ালা

1
আমি নিশ্চিত নই যে আপনি যে কৌতুক
বটকে চালিত

5

শাটআপ এবং টেকমাইমনি, জাভা

import java.util.List;
import com.ppcg.stockexchange.*;

public class ShutUpAndTakeMyMoney extends Player {
    public ShutUpAndTakeMyMoney() {}

    public Offer acceptOffer(List<Offer> offers) {
        try {
            return offers.get(0);
        } catch (Exception ex) {
            return null;
        }
    }
    public Offer makeOffer(List<Stock> stock) {
        return null;
    }
}

এটি কোনও প্রস্তাব গ্রহণ করে।


আসলে আপনার বটের জন্য আপনাকে ধন্যবাদ
রোহান ঝুনঝুনওয়ালা

6
আমাকে ধনী করার জন্য +1 করুন
রোহান ঝুনঝুনওয়ালা

1
আমার কাছে মনে হয় এটি সত্যিকারের প্রয়োজনের সাথে সামঞ্জস্যপূর্ণ নয় যে প্রতিটি উত্তর " ব্যবহারে বিজয়ী মানদণ্ডের জন্য গুরুতর প্রতিযোগী হওয়া উচিত "।
পিটার টেলর

2
@ পিটারটেলর এটি গুরুতর, লিডারবোর্ডে এটি 5 তম
টাকসক্রাফটিং

এটি যুক্তিযুক্তভাবে একটি আত্মঘাতী প্রবেশ , কারণ এটি আশা করা যুক্তিযুক্ত যে অন্যান্য বটগুলি স্টকের দামের চেয়ে বেশি দামে বিক্রি করবে, যার ফলে আপনি তার প্রকৃত মূল্যের চেয়ে ভাল স্টক কিনবেন।
মেগো

4

ডামবট, জাভা

আপনার নিজের তৈরি করার সময় এই বটটি ব্যবহার করুন। ছাড়যুক্ত মূল্যে এর গোপন স্টক সরবরাহ করে।

import java.util.List;
import com.ppcg.stockexchange.*;
public class DumbBot extends Player {
    public Offer acceptOffer(List<Offer> offers) {
        return null;
    }
    public Offer makeOffer(List<Stock> currentStock){
        return new Offer(currentStock.get(secretStockType).setAmount(1), Math.max(1, secretStockValue - 5));
    }
    public void secretValue(int stockType, int value) {
        super.secretValue(stockType, value);
    }
    public void acceptedOffers(List<Offer> acceptedOffers) {
    }
}

1
দেখে মনে হচ্ছে আমি চাই সে আমার অর্থ সামলাচ্ছে
রোহান ঝুনঝুনওয়ালা

দয়া করে এই সম্প্রদায়টি উইকি করুন

@ এজেন্টক্রাজি পাইথন কেন?
নাথান মেরিল

@NathanMerrill প্রতিনিধির এই ডামি বট বন্ধ লাভবান
noɥʇʎԀʎzɐɹƆ

@ অ্যাজেন্টক্রাজি পাইথন আমি সত্যিই চাই না যে লোকেরা এটি সম্পাদনা করুক ... আমি সত্যিকারের প্রতিনিধিত্বের বিষয়ে সত্যই চিন্তা করি না, তাই উজ্জীবিত (বা নিম্নগামী) না নির্দ্বিধায়
নাথান মেরিল

3

পাইথন_ স্টার্টার, পাইথন 3

যেকোন অজগর (বা অন্য ভাষা) প্রোগ্রামগুলির জন্য এটি একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করুন

একটি এলোমেলো অফার গ্রহণ করে।

কমান্ড ফাইল:

python3 starter.py

কার্যক্রম:

starter.py
import random
from functools import total_ordering


LIST_DELIMITER = ';'
STOCK_DELIMITER = ':'
OFFER_DELIMITER = '@'


@total_ordering
class Stock:
    @staticmethod
    def parse(string: str):
        return Stock(*map(int, string.split(STOCK_DELIMITER)))

    def __init__(self, stock_type: int, amount: int):
        self.type = stock_type
        self.amount = max(amount, 0)

    def __str__(self):
        return str(self.type)+STOCK_DELIMITER+str(self.amount)

    def __eq__(self, other):
        return self.amount == other.type

    def __lt__(self, other):
        return self.amount < other.amount

    def update(self, amount) -> 'Stock':
        return Stock(self.type, amount)

    def __mul__(self, other: int) -> 'Stock':
        return self.update(self.amount*other)

    def __floordiv__(self, other: int) -> 'Stock':
        return self.update(self.amount//other)

    def __add__(self, other: int) -> 'Stock':
        return self.update(self.amount+other)

    def __sub__(self, other: int) -> 'Stock':
        return self.update(self.amount-other)


class Offer:
    @staticmethod
    def parse(string: str) -> 'Offer':
        try:
            offer, payment = string.split(OFFER_DELIMITER)
        except ValueError:
            raise Exception("Cannot unpack "+string)
        return Offer(Stock.parse(offer), int(payment.strip()))

    def __init__(self, offer: Stock, payment: int):
        self.offer = offer
        self.payment = payment

    def __str__(self):
        return str(self.offer)+OFFER_DELIMITER+str(self.payment)


def read_stock_value(value: str):
    global hidden_price, hidden_stock
    stock, price = value.split(STOCK_DELIMITER)
    hidden_price = float(price)
    hidden_stock = int(stock)


def process_input():
    handlers = {
        "SecretValue": read_stock_value,
        "RandomSeed": read_seed,
        "MakeOffer": make_offer,
        "AcceptOffer": accept_offer,
        "AcceptedOffers": accepted_offers,
    }
    method = input().strip()
    data = input().strip()
    output = handlers[method](data)
    if output is not None:
        print(str(output))
    else:
        print()


def read_seed(seed: str):
    random.seed(int(seed))


def start():
    while True:
        process_input()


hidden_stock = None
hidden_price = None


def make_offer(current_stock: str):
    current_stock = map(Stock.parse, current_stock.split(LIST_DELIMITER))
    pass


def accept_offer(available_offers: str):
    available_offers = list(map(Offer.parse, available_offers.split(LIST_DELIMITER)))
    return random.sample(available_offers, 1)[0]


def accepted_offers(offers: str):
    offers = map(Offer.parse, offers.split(LIST_DELIMITER))
    pass


if __name__ == "__main__":
    start()

1
এটি খুব জটিল।
noɥʇʎԀʎzɐɹƆ

2
এর বেশিরভাগটি হেল্পার স্টাফ। আপনি যদি অজগর এ লিখছেন, আপনার কেবল নীচের 3 টি কার্যকারিতা বাস্তবায়ন করতে হবে।
নাথান মেরিল

এটার কাজ কি?
noɥʇʎԀʎzɐɹƆ

বট একটি এলোমেলো স্টক গ্রহণ করে। সহায়ক উপাদানগুলি পার্সিং / এনকোডিংয়ের পাশাপাশি অফার / স্টকের ক্লাস সরবরাহ করে।
নাথান মেরিল

... এবং এটি জিতেছে: /
noɥʇʎԀʎzɐɹƆ

3

ভিনসেন্টকাসুগা, জাভা

আমার জাভা বৈধ কিনা তা নিশ্চিত নন। অনুগ্রহ করে পর্যালোচনা করুণ.

কিভাবে এটা কাজ করে

- আপনি যদি সমস্ত স্টকের মালিক হন তবে আপনি স্টকের দাম নির্ধারণ করতে পারেন। আপনি একমাত্র বিক্রেতা। 1. সমস্ত স্টক কিনুন। ২. সব স্টকের দামটি শেষ টিকের তুলনায় সুপার হাই রাখুন। 3. লাভ! - এটি সাধারণত সম্ভব হয় না কারণ ...

  • দামটি সাধারণত অসীমের দিকে স্কাইরোকট করে দিত ... তবে এর একটি সীমাও আছে!
  • ... (আসার আরও কারণ)

এটি কীভাবে কাজ করে, ভি 2

  • কৃত্রিমভাবে দামটি কিছু নৈরাজ্যবাদী রাষ্ট্র দ্বারা সর্বাধিক সেট করা হয়েছে
  • এটি অর্থনৈতিক দিক থেকে খারাপ
  • বট ভবিষ্যদ্বাণী করে না - এটি বাজারের কাঠামোর একটি অন্তর্নিহিত ত্রুটি ব্যবহার করে!

করতে

  • একাধিকবার বাজারে কর্নার! Muahaha!

প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী

প্রশ্ন: ভিনসেন্ট কাসুগা কে?

উত্তর: তিনি আমেরিকায় সমস্ত পেঁয়াজ এবং পেঁয়াজ ফিউচার কিনেছিলেন। (তাদের সকলকে একটি গোপন গুদামে রাখুন) মুক্তিপণে এই শিল্পটি পরিচালিত হয়েছিল - আমাকে এক্স মিলিয়ন দিন বা আমি দামটি আকাশ-নীচে নির্ধারণ করব এবং আপনি সকলেই দেউলিয়া হয়ে যাবেন।

তবে সে সেখানেই থামেনি।

তারপরে, তিনি গোপনে পেঁয়াজ ইটিএফ সংক্ষিপ্ত করে রেখেছিলেন (এটি হ্রাস পাবে বলে বাজি রাখে)। তিনি এক সময় সমস্ত পেঁয়াজ বিক্রি করেছিলেন, শারীরিকভাবে হাজার হাজার ট্রাকে স্টক এক্সচেঞ্জে সরবরাহ করেছিলেন। পেঁয়াজের ব্যাগের দাম পেঁয়াজের চেয়ে কম। তিনি কয়েক মিলিয়ন আবারও করেছেন। সংক্ষেপে, হাডসন নদীটি পেঁয়াজ দিয়ে উপচে পড়েছিল।

তিনি একজন সত্যিকারের ব্যক্তি।

কোড

import com.ppcg.stockexchange.Offer;
import com.ppcg.stockexchange.Player;
import com.ppcg.stockexchange.Stock;

import java.util.List;

public class VincentKasuga extends Player {
    private int knownStock;
    private int knownPrice;
    private int corneredStockType = -1;
    private int corneredLikelehood = 0;
    private boolean marketCornered;
    private int ticks;

    public Offer acceptOffer(List<Offer> offers) {
        if (!marketCornered) {
            Offer maxOffer = null;
            int maxAmount = 0;
            if (corneredStockType == -1) {
                for (Offer offer: offers) {
                    if (offer.getOffer().getAmount() > maxAmount) {
                        maxAmount = offer.getOffer().getAmount();
                        maxOffer = offer;
                    }
                }
            } else {
                for (Offer offer: offers) {
                    if (offer.getOffer().getAmount() > maxAmount && offer.getOffer().getType() == corneredStockType) {
                        maxAmount = offer.getOffer().getAmount();
                        maxOffer = offer;
                    }
                }
            }


            if (maxOffer == null) {
                // may have cornered the market
                corneredLikelehood++;
                if (corneredLikelehood == 5) {
                    // probably cornered the market
                    marketCornered = true;
                }
            }
            return maxOffer;
        } else {
            // who needs offers when the market is cornered!?
            return null;
        }
    }

    public Offer makeOffer(List<Stock> currentStock) {
        ticks++;
        if (ticks >= 999) {
            // SELL SELL SELL!
            return new Offer(new Stock(corneredStockType, 1000), 1000);
        } else {
            return null;
        }
    }

    public void secretValue(int stockType, int value) {
        knownStock = stockType;
        knownPrice = value;
        if (stockType == corneredStockType) {
            if (knownPrice == 1000) {
                corneredLikelehood += 3;
            } else if (knownPrice < 900){
                // didn't corner the market.
                corneredLikelehood = 0;
            }
        }
    }
}

"আমি গোল্ড মার্কেটে কোণঠাসা করেছি, মিঃ বন্ড!"


আমি বটের জন্য একটি অটো-ডাউনলোডার অন্তর্ভুক্ত করেছি। আপনার কোডটি একটি কোড-ব্লকে রাখুন। যদি এটি ফিট না করে তবে তা ঠিক আছে।
নাথান মেরিল

@ নাথানমিরিল তবে কি এটি সংকলন করে?
noɥʇʎԀʎzɐɹƆ

@ নাথানমারিল সম্পন্ন হয়েছে প্রোবগুলি সংকলন করে না। আকর্ষণীয় কৌশল, তাই না? অর্থনীতিতে একটি পাঠ!
noɥʇʎԀʎzɐɹƆ

for (offer: offers)->for (Offer offer: offers)
নাথান মেরিল

corneredStockType == nullবৈধ নয়। একটি intহতে পারে না null
মেগাটম

2

স্প্যামার, জাভা

import java.util.List;
import java.util.ArrayList;
import com.ppcg.stockexchange.*;

public class Spammer extends Player {
    private boolean panic = false;

    public Offer acceptOffer(List<Offer> offers) {
        for (Offer offer : offers) {
            if (this.panic || offer.getPayment() < 20)
                return offer;
        }
        return null;
    }
    public Offer makeOffer(List<Stock> currentStock) {
        if (currentStock.size() > 1) { // Don't sell all the stock
            this.panic = false;
            return new Offer(currentStock.get(secretStockType).setAmount(1), 1);
        }
        this.panic = true; // BUY
        return null;
    }
}

বাজারটি সত্যই সস্তা স্টক সহ স্প্যাম করুন এবং যখন দাম 20 এর চেয়ে কম হয় কেবল তখনই স্টক কিনুন When


দুর্দান্ত
হতাশায়

... এই বিজয়ী কেমন হয় !?
noɥʇʎԀʎzɐɹƆ

2

ডার্টমনকি, জাভা

(অ-প্রতিযোগী: এটি জিতবে না এবং ইতিমধ্যে আমার আরও একটি উত্তর আছে)

ডার্ট বানর জিনিস ছুঁড়ে মারতে পছন্দ করে ... এবং তার পাশে একটি বড় স্তূপাকার লাঠি রয়েছে। সে দেয়ালে কিছু কাগজ দেখে। বাম! বাম! বাম! কোনও দিনই না, ডার্ট বানরটির 80 টি ডার্ট ছুঁড়েছে! অর্ধেক ডার্টগুলি লাল এবং অন্য অর্ধেকটি নীল এবং তাদের এলোমেলো সংখ্যা রয়েছে! ডার্ট বানর একটি কম্পিউটার দেখে ... সংখ্যায় ডার্ট বাঁদর টাইপ করে। ডার্ট বানর সংখ্যা পছন্দ করে। ডার্ট বানর তার ডার্ট থেকে কিছু অর্থ উপার্জন করে ...


সমস্ত গুরুত্বের সাথে ডার্টমনকি একটি পূর্ণসংখ্যা অ্যারের সূচনা করে যার দৈর্ঘ্য স্টকের সংখ্যার দ্বিগুণ। তিনি যে পরিমাণ স্টক কিনতে / বিক্রয় করতে চান তার জন্য একটি নম্বর এবং স্টকের মূল্যের জন্য একটি নম্বর সঞ্চয় করে রাখেন। তারপরে তিনি অ্যারে থেকে স্টক বিক্রি করে এবং অ্যারে অনুসারে অফার গ্রহণ করেন। অ্যারের থেকে যদি তার কোনও স্টক না থাকে তবে সে কিছু দেবে না এবং অ্যারে থেকে যদি তাকে কোনও অফার না দেওয়া হয়, তবে সে কিছুই গ্রহণ করবে না।


এই উত্তরটি @ দি নাম্বারওন দ্বারা অনুপ্রাণিত হয়েছিল, যিনি আড্ডায় ডার্ট বানরের কথা উল্লেখ করেছিলেন

import com.ppcg.stockexchange.Offer;
import com.ppcg.stockexchange.Player;
import com.ppcg.stockexchange.Stock;

import java.util.List;
import java.util.Random;

public class DartMonkey extends Player {
    private int basePrice = 100;
    private int numStocks;
    private int[] dartBoard;
    private boolean first = true;

    @Override
    public Offer acceptOffer(List<Offer> offers) {
        for(Offer offer : offers) {
            Stock stock = offer.getOffer();
            int type = stock.getType();
            int amount = stock.getAmount();
            int price = offer.getPayment();
            if(this.dartBoard[type] < 0 && amount <= -this.dartBoard[type] && price <= this.dartBoard[type + this.numStocks]) {
                this.dartBoard[type] = 0;
                return offer;
            }
        }
        return null;
    }

    @Override
    public Offer makeOffer(List<Stock> stocks) {
        if(this.first) {
            this.first = false;
            this.numStocks = stocks.size();
            this.dartBoard = new int[this.numStocks * 2];
            Random random = this.getRandom();
            for (int i = 0; i < 20; i++) {
                int index = random.nextInt(this.dartBoard.length / 2);
                this.dartBoard[index] = random.nextInt(1001);
                this.dartBoard[this.numStocks + index] = random.nextInt(1001);
            }

            for (int i = 0; i < 20; i++) {
                int index = random.nextInt(this.dartBoard.length / 2);
                this.dartBoard[index] = -random.nextInt(1001);
                this.dartBoard[this.numStocks + index] = random.nextInt(1001);                
            }
        }

        for (Stock stock : stocks) {
            int type = stock.getType();
            if(this.dartBoard[type] > 0) {
                Offer offer = new Offer(stock.setAmount(this.dartBoard[type]), this.basePrice + this.dartBoard[type + this.numStocks]);
                this.dartBoard[type] = 0;
                this.dartBoard[type + this.numStocks] = 0;
                return offer;
            }
        }

        return null;
    }

}

আমি দেখতে পাচ্ছি যে আপনি প্রাচীর রাস্তায় এলোমেলো হেঁটে গেছেন?
রোহান ঝুনঝুনওয়ালা

এটি যুক্তিযুক্তভাবে একটি আত্মঘাতী প্রবেশ , যা অনুমোদিত নয়।
মেগো

1
@ মেগো আমি কীভাবে দেখছি না ... একটি আত্মঘাতী এন্ট্রি 0 ডলারে স্টক বিক্রি করবে, এই এন্ট্রিটি নির্ধারণ করে যে এটি কী কিনে এবং এলোমেলোভাবে বিক্রি করে sell যা অবশ্যই নিয়মের বিপরীতে নয় ....
সকরাটিক ফিনিক্স

2

ইনসাইডট্রেডার, জাভা

ইনসাইড্রেডার সবেমাত্র তাকিয়ে দেখেছেন যে প্রত্যেকে সৃজনশীল হওয়ার চেষ্টা করছেন। তবে তিনি সৃজনশীল কিছু করেছিলেন: যা প্রত্যাশা করা হয় তা করুন।

এই বটটি "মূল্যবান" হলে এটি কেনে কারণ এটি "বিনিয়োগের সিদ্ধান্তগুলি" গাইড করতে "গাইড" করার জন্য কিছু "অভ্যন্তরীণ দলিল" ধার করে নিয়েছিল।

করণীয় এবং কোডে এটি কীভাবে কাজ করে। ;)

কোড"

import java.util.List;

import com.ppcg.stockexchange.*;

public class InsideTrader extends Player {
    public String coverStory = "I can tell the good companies from the bad ones.";
    private String theTruth = "I'm cheating. (but so is everyone else)";
    private String ambitions = "Learn to \"follow the market\"";  // don't steal this idea
    private int secretStock = -1;
    private int secretStockValue = -1;

    private int appraiseOffer(Offer offer) {
        /* get how much the offer is worth, 0 if it's not the secret stock */
        if (offer.getOffer().getType() != secretStock ||offer.getOffer().getAmount() == 0) {
            return 0;
        }
        return (offer.getPayment()/offer.getOffer().getAmount())  // price per stock...
                - secretStockValue  // minus value of stock.
                ;
    }
    public Offer acceptOffer(List<Offer> offers) {
        Offer bestOffer = null;
        int bestOfferValue = -1;
        for (Offer offer :
                offers) {
            int value = appraiseOffer(offer);
            if (value > bestOfferValue && value > 0) {
                bestOfferValue = value;
                bestOffer = offer;
            }
        }
        return bestOffer;
    }

    public Offer makeOffer(List<Stock> currentStock) {
        return new Offer(new Stock(0,1), Integer.MAX_VALUE);
    }

    public void secretValue(int stockType, int value) {
        secretStock = stockType;
        secretStockValue = value;
    }

    public void acceptedOffers(List<Offer> acceptedOffers) {

    }
}

আপনার ফাইলটির শুরুতে এই অতিরিক্ত ক্লাস থাকতে পারে না ... এটি সিন্টেক্সিকভাবে অবৈধ ... এগুলি সর্বজনীন ছাড়া শেষ পর্যন্ত যুক্ত করা যেতে পারে বলে আমি মনে করি
সকরাটিক ফিনিক্স

Error on line 50: modifier private not allowed here Error on line 54: modifier private not allowed here। আমি কেবল ক্লাসগুলি সরিয়ে ফেলতাম এবং এর প্রসারিত করতামPlayer
নাথান মেরিল

কেবল একটি নোট, কিছু নতুন বট শূন্যের পরিমাণে স্টক সরবরাহ করছে, সুতরাং আপনার বটটি মূল্যায়ন অফার থেকে একটি ArithimeticException (/ শূন্য দ্বারা) নিক্ষেপ করছে ... সম্ভবত একটি চেক বা কিছু যুক্ত করুন?
সক্রেটিক ফিনিক্স

@ সোক্র্যাটিকফোনিক্স ধন্যবাদ, ঠিক হয়ে যাবে।
noɥʇʎԀʎzɐɹƆ

অভিনন্দন, এই বটটি বর্তমানে দ্বিতীয় অবস্থানে!
নাথান মেরিল

2

ওয়ালস্ট্রিট, কোটলিন

উচ্চ বিক্রি করে এবং কম কিনে শুরু হয় এবং ধীরে ধীরে এটিকে কী দাম বলে মনে করে তা পরিবর্তিত হয়। এছাড়াও, আপনি কোটলিনে নিজের তৈরি করার জন্য এটি একটি টেম্পলেট হিসাবে ব্যবহার করতে পারেন।

দ্রষ্টব্য: এখানে একটি বাগ রয়েছে যা আমি বিশ্বাসযোগ্যভাবে পুনরুত্পাদন করতে পারি না। যদি আমার প্রোগ্রামটি ক্র্যাশ হয় বা সমস্যা থাকে তবে দয়া করে আমাকে চ্যাট করুন এবং লিখিত সামগ্রীগুলির একটি পেস্টবিন লিঙ্ক করুনsubmissions/other/WallStreet/log.txt

kotlinc WallStreet.kt
kotlin WallStreetKt
WallStreet.kt
import java.io.FileOutputStream
import java.io.PrintStream
import java.util.*

val LOGGER = PrintStream(FileOutputStream("log.txt", true))
const val DEBUG = false

const val LOG_GAME_HEADER = """
###############
#STARTING GAME#
###############"""

data class Stock(val type : Int, val amount : Int) {

    operator fun minus(amount : Int) = copy(amount = this.amount - amount)
    operator fun plus(amount: Int) = copy(amount = this.amount + amount)
    fun setAmount(amount: Int) = copy(amount = amount)

    operator fun minus(other : Stock) : Stock {
        assert(type == other.type)
        return copy(amount = this.amount - other.amount)
    }

    operator fun plus(other : Stock) : Stock {
        assert(type == other.type)
        return copy(amount = this.amount + other.amount)
    }

    override fun toString() = "$type:$amount"
}

data class Offer(val offer: Stock, val payment: Int) {
    override fun toString() = "$offer@$payment"
}

fun parseStock(repr : String) : Stock {
    val data = repr.split(":").map { it.toInt() }
    return Stock(data[0], data[1])
}

fun parseOffer(repr: String) : Offer {
    val data = repr.split("@")
    return Offer(parseStock(data[0]), data[1].toInt())
}

fun parseOffers(repr: String) = if (repr == "") emptyList<Offer>() else repr.split(";").map { parseOffer(it) }


interface Player {
    fun secretValue(stockType: Int, value: Int)
    fun makeOffer(currentStock: List<Stock>) : Offer?
    fun acceptOffer(offers: List<Offer>) : Offer?
    fun acceptedOffers(offers: List<Offer>)

    var random : Random
}

fun main(args : Array<String>) {

    try {

        if (DEBUG) {
            LOGGER.println(LOG_GAME_HEADER)
        }
        //Change bot name here
        val player = WallStreet()

        while (true) {
            val function = readLine()
            function ?: return
            val line = readLine()!!
            if (DEBUG) {
                LOGGER.println("\nInput:")
                LOGGER.println(function)
                LOGGER.println(line)
            }
            var result : Any
            try {
                result = when (function) {
                    "SecretValue" -> {
                        val data = line.split(":").map { it.toInt() }
                        player.secretValue(data[0], data[1])
                    }
                    "MakeOffer" -> player.makeOffer(line.split(";").map { parseStock(it) }) ?: ""
                    "AcceptOffer" -> player.acceptOffer(parseOffers(line)) ?: ""
                    "AcceptedOffers" -> player.acceptedOffers(parseOffers(line))
                    "RandomSeed" -> player.random = Random(line.toLong())
                    else -> return        //Exit program
                }
                if (function == "AcceptOffer" && result.toString() !in line) {
                    throw Exception("Offer not among available offers!!!!\nResult: $result\nParsed Available Offers: ${parseOffers(line)}")
                }
            } catch (e : Exception) {
                LOGGER.println("Turn #${player.turn}")
                LOGGER.println("\nInput:")
                LOGGER.println(function)
                LOGGER.println(line)
                throw e
            }

            if (result == Unit) {
                result = ""
            }
            if (DEBUG) {
                LOGGER.println("Output:")
                LOGGER.println(result)
            }

            println(if (result == Unit) "" else result)
        }
    } catch (e : Exception) {
        e.printStackTrace(LOGGER)
        throw e
    } finally {
        LOGGER.close()
    }
}


// ###################################################
// #          Put program logic below here.          #
// ###################################################


const val DEFAULT_STOCK_VALUE = 333
const val MAX_TURNS = 1000
const val MAX_STOCK_VALUE = 1000

class WallStreet : Player {

    var secretStockType = 0
    var secretStockValue = 0
    override var random = Random()


    var turn = 0
    val stockPriceStatistics = mutableMapOf<Int, DoubleSummaryStatistics>()

    override fun secretValue(stockType: Int, value: Int) {
        secretStockType = stockType
        secretStockValue = value
    }

    override fun makeOffer(currentStock: List<Stock>): Offer {
        val stock = currentStock[random.nextInt(currentStock.size)]
        val type = stock.type
        val amount = random.nextInt(stock.amount)
        val price = getSellPrice(type) * amount
        return Offer(Stock(type, amount), Math.ceil(price).toInt())
    }

    override fun acceptOffer(offers: List<Offer>): Offer? {
        var bestOffer : Offer? = null
        var mostProfit = 0.0
        for (offer in offers) {
            val offerProfit = profitOfOffer(offer)
            if (offerProfit > mostProfit) {
                bestOffer = offer
                mostProfit = offerProfit
            }
        }
        if (bestOffer != null && bestOffer !in offers) {
            throw IllegalStateException("Tried to accept non-existent offer.\nOffer:  $bestOffer\nAvailable Offers: ${offers.joinToString(";")}")
        }
        return bestOffer
    }

    override fun acceptedOffers(offers: List<Offer>) {
        turn++
        for ((stock, payment) in offers) {
            val stats = stockPriceStatistics.getOrPut(stock.type) { DoubleSummaryStatistics() }
            for (i in 1..stock.amount) {
                stats.accept(payment.toDouble() / stock.amount)
            }
        }
    }

    private fun getSellPrice(type: Int): Double {
        var price = getPrice(type)
        if (price < 1000) {
            price += (1000 - price) * (MAX_TURNS - turn) / MAX_TURNS
        }
        return if (type == secretStockType) Math.max(secretStockValue.toDouble(), price) else price
    }

    private fun getPrice(type: Int): Double {
        return stockPriceStatistics[type]?.average ?: DEFAULT_STOCK_VALUE.toDouble()
    }

    private fun profitOfOffer(offer: Offer): Double {
        return getBuyPrice(offer.offer.type) * offer.offer.amount - offer.payment
    }

    private fun getBuyPrice(type: Int): Double {
        var price = getPrice(type)
        price = price * turn / MAX_TURNS
        return if (type == secretStockType) Math.min(secretStockValue.toDouble(), price) else Math.min(price, MAX_STOCK_VALUE.toDouble())
    }

}

command.txtফাইল নাম প্রয়োজন হয় না। চমৎকার পোস্ট!
নাথান মেরিল

আমি ভেবেছিলাম স্ট্রিং ইন্টারপোলেশনটি কেবল not not with দিয়ে করা হয়নি?
সক্রেটিক ফিনিক্স

@ সোক্র্যাটিকফিনিক্স $কেবলমাত্র একটি পরিবর্তনশীল নাম নিয়ে কাজ করে। ${}নির্বিচারে কোড চালায় exec মূলত, এটি যেভাবেই কাজ করে এবং আমি ধনুর্বন্ধনী ছাড়াই পছন্দ করি।
TheNumberOne

এফওয়াইআই: একটি অস্থায়ী সমাধান হিসাবে, উইন্ডো ব্যবহারকারীরা যারা এই ফাইলটি চালাতে চান তাদের পরিবর্তন করতে হবে command.txt: kotlinc-> kotlinc.batএবং kotlin->kotlin.bat
নাথান মেরিল

একবার আমি আমার নিয়ামক স্থির করে নিলে, এই বটটি একগুচ্ছ বাজে ডেটা ফেরত দেওয়া শুরু করেছিল, তাই আমি এটি প্রতিযোগিতা থেকে সরিয়েছি। আপনি চাইলে আমি চ্যাট রুমে আপনাকে সহায়তা করতে পারি :)
নাথান মেরিল

1

আঙ্কেলস্ক্রুজ, জাভা

import java.util.List;
import com.ppcg.stockexchange.*;

public class UncleScrooge extends Player {
    public Offer acceptOffer(List<Offer> offers) {
        Offer offer;
        try {
            offer = offers.get(0);
        } catch (Exception ex) {
            return null;
        }
        if (offer.getPayment() < 100)
            return offer;
        else
            return null;
    }
    public Offer makeOffer(List<Stock> currentStock){
        if (this.getRandom().nextDouble() < 0.6)
            return new Offer(currentStock.get(secretStockType).setAmount(1), Integer.MAX_VALUE);
        else
            return null;
    }
    public void secretValue(int stockType, int value) {
        super.secretValue(stockType, value);
    }
    public void acceptedOffers(List<Offer> acceptedOffers) { }
}

সত্যিই উচ্চ মূল্যে স্টক বিক্রয় করুন এবং দাম 100 এর চেয়ে কম হলে কেবল কিনুন।


1

লাভজনক, জাভা

লাভের জন্য অর্থের জন্য এটি থাকে এবং তিনি সর্বদা মুদ্রা গণনা করেন। তিনি কত অর্থ পেয়েছেন তার একটি রক্ষণশীল অনুমান করেন। তারপরে তিনি গোপন স্টকটি কিনবেন, যদি এটির মানটি কম হয়, বা সস্তা স্টক কিনে। তিনি সমস্ত কিছুর জন্য তিনি কত অর্থ প্রদান করেছেন তা স্মরণ করে এবং সর্বদা শেয়ারের দামের উপরে অফার দেয়। তদুপরি, যদি তার কাছে কম টাকা থাকে তবে তিনি উচ্চতর অফার দিবেন।

দ্রষ্টব্য: আমি মনে করি আমি এটি সঠিকভাবে করেছি, তবে @ নাথানমিরিল যদি আমার কোডগুলি বাগের জন্য স্কারিম করতে আপত্তি না করে তবে তা দুর্দান্ত হবে '

import com.ppcg.stockexchange.Offer;
import com.ppcg.stockexchange.Player;
import com.ppcg.stockexchange.Stock;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Profiteer extends Player {
    private List<StockInfo> onMarket;
    private List<StockInfo> stocks;
    private int money;
    private boolean first = true;

    @Override
    public Offer acceptOffer(List<Offer> offers) {
        Offer finalOffer;

        Optional<Offer> offer = offers.stream().filter(o -> o.getOffer().getType() == this.secretStockType && o.getPayment() < this.secretStockValue * o.getOffer().getAmount()).sorted((a, b) -> Integer.compare((this.secretStockValue * a.getOffer().getAmount()) - b.getPayment(), (this.secretStockValue * b.getOffer().getAmount()) - b.getPayment())).findFirst();
        if (offer.isPresent()) {
            finalOffer = offer.get();
        } else {
            finalOffer = offers.stream().sorted((a, b) -> Integer.compare(a.getPayment(), b.getPayment())).findFirst().orElse(null);
        }

        if (finalOffer == null || this.money <= finalOffer.getPayment()) {
            return null;
        } else {
            this.stocks.add(new StockInfo(finalOffer.getOffer(), finalOffer.getPayment()));
            this.refreshMoney();
            return finalOffer;
        }
    }

    @Override
    public Offer makeOffer(List<Stock> stocks) {
        if (this.first) {
            this.init(stocks);
        } else {
            this.refreshMarketList(stocks);
        }

        Optional<StockInfo> least = this.stocks.stream().sorted((a, b) -> Integer.compare(a.getBoughtPrice(), b.getBoughtPrice())).findFirst();
        Optional<StockInfo> secret = this.stocks.stream().filter(stockInfo -> stockInfo.getStock().getType() == this.secretStockType).sorted((a, b) -> Integer.compare(a.getBoughtPrice(), b.getBoughtPrice())).findFirst();

        StockInfo finalOffer;
        int price;
        if (secret.isPresent()) {
            finalOffer = secret.get();
        } else if (least.isPresent()) {
            finalOffer = least.get();
        } else {
            return null;
        }

        this.onMarket.add(finalOffer);
        this.stocks.remove(finalOffer);
        price = this.calculatePrice(finalOffer.boughtPrice);
        return new Offer(new Stock(finalOffer.getStock().getType(), finalOffer.getStock().getAmount()), price);
    }

    private int calculatePrice(int boughtPrice) {
        return (int) (boughtPrice + ((boughtPrice / (double) this.money) * this.money)) + 1;
    }

    private void refreshMarketList(List<Stock> stocks) {
        this.stocks.addAll(this.onMarket.stream().filter(stockInfo -> stocks.contains(stockInfo.getStock())).collect(Collectors.toList()));
        this.onMarket.clear();
    }

    private void refreshMoney() {
        this.money = this.stocks.stream().mapToInt(info -> this.secretStockType == info.getStock().getType() ? this.secretStockValue : 5).reduce((a, b) -> a + b).orElseGet(() -> 0) - this.stocks.stream().mapToInt(StockInfo::getBoughtPrice).reduce((a, b) -> a + b).orElseGet(() -> 0);
    }

    private void init(List<Stock> stocks) {
        this.stocks = stocks.stream().map(stock -> new StockInfo(stock, 0)).collect(Collectors.toList());
        this.onMarket = new ArrayList<>();
        this.money = 0;
        this.first = false;
        this.refreshMoney();
    }

    private static class StockInfo {
        private Stock stock;
        private int boughtPrice;

        public StockInfo(Stock stock, int boughtPrice) {
            this.stock = stock;
            this.boughtPrice = boughtPrice;
        }

        public Stock getStock() {
            return this.stock;
        }

        public int getBoughtPrice() {
            return this.boughtPrice;
        }

    }

}

আপনি debt
ণে

@ অ্যাজেন্টক্রাজি পাইথন আমি জানি, তবে লাভজনকরা এটির ঝুঁকি নিতে চায় না
সোক্রাটিক ফিনিক্স

Undownvote করতে পারবেন না
noɥʇʎԀʎz '30

@ অ্যাজেন্টক্রাজি পাইথন মেহ, এটি ঠিক আছে, খেলাটি মজাদার এবং এটিই গুরুত্বপূর্ণ
সকরাটিক ফিনিক্স

1

ম্যাক্সবট, জাভা

এই বট প্রতিটি লেনদেনের মধ্যে সবচেয়ে বেশি লাভের চেষ্টা করে। বিক্রয় করার সময়, অজানা স্টকের দাম $ 300 এ রাখে, যখন 250 ডলার কিনে।

import java.util.List;
import com.ppcg.stockexchange.*;
public class MaxBot extends Player {
    int toSell;
    int sellPrice;

    public void secretValue(int stockType, int value) {
        super.secretValue(stockType, value);
        toSell = stockType;
        sellPrice = (value + 1000)/2;
    }
    public Offer acceptOffer(List<Offer> offers) {
        Offer max = null;
        int maxDif = 0;
        for(Offer o: offers){
            int price = secretStockType == o.getOffer().getType()? secretStockValue: 250;
            int val = price * o.getOffer().getAmount();
            int dif = val - o.getPayment();
            if(maxDif < dif){
                max = o;
                maxDif = dif;
            }
        }
        return max;
    }
    public Offer makeOffer(List<Stock> currentStock){
        if(toSell == -1){
            return null;
        }
        int sum = 0;
        for (Stock s: currentStock){
            if(s.getType() == toSell){
                sum += s.getAmount;
            }
        }
        int n = sum - sum/2;
        return new Offer(new Stock(toSell, n), n * sellPrice);
    }
    public void acceptedOffers(List<Offer> acceptedOffers) {
        int highStock = -1;
        int highPrice = 0;
        int markup = 0;
        for(Offer o: offers){
            int trueVal = secretStockType == o.getOffer().getType()? secretStockValue: 250;
            int marketVal = o.getPayment()/o.getOffer().getAmount();
            if(marketVal - trueVal > markup){
                highStock = o.getOffer().getType();
                highPrice = marketVal;
                markup = marketVal - trueVal;
            }
        }
        toSell = highStock;
    }
}

1

ব্ল্যাকমার্কেট, জাভা

এই সম্পর্কে খুব বেশি বলার অপেক্ষা রাখে না, এই লেনদেনগুলি যেমন দেখা ... চার্টের বাইরে থাকবে, আপনি বলতে পারেন।

import java.util.List;
import com.ppcg.stockexchange.*;

public class BlackMarket extends Player {
    private boolean approvedBySEC = false;
    private int ammoLeft = 30;
    public String taxView = "We want higher tax rates";
    public String excuse = "I never saw that in my life";

    public void secretValue(int drugType, int warrantForMyArrest) {
        super.secretValue(drugType, warrantForMyArrest);
        if (warrantForMyArrest != 0 || drugType == 420) {
            ammoLeft += 10;
        }
    }

    public Offer acceptOffer(List<Offer> offers) {
        for (Offer offer : offers) {
            if (this.approvedBySEC || offer.getPayment() < 9)
                return offer;
        }
        return null;
    }


    public Offer makeOffer(List<Stock> currentStock) {
        return new Offer(new Stock(0,1),420);
    }
}

রিটার্ন নাল বাইরে ... দয়া করে সঠিকভাবে ইনডেন্টও করুন।
noɥʇʎԀʎzɐɹƆ

1
@ এজেন্টক্রাজি পাইথন ধন্যবাদ! অন্ধকার হওয়ার সাথে সাথে আমরা "রিটার্ন নাল" পুনরুদ্ধার করব। পরের মাসের জন্য আপনাকে অনুসরণ করা গাড়ি থেকে সাবধান থাকুন।
টিমটেক

1
ডাউনটা কেন? আমরা গত প্রতিযোগিতায় চতুর্থ স্থান অর্জন করেছিলাম। যদিও আমরা ঠিক নিশ্চিত নই কীভাবে ...
টিমটেক

0

নটকিউটাব্যাঙ্কসবেস্টফ্রেন্ড, পাইথন 3

Command.txt:

python3 NotQuiteABanksBestFriend.py
NotQuiteABanksBestFriend.py
import random
from functools import total_ordering
from io import StringIO

log = StringIO()
log.write("\n\n~~~NEW GAME~~~\n\n")

LIST_DELIMITER = ';'
STOCK_DELIMITER = ':'
OFFER_DELIMITER = '@'

JAVA_MAX_INT = 2147483647

@total_ordering
class Stock:
    @staticmethod
    def parse(string: str):
        return Stock(*map(int, string.split(STOCK_DELIMITER)))

    def __init__(self, stock_type: int, amount: int):
        self.type = stock_type
        self.amount = max(amount, 0)

    def __str__(self):
        return "T%sx%s"%(self.type, self.amount)

    def __repr__(self):
        return str(self.type)+STOCK_DELIMITER+str(int(self.amount))

    def __bool__(self):
        return bool(self.amount)

    def __eq__(self, other):
        return self.amount == other.amount

    def __lt__(self, other):
        return self.amount < other.amount

    def update(self, amount) -> 'Stock':
        return Stock(self.type, amount)

    def __mul__(self, other: int) -> 'Stock':
        return self.update(self.amount*other)

    def __floordiv__(self, other: int) -> 'Stock':
        return self.update(self.amount//other)

    def __add__(self, other: int) -> 'Stock':
        return self.update(self.amount+other)

    def __sub__(self, other: int) -> 'Stock':
        return self.update(self.amount-other)


class Offer:
    @staticmethod
    def parse(string: str) -> 'Offer':
        try:
            stock, price = string.split(OFFER_DELIMITER)
        except ValueError:
            raise Exception("Cannot unpack "+string)
        return Offer(Stock.parse(stock), int(price.strip()))

    def __init__(self, stock: Stock, price: int):
        self.stock = stock
        self.price = price
        try:
            self.price_per_unit = self.price/self.stock.amount
        except ZeroDivisionError:
            self.price_per_unit = float('inf')

    def __str__(self):
        return "%s$%s"%(self.stock, self.price)

    def __repr__(self):
        return repr(self.stock)+OFFER_DELIMITER+str(int(self.price))


def read_stock_value(value: str):
    global hidden_price, hidden_stock
    stock, price = value.split(STOCK_DELIMITER)
    hidden_price = float(price)
    hidden_stock = int(stock)
    log.write("Hidden StockID: %s\nHidden Price: %s\n"%(hidden_stock, hidden_price))

def process_input():
    handlers = {
        "SecretValue": read_stock_value,
        "RandomSeed": read_seed,
        "MakeOffer": make_offer,
        "AcceptOffer": accept_offer,
        "AcceptedOffers": accepted_offers,
    }
    method = input().strip()
    data = input().strip()
    output = handlers[method](data)
    if output is not None:
        print(repr(output))
    else:
        print()

def read_seed(seed: str):
    random.seed(int(seed))

def start():
    while True:
        process_input()

hidden_stock = None
hidden_price = None

def filter_offers(offer):
    if offer.stock.amount == 0:
        return False
    if offer.price_per_unit > 1000:
        return False
    return True

def certain_profit(offer):
    stock = offer.stock
    if stock.type == hidden_stock and offer.price_per_unit < hidden_price:
        log.write("Offer, %s is certainly profitable.\n"%offer)
        return True
    return False

def make_offer(current_stock: str):
    current_stock = list(map(Stock.parse, current_stock.split(LIST_DELIMITER)))
    own_stock = [stock for stock in current_stock if stock.type == hidden_stock]
    if own_stock and own_stock[0]:
        own_stock = own_stock[0]
        amount_sold = min(random.randrange(1,50), own_stock.amount)
        price = hidden_price+random.randrange(10,50)
        return Offer(Stock(hidden_stock, amount_sold), price*amount_sold)
    sell_stock = random.choice(current_stock)
    amount_sold = min(random.randrange(1,50), sell_stock.amount)
    price = random.randrange(1000, JAVA_MAX_INT//(amount_sold or 1))
    return Offer(Stock(sell_stock.type, amount_sold), price*(amount_sold or 1))

def accept_offer(available_offers: str):
    available_offers = list(map(Offer.parse, available_offers.split(LIST_DELIMITER)))
    filtered_offers = list(filter(filter_offers, available_offers))
    profitable = list(filter(certain_profit, filtered_offers))
    rtn_list = filtered_offers
    if profitable:
        log.write("Profitable: %s\n"%profitable)
        rtn_list = profitable
    if not rtn_list:
        return None
    accepted_offer = min(rtn_list, key=lambda offer: offer.price_per_unit)
    log.write("Bidded for %s\n"%accepted_offer)
    return accepted_offer

def accepted_offers(offers: str):
    pass


if __name__ == "__main__":
    try:
        start()
    finally:
        log.close()

সর্বদা লুকানো স্টককে মূল্য দেওয়ার চেয়ে বেশি বিক্রি করার চেষ্টা করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.