গাজর জনপ্রিয়তার পরিসংখ্যান


27

ইন PPCG chatroom উনবিংশ বাইট , ক্যারেট ব্যবহার ^(বা গাজর ) যা নির্দেশ করে আপনি শুধু পুলিশের উপরে পূর্বে টি মন্তব্য করা এক সঙ্গে একমত একটি উপায়।

একটি ক্যারেট বার্তাটি কেবলমাত্র এন ^অক্ষর দ্বারা গঠিত (যেখানে এন ইতিবাচক পূর্ণসংখ্যার) এবং এর অর্থ এনথের পূর্ববর্তী বার্তাটির সাথে চুক্তি। সুতরাং একটি একক ^অর্থ অবিলম্বে পূর্ববর্তী বার্তাটির সাথে ^^চুক্তি , অর্থ বার্তাটির সাথে দুটি লাইন আপ ^^^চুক্তি , মানে বার্তাটির সাথে তিনটি লাইন আপ চুক্তি এবং এই জাতীয়।

অধিকন্তু, যখন একটি ক্যারেট বার্তা এক্স চুক্তিতে থাকে (ওরফে ইঙ্গিত করে) অন্য ক্যারেট বার্তা ওয়াইয়ের সাথে থাকে, তখন এক্সকে ওয়াইয়ের সাথে চুক্তি স্বাক্ষরিত বলে মনে হয়। এর একাধিক স্তর থাকতে পারে এবং শেষ পর্যন্ত সমস্ত ক্যারেট বার্তাগুলি একটি নন-ক্যারেট বার্তার সাথে চুক্তির ইঙ্গিত দিচ্ছে।

উদাহরণস্বরূপ, যদি কোনও চ্যাট ট্রান্সক্রিপ্টটি এর মতো দেখায়: (প্রতি লাইনে একটি বার্তা)

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]

তারপরে 1, 2 এবং 6 টি লাইনগুলি অ-ক্যারেট বার্তা এবং অন্য সমস্তগুলি ক্যারেট বার্তাগুলি যা অ-যত্নশীল বার্তাগুলি নির্দেশ করে:

  • লাইন 3 লাইন 2 সরাসরি পয়েন্ট।
  • লাইন 4 পয়েন্ট সরাসরি লাইন 1।
  • লাইন 5 লাইন 3 পয়েন্ট, যা লাইন 2 পয়েন্ট।
  • লাইন 7 লাইন 6 পয়েন্ট।
  • লাইন 8 লাইন 5 পয়েন্ট, যা লাইন 3 পয়েন্ট, কোন লাইন 2 পয়েন্ট।
  • লাইন 9 লাইন 7 পয়েন্ট, যা লাইন 6 পয়েন্ট।

সুতরাং, অ-যত্নহীন বার্তাটি লিখেছেন এমন ব্যবহারকারীদের (এবং ধরে নিই যে লোকেরা তাদের নিজস্ব বার্তা যত্নবান করে না) সহ আমরা এই সিদ্ধান্তে পৌঁছাতে পারি:

  • 2 জনের সাথে একমত I like dogs(লাইন 1 এবং 4)
  • 4 জন লোক এর সাথে একমত I like cats(লাইনের 2, 3, 5 এবং 8)
  • 3 জন লোক এর সাথে একমত I like turtles(লাইন 6, 7 এবং 9)

চ্যালেঞ্জ

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

প্রতিটি লাইনের কমপক্ষে একটি অক্ষর থাকবে এবং সেখানে কমপক্ষে একটি লাইন থাকবে। সমস্ত বার্তাগুলি হ'ল সম্পূর্ণরূপে অন্তর্ভুক্ত ক্যারেট বার্তাগুলি হবে ^, বা অক্ষর এবং ফাঁকা স্থানগুলি ( [ a-zA-Z]+রেজেক্সে) সহ নন-ক্যারেট বার্তা হবে ।

প্রতিটি অ-ক্যারেট বার্তার জন্য, যে কোনও ক্রমে, এর সাথে একমত হওয়া লোকের সংখ্যাকে আউটপুট করুন যাতে ম্যাসেজের পাঠ্য রয়েছে এমন কিছু পরিষ্কার ফর্ম্যাটে

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

অথবা

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

অথবা

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

আপনি ধরে নিতে পারেন:

  • লোকেরা সর্বদা তাদের নিজস্ব বার্তাগুলির সাথে একমত হয় এবং নিজের যত্ন করে না।
  • দুটি অ-ক্যারেট বার্তা অভিন্ন নয়।
  • ক্যারেট বার্তাগুলি প্রথম বার্তার আগে জিনিসগুলিকে নির্দেশ করবে না।
  • লাইনে শীর্ষস্থানীয় বা পিছনের স্থানগুলি থাকবে না।

বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী।

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

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
পরের বছর, আমরা ইউনিকোড দিয়ে এই সমস্যাটি সমাধান করতে পারি: blog.unicode.org/2015/05/unicode-90-candidate-emoji.html # 1F955 গাজর
রবার্ট ফ্রেজার

👆 @ রবার্টফ্রেজার
DDPWNAGE

উত্তর:


11

সিজেম, 18

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

2 বাইটগুলি মার্টিনকে ধন্যবাদ মুছে দিয়েছে :)
এটি অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

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

পাইথ, 19 18 বাইট

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

প্রদর্শন

অ্যাডিটসুতে বিশেষত রেলের অংশের সাথে একই রকম দৃষ্টিভঙ্গি।

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

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

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

ব্যাখ্যা

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
)

পরীক্ষা


2

গণিত, 83 77 বাইট

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

2

রুবি 89

m={}
v={}
i=0
$<.map{|l|(t=l.chop![/\^+/])?v[m[i]=o=m[i-t.size]]+=1:v[m[i]=l]=1;i+=1}
p v

এটি এমন একটি প্রোগ্রাম যা এসটিডিআইএন থেকে ইনপুট আসে এবং ফলাফলটি মুদ্রণ করে। এটা তোলে পরিবর্তনশীল বার্তা এবং তাদের ভোট গণনা ট্র্যাক রাখে v, যা একটি হল Hash

অনলাইন ডেমো:


2

পাইথন 2.7 - 122 114 বাইট

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]

বেশ সর্বাধিক সরল সমাধান সেখানে এবং বিশেষত গল্ফযুক্ত নয়।


1

পাইথন 2.7 96 বাইট

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

ব্যাখ্যা: l এর ইন-প্লেস ওভাররাইট, প্রতিটি কল l[_] = ...শব্দের প্রতি নির্দেশিত শব্দ, এবং একটি অভিধান ব্যবহার করা হয় ফলাফলকে শুরুর জন্য বা বর্তমান গণনাতে যোগ করে ফলাফলb[l[_]]


আপনি সম্ভবত কিছু বাইট সঙ্গে শেভ করতে পারে for _,i in enumerate(l):
মেগো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.