ফিজবুজ-ইশ স্ট্রিং ম্যাচার


25

বলুন যে আপনার মতো স্ট্রিং রয়েছে:

abaabbbbbaabba

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

abaabbbbbaabba
^ x      x   ^

মোটটি 2 হবে (এটি aaগণনা করা হবে না কারণ এটি aপরপর দু'বার প্রদর্শিত হয়)।

এটি কীভাবে ফিজবজের সাথে সম্পর্কিত?

অক্ষরটি যদি একটি সারিতে 3 (বা 3 এর একাধিক) বার বা একক সারিতে 5 (বা 5 এর একাধিক) বার প্রদর্শিত হয়, তবে তার পরিবর্তে কাউন্টারটি হ্রাস করা হবে। যদি এটি 3 এবং 5 বারের একাধিক হয় তবে কাউন্টারটি এখনও বাড়ানো হয়েছে। মনে রাখবেন যে ক্যারেক্টারটি কেবল একবারে একবারে উপস্থিত হয় এবং কাউন্টারটি অন্য কোনও সংখ্যক বারে (উপরে বর্ণিত অবস্থাগুলি ছাড়াও) উপস্থিত হয় তবে তা উপেক্ষা করা হবে।

পুনরুদ্ধার করার জন্য, যদি স্ট্রিংটি ম্যাচ করার জন্য হয় a,

input            counter (explanation)

a                 1 (single occurence)
aaa               -1(multiple of 3)
aaaaa             -1(multiple of 5)  
aaaaaaaaaaaaaaa   1 (multiple of 15)
aa                0 (none of the above)

aba               2 (two single instances)
aaba              1 (one single occurence(+1) and one double occurence(ignored))
aaaba             0 (one single occurence(+1) and one triple (-1)
aaaaaa            -1 (six is a multiple of three)

জাভা রেফারেন্স (অবরুদ্ধ) বাস্তবায়ন:

import java.util.Scanner;
import java.util.regex.*;

public class StrMatcher {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in); //Scanner to get user input
        int total = 0;//Running total of matches

        System.out.println("Enter a string: ");
        String strBeingSearched = sc.nextLine(); //String that will be searched

        System.out.println("Enter string to match with: ");
        String strBeingMatched = sc.nextLine(); //Substring used for searching

        //Simple regex matcher
        Pattern pattern = Pattern.compile("(" + strBeingMatched + ")+");
        Matcher matcher = pattern.matcher(strBeingSearched);

        while(matcher.find()){  //While there are still matches

            int length = matcher.end() - matcher.start();
            int numberOfTimes = length/strBeingMatched.length();//Calculate how many times in a row the string is matched

            if((numberOfTimes == 1)||((numberOfTimes % 3 == 0) && (numberOfTimes % 5 == 0))){
                total++; //Increment counter if single match or divisible by 15
            } else if((numberOfTimes % 3 == 0)||(numberOfTimes % 5 == 0)) {
                total--; //Decrement counter if divisible by 3 or 5 (but not 15)
            }

            strBeingSearched = strBeingSearched.substring(matcher.end());
            matcher = pattern.matcher(strBeingSearched); //Replace string/matcher and repeat
        }

        System.out.println(total);
    }   
}
  • যে স্ট্রিংটি অনুসন্ধান করা হবে সেটি কোনও দৈর্ঘ্য হতে পারে তবে প্যাটার্নটি কেবলমাত্র একটি একক অক্ষর।
  • উভয়ই স্ট্রিংয়ের রেগেক্স বিশেষ অক্ষর থাকবে না।
  • এটি ; বাইটস মধ্যে সংক্ষিপ্ততম প্রোগ্রাম।
  • কোনও মানক ফাঁক নেই।

3
আপনি আরও কয়েকটি পরীক্ষার উদাহরণ প্রদান করতে পারলে এটি কার্যকর হবে। বিশেষত যেখানে ক্রমের একাধিক বর্ণ রয়েছে has
রেটো কোরাডি

আমি কয়েকটি কেস যুক্ত করেছি - আশা করি এটি সাহায্য করবে। আমার আরও মামলার প্রয়োজন হলে আমাকে বলুন- পিপিসিজিতে এটি আমার প্রথমবার।
ড্যানিয়েল এম

আমি প্রয়োজনীয়তাগুলি পরিবর্তন করব যাতে ক্রমটি কেবল একটি একক চরিত্রের হিসাবে বাস্তবায়ন প্রায় একই রকম, তবে কম বিভ্রান্তিকর।
ড্যানিয়েল এম।

এটি 1-স্পার প্রশ্নের মতো তবে ফিজবজ সংযোজন সহ
ev3commander

উত্তর:


32

ফানসিটন , 1840 বাইট

অভিশাপ, এই ভাষা অবর্ণনীয়।

এই প্রোগ্রামটি প্রত্যাশা করে যে ইনপুটটির প্রথম অক্ষরটি অনুসন্ধানের জন্য অক্ষর হবে এবং বাকী ইনপুটটি অনুসন্ধানের স্ট্রিংটি তৈরি করবে। এর অর্থ এই যে aaabaঅনুসন্ধান করবে aইনপুটে aaba(এবং এইভাবে আউটপুট 1)। আপনি পারেন এগুলিকে একটি নতুন লাইন বা স্পেস ( a aaba) দিয়ে আলাদা তবে কেবলমাত্র অতিরিক্ত নিউলাইন / স্পেস আউটপুটকে কোনও পার্থক্য দেয় না।

বরাবরের মতো, আপনি যদি $('pre').css('line-height',1)নিজের ব্রাউজার কনসোলে এক্সিকিউট করেন তবে আপনি একটি সুন্দর চেহারা রেন্ডারিং পেতে পারেন (লাইন স্পেসিং ছাড়াই) ।

      ┌───┐
      │╓─╖└─────────────┐
      └╢³╟┐    ┌─────┐ ┌┴┐╓─╖
┌─────┐╙─╜└────┤┌─╖ ┌┴╖│┌┘║¹║
│     ├───────┐└┤²╟─┤·╟┘│ ╙┬╜╔═══════╗
│    ┌┴╖╔═╗┌─╖├┐╘╤╝ ╘╤╝┌┘  └┬╢2097151║
│    │♭║║5╟┤%╟┘└─┴──┐│┌┘┌───┘╚═══════╝
│    ╘╤╝╚═╝╘╤╝╔═╗┌─╖│││┌┴┐┌────┐
│    ┌┴╖   ┌┘ ║3╟┤%╟┘││└┬┘│╔══╗└┐
│  ┌─┤·╟─┐ │  ╚═╝╘╤╝ │└┐  │║21╟┐│
│  │ ╘╤╝ ├─┘┌─────┘  └┐└┐ │╚══╝│└─┐
│ ┌┴╖┌┴╖┌┴╖┌┴╖┌─╖    ┌┴╖│ │┌─╖┌┴─╖│
│┌┤·╟┤?╟┤?╟┤?╟┤+╟────┤³║│ └┤²╟┤>>║└──┐
││╘╤╝╘╤╝╘╤╝╘╤╝╘╤╝    ╘╤╝│  ╘╤╝╘╤═╝╓─╖│
││ │ ┌┴╖┌┴╖┌┴╖┌┴╖╔═╗ ┌┴╖│  ┌┴╖ ├──╢²╟┤
││ └─┤·╟┤·╟┤?╟┤·╟╢1║┌┤·╟┘  │♯║┌┴╖ ╙─╜│
│└──┐╘╤╝╘╤╝╘╤╝╘╤╝╚═╝│╘╤╝   ╘╤╝│¹║┌───┘
└──┐│╔╧╗ └┬─┘ ┌┴╖   │┌┴─╖   │ ╘╤╝│
   ││║1║ ┌┴┐┌─┤?╟───┴┤>>╟┐ ┌┴╖┌┴╖│
   ││╚═╝ └┬┘│ ╘╤╝    ╘══╝│┌┤?╟┤=║│
   │└────┐│╔╧╗     ┌─────┘│╘╤╝╘╤╝│
╔═╗└────┐│├╢0║╔══╗┌┴╖┌─╖ ╔╧╗   └─┘
║ ║     │└┘╚═╝║21╟┤×╟┤♯╟┐║0║
╚╤╝     └──┐  ╚══╝╘═╝╘═╝│╚═╝
 │┌──┴────╖└────────────┘
 ││int→str║
 │╘══╤════╝
┌┴─╖┌┴╖┌─╖╔╗
│>>╟┤³╟┤¹╟╢║
╘═╤╝╘═╝╘═╝╚╝
╔═╧╗
║21║
╚══╝

(1840 বাইট যখন ইউটিএফ -16 হিসাবে এনকোড করা হয়েছে))

ব্যাখ্যা

  • ¹ একটি স্ট্রিংয়ের প্রথম চরিত্রটি প্রদান করে।
  • ²প্রদত্ত স্ট্রিংয়ের শুরুতে একটি অক্ষরের সংখ্যার সংখ্যা গণনা করে। উদাহরণ হিসেবে বলা যায়, চরিত্র দেওয়া aএবং স্ট্রিং aaba, এটা 2. আয় জন্য aএবংbaa , এটা 0 ফেরৎ।
  • ³²শুরুতে অক্ষরের সংখ্যা পাওয়ার জন্য কল করে, সংখ্যাটি 3 এবং 5 দ্বারা বিভাজ্য কিনা এবং এটি 1 এর সমান কিনা এবং যথাযথ বৃদ্ধি / হ্রাস নির্ধারণ করে কিনা তা পরীক্ষা করে। এটি স্ট্রিংয়ের শুরু থেকে একটি অতিরিক্ত অক্ষরও সরিয়ে দেয় (যেমন প্রদত্ত যে aaabbaএটি প্রদান করে 3 + 1 = 4 টি অক্ষর মুছে ফেলেba )তারপরে এটি সংক্ষিপ্ত স্ট্রিংয়ের সাথে নিজেকে পুনরাবৃত্তি বলে এবং ফলাফলটি যুক্ত করে।
  • মূল প্রোগ্রামটি ¹ইনপুট থেকে প্রথম অক্ষরটি সরিয়ে ফেলার জন্য আহ্বান জানায় ³এবং সেই অক্ষরটি এবং বাকী স্ট্রিংটিকে পৃথক যুক্তি হিসাবে কল করে।

10
আমি কখনই ফানসিটনকে উচ্ছেদ করব না।
orlp

14

সিজেম, 40 36 35 32 30 বাইট

0llcf=e`::*{(_g+Y13515Yb+=(+}/

1 বাইট বন্ধ করে গল্ফ করার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ!

2 বাইট বন্ধ করে আরও 3 টির পথ সুগম করার জন্য @ অ্যান্ড্রেইবায়নদোকে ধন্যবাদ!

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

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

0          e# Push a 0 (accumulator).
l          e# Read a line from STDIN.
lc         e# Read a second line and keep only the first character.
f=         e# Check each character from the first line for equality.
           e# This results in 1 for the specified character and 0 for others.
e`         e# Perform run-length encoding.
::*        e# Multiply each element by its number of repetitions.
{          e# For each remaining integer I:
  (_!      e#   Subtract 1, copy and push sign(I-1).
  +        e#   Add the results.
           e#     If I == 0, I-1 + sign(I-1) =  -1 + -1 = -2.
           e#     If I == 1, I-1 + sign(I-1) =   0 +  0 =  0.
           e#     If I >= 2, I-1 + sign(I-1) = I-1 +  1 =  I.
  Y        e#   Push 2.
  13515Yb  e#   Convert 13515 into the array of its binary digits.
  +        e#   Concatenate 2 and the array.
           e#   This pushes [2 1 1 0 1 0 0 1 1 0 0 1 0 1 1].
  =        e#   Retrieve the digit at (index I-1 + sign(I-1))%15.
           e#     If I == 0, this pushes 1.
           e#     Else, if I == 1, this pushes 2.
           e#     Else, if I%15 == 0, this pushes 2.
           e#     Else, if I%3==0 or I%5==0, this pushes 0.
           e#     Else, this pushes 1.
  (        e#   Decrement the result.
  +        e#   Add it to the accumulator.
}/         e#

বেস-এনকোডযুক্ত সারণী এবং মডিউলার ইনডেক্সিং সহ আপনি আরও 2 বাইট সংরক্ষণ করতে পারেন: llcf=e`::*0-{(_!\6563282Zb:(=}%1bএটি 33 বাইট।
Andrea Biondo

@ আন্ড্রেবিওনডো যা আসলে 3 বাইট সংরক্ষণ করেছিল। ধন্যবাদ!
ডেনিস

7

সি, 160 126 125 119 114 109 104 100 বাইট

main(int q,char **z){int i=0,t=0,s=0,a=z[1][0],c;do{if((c=z[2][i])!=a){s+=(!!t)*((t==1)-!(t%3)-!(t%5)+3*!(t%15));t=0;}else{++t;}++i;}while(c);printf("%d\n",s);}

সম্ভবত আরও ভাল করা যেতে পারে ... এটি কমান্ড লাইন আর্গুমেন্ট থেকে ইনপুট নেয় (প্রথম যুক্তিটি প্যাটার্ন, দ্বিতীয়টি স্ট্রিং)। NULL চর (\ x00) এর ধরণ অনুসন্ধানে সমর্থন করে না।

সম্পাদনা করুন ** 126 125 119 114 109 104 100 বাইট **: ডেনিসের পরামর্শগুলি এবং কিছু অতিরিক্ত ধারণা অন্তর্ভুক্ত করার পরে (অন্য ধারাটি অপসারণ করা হয়েছে, সেই সময়টিকে একটি একক বিবৃতিতে সংযুক্ত করে! = এর পরিবর্তে বিয়োগফল ব্যবহার করা হয়েছে)। লুপের জন্য অতিরিক্ত সেমিকোলনও সরিয়ে ফেলেছে (এটি আসলে ডেনিসের পরামর্শের অংশ ছিল)। 'I' এবং 'a' ভেরিয়েবলগুলি মুছে ফেলে আরও ছোট করা হয়েছে।

t,s;main(c,z)char**z;{for(;c;t++)if((c=*z[2]++)-*z[1])s+=!!t*((t<2)-!(t%3)-!(t%5)+3*!(t%15)),t=-1;printf("%d",s);}

টের্নারি অপারেটরটিকে গালি দিয়ে if এবং negation ('!') অপারেটরগুলি সরানো হয়েছে। সেই বিটওয়াইজ 'এবং' দ্বিগুণ এবং & ট্রিকটি ব্যবহার করে মডুলারালিটি চেকগুলি সংকুচিত করে কারণ বিটওয়াইজ '&' তে একটি বাগ রয়েছে এবং (টি <2) তুলনাটি টের্নারি অপারেটরগুলির মধ্যে রেখে। প্রতিস্থাপন !! টি * (...) টের্নারি অপারেটরে সরানো দিয়ে, এভাবে আমাকে প্রথম বন্ধনী সরানোর অনুমতি দেয়।

মানুষ, আমি এটি 100 বাইট চিহ্নের নিচে পেতে চাই: এস

t,s;main(c,z)char**z;{for(;c;)(c=*z[2]++)-*z[1]?s+=t%15?t%3&&t%5?t<2:-1:!!t,t=0:t++;printf("%d",s);}

উদ্ভাবনী সমাধান: এগুলি বৈধ বলে বিবেচিত হবে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আমি যদি প্রিন্টফ ("% d", গুলি) এর পরিবর্তে প্রস্থান (গুলি) ব্যবহার করি তবে আমি 93 টি অক্ষরে নামতে পারি। তবে আউটপুট দৃশ্যমান হবে না, বরং এটি একটি রিটার্ন কোড হবে। যদি আউটপুটটি সত্যিই প্রয়োজনীয় হয় তবে আমি এটি 98 বাইটেও নামতে পারি তবে চূড়ান্ত উত্তরের আগে এটির সমস্ত মধ্যবর্তী মান মুদ্রণ করা দরকার ...


3
প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! আমি এটি পুরোপুরি পরীক্ষা করে দেখিনি, তবে i,t,s,a;main(c,z)char**z;{a=*z[1];while(c){if((c=z[2][i])!=a)s+=(!!t)*((t<2)-!(t%3)-!(t%5)+3*!(t%15)),t=0;else++t;++i;}printf("%d",s);}পাশাপাশি কাজ করা উচিত (এবং এটি 23 বাইট কম)।
ডেনিস

ওহ, if () {use ধারাটিকে একটি বিবৃতিতে পরিণত করার সাথে দুর্দান্ত জিনিস!
টব আর্নাক

আরো কয়েকটি বাইট: আপনি শুরু করেন mainসঙ্গে for(a=*z[1];c;i++), আপনি প্রয়োজন হবে না {}প্রায় যদি ... অন্য।
ডেনিস

4

রুবি, 111 103 96 বাইট

->s,m{s.chars.chunk{|x|x}.reduce(0){|x,(c,g)|l=g.size
x+(c!=m ?0:l<2||l%15<1?1:l%3*l%5<1?-1:0)}}

এই চ্যালেঞ্জটি রুবির পক্ষে তৈরি হয়েছিল Enumerable#chunk, তাই আমাকে এটি পোস্ট করতে হয়েছিল। :)

অনলাইন পরীক্ষা: http://ideone.com/pG4mAn

কোডটি বেশ সহজবোধ্য। এখানে আরও পঠনযোগ্য সংস্করণ: http://ideone.com/ub3siA


4

পাইথন 3, 361, 300, 296, 263, 256, 237, 229, 188, 178 , 164 বাইট।

এসওপিথন থেকে ভল্টাহ ধন্যবাদ 15 বাইট সংরক্ষণ করা।
এসওপিথন থেকে জো কিংটনকে 9 বাইট সংরক্ষণ করা হয়েছে।
এসওপিথন থেকে ডিএসএমকে 11 বাইট সংরক্ষণ করা হয়েছে।

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

t=input()
m=input()
c=u=0
g=iter(t)
while g:
 r=next(g,0)
 if r==0:print(c);g=0
 while r==m:u+=1;r=next(g,0)
 if u:b=u%3<1;v=u%5<1;c+=((0,-1)[b|v],1)[u<2or b&v];u=0

অবরুদ্ধ সংস্করণ:

import sys
test = sys.argv[1]
match_char = sys.argv[2]
counter = char_counter = 0
char_generator = (c for c in test)
while char_generator:
    try:
        char = next(char_generator)
    except StopIteration:
        print(counter)
        break
    while char == match_char:
        char_counter += 1
        try:
            char = next(char_generator)
        except StopIteration:
            break
    if char_counter == 0:
        continue
    counter += 1 if char_counter == 1 or (char_counter % 3 == 0 and char_counter % 5 == 0) else -1 if char_counter % 3 == 0 or char_counter % 5 == 0 else 0
    char_counter = 0

আবিষ্কার করেছি আমি পরীক্ষার একটি ক্ষেত্রে ব্যর্থ হয়েছি।



3

জাভা, 146 152 143 138 139 136 বাইট

  1. একটি বাগ সংশোধন করা হয়েছে।
  2. স্থানান্তরিত অপারেশন, %3&%5চেকগুলির জন্য বিটওয়াইড অপারেটরে স্যুইচ করা ।
  3. সংক্ষিপ্ত i<2তুলনা।
  4. একটি বাগ স্থির করে ( %3&%5চিন্তাধারা হিসাবে কাজ করে না পরীক্ষা করুন)।
  5. @ ডাব্লু00০ এর রুবির উত্তরে দেখা যায় এমন গুণিত শর্টকাট ।

BiFunction<String, String, Integer>জাভা 8-তে একটি হিসাবে প্রয়োগ করা হয়েছে , আমাকে একটি পূর্ণ প্রোগ্রাম হতে হবে কিনা তা আমাকে জানান (অথবা আমি java.util.regexনীচে প্যাকেজ উপসর্গটিও ফেলে দিতে পারি )।

উপরের বাইট গণনাতে নীচের নতুন লাইনটি অন্তর্ভুক্ত নয়, যা কেবল এই সাইটে ফর্ম্যাট করার উদ্দেশ্যে যুক্ত করা হয়।

(a,b)->java.util.regex.Pattern.compile("[^"+b+"]").splitAsStream(a)
.mapToInt(v->v.length()).map(i->i<2?i:i%15<1?1:i%3*i%5<1?-1:0).sum();

রুক্ষ ব্যাখ্যা:

  1. প্যাটার্ন যে সঙ্গে Regex প্রয়োগ নেই মেলে b, অর্থাত্ "[^"+b+"]"
  2. প্রতিটি টোকেনের দৈর্ঘ্য পান (যেমন "a" -> 1)।
  3. পছন্দসই ম্যাপিং প্রয়োগ করুন -1, 0এবং 1
  4. sum() উত্তর পেতে।

2

জাভাস্ক্রিপ্ট, 206 বাইট

function f(n,e){var t=n.match(new RegExp(e,"g")).length,g=n.match(new RegExp(e+"{2,}","g"));return null!==g&&g.forEach(function(n){t-=n.length,n.length%15==0?t+=1:(n.length%3==0||n.length%5==0)&&(t-=1)}),t}

সম্প্রসারিত:

function funkyFizzb(n, c) {
    var score = n.match(new RegExp(c, "g")).length; 
    var repeatOccurence = n.match(new RegExp(c + "{2,}", "g"));

    if(repeatOccurence !== null) {
        repeatOccurence.forEach(function(v,i){
            // remove multiple occurrence counts
            score -= v.length;

            if(v.length % 15 == 0) {
                score += 1;
            }

            else if(v.length % 3 == 0 || v.length % 5 == 0) {
                score -= 1;
            }
        });
    }

    return score;
};

ব্যাখ্যা:

আমি কোনও চরিত্রের প্রদর্শিত সময় গণনা করার জন্য রেইজেক্স ব্যবহার করছি, তারপরে এটি গোটা সময়ে বিয়োগ হয়েছে groups অবশেষে, আমি গোষ্ঠীগুলির মধ্যে যাচ্ছি এবং ফিজ বাজ ইনক্রিমেন্ট / হ্রাস করছি।

প্রশ্নে দেওয়া পরীক্ষার কেসগুলি পাস করে:

funkyFizzb("aaa", "a") => -1

ইত্যাদি


এর পরিবর্তে newব্যবহার execকরুন matchএবং উপন্যাসটি সরান lengthএবং আপনার ভাল হওয়া উচিত।
মামা ফান রোল

2

পার্ল, 82 65 63 59 বাইট

58 বাইট +1 বাইট কমান্ড লাইন প্যারামিটার

বিশেষভাবে সংক্ষিপ্ত নয়, তবে এটি একটি সূচনা - এটি ছোট করে চালিয়ে যেতে থাকবে।

$l=y///c,$i+=!($l>1&&$l%15)||-!($l%3*$l%5)for/$^I+/g;$_=$i

ধরে নেওয়া যাক -iইনপুট স্ট্রিং একটি উদাহরণ ব্যবহার প্রভৃতির মতো অনুসরণ করে দিতে ব্যবহার করা যেতে পারে:

echo "aaabaaa" | perl -pi"a" entry.pl


0

গাওক, 140

p=$2{b="[^"$1"]";for($0=2;$i-->0;){sub("^"b"*",_,p);p=substr(p,$++i=match(p,b))}for($i=length(p);$++j;)s+=$j%5?$j%3?$j<2:-1:$j%3?-1:1}$0=s""

"চর স্পেস স্ট্রিং" হিসাবে ইনপুট করুন, তেমন

echo "x axxbxcxdexxxfffghixxj" | awk 'p=$2{b="[^"$1"]";for($0=2;$i-->0;){sub("^"b"*",_,p);p=substr(p,$++i=match(p,b))}for($i=length(p);$++j;)s+=$j%5?$j%3?$j<2:-1:$j%3?-1:1}$0=s""'

Ungolfed

p=$2{
    #i=j=s=0                # make reusable
    b="[^"$1"]";           # pattern "not matching char"
    $0=2;                  # help starting the while loop
    while($i-->0){         # match didn't return -1; dec stack top
        sub("^"b"*",_,p);  # remove not matching chars at head of string
        $++i=match(p,b);   # push index of first occurence of not matching char
        p=substr(p,$i)     # remove matching chars from head of string
    };
    $i=length(p);          # get last value
    while($++j)            # sometimes last value on stack is 0
        s+=$j%5?$j%3?$j<2:-1:$j%3?-1:1

        # if $j%5!=0
        #   if $j%3!=0     (not divisible by 5 AND 3)
        #     s+=($j==1)   (single character)
        #   else           (divisible by 3 but not by 5)
        #     s-=1
        # else             (divisble by 5)
        #   if $j%3!=0
        #     s-=1         (divisible by 5 but not by 3)
        #   else
        #     s+=1         (divisible by 3 AND 5)

}$0=s"" # output

0

পাইথ, 27 বাইট

sm|!JPdx,02+}3J}5JhMf}zTrw8

পরীক্ষা স্যুট

ফর্ম ইনপুট যেমন:

a
aaaba

ব্যাখ্যা:

sm|!JPdx,02+}3J}5JhMf}zTrw8
                               z = input() (The match character)
                         w     input() (The string)
                        r 8    Run length encode
                    f}zT       Filter for the runs z is in.
                  hM           Take their lengths
 m|                            Map (d) to the logical or of
    Pd                         Find all prime factors of the current run length
   J                           Save them in J
  !                            Take the logical negation. This will be 1 if
                               d is 1, and 0 otherwise.
           +}3J                If d wasn't 1, add up 1 if 3 is in J
               }5J             and 1 if 5 is in J.
       x,02                    Then, take the index of the result in [0,2]
                               so 0 -> 0, 2 -> 1, 1 -> -1 (not found)
s                              Sum up the values for each run.
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.