একটি ডাইস 10,000 রোল মূল্যায়ন করুন


18

ভূমিকা

ডাইস 10,000 হ'ল একটি ডাইস গেম যা 6 ডাইস এবং কিছু লেখার জন্য খেলানো যায়। খেলোয়াড়রা একবারে একাধিকবার ডাইস রোল করে এবং এর শেষে একটি স্কোর অর্জন করে। 10,000 পয়েন্টে পৌঁছানো খেলোয়াড়টি প্রথম খেলায় জয়লাভ করে। এই চ্যালেঞ্জের মধ্যে একটি রোলের স্কোর গণনা করা আপনার কাজ। সম্পূর্ণ নিয়ম জন্য
এখানে দেখুন
দয়া করে নোট করুন যে নিয়মগুলি (বিশেষত স্কোরিং) অঞ্চল থেকে অঞ্চলে পরিবর্তিত হয় কারণ খেলাটি ব্যাপকভাবে পরিচিত। আমরা নীচে বর্ণিত নিয়ম ব্যবহার।

চ্যালেঞ্জ

একটি পাশা রোল প্রতিনিধিত্ব করে এক থেকে ছয় পর্যন্ত ছয় সংখ্যার একটি তালিকা দেওয়া, তাদের স্কোর আউটপুট। স্কোলটি ফলউইং পদ্ধতিতে গণনা করা হয়:

  • ব্যক্তিরা 100 পয়েন্ট গণনা করে
  • পাঁচটি 50 পয়েন্ট গণনা করে
  • ট্রিপল্টগুলি তাদের সংখ্যাকে 100 পয়েন্ট গণনা করে । উদাহরণস্বরূপ তিনটি দ্বিগুণ 200 পয়েন্ট দেয়। ব্যতিক্রম তিনটি যা 1000 পয়েন্ট গণনা করে ।
  • উপরে বর্ণিত হিসাবে দুটি ট্রিপল্টের মতো একই সংখ্যার ছয়টি গণনা। সুতরাং ছয় ত্রয়ী 600 পয়েন্ট দেয়। একইগুলির সাথে প্রান্তের ক্ষেত্রে এটি হয়: ছয়টি 2,000 পয়েন্ট।
  • একটি ডাই একাধিকবার ব্যবহার করা যায় না। যদি ডাই একটি ট্রিপলটির অংশ হয় তবে এটি অন্যান্য বৃশ্চিকের জন্য গণনা করে না। ট্রিপলেটে পাঁচটি তারা যে 500 পয়েন্ট দেয় তা ছাড়া 50 পয়েন্ট গণনা করে না
  • ত্রিপলগুলি সর্বদা স্কোর সর্বাধিক করতে গণনা করা হয়। সুতরাং তিনটি পাঁচটি কখনওই 150 পয়েন্ট হিসাবে গণনা করা হয় না। চার পাঁচটি একটি ট্রিপলেট এবং একটি সাধারণ পাঁচ হিসাবে গণনা করা হয় যা পরে 550 পয়েন্ট দেয়।

মন্তব্য

  • ইনপুটটিতে সর্বদা এক থেকে ছয় পর্যন্ত ছয়টি সংখ্যা থাকবে। আপনি অবৈধ ইনপুট পাবেন না।
  • সংখ্যাগুলি যে কোনও ক্রমে হতে পারে। আপনি কোনও নির্দিষ্ট ক্রম অনুমান করতে পারেন না।

বিধি

  • ইনপুট ফর্ম্যাট যতক্ষণ না এটি প্রস্রোসেসড না থাকে ততক্ষণ আপনার।
  • ফাংশন বা সম্পূর্ণ প্রোগ্রাম অনুমোদিত।
  • ইনপুট / আউটপুট জন্য ডিফল্ট নিয়ম
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।
  • এটি , তাই সর্বনিম্ন বাইট-কাউন্ট জেতা। টাইব্রেকার আগে জমা দেওয়া হয়।

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

[1, 2, 3, 4, 5, 6] -> 150
[1, 1, 1, 2, 3, 5] -> 1050
[1, 1, 1, 1, 1, 1] -> 2000
[2, 2, 2, 2, 2, 2] -> 400
[6, 6, 1, 5, 5, 6] -> 800
[2, 3, 4, 6, 2, 4] -> 0
[1, 5, 1, 5, 1, 5] -> 1500
[5, 5, 5, 5, 2, 3] -> 550
[1, 1, 1, 1, 1, 5] -> 1250
[3, 3, 4, 4, 3, 4] -> 700

11
এছাড়াও, ডাই পাশার একক রূপ ।
mbomb007

5
@ থ্রিএফএক্স "একটি ডাইস" এখনও ভুল। দেখুন english.stackexchange.com/a/167107/125966
mbomb007

3
@ mbomb007 দেখুন এই
থ্রিএফএক্স

4
@ mbomb007 জার্মান ভাষায় এটি একক এবং বহুবচনগুলির জন্য একই, কেন ইংরেজি এত জটিল হতে পারে? : পি তবে ধন্যবাদ যাই হোক না কেন, ডাই শোনার শব্দটি আসলেই আরও ভাল :)
ডেনকার

9
@ ডেনারএফে আহ কিন্তু এটি "ডের ডাইস", "ডাই ডাইস" বা "দাস ডাইস"?
ডেভ

উত্তর:



4

পাইথন 2, 152 148 125 বাইট

খুব সহজ সমাধান। আরও গল্ফ করা যেতে পারে। L.countকিছুটা দীর্ঘ, তবে আমি প্রথম কলটি সরাতে পারিনি কারণ এল আপডেট হয়েছে।

def f(L):s=n=0;exec"n+=1\nwhile L.count(n)>2:s+=[n*100,1e3][n<2];exec'L.remove(n);'*3\n"*6;C=L.count;print s+100*C(1)+50*C(5)

এটি অনলাইনে ব্যবহার করে দেখুন - (সমস্ত পরীক্ষার কেস)

Ungolfed:

def f(L,s=0):
    L.sort()
    for n in range(1,7):
        while L.count(n)>2:
            s+=n*100*((n<2)*9+1) # multiply by 10 if n==1
            i=L.index(n)
            L=L[:i]+L[i+3:]
    s+=100*L.count(1)+50*L.count(5)
    print s

তার কোড থেকে কিছু টিপস ব্যবহার করে কিছু গল্ফ @ কপারকে জমা দেয়


4

পাওয়ারশেল ভি 2 + ভি 3 +, 147 144 137 133 বাইট

$n=$args[0]|sort;while($n){if(($x=$n[0])-eq$n[2]){$s+=100*$x+900*($x-eq1);$a,$b,$n=$n}else{$s+=50*($x-in1,5)+50*($x-eq1)}$a,$n=$n};$s

ক্রস আউট 144 কিন্ডা 144 এর মত দেখাচ্ছে?

এটি ইনপুট নেয় $args[0]এবং sortএটি সংরক্ষণ করে $n। তারপরে, whileএখনও কিছু উপাদান বাকি রয়েছে, আমরা একটি if/ পর্যালোচনা করি else

যদি প্রথম উপাদানটি ( $xকিছু বাইট সংরক্ষণে অস্থায়ীভাবে সঞ্চিত থাকে ) তৃতীয় উপাদানের সাথে মেলে তবে আমাদের একটি ট্রিপল রয়েছে। সম্মুখের যোগ $sউম কিছু গুণ ফল 100*$xপ্লাস একটি বুলিয়ান-ভিত্তিক 900শুধুমাত্র যদি $xহয় -equal করতে 1। এটি আমাদের 1000তিনজনের জন্য প্রয়োজনীয়তা পেয়ে যায় । তারপর, প্রথম দুটি উপাদান সরে $a, এবং $b, এবং মধ্যে অবশিষ্ট $n- ট্রিপল তৃতীয় উপাদান সরানোর পরে পরিচালিত হয়।

অন্যথায়, আমাদের একটি ট্রিপল নেই, সুতরাং $sঅন্য বুলিয়ান ভিত্তিক সংযোজনের ফলাফলের সাথে যুক্ত করুন । আমরা হয় বা 50যদি $xহয় যোগ করুন, তারপরে এটি ইউল হলে অন্যটিতে যুক্ত করুন । এই বিভাগে এখন অপারেটরের জন্য v3 + প্রয়োজন ।1550-eq1-in

উভয় ক্ষেত্রেই, আমাদের এখনও একটি উপাদান এখনও অপসারণ করতে পারে, তাই প্রথম উপাদানটি খোঁচা করে বাকীটি $aরেখে দিন $n

শেষ অবধি লুপটি শেষ $sহয়ে গেলে পাইপলাইনে রাখুন। এক্সপ্লোরের Write-Outputশেষে আউটপুট অন্তর্ভুক্ত ।

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

PS C:\Tools\Scripts\golfing> (1,2,3,4,5,6),(1,1,1,2,3,5),(1,1,1,1,1,1),(2,2,2,2,2,2),(6,6,1,5,5,6),(2,3,4,6,2,4),(1,5,1,5,1,5),(5,5,5,5,2,3),(1,1,1,1,1,5),(3,3,4,4,3,4)|%{($_-join',')+" -> "+(.\evaluate-dice-1000.ps1 $_)}
1,2,3,4,5,6 -> 150
1,1,1,2,3,5 -> 1050
1,1,1,1,1,1 -> 2000
2,2,2,2,2,2 -> 400
6,6,1,5,5,6 -> 800
2,3,4,6,2,4 -> 0
1,5,1,5,1,5 -> 1500
5,5,5,5,2,3 -> 550
1,1,1,1,1,5 -> 1250
3,3,4,4,3,4 -> 700

পুনরায়: '144 ছাড়িয়ে গেছে': আপনার স্ট্রাইকথ্রুটিকে সাহসী করুন, এটি আরও সুস্পষ্ট হবে।
স্ট্যাকস্টাক

3

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

a=>a.sort().join``.replace(/(.)\1\1|1|5/g,s=>r+=s>>7?s/1.11:s>5?1e3:s>1?50:100,r=0)&&r

ইনপুটটিকে বাছাই এবং স্ট্রিংফাই করে যাতে স্কোর সংমিশ্রণগুলি রেজিএক্সএক্সের মাধ্যমে সনাক্ত করা যায়। সম্পাদনা: @ আরনাউল্ডকে ধন্যবাদ 1 বাইট সংরক্ষিত


s>>7পরিবর্তে s>111প্রথম সংস্করণে এক বাইট সংরক্ষণ
Arnauld

3

পাইথন 2 বা 3, 123 122 121 116 109 108 104 102 100 97 বাইট

পাইথন 2, 97 বাইট

lambda r:100*sum(c/3*((v<2)*9+v)+c%3*(v<2or(v==5)/2.)for v,c in enumerate(map(r.count,range(7))))

পরীক্ষার মামলাগুলি আদর্শে রয়েছে

পাইথন 3, 97 বাইট

lambda r:100*sum(c//3*((v<2)*9+v)+c%3*(v<2or(v==5)/2)for v,c in enumerate(map(r.count,range(7))))

3

রুবি, 80 78 বাইট

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

@ ইজরাস্ট থেকে -2 বাইট।

->d{s=0;7.times{|i|c=d.count i;i<2&&i=10;s+=c>2?c/3*i*100:1>i%5?c%3*i*10:0};s}

1
এটি আমাকে একটি সিনট্যাক্সেরর দেয়। আমি মনে করি আপনার প্রথম কোলনের পরে স্থান দরকার।
জর্দান

@ জর্দান যদিও এটি repl. এ এটি দুর্দান্ত কাজ করেছে তা এখনও ভেঙে গেছে ... এটি ঠিক আছে, যুক্তিটির আর কোনও প্রয়োজন না হওয়ার জন্য আমি পুনরায় সাজিয়েছি
মান কালি

i<2&&i=10আপনাকে 2 বাইট বাঁচায়
এজাস্ট

2

হাস্কেল, 130 123 বাইট

এটি হাস্কেলের পক্ষে চ্যালেঞ্জ নয় । আমি এই গল্ফ মধ্যে।

@ নিমিকে ধন্যবাদ

import Data.List
f=g.sort
g(x:a@(y:z:b))|x>z=j x+g a|0<1=100*h x+g b
g(x:y)=j x+g a
g _=0
h 1=10
h x=x
j 1=100
j 5=50
j _=0

2

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

x=>x.map(v=>s+=v*(((z+=1<<v*3)>>v*3&7)%3?v-5?v-1?0:10:1:v-5?v-1?10:80:8),s=z=0)|10*s

পরীক্ষার কেস:

let F =
x=>x.map(v=>s+=v*(((z+=1<<v*3)>>v*3&7)%3?v-5?v-1?0:10:1:v-5?v-1?10:80:8),s=z=0)|10*s

console.log(F([1, 2, 3, 4, 5, 6])); // 150
console.log(F([1, 1, 1, 2, 3, 5])); // 1050
console.log(F([1, 1, 1, 1, 1, 1])); // 2000
console.log(F([2, 2, 2, 2, 2, 2])); // 400
console.log(F([6, 6, 1, 5, 5, 6])); // 800
console.log(F([2, 3, 4, 6, 2, 4])); // 0
console.log(F([1, 5, 1, 5, 1, 5])); // 1500
console.log(F([5, 5, 5, 5, 2, 3])); // 550
console.log(F([1, 1, 1, 1, 1, 5])); // 1250
console.log(F([3, 3, 4, 4, 3, 4])); // 700


1

পাইথন 3, 131 বাইট

lambda r,C=list.count:sum([x%7*100,1e3][x%7<2]*(C(r,x%7)>2and not exec('r.remove(x%7);'*3))for x in range(14))+50*C(r,5)+100*C(r,1)

এটি ল্যাম্বডা এক্সপ্রেশন; এটি ব্যবহার করতে, প্রিপেন্ডিংয়ের মাধ্যমে নির্ধারিত করুন f=

আমরা প্রথমে দ্বিগুণ (মডিউলাস ব্যবহার করে) ত্রুটিগুলি যাচাই করে ত্রিগলগুলি সরানোর সময় সরিয়ে ফেলি; তারপরে আমরা কেবল সংখ্যা 5এবং 1স্কোরগুলিতে যুক্ত করে তা ফিরিয়ে দেব।

আইডিয়নে চেষ্টা করে দেখুন! (সমস্ত পরীক্ষার কেস সহ)

আমার পুরানো পাইথন 2 জমা দেওয়া এখানে:

পাইথন 2, 176 172 171 145 136 134 133 বাইট

def e(r):s=x=0;exec'x+=1;a=x%7;\nif r.count(a)>2:exec"r.remove(a);"*3;s+=[a*100,1e3][a<2]\n'*14;C=r.count;s+=50*C(5)+100*C(1);print s

পাইথন 2 সমাধানে একটি বাইট সংরক্ষিত হয়েছে @ এমবম্ব007 এর জন্য ধন্যবাদ!


print sপাইথন 2
mbomb007

@ mbomb007 ধন্যবাদ! আমি এটিকে সম্পাদনা করব
কপার

1

বেস (সেড + বিসি) 161

sed -re's/([1-6])(.*)\1(.*)\1/\100\2\3/g;s/([1-6])( .*)\1( .*)\1/\100\2\3/g;s/10/1/g; s/1/100/g;s/5( |$)/50 /g;s/[1-6][^0]//g;s/ +/+/g;s/(^\+|\+$)//g;s/^$/0/'|bc

আমি সেডে এটি করতে চেয়েছিলাম, তবে সংযোজন সত্যিই কঠিন ...

ব্যাখ্যা:

  1. একটি ট্রিপলেট সন্ধান করুন, 00প্রথম সংখ্যাটিতে যুক্ত করুন এবং অন্যটি
    যেমন 1 2 1 3 1 4-> মুছে ফেলুন100 2 3 4
  2. দুটি ত্রিগুণ থাকলেও পদক্ষেপ 1 পুনরাবৃত্তি করুন
  3. প্রতিস্থাপন 10সঙ্গে 1তারপর 1সঙ্গে 100
    যেমন 100-> 10-> 1000বা 1-> 1->100
  4. প্রত্যেকের সাথে 5অনুসরণ না করে প্রতিস্থাপন করুন050
  5. শেষ হয় না এমন কোনও নম্বর সরান 0
  6. এর সাথে স্পেসের গ্রুপগুলি প্রতিস্থাপন করুন +
  7. নেতৃস্থানীয় এবং অনুসরণকারী +গুলি সরান
  8. যদি স্ট্রিংটি খালি থাকে তবে একটি যুক্ত করুন 0
  9. সব শেষ করার bcজন্য শেষ পর্যন্ত পাইপ ।

1

পার্ল, 69 বাইট

জন্য +2 অন্তর্ভুক্ত -ap

এসটিডিআইএন ইনপুট দিয়ে চালান:

dice10000.pl <<< "5 1 1 1 1 1"

dice10000.pl:

#!/usr/bin/perl -ap
$_=join 0,sort@F,A;print;s%(10|\d)\1\1|10|5%$n+=$1.0||$&%eg;$_=$n.0

এটি "2 2 2 2 2 2" এর মতো
কোনও ইনপুটটির

0

সি # (.নেট কোর) , 228 227 বাইট

class A{static void Main(string[] a){int[] x=new int[7];int i=0,s=0;for(;i<6;i++)x[int.Parse(a[i])]++;while(i>0){while(x[i]>2){s+=i>1?10*i:100;x[i]-=3;}i--;}while(x[1]-->0)s+=10;while(x[5]-->0)s+=5;System.Console.Write(s*10);}}

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

আমার মনে হয় আমি অনেক, অনেক সম্ভাব্য অপ্টিমাইজেশন এখানে অনুপস্থিত করছি, কিন্তু আমি করেনি একটি বাইট সংরক্ষণ শেষে 10 দ্বারা গুন দ্বারা। ইনপুট পৃথক কমান্ড লাইন আরগ হিসাবে পাস করা উচিত should


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