সান্তার সিদ্ধান্ত


29

সান্তার সিদ্ধান্ত:

এই প্রতিদ্বন্দ্বিতায়, আপনাকে সাহায্য করবে স্যান্টাক্লজ সিদ্ধান্ত নেন তাদের তালিকায় কারো দুষ্ট অথবা সুন্দর হয়েছে কিনা, এবং পরবর্তীকালে পেতে coalবা toys

তবে দুর্ভাগ্যক্রমে, সান্তা অসংগঠিত, তার কয়েকটি এন্ট্রিতে naughty, nice এবং nameক্ষেত্রগুলি ভুল ক্রমে রয়েছে।

ইনপুট

ইনপুট নিম্নলিখিত, বিনিময়যোগ্য বিন্যাসে আসবে:

  • ব্যক্তির নাম (কেবল কোনও কোলন থাকতে পারে না a-zA-Z0-9)
  • শব্দটি naughtyসরাসরি কোলন এবং একটি অ-নেতিবাচক পূর্ণসংখ্যার প্রতিনিধিত্ব করে যা সান্টা আপনাকে দুষ্টু হওয়ার সময় ধরেছিল caught
  • শব্দটি niceসরাসরি কোলন এবং একটি অ-নেতিবাচক পূর্ণসংখ্যার দ্বারা উপস্থাপিত হয় যা সান্টা আপনাকে কতটা সুন্দর বলে ধরেছিল represent

তাদের প্রত্যেকের মধ্যে একটি একক সাদা স্থান (এএসসিআইআই 32) দিয়ে আলাদা করা হয়েছে।

অতিরিক্তভাবে, নামের অংশের Santa Claus-> অংশের মধ্যে কোনও সাদা জায়গা নেই SantaClaus

বোনাস:

  • (25%) : তিনি সান্তা ক্লজ, তাই তাকে তালিকাটি দুবার পরীক্ষা করে দেখতে হবে এবং কোনও নকল নেই তা নিশ্চিত করে নিন। (কোন ক্ষেত্রে এটি ব্যবহারকারীর প্রথম স্কোর পেয়েছে)

উদাহরণ:

Quill naughty:4 nice:0
naughty:0 Doorknob nice:3
naughty:2 Quill nice:6
nice:3 balpha naughty:3
pops nice:4 naughty:2

আউটপুট:

আউটপুটটি সমন্বিত হওয়া উচিত:

ব্যক্তির নাম অনুসরণ করে:

  • যদি আরও বেশি পয়েন্ট থাকে naughtyতবে coal:
  • যদি আরও পয়েন্ট থাকে niceতবে toys
  • তবে naughtyএবং niceযদি সমান হয়, তবেneeds more data

    উদাহরণ আউটপুট:

  • সংস্থার বোনাস এবং সদৃশ অপসারণ বোনাস সহ:

Quill coal
Doorknob toys
balpha needs more data
pops toys
  • বোনাস ছাড়াই:

Quill coal
Doorknob toys
Quill toys
balpha needs more data
pops toys

সর্বনিম্ন বাইট গণনা জয়!


4
পরীক্ষার ক্ষেত্রে একটি টাইপও রয়েছে। আপনি আমাদের গৌরবময় মোড ডর্কনুব এর নাম ভুল বানান করেছেন : ^)
FryAmTheEggman

9
@FryAmTheEggman ಠ_ಠ
Doorknob

2
নাহ, দুষ্টু বা সুন্দর বৈধ নাম
কুইল

1
এটি একটি ভাল ধারণা ... আমি অনুমান করি পরের বার সর্বদা ...
কুইল

1
"বাল্ফার আরও ডেটা প্রয়োজন" এটি সঠিক সম্পর্কে শোনাচ্ছে।
অ্যাডাম ডেভিস

উত্তর:



5

জুলিয়া, 176 169 বাইট

s->for l=split(s,"\n") M(r)=parse(matchall(r,l)[1]);g=M(r"e:\K\d+");b=M(r"y:\K\d+");println(replace(l,r" *\w+:\d+ *","")," ",g>b?"toys":b>g?"coal":"needs more data")end

এটি একটি বেনাম ফাংশন যা একটি স্ট্রিং গ্রহণ করে এবং ফলাফলটি STDOUT এ মুদ্রণ করে। এটি কল করার জন্য, এটির একটি নাম দিন f=s->...

Ungolfed:

function santa(s::AbstractString)
    # Split the input on newlines and process each line separately
    for l in split(s, "\n")
        # Define a function to get the number from the result of a
        # regular expression match
        M(r) = parse(matchall(r, l)[1])

        # Goodness
        g = M(r"e:\K\d+")

        # Badness
        b = M(r"y:\K\d+")

        # Get the name by replacing the naughty and nice specifications
        # with empty strings and print the line to STDOUT
        println(replace(l, r" *\w+:\d+ *", ""), " ",
                g > b ? "toys" : b > g ? "coal" : "needs more data")
    end
end


3

রুবি, 144 123 155 * .75 = 116.25 বাইট

->s{d={}
s.split("
").map{|l|
a=l.split
b=a.grep /:/
i,j,v=(b.sort*'').scan(/\d+/)+a-b
d[v]||(d[v]=0
puts v+' '+['needs more data','coal','toys'][i<=>j])}}

grepপদ্ধতির পরামর্শ দেওয়ার জন্য হিস্টোক্র্যাটকে ধন্যবাদ ।

164 * .75 = 123 বাইট

->s{d={}
s.split("
").map{|l|
a=l.split
b=a.select{|t|t[?:]}
i,j,v=(b.sort*'').scan(/\d+/)+a-b
d[v]||(d[v]=0
puts v+' '+['needs more data','coal','toys'][i<=>j])}}

144 বাইট

->s{puts s.split("
").map{|l|b=(a=l.split).select{|t|t[?:]};i,j=(b.sort*'').scan(/\d+/);(a-b)[0]+' '+['needs more data','coal','toys'][i<=>j]}}

Ungolfed

->s{
  d={}
  s.split("
  ").map{ |l|
    a = l.split
    b = a.grep /:/
    i, j, v = (b.sort * '').scan(/\d+/) + a-b
    d[v] ||
      (d[v]=0
       puts v + ' ' + ['needs more data','coal','toys'][i<=>j]
      )
  }
}

ব্যবহার:

# Assign the anonymous function to a variable
f = ->s{d={}
s.split("
").map{|l|
a=l.split
b=a.grep /:/
i,j,v=(b.sort*'').scan(/\d+/)+a-b
d[v]||(d[v]=0
puts v+' '+['needs more data','coal','toys'][i<=>j])}}

f["Quill naughty:4 nice:0
naughty:0 Doorknob nice:3
naughty:2 Quill nice:6
nice:3 balpha naughty:3
pops nice:4 naughty:2"]

Quill coal
Doorknob toys
balpha needs more data
pops toys

.select{|t|t[?:]}গল্ফ করা যায়.grep(/:/)
হিস্টোক্র্যাট

@ হিস্টোরোকট বাহ আমি সেই পদ্ধতিটি পুরোপুরি ভুলে গেছি। আপনাকে ধন্যবাদ :)
ভাসু আদারি

3

পার্ল, 138 113 105 103 102 96 - 25% = 72

+1 এর জন্য অন্তর্ভুক্ত -p

s/ *\w*(.):(\d+) */$$1=$2,()/eg;$$_++?$_='':s/\n/$".('needs more data',toys,coal)[$e<=>$y].$&/e

কম গল্ফড:

s/ *\w*(.):(\d+) */$$1=$2,()/eg;    # strip naughty/nice, set $a to naughty, $i to nice
                                    # $_ is now the input name followed by \n
$$_++ ? $_='' :                     # only output once per name
s/\n/                               # replace newlines with:
  $".                               # a space,
  ('needs more data',toys,coal)     # one of these strings,
  [$e<=>$y]                         # indexed by -1, 0 or 1
  .$&                               # and the matched newline.
/ex                                 # (/x only for legibility)

  • 113 আপডেট
    • পরিবর্তনশীল নাম থেকে niceবা naughtyহিসাবে 1 অক্ষর ব্যবহার করে 25 বাইট সংরক্ষণ করুন ;
    • নাম শেষ হলে বাগ ঠিক করে 5 টি বাইট আলগা করুন
  • <=>আউটপুট স্ট্রিংগুলির একটি তালিকা সূচী ব্যবহার করে 105 সংরক্ষণ 8 বাইট সংরক্ষণ করুন update
  • আউটপুট স্ট্রিং সংযোজন করতে regex ব্যবহার করে 103 সেভ 2 বাইট আপডেট করুন
  • ২ য় এর পরিবর্তে niceবা এর naughtyপরিবর্তে 102 টি 1 বাইট সংরক্ষণ করুন ।
  • আপডেট করুন 96 বাঁচাতে 6 বাইটগুলিতে পরিবর্তন $$_ ? ... : ($$_++, ...)করে $$_++ ? ... : ...
    (কেন আমি এটি আগে দেখিনি)।

2

জাভাস্ক্রিপ্ট (ES6), 174 বাইট - 25% বোনাস = 130.5 স্কোর

s=>s.split`
`.map(l=>l.split` `.map(p=>(m=p.match(/\w:\d+/))?(n=+m[0].slice(2),m>"f")?b=n:c=n:a=p)&&d[a]?"":d[a]=a+" "+(b>c?`coal
`:b<c?`toys
`:`needs more data
`),d={}).join``

ব্যাখ্যা

s=>
  s.split`
`.map(l=>                   // for each line l of Santa's list
    l.split` `.map(p=>      // for each word p in l
      (m=p.match(/\w:\d+/)) // m = "y:x" for naughty, "e:x" for nice or null for name
        ?(n=+m[0].slice(2), // n = number at end of match
          m>"f")?b=n:c=n    // if naughty matched b = n, if nice matched c = n
        :a=p                // if no match, a = name
    )
    &&d[a]?"":              // if the name has been used before, add nothing to output
    d[a]=                   // else set d[name] to true

      // Add the appropriate text to the output
      a+" "+(b>c?`coal
`:b<c?`toys
`:`needs more data
`),

    // NOTE: This line is executed BEFORE the code above it in the map function...
    d={}                    // d = list of names that have been output
  )
  .join``                   // return the list of outputs as a string

পরীক্ষা



2

লুয়া, 329 বাইট - 25% বোনাস = 246.75

a={...}p={}u=" "k=ipairs for i=1,#a/3 do p[i]={}end for i,v in k(a)do p[math.floor((i+2)/3)][(v:find("y:")and 3)or(v:find("e:")and 2)or 1]=v:gsub("%a+%:","")end for i,v in k(p)do d=tonumber b,g,n=d(v[3]),d(v[2]),v[1]if(not u:find(" "..n.." "))then u=u..n.." "print(n..(g<b and" coal"or g>b and" toys"or" needs more data"))end end

নিরবচ্ছিন্ন সংস্করণ এবং ব্যাখ্যাগুলিতে পরে সম্পাদনা করবে, এই মুহুর্তে কিছুটা ক্লান্ত। সমস্ত ইনপুট কমান্ড লাইনের মাধ্যমে নেওয়া হয়, স্থান পৃথক করা হয়।


2

পাইথন 2, 206 বাইট - 25% = 154.5

s=[]
x=[0,0]
for p in zip(*(iter(input().split()),)*3):
 for w in p:
  j=w.find(':')+1
  if j:x[j<6]=int(w[j:])
  else:N=w
 b,g=x
 if N not in s:print N,['needs more data','coal','toys'][(b>g)-(g>b)];s+=[N]

2

জাভাস্ক্রিপ্ট (ES6) 120 (160-25%)

টেম্পলেট স্ট্রিংগুলি ব্যবহার করে বেনামে ফাংশন, সেখানে 4 টি নতুন লাইন রয়েছে যা উল্লেখযোগ্য এবং বাইট গণনাতে অন্তর্ভুক্ত

l=>l.split`
`.map(r=>k[r=r.replace(/\S+:(\d+)/g,(a,c)=>(t-=a[1]<'i'?c:-c,''),t=0).trim()]?'':k[r]=r+(t>0?` toys
`:t<0?` coal
`:` needs more data
`),k={}).join``
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.