পিএনজেড (অনুমান অনুসারে 3 অনন্য অঙ্ক)


15

অনেক আগে একটি প্রোগ্রামিং বইয়ের চ্যালেঞ্জ থেকে, পিএনজেড এমন একটি গেম যেখানে ব্যবহারকারীর অবশ্যই তিনটি অনন্য সংখ্যাকে সঠিক ক্রমে অনুমান করতে হবে।

বিধি :

  1. কোন পুনরাবৃত্তি সংখ্যা সহ একটি এলোমেলো 3 ডিজিট নম্বর উত্পন্ন হয়। (ব্যবহারকারী এটি অনুমান করার চেষ্টা করছেন)
  2. ব্যবহারকারীর 3 টি অঙ্কের একটি অনুমান স্থাপন করে, যা প্রোগ্রামের দ্বারা মূল্যায়ন করতে হবে।
  3. সঠিক জায়গায় প্রতি সঠিক অঙ্কের জন্য একটি "পি" আউটপুট দিন।
  4. একটি ভুল জায়গায় প্রতি সঠিক সংখ্যার জন্য একটি "এন" আউটপুট দিন।
  5. কোনও অঙ্ক সঠিক না হলে কেবল একটি "জেড" আউটপুট করুন।
  6. সমস্ত অঙ্কগুলি সঠিক এবং সঠিক জায়গায় না হওয়া পর্যন্ত ইনপুটগুলি গ্রহণ করা চালিয়ে যান, তারপরে "পিপিপি" আউটপুট অনুসরণ করে এটি একটি নতুন লাইনে যে অনুমান করেছিল তার সংখ্যা অনুসরণ করে।

দ্রষ্টব্য :

  • একটি "সঠিক অঙ্ক" এর অর্থ অনুমানের একটি অঙ্কেরও এলোমেলো 3 ডিজিটের সংখ্যার একটি অঙ্ক।

  • একটি "সঠিক জায়গা" এর অর্থ এটি একটি "সঠিক অঙ্ক" এবং 3 ডিজিটের এলোমেলো সংখ্যার মতো একই জায়গায়।

  • আউটপুট করার ক্রমটি সমস্ত "পি" এর প্রথমে, তারপরে "এন" এর, বা কিছুই সঠিক না হলে কেবল "জেড" হওয়া উচিত।

  • যদি কোনও ইনপুটটিতে পুনরাবৃত্তি সংখ্যা থাকে তবে "পি" "এন" এর চেয়ে বেশি অগ্রাধিকার নেয় (উদাহরণ Number: 123 Input: 111 Output: P:)

  • (বিকল্প) দৈর্ঘ্যে হুবহু 3 ডিজিট নয় এমন ইনপুটগুলি মূল্যায়ন করা উচিত নয়, বা অনুমানের মোট চলমান দিকে গণনা করা উচিত নয়

উত্পন্ন অঙ্কগুলি 123 হলে উদাহরণ

> 147
P
> 152
PN
> 126
PP
> 123
PPP
4

উত্পন্ন অঙ্কগুলি 047 হলে উদাহরণ

> 123
Z
> 456
N
> 478
NN
> 947
PP
> 047
PPP
5

এটি কোডগল্ফ, তাই সংক্ষিপ্ততম প্রোগ্রামটি জয়ী!


পিপিসিজিতে আপনাকে স্বাগতম! এটি একটি দুর্দান্ত প্রথম চ্যালেঞ্জ, তবে আমি ভয় করি যে আমরা এর আগে এটি করেছি। খেলাটি অন্যথায় মাস্টারমাইন্ড হিসাবে পরিচিত। এখানে বিদ্যমান চ্যালেঞ্জটি রয়েছে তবে আমি পুরানো বা নতুনটি বন্ধ করব কিনা তা নিয়ে আমার মন আপ করা যায় না। আমি এটি বন্ধ করার দিকে কিছুটা ঝুঁকছি, তবে আমি সম্প্রদায়কে সিদ্ধান্ত নিতে দেব।
মার্টিন এন্ডার

@ মার্টিনবাটনার আহ, এটা আমার খারাপ। এটি দেখতে অনেকটা একই রকম সমস্যা বলে মনে হচ্ছে। আমি আপনার সাথে একমত এবং সম্প্রদায় সিদ্ধান্ত নিতে দিন।
মিস্টার পাবলিক

@ মার্টিনবাটনার এখানে মাপদণ্ড কী? বুড়োটির কিসের প্রসার হতে হবে?
লুইস মেন্ডো

2
@ মার্টিনব্যাটনার আমি মনে করি যে অঙ্কগুলি অনন্য হতে হবে এবং ইন্টারেক্টিভ প্রকৃতির মধ্যে, এই চ্যালেঞ্জটি সার্থক হওয়ার পক্ষে যথেষ্ট স্বতন্ত্র।
অ্যাডমবার্কবার্ক

@ লুইস মেন্ডো আমার মনে হয় এমন কোনও সরকারী মানদণ্ড নেই, কারণ পুরানো চ্যালেঞ্জ বন্ধ করা মোটামুটি সাম্প্রতিক বিষয়। আমার ব্যক্তিগত মানদণ্ডটি "কোন চ্যালেঞ্জটি আরও ভাল এবং / অথবা আরও বেয়ারবোন"।
মার্টিন এেন্ডার

উত্তর:


5

জাভাস্ক্রিপ্ট (ES6) 184 187 195

সম্পাদনা সংরক্ষিত 8 বাইট ধন্যবা @Neil সম্পাদনা সংরক্ষিত 3 বাইট ধন্যবা @ user81655

(নিউলাইনগুলি 1 বাইট হিসাবে গণনা করা হয়েছে)

d=[...'0123456789']
x=[10,9,8].map(l=>d.splice(Math.random()*l,1))
for(c=p=a='';!p[2];++c)g=prompt(a),n=p='',x.map((d,i)=>d-g[i]?~g.search(d)?n+='N':0:p+='P'),a=p+n||'Z'
alert(a+' '+c)

পরীক্ষা

d=[...'0123456789']
x=[10,9,8].map(l=>d.splice(Math.random()*l,1))
for(c=p=a='';!p[2];++c)
  g=prompt(a),
  n=p='',
  x.map((d,i)=>
        d-g[i]?~g.search(d)?n+='N':0:p+='P'
       ),
  a=p+n||'Z'
alert(a+' '+c)


আমি মনে করি d.splice(v=Math.random()*-~l,1)আপনাকে 5 বা সম্ভবত 8 বাইট সাশ্রয় করেছে (কিছু পারফরম্যান্সের বিনিময়ে)
নিল

@ নীল আমি স্প্লাইজকে প্রত্যাখ্যান করেছি যখন আমি কোনও সন্ধান করতে শুরু করি, এটি দীর্ঘ মনে হয়েছিল। এখন আমি আবার চেষ্টা করব
edc65

1
ঠিক আছে, ব্যবহারকারী 81655, ধন্যবাদ। সত্যিই একটি অদ্ভুত কাস্ট
edc65

3

পাওয়ারশেল ভি 2 +, 177 231 168 বাইট

$g=-join(0..9|Random -c 3);for($c=0;$o-ne"PPP";$c++){$n=$p='';$i=read-host;$o=-join(0..2|%{((("","N")[$i.IndexOf($g[$_])-ge0]),"P")[$g[$_]-eq$i[$_]]}|sort -des);($o,"Z")[!$o]}$c

অদ্ভুতভাবে, আমি ফিক্সড সংস্করণটি অপ্রতীকৃত সংস্করণের চেয়ে কম দৈর্ঘ্যের হতে গল্ফ করতে সক্ষম হয়েছি ... ওও

তাঁর সহায়তা ও অনুপ্রেরণার জন্য @ এডসি 65 এর জন্য অনেক ধন্যবাদ !

ব্যাখ্যা:

$g=-join(0..9|Random -c 3)   # Create an array @(0,1,2,...9) and choose 3 distinct elements
for($c=0;$o-ne"PPP";$c++){   # Loop until output = "PPP", incrementing $count each time
  $i=read-host               # Read input from the user

  $o=-join(0..2|%{((("","N")[$i.IndexOf($g[$_])-ge0]),"P")[$g[$_]-eq$i[$_]]}|sort -des)
       # OK, this is the convoluted part. We're constructing an array of "N", "P", or "",
       # sorting them by descending order (so the P's are first), and then joining them
       # together into a string. The array is constructed by essentially an if/elseif/else
       # statement that is evaluated three times thanks to the 0..2|%{} loop.
       # Starting from the innermost, we choose between "" and "N" based on whether the
       # input number has the current-digit of the secret number somewhere within it. We
       # then choose between that or "P" based on whether it's the _current_ digit of the
       # user input number.

  ($o,"Z")[!$o]
       # Here we output either $o from above or "Z" based on whether $o is empty
}
$c                           # The loop finished (meaning the user guessed), output $count

উদাহরণ রান:

PS C:\Tools\Scripts\golfing> .\pnz.ps1
123
N
111
Z
222
P
452
PN
562
NN
275
PN
258
PPP
7

আপনি কীভাবে পরীক্ষা করবেন যে অঙ্কগুলি পুনরাবৃত্তি হয় না?
edc65

@ edc65 সংশোধিত আউটপুট। এটা ব্যয়বহুল ছিল। এখনও আরও গল্ফের জন্য কাজ করছি, তবে আমি আশাবাদী নই ...
অ্যাডমবর্কবার্ক

আমি নিশ্চিত আপনি আরও ভাল করতে পারেন। অনুমানটি পুনরাবৃত্তি করতে পারে তা উত্থাপন করুন, তবে অনুমান করার সংখ্যাটি নেই। উদাহরণস্বরূপ, আমার উত্তরে আমি অনুমান করা প্রতিটি অঙ্ক থেকে শুরু করে ইনপুট চেক করব, বিপরীতে কাজ করবে না
edc65

@ edc65 অনুপ্রেরণা এবং সহায়তার জন্য ধন্যবাদ - অ-স্থির সংস্করণের চেয়ে সংক্ষিপ্ততর হওয়ার জন্য স্থির সংস্করণটি গল্ফ করেছে! : ডি
অ্যাডমবর্কবার্ক

এখন আমি
upvote

0

আর , 178 166 বাইট

y=!(s<-sample(48:57,3))
while(any(y!=s)){F=F+1
y<-utf8ToInt(readline())
cat(rep("P",p<-sum(y==s)),rep("N",n<-sum(y%in%s)-p
),if(!(n+p))"Z","
",if(all(y==s))F,sep="")}

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

টিআইও লিঙ্কটি কেবল বাইট গণনার জন্য - এটি আপনার আর কনসোলটিতে চেষ্টা করুন! (বা কোনও বিকল্প বিকল্প আছে কিনা তা আমাকে জানান)।

কম-গল্ফযুক্ত, আরও পঠনযোগ্য সংস্করণের ইতিহাস দেখুন।

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