মাইনসুইপার ওয়ার্ক এ


18

উইন্ডোজ এক্সপি দিয়ে যে পুরানো মাইনসুইপার গেমটি পাঠানো হয়েছিল তা সবাই জানেন। এটি একটি সাধারণ গ্রিড যার মধ্যে একটি 9x9 ম্যাট্রিক্স রয়েছে যা একটি সংখ্যা রয়েছে (এটি নির্দেশ করে যে এটি কতটি খনি খনির সংলগ্ন) বা একটি খনি।

এখানে চিত্র বর্ণনা লিখুন

চ্যালেঞ্জটি হ'ল আপনি নিজে পিআরএনজি বাস্তবায়ন করেন তবে ব্রাউন পয়েন্ট সহ যে কোনও পূর্ণসংখ্যার বীজ (আপনার মেশিন / ভাষার বৃহত্তম ইন্টি যাই হোক না কেন) দেওয়া 10 টি বোমা দিয়ে একটি র্যান্ডম 9x9 গ্রিড উত্পন্ন করা হবে

উদাহরণস্বরূপ আউটপুট: খনিতে খনিতে 0-8 বা * সংখ্যা থাকে cells

*101*1000
110111000
123210000
1***10000
123210011
00000002*
00000114*
000112*3*
0001*2121

বাইটস এর সবচেয়ে সংক্ষিপ্ত কোড .. মান নিয়ম, ইত্যাদি।


3
সংখ্যাগুলি কী বোঝায় তা আপনার নির্দেশ করা উচিত :)
নাথান মেরিল

4
মাইক্রোসফ্ট মাইনসুইপার এক্সপি এবং মাইনসুইপার-এর মতো গেমগুলি কমপক্ষে to০-এর দশকের পুরানো older
অ্যাডমবর্কবার্ক

11
এছাড়াও, কাজ করার সময় আমার কাছে মিনিসুইপার খেলার সময় নেই - আমি পিপিসিজিতে খুব ব্যস্ত। ;-)
অ্যাডমবর্কবার্ক

1
ঠিক কীভাবে পিআরএনজি হিসাবে গণনা করা হয়? এটি উত্পাদন করতে সক্ষম হতে হবে কত অন্যান্য কনফিগারেশন? আমাদের ভাষার যদি এমন একটি পিআরএনজি থাকে যা স্বয়ংক্রিয়ভাবে একটি "এলোমেলো" বীজের সাথে শুরু হয় তবে আমরা কি বীজটি ব্যবহার করতে পারি না এবং প্রতিবার কেবল একটি আলাদা কনফিগারেশন তৈরি করতে পারি ?
লুইস মেন্ডো 21

1
@ টিমিডি বাট এক্সপি এর সংস্করণটি প্রথম সংস্করণ যা 9x9 গ্রিড ছিল। পুরানো যেকোন কিছুতে বিগিনার জন্য একটি 8x8 গ্রিড ব্যবহার করা হয়। #outnerded;)
mbomb007

উত্তর:


3

ডায়ালগ এপিএল, 40 বাইট

⎕rl←1⋄(1,¨a)⍕¨{⍉3+/0,⍵,0}⍣2⊢a←9 9⍴9≥?⍨81

(ধরে নেওয়া ⎕io←0)

1মধ্যে ⎕rl←1বীজ

ডান থেকে বাম:

?⍨81হিসাবে একই 81?81- একটি এলোমেলোভাবে অনুবর্তন

9≥ এলোমেলো অবস্থানগুলিতে দশ 1 টি সমেত বিটমাস্কের ফলাফল, বাকী 0 টি

a←9 9⍴ 9-বাই -9 বর্গাকারে পুনরায় আকার দিন এবং এটিকে "এ" বলুন

{ }⍣2 নিম্নলিখিত দুটি বার করুন:

⍉3+/0,⍵,0 3 টি কলামের স্লাইডিং উইন্ডো যোগফল (0s এর বাইরে ধরুন), তারপরে ট্রান্সপোজ করুন

(1,¨a)⍕¨ফর্ম্যাট (স্ট্রিং রূপান্তর) প্রতিটি। ফলাফলের অক্ষর এবং ভগ্নাংশের মোট সংখ্যা নির্দিষ্ট করার জন্য বাম যুক্তি । যদি সেই অনুমান অনুসারে ফর্ম্যাট না করা যায় তবে এটি একটি ফলাফল দেয় *- এই সমস্যাটির জন্য একটি ভাগ্যবান কাকতালীয় ঘটনা। aখনিগুলি যেখানে 1 হবে - একটি সম্পূর্ণ এবং ভগ্নাংশের অংশকে একটি চরে ফিট করার চেষ্টা করা অসম্ভব, সুতরাং সেগুলি *এস হিসাবে প্রদর্শিত হবে ।


আপনি কি ⎕io←0অনুমানটি ব্যাখ্যা করতে পারেন ? আমি ডায়ালগ এপিএলের সাথে পরিচিত নই ...
হারুন

1
ডায়ালগের অ্যারে সূচকগুলি ডিফল্ট হিসাবে 1-ভিত্তিক। সেট ⎕io( " ইনডেক্স মূল 0") তাদের 0 ভিত্তিক করে তোলে এবং সেই অনুযায়ী যেমন কিছু প্রিমিটিভের পরিবর্তন, ⍳3হতে হবে 0 1 2, না 1 2 3। এটি প্রোগ্রামের মাধ্যমে ( ⎕io←0) বা জিইউআইয়ের পছন্দগুলি থেকে করা যেতে পারে । এই পছন্দটি হ'ল একটি 50-বছরের পুরানো ভুল যা এখনও আজকের ক্ষুদ্র এপিএল সম্প্রদায়কে বিভক্ত করে।
ngn

5

ম্যাটল্যাব, 94 93 বাইট

rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)

উদাহরণ রান (কোডের পরে প্রথম লাইনটি ব্যবহারকারী দ্বারা টাইপ করা ইনপুট):

>> rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
99
*10001*2*
220001232
*201111*1
*312*1111
12*211000
011211000
0001*1000
000112110
000001*10

ব্যাখ্যা

rng(input(''));

একটি পূর্ণসংখ্যা নেয় এবং এটি বীজ হিসাবে ব্যবহার করে। (এটি আধুনিক ম্যাটল্যাব সংস্করণগুলিতে কাজ করে Old পুরানো সংস্করণগুলির জন্য আলাদা সিনট্যাক্সের প্রয়োজন হতে পারে))

x(9,9)=~1;

ল্যাটিক্যাল 0, বা false(যৌক্তিকভাবে উপেক্ষা করে প্রাপ্ত 1) (9,9)ম্যাট্রিক্সের প্রবেশের জন্য বরাদ্দ করে x। বাকি এন্ট্রিগুলি স্বয়ংক্রিয়ভাবে যৌক্তিকরূপে সূচিত 0হয়।

x(randperm(81,10))=1; 

নির্ধারণ 1(autoomatically যৌক্তিক কাস্ট 1, অথবা trueকরার জন্য) 10এর 81এন্ট্রি x, প্রতিস্থাপন ছাড়া এলোমেলোভাবে চয়ন করা হয়েছে। এই এন্ট্রিগুলিতে বোমা রয়েছে।

conv2(+x,ones(3),'s')

এর সংক্ষেপণ conv2(+x,ones(3),'same')। এটা তোলে ম্যাট্রিক্স convolves x(যা কাস্ট করা প্রয়োজন doubleব্যবহার করে +একটি 3 × 3 আশপাশ ধারণকারী সহ) 1। এটি প্রতিটি এন্ট্রি সংলগ্ন কত বোমা গণনা করা হয়। বোমা ধারণকারী এন্ট্রিগুলির জন্য এটিতে বোমা অন্তর্ভুক্ত রয়েছে তবে সেটির মান পরে ওভাররাইট করা হবে।

y=[...+48 ''];

সংখ্যা থেকে ASCII কোডে রূপান্তর করতে, মানটিতে 48 যোগ করে। খালি ম্যাট্রিক্সের সাথে লড়াই করা এই ASCII কোডগুলিকে অক্ষরে অক্ষরে ফেলে।

y(x)=42;

'*'বোমাগুলির অবস্থানগুলিতে 42 (এএসসিআইআই কোড ) বরাদ্দ করে । এই অবস্থানগুলি দ্বারা প্রদত্ত x, যা এখানে লজিকাল সূচক হিসাবে ব্যবহৃত হয়।

disp(y)

ফলাফল প্রদর্শন করে।


4

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

কাস্টম পিআরএনজি (204 বাইট)

s=>(p=-1,S=n=>(x=p%9-(n+=p)%9)*x-64&&b[n]=='*',T=n=>S(n)+S(-n),b=[...'*00000000'.repeat(9)]).sort(_=>(s=(22695477*s+1)>>>0)&1||-1).map(c=>(p++,c=='0'?T(1)+T(8)+T(9)+T(10):c)).join``.match(/.{9}/g).join`
`

এই কোডটি মাল্টিপ্লায়ার 22695477এবং ইনক্রিমেন্ট সহ একটি লিনিয়ার কংগ্রেসনাল জেনারেটর ব্যবহার করছে 1(এটি বোরল্যান্ড সি / সি ++ বাস্তবায়ন)।

ওয়ার্মআপ পর্বে PRNG এর দুর্বল দক্ষতার কারণে, আমাকে সারি প্রতি একটি বোমা রাখতে হয়েছিল (শুরুতে 10 বা আনসার্ফুলযুক্ত অ্যারের শেষে 10 এর পরিবর্তে) bomb সুতরাং, কেবল 9 টি বোমা রয়েছে। আমি পরে এটি ঠিক করার চেষ্টা করতে পারেন।

এছাড়াও, 'বোর্ডের বাইরে' চেকটি প্রক্রিয়াকরণের একটি সহজ / খাটো উপায় থাকতে হবে (x=p%9-(n+=p)%9)*x-64তবে আমি এখনই এটি বুঝতে পারি না।

ম্যাথ.র্যান্ডম () (198 বাইট) ব্যবহার করা হচ্ছে

s=>(p=-1,S=n=>(x=p%9-(n+=p)%9)*x-64&&b[n]=='*',T=n=>S(n)+S(-n),b=[...'**********'+'0'.repeat(71)]).sort(_=>Math.random()-.5).map(c=>(p++,c=='0'?T(1)+T(8)+T(9)+T(10):c)).join``.match(/.{9}/g).join`
`

অনুরূপ হিসাবে এটিতে 10 টি খনি রয়েছে।

ডেমো

let f =
_=>(p=-1,S=n=>(x=p%9-(n+=p)%9)*x-64&&b[n]=='*',T=n=>S(n)+S(-n),b=[...'**********'+'0'.repeat(71)]).sort(_=>Math.random()-.5).map(c=>(p++,c=='0'?T(1)+T(8)+T(9)+T(10):c)).join``.match(/.{9}/g).join`
`
console.log(f())


'**********'+'0'সমান '**********'+0; যা 198-বাইট-সংস্করণে দুটি বাইট সংরক্ষণ করে।
পল স্মিটজ

@ পৈলশ্মিটজ - দুর্ভাগ্যক্রমে '0'এটি পুনরাবৃত্তি হওয়ার কথা এবং এটি কার্যকর 0.repeat()হবে না বলে মনে করা হচ্ছে।
আর্নল্ড

ওফ, আমি যদিও এটি কার্যকর করা হবে ...('**********'+0).repeat(71)। দুঃখিত।
পল স্মিটজ

3

পাইথন 2, 269 266 264 বাইট

from random import*
seed(input())
z=1,0,-1
n=range(9)
m=[[0]*9 for _ in n]
for x,y in sample([[x,y]for x in n for y in n],10):
 m[x][y]=-9
 for a in z:
  for b in z:
    if 0<=x+a<9>0<=y+b<9:m[x+a][y+b]+=1 # it gets displayed as 4 spaces, but the beginning of this line is a single tab
print("\n".join("".join([`c`,'*'][c<0]for c in l)for l in m))

আইডোন.কম এ চেষ্টা করুন

হারুনকে ধন্যবাদ 2 বাইট সংরক্ষণ করা হয়েছে।

সম্ভবত এখনও গল্ফযোগ্য।

ব্যাখ্যা

randomseedPRNG বীজ ব্যবহার করতে এবং sampleএলোমেলোভাবে দশ বোমা অবস্থান নির্বাচন করার জন্য আমদানি করা হয় । mবোর্ড সংরক্ষণকারী একটি 9 x 9 ম্যাট্রিক্স। বোমাগুলির প্রতিটি অবস্থানের জন্য, সম্পর্কিত এন্ট্রি mসেট হয়ে যায় -9এবং সমস্ত প্রতিবেশী প্রবেশগুলি বর্ধিত হয়। এই পদ্ধতিতে mবোমাবিহীন কোষগুলির জন্য সংলগ্ন বোমার সংখ্যা এবং বোমা কোষগুলির জন্য একটি নেতিবাচক সংখ্যা রয়েছে containing চূড়ান্ত printকপি করে প্রিন্ট সব লাইনের মাধ্যমে iterating দ্বারা পুরো বোর্ড lমধ্যে mএবং সমস্ত কোষ cমধ্যে l


'র্যান্ডম' ঠিক কী জন্য ব্যবহৃত হয়, ঠিক?
ক্লিস্টিক

@ কিওয়ার্প-ডের্প সম্ভবত এলোমেলোভাবে ব্যবহার করা এলোমেলো নম্বর জেনারেটরের বীজ বজায় রাখতে পারেনsample()
প্যাট্রিক রবার্টস

for a in z:ব্লকের ভিতরে ট্যাব ইনডেন্টগুলি মিশ্রিত করে 2 বাইট সংরক্ষণ করুন (কেবল অজগর ২.x)
অ্যারন

3

আর, 187 বাইট

set.seed();x=1:121;y=x[!(x%%11 %in% 0:1|(x-1)%/%11 %in% c(0,10))];z=sample(y,10);x=x*0;for(t in z){p=t+c(-10:-12,-1,1,10:12);x[p]=x[p]+1};x[z]=9;m=data.frame(matrix(x[y],9));m[m==9]='*';m

আইডিয়নে চেষ্টা করে দেখুন

ব্যাখ্যা:

set.seed() একটি সিএসটি বীজ নিন।

x 11 * 11 ম্যাট্রিক্সের সূচক

y 11 * 11 ম্যাট্রিক্সে 9 * 9 ম্যাট্রিক্সের সূচক

z বোমা সূচক হয়

x=x*0 ম্যাট্রিক্স মানটি আরম্ভ করুন

লুপটি সংলগ্ন বোমার ক্ষেত্রে 1 টি x যুক্ত করে।


1
আমি মনে করি আপনাকে যুক্তিটি set.seed () ইনপুট হিসাবে নিতে হবে।
বিএলটি

2

জাভাস্ক্রিপ্ট ES6, 244 বাইট

f=(a=[...Array(11)].map(_=>Array(11).fill(0)),n=10,r=_=>Math.random()*9|0,x=r(),y=r())=>a[x+1][y+1]>8||[0,1,2].map(i=>[0,1,2].map(j=>a[x+i][y+j]++),a[x+1][y+1]=9)&&--n?f(a,n):a.slice(1,-1).map(a=>a.slice(1,-1).map(n=>n<9?n:`*`).join``).join`
`
;o.textContent=f()
<pre id=o>


আপনার কোডটি কোন অংশে রয়েছে তা আপনি বিশদভাবে জানাতে চাইতে পারেন।
NoOneIsEre

@ ননওআইনি এখানে প্রথম 244 বাইট, আশা করি ;-) প্রথম লাইনটি 242 বাইট দীর্ঘ হওয়া উচিত, তারপরে নতুন লাইন এবং `চরিত্রটি থাকবে।
নীল


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