আপনার দূরত্বটিকে একটি বৃত্তে রাখুন


9

এটি এই চ্যালেঞ্জ এবং জিওবিটস / কার্পেট পাইথন এর উন্নতি করার ধারণার উপর ভিত্তি করে:

আপনার দূরত্ব রাখুন!

এই চ্যালেঞ্জের জন্য, দুটি সংখ্যার মধ্যে দূরত্বটি একটি লুপতে পরিমাপ করা হয়, সুতরাং, উদাহরণস্বরূপ, 0 এবং 999 এর মধ্যে দূরত্ব 1 হয় 1. এটি সর্বদা সর্বদা সর্বনিম্ন বা সর্বোচ্চ সংখ্যা বাছাইয়ের মতো কৌশলগুলি প্রতিরোধ করা উচিত। কেবলমাত্র অন্যান্য পরিবর্তনটি হ'ল যে সর্বনিম্ন সংখ্যাটি চয়ন করা যায় তা এখন 1 এর পরিবর্তে 0 হয়।

আমি এখানে সংক্ষিপ্তসার করব:

  • জাভা, পাইথন বা রুবিতে একটি ফাংশন লিখুন যাতে তিনটি যুক্তি লাগে:
    • এখন পর্যন্ত খেলেছে রাউন্ডের সংখ্যা
    • খেলোয়াড় সংখ্যা
    • স্পেস-বিভাজিত স্ট্রিংগুলির একটি অ্যারে হিসাবে পূর্ববর্তী রাউন্ডগুলিতে নির্বাচিত সংখ্যাগুলি
  • এটি অন্তর্ভুক্ত সহ 0 থেকে 999 পর্যন্ত পূর্ণসংখ্যা ফেরত পাঠানো উচিত
  • প্রতিটি রাউন্ডের জন্য স্কোর হ'ল দূরত্বের বর্গাকার শিকড়গুলির যোগফল একে অপরের প্রোগ্রামের যে সংখ্যাটি বেছে নিয়েছিল to
  • 100 রাউন্ডের পরে সর্বোচ্চ স্কোর সহ প্রোগ্রামটি।
  • প্রতি ব্যক্তি একটি উত্তর

নিয়ন্ত্রণ প্রোগ্রামটি এখানে:

https://github.com/KSFTmh/src/

লিডারবোর্ড

নাম্বার, TheBestOne দ্বারা, জিতেছে।

  • নাম্বার - 9700
  • নাম্বারপ্লাসফৌরনাইন - 9623
  • প্রাচীন ইতিহাসবিদ - 9425
  • FindCampers - 9259
  • WowThisGameIsSoDeep - 9069
  • নমুনা - 9014
  • সাবোটেজ ক্যাম্পার্স - 8545

স্পষ্টতই, আমার শিবিরের নাশকতা ... এর (?) খুব ভাল কাজ করে না।

এখানে পূর্ণ ফলাফল: https://github.com/KSFTmh/src/blob/master/results-3

আমি মনে করি এটি অনুলিপি না হওয়ার পক্ষে যথেষ্ট আলাদা।

যাইহোক, স্ট্যাক এক্সচেঞ্জে এই প্রথম আমার প্রশ্ন জিজ্ঞাসা, সুতরাং আমি কিছু ভুল করছি কিনা তা আমাকে জানান।


4
আমরা কি সত্যিই অনুরূপ একটি প্রশ্ন চাই?
অপ্টিমাইজার

5
@ অপ্টিমাইজার মন্তব্যগুলিতে কয়েকটি লোক মনে করেছিল এটি একটি ভাল ধারণা। আসল থেকে উত্তরগুলি এখানে খুব আলাদাভাবে কাজ করবে, তাই আমি এটির সদৃশ বলে মনে করি না।
কেএসএফটি

1
চ্যালেঞ্জটি পরামর্শ দেওয়ার কৃতিত্ব @ জিওবিটসকে দেওয়া উচিত। আমি কেবল তার সাথে একমত হই।
লজিক নাইট

1
Mmm। মনে হচ্ছে একটি ধ্রুব সংখ্যা আবার জিতেছে। আমি কেন জানি তা জানতে আগ্রহী। আমরা কি প্রশ্নটিতে 600 বা আউটপুট নম্বর দেখতে পাচ্ছি, বা গিথুব বা পেস্টবিনে? আমার সন্দেহ হয় আমাদের কিছু ভবিষ্যদ্বাণীতে বাগ রয়েছে। সম্ভবত আমার :-(
লজিক নাইট

1
@ কার্পেট পাইথন একটি সাধারণ পরিবর্তনটি এই রাউন্ডের পয়েন্টগুলি ছাড়াও শেষের দিকের পয়েন্টগুলির মধ্যে দূরত্ব গণনা করা হবে।
TheNumberOne

উত্তর:


3

পাইথন 2, সাম্পারার

এই এন্ট্রি আপনার দূরত্ব রাখার জন্য একই কোডের ভিত্তিতে , স্যাম্পলার এন্ট্রি । আমি আশা করি এটি এখানে আরও ভাল করবে যেখানে 1 এবং 999 সুবিধা বিদ্যমান নেই।

জায়গাগুলির তালিকার বাইরে, সাম্প্রতিক ব্যবহৃত নম্বরগুলি থেকে খুব দূরে এমন একটিটি বেছে নিন যা পূর্ববর্তী পালাটিকে উপেক্ষা করে (কারণ অন্যান্য এন্ট্রিগুলি কেবল পূর্ববর্তী টার্নের ভিত্তিতে পূর্বাভাস দিতে পারে)।

def choose(turn, players, history):
    sample = map(int, (' '.join( history[-5:-1] )).split())
    def distance(x):
        return sum(min(1000-abs(x-y), abs(x-y))**0.5 for y in sample)
    score, place = max((distance(x), x) for x in range(1000))
    return place

এটি এর জয়ের মতো বলে মনে হচ্ছে তবে এটি হতে পারে কারণ আমি নিয়ামকটি সঠিকভাবে সংকলন করছি না এবং অন্যরা ক্র্যাশ করছে।
কেএসএফটি

2

ওয়ানপ্লাসফৌরনাইনাইন, জাভা

public static int choose(int round, int players, String[] args) {
    return 500;
}

যুক্তি আসলেই সহজ। পূর্ববর্তী স্কোরগুলি বিবেচনায় নেওয়া এমন কোনও আসল অ্যালগরিদম না পেলে এই উত্তরটি মোটামুটি অনুকূলিত।

এখন যেহেতু আমরা একটি বৃত্তের মধ্যে দূরত্বটি গণনা করছি, যে কোনও দুটি পয়েন্টের সর্বাধিক দূরত্ব 500 হতে পারে Now এখন যদি সমস্ত এন্ট্রিগুলি এলোমেলো সংখ্যা তৈরি করে (বা কিছু অ্যালগরিদমের উপর ভিত্তি করে ছদ্ম র্যান্ডম) তৈরি করত, তবে এই উত্তরটি কোনও লাভই করতে পারত না would । তবে কমপক্ষে 1 টি প্রবেশ রয়েছে যা একটি ধ্রুবক উত্তর দেয় যা প্রায় সর্বাধিক দূরত্ব। প্রতিটি রাউন্ডে সর্বাধিক দূরত্বের একটি নির্দিষ্ট উত্স রয়েছে বলে স্কোরটি 500 এর পক্ষে আসতে পারে :)


আপনি আমার উত্তর অনুকূলিত করে। ;)
TheNumberOne

@ দ্য বেস্টওন হা হা
অপ্টিমাইজার

2

প্রাচীন ইতিহাসবিদ - পাইথন

এটি পূর্ববর্তীটি থেকে একই অ্যালগরিদম, সম্ভাব্য স্কোরগুলির গণনা করার সময় এটি বৃত্তাকার দূরত্ব ব্যবহার করে। যেহেতু আমি মারাত্মকভাবে হারাচ্ছি এবং নিয়ন্ত্রকটি সংকলন করতে পারছি না, আমি কেবল একটি নতুন কৌশল চেষ্টা করছি, যেখানে আমি আগের রাউন্ডগুলির মধ্যে সবচেয়ে খারাপ ব্যবহার করি।

def choose(round, players, scores):
    calc = lambda n, scores: sum([min(abs(int(i)-n), 1000-max(int(i),n)+min(int(i),n))**.5 for i in scores.split(' ')])
    return min(range(1000), key=lambda n: sum([calc(n, j) for j in scores[1:]])) if round>1 else 250

এটি কাজ করে না। iএর একটি উপাদান scores.split(' '), যার অর্থ এটি একটি স্ট্রিং, কোনও int নয়।
কেএসএফটি

@ কেএসএফটি ওহ শুট, সত্যই আমার পরীক্ষা করা উচিত ছিল, আপডেট করা।
মাল্টেসেন

2

সাবোটেজ ক্যাম্পার্স - পাইথন

def choose(rounds, players, previous):
    if rounds<3:
        return 1
    prevchoices=[int(i) for i in " ".join(previous[-5:]).split(" ")]
    remove=[]
    for i in prevchoices:
        if prevchoices.count(i)<3:
            remove.append(i)
    campers=[i for i in prevchoices if i not in remove]
    return random.choice(campers)

ক্যাম্পাররা এখনও জিতছে। আপনার যদি এর জন্য কোনও পরামর্শ থাকে তবে আমাকে জানান।


2

ফাইন্ড ক্যাম্পারস - পাইথন 2

শেষ দশ রাউন্ড থেকে সমস্ত ক্যাম্পারদের সন্ধান করুন এবং সেগুলি থেকে দূরে থাকুন। আমি আশাবাদী আমার কাছ থেকে চালিত হবে। আমি এখন আমার পুরানো পছন্দগুলি উপেক্ষা করব।

def choose(rounds, players, previous):
    from collections import Counter

    def distance(x, y):
        return min(1000 - abs(x-y), abs(x-y))

    pastRounds = list(map(lambda x: Counter(map(int, x.split())), previous))
    me = 751
    for (index, round) in enumerate(pastRounds):
        round.subtract((me,))
        pastRounds[index] = set(round.elements())
        campers = reduce(lambda x,y: x.intersection(y), pastRounds[max(1, index-9):index], pastRounds[max(0,index-10)])
        if campers:
            dist, me = max(min((distance(x, y), x) for y in campers) for x in range(1000))
        else:
            me = 751
    return me

ওহ ... আমি আশা করছিলাম যে নামটি দেখলে
শিবিরগুলির

হাঃ হাঃ হাঃ. আমি এমন একটি এন্ট্রি যুক্ত করতে পারি যা ক্যাম্পারদের নাশকতা করবে।
Jmac

দুর্ভাগ্যক্রমে, আমি কেবলমাত্র জন প্রতি একজনকে প্রবেশের অনুমতি দিয়েছি।
কেএসএফটি

আমি নিজে নাশকতা শিবিরগুলিতে একটি এন্ট্রি পোস্ট করেছি posted
কেএসএফটি

খনি কাজ করে না কারণ আমি বুঝতে পারি নি যে পূর্ববর্তী ফলাফলগুলি সাজানো হয়েছিল। আপনার ক্যাম্পাররা কীভাবে সনাক্ত করতে পারে?
কেএসএফটি


1

WowThisGameIsSoDeep, জাভা

আমি 1 মিলিয়ন-কোর ক্লাস্টারে 10 বছর ধরে গেমটি বিশ্লেষণ করেছি এবং সর্বোত্তম সমাধানটি পেয়েছি।

public static int choose(int round, int players,String[]spam) { return(int)(Math.random()*1e3); }


5
সমাধানটি সর্বোত্তম নয়। আপনি যদি অভিন্ন বিতরণ চান তবে আপনার ব্যবহার করা উচিত Random.nextInt(int)
পিটার টেলর

এই সবসময় 1. আসতে বলে মনে হয়
KSFT

@ কেএসএফটি আমি এটি পরীক্ষা করে দেখেছি এবং বিভিন্ন নম্বর পেয়েছি। সব পরে তা নাশকতা?
শুক্রবার 2'15

4
আহা! আমি এটা ঠিক করেছি! আমি দুর্ঘটনাক্রমে "WowThisGameIsSoDeep.py" টাইপ করেছি এবং এটি পাইথন ফাইল হিসাবে চালানোর চেষ্টা করছিল।
কেএসএফটি

1

সার্কিলিনার এক্সট্রাপোলটার, রুবি

def choose(round, players, previous_choices)
  previous_rounds = previous_choices.map{ |round| round.split.map(&:to_i) }
  optimal_past_choices = previous_rounds.map do |choices|
    (0..999).max_by { |i| choices.map{ |c| root_distance(i,c) }.inject(:+) }
  end
  if (last_round = optimal_past_choices.last)
    (last_round + average_delta(optimal_past_choices).round) % 1000
  else
    750
  end
end

def root_distance(i,j)
  dist = (i-j).abs
  dist = [dist, 1000 - dist].min
  dist ** 0.5
end

def directed_distance(i,j)
  dist = j - i
  if dist > 500
    dist - 1000
  elsif dist < -500
    dist + 1000
  else
    dist
  end
end

def average_delta(ary)
  ary.each_cons(2).map{ |x,y| directed_distance(x,y) }.inject(0,:+)/ary.count
end

এটি এই ত্রুটিটি দিচ্ছে:NoMethodError: undefined method `split' for #<Array:0x720f56e2> choose at CircilinearExtrapolator.rb:2
কেএসএফটি

ওহ, previous_choicesমান মত একটি অ্যারে হয় ["1 6 500","2 8 503"]?
হিস্টোক্র্যাট

এটাই. আপনি কি মনে করেছিলেন এটি অন্য কিছু ছিল? যদি তা না হয় তবে আমি সম্ভবত এটি চালিয়ে যাচ্ছিলাম mes
কেএসএফটি

আমি ভেবেছিলাম এটি কেবল একটি ফ্ল্যাট স্ট্রিং, দুঃখিত। আমি সম্পাদনা করব।
হিস্টোক্র্যাট

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