এলিমিনেশন গেম খেলুন


12

ভূমিকা

এই চ্যালেঞ্জে আপনার কাজটি হ'ল নির্দিষ্ট ধরণের এলিমিনেশন গেমটি অনুকরণ করা। গেমটিতে, অংশগ্রহণকারীরা একটি বৃত্তে দাঁড়ায় এবং প্রত্যেকে একটি পূর্ণসংখ্যা ধরে রাখে। গেমের প্রতিটি রাউন্ডে, প্রতিটি অংশগ্রহণকারী পয়েন্টটি ব্যক্তির nকাছ থেকে দূরে সরে যায়, যদি nতারা যে সংখ্যাটি ধরে থাকে তবে তা হয়। যদি nইতিবাচক হয় তবে তারা তাদের ডান হিসাবে গণনা করে, যদি nনেতিবাচক হয় তবে তারা তাদের বামে গণনা করে এবং যদি nশূন্য হয় তবে তারা নিজের দিকে ইশারা করে। প্রত্যেক অংশগ্রহীতার যার কাছে কারও দিকে ইশারা করা আছে তাদের মুছে ফেলা হয়, এবং বৃত্তটি ছেড়ে যায়; এটি শেষ হয়। রাউন্ডগুলি অব্যাহত থাকে যতক্ষণ না কোনও অংশগ্রহণকারী বাকি থাকে left

ইনপুট

আপনার ইনপুটটি কোনও যুক্তিসঙ্গত বিন্যাসে পূর্ণসংখ্যার একটি খালি খালি তালিকা। এটি গেমের অংশগ্রহণকারীদের ধারণ করে থাকা সংখ্যাগুলি উপস্থাপন করে।

আউটপুট

আপনার আউটপুটটি গেমটি শেষ হওয়া অবধি কতগুলি রাউন্ড লাগবে is

উদাহরণ

ইনপুট তালিকাটি বিবেচনা করুন [3,1,-2,0,8]। প্রথম দফায় নিম্নলিখিতটি ঘটে:

  • হোল্ডিং থাকা ব্যক্তির 3ডানদিকে থাকা ব্যক্তি 0
  • হোল্ডিং থাকা ব্যক্তির 1ডানদিকে থাকা ব্যক্তি -2
  • ব্যক্তি হোল্ডিং -2পয়েন্ট ব্যক্তি হোল্ডিং এ বামে 3
  • যে ব্যক্তি তাদেরকে 0পয়েন্ট করে।
  • হোল্ডিং করা ব্যক্তির দিকে সরাসরি অবস্থানকারী 8ব্যক্তি -2(তালিকাটি একটি বৃত্তকে উপস্থাপন করে, তাই এটি শেষের দিকে প্রায় আবৃত হয়)।

এর অর্থ এটি 0, -2এবং অপসারণ করা 3হয়, সুতরাং দ্বিতীয় দফায় তালিকাটি সম্পন্ন করা হয় [1,8]। এখানে, 1বিন্দুগুলি 8এবং 8সেগুলিতে নিজেকে পয়েন্ট করুন, তাই 8মুছে ফেলা হয়। তৃতীয় রাউন্ডটি তালিকার সাথে সম্পন্ন হয় [1], যেখানে 1কেবল তাদেরকে নির্দেশ করে এবং বাদ দেওয়া হয়। সমস্ত অংশগ্রহণকারীকে নির্মূল করতে এটি তিনটি রাউন্ড নিয়েছে, তাই সঠিক আউটপুট 3

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

পরীক্ষার মামলা

[3] -> 1
[0,0,0] -> 1
[-2,-1,0,1,2,3,4,5,6,7] -> 2
[5,5,5,6,6,6] -> 2
[3,-7,-13,18,-10,8] -> 2
[-7,5,1,-5,-13,-10,9] -> 2
[4,20,19,16,8,-9,-14,-2,17,7,2,-2,10,0,18,-5,-5,20] -> 3
[11,2,7,-6,-15,-8,15,-12,-2,-8,-17,6,-6,-5,0,-20,-2,11,1] -> 4
[2,-12,-11,7,-16,9,15,-10,7,3,-17,18,6,6,13,0,18,10,-7,-1] -> 3
[18,-18,-16,-2,-19,1,-9,-18,2,1,6,-15,12,3,-10,8,-3,7,-4,-11,5,-15,17,17,-20,11,-13,9,15] -> 6

আপনি কি সর্বশেষ পরীক্ষার কেস সম্পর্কে নিশ্চিত, আমি 5 পেয়েছি?
flawr

@ ফ্লোয়ার আমি প্রায় এক ঘন্টার মধ্যে আমার রেফারেন্স বাস্তবায়ন পরীক্ষা করতে পারি (আমার কম্পিউটারটি ছেড়ে দিতে হয়েছিল), তবে এটি সঠিক হওয়া উচিত।
জাগারব

কেবল পরিষ্কার করে বলতে হবে: nব্যক্তিটি যে নম্বরটি ধারণ করছে সেটি কি?
পিটার টেলর

@ পিটারটেলর হ্যাঁ, এটি। আমি চ্যালেঞ্জ পরে এটি স্পষ্ট করব।
Zgarb

উত্তর:


4

পাইথ, 15 বাইট

f!=.DQ.e%+bklQQ

টেস্ট স্যুট ধন্যবাদ কার্বি

@Orlp হিসাবে একই পুনরাবৃত্তি প্রক্রিয়া ব্যবহার করে, তবে একবার সম্পন্ন হয়ে গেলে fএটি সনাক্ত করতে "মিথ্যা হওয়া পর্যন্ত পুনরাবৃত্তি করুন" ফাংশনটি ব্যবহার করে পুনরাবৃত্তির সংখ্যা সনাক্ত করে []


5

মতলব, 91 77 বাইট

function k=f(a);k=0;while a*0+1;l=numel(a);a(mod((1:l)+a-1,l)+1)=[];k=k+1;end

পুরনো সংস্করণ:

function k=f(a);for k=1:numel(a);a(mod((1:l)+a-1,l)+1)=[];l=numel(a);if l==0;break;end;end

এটি এমন একটি চ্যালেঞ্জ যেখানে মাতলাব জ্বলে উঠেছে, এই কোডের কেন্দ্রস্থল অ্যারে এন্ট্রিগুলি মুছে ফেলা: a(mod((1:l)+a-1,l)+1)=[]যা আমি মনে করি বেশ মার্জিত।


4

সিজাম, 21 বাইট

q~{__ee{~+0t}/0-}h],(

পরীক্ষা স্যুট.

সিজেএম শৈলীর তালিকা হিসাবে ইনপুট নেয়, তবে পরীক্ষার স্যুট চ্যালেঞ্জের ফর্ম্যাট থেকে রূপান্তরটির যত্ন নেয়।

ব্যাখ্যা

q~     e# Read and evaluate the input.
{      e# While the array is non-empty...
  _    e#   Copy the array. The original is left on the stack so that we can use the
       e#   stack depth to count the number of iterations later.
  _ee  e#   Make another copy and enumerate it, which means that each element is replaced
       e#   by a pair containing the element and its index in the array.
  {    e#   For each such pair...
    ~+ e#     Add the value to the index, giving the index it points at.
    0t e#     Set the value in the original array at the pointed-at index to 0.
       e#     This works without giving false positives because all 0s point to themselves.
  }/
  0-   e#   Remove all 0s from the array.
}h
],(    e# Wrap the stack in an array, get its length and decrement it to determine how
       e# many iterations this process took.

ধন্যবাদ: eeআমি গতকালকে ঠিক অন্যরকম প্রশ্নের সন্ধান করছিলাম is
পিটার টেলর

3

সি #, 251 219 211 197 193 বাইট

সর্বাধিক নিরবচ্ছিন্ন অ-রহস্যময় ভাষা আবার ধর্মঘট করে।

using System.Linq;class X{static void Main(string[]a){int i=0,c;for(;(c=a.Length)>0;i++)a=a.Where((e,x)=>!a.Where((f,y)=>((int.Parse(f)+y)%c+c)%c==x).Any()).ToArray();System.Console.Write(i);}}

এই প্রোগ্রামটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট ক্রমটি প্রত্যাশা করে। উদাহরণস্বরূপ, তালিকাটি ইনপুট করতে [5,5,5,6,6,6], কমান্ড-লাইন আর্গুমেন্ট সহ এটি কল করুন 5 5 5 6 6 6

কিছু টিপসের জন্য মার্টিন বাটনারকে ধন্যবাদ।

এটিকে 197 সালে বুঝতে পেরে আমি argsঅ্যারেটি পুনরায় ব্যবহার করতে পারি যদিও এটি স্ট্রিংগুলির একটি অ্যারে রয়েছে। আমার কেবল তাদের এক জায়গায় পূর্ণসংখ্যায় পার্স করা দরকার।

যা তার চেয়েও কম সংক্ষিপ্ত করে 193 এ গল্ফ করেছে ।.Where(...==x).Any().Select(...).Contains(x)

Ungolfed

using System.Linq;
class X
{
    static void Main(string[] args)
    {
        var iterations = 0, count;

        // In the golfed version, this is a `for` loop instead.
        while ((count = args.Length) > 0)
        {
            // Create a new args array containing the items to be kept.
            args = args.Where((item, index) =>
            {
                // Should the item at index `index` be deleted?
                var deleteThisIndex = args.Where((item2, index2) =>
                    // Modulo that works with negative numbers...
                    ((int.Parse(item2) + index2) % count + count) % count
                        == index);

                return !deleteThisIndex.Any();

            }).ToArray();

            iterations++;
        }

        System.Console.Write(iterations);
    }
}

5
সি # সবচেয়ে অধরা? অবশ্যই আপনার ভুল হতে হবে; সবাই জানে যে জাভা। : পি
অ্যালেক্স এ।

@AlexA। পিএফটি, আমি এই নিয়ে টিমউইয়ের সাথে আছি। আমি সি # কে জাভা দিয়ে প্রচুর সময়
দিয়েছি

3
আপনি ভুল, পাইথ বা সিজেম সর্বাধিক বেহাল দশা, সি # সর্বাধিক অদম্য ভাষা!
বিটা ক্ষয়


2

আর, 105 বাইট

কোড

l=scan();o=c();z=0;while((n=length(l))>0){for(i in 1:n)o=c(o,(i+l[i]-1)%%n+1);l=l[-o];o=c();z=z+1};cat(z)

ungolfed

l <- scan()                  # get input as a 'l' vector from user
o <- c()                     # create a empty vector
z=0                          # create a counter starting at 0   
while((n=length(l))>0){      # while the length of the input is more than 0
  for(i in 1:n){             # iterate through the vector
    o=c(o,(i+l[i]-1)%%n+1)   # add the index that will be deleted to the 'o' vector
  }
  l=l[-o]                    # remove the 'o' vector indexes from 'l'
  o=c()                      # empty 'o'
  z=z+1                      # add 1 to counter
}
cat(z)                       # print the counter

2

পাইথ, 17 বাইট

tl.u.DN.e%+kblNNQ

কাকতালীয়ভাবে কিরবিফানের উত্তরের সাথে খুব মিল।


2

গণিত, 71 বাইট

Length@FixedPointList[#~Delete~Mod[Plus~MapIndexed~#,Length@#,1]&,#]-2&

1
67:(i=0;#//.l:{__}:>l~Delete~Mod[++i;Plus~MapIndexed~l,Length@l,1];i)&
মার্টিন এন্ডার

1
Plus~MapIndexed~#সত্যিই চালাক, কিন্তু আমি ভাবছি যদি সেখানে ব্যবহার করে একটি খাটো উপায় নয় l+Range@Length@l
মার্টিন ইন্ডার

1

স্টাটা, 146 বাইট

inf a using a.
gl b=0
qui while _N>0{
g q$b=0
g c$b=mod(_n+a-1,_N)+1
forv y=1/`=_N'{
replace q$b=1 if _n==c$b[`y']
}
drop if q$b
gl b=$b+1
}
di $b

স্টাটার প্রদত্ত সংস্করণ ব্যবহার করে। ধরে নিই ইনপুটটি একটি নতুন লাইনের দ্বারা পৃথক করা ফাইলের মধ্যে রয়েছে a.। সর্বাধিক সংখ্যক ভেরিয়েবলের কারণে 1023 রাউন্ডের বেশি প্রয়োজন হয় না এমন পরিস্থিতিতে সীমাবদ্ধ (10 বাইটের মূল্যে নির্ধারণ করা যেতে পারে)। এটি ডেটা পড়ে এবং কোনও পর্যবেক্ষণ না করা পর্যন্ত একটি লুপ চালায়। প্রতিটি পুনরাবৃত্তিতে, সূচকটি নির্দেশ করে তার মান সহ একটি পরিবর্তনশীল করুন vari প্রতিটি পর্যবেক্ষণের জন্য, যদি অন্য পর্যবেক্ষণ এটিতে নির্দেশ করে, ভেরিয়েবলটি নামানোর জন্য একটি সূচক সেট করুন। তারপরে সেই সূচকটি দিয়ে সমস্ত পর্যবেক্ষণ ফেলে দিন এবং কাউন্টারটি বাড়িয়ে দিন। লুপের পরে, কাউন্টারটি মুদ্রণ করুন।



1

awk, 66 বাইট

{for(;n=split($0=$0,a);++r)for(i in a)$((i+a[i]%n+n-1)%n+1)=X}$0=r

mod length arrayএটি অ্যারের ভিতরে রাখার জন্য কেবল ব্যবহার করে। ইনপুটটিতে নম্বরগুলি ফাঁক দিয়ে পৃথক করা দরকার।

ব্যবহারের উদাহরণ

echo "-2 -1 0 1 2 3 4 5 6 7" | awk '{for(;n=split($0=$0,a);++r)for(i in a)$((i+a[i]%n+n-1)%n+1)=X}$0=r'

যথাযথ বিন্যাসে সমস্ত ইনপুট উদাহরণ এখানে

3
0 0 0
-2 -1 0 1 2 3 4 5 6 7
5 5 5 6 6 6
3 -7 -13 18 -10 8
-7 5 1 -5 -13 -10 9
4 20 19 16 8 -9 -14 -2 17 7 2 -2 10 0 18 -5 -5 20
11 2 7 -6 -15 -8 15 -12 -2 -8 -17 6 -6 -5 0 -20 -2 11 1
2 -12 -11 7 -16 9 15 -10 7 3 -17 18 6 6 13 0 18 10 -7 -1
18 -18 -16 -2 -19 1 -9 -18 2 1 6 -15 12 3 -10 8 -3 7 -4 -11 5 -15 17 17 -20 11 -13 9 15

0

পাইথন 2, 122 বাইট

def f(l):
 if not l:return 0
 L=len(l);x=[1]*L
 for i in range(L):x[(i+l[i])%L]=0
 return 1+e([v for i,v in zip(x,l)if i])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.