বুলগেরিয়ান সলিটায়ার


9

বুলগেরিয়ান সলিটায়ার একক খেলোয়াড়ের খেলা যা মার্টিন গার্ডনার দ্বারা বৈজ্ঞানিক আমেরিকান ভাষায় তার গাণিতিক কলামে জনপ্রিয় হয়েছিল ।

আপনার কাছে Nঅভিন্ন কার্ড রয়েছে, পাইলসে বিভক্ত। আপনি প্রতিটি গাদা থেকে একটি কার্ড নেন এবং সরানো কার্ডগুলি দিয়ে একটি নতুন গাদা গঠন করেন। আপনি ইতিমধ্যে দেখেছেন এমন কোনও স্থানে না পৌঁছানো পর্যন্ত আপনি এই প্রক্রিয়াটি পুনরাবৃত্তি করুন এবং এভাবে চালিয়ে যাওয়া লুপটির পুনরাবৃত্তি করবে।

উদাহরণস্বরূপ, বলুন আপনার 8কার্ড রয়েছে, একটি গাদা 5এবং একটি গাদা মধ্যে বিভক্ত 3। আমরা সাজানো অনুক্রমে গাদা মাপ লিখুন: 5 3। গেমটির একটি প্রতিলিপি এখানে দেওয়া হয়েছে:

5 3
4 2 2
3 3 1 1 
4 2 2

আপনিই প্রথম দুই পাইলস প্রতিটি থেকে একটি কার্ড সরাতে, স্তূপ রেখে 4এবং 2আর একটি নতুন তৈরি গাদা 2, দান 4 2 2। পরবর্তী পদক্ষেপে, এই হ্রাস 3 1 1একটি নতুন স্তূপের সাথে অনুসরণ করা হয় 3। অবশেষে, শেষ পদক্ষেপটি আকারের স্তূপগুলি খালি করে 1এবং উত্পাদন করে 4 2 2যা ইতিমধ্যে প্রদর্শিত হয়েছে, তাই আমরা থামি।

নোট করুন যে গাদা আকারের যোগফল একই থাকে।

আপনার লক্ষ্য একটি প্রদত্ত প্রারম্ভিক কনফিগারেশন থেকে গেমটির এমন প্রতিলিপি মুদ্রণ করা। এটি কোড গল্ফ, তাই খুব কম বাইট জিতেছে।

ইনপুট

প্রাথমিক স্তূপ আকারের প্রতিনিধিত্ব করে অবতরণ ক্রমে ধনাত্মক সংখ্যার একটি তালিকা। STDIN বা ফাংশন ইনপুট এর মাধ্যমে ইনপুট নিন। আপনি চান তালিকার মতো কাঠামো ব্যবহার করতে পারেন।

আপনি Nইনপুট হিসাবে কার্ডের মোট সংখ্যা পাবেন না ।

আউটপুট

পাইথ আকারের ক্রম প্রিন্ট করুন বুলগেরিয়ান সলিটায়ারের খেলাটি চলে। নোট করুন যে মুদ্রণ আবশ্যক, ফিরে না। প্রতিটি পদক্ষেপের নিজস্ব লাইন হওয়া উচিত।

প্রতিটি রেখার অবতীর্ণ ক্রমের কোনও সংখ্যা নেই সহ ধনাত্মক সংখ্যার ক্রম হওয়া উচিত 0। আপনার বিভাজক থাকতে পারে এবং শুরু এবং শেষ টোকেন থাকতে পারে (উদাহরণস্বরূপ, [3, 3, 1, 1])। সংখ্যার একাধিক সংখ্যা থাকতে পারে, তাই এগুলি কোনওভাবে পৃথক করা উচিত।

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

পরীক্ষার মামলা

>> [1]
1
1

>> [2]
2
1 1
2

>> [1, 1, 1, 1, 1, 1, 1]
1 1 1 1 1 1 1
7
6 1
5 2
4 2 1
3 3 1
3 2 2
3 2 1 1
4 2 1

>> [5, 3]
5 3
4 2 2
3 3 1 1
4 2 2

>> [3, 2, 1]
3 2 1
3 2 1

>> [4, 4, 3, 2, 1]
4 4 3 2 1
5 3 3 2 1
5 4 2 2 1
5 4 3 1 1
5 4 3 2
4 4 3 2 1

উত্তর:


4

পাইথ, 40 25

QW!}QY~Y]Q=Q_S+fTmtdQ]lQQ

এটি আমার অজগর 2 উত্তরের একটি অনুবাদের খুব কাছাকাছি।

নমুনা রান:

ইনপুট:

[4,4,3,2,1]

আউটপুট:

[4, 4, 3, 2, 1]
[5, 3, 3, 2, 1]
[5, 4, 2, 2, 1]
[5, 4, 3, 1, 1]
[5, 4, 3, 2]
[4, 4, 3, 2, 1]

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

Q                          Q = eval(input()) # automatic
 W!}QY                     while not Q in Y:
      ~Y]Q                     Y += [Q]
               fTmtdQ                     filter(lambda T: T, map(lambda d: d - 1, Q))
            _S+      ]lQ           sorted(                                             + [len(Q)])[::-1]
          =Q_S+fTmtdQ]lQ       Q = sorted(filter(lambda T: T, map(lambda d: d - 1, Q)) + [len(Q)])[::-1]
                        Q      print(Q)
QW!}QY~Y]Q=Q_S+fTmtdQ]lQQ

1. আপনি প্রতিস্থাপন করতে পারেন v$input()$সঙ্গে Q। ২. যদি আপনি তালিকাটি হ্রাস ক্রমে সংরক্ষণ করেন তবে আপনার কোনও প্রয়োজন নেই N:W!}QYQ~Y]Q=Q_S+fTmtdQ]lQ;Q
ডেনিস

@ ডেনিস ধন্যবাদ, আমি কীভাবে এটি করতে পারি তা বুঝতে পারি না; আমি জানতাম এটি করার একটি উপায় আছে।
জাস্টিন

1
এখানে আমি কি পুরোপুরি স্বাধীনভাবে আছে: QW!}QY~Y]Q=Q_S+]lQfTmtdQQ। এটি হুবহু একই রকম, চরিত্রের জন্য চরিত্র, চলাফেরার দিক পর্যন্ত।
isaacg

3

সিজেম, 26 বাইট

q{~_:(_,+0-$W%]___&=}g{p}/

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

উদাহরণ রান

$ cjam <(echo 'q{~_:(_,+0-$W%]___&=}g{p}/') <<< '[5 3]'
[5 3]
[4 2 2]
[3 3 1 1]
[4 2 2]

এটাই কিছু সিজেম!
অপ্টিমাইজার 21

আসুন !, আমি জানি আপনি এটিকে পাইথের চেয়ে খাটো করে তুলতে পারেন!
অপ্টিমাইজার 21

যদি :pকাজ করা হয়, তবে আমি পারতাম ...
ডেনিস 21

4
আপনি কি আমার সাথে কি করতে চান! :p
অপ্টিমাইজার 21

3

রুবি, 98

f=->c{g={c=>1}
p *loop{c=(c.map(&:pred)<<c.size).sort.reverse-[0]
g[c]?(break g.keys<<c): g[c]=1}}

ব্যাখ্যা

  • ইনপুটটিকে ল্যাম্বডায় আর্গুমেন্ট হিসাবে নেওয়া হয়। এটি একটি আশা করে Array
  • পূর্ববর্তী গেমের রাজ্যের মধ্যে সংরক্ষণ করা হয় Hash g
  • একটি নতুন গেমের অবস্থা তৈরি করতে, Array#mapপ্রতিটি উপাদানকে 1 দ্বারা হ্রাস করতে, Arrayউপাদান হিসাবে দৈর্ঘ্য যুক্ত করুন , ক্রমকে ক্রম অনুসারে সাজান এবং উপাদানটি মুছুন 0
  • কোনও গেমের রাজ্য আগে দেখা গেছে কিনা তা পরীক্ষা করতে, gনতুন গেম স্টেটের জন্য কী আছে কিনা তা পরীক্ষা করা যথেষ্ট।

+1 সত্যিই ঝরঝরে রুবি এখানে গল্ফ করছে! তবে sort_byবিষয়টি অবশ্যই চতুর sort.reverseহলেও আসলে এটি একটি চরিত্রের চেয়ে ছোট ^^
ড্যানিয়েরো

ওহ, এটি খুব খারাপ। ধন্যবাদ।
ব্রিটিশিয়া

2

সিজেম, 35 34 33 বাইট

(জঘন্য, এই বিদ্যুতটি কেটে গেছে যে আমি সিজেমে পোস্ট করা প্রথম নই)

l~{_p:(_,+{},$W%_`_S\#0<\S+:S;}g`

ইনপুট:

[1 1 1 1 1 1 1]

আউটপুট:

[1 1 1 1 1 1 1]
[7]
[6 1]
[5 2]
[4 2 1]
[3 3 1]
[3 2 2]
[3 2 1 1]
[4 2 1]

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


1

পাইথন 2 - 103

p=input()
m=[]
print p
while p not in m:m+=[p];p=sorted([x-1 for x in p if x>1]+[len(p)])[::-1];print p

কুইঞ্চুনস'র উত্তরের মতো, তবে সংযোজনগুলির সাথে সংযোজনগুলি প্রতিস্থাপন করে এবং শেষ দুটি লাইন সরিয়ে দেয়।

নমুনা আউটপুট:

[4, 4, 3, 2, 1]
[5, 3, 3, 2, 1]
[5, 4, 2, 2, 1]
[5, 4, 3, 1, 1]
[5, 4, 3, 2]
[4, 4, 3, 2, 1]

উম্ম, অনুরূপ? এটি অভিন্ন; আপনি কেবল গল্ফিং পদক্ষেপ গ্রহণ করেছিলেন যা সম্পূর্ণ সুস্পষ্ট ছিল। আমি যখন আমার কাছে ফিরে এলাম, আমি এটি গল্ফ করেছিলাম এবং আবিষ্কার করেছিলাম যে এটি এখন আমার একটি সদৃশ জবাব (বা এর বিপরীতে, তবে আপনি এটি দেখতে চান)
জাস্টিন

আমি আমার পোস্ট করার পরে আপনার উত্তরটি আবিষ্কার করেছি। আমি একে অপরের নকল বিবেচনা করে ঠিক আছে।
নাথান মেরিল



1

সিজেম, 40 36 34 বাইট

]l~{a+_W=_p:(_,+$W%{},1$1$a#0<}gp;

এটি এখানে পরীক্ষা করুন। [5 3]STDIN ক্ষেত্রের মতো সিজেএম-স্টাইলের অ্যারে হিসাবে ইনপুট প্রবেশ করান । আউটপুট ফর্ম্যাট অনুরূপ, তাই বর্গাকার বন্ধনী এবং ডিলিমিটার হিসাবে স্পেস।

এমনকি যদি আমি এটি আরও নীচে গল্ফ করি (তবে এটি অবশ্যই সম্ভব) তবে পাইথকে এটি দিয়ে পরাজিত করার কোনও উপায় নেই। সম্ভবত এটি জে। শিখার সময় এসেছে পরে।


জে যে সাহায্য করবে তা নিশ্চিত নয়, আমি আমার এপিএল 38 এর নিচে পেতে পারি না
টোনিটাইট

1

জাভাস্ক্রিপ্ট (E6) 113

এখন পর্যন্ত সবচেয়ে খারাপ এন্ট্রি :(

F=l=>{
  for(k=[];console.log(l),!k[l];)
    k[l]=l=[...l.map(n=>(p+=n>1,n-1),p=1),l.length].sort((a,b)=>b-a).slice(0,p)
}

টেস্ট ফায়ারফক্স / Firebug কনসোলে

F([4,4,3,2,1])

আউটপুট

[4, 4, 3, 2, 1]
[5, 3, 3, 2, 1]
[5, 4, 2, 2, 1]
[5, 4, 3, 1, 1]
[5, 4, 3, 2]
[4, 4, 3, 2, 1]

1

পাইথন 2, 148 130 101

l=input()
s=[]
print l
while l not in s:s+=l,;l=sorted([i-1for i in l if 1<i]+[len(l)])[::-1];print l

এটি কেবল আগের সমস্ত পুনরাবৃত্তির স্মরণে রাখে এবং সেই তালিকায় নতুনটি কিনা তা যাচাই করে। তারপরে, এটি এটি প্রিন্ট করে।

নমুনা রান:

ইনপুট:

[4,4,3,2,1]

আউটপুট:

[4, 4, 3, 2, 1]
[5, 3, 3, 2, 1]
[5, 4, 2, 2, 1]
[5, 4, 3, 1, 1]
[5, 4, 3, 2]
[4, 4, 3, 2, 1]

সম্পাদনা করুন: আমি চশমাগুলিকে গল্ফে আবার পড়ি, সাথে সাথে প্রচুর গল্ফ প্রয়োগ করেছি।


আপনাকে কেবল তালিকা হিসাবে তালিকা মুদ্রণ করার অনুমতি দেওয়া হয়েছে।
xnor

@ এক্সনর ওহ ধন্যবাদ, এটি পুরোপুরি মিস হয়েছে।
জাস্টিন

এটি [5,3]
নাথন মেরিল

এটি এর জন্য ভুল আউটপুট দেয় [4,2,2]। যদিও একটি সহজ ফিক্স আছে।
xnor

0

পাইথন 3: 89 অক্ষর

g=lambda l,s=[]:print(l)!=l in s or g(sorted([x-1for x in l if~-x]+[len(l)])[::-1],s+[l])

পাইথন সলিউশনগুলির মতো ইতিমধ্যে পোস্ট করা হয়েছে তবে লুপগুলির পরিবর্তে পুনরাবৃত্ত ফাংশন কল রয়েছে। তালিকাটি sইতিমধ্যে দেখা বিভাজনগুলি সঞ্চয় করে এবং পুনরাবৃত্তির ক্ষেত্রে সংক্ষিপ্তসার্কিটগুলি আউট করে।

ফাংশনটি print()(এটি পাইথন 3) প্রতিটি লুপে কেবল কোনওভাবে কল করা দরকার। কৌতূহলোদ্দীপক বিষয়টি হ'ল lambdaএকমাত্র একটি একক অভিব্যক্তিকে মঞ্জুরি দেয় তাই আমরা এটি করতে পারি না print(l);...। এছাড়াও, এটি আউটপুট None, যা কাজ করা কঠিন। আমি print(l)এক বৈষম্যের একপাশে রাখছি ; ==কোন কারণে কাজ করে না আমি বুঝতে পারি না।

একটি তালিকায় এটি স্টিক করার বিকল্প পদ্ধতি সমানভাবে অনেকগুলি অক্ষর ব্যবহার করে।

g=lambda l,s=[]:l in s+[print(l)]or g(sorted([x-1for x in l if~-x]+[len(l)])[::-1],s+[l])

এর চেয়ে print(*l)আউটপুটগুলি ফর্ম্যাট করে 4 2 2বরং ব্যবহার করে [4,2,2]

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