সেরা ইয়াহটজি স্কোর


26

ইয়াহটজি হ'ল একটি খেলা যা স্কোর পূরণের জন্য পাঁচটি ছয়তরফা ডাইস এবং একটি স্কোর শীট তেরটি বিভিন্ন বাক্স সহ খেলানো হয় Each প্রতিটি বাক্সের নিজস্ব স্কোরিং বিধি রয়েছে:

  • 1s, 2s, 3s, 4s, 5s, 6s সমস্ত স্কোর পয়েন্টকে সংশ্লিষ্ট পাশের যোগফলের সমান (অর্থাৎ 3s হিসাবে প্রাপ্ত [3, 2, 3, 1, 5] এর রোলটি 6 পয়েন্ট প্রদান করা হবে: 3 প্রতিটি 3) জন্য।
  • 3-অফ-এ-টাইপ এবং 4-অফ-এ-টাইপ (তারা যেমন শব্দ করে, তিন বা চার ডাইস একই ঘূর্ণায়মান) স্কোর পয়েন্ট সমস্ত পাঁচটি পাশ্বের যোগফলের সমান।
  • পূর্ণ ঘর (দুটি পাশ্ব একটি মান দেখায়, অন্য তিনটি অন্য দেখায়) স্কোর 25 পয়েন্ট
  • ছোট সোজা (টানা চারটি মান) স্কোর 30 পয়েন্ট
  • বড় সোজা (সমস্ত ধারাবাহিক মান) স্কোর 40 পয়েন্ট
  • ইয়াহ্তজি (সমস্ত ডাইস একই মান দেখায়) স্কোর 50 পয়েন্ট

ত্রয়োদশ (সুযোগ) ইন-গেমটি বোঝায়, তবে এই চ্যালেঞ্জের জন্য এতটা নয়; অতিরিক্তভাবে গেমটিতে অতিরিক্ত ইয়াহটজিদের বোনাস রয়েছে যা এখানে কোনও অর্থ দেয় না। কারণ চ্যালেঞ্জটি হ'ল ...

ইনপুট হিসাবে পাঁচটি পাশা দেওয়া (পাঁচটি পূর্ণসংখ্যা 1-6, ইনপুট তবে সুবিধাজনক, আপনি ইনপুটটি সর্বদা বৈধ বলে ধরে নিতে পারেন), সেই 'হাত' এর পক্ষে সর্বোচ্চ স্কোর আউটপুট। এই চ্যালেঞ্জের উদ্দেশ্যে, শুধুমাত্র তালিকায় স্কোরিং পদ্ধতি উপরে বৈধ (বিশেষত সুযোগ না এই প্রতিদ্বন্দ্বিতায় জন্য একটি বৈধ স্কোর বাক্স)। স্কোরটি তার দশমিক সংখ্যাসূচক মান হিসাবে আউটপুট হওয়া উচিত, এটি কোনও পূর্ণসংখ্যা বা তার কোনও স্ট্রিং প্রতিনিধিত্বই হোক না কেন। এটি সঙ্গে সঙ্গে একটি সংখ্যা হিসাবে চিহ্নিত করা উচিত। শীর্ষস্থানীয় / পূর্ববর্তী সাদা স্থান ঠিক আছে, এটি স্কোর অর্জন সম্পর্কে এবং উপস্থাপনাটি সম্পর্কে নয়।

কোড গল্ফ, সুতরাং কোনও প্রদত্ত ভাষার মধ্যে সবচেয়ে কম বাইটের সাথে উত্তর। স্ট্যান্ডার্ড লুফোলস নিষিদ্ধ।

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

(দ্রষ্টব্য যে এগুলি সমস্ত স্বতন্ত্র, চ্যালেঞ্জটি হ'ল পাশের এক 'হাত' স্কোর করা ):

in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6

3
পরিবর্তে আমাদের কি পুরানো প্রশ্নটি বন্ধ করা উচিত? আইএমও এটির চেয়ে আরও ভাল প্রশ্ন ...
জিউসেপ

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


2
এফডাব্লুআইডাব্লু, আমি যখন এটিকে একসাথে রেখেছিলাম তখন আমি পুরানো প্রশ্ন সম্পর্কে অবগত ছিলাম। আমার ডেভলপিং ডেভেলপার যা বলেছিল তা আমার চিন্তাভাবনাগুলিতে প্রতিধ্বনিত। আগে একবার অনুশীলন হিসাবে এটি করার পরে, আমি এই প্রক্রিয়াটি অনুকূল করার কয়েকটি আকর্ষণীয় সুযোগ পেয়েছি। আমি আরও মনে করি এটি একটি পরিপাটি চ্যালেঞ্জ।
brhfl

"ত্রয়োদশ (সুযোগ) ইন-গেমটি বোঝায়, তবে এই চ্যালেঞ্জের জন্য এতটা নয়" তাই এটি গণনা করা হয় কি?
ইউনিহীড্রন

উত্তর:


6

আর , 146 141 বাইট

function(d)max(unique(d<-sort(d))*(g=table(d)),any(g>2)*sum(d),all(2:3%in%g)*25,(s=sum((R=diff(d))==1))<4&all(R<2)*30,(s>3)*40,(0==sd(d))*50)

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

প্ল্যানাপাস দ্বারা আউটগল্ফড

তালিকা হিসাবে ইনপুট নেয় এবং স্কোরটি দেয় returns

কিছুটা অবহেলিত:

function(d){
 d <- sort(d)
 u <- unique(d)                  # unique dice
 g <- table(d)                   # table of counts
 Ns <- u*g                       # scores as 1s, 2s, ... etc.
 NKind <- any(g>2)*sum(d)        # 3 or 4 of a kind if any counts are at least 3
 FHouse <- all(2:3%in%g)*25      # full house is 25 if 2 & 3 are in counts
 R <- diff(d)                    # consecutive differences
 s <- sum(R==1)                  # sum of differences equal to 1
 sStraight <- s<4 &              # if the number of 1s is 3 and
               all(R<2)*30       # no consecutive numbers are 2 apart
 bStraight <- (s>3)*40           # all 1s means big straight
 Yahtzee <- sd(d)==0             # sd = 0 means all are equal
 max(Ns,NKind,FHouse,sStraight,bStraight,Yahtzee)
}


f(c(1,2,3,5,6))ব্যর্থ - এটি 6 ফলন করতে হবে এবং তার পরিবর্তে 30 ফলন করা উচিত It এটি মনে হয় কারণ আপনি একত্রে কতগুলি জোড়া (পোস্ট-বাছাই করা) পৃথক করছেন, এটি আসলে উপরের ক্রমের জন্য চারটি, যদিও এটি সরল নয় though চারের মধ্যে. আমি মনে করি যখন আমি কিছুক্ষণ আগে অনুশীলন হিসাবে এটি করেছি তখন আমি
এটিতে ছুটে

@ BRhfl এটি এখন ঠিক করা হয়েছে।
জিউসেপ


4

আর, 136 134 বাইট

function(n,y=table(factor(n,1:6)),z=sum(!diff(diff(sort(n)))))max(1:6*y,c(25,sum(n),10*3:5)[c(all(y<4&y-1),any(y>2),z>1,z>2,any(y>4))])

নিচে 2 Golfed ধন্যবাদ বাইট @Giuseppe !

ইন্ডেন্টযুক্ত,

function(n, #vector of die scores
         y=table(factor(n,1:6)), #Contingency table
         z=sum(!diff(diff(sort(n))))) #Diff of diff of ordered scores
    max(1:6*y,
        c(25,sum(n),10*3:5)*c(all(y<4&y-1), #Full house
                            any(y>2), #3 and 4 of a kind
                            z>1, #Small straight
                            z>2, #Long straight
                            any(y>4))] #Yahtzee

কয়েকটি পরীক্ষার কেস:

> f=function(n,y=table(factor(n,1:6)),z=sum(!diff(diff(sort(n)))))max(1:6*y,c(25,sum(n),10*3:5)*c(all(y<4&y-1),any(y>2),z>1,z>2,any(y>4)))
> f(c(2,4,2,4,6))
[1] 8
> f(c(1,2,3,5,6))
[1] 6
> f(c(6,5,5,6,6))
[1] 28
> f(c(6,5,3,1,4))
[1] 30
> f(c(6,5,3,2,4))
[1] 40

1
হু, আমি factorবিভ্রান্ত হওয়ার আগেই আমি গরম সেকেন্ডের জন্য বিবেচনা করেছি। তবে আমি মনে করি যদি আমি z( sআমার উত্তরে) আপনার দৃষ্টিভঙ্গিটি ব্যবহার করি তবে আমি 134-এ গল্ফ করতে পারি ...
জিউসেপ

অতিরিক্ত হিসাবে, আপনি পরিবর্তে all(y<4&y-1)ব্যবহার করে এবং এর *পরিবর্তে ফাংশন আর্গুমেন্ট হিসাবে ইনলাইন [সেট করে তিনটি বাইট সংরক্ষণ করতে পারেন yএবং এটি এখনও সমস্ত পরীক্ষার কেস পাস করে: এটি অনলাইনে চেষ্টা করুন!
জিউসেপ

এছাড়াও, আমি পুনর্গঠন করেছি maxএবং আমার মনে হয় এটি বাইটটি yইনলাইন সেট করা থেকে রক্ষা করেছে ।
জিউসেপ

3

ব্যাচ, 359 বাইট

@echo off
set/at=s=m=r1=r2=r3=r4=r5=r6=0
for %%r in (%*)do set/a"m+=!(m-r%%r),r%%r+=1,t+=%%r,p=s-r%%r*%%r,p&=p>>9,s-=p
goto %m%
:1
if %r1% neq %r6% set s=40&goto g
:2
set/at=r3*r4*(r2*(r1+r5)+r5*r6)
if %t% gtr 0 set s=30
goto g
:3
set/a"s=r1^r2^r3^r4^r5^r6"
if %s%==1 if %t% lss 25 set s=25&goto g
:4
set/as=t
goto g
:5
set s=50
:g
echo %s%

ব্যাখ্যা:

@echo off
set/at=s=m=r1=r2=r3=r4=r5=r6=0
for %%r in (%*)do set/a"m+=!(m-r%%r),r%%r+=1,t+=%%r,p=s-r%%r*%%r,p&=p>>9,s-=p
goto %m%

প্রতিটি সংখ্যার জন্য পাশ্বের সংখ্যা গণনা করুন, সর্বোপরি, আরও সমস্ত পাশার মোট, এবং একই সংখ্যার সর্বোচ্চ মোট পাশের সংখ্যা

:1
if %r1% neq %r6% set s=40&goto g

যদি সমস্ত পাশা আলাদা হয় তবে এটি দীর্ঘ সোজা হতে পারে তবে সেখানে না হয় 1বা না হওয়া দরকার 6

:2
set/at=r3*r4*(r2*(r1+r5)+r5*r6)
if %t% gtr 0 set s=30
goto g

অন্যথায়, বা যদি বেশিরভাগ দুটি পাশা একই হয় তবে এটি এখনও একটি ছোট সোজা হতে পারে। কমপক্ষে একটি 3এবং একটি 4এবং অন্যান্য চারটি সংখ্যার সংমিশ্রণ অবশ্যই থাকতে হবে ।

:3
set/a"s=r1^r2^r3^r4^r5^r6"
if %s%==1 set s=25&goto g

তিন পাশা একই থাকে তাহলে একটি পূর্ণ ঘর জন্য চেক, যেহেতু 3^2==1। যাইহোক, কিছু পূর্ণ ঘর যেমন 6s এবং 5 এর আকার 3-অফ-এ-ধরণের হিসাবে বেশি score

:4
set/as=t
goto g

অন্যথায়, বা যদি চারটি একই হয় তবে মোট স্কোর করুন।

:5
set s=50

আর যদি পাঁচটি একই হয় তবে ইয়াহটজি!

:g
echo %s%

সেরা স্কোর আউটপুট।


1
সম্ভাব্য [5,5,6,6,6] -সোসার্ড-এ-পুরো-বাড়ি ক্ষতি সম্পর্কে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ - আমি এটি একটি পরীক্ষার কেস হিসাবে যুক্ত করেছি। আমি জানতাম যে আমি ভুলে যাচ্ছিলাম এমন বেশ কয়েকটি অদ্ভুত ফ্রিঞ্জ মামলা রয়েছে।
brhfl

3

জেলি , 58 বাইট

ċЀ`Ṁ>2ȧS
ṢI=1Ạµ-ƤẸ,E;ṢI$E$;⁸Lƙ`Ṣ⁼2,3¤a3,5,4,2.Ṁ×⁵»Ç»Sƙ`Ṁ$

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


এটি পুরোপুরি বৈধ, তবে আমি কৌতূহলী এবং জেলিকে আমার নিজের পক্ষে ঝাঁকুনির পক্ষে যথেষ্ট পরিমাণে জানা নেই ... কেন পুরো বাড়ি ফিরে আসে 25.0যখন অন্য কোনও মামলার পিছনে নেই .0?
brhfl

@ ব্রফএফএল ওয়েল, কারণ এটি 2.5 × 10 = 25.0(ভাসমান গাণিতিক) হিসাবে অনুমান করা হয়েছে , অন্যরা 30যেমন 3 × 10 = 30(পূর্ণসংখ্যার গাণিতিক) হিসাবে অনুমান করা হয় ।
এরিক আউটগলফার

2
ধন্যবাদ! আমি আমার প্রশ্নটি সত্যিই ভাল করে বলিনি; আপনি পুরো ঘরটি সনাক্ত করার জন্য আপনি কোন পদ্ধতিটি ব্যবহার করছেন তা আরও কৌতূহলপূর্ণ হয়েছিল যার ফলে গণিতটি ভিন্নভাবে করা যায় - তবে এখন আমি এটি সম্পর্কে চিন্তাভাবনা করছি, আমি অনুমান করছি যে এটি 2.5, 3, 4, 5 * 10 বনাম করার জন্য কেবল গল্ফিয়র do 25, 30, 40, 50. মনে করুন আমি আমার নিজের প্রশ্নের উত্তর দিয়েছি।
brhfl

@brhfl হুবহু, যেহেতু × 102 বাইট, 2.5ঠিক 2 বাইট যেমন 25এবং 3,5,43 বাইট ওভারও সাশ্রয় করে 30,50,40, তাই 3 + 0 - 2 = 1 বাইট সংরক্ষণ করা হয়।
এরিক আউটগলফার

2

পার্ল 6 , 159 বাইট

->\b{max map {$_(b)},|(1..6).map({*{$_}*$_}),{.kxxv.sum*?.values.grep(*>2)},{25*(6==[*]
.values)},30*?*{3&4&(1&2|2&5|5&6)},40*?*{2&3&4&5&(1|6)},50*(*.keys==1)}

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

যেহেতু ইনপুট গ্রহণ করা যেতে পারে "তবে সুবিধাজনক", আমার ফাংশন এটি Bagশ্রেণীর উদাহরণ হিসাবে গ্রহণ করে , যা বহুগুণ সহ একটি ধারক। এ Bagহ'ল সাহসী ধারক; ব্যাগের মধ্যে $bag{$key}কতবার $keyঘটে তা ফিরিয়ে দেয়।

ফাংশনটির বেশিরভাগ অংশ হ'ল ফাংশনগুলির একটি তালিকা যা প্রতিটি সম্ভাব্য ইয়াহ্তজি হাতের মূল্যায়ন করে, সেই হাতের জন্য স্কোরটি ফিরিয়ে দেয় বা যদি শর্ত পূরণ না করা হয় তবে শূন্য।

  • |(1..6).map({ *{$_} * $_ })ছয়টি ক্রিয়াকলাপের একটি তালিকা যা 1-6 নম্বরগুলির পুনরাবৃত্ত রানগুলির উপর ভিত্তি করে হাতগুলি মূল্যায়ণ করে। নেতৃস্থানীয় |তালিকাটিকে আশেপাশের তালিকায় সমতল করে তোলে।
  • {.kxxv.sum * ?.values.grep(* > 2) }3- এবং 4-এর-এক ধরনের হাতের মূল্যায়ন করে। .kxxvএকটি উপর Bagরিটার্ন কী প্রতিটি এর সংখ্যাধিক্য সঙ্গে পুনরাবৃত্তি, ডাই রোলস মূল তালিকা পুনরুদ্ধার এবং .sumঅবশ্যই পাশা অঙ্কের। সেই যোগসূত্রটি একটি বুলিয়ান মান ( ?) দ্বারা গুণিত হয় যা ব্যাগের .values(অর্থাত্, বহুগুণ) 2 এর চেয়ে বড় মান ধারণ করে true
  • { 25 * (6 == [*] .values) }পুরো বাড়ির হাতটি মূল্যায়ন করে। 25 এর বুলিয়ান মান দ্বারা গুণিত হয় যা গুণকের গুণমান 6 হয়, যা পাঁচটি পাশার জন্য কেবল তখনই ঘটতে পারে যখন একটি 3 হয় এবং অন্যটি 2 হয়।
  • 30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }ছোট সোজা হাত মূল্যায়ন। এটি একটি WhateverCodeফাংশন; দ্বিতীয় তারা *হল Bag। ধনুর্বন্ধনীগুলির মধ্যে প্রকাশটি হ'ল 3 এবং 4 এর সংমিশ্রণ, এবং হয় 1 এবং 2, বা 2 এবং 5, বা 5 এবং 6. এই সংযোগটিকে Bagঅনুরূপ গুণগুলির একটি সংযোগের ফলাফল হিসাবে সন্ধান করবে। যদি 3 এবং 4 এর বহুগুণ এবং কমপক্ষে 1 এবং 2, বা 2 এবং 5, বা 5 এবং 6 এর একটি ননজারো হয় তবে বুলিয়ান (সহ ?) এর সাথে জোর করে যখন জংশনটি সত্য হয় , এবং এই বুলিয়ান 30 দ্বারা গুণিত হয় স্কোর পেতে।
  • 40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }একইভাবে বড় সোজা হাত মূল্যায়ন। এটি সহজ কারণ পাশা অবশ্যই প্রতিটি সংখ্যা 2-5 অন্তর্ভুক্ত, এবং হয় 1 বা 6।
  • 50 * (*.keys == 1)ইয়াহটজি হাতটি মূল্যায়ন করে। এটি কেবল বুলিয়ান মানের 50 গুণ যা পৃথক পাশের সংখ্যা এক হলে এটি সত্য।

2

পিপ , 65 63 বাইট

n:_NgM\,6MXn*\,6AL[2<MXn23=JSNn3<Y#MX Jn^0MXn=5]*[$+g25--y*t50]

পাঁচটি কমান্ড-লাইন আর্গুমেন্ট হিসাবে ডাইস নেয়। এটি অনলাইন চেষ্টা করুন!

অবহেলিত + ব্যাখ্যা

(এটি আসল সংস্করণ)

                    g is list of cmdline args; t is 10 (implicit)

Y                   Yank into y:
  _Ng                function that counts occurrences of its argument in g
 M                   mapped to
  \,6                inclusive range from 1 to 6
                    This gives us how many dice are showing each number 1-6

s:                  Assign to s:
  # MX               length of max of
      Jy ^ 0         join y into string and split on zeros
                    This gives us the length of the longest straight

MX                  Max of
   y * \,6           each die frequency in y, times its value
 AL                  to which list append
   [                 this list:
                      3- and 4-of-a-kind:
    MXy > 2 & $+g      If max frequency is 3 or more, sum of g (else 0)
                      Full house:
    23 = J SNy & 25    Sort y and join into string; if it's 000023, 25 (else 0)
                      Straights:
    s > 3 & --s*t      If s is 4 or more, (s-1)*10 (else 0)
                      Yahtzee:
    MXy = 5 & 50       If max frequency is 5, 50 (else 0)
   ]
                    The result of the last expression is autoprinted

1

রুবি , 184 বাইট

পুরো প্রোগ্রাম। ইনপুট পরীক্ষা করা সহজ করার জন্য, $/=' '"স্পেস দ্বারা পৃথক অঙ্ক" বিন্যাসে পড়ার জন্য উপরে যুক্ত করুন। (১৯১ টি চর)

a=$<.map &:to_i
b=a.|c=[]
d=(1..6).map{|x|e=a.count x
c<<x*e
e}
e=a.sum
p !b[1]?50:b[4]&&!(a&[1,6])[1]?40:(1..3).any?{|x|(a&[*x..x+3])[3]}?30:(d-[0,2,3])[0]?d.max>2?e:c.max: [25,e].max

আমি ব্রেকটি 200 বাইটের বাধাটি নির্ধারণ করেছিলাম এবং আমি এটিকে এক ডজন বাইট রেখে খুব সহজেই তা ধ্বংস করতে সক্ষম হয়েছি!

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

ব্যাখ্যা

যদিও খুব ভাল একটি না। আশা করি আপনার কিছু রুবি জ্ঞান আছে ~

a=$<.map &:to_i # a: input as [number]*5
b=a.|c=[]       # c: [], b: a.uniq
d=(1..6).map{|x|
    e=a.count x # e: occurrence count in a 
    c<<x*e      # add (number * occurrence count) to c
    e           # return value in d
}
e=a.sum         # e: sum of input
p !b[1] ? 50 :  #   condition to print 50 <= if a.uniq has length 0 (el 1 is nil)
  b[4] &&       #   condition to print 40 <= if a.uniq has length 5 (el 4 exists)
  !(a&[1,6])[1] ? 40 : # <- arr & [mask]  # and a does not have both 1 and 6
  (1..3).any?{|x| # condition to print 30 <= if any of 1..4, 2..5, 3..6
  (a&[*x..x+3])[3]} ? 30 : # [3] to assert entire mask is found in a
  (d-[0,2,3])[0] ? # if, after removing 0 (not found) 2 (a pair) 3 (a triple)
                   # and something is found, this is not full house
  d.max > 2 ?   # is triple / quadruple ?
     e :        # weakly dominating alternatives
     c.max      # choose best by-suit
  : [25,e].max  # choose best by-score
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.