Havuç Popülerliği İstatistikleri


27

In PPCG sohbet odasina Ondokuzuncu Byte carets kullanılarak, ^(veya havuç sadece sizinkilerden yukarıda daha önce yapılan yorumların biriyle kabul ettiğinizi belirten bir yoludur).

Bir şapka mesajı yalnızca N ^karakterden oluşur (burada N pozitif bir tamsayıdır) ve N'in önceki mesajıyla anlaşmak anlamına gelir. Dolayısıyla, tek bir ^mesaj hemen önceki mesajla, ^^yani iki satırlı mesajla ^^^anlaşmayı, üç satırlı mesajla anlaşmayı ve benzeri şeyleri ifade eder.

Ek olarak, bir X harf mesajı anlaşmaya girdiğinde (yani, işaret eden başka bir Y mesajı), X'in, Y ile aynı fikirde olduğu anlaşmaya vardığı söylenir. Bunun birden çok katmanı olabilir ve sonuçta, tüm şapka mesajları bir şapka olmayan mesaj ile anlaşmayı belirtir.

Örneğin, bir sohbet metni aşağıdaki gibi görünüyorsa: (satır başına bir mesaj)

I like dogs           [line 1]
I like cats           [line 2]
^                     [line 3]
^^^                   [line 4]
^^                    [line 5]
I like turtles        [line 6]
^                     [line 7]
^^^                   [line 8]
^^                    [line 9]

Daha sonra, 1, 2 ve 6 numaralı satırlar, şapkasız mesajlardır ve diğerleri, şapka olmayan mesajlara işaret eden şapka mesajlarıdır:

  • Satır 3 doğrudan satıra 2 işaret eder.
  • Satır 4, doğrudan satır 1'e işaret eder.
  • Satır 5, satır 3'e, yani satır 2'ye işaret eder.
  • Satır 7, satır 6'ya işaret eder.
  • Satır 8, satır 3'e, satır 3'e ve satır 2'ye işaret eder.
  • Satır 9, satır 7'ye, yani satır 6'ya işaret eder.

Bu nedenle, imlâ olmayan mesajı yazan kullanıcılar da dahil (ve insanların kendi mesajlarını imlemediğini varsayarsak) şunları yapabiliriz:

  • 2 kişi hemfikirdir I like dogs(Hat 1 ve 4)
  • 4 kişi katılıyorum I like cats(2, 3, 5 ve 8. Satırlar)
  • 3 kişi hemfikirdir I like turtles(Satır 6, 7 ve 9)

Meydan okuma

Her satırın bir sohbet mesajını temsil ettiği yukarıdaki örneğe benzer şekilde çok satırlı bir dizede geçen bir program veya işlev yazın; eski iletiler önce gelir.

Her satır en az bir karakter olacak ve en az bir satır olacak. Tüm mesajlar ya sadece ^'den oluşan ' şapka mesajları 'ya da harflerden ve boşluklardan oluşan imleç olmayan mesajlar olacaktır [ a-zA-Z]+.

Her nota olmayan mesaj için, herhangi bir sırayla, mesaj metnini içeren net bir biçimde kendisiyle aynı fikirde olan kişilerin sayısını, örneğin

2 - I like dogs
4 - I like cats
3 - I like turtles

veya

I like cats (4)
I like dogs (2)
I like turtles (3)

veya

{"I like cats" : 4, "I like turtles" : 3, "I like dogs" : 2}

Bunu varsayabilirsin:

  • İnsanlar her zaman kendi mesajlarına katılırlar ve kendilerini umursamazlar.
  • İki karina olmayan mesaj aynı değildir.
  • Şapka mesajları, ilk mesajdan önce hiçbir şeyi göstermez.
  • Satırlar baştaki veya sondaki boşlukları içermeyecek.

Bayt cinsinden en kısa kod kazanır.

Test Kılıfları

bread is bread

1 - bread is bread

---

animals are fuzzy
^
^
^
^^^
^^
^^^^^^

7 - animals are fuzzy

---

pie
^
^^
pi
^
^^
^^^^
^
^^^^^
^^^^^
^^^
^^^^
^^
^
^^^^^^^^^

9 - pie
6 - pi

---

a
b
c
^
^
^

1 - a
1 - b
4 - c

---

a
b
c
^
^^
^^^

1 - a
1 - b
4 - c

---

a
b
c
^^^
^^^^
^^^^^

4 - a
1 - b
1 - c

---

W
^
^^
X
^^^
^^^^
Y
^^^^^
^^^^^^
Z
^^^^^^^
^^^^^^^^

1 - Y
3 - X
1 - Z
7 - W

---

ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
^
ABCDEFGHIJKLMNOPQRSTUVWXYZ  abcdefghijklmnopqretuvwxyz

2 - ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqretuvwxyz
1 - ABCDEFGHIJKLMNOPQRSTUVWXYZ  abcdefghijklmnopqretuvwxyz

---

I like dogs
I like cats
^
^^^
^^
I like turtles
^
^^^
^^

2 - I like dogs
4 - I like cats
3 - I like turtles


4
Gelecek yıl, bu sorunu unicode ile çözebiliriz: blog.unicode.org/2015/05/unicode-90-candidate-emoji.html # 1F955 havuç
Robert Fraser

R @RobertFraser
DDPWNAGE

Yanıtlar:


11

CJam, 18

qN/{_'^e=$\;}%$e`p

Martin sayesinde 2 bayt ortadan kaldırıldı :)
Çevrimiçi deneyin

Açıklama:

q         read the input
N/        split into lines
{…}%      transform each line as follows:
  _       make a copy
  '^e=    count '^' characters in the string
  $       copy the corresponding earlier line from the stack
           if 0, it copies the current line again
  \;      discard the current line (from before the copied line)
          * after the loop, all caret lines have been replaced
          * with the original messages they agree with
$         sort the messages
e`        RLE encode
p         pretty print

8

Pyth, 19 18 bayt

rSu+G@+HG_/H\^.zY8

gösteri

Aditsu, özellikle rle kısmı için benzer bir yaklaşım.

rSu+G@+HG_/H\^.zY8
  u           .zY      Reduce over the list input lines, starting with [].
                       G is the working value, H is the next input line.
   +G                  Append to the current value
      +HG              H prependeded to G
     @   _/H\^         Indexed at -(H.count('^')). This is H if no carets are in H,
                       or the appropiate distance from the end of G otherwise.
 S                     Sort
r                 8    Run length encode

4

JavaScript (ES6), 110 bayt

x=>(r={},l=x.split`
`,l.map((_,i)=>(a=n=>(m=l[n])[0]=="^"?a(n-m.length):r[m]=r[m]+1||1)(i)),JSON.stringify(r))

açıklama

x=>(
  r={},                   // r = results
  l=x.split`
`,                        // l = array of messages
  l.map((_,i)=>           // check each message
    (a=n=>                // n = index of the message to agree with
      (m=l[n])            // m = message
        [0]=="^"          // if this is a caret message
          ?a(n-m.length)  // agree with the message it points to
          :r[m]=r[m]+1||1 // else add one to this message's agreements
    )(i)
  ),
  JSON.stringify(r)       // return the results as a string
)

Ölçek


2

Mathematica, 83 77 bayt

Tally@#[[Range@Length@#-#~StringCount~"^"//.x_:>x[[x]]]]&@StringSplit[#,"
"]&


2

Python 2.7 - 122 114 bayt

def c(s):
 l=s.split('\n');c=len(l);d=[1]*c
 while c:
  c-=1
  if'^'in l[c]:d[c-len(l[c])]+=d[c]
  else:print l[c],d[c]

Neredeyse en basit çözüm var ve özellikle golf oynamıyor.


1

Python 2.7 96 bayt

l=s.split();b={}
for i in l:_=l.index(i);l[_]=l[_-i.count('^')];b[l[_]]=b.get(l[_],0)+1
print b

açıklama: yerinde l'nin üzerine yazıldığında, her aramada l[_] = ...işaret edilen sözcüğü saklar ve söz konusu sonuçları, geçerli sayıma başlatılarak veya eklenerek hesaplamak için kullanılan bir sözlük kullanılır.b[l[_]]


Muhtemelen bazı baytları tıraş edebilirsiniz for _,i in enumerate(l):.
Mego
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.