আমার ডিফাই গেমটি কি অবনতি হয়?


23

সম্প্রতি আমি ডিফাই গেমস সম্পর্কে একটি প্রশ্ন পোস্ট করেছি যা উত্তরহীন হয়েছে। ঠিক আছে, প্রশ্নটি আসলেই শক্ত, তবে আমি ডিফাই গেমগুলি সম্পর্কে একটি সহজ প্রশ্ন তৈরি করতে চাই যাতে আমরা বলটি ঘূর্ণায়মান হয়ে উঠতে পারি।


কিভাবে ডিফাই কাজ করে

ডিফাই গেমস থেকে অনুলিপি করা হয়েছে

ডিফাই গেমটি নীচের মত কাজ করে: আপনি অ-নেতিবাচক পূর্ণসংখ্যার একটি তালিকা দিয়ে শুরু করুন, এই উদাহরণে আমরা ব্যবহার করব

3 4 5 8

তারপরে আপনি সংলগ্ন সংখ্যার মধ্যে নিখুঁত পার্থক্য গ্রহণ করুন

 (8)  3   4   5   8
    5   1   1   3

তারপরে আপনি পুনরাবৃত্তি করুন। আপনি লুপটি প্রবেশ না করা পর্যন্ত আপনি পুনরাবৃত্তি করবেন। এবং তারপরে সাধারণত গেমটি শুরু থেকে আবার শুরু হয়।

3 4 5 8
5 1 1 3
2 4 0 2
0 2 4 2
2 2 2 2
0 0 0 0
0 0 0 0

বেশিরভাগ গেমস সমস্ত শূন্যের স্ট্রিংয়ে শেষ হয়, এটি হারা রাষ্ট্র হিসাবে বিবেচিত হয়, তবে বিরল কয়েকটি গেম বৃহত্তর লুপগুলিতে আটকে যায়।


কার্য

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

লক্ষ্যটি হ'ল আপনার উত্সে বাইট সংখ্যা হ্রাস করা।


1
টাস্ক ওয়ার্ডিং বলতে বোঝা যাচ্ছে যে কোনও খেলা যা সমস্ত শূন্যের একটি অবস্থাতে পৌঁছায় না তাই পর্যায়ক্রমিক। এর আগে, পর্যায়ক্রমিক পুনরাবৃত্তি ক্রমের প্রাথমিক অবস্থা অন্তর্ভুক্ত হিসাবে সংজ্ঞায়িত করা হয়। এর অর্থ কি এই যে কোনও ক্রম শেষ পর্যন্ত সমস্ত শূন্য বা প্রাথমিক অবস্থায় পৌঁছায়?
ট্রাইকোপলাক্স

3
না: কোনও ননজারো পর্যায়ক্রমিক রাষ্ট্রের ইতিবাচক ধ্রুবক যুক্ত হওয়ার ফলে এমন একটি রাজ্যে ফলাফল আসে যা না নিজেই ফিরে আসে না বা সমস্ত শূন্যে যায় না। উদাহরণস্বরূপ, 1 1 0পর্যায়ক্রমিক, 42 42 41যেমন একটি রাষ্ট্র।
গ্রেগ মার্টিন

3
প্রকৃতপক্ষে, নির্দিষ্ট প্রশ্ন জিজ্ঞাসার জন্য, একজনকে "পর্যায়ক্রমিক" ধারণার প্রয়োজন হয় না। "অবশেষে সমস্ত শূন্যের একটি স্থানে পৌঁছায়" স্বয়ংসম্পূর্ণ এবং পরিষ্কার is
গ্রেগ মার্টিন

2
আমি একটি আংশিক বৈশিষ্ট্য প্রমাণ করেছি: তালিকার দৈর্ঘ্য nবিজোড় হলে সমস্ত সংখ্যা সমান না হলে খেলা শূন্যে যায় না। দৈর্ঘ্য যদি 2 এর শক্তি হয় তবে সর্বদা শূন্যে চলে যায়।
xnor

3
শূন্যে পৌঁছানোর পদক্ষেপের সংখ্যার সীমা: nউপাদানগুলির একটি তালিকা এবং সর্বাধিক পদক্ষেপ mনেয় at n * bit_length(m)সুতরাং, n*mএটি একটি উপরের বাউন্ডও। একটি শক্তিশালী উপরের গণ্ডি t(n) * bit_length(m)যেখানে t(n)2 এর বৃহত্তম শক্তি যেখানে এটি একটি ফ্যাক্টর n
xnor

উত্তর:


27

পাইথ, 6 বাইট

suaV+e

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

এই প্রোগ্রামটি খুব সাভেদ। 0 (মিথ্যা) অর্থ সমস্ত শূন্য, অন্য যে কোনও কিছুই (সত্যবাদী) এর অর্থ সমস্ত শূন্য নয়।

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

suaV+e
suaV+eGGGQ    Variable introduction.
 u       Q    Apply the following function repeatedly to its previous result,
              starting with the input. Stop when a value occurs which has
              occurred before.
  aV          Take the absolute differences between elements at the same indices of
        G     The previous list and
    +eGG      The previous list with its last element prepended.
s             The repeated value is returned. Sum its entries. This is zero (falsy)
              if and only if the entries are all zero.

6
thats একটি ভদ্র সমাধান
Martijn Vissers

14

গণিত, 52 বাইট

1>Max@Nest[Abs[#-RotateLeft@#]&,#,Max[1+#]^Tr[1^#]]&

খাঁটি ফাংশন ইনপুট হিসাবে ফিরে আসা Trueবা প্রত্যাবর্তন হিসাবে nonnegative পূর্ণসংখ্যার একটি তালিকা গ্রহণ করে False

Abs[#-RotateLeft@#]&একটি ফাংশন যা বিভিন্ন গেমের এক রাউন্ড কার্যকর করে। (প্রযুক্তিগতভাবে এটি হওয়া উচিত RotateRight, তবে চূড়ান্ত উত্তরটি প্রভাবিত নয়, এবং হেই, বিনামূল্যে বাইট।) সুতরাং SoNest[...,#,R] , executes Rdiffy খেলার চক্রের, এবং তারপর 1>Max@সনাক্ত করে কিনা ফলাফলের সব zeros হয়।

আমরা কীভাবে জানতে পারি কতগুলি ডিফাই-গেমের রাউন্ডগুলি Rকরতে হবে? যদি mইনপুটটির বৃহত্তম মান হয় তবে লক্ষ্য করুন যে আমরা যত mরাউন্ডই করি না কেন আমরা কখনই বড় পূর্ণসংখ্যার উত্পাদন করতে পারি না। দৈর্ঘ্য তালিকা মোট সংখ্যা lনন-নেগেটিভ পূর্ণসংখ্যার সব দ্বারা বেষ্টিত mহয় (m+1)^l। সুতরাং আমরা যদি (m+1)^lবিভিন্ন গেমের বিভিন্ন রাউন্ডগুলি চালিয়ে যাই তবে আমাদের ততক্ষণে দু'বার কোনও তালিকা দেখার গ্যারান্টি দেওয়া হয়েছিল, এবং এইভাবে খেলার পর্যায়ক্রমিক অংশে থাকবে। বিশেষত, গেমটি সমস্ত শূন্যগুলিতে শেষ হয় যদি এবং কেবল যদি (m+1)^lগেমের রাউন্ডের ফলাফল সর্ব-জিরো তালিকা থাকে। যে অভিব্যক্তি কি Max[1+#]^Tr[1^#]গণনা।


6

জেলি , 13 বাইট

Ṁ‘*L
ṙ1ạ
ÇÑ¡Ṁ

আউটপুট 0 (মিথ্যা) যদি সমস্ত শূন্য অবস্থানে পৌঁছে যায়, অন্যথায় সত্যবাদী মান (ধনাত্মক পূর্ণসংখ্য) ফিরে আসে।

এটি অনলাইন চেষ্টা করুন!

গ্রেগ মার্টিনের দ্বারা তৈরি প্রথম পর্যবেক্ষণ ব্যবহার করে যে অ্যারের মধ্যে সংখ্যাগুলি কখনও ডোমেন [0, মি] ছাড়তে পারে না যেখানে এম ইনপুটটির সর্বাধিক উপাদান, তাই (এম + 1) এল রাউন্ডগুলি সঞ্চালন করে যেখানে এল দৈর্ঘ্য হবে যথেষ্ট।

কিভাবে?

Ṁ‘*L - Link 1, number of rounds to perform: list a
Ṁ    - maximum of a
 ‘   - incremented
   L - length of a
  *  - exponentiate

ṙ1ạ - Link 2, perform a round: list x
ṙ1  - rotate x left by 1
  ạ - absolute difference (vectorises) with x

ÇÑ¡Ṁ - Main link: list a
  ¡  - repeat:
Ç    -     the last link (2) as a monad
 Ñ   -     the next link (1) as a monad times
   Ṁ - return the maximum of the resulting list

এটি কি এক্সনোরের সাথে আবদ্ধ হয়ে উন্নত করা যেতে পারে ?
গম উইজার্ড

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

2

পিএইচপি, 144 বাইট

সমস্ত শূন্যের জন্য 0 এবং সত্যের জন্য কোনও ধনাত্মক পূর্ণসংখ্যার মান মুদ্রণ করুন

<?for($r[]=$_GET[0];!$t;){$e=end($r);$e[]=$e[$c=0];for($n=[];++$c<count($e);)$n[]=abs($e[$c-1]-$e[$c]);$t=in_array($n,$r);$r[]=$n;}echo max($n);

অনলাইন সংস্করণ

সম্প্রসারিত

for($r[]=$_GET;!$t;){
    $e=end($r);  # copy last array
    $e[]=$e[$c=0]; # add the first item as last item
    for($n=[];++$c<count($e);)$n[]=abs($e[$c-1]-$e[$c]); # make new array
    $t=in_array($n,$r); # is new array in result array
    $r[]=$n; # add the new array
}
echo max($n); # Output max of last array

1
array_push? কিন্তু কেন ?
ক্রিস্টোফ

1
এছাড়াও যদি $_GETইনপুট হিসাবে ব্যবহার করা হয় তবে আপনার ধরে নেওয়া উচিত এটিতে একটি স্ট্রিং রয়েছে।
ক্রিস্টোফ

1
@ ক্রিসটফ ?0[0]=1&0[1]=1&0[2]=0বা ?0[]=1&0[]=1&0[]=0স্ট্রিংগুলির একটি অ্যারে তবে এটি কোনও বিষয় নয়। তবে আপনি ঠিক বলেছেন আমি ?0=1&1=1&2=0কেন এটিকে আরও ছোট করে তুলতে পারব না àrre_push` আমি নিশ্চিত যে আপনি বা তিতাস এটিকে সংক্ষিপ্ত করার আরও ভাল উপায় খুঁজে পাবেন।
জার্গ হালসারম্যান

1
array_push($e,$e[$c=0]);কেবল ঠিক একইরকম $e[]=$e[$c=0];এবং আপনি ইতিমধ্যে সিন্টেক্সটি ব্যবহার করেন ( $r[]=$n)। আপনি ইতিমধ্যে ব্যবহার maxএখন তাই আপনার কাছে প্রতিস্থাপন করা উচিত end($r)সঙ্গে $nকারণ $nসর্বদা সমান end($r)যখন প্রতিধ্বনি মৃত্যুদন্ড কার্যকর করা হয়।
ক্রিস্টোফ

@ ক্রিসটফ দেখে মনে হয় গতকাল আমার দিন ছিল না। ধন্যবাদ. টিপস বিভাগে একটি নতুন প্রবেশের জন্য আপনি আমাকে আমার ধারণা নিয়ে
এসেছেন

2

আর (3.3.1), 87 বাইট

সমস্ত শূন্যগুলিতে সমাপ্ত হওয়া গেমের শূন্য এবং অন্যথায় ধনাত্মক সংখ্যা ফিরে আসে।

z=scan();sum(Reduce(function(x,y)abs(diff(c(x,x[1]))),rep(list(z),max(z+1)^length(z))))

গ্রেগ মার্টিনের একই সত্যকে কাজে লাগায় এবং বিল্টিন ডিফ ব্যবহার করে আলাদা করতে


যদি প্রদত্ত যে এক্সনরের গণ্ডিটি সঠিক (মন্তব্যগুলি থেকে), এটি সর্বোচ্চ (জেড) * দৈর্ঘ্য (জেড) ব্যবহার করে দুটি বাইট কম হতে পারে তবে আমি সঠিকতার বিষয়ে নিশ্চিত নই
জিউসেপ্পে

1

রাদা , 80 বাইট

f l...{x=[{peek a;[_];[a]}()|slide 2|abs _-_];[sum(x)=0]if[x in l]else{x|f*l+x}}

এটি অনলাইন চেষ্টা করুন!

Ungolfed:

function f(l...) { /* function f, variadic arguments */
    x := [ /* x is a list of */
        { /* duplicate the first element of the stream to the last position */
            peek a /* read the first element of the stream */
            [_]    /* pull all values and push them */
            [a]    /* push a */
        }() |
        slide(2) | /* duplicate every element except first and last */
        abs(_-_)   /* calculate the difference of every pair */
    ]
    /* If we have already encountered x */
    if [ x in l ] do
        return sum(x) = 0 /* Check if x contains only zeroes */
    else
        x | f(*l+x) /* Call f again, with x appended to l */
    done
}

1

05 এ বি 1 ই , 13 বাইট

জিরোতে শেষ হয়ে গেলে 1 এবং অন্যথায় 0 প্রদান করে

Z¹g*F¤¸ì¥Ä}_P

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

চক্রের উপরের সীমানা ব্যবহার করে: মন্তব্য বিভাগে xnormax(input)*len(input) দ্বারা ব্যাখ্যা করা ।

Z              # get max(input)
 ¹g            # get length of input
   *           # multiply
    F          # that many times do:
     ¤         # get the last value of the current list (originally input)
      ¸        # wrap it
       ì       # prepend to the list
        ¥      # calculate deltas
         Ä     # calculate absolute values
          }    # end loop
           _   # negate each (turns 0 into 1 and everything else to 0)
            P  # calculate product

1

জে, 22 বাইট

সমস্ত শূন্যে অবসন্ন হওয়া একটি অবক্ষয়িত গেমের জন্য রিটার্নস 0(যা falseজেতে কার্যকরভাবে রয়েছে)। রিটার্নস 1( true) যদি n তম পুনরাবৃত্তির একটি নন-জিরো সংখ্যা উপস্থিত রয়েছে, যেখানে n তালিকার দৈর্ঘ্য দ্বারা গুন মূল ক্রমানুসারে বৃহত্তম পূর্ণসংখ্যা সমান। গ্রেগ মার্টিনের উত্তর দেখুন কেন এটি সত্য answer

*>./|&(-1&|.)^:(#*>./)

অনুবাদ:

  • সাইন কি? *
  • সর্বাধিক মান >./
  • আপনি নিম্নলিখিত হিসাবে যতবার পুনরাবৃত্তি ^:( )
  • তালিকার দৈর্ঘ্য তালিকার সর্বাধিক মান #দ্বারা গুণিত*>./ :
    • পরম মান নিন |& এর
    • তালিকার মধ্যে পার্থক্য (- ) এবং
    • তালিকাটি একটি করে আবর্তিত হয়েছিল 1&|.

উদাহরণ:

   *>./|&(-1&|.)^:(#*>./) 1 1 0
1
   *>./|&(-1&|.)^:(#*>./) 42 42 41
1
   *>./|&(-1&|.)^:(#*>./) 3 4 5 8
0
   *>./|&(-1&|.)^:(#*>./) 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1
0

1
গ্রেগ মার্টিনের দাবি এমনটি নয়। যাইহোক, xnor উপরের মন্তব্যগুলিতে আরও ভাল সীমাবদ্ধতা রয়েছে (তবে এখনও কেবল বৃহত্তম বৃহত্তম পূর্ণসংখ্যা নয়)। সবচেয়ে সহজ হল দৈর্ঘ্যের সাথে সর্বাধিক মানকে গুণ করা।
janrjan জোহানসেন

ভালো বল ধরা. আমি যথেষ্ট মনোযোগ দিচ্ছিলাম না। আমি সমাধান ঠিক করব।
ডেন

1

জাভাস্ক্রিপ্ট (ES6), 95 92 90 বাইট

f=(a,b=(Math.max(...a)+1)**(c=a.length))=>b?f(a.map((v,i)=>v-a[++i%c]),b-1):a.every(v=>!v)

ব্যাখ্যা

পুনরাবৃত্ত ফাংশন যা কাউন্টার হিসাবে নিজেকে কল করে (যা তালিকার সর্বোচ্চ মানের সাথে তালিকার দৈর্ঘ্যের শক্তির এক থেকে শুরু হয় [ = (max + 1)**length]) শূন্য নয়। প্রতিটি কলে, কাউন্টারটি হ্রাস করা হয়, এবং এটি শূন্যকে হিট করলে তালিকার সমস্ত উপাদান শূন্যের বিপরীতে চেক করা হয়। তারা সব শূন্য, প্রোগ্রাম আয় সমান তাহলে true, এবং falseঅন্যথায়।


1

পিএইচপি, 123 115

for($a=$_GET,$b=[];!in_array($a,$b);){$b[]=$c=$a;$c[]=$c[0];foreach($a as$d=>&$e)$e=abs($e-$c[$d+1]);}echo!max($a);

এইচটিটিপি এর মাধ্যমে ইনপুট নেওয়া উদাহরণস্বরূপ ?3&4&5&8কয়েকটি বাইট সংরক্ষণ করে।

1 টি প্রিন্ট করুন যদি এটি সমস্ত শূন্যে পৌঁছে বা অন্যথায় কিছু না।


for($e=$argv,$r=[];!in_array($e,$r);$q=$e[0]){$e[0]=end($e);$r[]=$e;foreach($e as$k=>&$q)$q=abs($q-$e[$k+1]);}echo!max($e);

কমান্ড লাইনের মাধ্যমে আর্গুমেন্টের তালিকা গ্রহণ করে। আমার আরও অনুভূতি হয়েছে যে এটি আরও গল্ফ করা যেতে পারে (@ টিটাসের দিকে তাকিয়ে)।


1

পাইথন 3.6, 101 বাইট

def f(t):
 x={}
 while x.get(t,1):x[t]=0;t=(*(abs(a-b)for a,b in zip(t,t[1:]+t[:1])),)
 return any(t)

সংখ্যার একটি দ্বিগুণ অংশ নেয় এবং এটি জিরোতে শেষ হয়ে গেলে এবং মিথ্যাগুলি হলে সত্যটি মিথ্যা প্রদান করে।


0

জাভাস্ক্রিপ্ট (ES6), 84 83 বাইট

অন্যথায় trueসমস্ত শূন্যে শেষ হওয়া গেমটির জন্য ফেরত দেয় false

f=(a,k=a)=>k[b=a.map((n,i)=>Math.abs(n-a[(i||a.length)-1]))]?!+b.join``:f(k[b]=b,k)

পরীক্ষা

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