বিজয়ী সলিটায়ার মনকালা বোর্ডস


10

মানকালা হ'ল বোর্ড গেমসের এমন একটি পরিবারের নাম যা সাধারণত খেলোয়াড়রা হেরফের করে জপমালা ভরা সিরিজ কাপে জড়িত। এই চ্যালেঞ্জটি গেমটির সলিটায়ার বৈকল্পিকের জন্য একটি নির্দিষ্ট নিয়ম সেট ব্যবহার করবে।

বোর্ডটির এক প্রান্তে একটি "ঝুড়ি" থাকে, তার পরে অসীম সংখ্যক কাপ হয়, যার সূচনা হয় ১ থেকে শুরু করে the কাপগুলির মধ্যে কয়েকটিতে কয়েকটি পুঁতি থাকবে। যদি কাপটিতে nহুবহু nপুঁতি থাকে তবে আপনি এটি থেকে পুঁতিটি "বপন" করতে পারেন। বপনের অর্থ nকাপ থেকে সমস্ত পুঁতি নিয়ে যাওয়া, তারপরে প্রতিটি কাপে একবারে একটি করে ঝুড়ির দিকে জমা করুন। শেষ পুঁতি ঝুড়িতে যাবে। বোর্ডের সমস্ত জপমালা ঝুড়িতে থাকলে খেলোয়াড়টি জয়ী হয়।

স্পষ্টতই, এমন অনেকগুলি বোর্ড রয়েছে যা বিজয়ী নয়, যেমন দ্বিতীয় কাপে হ'ল এক জপমালা। কোনও আইনী নাটক নেই কারণ 0 টি পুঁতিযুক্ত সমস্ত কাপ বপন করা যায় না এবং দ্বিতীয় কাপে বপন করার মতো পর্যাপ্ত পুঁতি নেই। এটি অবশ্যই মজাদার নয়, সুতরাং আপনার কাজটি বিজয়ী বোর্ডগুলি তৈরি করা হবে।

কার্য

উপরে বর্ণিত একটি বিজয়ী বোর্ড তৈরির জন্য প্রতিটি কাপে রাখা উচিত এমন পুঁতির সংখ্যা প্রতিনিধিত্ব করে এমন একাধিক পুঁতির আউটপুটকে একটি সংখ্যক পুঁতির আউটপুট উপস্থাপন করে এমন একটি ধনাত্মক পূর্ণসংখ্যা দেওয়া হয়েছে। এই তালিকায় কোনও পিছনে জিরো থাকা উচিত নয়।

যে কোনও প্রদত্ত পুঁতির জন্য, সর্বদা ঠিক একটি বিজয়যোগ্য বোর্ড কনফিগারেশন থাকে।

প্রদর্শন

এভাবেই winnable বোর্ডের জন্য এবং 4. ইনপুট winnable বোর্ড খেলতে একটি বিক্ষোভ [0, 1, 3]। আমরা একমাত্র উপলভ্য পদক্ষেপ দিয়ে শুরু করি, তৃতীয় কাপ থেকে জপমালা বপন করি [1, 2, 0]। এখন আমরা আসলে একটা চয়েস থাকে, কিন্তু শুধুমাত্র সঠিক এক প্রথম কাপ বপন করা হয়, পেয়ে: [0, 2, 0]। তারপরে আমরা দ্বিতীয় কাপ উত্পাদনকারী [1, 0, 0]বপন করি এবং অবশেষে সমস্ত খালি কাপ পেতে আমরা আবার প্রথম কাপ বপন করি।

পরীক্ষার কেস:

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

পরীক্ষার কেস উত্পন্ন করার জন্য একটি প্রোগ্রাম নিয়ে আসার জন্য পিটারটেলরকে অনেক ধন্যবাদ !


উত্তর:


5

সিজেএম (21 বাইট)

M{_0+0#_Wa*\)+.+}ri*`

অনলাইন ডেমো

ব্যাখ্যা

আমি এই কাগজে উল্লিখিত "আনপ্লেয়িং" কৌশলটি স্বাধীনভাবে উদ্ভব করেছি । আমরা আনয়ন দ্বারা প্রমাণ করি যে প্রদত্ত সংখ্যক পুঁতির জন্য ঠিক একটি বিজয়ী বোর্ড রয়েছে।

বেস কেস: 0 জপমালা সহ, একমাত্র বিজয়ী বোর্ডটি খালি।

প্ররোচিত পদক্ষেপ: আমরা যদি কাপ থেকে বপন করি kতবে পরবর্তী পদক্ষেপের কাপটি kখালি হবে এবং প্রতিটি কাপের কাছাকাছি ঘুড়িতে কমপক্ষে একটি পুঁতি থাকবে। অতএব আমরা nজিন্সের সাহায্যে বিজয়ী বোর্ডের জপমালা সহ অনন্য বিজয়ী বোর্ডটি সন্ধান করতে পারি n-1সবচেয়ে কম নম্বরযুক্ত খালি কাপটি, ঝুড়ি থেকে একটি পুতি এবং সেই খালি কাপের নীচে প্রতিটি কাপ থেকে একটি করে, এবং সেগুলি সমস্ত খালি কাপে রেখে।

ব্যবচ্ছেদ

M           e# Start with an empty board
{           e# Loop
  _0+0#     e#   Find position of first 0 (appending to ensure that there is one)
  _Wa*      e#   Make array of that many [-1]s
  \)+       e#   Append the index plus 1 (since board is 1-indexed)
  .+        e#   Pointwise addition
}
ri*         e# Read integer from stdin and execute loop that many times
`           e# Format for display

9

পাইথন, 42 41 বাইট

m=lambda n,i=2:n*[1]and[n%i]+m(n-n%i,i+1)

4

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

f=(n,d=2)=>n?[n%d,...f(n-n%d,d+1)]:[]

@ Orlp এর পাইথন উত্তরের পোর্ট। ব্যাখ্যা: iতম এবং উচ্চতর কাপে মোট পুঁতির সংখ্যা বিবেচনা করুন । এই কাপগুলির মধ্যে একটি থেকে প্রতিটি নাটক iমোট থেকে পুঁতি সরিয়ে ফেলবে । (উদাহরণস্বরূপ, যদি i3 হয়, এবং আপনি পঞ্চম কাপ থেকে খেলেন, আপনি সেই কাপে পুঁতির সংখ্যা পাঁচ দ্বারা হ্রাস করেছেন, তবে আপনি চতুর্থ এবং তৃতীয় কাপ উভয়ের সাথে একটি যোগ করেন)) সুতরাং মোট অবশ্যই একাধিক হতে হবে এর i। এখন i-1থ কাপে iবা আরও জপমালা থাকতে পারে না , সুতরাং এর একাধিকটি রেখে যাওয়ার জন্য iঅবশ্যই জপমালা মডুলোর বাকী অংশটি থাকতে হবে i

পূর্ববর্তী ব্যাখ্যা (@ xnor এর লিঙ্ক থেকে): নিষ্পাপ পদ্ধতির হ'ল "বিপরীত প্লেয়িং" কৌশল। এটি এমন একটি পর্যবেক্ষণ ব্যবহার করে যে কোনও নাটক তৈরি করা এক কাপ খালি করে, সুতরাং বিপরীত প্লে করা প্রতিটি কাপ থেকে একটি পুঁতি সংগ্রহ করে এবং প্রথম খালি কাপে রাখে, যেমন (63 বাইট):

f=n=>n?[...a=f(n-1),0].some((m,i)=>(m?a[i]--:a[i]=i+1)>m)&&a:[]

এখন, প্রথম iকাপ বিবেচনা করুন । যদি তাদের মধ্যে একটি শূন্য থাকে, বিপরীত বাজানো 1those কাপগুলিতে মোট পুঁতির সংখ্যা যুক্ত করবে, তবে তাদের কোনওটিই শূন্য নয়, ক্ষেত্রে বিপরীত খেলানো iমোট থেকে বিয়োগ করবে , তবে এটি 1মডুলো যুক্ত করার সমতুল্য i+1nবিপরীত খেলার পরে প্রথম iকাপগুলিতে পুঁতির যোগফলটি nমডুলোর সমতুল্য হবে i+1, বা অন্য কোনও উপায়ে রাখুন, iতম কাপে জপমালা সংখ্যা nপূর্ববর্তী কাপগুলিতে, মোড়কের যোগফল বিয়োগের সমতুল্য হবে i+1। এখন iকাপটি খেলতে প্লে করার জন্য জপমালা সংখ্যাটি অতিক্রম করতে পারে না i, সুতরাং বাস্তবে এটি জপমালা মডুলোর বাকী সংখ্যার সমান হবেi+1। (মনে রাখবেন যে d=i+1এটি যেমন কম বাইট ব্যবহার করে তেমন আমি ব্যবহার করি ))


আপনি @ orlp এর সমাধান ব্যবহার করে সংস্করণটি কার্যবিধির করতে ভুলে গিয়েছেন, পুনরাবৃত্তিটি কাজ করা থেকে বিরত করছেন। এছাড়াও সেই সমাধানের বিষয়ে, +ES6-এ কোনও জিনিস নয় কি অ্যারে কনটেক্সটেশন?
মূল্য কালি

@ কেভিনলাউ উফ, এবং এটিকে বাইট গণনায় অন্তর্ভুক্ত করার সমস্যায় যাওয়ার পরে! তবে না, + স্ট্রিং সংমিশ্রণ, যদি না উভয় পরামিতি সংখ্যা বা বুলিয়ান হয়, তবে এটির ক্ষেত্রে এটি সংযোজন। ভাগ্যক্রমে অ্যারে বোঝাপড়াগুলি স্বেচ্ছাসেবী সংক্ষেপণকে সহজ করে তোলে।
নীল

2

রুবি, 36 বাইট

@ Orlp এর উত্তরের একটি বন্দর কারণ আমার আরও ভাল কিছু ভাবার পক্ষে এটি অনেক বেশি বুদ্ধিমান।

m=->n,i=2{n>0?[n%i]+m[n-n%i,i+1]:[]}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.