ইনপুট স্ট্রিং থেকে পরপর n এর বেশি স্বর সরান


19

আমি টানা তিনটি বেশি স্বরযুক্ত স্ট্রিং পছন্দ করি না। আপনি কি এমন কোনও প্রোগ্রাম লিখতে পারেন যা শব্দ থেকে আমি চাই না এমন সমস্ত স্বর সরিয়ে দেয়?

আপনি STDIN (অথবা নিকটতম বিকল্প), কমান্ড-লাইন আর্গুমেন্ট বা ফাংশন আর্গুমেন্টের মাধ্যমে ইনপুট নিয়ে কোনও প্রোগ্রাম বা ফাংশন লিখতে এবং STDOUT (বা নিকটতম বিকল্প), ফাংশন রিটার্ন মান বা ফাংশন (আউট) প্যারামিটারের মাধ্যমে ফলাফল আউটপুট করতে পারেন।

ইনপুটটি এমন একটি স্ট্রিং যা কেবল প্রিন্টযোগ্য এএসসিআইআই অক্ষর (0x20 থেকে 0x7E, সমেত)।

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

Y এই চ্যালেঞ্জের উদ্দেশ্যে স্বর নয়।

এটি কোড গল্ফ, তাই সংক্ষিপ্ততম কোডটি (বাইটে) জেতে।

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

"Aeiou" => "Aei"
"screeeen" => "screeen"
"We're queueing up for the Hawaiian movie." => "We're queung up for the Hawaiin movie."
"Spaces break runs: aei iou." => "Spaces break runs: aei iou."

2
আপনার মত মিশ্রিত কেসগুলির সাথে আরও কিছু পরীক্ষা অন্তর্ভুক্ত করা উচিত aaYYAAaaaAERGH
জাগারব

উত্তর:


5

পাইথ, 21 বাইট

sfg3=Z&}rT0"aeiou"hZz

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

ব্যাখ্যা:

আমি সমস্ত চরিত্রের মধ্য দিয়ে পুনরাবৃত্তি করি এবং কাউন্টার ব্যবহার করে আমি কত স্বর পাস করেছি তা ট্র্যাক করে রাখি। আমি যখনই কোনও চর পাস করি, যা স্বর নয়, আমি কাউন্টারটি পুনরায় সেট করি 0.

sfg3=Z&}rT0"aeiou"hZz   implicit: z = input string
                                  Z = 0
 f                  z   test every char T in z; keep chars, that return true:
        rT0                convert T to lower
       }   "aeiou"         test if T is a vowel
      &           hZ       logical and with Z+1, 
                           gives 0 if ^ is false, otherwise Z+1
    =Z                     update Z with this value
  g3                       test if 3 >= Z
s                       sum up all remaining chars and print

10

অপঠনযোগ্য , 1647 বাইট

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

ব্যাখ্যা

এই প্রোগ্রামটি সিউডোকোডের সমান:

while (cp = (ch = read)) + 1 {
    (
        (cp -= 65) ?    // A
            (cp -= 4) ?     // E
                (cp -= 4) ?     // I
                    (cp -= 6) ?     // O
                        (cp -= 6) ?     // U
                            (cp -= 12) ?    // a
                                (cp -= 4) ?     // e
                                    (cp -= 4) ?     // i
                                        (cp -= 6) ?     // o
                                            (cp - 6) ?      // u
                                                0
                                            : 1
                                        : 1
                                    : 1
                                : 1
                            : 1
                        : 1
                    : 1
                : 1
            : 1
        : 1
    ) ? ((--vs)+4) ? print(ch) : (++vs) : {
        print(ch)
        vs = 0
    }
}

নিম্নলিখিত পরিবর্তনশীল অ্যাসাইনমেন্ট সহ:

0   (unused)   (13 bytes)
1   cp         ( 4 bytes; occurs 20× in the code)
2   vs         ( 7 bytes; occurs  5× in the code)
3   ch         (10 bytes; occurs  3× in the code)

আপনি দেখতে পাচ্ছেন, আমি পরিবর্তনশীল স্লট 0 এড়িয়ে চলেছি কারণ 0লেখার জন্য এত দীর্ঘ ধ্রুবক।

সুতরাং আমরা প্রতিটি অক্ষর পড়া এবং উভয় মান সংরক্ষণ cpএবং ch। আমরা সংশোধন করব cpতবে chচারপাশে রাখব যাতে প্রয়োজন হলে আমরা এটি মুদ্রণ করতে পারি। আমরা cpASCII- এর সম্ভাব্য 10 স্বর অক্ষরের প্রত্যেকটি কিনা তা পরীক্ষা করার জন্য ক্রমাগতভাবে 65, 4, 4, 6, ইত্যাদি বিয়োগ করব (নোট করুন, শেষের কোনওটি অ্যাসাইনমেন্ট হওয়ার দরকার নেই)।

vsএখনও সর্বমোট 3 টি স্বর ছাপার অনুমতি দেওয়া স্বরের চেয়ে কম থাকে। এটি শুরু হয় 0, সুতরাং 3 স্বর মুদ্রণ করা যায়। এটি পৌঁছে গেলে -3, আমরা স্বরগুলি মুদ্রণ বন্ধ করি।

যদি আমাদের কোনও স্ব-স্বর (স্থান সহ) মুখোমুখি হয় , তবে আমরা print(ch)তারপরে সম্পাদন করব vs = 0। আপনি সম্ভবত অনুমান করেছেন, এটি স্বর পাল্টা পুনরায় সেট করে।

যদি আমরা একটি স্বর মুখোমুখি হয় , আমরা কার্যকর ((--vs)+4) ? print(ch) : (++vs)। আসুন এটি ভেঙে দিন:

  • হ্রাস vs;
  • যদি মান এখন -4, আমরা খুব বেশী দূরে চলে করেছি, তাই কিছু প্রিন্ট না, কিন্তু বৃদ্ধি vsফিরে -3তাই আমরা হবে অবিরত স্বরবর্ণ প্রিন্ট করতে প্রত্যাখ্যান করার;
  • অন্যথায়, অক্ষর মুদ্রণ করুন।

1
এই ভাষাটি তার নামের সাথে সত্য।
বকুল

2
আমি সবসময় এই ভাষাগুলিতে বিস্মিত হই ... "তারা কি আসলেই হাত দিয়ে এগুলি লিখেছিল? যদি তাই হয় তবে আমি তাদের প্রতি করুণা করি ..." + 1
অ্যাডিসন ক্রম্প

9

রেটিনা , 25 বাইট

i`([aeiou]{3})[aeiou]+
$1

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

মোটামুটি সোজা সোজা রেগেক্সের প্রতিস্থাপন। এটি একই বাইট গণনার জন্যও কাজ করে:

Ri`(?<=[aeiou]{3})[aeiou]

3
অবশেষে! একজন অনলাইন দোভাষী! আপনার গিথুব পৃষ্ঠায় এর সাথে লিঙ্ক করা বিবেচনা করা উচিত।
mbomb007

6

জাভাস্ক্রিপ্ট (ES6), 42

বেনামে ফাংশন হিসাবে

s=>s.replace(/[aeiou]+/gi,v=>v.slice(0,3))

4

পার্ল, 27 টি অক্ষর

(২ characters টি অক্ষরের কোড + 1 অক্ষর কমান্ড লাইন বিকল্প)

s/[aeiou]{3}\K[aeiou]+//gi

বড় কথা \Kনয়, আমার মনে আছে কেবল একটি বিরল ঘটনা ।

নমুনা রান:

bash-4.3$ perl -pe 's/[aeiou]{3}\K[aeiou]+//gi' <<< "
> Aeiou
> screeeen
> We're queueing up for the Hawaiian movie.
> Spaces break runs: aei iou."

Aei
screeen
We're queung up for the Hawaiin movie.
Spaces break runs: aei iou.

2
আমি যখন রেটিনা উত্তরটি লিখেছিলাম তখন আমি ভেবেছিলাম "আমার ইচ্ছা। নেট রেজেক্স ছিল \K"। :)
মার্টিন এন্ডার

আকর্ষণীয়, @ মার্টিনব্যাটনার। আমার অনুভূতি ছিল যে এই নিয়মিত প্রকাশগুলি গুরুতর স্টেরয়েড ডায়েটে রাখা হয়েছিল। কৌতূহলের জন্য, তাদের কি পুনরাবৃত্ত সাব-প্যাটার্ন রয়েছে? , অতিরিক্ত এক স্বরবর্ণ শুমার করতে সাহায্য করতে পারেন যদিও ফলাফলের আর: s/([aeiou]{1,3})(?1)+/$1/gi
manatwork

দুর্ভাগ্যক্রমে, তাদের প্যাটার্ন পুনরায় ব্যবহারও নেই। ঐ দুটি জিনিস যে মাঝে মাঝে করতে আমাকে সুইচ পার্ল বা PCRE করতে। যখন আমি রেটিনার রেজেক্স স্বাদে কিছু সাধারণ জিনিস প্যাচিংয়ের কাছাকাছি পৌঁছে যাই তখন আমার মনে হয় আমি সেগুলি যুক্ত করব (সত্যিকারের পুনরাবৃত্তি নয়, তবে কমপক্ষে প্যাটার্ন পুনরায় ব্যবহার এবং সীমাবদ্ধ পুনরাবৃত্তি)।
মার্টিন এন্ডার

2

গুরুতরভাবে, 34 বাইট

,;ù0╗`Ok"aeiou"Okd-Y;╜+*;╗4>`M@░εj

হেক্স ডাম্প:

2c3b9730bb604f6b226165696f75224f6b
642d593bbd2b2a3bbb343e604d40b0ee6a

এটি অনলাইনে চেষ্টা করুন

এটি পাইথ উত্তর হিসাবে একই অ্যালগরিদম ব্যবহার করে একটি রেজিস্টারে স্বরগুলির বর্তমান রান্নার দৈর্ঘ্যের উপর নজর রাখার সময় স্ট্রিংয়ের উপরে ম্যাপিং, যখনই বর্তমান চরিত্রটি স্বরযুক্ত হয় তখন এটি বাড়িয়ে তোলে এবং এটি অনুমোদিত দৈর্ঘ্য অতিক্রম করেছে কিনা তা পরীক্ষা করে, যদি তাই হয় তবে 0 ফিরিয়ে দিচ্ছেন এবং তারপরে এই উত্পন্ন ফিল্টারটি দিয়ে মূল স্ট্রিংটি ফিল্টার করা হচ্ছে। স্ট্রিংগুলিতে সেট বিয়োগগুলি ব্যবহার করতে পারলে এটি অনেক কম হবে। ( Okএটি মুছে ফেলা যায় এবং Okdকেবলটি দিয়ে প্রতিস্থাপন করা যায় @)। শুনেছি এই বৈশিষ্ট্যটি পরবর্তী আপডেটে আসছে ...


2

সি, 166 বাইট

খুব ছোট উত্তরটি এখন পর্যন্ত নয়, তবে আমি মনে করি ..

#define V v[1][i]!=
#define P printf("%c",v[1][i]),j
j;main(i,v)char**v;{for(i=0;V 0;i++)(V 97&V 'e'&V 'i'&V 'o'&V 'u'&V 65&V 69&V 73&V 79&V 85)?P=0:j>3?j++:P++;}

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

$ a.exe "We're queueing up for the Hawaiian movie."

We're queung up for the Hawaiin movie.

$ wc -c vowels.c 

166 vowels.c

2

গণিত, 68 বাইট

a=Characters@"aeiouAEIOU";StringReplace[#,b:a~Repeated~{3}~~a..:>b]&

রেজেক্স উত্তরটি একই দৈর্ঘ্যের হবে, তবে কে রেগেক্স ব্যবহার করে?


2

জাভা, 115 বাইট

class a{public static void main(String[] a){System.out.println(a[0].replaceAll("(?i)([aeiou]{3})[aeiou]*","$1"));}}

প্রোগ্রামের প্যারামিটার হিসাবে ইনপুট আশা করে।

ইউনিট পরীক্ষার ফলাফল:

Aei
screeen
We're queung up for the Hawaiin movie.

String[]এবং এর মধ্যে স্থানটি সরিয়ে একটি বাইট সংরক্ষণ করুন aString[]a
পোকে

printপরিবর্তে ব্যবহার করে 2 বাইট সংরক্ষণ করুন println। আমি বিশ্বাস করি না যে অনুমানটির জন্য একটি নতুন লাইনের প্রয়োজন হয়।
পোকে

2

এপিএল, 40 টি অক্ষর

{⍵/⍨1↓4≠⊃+/(1-⍳4)⌽¨⊂'aeiouAEIOU'∊⍨' ',⍵}

ইংরেজীতে:

  • 'aeiouAEIOU'∊⍨' ',⍵: স্বরগুলি সন্ধান করুন (এবং আবর্তনের উপর ভাঙ্গার জন্য একটি স্থান প্রস্তুত করুন);
  • (1-⍳4)⌽¨⊂: 0, 1, 2, 3 বার (মোড়ানো-চারপাশে) ডানদিকে বুলিয়ান ভেক্টরকে ঘোরান;
  • ⊃+/ sum: আবর্তন এবং আনবক্স
  • 1↓4≠: 4 এর চেয়ে আলাদা খুঁজে বের করুন এবং প্রথমটি সরিয়ে ফেলুন (আমরা যে জায়গাতে চাপ দিয়েছি তার জন্য ক্যাথারে)
  • ⍵/⍨: যুক্তিতে, কেবল সেই উপাদানটি রাখুন যেখানে যোগফল 4 এর চেয়ে আলাদা ছিল।

1

পার্ল 6 ,  36  35 বাইট

{S:g:i/(<[aeiou]>**3)<[aeiou]>+/$0/} # 36 bytes

$ perl6 -pe 's:g:i/(<[aeiou]>**3)<[aeiou]>+/$0/' # 34 + 1 = 35 bytes

ব্যবহার:

$ perl6 -pe 's:g:i/(<[aeiou]>**3)<[aeiou]>+/$0/' <<< "
> Aeiou
> screeeen
> We're queueing up for the Hawaiian movie.
> Spaces break runs: aei iou."
Aei
screeen
We're queung up for the Hawaiin movie.
Spaces break runs: aei iou.

1

সি (205 বাইট)

#include <stdio.h>
#define T(x)for(i=0;i<10;++i){if(v[i]==x){b=x;m=1;break;}}putchar(c);
main(b,c,i,m){char v[]="aeiouAEIOU";
while((c=getchar())!=EOF){if(!m){T(c);}else{if(b==c)continue;else{m=0;T(c);}}}}

(স্পষ্টতার জন্য একটি লাইন বিরতি যুক্ত করা হয়েছে)


1

স্কালা, 107 বাইট

readLine.foldLeft("",0)((a,n)=>if(!"aeiou".contains(n|32))a._1+n->0 else if(a._2>2)a else(a._1+n,a._2+1))_1

1

জাভাস্ক্রিপ্ট ES6, 43 অক্ষর

s=>s.replace(/([aeiou]{3})[aeiou]*/gi,"$1")

টেস্ট:

f=s=>s.replace(/([aeiou]{3})[aeiou]*/gi,"$1")
;`"Aeiou" => "Aei"
"screeeen" => "screeen"
"We're queueing up for the Hawaiian movie." => "We're queung up for the Hawaiin movie."
"Spaces break runs: aei iou." => "Spaces break runs: aei iou."`
.replace(/"/g,"").split("\n").every(s=>f((s=s.split(" => "))[0])==s[1])

1

x86 এমএস-ডস .কম ফাইল , 44 বাইট 36 বাইট

.COM ফাইলগুলি এমএস-ডস 1 থেকে বর্তমানের মাধ্যমে ব্যাপকভাবে সমর্থিত --- আমি ডোজমুতে চলছি, কেবলমাত্র 8086 কমান্ড ব্যবহার করে।

স্বরগুলির পরীক্ষার জন্য স্বর্ণের জন্য পরীক্ষা করতে REPNE SCASB ব্যবহার করে 44 থেকে 36 বাইট থেকে কমিয়ে প্রতিটি স্বর পরীক্ষা করার জন্য পৃথক কমান্ড ব্যবহার না করে।

Hex dump, reversible using `xxd -r -seek -256`:
0100: b3 03 43 b4 08 cd 21 88 c2 24 df b1 05 bf 1f 01   ..C...!..$......
0110: f2 ae 74 02 b3 05 4b 74 e9 b4 02 cd 21 eb e4 41   ..t...Kt....!..A
0120: 45 49 4f 55                                       EIOU

Unassembled using debug:
0100 B303    MOV BL,03     ; initialize counter to 3 (will increment by 1 to be 4)
0102 43      INC BX        ; increment counter--runs each time it hits 0 so it never goes <0
0103 B408    MOV AH,08     ; 
0105 CD21    INT 21        ; with AH=8, read 1 char without echo
0107 88C2    MOV DL,AL     ; copy input for potential output
0109 24DF    AND AL,DF     ; make input uppercase for testing
010B B105    MOV CL,05     ; count of 5 vowels to test against
010D BF1F01  MOV DI,011F   ; location of first vowel to test against
0110 F2AE    REPNE SCASB   ; test input against each vowel
0112 7402    JZ 0116       ; if input was not a vowel:
0114 B305    MOV BL,05     ;    reset counter to 5 (will decrement by 1 to be 4)
0116 4B      DEC BX        ; decrement counter regardless
0117 74E9    JZ 0102       ; if hit 0 (fourth or later vowel): goto 102
0119 B402    MOV AH,02     ; 
011B CD21    INT 21        ; with AH=2, print char
011D EBE4    JMP 0103      ; go to 103 for next character

bytes 011f-0123 contain the uppercase vowels AEIOU


1

ভি , 21 বাইট (নন-কেপটিং)

ñ[aeiou]ñÍãqû3}úsq*

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

ñ[aeiou]ñ                     "Assign the string `[aeiou]` to register 'q'
         Íã                   "Search and replace on multiple lines (case insensitive):
           <C-r>q             "Register 'q'
                 û3}          "Repeated 3 times
                    ús        "Mark the following to be removed:
                      <C-r>q* "Register 'q' repeated any number of times

এটি আরও সহজবোধ্য সমাধানের চেয়ে সবেমাত্র সংক্ষিপ্ত:

Íã[aeiou]û3}ús[aeiou]*

(22 বাইট)


0

রুবি, 44 বাইট

><<$<.read.gsub(/([aeiou]{3})[aeiou]+/i,'\1')

উদাহরণ:

% ruby -e "$><<$<.read.gsub(/([aeiou]{3})[aeiou]+/i,'\1')" <<< "
Aeiou
screeeen
We're queueing up for the Hawaiian movie.
Spaces break runs: aei iou."

Aei
screeen
We're queung up for the Hawaiin movie.
Spaces break runs: aei iou.

আপনি এটি লিখেছেন: "ইনপুটটি এমন একটি স্ট্রিং যা কেবল মুদ্রণযোগ্য ASCII অক্ষর (0x20 থেকে 0x7E, সমেত) অন্তর্ভুক্ত করে” "তবে কেন $<.readএটি অতিরিক্ত অক্ষর ব্যয় করার পরিবর্তে মাল্টলাইন ইনপুট (এভাবে পরিসীমা 0x0a এর অন্তর্ভুক্ত) পরিচালনা করতে পারে gets?
manatwork

@ মান্যাটওয়ার্ক এটি একটি সত্যিই ভাল পয়েন্ট, আপনাকে ধন্যবাদ! ভাবেন এটি হয়ত 2-3 বাইটগুলি সাশ্রয় করতে পারে :)
জোসেফ ওয়েইসম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.