उन्मूलन खेल खेलते हैं


12

परिचय

इस चुनौती में, आपका कार्य एक निश्चित प्रकार के उन्मूलन खेल का अनुकरण करना है। खेल में, प्रतिभागी एक सर्कल में खड़े होते हैं, और हर कोई एक पूर्णांक रखता है। खेल के प्रत्येक दौर में, प्रत्येक प्रतिभागी व्यक्ति को nदूर कदम nरखता है, यदि वह संख्या है जो वे पकड़ रहे हैं। यदि nसकारात्मक है, तो वे अपने दाईं ओर गिनते हैं, यदि nनकारात्मक है, तो वे अपने बाएं ओर गिना करते हैं, और यदि nशून्य है, तो वे खुद को इंगित करते हैं। प्रत्येक प्रतिभागी, जिनके पास कोई इंगित करता है, उन्हें समाप्त कर दिया जाता है और सर्कल छोड़ दिया जाता है; यह दौर समाप्त होता है। राउंड तब तक जारी रहता है जब तक कि कोई प्रतिभागी शेष न हो।

इनपुट

आपका इनपुट किसी भी उचित प्रारूप में पूर्णांकों की गैर-रिक्त सूची है। यह उन संख्याओं का प्रतिनिधित्व करता है जिन्हें खेल के प्रतिभागी पकड़ रहे हैं।

उत्पादन

आपका आउटपुट गेम समाप्त होने तक राउंड की संख्या है।

उदाहरण

इनपुट सूची पर विचार करें [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वह संख्या जो व्यक्ति धारण कर रहा है?
पीटर टेलर

@PeterTaylor हाँ, यह है। मैं बाद में चुनौती में स्पष्ट करूँगा।
जरगब

जवाबों:


4

अजगर, 15 बाइट्स

f!=.DQ.e%+bklQQ

टेस्ट सूट kirby के लिए धन्यवाद

@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],(

परीक्षण सूट।

CJam शैली सूची के रूप में इनपुट लेता है, लेकिन परीक्षण सूट चुनौती में प्रारूप से रूपांतरण का ख्याल रखता है।

व्याख्या

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लगभग वही है जो मैं कल एक अलग प्रश्न के लिए देख रहा था।
पीटर टेलर

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

कुछ टिप्स के लिए मार्टिन ब्यूटनर को धन्यवाद।

करने के लिए यह golfed 197 एहसास है कि मैं पुनः उपयोग कर सकते द्वारा argsसरणी भले ही यह तार की एक सरणी है। मुझे केवल एक जगह एक पूर्णांक में उन्हें पार्स करने की आवश्यकता है।

करने के लिए golfed 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
C # सबसे अजेय है? निश्चित रूप से आपको गलत होना चाहिए; हर कोई जानता है कि जावा। : पी
एलेक्स ए।

@AlexA। Pfft, मैं इस पर टिमवी के साथ हूं। मैंने जावा के साथ C # को बहुत बार पीटा है: पी
जियोबिट्स

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

STATA, 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

STATA के भुगतान किए गए संस्करण का उपयोग करता है। माना जाता है कि इनपुट एक नई लाइन से अलग की गई फ़ाइल है जिसे कहा जाता है a.। उन परिस्थितियों तक सीमित है जहां अधिकतम 10 प्रकार के चर (10 बाइट्स की लागत पर तय किए जा सकते हैं) के कारण 1023 से अधिक राउंड की आवश्यकता नहीं है। यह डेटा को पढ़ता है और एक लूप चलाता है जब तक कि अधिक अवलोकन न हों। प्रत्येक पुनरावृत्ति में, उस सूचकांक के मूल्य के साथ एक चर बनाते हैं जो इसे इंगित करता है। प्रत्येक अवलोकन के लिए, यदि कोई अन्य अवलोकन इसे इंगित करता है, तो चर को छोड़ने के लिए एक संकेतक सेट करें। फिर उस संकेतक के साथ सभी टिप्पणियों को छोड़ दें और काउंटर को बढ़ाएं। लूप के बाद, काउंटर प्रिंट करें।



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
० ० ०
-2 -1 0 1 2 3 4 5 6 7
५ ५ ५ ६ ६ ६
3 -7 -13 18 -10 8
-13 ५ १ -५ -१३ -१० ९
4 20 19 16 8 -9 -14 -2 17 7 2 -2 10 0 18 -5 -5 20
११ २ 11 -६ -१५-15 १५ -१२---१6 ६ -६ -५ ० -२० २ १ १
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 -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])
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.