Noel Baba'nın Kararı


29

Noel Baba'nın Kararı:

Bu mücadelede, Noel Baba'nın listesindeki birinin yaramaz ya da kibar olup olmadığına karar vermesine yardımcı olacak ve daha sonra coalya da alacaksın toys.

Fakat ne yazık ki, Noel Baba örgütlenmemiş durumda, bazı girişlerinde naughty, nice ve namealanları yanlış sırada.

Giriş

Girdi aşağıdaki değiştirilebilir formatta gelecek:

  • kişinin adı (yalnızca iki nokta üst üste içeremez a-zA-Z0-9)
  • naughtydirekt olarak bir sömürge ve Santa'nın sizi yaramaz yakalama miktarını temsil eden negatif olmayan bir tam sayı izleyen kelime
  • nicedirekt olarak bir sömürge ve Noel Baba'nın seni iyi yakalama zamanını temsil eden negatif olmayan bir tamsayı izleyen kelime

Hepsi, aralarında tek bir boşlukla (ASCII 32) ayrılmıştır.

Ek olarak, adın Santa Claus-> bölümleri arasında boşluk kalmaz SantaClaus.

Bonus:

  • (25%) : Noel Baba, bu yüzden listeyi iki kez kontrol etmesi ve kopya olmadığından emin olması gerekiyor. (Bu durumda, kullanıcının sahip olduğu ilk puanları alır)

Örnek:

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

Çıktı:

Çıktı şunlardan oluşmalıdır:

Ardından gelen kişinin adı:

  • Daha fazla puan varsa naughtyo zaman coal:
  • Eğer daha fazla puan varsa niceo zaman toys.
  • Ama eğer naughtyve nicesonra eşittirneeds more data

    Örnek çıktı:

  • Organizasyon bonusu ve çift kaldırma bonusu ile:

Quill coal
Doorknob toys
balpha needs more data
pops toys
  • Bonus olmadan:

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

En düşük bayt sayısı kazanır!


4
Test vakalarında da bir yazım hatası var. Görkemli modumuz DorkNoob'un ismini yanlış yazdın : ^)
FryAmTheEggman

9
@FryAmTheEggman ಠ_ಠ
Doorknob

2
Hayır, yaramaz veya hoş geçerli isimler
Quill

1
Bu iyi bir fikir ... Sanırım bir dahaki sefere her zaman var ...
Quill

1
“Balpha'nın daha fazla veriye ihtiyacı var” .
Adam Davis

Yanıtlar:


4

Pyth, 68 bayt -% 25 = 51

V.zI-hA.g}\:kcNdY=+YGjd+G@c"needs more data
coal
toys"b._-Fmsecd\:SH

Çevrimiçi deneyin: Gösteri


5

Julia, 176 169 bayt

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

Bu bir dizgeyi kabul eden ve sonucu STDOUT'a basan isimsiz bir fonksiyondur. Aramak için bir isim verin, örneğin 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

Ruby, 144 123 155 * .75 = 116.25 bayt

->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])}}

grepYöntem önerdiği için histocrat'a teşekkürler .

164 * .75 = 123 bayt

->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 bayt

->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]
      )
  }
}

Kullanımı:

# 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[?:]}golf olabilir.grep(/:/)
histokrat

@ histokrat Vay ben tamamen bu yöntemi unuttum. :) Teşekkürler
Vasu Adari

3

Perl, 138 113 105 103 102 96 -% 25 = 72

için +1 içerir -p

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

Daha az golf oynadı:

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 güncellemesi
    • değişken adından niceveya naughtydeğişken adından 1 harf kullanarak 25 bayt tasarruf edin ;
    • ad son olduğunda hatayı düzelterek 5 bayt gevşek
  • güncelleme 105<=> , çıkış dizelerinin bir listesini indekslemek için 8 bayt kaydetmeyi sağlar .
  • güncelleme 103 çıktı dizesini eklemek için regex kullanarak kaydetme 2 bayt
  • güncelleme 102 , 2. harf yerine niceveya son harfi kullanarak 1 byte tasarruf eder naughty.
  • güncelleme 96$$_ ? ... : ($$_++, ...) içine kaydeterek 6 bayt kaydet $$_++ ? ... : ...
    (neden daha önce görmedim).

2

JavaScript (ES6), 174 bayt -% 25 bonus = 130.5 puan

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``

açıklama

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

Ölçek



2

Lua, 329 Bayt -% 25 bonus = 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

Ungolfed sürümünde düzenleme yapacak ve açıklamalar sonra biraz yorgun. Tüm girdiler boşlukla ayrılmış, komut satırından alınır.


2

Python 2,206 bayt -% 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

JavaScript (ES6) 120 (% 160-25)

Şablon dizgilerini kullanan anonim işlev, önemli ve bayt sayısına dahil edilen 4 yeni satır var.

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``
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.