একটি বিশেষজ্ঞের মতো নিম বোর্ডটি ভিজ্যুয়ালাইজ করুন


10

পটভূমি

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

নিম একটি মজাদার বার গেম তৈরি করে। আপনি "পাথর" এর জন্য ম্যাচস্টিক বা কয়েন ব্যবহার করতে পারেন এবং "পাইলস" সাধারণত একটি লাইনে সাজানো থাকে। নীচে 1, 3, 5 এবং 7 এর পাইল সহ একটি ক্লাসিক সেটআপ রয়েছে:

ম্যাচস্টিকস সহ নিম

আপনি যদি এর আগে নিম কখনও খেলেন না, আপনি এই চ্যালেঞ্জটি চেষ্টা করার আগে আপনার নিজের হাতটি এটি ব্যবহার করে দেখতে পারেন। এখানে "মুক্তার আগে সোয়াইন" নামে একটি সংস্করণ রয়েছে

কৌশল

নিমের সর্বোত্তম কৌশলটি যথেষ্ট কৌশলযুক্ত যে বেশিরভাগ লোকেরা বিশেষজ্ঞের কাছে নিয়মিত হারাতে থাকে তবে বাইনারি গাণিতিকের সাথে বর্ণনা করা সহজ ।

মানসিক বাইনারি এক্সওআর অপারেশনগুলি করা শক্ত, তবে ভাগ্যক্রমে সঠিক কৌশলটি কল্পনা করার একটি সমতুল উপায় রয়েছে যা বাস্তব সময়ে বাস্তবায়িত করা সহজ, এমনকি মাতাল হয়েও।

কেবল তিনটি ধাপ রয়েছে:

  1. মানসিকভাবে প্রতিটি লাইনের "পাথরগুলিকে" সাব-গ্রুপগুলিতে গোষ্ঠীভুক্ত করুন যার আকারগুলি 2 এর শক্তি, সবচেয়ে বড় সম্ভাব্য আকার থেকে শুরু করে: 8, 4, 2 এবং 1 বেশিরভাগ গেমের জন্য যথেষ্ট।
  2. প্রতিটি গ্রুপকে অন্য লাইনে যমজদের সাথে মিলিয়ে দেখার চেষ্টা করুন, যাতে প্রতিটি গ্রুপের একটি জুড়ি থাকে।
  3. যদি এটি সম্ভব না হয় তবে একক লাইন থেকে অপরিশোধিত "পাথর" সরিয়ে ফেলুন (এটি সর্বদা সম্ভব হবে - এর জন্য উইকিপিডিয়া লিংকটি দেখুন) যাতে সেই পদক্ষেপ ২ সম্ভব হয়।

অথবা, অন্যভাবে বলেছিলেন: "একটি গাদা থেকে কিছু পাথর সরিয়ে ফেলুন যেমন আপনি যদি পাইলগুলি 2 টির ক্ষমতায় ভাগ করেন তবে সমস্ত গোষ্ঠী অন্য কোনও স্তূপে একটি গোষ্ঠীর সাথে যুক্ত হতে পারে।" এই সতর্কতার সাথে আপনি 2 টির বৃহত শক্তিগুলিকে ছোট করে ভাগ করতে পারবেন না - যেমন, আপনি 8 টি পাথরের একটি রেখা 4 টির দুটি গ্রুপে ভাগ করতে পারবেন না।

উদাহরণস্বরূপ আপনি এখানে উপরের বোর্ডটি কীভাবে দেখবেন:

ভারসাম্যপূর্ণ ম্যাচস্টিকস

এই বোর্ডটি পুরোপুরি ভারসাম্যযুক্ত, তাই আপনি চাইবেন আপনার প্রতিপক্ষকে প্রথমে সরানো হোক।

চ্যালেঞ্জ

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

বৈধ দৃশ্যায়ন যা গঠন করে তা উদাহরণের মাধ্যমে সর্বোত্তমভাবে ব্যাখ্যা করা হয় তবে আপনাকে অবশ্যই:

  1. প্রতিটি "পাওয়ার-অফ -2 উপ-গোষ্ঠী" এবং এর জুড়ির জন্য একটি স্বতন্ত্র চরিত্র নির্ধারণ করুন (অযৌক্ত উপগোষ্ঠীগুলি যোগ্যতা অর্জন করে না) এবং সাবগ্রুপ এবং জোড় উভয় "পাথর" উপস্থাপনের জন্য সেই চরিত্রটি ব্যবহার করুন।
  2. কোন বিজোড় "পাথর" উপস্থাপন (অর্থাত, বেশী একটি বিশেষজ্ঞ মুছে ফেলা হবে যখন স্বাভাবিক বাজানো - misere না - নিম) একটি হাইফেন ব্যবহার করছে: -

বৈধ ভিজ্যুয়ালাইজেশন অর্জনের একাধিক উপায় থাকবে এবং সমস্ত বৈধ। আসুন কিছু পরীক্ষার ক্ষেত্রে কাজ করি:

পরীক্ষার কেস

ইনপুট: 1, 3, 5, 7

সম্ভাব্য আউটপুট 1:

A
BBA
CCCCD
CCCCBBD

আপনি অক্ষরগুলির মধ্যে ফাঁকা স্থানের পাশাপাশি সারিগুলির মধ্যে ফাঁকা লাইনগুলি অন্তর্ভুক্ত করতে পারেন:

সম্ভাব্য আউটপুট 2:

A

B B A

C C C C D

C C C C B B D

ইনপুট: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

অক্ষরের ক্রম এবং পছন্দ আপনার পছন্দ অনুযায়ী যা হতে পারে:

সম্ভাব্য আউটপুট 1:

G
E E
E E G
C C C C
C C C C F
B B B B D D
B B B B D D F
H H I - - - - -
A A A A A A A A I
A A A A A A A A H H

ইউনিকোড প্রতীকগুলিও ঠিক আছে:

সম্ভাব্য আউটপুট 2:

◎
◈  ◈
◈  ◈  ◎
△  △  △  △
△  △  △  △  ◉
◐  ◐  ◐  ◐  ◀  ◀
◐  ◐  ◐  ◐  ◀  ◀  ◉
▽  ▽  ◒  -  -  -  -  -
▥  ▥  ▥  ▥  ▥  ▥  ▥  ▥  ◒ 
▥  ▥  ▥  ▥  ▥  ▥  ▥  ▥  ▽  ▽  

ইনপুট: 7

নিয়মগুলি থেকে এটি অনুসরণ করে যে কোনও "একক গাদা" সম্পূর্ণ অপসারণ করতে হবে।

সম্ভাব্য আউটপুট 1:

-------

সম্ভাব্য আউটপুট 2:

- - - - - - -

ইনপুট: 5, 5

সম্ভাব্য আউটপুট:

A A A A B
A A A A B

অতিরিক্ত বিধি

  • এটি স্ট্যান্ডার্ড বিধি সহ কোড গল্ফ। সংক্ষিপ্ততম কোড জিতেছে।
  • ইনপুট নমনীয়, এবং তালিকা-ইশ ফর্মটি আপনার পক্ষে সুবিধাজনক যে কোনও ক্ষেত্রে নেওয়া যেতে পারে।
  • আউটপুটটিও নমনীয়, যেমন উপরের উদাহরণগুলি বর্ণনা করে। সর্বাধিক যুক্তিসঙ্গত প্রকরণের অনুমতি দেওয়া হবে। আপনি কিছু সম্পর্কে অনিশ্চিত কিনা তা জিজ্ঞাসা করুন।

1
প্রতিটি স্তূপে কয়টি পাথর থাকতে পারে তার সীমাবদ্ধতা রয়েছে বা দেখার জন্য কতগুলি স্বতন্ত্র অক্ষর প্রয়োজন? (চরম ক্ষেত্রে, উদাহরণস্বরূপ, মুদ্রণযোগ্য ASCII অক্ষরের সংখ্যার চেয়ে বেশি বা 255 স্বতন্ত্র চরিত্রের প্রয়োজন হলে কী হবে?)
ডোরকনব

@ ডুরকনব আপনি ধরে নিতে পারেন যে এটি হবে না। আপনি এমনকি ধরে নিতে পারেন বর্ণমালার বর্ণগুলি যে কোনও ইনপুটের জন্য যথেষ্ট হবে।
জোনা

@ জোনাঃ দ্বিতীয় পরীক্ষার ক্ষেত্রে এটি কী বৈধ আউটপুট হবে? ["H","EE","EEH","CCCC","CCCCI","DDDDFF","DDDDFFI","AAAAAAAA","AAAAAAAA-","----------"]
ngn

1
@ Οurous আমি মনে করি সহজ উত্তরটি হ্যাঁ। টেকনিক্যালি AAAABBBBআসলে অবৈধ, এবং ABBতা নয় - তবে এটি আউটপুট কম পঠনযোগ্য করে তোলে তাই আমি মনে করি কেবল একটি লাইনের মধ্যে হ্রাস হ্রাস করা একটি স্পষ্ট নিয়ম সবচেয়ে ভাল।
জোনা

1
@ জোনাথান অ্যালান হ্যাঁ, আমি যুক্তিটির উপর নির্ভর করছি যে সমস্ত 3 টি পদক্ষেপ একসাথে ঘটতে হবে। সুতরাং আপনি যদি 1 এবং 2 পদক্ষেপগুলি সম্পাদন করেন তবে 3 ধাপটি সম্পাদন করতে না পারেন, আপনাকে অবশ্যই আপনার সমাধানটি 1 এবং 2 পদক্ষেপের সাথে সামঞ্জস্য করতে হবে যা আমি বিভ্রান্তিকর দেখতে পাচ্ছি। আমি নীচে আপনার বিবরণ যোগ করেছি।
জোনা

উত্তর:


2

রুবি, 169 164 148 বাইট

->a{s=eval a*?^
c=?@
m={}
a.map{|x|z=x-(x^s);[$><<?-*z,x-=z,s=0]if z>0
n=1
eval'x&1>0?[$><<(m[n]||c.next!)*n,m[n]=!m[n]&&c*1]:0;n*=2;x/=2;'*x
puts}}

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

প্রথমত, আমরা আরম্ভ করি

  • নিম-সমষ্টি s=eval a*?^(যা এর চেয়ে কম a.reduce:^)
  • পরিবর্তনশীল c, যা প্রথম অব্যবহৃত অনন্য অক্ষর সংরক্ষণ করে
  • এমন একটি মানচিত্র mযা তাদের প্রতিনিধিত্ব করতে ব্যবহৃত অক্ষরের থেকে দু'দিকের দৈর্ঘ্যের মানচিত্রকে ম্যাপ করে

তারপরে, প্রতিটি স্তূপের উপর দিয়ে লুপিং করে আমরা নিম্নলিখিতটি চালাই:

z=x-(x^s);[$><<?-*z,x-=z,s=0]if z>0

প্রতি উইকিপিডিয়ার কৌশল , যদি Nim-সমষ্টি XOR যাও গাদা চেয়ে কম হয় গাদা , আমরা পাথর যে গাদা এমন এক জিনিস যার দৈর্ঘ্য হয়ে থেকে অপসারণ করা উচিত নয় Nim-সমষ্টি XOR যাও গাদা । ভেরিয়েবলের মধ্যে পার্থক্যটি সংরক্ষণ করে z, আমরা এই পার্থক্যটি ইতিবাচক কিনা তা পরীক্ষা করে দেখতে পারি, এবং যদি তাই হয় তবে 1.) অনেকগুলি ড্যাশ প্রিন্ট করুন, ২) এটি পাইল থেকে বিয়োগ করুন, এবং ৩) নিম-যোগফলটি এতে সেট করুন শূন্য আরও পাথর অপসারণ প্রতিরোধ।

n=1
eval'[...];n*=2;x/=2;'*x

এখন আমরা প্রতিটি বিট উপর "লুপ" এবং বারংবার বিভাজক দ্বারা তাদের মান ট্র্যাক রাখতে xদ্বারা 2এবং সঁচায়ক গুন nদ্বারা 2। লুপটি প্রকৃতপক্ষে মূল্যায়ন করা একটি স্ট্রিং xযা log2(x)এটি প্রয়োজনীয় সময়ের চেয়ে অনেক বেশি বড় , তবে কোনও ক্ষতি করা হয় না (অদক্ষতা বাদে)। প্রতিটি বিটের জন্য, বিটটি 1 ( x&1>0) হলে আমরা নিম্নলিখিতটি চালিত করি :

$><<(m[n]||c.next!)*n

একটি চরিত্রের nবার মুদ্রণ করুন । যদি আমরা ইতিমধ্যে এই বহু পাথরের একটি অযৌক্তিক দল মুদ্রিত করেছি, তবে সেই অক্ষরটি ব্যবহার করুন; অন্যথায়, পরবর্তী অব্যবহৃত অক্ষর ব্যবহার করুন ( cকারণে জায়গায় জায়গায় অগ্রসর হওয়া !)।

m[n]=!m[n]&&c*1

যদি m[n]অস্তিত্ব থাকে (যেমন আমরা কেবল একটি জুড়ি সম্পন্ন করেছি), তবে m[n]পুনরায় সেট করা হবে। অন্যথায়, আমরা সবেমাত্র একটি নতুন জুড়ি শুরু করেছি, সুতরাং m[n]আমরা যে চরিত্রটি ব্যবহার করেছি তা সেট করুন (এর *1একটি অনুলিপি তৈরি করার একটি ছোট উপায় c)।


4

পাইথন 2 , 150 196 206 বাইট

def f(p):
 c=48;s=[l*'.'for l in p];m=2**len(bin(l))
 while m:
  if sum(m*'.'in l for l in s)>1:
   for i,l in enumerate(s):s[i]=l.replace('.'*m,chr(c)*m,`s`.count(chr(c)*m)<2)
   c+=1
  else:m/=2
 return s

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


আমি মনে করি না এটি এর জন্য কাজ করে 4, 9, 10
নিল

@ নিল চমৎকার ক্যাচ, এখনই ঠিক করা উচিত
টিফিল্ড

1
দুঃখিত, আমি আবার এটি বোকা করতে পরিচালিত 14, 21, 35
নীল

এটি [1, 3, 4, 5] এর ক্ষেত্রেও ব্যর্থ হয়, যেখানে এটি পুরো দ্বিতীয় স্তূপটি সরিয়ে ফেলা উচিত।
ডোরকনব

@ ডুরকনব, এটি কি প্রয়োজনীয়? বিধি বলেThere will be multiple ways to achieve a valid visualization, and all are valid
টিফিল্ড

1

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

f=
(a,c=0,x=eval(a.join`^`),i=a.findIndex(e=>(e^x)<e),b=a.map(_=>``),g=e=>(d=e&-e)&&a.map((e,i)=>e&d&&(a[i]-=d,b[i]=(c++>>1).toString(36).repeat(d)+b[i]))&&g(e-d))=>g(eval(a.join`|`),b[i]='-'.repeat(a[i]-(a[i]^=x)))||b
<textarea oninput=o.textContent=/\d/.test(this.value)?f(this.value.match(/\d+/g)).join`\n`:``></textarea><pre id=o>

শুধুমাত্র 36 টি ভিন্ন অক্ষর পর্যন্ত ভিজ্যুয়ালাইজ করে। আমি এই কাজটি থেকে মুক্তি পেয়েছি 1, 3, 4, 5


সত্যিই সুন্দর. এটি রিয়েল টাইমে খেলতে মজাদার।
জোনা

1

পরিষ্কার , 454 বাইট

এখনও গল্ফিং

import StdEnv,Text,Data.List
$p=join"\n"[{#toChar c+'-'\\c<-e}\\e<-[take i(e++[0,0..])\\e<-r[[~c\\c<-reverse e,_<-[1..c]]\\e<-hd[q\\q<-foldr(\h t=[[a:b]\\a<-h,b<-t])[[]][[c\\c<-subsequences(takeWhile((>=)k)(iterate((*)2)1))|sum c<=k]\\k<-p]|sum[1\\a<-q&b<-p|sum a<>b]<2&&foldr(bitxor)0(flatten q)==0]]1&i<-p]]
r[]_=[]
r[h:t]n|all((<)0)h=[h:r t n]
#[m:_]=removeDup[e\\e<-h|e<0]
#(a,[x:b])=span(all((<>)m))t
=r([[if(e==m)n e\\e<-k]\\k<-[h:a]++[x]]++b)(n+1)

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

ফাংশনটি সংজ্ঞায়িত করে $ :: [Int] -> String, গাদা আকারগুলি গ্রহণ করে এবং একটি স্ট্রিং ফিরিয়ে দেয় যেখানে -পাথর সরিয়ে ফেলা হবে এবং গোষ্ঠীগুলি ASCII অক্ষর দ্বারা উপরে আরোহণ করে প্রতিনিধিত্ব করে -। পর্যাপ্ত গোষ্ঠীগুলির প্রয়োজন হলে অক্ষরগুলি শেষ পর্যন্ত আবার গুটিয়ে ফেলবে, এবং এর কারণেfoldr দ্বিতীয় টেস্ট-কেস চালানোর জন্য এটি গিগা বাইটের চেয়ে বেশি মেমরির প্রয়োজন।

দৈত্য বোঝার ইন্ডেন্টেড সংস্করণ:

$p=join"\n"[
    {#
        toChar c+'-'
        \\c<-j
    }
    \\j<-[
        take i(e++[0,0..])
        \\e<-r[
            [
                ~c
                \\c<-reverse e
                ,_<-[1..c]
            ]
            \\e<-hd[
                q
                \\q<-foldr(\h t=[
                    [a:b]
                    \\a<-h
                    ,b<-t
                ])[[]][
                    [
                        c
                        \\c<-subsequences(takeWhile((>=)k)(iterate((*)2)1))
                        |sum c<=k
                    ]
                    \\k<-p
                ]
                |sum[
                    1
                    \\a<-q
                    &b<-p
                    |sum a<>b
                ]<2&&foldr(bitxor)0(flatten q)==0
            ]
        ]1
        &i<-p
    ]
]

শুধু কৌতূহলী, ক্লিনটিকে হাস্কেলের মতো মনে হচ্ছে ... হাস্কেলের চেয়ে কী কী সুবিধা রয়েছে?
জোনা

1
@ জোনাঃ হ্যাঁ, এটি বেশ অনুরূপ। আমার মাথার শীর্ষে, এটি নিম্ন স্তরের ধরণের ম্যানিপুলেশন, ইনলাইন আইএল / এসেম্বলি এবং সি এর সাথে ইন্টারপ হ্যাশেল এর চেয়ে সহজ অর্জন করেছে। তবে, প্রকৃত ব্যবহারের জন্য, ক্লিনের অস্পষ্টতা এবং পরীক্ষামূলক / একাডেমিক প্রকৃতির কারণে, আমি হাস্কেলকে সুপারিশ করব (এতে গ্রন্থাগারগুলির ক্ষেত্রে আরও সমর্থন রয়েছে এবং রেফারেন্স তথ্যও রয়েছে)। আমি শুধু ক্লিন সব পছন্দ মত ঘটতে।
17urous
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.