ক্রমিক ভোটদান সনাক্তকরণ


51

স্ট্যাক এক্সচেঞ্জ স্বয়ংক্রিয়ভাবে সিরিয়াল ভোটিং সনাক্ত করে (যখন কোনও ব্যবহারকারী অন্য ব্যবহারকারীর অনেকগুলি পোস্টকে উপবিষ্ট করে বা ডাউনভোট করে) এবং এর বিপরীত হয়। এই চ্যালেঞ্জের মধ্যে আপনি একটি খুব, খুব সাধারণ "সিরিয়াল ভোট" সনাক্তকারী প্রয়োগ করবেন।

ইনপুট

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

ababbccd

যেমন পার্স করা যাবে ab ab bc cd, এবং প্রতিনিধিত্ব aভোট bদুইবার, bভোট cএকবার, এবং cভোট dএকবার।

ইনপুটটিতে কেবল ছোট হাতের অক্ষর থাকবে এবং এটি সর্বদা একটি দৈর্ঘ্য> 0 হবে You আপনি নিজের পক্ষেও ভোট দিতে পারবেন না (তাই না aaবা না hh)।

আউটপুট

এই চ্যালেঞ্জের উদ্দেশ্যে, ক্রমিক ভোটদানটি অন্য যে কোনও ব্যবহারকারীর উপর তিন বা ততোধিক বার প্রদত্ত কোনও ভোটার হিসাবে সংজ্ঞায়িত করা হয়েছে।

আউটপুট কত ভোট (যেমন, কত ভোট প্রত্যেক ব্যবহারকারীর জন্য বিপরীত উচিত উপর প্রত্যেক ব্যবহারকারীর হিসাব উল্টে গিয়েছিল, না কত ভোট যে তারা দিয়েছি বিপরীত হয়), বিন্যাসে [user][votes][user2][votes2]...। উদাহরণস্বরূপ, একটি ইনপুট abababab( চার বার aভোট দেওয়া b) আউটপুট করা উচিত b4(চারটি ভোট থেকে বিপরীত aহয়েছে b)।

আউটপুট আপনার পছন্দ মতো কোনও ক্রম হতে পারে তবে উপরোক্ত বর্ণিত হিসাবে ইনপুট এবং আউটপুট উভয়ই একক স্ট্রিং হতে হবে।

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

In                            Out
---------------------------------------------------------------------------
abababcbcbcbcbbababa          b7a3
edfdgdhdfgfgfgih              g3
jkkjjkkjjkkjljljljmlmlnmnmnm  j6k3m3
opqrstuv                      <none>
vwvwwvwv                      <none>
xyxyxyxyxyxyxyzyzyzyxzxzxz    y10z3
nanananananananabatman        a8
banana                        <none>

16
nanananananananabatmanপরীক্ষার ক্ষেত্রে +1 ।
নয়

উত্তর:


6

পাইথ, 22 বাইট

pM_srSsfttTtMM.gkcz2 8

এটি অনলাইনে ব্যবহার করে দেখুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা:

pM_srSsfttTtMM.gkcz2 8
                 cz2     chop the input into pairs
              .gk        group these pairs by their value
           tMM           discard the first char in each pair in each group
       fttT              discard all groups, that contain less than three pairs
      s                  concatenate all groups to get a list of chars
     S                   sort all chars
    r                8   run-length-encoding
   s                     concatenate all (count,char) pairs 
  _                      reverse the order
pM                       print each element without separator

উদাহরণ:

input:   ededgdhdfgfgfgihed
chop:    ['ed', 'ed', 'gd', 'hd', 'fg', 'fg', 'fg', 'ih', 'ed']
group:   [['ed', 'ed', 'ed'], ['fg', 'fg', 'fg'], ['gd'], ['hd'], ['ih']]
discard: [['d', 'd', 'd'], ['g', 'g', 'g'], ['d'], ['d'], ['h']]
discard: [['d', 'd', 'd'], ['g', 'g', 'g']]
concat.: ['d', 'd', 'd', 'g', 'g', 'g']
sort:    ['d', 'd', 'd', 'g', 'g', 'g']
rle:     [[3, 'd'], [3, 'g']]
concat.: [3, 'd', 3, 'g']
reverse: ['g', 3, 'd', 3]
print:   g3d3

34

অপঠনযোগ্য , 1830 1796 1791 1771 1762 1745 1736 1727 1726 16026 1577 বাইট

আউটপুটটি বিপরীত বর্ণানুক্রমিক ক্রমে ( zথেকে a) তবে আপনার বিধি অনুসারে যা অনুমোদিত বলে মনে হয়।

' "" "" "'" "" "" " '" "'" " '" ""' "" ' "" "" "" "" ""' "" "" "" ' "" "" " " '" "'" "" ' "" "" ""' "" " '" "" "" "" "" "'" "" " '" "" ""' "" "" "" ' " " '" "'" " '" ""' "" "" "" ' ""' "" ' "" "'" "" "" "" " '" "" "" ""' ""' ""' "" " '" "" ""' "" "" "" ' ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" ' ""' "" " '" "" "" "'" "" ' ""' "" "" "" " '" ""' "" "" "" "" " ' "" ' ""' "" ' "" "" "" "'" "" "" "" ' "" "'" "" "" "" "" ' ""' "" ' ""'"" "" "" ' "" "" "" "'" "" ' "" "" "" ""' "" "" "" " '" "" "" ""' "" " '" " "" "" " '" "" "" ""' "" ' "" "'" " '" "'" " '" "" "" ""' "" "" "" " '" "'" "" ' ""' "" "" "" " '" "" "" ""' "" ' "" "'" "" "" " '" "'" " '" "'" "" '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" " '" "" ""' "" "" "" ' ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" ' ""' "" " '" "" "'" "" " '"" "" "" "" " '" "" "" "" "'" "" "" " '" "'" "" ' ""' "" "" "" " '" "" "" " ' "" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' ""' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' " " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" '"" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" "" "" " ' "" ' ""' "" ' "" "'" ' "" "" "" "'" "" ' "" "'" "" "" ' "" "" "" ""' "" "" "" ' "" "" "" ""' "" " '" "" "" ""' "" ' "" "'" "" " '" "" "" "'" "" ' """" "" ' ""' "" " '" ""' "" "" "" ' "" "" ""' "" ' ""' "" " '" "" "" "" "'" "" "" "" ' ""' "" ' "" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' ""' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' " " '" "'" " '" "" ""' "" "" "" ' "" "" "" ""' "" " '" "" "" "" "'" "" "" "" ' "" "" "" ""' "" " '" "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" """" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" "" ' "" "" "" ""' "" "" "" " '" ""' "" "" "" ' "" "'" " '" "" "" ""' "" " '" "" "'" "" "" " '" "'" "" ' ""' "" "" "" " '" "'" "" ' "" "" ""' "" "'" "" ' "" "" "'" "" "" "" ' ""' "" ' "" "'" ' "" "" "" "'" "" "" "" " '" "" "" "'" " '" "'" "" ' ""' "" "" "" " '" "'" " '" """" ' ""' "" " '" "'" "" "" "" ' ""' "" ' "" """ ' ""' "" " '" "'" "" "" "" ' ""' "" ' "" "

ব্যাখ্যা

প্রথমে অপঠনযোগ্য যা করতে পারে তার একটি ধারণা পেতে, এটির প্রাথমিক ক্রিয়াকলাপটি এখানে:

  • আপনার কাছে স্বেচ্ছাসেবী-আকারের পূর্ণসংখ্যার ঘরগুলির একটি অসীম টেপ রয়েছে
  • আপনাকে যা না Brainfuck মত একটি মেমরি পয়েন্টার আছে; পরিবর্তে, আপনি টেপগুলিতে তাদের অবস্থান অনুসারে সেলগুলি ডিপ্রিফার করেন। এর অর্থ আপনি "মান # 4 পড়ুন" বা "পড়ার মান # (পড়ার মান # 4)" (ডাবল-অবচয়) করতে পারেন means
  • আপনি কেবল মেমরি সেলগুলি পড়তে বা লিখতে পারেন (ব্রেনফকের মতো সরাসরি বৃদ্ধি / হ্রাস নয়)।
  • আপনি একটি এক্সপ্রেশন মধ্যে মূল্যবৃদ্ধি / হ্রাস মান করতে পারেন। সুতরাং, একটি মেমরি সেল আপনি করতে হবে বাড়াতে পড়া , বৃদ্ধি , লিখতে , অথবা ভিন্নভাবে করা: write(x, inc(read(x)))
  • কিছু লুপ এবং বার্ষিক শর্ত রয়েছে যা কেবল শূন্য বনাম শূন্যের জন্য পরীক্ষা করতে পারে।

এই প্রোগ্রামটি নিম্নলিখিতভাবে টেপ ব্যবহার করে। পরিবর্তনশীল নামগুলি পরে নীচের সিউডোকোডে ব্যবহৃত হবে। এছাড়াও, এই দস্তাবেজটির প্রথম সংস্করণ (যা 1830 বাইট ছিল); যেহেতু পরিবর্তিত হয়েছে তার নীচে সম্পাদনাগুলি দেখুন।

  • সেল 0: পরিবর্তনশীলq
  • সেল 1: ভেরিয়েবল a, p,ch
  • সেল 2: ভেরিয়েবল hash,v
  • সেল 3: ভেরিয়েবল b,r
  • সেল 4: ভেরিয়েবল aa,l
  • দশমিক সংখ্যাগুলির স্ট্রিংয়ের "শেষ" চিহ্নিত করতে সেল 5: 0 থেকে যায়
  • –-৯৯ ঘর: দশমিক অঙ্কের স্ট্রিংটি পিছনে সঞ্চয় করুন
  • সেলগুলি 96–121: ব্যবহারকারীদের a(96) থেকে z(121) (চিঠির ASCII কোড বিয়োগ করে এক) থেকে কেটে নেওয়া ভোটের সংখ্যা সংরক্ষণ করুন ।
  • 4657–7380 ঘর: মনে রাখবেন যে কোন ভোটার / ভোটার সংমিশ্রণের মুখোমুখি হয়েছে কতবার। এই কক্ষগুলির কেবলমাত্র 4 টি সম্ভাব্য মান রয়েছে: 0= এখনও দেখা যায়নি, -1= একবারে দেখা হয়েছে, -2= দু'বার দেখা হয়েছে, -3= 2 এরও বেশি বার বহুবার দেখা গেছে।

অ্যালগরিদম মূলত নিম্নলিখিত হিসাবে এগিয়ে যায়:

  • অক্ষর জোড় পড়া aএবং রাখুন b। হ্যাশ মান গণনা করুন (a-2)*(a-1)+b-1, যা প্রতিটি letters z অক্ষরের সংমিশ্রনের জন্য অনন্য।
  • সেই হ্যাশ মানটিতে মেমরি সেলটি পরীক্ষা করুন ( *hash)। যদি তা হয় -3তবে ব্যবহারকারী ইতিমধ্যে ভোট অপসারণের জন্য যোগ্য, তাই বর্ধিত *(b-1)। অন্যথায়, হ্রাস *hash। যদি এখন এটি হয় -3তবে ব্যবহারকারী তিনটি ঘটনার পরে সবেমাত্র ভোট অপসারণের জন্য যোগ্য হয়ে উঠেছে , সুতরাং এর মাধ্যমে বৃদ্ধি *(b-1)করা 3
  • এর পরে, বিপরীত ক্রমে অক্ষরে অক্ষরে যেতে ( zটু a) এবং যেগুলি কাটা ভোটের প্রয়োজন তা আউটপুট করুন। দশমিক অঙ্কগুলিতে সংখ্যাটি অনুবাদ করার জন্য এটি 10 ​​দ্বারা ম্যানুয়াল পূর্ণসংখ্যা বিভাগের প্রয়োজন।

এই সমস্ত স্পষ্ট করেই, প্রোগ্রামটি সিউডোকোডের মতো দেখাচ্ছে:

// Read pairs of characters
while (a = read) + 1 {
    b = read

    // Calculate hash = (a-1)*(a-2)/2 + b-1
    // This also sets a = b-1
    hash = 0
    while --a {
        aa = a
        while --aa {
            ++hash
        }
    }
    while --b {
        ++a
        ++hash
    }

    // If this combination has just been seen for the third time,
    // increment *a by 3; if more than third time, increment *a by 1
    *a = (*hash + 3) ? ((--*hash) + 3 ? *a : (*a+3)) : (*a+1)
}

// Loop through the characters z to a
l = 27
while --l {                     // l loops from 26 to 1 (not 0)
    (v = *(ch = l + 95)) ? {    // 'a' is ASCII 97, but cell 96
        print (ch+1)            // print the votee

        // Now we need to turn the number v into decimal.
        // p points to where we are storing decimal digits.
        p = 5

        while v {
            // Integer division by 10 (q=quotient, r=remainder)
            r = (q = 0)
            while v {
                --v
                (++r - 10) ? 1 : {
                    r = 0
                    ++q
                }
            }
            // Store digit ASCII character
            *(++p) = r + 48     // 48 = '0'
            v = q
        }

        // Now output all the digit ASCII characters in reverse order
        while *p {
            print *(--p + 1)
        }

    } : 1
}

1, 1830 → 1796 সম্পাদনা করুন: বুঝতে পেরেছি যে আমি এক জায়গায় লুপের রিটার্ন মানটি আবার ব্যবহার করতে পারি।

2, 1796 → 1791 সম্পাদনা করুন: প্রোগ্রামটি সামান্য ছোট হলে দেখা যাচ্ছে যদি 6-95 কোষগুলি ব্যবহার না করে আমি দশমিক সংখ্যাগুলি theণাত্মক সংখ্যাযুক্ত কোষগুলিতে সঞ্চয় করি (–1 এর পরে)। একটি যুক্ত বোনাস হিসাবে, প্রোগ্রামটি আর 10⁹⁰ ভোটের মধ্যে সীমাবদ্ধ নয়!

সম্পাদনা করুন 3, 1791 → 1771: ফল নির্ধারণের পরিবর্তে *(ch = l + 95)করার v, আমি এখন এটা নির্ধারিত qএবং তারপর নিয়োগ সরাতে v = qযখন শর্ত অনুবাদ করে, এবং 1777 বাইট কোড গ্রহণ। তারপর অবস্থান অদলবদল qএবং vটেপ কারণ qএখন আর 1 বেশি দেখা যায় v

4, 1771 71 1762 সম্পাদনা করুন: দুহ। hash0 এর পরিবর্তে 1-এ শুরু করা 9 বাইট কম হয়। হ্যাশ কোডটি এখন আরও 1 টি, এতে কিছু আসে যায় না।

5, 1762 → 1745 সম্পাদনা করুন: যদি আমি আরম্ভ করি qএবং r0 এর পরিবর্তে 1 এ, -1এটি সঠিক করার জন্য আমাকে কিছু গুলি ছিটিয়ে দিতে হবে, এবং এটি সমস্ত বাতিল হয়ে যায় বলে মনে হচ্ছে - while v { --v; [...] }লুপকে এখন আরও কিছু কম পুনরাবৃত্তি চালানো দরকার, যা আমি বলার দ্বারা করতে পারি while --v { [...] }, যা ২ characters টি অক্ষর ছোট।

6, 1745 → 1736 সম্পাদনা করুন: পরিবর্তে { r = 1; ++q }, আমরা লিখতে পারি q = *((r = 1)+1)+1। এটি qভেরিয়েবল স্লট # 2 এ নির্ভর করে । যদি এটি # 1 স্লটে থাকত তবে এটি আরও সংক্ষিপ্ত হবে, তবে পুরো প্রোগ্রামটি সামগ্রিকভাবে দীর্ঘতর হবে।

সম্পাদনা করুন 7, 1745 → 1727: সম্পাদনাটি 6টি উল্টানো হয়েছে এবং তার পরিবর্তে অভ্যন্তরের অভ্যন্তরে ইনলাইন করে সংরক্ষণটি অর্জন করেছিলেন অঙ্কটি ASCII কোড গণনা করে এমন লুপটি লুপ করে, যা 1736 বাইটেও শেষ হয় ... তবে তারপরে একটি হ্রাস নির্দেশকে সংরক্ষণ করেছে (9 বাইট) ) এ পরিবর্তন ((++r) - 11) ? r :করে (r - 10) ? ++r :

8, 1727 → 1626 সম্পাদনা করুন: হ্যাশ গণনাটি পুনরায় কাজ করেছে। এটি এখন লুপ করার সময় একটি আরও কম ব্যবহার করে। সেল অবস্থানগুলি এখন তাদের আসল ASCII কোডগুলিতে রয়েছে (আর 1 এর মাধ্যমে বন্ধ নয়)। টেপের বিভিন্ন স্থানে পুনরায় পরিবর্তনশীল ভেরিয়েবলগুলি কারণ তারা এখন বিভিন্ন ফ্রিকোয়েন্সি সহ ঘটে।

9, 1626 → 1606 সম্পাদনা করুন: আরও ক্রেজি ইনলাইনিং। লুপের প্রথমদিকে শরীরটি এখন এরকম কিছু দেখাচ্ছে:

// b = next char
*(b = (hash = read)) = {

    // hash = b + (a-1)*(a-2)/2
    while (a2 = --a) {
        while --a2 {
            ++hash
        }
    }

    // If this combination has just been seen for the third time,
    // increment *b by 3; if more than third time, increment *b by 1
    (*hash + 3) ? ((--*hash) + 3 ? *b : (*b+3)) : (*b+1)
}

এবং ভেরিয়েবল অ্যাসাইনমেন্ট এখন প্রায় সম্পূর্ণরূপে পরিবর্তিত হয়েছে।

10, 1606 → 1577 সম্পাদনা করুন: আমি পর্যবেক্ষণ করেছি aএবং a2দু'টি লুপের সময় 0 এ কমিয়ে আনা হয়েছে, তাই যদি আমি এর মধ্যে দুটির pসাথে জুটি বাঁধতে পারি তবে না দিয়ে ch, আমাকে আরম্ভ pকরতে হবে না 0(যার দাম 29 বাইট)। দেখা যাচ্ছে যে আমি অদলবদল করে pএবং এটি করতে পারি r। সর্বাধিক পরিবর্তনশীল অ্যাসিগমেন্টস (এবং কোডে তাদের সংঘটনগুলির ফ্রিকোয়েন্সি) এখন:

0 = v (3)                    (total  3)
1 = hash (6), r (5), ch (2)  (total 13)
2 = b (4), q (5)             (total  9)
3 = a (3), p (5)             (total  8)
4 = a2 (3), l (4)            (total  7)

1
কোনও নভেম্বিভিঞ্জিলিয়ন ভোটের জন্য কীভাবে 2 * 10 ^ 90 বাইটের স্ট্রিং প্রয়োজন হবে এবং 10 ^ 24 বাইটের বর্তমানের ক্ষুদ্রতম সম্ভাব্য আয়তন গিজার গ্রেট পিরামিডের আকারের প্রায় 1/3 , আমার মনে হয় না আপনার কাছে উদ্বিগ্ন কিছু। ;)
ETH প্রোডাকশনগুলি

1
@ এথ প্রডাকশন: তা সত্ত্বেও, প্রোগ্রামটি গল্ফ করার সময় আমি এই সীমাবদ্ধতাটি সংশোধন করতে
পেরেছিলাম

22

সিজেম, 23 বাইট

রান লেন্থ পার্টি!

q2/$e`{3a>},e~Wf=$e`Wf%

অথবা

qW%2/$e`{3a>},e~:ce`Wf%

সমস্ত পরীক্ষার কেস চালান

ব্যাখ্যা

q2/   e# Read input and split into pairs.
$e`   e# Sort and run-length encode - this tallies the pairs.
{     e# Filter the tallies...
  3a> e#   Keep only those which start with a 3 or greater.
},    e# Now we need to group the remaining pairs.
e~    e# Run-length decode the remaining pairs.
Wf=   e# Select the second character from each pair (the one being voted on).
$e`   e# Tally the characters by sorting and RLE'ing again.
Wf%   e# Reverse each pair, because CJam's RLE has the number first and the character last.

অন্যান্য সংস্করণটি জোড়াটি বিপরীত করে শুরু হয়, যা অন্য কোথাও দুটি বাইট সংরক্ষণ করে: ক) প্রতিটি স্ট্রিংয়ে প্রথম অক্ষর নির্বাচন করা কেবল দ্বিতীয়টি নির্বাচনের :cপরিবর্তে হয় Wf=। খ) আমাদের দ্বিতীয় আরএলই এর আগে আবার বাছাই করার দরকার নেই, কারণ জোড়গুলি ইতিমধ্যে বাকি অক্ষর দ্বারা প্রাথমিকভাবে বাছাই করা হয়েছিল।


Qআপনার দ্বিতীয় উত্তরের এফডব্লিউআইডাব্লুটি qটেস্ট-মোড়কের জন্য নয়।
পিটার টেলর 21

@PeterTaylor আমি কি সব সময় -.-
মার্টিন Ender

আমি জানি এটি একটি ছোটখাটো বিশদ, তবে 3তুলনার জন্য তালিকায় একটি রূপান্তর করা একটি দুর্দান্ত কৌশল। আমি এটি কেবলমাত্র আমার নিজের বিনোদনের জন্য সমাধান করেছি এবং আমি সেখানে ব্যবহার করে একটি বাইট হারিয়েছি 0=2>। অন্যথায় আমি শেষ ধাপের ::\ পরিবর্তে ব্যবহার না করে আপনার প্রথম সমাধানের মতো প্রায় Wf%শেষ করেছি।
রেটো কোরাদি

10

বাশ, 95 94 85 81 বাইট

fold -2|sort|uniq -c|awk '$1>2{c[substr($2,2)]+=$1}END{for(x in c)printf x c[x]}'

শুরু করার জন্য একটি মার্জিত-ইশ তবে দীর্ঘ প্রথম সমাধান ...

ধন্যবাদ User112638726 সঙ্গে একটি বাইট সংরক্ষণের জন্য sedসঙ্গে 9 সংরক্ষণের জন্য, DigitalTrauma foldএবং রাইনার পি 4 আরো সংরক্ষণের জন্য awk'র substr!

এটি কীভাবে কাজ করে তা দেখতে, আসুন ইনপুটটি নেওয়া যাক abababcbcbcbcbbababa

  • পরে fold -2(2 এর একটি প্রস্থ লাইন মোড়ানো), আমরা আছে

    ab
    ab
    cb
    cb
    cb
    cb
    ba
    ba
    ba
    
  • এর পরে sort | uniq -c( প্রতিটি লাইনটি ইনপুটটিতে কতবার প্রদর্শিত হয় তার গণনা আউটপুট করার -cজন্য uniqএটি খুব নিফটির পতাকা ), আমরা পাই

          3 ab
          3 ba
          4 cb
    
  • এখন চূড়ান্ত awkআদেশটি পরীক্ষা করা যাক :

    • $1>2: কেবলমাত্র রেকর্ড 1 (আখের মত ভোটের সংখ্যা) হলে আউটপুট স্টাফ 2 (যেটি that 3) এর বেশি হয়। অন্য কথায়, কোনও সংখ্যা number 2 দিয়ে শুরু হওয়া কোনও রেখা উপেক্ষা করুন।

    • {c[substr($2,2)]+=$1}: সংখ্যাটি যদি 2 এর বেশি হয় তবে cহ্যাশ টেবিলটিতে সেই সংখ্যাটি যুক্ত করুন, কী হিসাবে 2 রেকর্ডের দ্বিতীয় চরটি (যেমন- ভোট-ই) ব্যবহার করুন। (আমাদের সবকিছু শূন্যে শুরু করতে হবে না; awkএটি আমাদের জন্য করে))

    • END{...}: এর অর্থ হ'ল "সম্পূর্ণ ফাইলটি প্রক্রিয়া করার পরে এখানে কী করা উচিত তা এখানে।"

    • for(x in c)printf x c[x]: মোটামুটি স্ব-ব্যাখ্যামূলক। প্রতিটি কী এবং এর সাথে সম্পর্কিত মানটি মুদ্রণ করুন।



@ ব্যবহারকারী112638726 এটি জানতেন না, ধন্যবাদ
ডোরকনব

এটি কিছুটা কমেছেsed -r 's/.(.)/\1\n/g'|awk '{a[$1]++}END{for(i in a)printf (a[i]>2)?i a[i]:y}
ব্যবহারকারীর 121288726

@ User112638726 bacadaউদাহরণস্বরূপ এটি ইনপুটটির জন্য ব্যর্থ ।
ডুরকনব

ওহ হ্যাঁ আমার খারাপ!
ব্যবহারকারী112638726

8

জাভাস্ক্রিপ্ট, 114 113 110

f=s=>eval('o={},s.replace(/../g,m=>s.search(`^((..)*${m}){3}`)?0:o[c=m[1]]=~~o[c]+1);r="";for(v in o)r+=v+o[v]');

পরীক্ষার কেস:

একটি উচ্চ স্তরে, এই কোডটি এমন কী-মান জোড় দিয়ে একটি অবজেক্টকে পপুলেট করে যা ভোট প্রাপকদেরকে ভোটের সংখ্যার মতো মানচিত্র করে, { b:7, a:3 }এবং তারপরে forলুপের সাথে একটি স্ট্রিংয়ে যোগ দেয় । কোডটি একটি evalএক্সপ্রেশনটিতে forতীর ফাংশনটির মধ্যে { }এবং ব্যয় বাইটের প্রয়োজন ছাড়াই ব্যবহারের অনুমতি দেওয়ার জন্য রয়েছে ;return r

( তিনটি বাইট সংরক্ষণের জন্য ব্যবহারকারী 81655 এর প্রপস !)

evalকোডের ব্যাখ্যা :

o={},                             // object to hold name/vote mapping
s.replace(/../g,                  // for each pair of chars in input
  m=>s.search(`^((..)*${m}){3}`)  // see if pair appears 3 times
                                  //   (0 if true, -1 if not)
     ?0                           // if not, do nothing
     :o[c=m[1]]=~~o[c]+1          // if yes, increment the property named after
                                  //   the second character in the pair
);
r="";                       // return string
for(v in o)r+=v+o[v]        // populate string with characters and vote totals

6

হাস্কেল, 103 বাইট

import Data.Lists
f s|c<-chunksOf 2 s,b<-[e!!1|e<-c,countElem e c>2]=nub b>>= \q->q:show(countElem q b)

ব্যবহারের উদাহরণ: f "jkkjjkkjjkkjljljljmlmlnmnmnm"->"k3j6m3"

কিভাবে এটা কাজ করে:

c<-chunksOf 2 s                      -- split the input into lists of 2 elements
b<-[e!!1|e<-c,countElem e c>2]       -- for every element e of that list take the 2nd
                                     -- char if there are more than 2 copies of e
nub b>>= \q->q:show(countElem q b)   -- take every uniq element thereof and append
                                     -- the number how often it appears 

6

জাভাস্ক্রিপ্ট (ES6), 195 174 169 167 158 বাইট

s=v=>eval("a={},b={},e='';(v.match(/../g)).forEach(c=>{a[c]=(a[c]||0)+1});for(var k in a){d=k[1];a[k]>2&&(b[d]=(b[d]||0)+a[k])};for(var k in b){e+=k+b[k]};e")

পরীক্ষা


1
পিপিসিজিতে স্বাগতম: আমাদের এখানে এবং এখানে জেএসে গল্ফ করার জন্য কিছু টিপস রয়েছে । আমি সত্যিই
জেএসকে

1
একটি জিনিস জন্য, আপনি varগুলি অপসারণ করতে পারেন । কোড গল্ফে বিশ্বব্যাপী সুযোগকে দূষিত করার বিষয়ে কে চিন্তা করে? ;)
ডোরকনবব

এছাড়াও, /(\w{2})/gকেবল হতে পারে /../g- আমরা ইতিমধ্যে জানি ইনপুটটি কেবলমাত্র অক্ষর, এবং একটি (বা দুটি) অক্ষর পুনরাবৃত্তি করার চেয়ে কম হয় {2}। আপনি যদি আগ্রহী হন তবে আপনার এই চ্যালেঞ্জটির আমার জাভাস্ক্রিপ্টের উত্তরটি দেখুন (এবং মন্তব্য প্রশ্ন) করতে পারেন। পিজিসিসিতে আপনাকে স্বাগতম!
অ্যাপসিলাররা

4

গণিত, 110 100 99 বাইট

g=Cases[Tr@#,#2,All]&;""<>g[g[BlockMap[$,Characters@#,2],i_*_/;i>2]/.$->Last,i_*x_:>x<>ToString@i]&

3

পার্ল, 86 84 83 বাইট

s/../$h{$&}++/eg;@l=%l=map{/./;$h{$_}>2?($',${$'}+=$h{$_}):()}keys%h;$"="";$_="@l"

-pকমান্ডলাইন আর্গুমেন্টের জন্য এটি 82 বাইট প্লাস 1 :

$ echo xyxyxyxyxyxyxyxyzyzyzyxzxzxz | perl -p 86.pl
y11z3


কিছুটা নাড়িত:

s/../$h{$&}++/eg;     # construct hash %h with pair counts

@l = %l = map         # assign to array via hash to filter dupes
{                     
  /./;                # match the first character

  $h{$_}>2?           # filter on 3 or more identical votes
  (                   # return a 2 element list (k/v pair for %l):
    $',               # $POSTMATCH: the 2nd character (votee)
    ${$'} += $h{$_}   # increment votee total votes, value is new total
  )
  :()
}
keys %h;              # iterate the unique pairs

$" = "";              # set $LIST_SEPARATOR to empty string
$_ = "@l"             # implicit join using $";  $_ gets printed with -p
  • আপডেট করুন গ্রেপ ইনলাইন করে 2 বাইট সংরক্ষণ করুন
  • এর${$'} পরিবর্তে গ্লোবাল অস্থায়ী ভার্স ব্যবহার করে 83 টি 1 বাইট সংরক্ষণ করুন $g{$'}। দুর্ভাগ্যক্রমে, $$'কাজ করে না।

3

খাঁটি বাশ, 151

আমি প্রত্যাশার চেয়ে দীর্ঘ, তবে এটি এখানে।

declare -A a n
for((;v<${#1};v+=2));{((a[${1:v:2}]++));}
for u in ${!a[@]};{((a[$u]>2))&&((n[${u:1}]+=a[$u]));}
for u in ${!n[@]};{ printf $u${n[$u]};}

প্রয়োজনীয় গণনা করতে সহযোগী অ্যারে সূচক ব্যবহার করে ing বাশ সংস্করণ 4.0 বা তার বেশি প্রয়োজন।


1

পিএইচপি 247 অক্ষর

(সেকি)

$f='';for($i=0;$i<strlen($s);$i=$i+2){$a[]=$s[$i].$s[$i+1];}$r=[];for($i=0;$i<count($a);$i++){$t=array_count_values($a);$c=$t[$a[$i]];if($c>=3){$r[$a[$i][1]][$a[$i][0]]=$c;}}for($i=0;$i<count($r);$i++){$f.=key($r).array_sum(current($r));next($r);}

ব্যাখ্যা

// Test Case
$s = 'nanananananananabatman';

// Final result here
$f = '';

// Seperate strings into array in 2 character chunks
for ($i = 0; $i < strlen($s); $i = $i + 2)
{
    $a[] = $s[$i] . $s[$i + 1];
}

// Make an array of data
// The first level of array has voted on user as key
// Inside of that array is a dictionary with the voter user as the key, and the number of votes as the value
$r = [];
for ($i = 0; $i < count($a); $i++)
{
    $t = array_count_values($a);
    $c = $t[$a[$i]];
    if ($c >= 3)
    {
        $r[$a[$i][1]][$a[$i][0]] = $c;
    }
}

// Combine votes from different users to the same user into the final result string
for ($i = 0; $i < count($r); $i++)
{
    $f .= key($r) . array_sum(current($r));
    next($r);
}

echo $f;

অন্যান্য উত্তরের দিকে তাকাতে না করে এটি করেছে। এটি এখনও সবচেয়ে কঠিন কোড গল্ফকে মোকাবেলা করেছি। আমি সমস্ত অপ্টিমাইজেশান স্বাগত জানাই।


0

আর, 221 বাইট

কোড

f=function(s){t=strsplit(gsub("(.{2})","\\1 ", s)," ")[[1]];z=table(t)[table(t)>2];n=substr(names(z),2,2);x=data.frame(y=z,t=n);a=aggregate(x$y,by=list(x$t),sum);for(i in nrow(a):1)cat(as.character(a[i,1]),a[i,2],sep="")}

ungolfed

f <- function(s){
  l <- gsub("(.{2})", "\\1 ", s)
  t <- strsplit(l," ")[[1]]
  z <- table(t)[table(t)>2]
  n <- substr(names(z),2,2)
  x <- data.frame(y=z,t=n)
  a <- aggregate(x$y, by=list(x$t),sum)
  for(i in nrow(a):1){
    cat(as.character(a[i,1]),a[i,2],sep="")
  }
}

এখানে উন্নতির জন্য অনেক জায়গা রয়েছে।

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