पीएनजेड (क्रम में 3 अद्वितीय अंक अनुमान)


15

एक प्रोग्रामिंग बुक में एक चुनौती से बहुत पहले, पीएनजेड एक ऐसा गेम है जहां उपयोगकर्ता को सही क्रम में तीन अद्वितीय अंकों का अनुमान लगाना चाहिए।

नियम :

  1. बिना दोहराए अंकों के साथ एक यादृच्छिक 3 अंकों की संख्या उत्पन्न होती है। (यह वह है जो उपयोगकर्ता अनुमान लगाने की कोशिश कर रहा है)
  2. उपयोगकर्ता 3 अंकों का अनुमान लगाता है, जिसका मूल्यांकन कार्यक्रम द्वारा किया जाना है।
  3. एक सही जगह पर हर सही अंक के लिए एक "पी" आउटपुट।
  4. गलत स्थान पर हर सही अंक के लिए एक "एन" आउटपुट।
  5. यदि कोई अंक सही नहीं हैं, तो केवल "Z" आउटपुट करें।
  6. इनपुट्स को तब तक स्वीकार करना जारी रखें जब तक कि सभी अंक सही और सही जगह पर न हो जाएं, फिर आउटपुट "पीपीपी" और उसके बाद अनुमानों की संख्या के अनुसार यह एक नई लाइन पर ले जाता है।

नोट :

  • एक "सही अंक" का अर्थ है कि अनुमान में एक अंक भी यादृच्छिक 3 अंकों की संख्या में अंकों में से एक है।

  • एक "सही जगह" का अर्थ है कि यह "सही अंक" है और यह 3 अंकों के यादृच्छिक संख्या के समान स्थान पर है।

  • आउटपुट करने का क्रम पहले "P" का होना चाहिए, फिर "N" का, या केवल "Z" का होना चाहिए, अगर कुछ भी सही नहीं है।

  • एक इनपुट अंक समान हैं, तो "पी" से अधिक "एन" प्राथमिकता से लेता है (उदाहरण: 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

यह कोडगोल्फ है, इसलिए सबसे छोटा कार्यक्रम जीतता है!


PPCG में आपका स्वागत है! यह एक महान पहली चुनौती है, लेकिन मुझे डर है कि हम पहले भी ऐसा कर चुके हैं। खेल को अन्यथा मास्टरमाइंड के रूप में जाना जाता है। यहां मौजूदा चुनौती है, लेकिन मैं अपना मन नहीं बना सकता कि पुराने को बंद करूं या नए को। मैं इसे बंद करने की दिशा में थोड़ा झुक रहा हूं, लेकिन मैं समुदाय को निर्णय लेने दूंगा।
मार्टिन एंडर

@ मार्टिनबटनर आह, यह मेरा बुरा है। यह एक बहुत ही समान समस्या की तरह लगता है। मैं आपसे सहमत हूँ और समुदाय को निर्णय लेने दूंगा।
श्री सार्वजनिक

@ MartinBüttner यहाँ कसौटी क्या है? पुराने को आगे बढ़ाने के लिए क्या करना चाहिए?
लुइस मेंडो

2
@ मार्टिनबटनर मुझे लगता है कि अंकों को अद्वितीय और संवादात्मक प्रकृति की आवश्यकता के बीच है, यह चुनौती सार्थक होने के लिए पर्याप्त है।
AdmBorkBork

@LuisMendo कोई आधिकारिक मानदंड नहीं है जो मुझे लगता है, क्योंकि पुरानी चुनौतियों को बंद करना काफी हाल की बात है। मेरी व्यक्तिगत कसौटी है "कौन सी चुनौती बेहतर है और / या अधिक नंगे पैर"।
मार्टिन एंडर

जवाबों:


5

जावास्क्रिप्ट (ईएस 6) 184 187 195

संपादित सहेजी गयी 8 बाइट्स THX @Neil संपादित सहेजी गयी 3 बाइट्स THX @ 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
@ user81655 सही है, धन्यवाद। वास्तव में एक अजीब कलाकारों
edc65

3

PowerShell v2 +, 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

अजीब तरह से, मैं निश्चित संस्करण को गोल्फ के लिए अधूरा संस्करण की तुलना में कम लंबाई होने में सक्षम था ... ऊ

उनकी सहायता और प्रेरणा के लिए @ edc65 को बहुत धन्यवाद !

स्पष्टीकरण:

$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 सही आउटपुट। वह महंगा था। अभी भी गोल्फ में आगे काम कर रहा हूं, लेकिन मुझे उम्मीद नहीं है ...
AdmBorkBork

मुझे यकीन है कि आप बेहतर कर सकते हैं। इस तथ्य का लाभ उठाएं कि अनुमान में पुनरावृत्ति हो सकती है, लेकिन अनुमान लगाने की संख्या नहीं है। उदाहरण के लिए, मेरे जवाब में मैं अनुमान लगाने और इनपुट की जांच करने के लिए प्रत्येक अंक से शुरू करता हूं, इसके विपरीत काम नहीं करेगा
edc65

@ edc65 प्रेरणा और सहायता के लिए धन्यवाद - निश्चित संस्करण को गैर-निश्चित संस्करण की तुलना में छोटा होना चाहिए! : D
AdmBorkBork

अब मैं वोट दें करने के लिए बाध्य कर रहा हूँ
edc65

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="")}

इसे ऑनलाइन आज़माएं!

TIO लिंक सिर्फ बाइट काउंट के लिए है - इसे अपने R कंसोल में आज़माएं! (या मुझे बताएं कि क्या कोई वैकल्पिक विकल्प है)।

कम गोल्फ वाले, अधिक पठनीय संस्करण के लिए इतिहास देखें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.