স্কটের পক্ষে স্কোর কাউন্টার


11

আপনার কাজটি হ'ল একটি ছোট প্রোগ্রাম লেখার জন্য যা স্ক্যাট হাতের পয়েন্টগুলি গণনা করে। একটি স্ক্যাট ডেকের কার্ড রয়েছে 7 থেকে 10, জ্যাক, কুইন, কিং এবং এস (যাকে বলা হয় আনটার, ওবার, কনিগ এবং দাউস)। আমরা জার্মান স্যুট ব্যবহার করি, যেখানে ক্লাব, স্পেডস, হার্টস এবং হীরাগুলির পরিবর্তে অ্যাকর্নস, পাতাগুলি, হার্টস এবং বেল রয়েছে। পয়েন্টগুলি কার্ডের নম্বর দ্বারা নির্ধারিত হয়:

  • 7, 8 এবং 9 0 পয়েন্ট
  • আনটার 2 পয়েন্ট
  • ওবার 3 পয়েন্ট
  • König 4 পয়েন্ট
  • 10 হ'ল 10 পয়েন্ট
  • দাউস 11 পয়েন্ট।

ইনপুট আউটপুট

ইনপুট ফর্ম্যাটটিতে দুটি চিহ্ন রয়েছে, প্রথমটি মানটিকে উপস্থাপন করে, দ্বিতীয়টি স্যুটটির জন্য দাঁড়ায়:

  • 7, 8 এবং 9 তাদের নিজের পক্ষে দাঁড়ান
  • 0 (শূন্য) 10 এর জন্য দাঁড়িয়েছে
  • আনটার, ওবার, কনিগ এবং দাউসের নাম তাদের প্রথম অক্ষরের (ইউ, ও এবং ডি) নাম অনুসারে করা হয়েছে
  • আকর্ণ, পাতা, হৃদয় এবং বেলিগুলির জন্য একই (এ, এল, এইচ এবং বি)

ইনপুটটি কার্ডের একটি একক লাইন, একক সাদা স্থানের দ্বারা পৃথক। আপনি যে কোনও জায়গা থেকে ইনপুট নিতে পারেন, কমান্ড লাইনের যুক্তিগুলিও ঠিক আছে। আউটপুটটি হ্যান্ডেলের মান, হয় মুদ্রিত হয় বা প্রস্থান কোড হিসাবে ফিরে আসে। যদি কোনও কার্ড হাতে দু'বার প্রদর্শিত হয় তবে অবশ্যই আপনার প্রোগ্রামের আউটপুটটিতে ত্রুটি দেখাতে হবে। (সুতরাং এর 7A 0L 7Aপরিবর্তে অবশ্যই একটি ত্রুটি ফেরত পাঠানো উচিত 10)। ফলাফলটি আউটপুট দেওয়ার জন্য এটি যদি আপনার প্রোগ্রামের ডিফল্ট উপায় হয় তবে কোনও ত্রুটি দেখানোর পরিবর্তে 255 এর একটি প্রস্থান কোড দিয়ে প্রস্থান করাও ঠিক।

উদাহরণ

  • 7A 8A 9A UA OA KA 0A DA 7L 8L 9L UL OL KL 0L DL 7H 8H 9H UH OH KH 0H DH 7B 8B 9B UB OB KB 0B DB120 দেয়
  • 7A 8L 0K DB 8L একটি ত্রুটি দেয়
  • UA OB DL KH20 দেয়

বিধি

  • কোড গল্ফ: সংক্ষিপ্ততম কোড জিতেছে
  • সাধারণ কোড গল্ফ বিধি প্রযোজ্য
  • প্রোগ্রামটি কেবল উদাহরণ নয়, সকল হাতে কাজ করতে হবে
  • জিআইজিও: যদি ইনপুটটি অবৈধ হয় তবে আউটপুটটি স্বেচ্ছাসেবী হতে পারে

স্টডারারের অতিরিক্ত আউটপুট (যেমন সতর্কতা) ঠিক আছে?
ভেন্টোরো

@ ভেন্তোরো: হ্যাঁ, তাই। যে কোনও উপায়ে ভুল করার উপায় ঠিক আছে, তবে এটি অবশ্যই ব্যবহারকারীর কাছে স্পষ্টভাবে দৃশ্যমান হওয়া উচিত, সেখানে একটি ত্রুটি রয়েছে।
FUZxxl

জ্যাক, কুইন, এবং এসকে আনটার, ওবার, কিং এবং ডাউস বলা হয়? রাজা কি সেখানে থাকার কথা?
রাই-

@ মিনিটেক না, তা নয়।
FUZxxl

2
আমি বিশ্বাস করি আপনার অর্থ "বেলিজ" নয়, "বেলিজ" নয়। খুব আলাদা, যে।
বুথবি

উত্তর:


2

এপিএল ( 54 48)

সেখানে রয়েছে কার্ড মান নির্বাচন করে একটি সংক্ষিপ্ত উপায় হতে, কিন্তু আমি এটা দেখতে না।

(+/12-'D0.....KOU.'⍳⊃¨A)÷A≡∪A←↓A⍴⍨2,⍨2÷⍨⍴A←⍞~' '

DOMAIN ERRORসদৃশ কার্ড থাকলে আপনি একটি পাবেন get

ব্যাখ্যা:

  • A←⍞~' ': স্পেস ( ) ছাড়াই ব্যবহারকারীর ইনপুট ( ) এর লাইনে স্টোর ( ) Aকরুন ।~
  • 2,⍨2÷⍨⍴A: একটি দ্বি-উপাদান তালিকা, ( ) Aদ্বারা দৈর্ঘ্য ( ÷⍨) 2 দ্বারা বিভক্ত , এর পরে ( ) 2 ,⍨সংখ্যা (সুতরাং, যদি ইনপুট হয় UA OB DL KHতবে তালিকাটি (4, 2))।
  • ↓A⍴⍨: ম্যাট্রিক্সকে সংজ্ঞায়িত করুন , সেই তালিকার মাত্রাগুলি সহ, এ এর ​​মান রয়েছে, তারপরে তার সারিগুলির উপাদানগুলিকে একসাথে যোগ করুন ( ), তালিকার একটি তালিকা প্রদান করুন, উদাহরণস্বরূপ ['UA','OB','DL','KH']
  • A←: এ তালিকা সংরক্ষণ করুন।
  • A≡∪A: ∪Aএ-তে অনন্য উপাদানের তালিকা হ'ল এটি যদি এ এর ​​সমান হয় তবে কোনও সদৃশ নেই এবং এটি 1 প্রদান করে, অন্যথায় 0।
  • ÷: সমতা পরীক্ষার ফলাফল দ্বারা বামে কী রয়েছে (যা প্রকৃত গণনা করে) ভাগ করুন। সুতরাং যদি কোনও সদৃশ না থাকে তবে স্কোরটি অপরিবর্তিত রয়েছে এবং যদি সদৃশ থাকে তবে DOMAIN ERRORশূন্য দ্বারা বিভাজনের কারণে আপনি পান ।
  • ⊃¨A: এ এর প্রতিটি উপাদান ( ¨) এর প্রথম উপাদান ( ) প্রদান করে একটি তালিকা । সুতরাং এটি স্যুট লেটারটি ছাড়বে, স্কোর লেটারটি রেখে। ( UODK)
  • 'D0.....KOU.'⍳: এই স্ট্রিংয়ের প্রতিটি স্কোর অক্ষরের সূচি দেয়, স্ট্রিংটিতে নয় মানগুলির জন্য 12 প্রদান করে। ( 10 9 1 8)
  • +/12-: এই 12 টি থেকে সমস্ত বিয়োগ করুন এবং তারপরে এগুলি যুক্ত করুন। ( 2 + 3 + 11 + 4 = 20)


আমি পুরোপুরি মিস করেছি যে আপনার উত্তরটি সবচেয়ে কম।
FUZxxl

10

রুবি 1.9, 52 টি অক্ষর

কমান্ড লাইন আর্গুমেন্টের মাধ্যমে ইনপুট। আমি ত্রুটি বার্তাটি ধরে নিচ্ছি যখন ডুপ্লিকেট কার্ড থাকা কোনও বিষয় নয়, সুতরাং এটি কেবল একটি / টাইপ রূপান্তর ত্রুটি সম্পর্কে অভিযোগ করে।

p eval$*.uniq!||$*.map{|i|"..UOK#$<.0D"=~/#{i}?/}*?+

ব্যবহারের উদাহরণ:

$ ruby1.9 skatscore.rb 7A 8A 9A UA OA KA 0A DA 7L 8L 9L UL OL KL 0L DL 7H 8H 9H UH OH KH 0H DH 7B 8B 9B UB OB KB 0B DB
120

$ ruby1.9 skatscore.rb 7A 7A
skatscore.rb:1:in `eval': can't convert Array into String (TypeError)
    from skatscore.rb:1:in `<main>'

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

1
@ চারেলস: যেহেতু অনুমানটি কেবল একটি ত্রুটির জন্য ডাকে তাই আমি অনুমান করি যে ত্রুটিটি আসলে বেশ অপ্রাসঙ্গিক। এবং যদি কোনও ত্রুটি তৈরির সংক্ষিপ্ত পদ্ধতিগুলি থাকে, তবে তা ঠিক হওয়া উচিত, আমার ধারণা।
জোয়

6

স্কেলা, 87 82 টি অক্ষর

args.distinct(args.size-1);println(args.map(a=>1+" UOK     0D".indexOf(a(0))).sum)

পুনরাবৃত্ত কার্ডগুলিতে একটি ব্যতিক্রম ছুঁড়ে।


4

Haskell,, 122 108 107 টি অক্ষর

import List
main=interact$f.words
f x|nub x==x=show$sum$map(maybe 0 id.(`elemIndex`"  UOK     0D").head)x

error""তুলনায় খাটো undefined। ব্যবহার করে একটি চর সংরক্ষণ করুন interact
FUZxxl

@ ফুজজেক্সএল: interactএটি ব্যবহার করে কোনও নতুন লাইন প্রিন্ট হবে না, সুতরাং এটি গ্রহণযোগ্য কিনা তা আমি নিশ্চিত নই। যাইহোক, পরিবর্তে একটি অসম্পূর্ণ প্যাটার্ন ব্যবহার করে আমি আরও অনেক কিছু সঞ্চয় করতে সক্ষম হয়েছি undefined
হামার

আমি কোথায় বললাম, একটি নতুন লাইনের দরকার আছে? মনে নেই।
FUZxxl

2

গল্ফস্ক্রিপ্ট 54 53 52

সম্পাদনা 1:

আমি সবে কোডে একটি ত্রুটি আবিষ্কার করেছি। ডুপ্লিকেটগুলি ইনপুটটিতে প্রথম দুটি হলে এটি নকল কার্ডগুলি সনাক্ত করতে পারে নি (কারণ আমি *ভাঁজ অপারেটরটি ব্যবহার করছিলাম এবং /প্রতিটি লুপের জন্য প্রতিটি অপারেটর নেই)।

এখন আমি কোডটি স্থির করে দিয়েছি এবং প্রক্রিয়াতে 1 চরটিও ছড়িয়ে দিতে পারি। এখানে নতুন সংস্করণ:

' '/{1$1$?){]?}{\+}if}/2%{"UOK0D"\?).0>+.4>5*+}%{+}*

ইনপুটটি স্ট্রিং হিসাবে একটি স্ট্রিং হিসাবে নির্দিষ্ট ফর্ম্যাটে থাকতে হবে (উদাহরণ '7A UA DA':)।

ইনপুটটি বৈধ হলে প্রোগ্রামটি কার্ডের মোট মান মুদ্রণ করে।

কমপক্ষে একটি সদৃশ কার্ডের ক্ষেত্রে প্রোগ্রামটি নিম্নলিখিত ব্যতিক্রম ছুঁড়ে ফেলেছে:

(eval):1:in `block in initialize': undefined method `class_id' for nil:NilClass (NoMethodError)

সম্পাদনা 2:

মেটা সাইটে এই পোস্টটি দেখার পরে , আমি কোডটির একটি বিবরণ পোস্ট করার সিদ্ধান্ত নিয়েছি। এটি আমাকে ত্রুটি সন্ধান করতে এবং ঠিক করতেও সহায়তা করেছিল। সুতরাং, এখানে যায়:

# Initially, we epect the input string to be on the stack
# Example: "7A UA DA"

' '/            # split the input string by spaces
                # now we have on the stack an array of strings
                # (in our example: ["7A" "UA" "DA"])

# {1$1$?)!{\+}{]?}if}/  -> this piece of code checks for duplicate cards
#
# The trailing symbol (/) is the 'each' operator, meaning that the 
# preceding code block (enclosed in curly brackets) will be executed 
# for every cards in the previous array.
#
# Before each execution of the code block, the current card value
# is pushed on the stack.
#
# Basically what this code does is concatenate cards into a string
# and checks whether the current card is contained in the accumulated
# value.
#
# So, for each card, this is what we execute:

1$              # copies the concatenated string on top of the stack
                # (initially this is an empty string)

1$              # copies the current card on top of the stack

?               # returns (places on the stack) the 0-based index where 
                # the current card is found in the concatenated string
                # or -1 if not found

)               # increments the topmost stack value
                # Now we have 0 if the card is not a duplicate
                # or a value greater than 0 otherwise

{]?}{\+}if      # if the current stack value is non-0 (duplicate)
                # then execute the first code {]?} (generates an error)
                # Otherwise, if the card is valid, execute the {\+} block.
                # What this code does is essentially concatenate the current 
                # card value:
                #    \ -> swaps the two topmost stack values; now we have
                #         the concatenated string and the current card value
                #    + -> this is the concatenation operator

# After the previous code block finishes execution (in case the input is)
# valid, we end up having the concatenated card values on the stack
# In our example, this value is "DAUAUB7A".

# The next code fragment is the one that computes the card values
# This is the code: 2%{"UOK0D"\?).0>+.4>5*+}%{+}*

# And this is how it can be broken down:

2%              # takes only the even indexed chars from the existing string 
                # in our case, "DAUA7A" -> "DU7"
                # Only these characters are important for determining the 
                # card values.

# The following piece of code is:
# {"UOK0D"\?).0>+.4>5*+}%

# This code performs a map; it takes the individual chars,
# computes the corresponding numeric value for each of them and outputs an
# array containing those values

# This is achieved using the map operator (%) which evaluates the preceding 
# code block, delimited by curly braces, so, essentially this is the code that 
# computes the value for a card:
# "UOK0D"\?).0>+.4>5*+
# It can be broken down like this:

"UOK0D"         # pushes the "UOK0D" string on the stack
\               # swaps the two topmost stack values
                # Now, these values are: "UOK0D" and "l" 
                # (where "l" represents the current letter
                # that gives the card its value: U,O,K,0,D,7,8...)

?               # Find the index of the card's letter in the
                # "UOK0D" string.
                # Remember, this is 0-based index, or -1 if not found.

)               # increment the index value
                # Now we have the following value:
                #     1 if the card is U
                #     2 if the card is O
                #     3 if the card is K
                #     4 if the card is 0
                #     5 if the card is D
                #     0 if it is anything else

.0>+            # if the current value is greater than 0,
                # add 1 to it.

.4>5*+          # if the current value is greater than 4,
                # add 5 to it.

# Passing through these steps, we now have the following value:
#     2  if the card is U
#     3  if the card is O
#     4  if the card is K
#     10 if the card is 0
#     11 if the card is D
#     0  if it is anything else
# This is the exact value we were looking for.

# Now we have an array containing the value of each card.
# in our example, [0, 2, 11]
# The next piece of code is easy:

{+}*            # uses the * (fold) operator to add up all the
                # values in the array.

# This leaves the total value of the cards on the stack,
# which is exactly what we were looking for (0+2+11=13).

# Golfscript is awesome! :-)

1

পাইথন, ১১৪ টি অক্ষর

i=input().split();print(sum(int(dict(zip('7890UOKD','000A234B'))[x[0]],16)for x in i)if len(i)<=len(set(i))else'')

দুর্ভাগ্যক্রমে, indexপাইথনের তালিকাগুলির পদ্ধতিটি একটি ত্রুটি উত্থাপন করে যদি কোনও উপাদান নেতিবাচক মান ফেরানোর পরিবর্তে খুঁজে পাওয়া যায় না এবং আমদানি defaultdictকরতে এটি সংরক্ষণের চেয়ে আরও বেশি অক্ষরের প্রয়োজন হয়।


1

eTeX, 201 অক্ষর (দুটি অপ্রাসঙ্গিক লাইনব্রেক গণনা করা হচ্ছে না)

\def~#1#2{\catcode`#113\lccode`~`#1\lowercase{\def~}##1 {\ifcsname
#1##1 ~\D\fi\if\csname#1##1 ~\fi+"#2}}~70~80~90~0A~U2~O3~K4~DB\def
\a[#1]{\let~\endcsname\write6{^^J \the\numexpr#1 }\end}\expandafter\a

হিসাবে ব্যবহৃত হয় etex filename.tex [UA OB DL KH]। যুক্তিটিকে বন্ধনীতে রাখা প্রয়োজনীয়: অন্যথায়, ইটেক্সের এটি নির্ধারণের কোনও উপায় নেই যে আমরা যুক্তি তালিকার শেষের দিকে পৌঁছেছি।

সম্পাদনা: প্রশ্নের বিবৃতিতে অনুমোদিত হিসাবে, ভুল ইনপুট (একটি) ত্রুটি ঘটাতে পারে। উদাহরণস্বরূপ, etex filename.tex [OK]ভয়াবহভাবে ক্র্যাশ হয় (কারণ Kএটি বৈধ রঙ নয়)।


আমার মেশিনে কাজ করে না।
FUZxxl

@FUZxxl। এর আউটপুট কি etex -v? ত্রুটি বার্তাটি কি (মোটামুটিভাবে)? কোডটি কোনও ফাইলে রাখা উচিত (নাম filename.tex, বা অন্য কোনও কিছুর সমাপ্তি সহ .tex), এবং কমান্ড লাইনে সেই নামটি ব্যবহার করুন etex filename.tex [<argument>]। (একই মন্তব্যটি পুনরায় পোস্ট করার জন্য দুঃখিত, আমি ভুলে গিয়েছি " @FUZxxl")
ব্রুনো লে ফ্লাচ

দয়া করে এখানে দেখুন: hpaste.org/48949
FUZxxl

@FUZxxl। আপনার প্রতিক্রিয়ার জন্য ধন্যবাদ। Kকোনও বৈধ রঙ নয়, এবং এটি Xআপনার উদাহরণগুলিতে প্রতিস্থাপন করলে ত্রুটিগুলি মুছে ফেলা হয় (এটি ক্র্যাশ হয় Kকারণ সেই চিঠির আরও একটি অর্থ রাজা)। আমি \stringপ্রতিটি আগে যুক্ত করে ত্রুটিটি কম ভয়াবহ করতে পারি ##1, তবে এটির জন্য আরও 12 টি অক্ষর লাগবে।
ব্রুনো লে ফ্ল্যাচ

দুঃখিত। আমি উদাহরণটি ভুলভাবে লিখেছি। এখন এটা কাজ করে. দুঃখিত।
FUZxxl

1

পাওয়ারশেল, 79 80

($a=$args|sort)|%{$s+=(10,11+4..0)['0DKOU'.IndexOf($_[0])]}
$s/("$a"-eq($a|gu))

নিক্ষেপ করে zero শূন্য দ্বারা ভাগ করার চেষ্টা করা «যদি কার্ড দু'বার প্রদর্শিত হয়।

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