একটি মিনিম্যাক্স গাছ মূল্যায়ন করুন


16

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

গাছ

আমরা মূল থেকে শুরু করি, এবং খেলতে প্রথম হ'ল এলিস (এ)। তাকে অবশ্যই বর্তমান নোডের একটি বাচ্চা নির্বাচন করতে হবে। তারপরে ববের পালা, এবং তিনি একইভাবে একটি শিশু নোড নির্বাচন করেন। পাতার নোড না পাওয়া পর্যন্ত এটি অব্যাহত থাকে।

যখন একটি পাতার নোড পৌঁছে যায়, খেলা শেষ is যতটা সম্ভব মূল্যের একটি নোডে শেষ হওয়া অ্যালিসের লক্ষ্য এবং যতটা সম্ভব একটি মানের সাথে একটি নোডে শেষ হওয়া ববের লক্ষ্য।

নেস্টেড অ্যারে আকারে একটি গাছ দেওয়া হয়েছে, অ্যালিস এবং বব উভয়ই নিখুঁতভাবে খেললে পাতার মানটি ফিরে আসবে return


উদাহরণ:

18: [[67, [[100, [[67, 47], [86], 21, 16], [[46, [14], 35, 85], [71, [18, 63, 69], 99, 22], 3]]], [[18, 32, 42, 80]], [[36, 70], [86, 53, 46, 59], [[41], 86, 35]]], 3]
60: [[[84, 35], [44, 60]], [[24, 98], [16, 21]]]
58: [[53, 77], [58, [82, 41]], 52]
59: [[93, [100, 53], 58, 79], [63, 94, 59], [9, [55, 48]], [40, 10, 32]]
56: [[20, 10, [[[89, 22, 77, 10], 55], [24, 28, 30, 63]]], [[49, 31]], 17, 56]
0: [0]

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


বাইটস মধ্যে সংক্ষিপ্ত কোড।


উত্তর:


2

জেলি , 7 বাইট

N߀¬¡ṂN

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

এটি @ xnor এর উত্তর থেকে অ্যালগরিদম ব্যবহার করে । তুলনার উদ্দেশ্যে, আরও সহজবোধ্য পদ্ধতির যা পর্যায়ক্রমে মিনিমা এবং ম্যাক্সিমার ওজন 8 বাইটের হয় :

߀¬¡€Ṃ€Ṁ

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

N߀¬¡ṂN  Main link. Argument: x (array or integer)

N        Negate. For an array, this negates all integers in it.
   ¬     Logical NOT. For an array, this applies to all integers in it.
    ¡    Apply the second link to the left once if ¬ returned an array or 1, or not
         at all if it returned 0.
 ߀      Recursively call the main link on all elements at depth 1 of -x.
         If -x == 0, € will cast 0 to range before mapping ß over it. 
         Since the range of 0 is [], mapping ß over it simply yields [].
     Ṃ   Minimum.
         For an integer, Ṃ simply returns the integer. For [], Ṃ returns 0.
      N  Negate the minimum.

8

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

f=lambda l,c=1:c*l if l<[]else-min(f(x,-c)for x in l)

মূল প্রশ্ন মধ্যে বিকল্প হল কিভাবে maxএবং minপ্রতিটি স্তর। এই সত্যটি ব্যবহার করে max(l) == -min([-x for x in l]), আমরা পরিবর্তে প্রতিটি দ্বিতীয় স্তরকে প্রত্যাখ্যান করি এবং এর সাথে পুনরাবৃত্তি করি -min। প্রতি দ্বিতীয় স্তরটিকে অবহেলা করার জন্য, আমরা একটি গুণককে পাস করি cযা বিকল্প হয় +1এবং -1এবং যখন আমরা কোনও পাতায় পৌঁছে যাই, তখন আমরা তার মানটি গুণক দ্বারা সামঞ্জস্য করি। l<[]পাইথন 2 সংখ্যাকে তালিকার চেয়ে কম হিসাবে বিবেচনা করে, আমরা শর্তের মাধ্যমে একটি পাতায় থাকা স্বীকৃতি জানাই।

else/ifত্রৈমাসিকটি ছোট করা শক্ত কারণ উভয় শাখাই ট্রুটি (ননজারো) বা ফ্যালসি (শূন্য) মান দিতে পারে।


1

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

f=(a,s=1)=>a.map?s*Math.max(...a.map(b=>s*f(b,-s))):a

@ Xnor এর উত্তরের অনুরূপ পন্থা ব্যবহার করে। যদি সংখ্যাগুলি অজারু হয় তবে কেবল 49 বাইট:

f=(a,s=1)=>+a||s*Math.max(...a.map(b=>s*f(b,-s)))

1

পাইথ, 21 বাইট

M?sIG*GH_hSmgd_HGLgb1

আমার প্রথম পাইথ উত্তর! সহায়তার জন্য ডেনিসকে ধন্যবাদ :)

M                      # define a binary function (G, H)
 ?sIG                  # if G (first argument) is the same with s applied
                       # (check if it's an integer, so, a leaf node)
     *GH               # in such a case, calculate G*H
        _              # negation
         hS            # take the first element of the sorted list (that's the min)
           mgd_HG      # map over G, applying ourself (g) recursively,
                       # with the current lambda's value (d)
                       # and the negation of H
                 Lgb1  # Define a unary function to call our previous
                       # one with the correct base argument (1)

এই মানচিত্রের জন্য সংক্ষিপ্ত বাক্য গঠন রয়েছে: mgd_Hহতে পারে gR_H। এছাড়াও, পরিবর্তে একটি ফাংশন সংজ্ঞায়িত আপনার ইনপুট নিতে পারেন Qএবং প্রতিস্থাপন Lgb1সঙ্গে gQ1
lirtosiast

1

গণিত, 13 বাইট

-Min[#0/@-#]&

বা সমতুল্য

Max[-#0/@-#]&

এটি একটি নামহীন ফাংশনকে মূল্যায়ন করে যা গাছ নেয় এবং ফলাফলটি দেয় returns

এটিও মূলত xnor এর সমাধান হিসাবে সমান: প্রতিটি স্তরে আমরা তালিকার সাইন এবং ফলাফলের স্যুপ পরিবর্তন করি এবং সমস্তভাবে Minনীচে ব্যবহার করি । এটি ম্যাথমেটিকায় অবিশ্বাস্যরকম গল্ফ হয়ে উঠেছে, কারণ:

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

সেগুলো দুজনেই একসঙ্গে মানে আমরা কোনো কন্ডিশন ছাড়া কোড লিখতে পারেন, যেহেতু Minএবং Mapঅপারেশন হয় সংখ্যার কোন-অপস, এবং পরবর্তীকালে দুই negations যাতে ফাংশন পরিচয় যখন একটি নম্বর দেওয়া হয়ে বাদ গেল।

পরিশেষে, ধন্যবাদ#0 ম্যাথমেটিকাতে নামবিহীন পুনরাবৃত্ত ফাংশনগুলি লেখা সম্ভব, যা আরও কয়েকটি বাইট সংরক্ষণ করে।


0

রুবি, 46 বাইট

minসর্বোচ্চ এবং সর্বনিম্নের মধ্যে বিকল্পের জন্য @ xnor এর কৌশল ব্যবহার করা হয়েছে trick

f=->n,a=1{n==[*n]?-n.map{|c|f[c,-a]}.min: a*n}

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