ค้นหาโพลีทองของฉัน!


19

สำหรับจุดประสงค์ของการท้าทายนี้polyphthongถูกกำหนดให้เป็นส่วนต่อเนื่องของ String ที่ประกอบด้วยสระและมีความยาวอย่างน้อย 2 ให้สตริงที่ไม่ว่างเปล่าเป็นอินพุตงานของคุณคือส่งออก polyphthongs ทั้งหมดที่มี .

ตัวอย่างเช่น"abeoic"มีชิ้นส่วนที่ต่อเนื่องกัน (คั่นด้วยช่องว่าง) ต่อไปนี้:

a b e o i c ab be eo oi ic abe beo eoi oic abeo beoi eoic abeoi beoic abeoic

การลบสิ่งที่มีสิ่งอื่นที่ไม่ใช่เสียงสระหรือมีความยาวน้อยกว่า 2 เราจะได้โพลีทองที่เราต้องการ:

eo oi eoi

การส่งของคุณจะต้องปฏิบัติตามกฎต่อไปนี้:

  • คุณสามารถเลือกตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่สำหรับ I / O แต่ตัวพิมพ์ออกจะต้องตรงกับตัวพิมพ์เล็ก

  • เสียงสระคือaeiou(สำหรับตัวพิมพ์เล็ก) และAEIOU(สำหรับตัวพิมพ์ใหญ่) y/ Yไม่ถือว่าเป็นเสียงสระ

  • อินพุตจะมีเฉพาะ ASCII ที่พิมพ์ได้

  • หากโพลีทองปรากฏขึ้นหลายครั้งคุณอาจเลือกที่จะเอาท์พุทเพียงครั้งเดียวหรือส่งออกที่เกิดขึ้นทั้งหมด

  • รูปแบบและวิธีการ I / O ที่สมเหตุสมผลใด ๆ ที่ได้รับอนุญาต (รายการของตัวละครก็ดีสำหรับทั้งอินพุตและเอาต์พุต)

กรณีทดสอบ

อินพุต -> เอาต์พุต (ตัวพิมพ์เล็ก)

r67 ^^ () * 6536782! 87 -> []
ปริศนาการเขียนโปรแกรมและรหัสกอล์ฟ -> []
aaand ... ฉันชนะแล้ว! -> ['aa', 'aa', 'aaa']
abeoic -> ['eo', 'oi', 'eoi']
yah eioo ala -> ['ei', 'io', 'oo', 'eio', 'ioo', 'eioo']
@yabeeeayio__e -> ['ee', 'ee', 'ea', 'io', 'eee', 'eea', 'eeea']
0ioen0aaiosnjksd -> ['io', 'oe', 'aa', 'ai', 'io', 'ioe', 'ioe', 'aai', 'aio', 'aaio']

โปรดทราบว่าสำหรับกรณีทดสอบ 3 และ 6 คุณสามารถส่งออก'aa'และ'ee'ตามลำดับเพียงครั้งเดียว (ดูกฎที่สี่)

นี่คือการส่งสั้นที่สุดเป็นไบต์ในทุกภาษาชนะ!


โปรดทราบว่าเดิมนี้ถูกโพสต์เป็นCMC (Chat Mini Challenge) ในThe Nine Nineแต่By Admบอกว่ามันเหมาะสำหรับ Mainดังนั้นฉันเลยลงเอยด้วยการโพสต์สิ่งนี้
นาย Xcoder

ฉันเป็นกรณีทดสอบครั้งที่สามของคุณ'aa'ปรากฏขึ้นสองครั้ง มีการส่งออกสายเดียวกันหลายครั้งถ้ามันปรากฏขึ้นในสถานที่ต่าง ๆ หรืออย่างใดอย่างหนึ่งสามารถส่งออก polyphtongs เฉพาะหรือไม่
Jonathan Frech

@ JonathanFrech ตกลงฉันเดาเอาท์พุทโพลีฟีนที่ไม่เหมือนใครดี จะแก้ไข
Mr. Xcoder

ลำดับของเอาต์พุตมีความสำคัญหรือไม่?
ovs

1
@ Xophmeister สำหรับจุดประสงค์ของการท้าทายนี้โพลีทองถูกกำหนดให้เป็น - ฉันรู้ว่านั่นไม่ใช่คำนิยามทางภาษาที่ถูกต้อง :-)
Mr. Xcoder

คำตอบ:


7

Python 2 , 102 97 ไบต์

ขอบคุณ @JonathanFrech สำหรับ -5 ไบต์

w=input();l=range(len(w)+1)
print{w[a:b]for a in l for b in l if b-a>1<set(w[a:b])<=set('aeiou')}

ลองออนไลน์!

ตัวพิมพ์เล็ก I / O


1
ฉันคิดว่าคุณไม่ต้องการ...AEIOU'เนื่องจากคุณได้รับอนุญาตให้ใช้ตัวอักษรตัวพิมพ์เล็กเป็นอินพุตเท่านั้น
Jonathan Frech


@JonathanFrech ใช้print([w[a:b]for a in l for b in l[a+2:]if{*w[a:b]}<={*'aeiou'}])งานได้ 93.
Lynn

@Lynn และวิธีการแก้ปัญหาของคุณผลิต96 งูหลาม 2 ไบต์
Jonathan Frech

6

JavaScript (ES6), 77 75 ไบต์

คาดว่าอินพุตเป็นตัวพิมพ์เล็ก เอาท์พุตโพลีทองที่ไม่เหมือนใครโดยไม่ต้องทำซ้ำ

w=>(r=[],g=s=>w.match(s)&&[...'aeiou'].map(c=>g(s+c),s[1]&&r.push(s)))``&&r

กรณีทดสอบ

อย่างไร?

เราสร้างต้นไม้ของโพลีทองที่เป็นไปได้แบบซ้ำ ๆ ตัดกิ่งทันทีที่โหนดปัจจุบันไม่ได้อยู่ในอินพุตอีกต่อไปและบันทึกโหนดที่ตรงกันทั้งหมดอย่างน้อย 2 ตัวอักษร

w => (                      // given the input w
  r = [],                   // r = array of results
  g = s =>                  // g = recursive function taking s
    w.match(s) &&           // if w contains s:
    [...'aeiou'].map(c =>   //   for each vowel c:
      g(s + c),             //     do a recursive call with s + c
      s[1] &&               //     if s is at least 2-character long:
      r.push(s)             //       push it into r
    )                       //   end of map()
)``                         // initial call to g() with s = ''
&& r                        // return r

6

เรติน่า23 23ไบต์

M!&`[aeiou]+
r!&`..+

ลองออนไลน์!

สิ่งนี้จะพิมพ์เหตุการณ์โพลีทองทั้งหมด

คำอธิบาย

จอประสาทตามีวิธีในการรับการแข่งขันที่ทับซ้อนกันทั้งหมดแต่สิ่งนี้หมายถึงว่ามันจะมองหาหนึ่งการแข่งขันจากแต่ละตำแหน่ง ดังนั้นหากมีการแข่งขันหลายรายการจากตำแหน่งเดียวกันการแข่งขันนี้จะคืนหนึ่งรายการเท่านั้น วิธีเดียวที่จะได้รับการจับคู่ที่ทับซ้อนกันจริงๆคือการใช้คุณสมบัตินี้สองครั้งเมื่อจับคู่จากซ้ายไปขวาและอีกครั้งจากขวาไปซ้าย (เพื่อให้เราได้รับการจับคู่ที่ยาวที่สุดเท่าที่จะทำได้จากตำแหน่งเริ่มต้นแต่ละครั้ง ตำแหน่งสิ้นสุดที่เป็นไปได้)

ดังนั้นโปรแกรมจริง:

M!&`[aeiou]+

รับสระที่ทับซ้อนกันทั้งหมด สิ่งนี้หมายความว่าจริงๆคือการได้รับส่วนต่อท้ายของสระทั้งหมด

r!&`..+

ตอนนี้รับส่วนนำหน้าทั้งหมดที่มีความยาวอย่างน้อย 2 ตัวโดยจับคู่จากขวาไปซ้าย นี่Mคือนัยที่นี่เพราะมันเป็นบรรทัดสุดท้ายของโปรแกรม


คุณอธิบายรหัสได้หรือไม่
Adám

!&`[aeiou]{2,}คือให้ใกล้เคียงกับที่ถูกต้องจะมีวิธีที่จะได้รับมัน greedier จึงตรงกับio?
AdmBorkBork

1
@ Adámเพิ่มคำอธิบาย
Martin Ender

@AdmBorkBork คำอธิบายของฉันครอบคลุมประเภทสาเหตุที่ไม่สามารถทำงานได้ Retina ไม่ได้เล่นกับเอนจิ้น regex ที่แท้จริงดังนั้นสิ่งที่&ทำได้มากที่สุดคือการลองจับคู่จากแต่ละตำแหน่งดังนั้นคุณจะไม่สามารถจับคู่ความยาวแตกต่างจากตำแหน่งเดียวกันได้ นั่นเป็นเหตุผลที่ฉันต้องการขั้นตอนที่สอง
Martin Ender

คำอธิบายที่ดีขอบคุณ
AdmBorkBork

5

QuadS , 20 + 1 = 21 ไบต์

⊃,/⍵
[aeiou]+
1↓,\⍵M

ด้วยoธง

ลองออนไลน์!

ตามลำดับสิ่งต่าง ๆ ที่เกิดขึ้น:

[aeiou]+ ในแต่ละการแข่งขันของ PCRE นี้

,\⍵M คำนำหน้าของการแข่งขัน

1↓ ดรอปแรก (ซึ่งมีหนึ่งเสียงสระ)

,/⍵ เชื่อมต่อกันรายการทั้งหมดของคำนำหน้า

 เปิดเผย (เพราะการ/ปิดล้อม)


นี่เทียบเท่ากับฟังก์ชัน Dyalog APL โดยปริยาย:

{⊃,/⍵}'[aeiou]+'S{1↓,\⍵.Match}⍠'OM'1

ลองออนไลน์!



4

Java (OpenJDK 8) , 138 135 134 ไบต์

s->{String e,x="";for(int i=0,j,y=s.length();i<=y;i++)for(j=y;j>i;x+=e.matches("[aeiou]{2,}")?e+" ":"")e=s.substring(i,j--);return x;}

ลองออนไลน์!


i<y-1สามารถi<=yและString#matchesการตรวจสอบโดยปริยายทั้งสตริงเพื่อให้คุณไม่จำเป็นต้องและ^ $+1 สำหรับการตบตีฉัน เป็นเพียงเกี่ยวกับการโพสต์ 138 byte คำตอบของฉันเอง (แต่ด้วยการเปลี่ยนแปลงเหล่านี้ฉันเสนอคุณจะสั้นกว่า) :)
Kevin Cruijssen


3

เยลลี่ขนาด 9 ไบต์

ẆḟÐḟØcḊÐf

ลองออนไลน์!

คำอธิบาย

ẆḟÐḟØcḊÐf  Main Link
Ẇ          Get all (contiguous) sublists
  Ðḟ       Filter; remove all elements where the result is truthy:
 ḟ  Øc     Filter; remove all vowels; if it's truthy, then it contains non-vowels
       Ðf  Filter; keep elements where the result is truthy:
      Ḋ    Dequeue; return all but the first element (truthy if the length was at least 2)

-4 ไบต์ขอบคุณ Mr. Xcoder


11 ไบต์โดยการแทนที่ด้วยL>1$$ L’$
นาย Xcoder

ที่จริงคุณสามารถแทนที่L’$ด้วยสำหรับ9 ไบต์ ẆṫLḊḟÐḟØcเทียบเท่าจะเป็น
นาย Xcoder

3

C (gcc) , 104 ไบต์ (99 ไบต์พร้อมด้วยตัวพิมพ์เล็กเท่านั้นหรือเป็นตัวพิมพ์ใหญ่เท่านั้น)

ใช่มันรั่ว - อะไรนะ?

#include<string.h>
a;f(char*s){*s&&f(s+1);for(a=strspn(s=strdup(s),"AEIOUaeiou");a>1;)s[a--]=0,puts(s);}

ลองออนไลน์!


3
ดูเหมือนว่าจะทำงานโดยไม่ต้องใช้#includeและคุณจำเป็นต้องจัดการกับตัวอักษรหนึ่งตัวเท่านั้นดังนั้นคุณจึงสามารถย่อให้เหลือเพียง 80 ไบต์
Steadybox


3

R , 137 ไบต์

outgolfed โดยMark !

function(S)(x=unlist(sapply((s=el(strsplit(S,"[^aeiou]")))[nchar(s)>1],function(x)substring(x,1:(n=nchar(x)),rep(n:1,e=n)))))[nchar(x)>1]

ลองออนไลน์!

function(S){
 s <- el(strsplit(S,"[^aeiou]"))            # split on non-vowels
 s <- s[nchar(s)>1]                         # vowel groups of length at least 2
 p <- function(x){                          # generates all substrings of inputs
  n <- nchar(x)
  start <- 1:n
  stop <- rep(n:1, n)                       # this will generate dups
  substring(x, start, stop)
} q <- unlist(sapply(s, p)) # all substrings q <- q[nchar(q)>1] # all length-2 or more substrings }


uniqueคุณไม่จำเป็นต้อง
Mr. Xcoder

"รูปแบบและวิธีการ I / O ที่สมเหตุสมผลใด ๆ ได้รับอนุญาต (รายการของตัวละครก็ใช้ได้ทั้งอินพุตและเอาต์พุต)" ฉันไม่ได้ลองใช้ แต่ฉันคิดว่ามันอาจจะค่อนข้างสั้นกว่านี้ถ้าคุณใช้รายชื่อตัวละครตั้งแต่ต้น
user2390246

@ user2390246 บางที ฉันไม่เชื่อว่ามันจะช่วยได้ แต่ก็อาจเป็นเพราะวิธีการแยกเสียงสระของเสียงสระจะแตกต่างกันมากและฉันก็ไม่สามารถคาดหัวได้ในตอนนี้
Giuseppe


2

PowerShell , 93 88 ไบต์

param($a)0..($b=$a.count-1)|%{($i=$_)..$b|%{-join$a[$i..$_]}}|?{$_-match'^[aeiou]{2,}$'}

ลองออนไลน์!

ใช้ I / O ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ (หรือมิกซ์!)

ขอยืมรหัสจากคำตอบของฉันไปยังSubstrings ที่จะได้รับ substrings ทั้งหมดจากนั้นดึงผู้ที่ regex -matchต่อ^[aeiou]{2,}$- กล่าวคือพวกที่มีความยาวอย่างน้อยสองเสียงสระและสระเท่านั้น สตริงเหล่านั้นจะถูกทิ้งไว้บนไปป์ไลน์และเอาท์พุทก็เป็นนัย


2

Haskell , 148 137 130 123 118 ไบต์

ขอบคุณ @Laikoni สำหรับ -11 ไบต์เพิ่มอีก -7 ไบต์โดยชี้ให้ฉันไปที่เคล็ดลับการเล่นกอล์ฟอีก -7 ไบต์และอีก -5 ไบต์สำหรับจำนวนมหันต์ -30 ไบต์

สิ่งนี้ดูเหมือนจะเหมาะสำหรับ Haskell แต่ผลลัพธ์ดูเหมือนจะไม่เห็นด้วย ฉันคิดว่า Haskell เป็นตัวเลือกที่ดี ฉันยังคงรำคาญใจกับวิธีการsubsequencesทำงานแม้ว่า

import Data.List
v=(`elem`"aeiou")
p s=nub$do x<-groupBy((.v).(&&).v)s;[y|y@(c:_:_)<-subsequences x,v c,y`isInfixOf`x]

ลองออนไลน์!


1
ยินดีต้อนรับสู่ Haskell golfing! คุณอาจสนใจในคอลเลกชันของเคล็ดลับการเล่นกอล์ฟ , คำแนะนำเกี่ยวกับกฎการตีกอล์ฟและOf Monads and Men , ห้องแชท Haskell ของเรา
Laikoni

1
หมายเหตุบางประการเกี่ยวกับคำตอบของคุณ: บรรทัดใหม่มีจำนวนไบต์เท่ากับ;แต่เพิ่มความสามารถในการอ่านรหัส คุณมักจะใช้eร่วมกับvเพื่อให้คุณโดยตรงสามารถประกาศeleme=( จะสั้นกว่า มีแทนแต่สั้นกว่าคือจากรายการ monad ซึ่งมีผลเหมือนกัน "aeiou")y!!0head yconcatMapconcat.map(=<<)
ไลโคนี

1
คุณสามารถนำเข้าแทนData.Lists Data.Listอดีตมีฟังก์ชั่นทั้งหมดของหลัง แต่ยังมีสิ่งเพิ่มเติมเช่นpowersliceซึ่งจะให้รายการเรียงลำดับต่อเนื่องทั้งหมด
nimi

1
ในความเข้าใจของรายการคุณสามารถจับคู่ได้ที่y@(h:_:_)จะลดลงlength y>1และลดการv(y!!0) v h
Laikoni

1
ฉันมีสองเอซขึ้นแขนของฉัน (1) (\x y->v x&&v y)จะสั้นลงโดยการแปลงไปยังจุดฟรีทั้งด้วยตนเองโดยใช้เคล็ดลับนี้หรือโดยการใช้pointfree.io (2) monad รายการนอกจากนี้ยังสามารถใช้กับdoโน้ตที่เป็นเป็นเช่นเดียวกับdo x<-l;[...] l>>=(\x->[...])Btw บน TIO คุณสามารถใส่ของคุณmainลงในฟิลด์ส่วนหัวหรือส่วนท้ายเพื่อให้นับไบต์ตรงกับการส่งจริง
Laikoni

2

Perl, 45 ไบต์

local $,=" ";print $_=~/(?=([AEIOU]{2,}))/ig;

ยินดีต้อนรับสู่ PPCG! โพสต์แรกที่ดี!
Rɪᴋᴇʀ

1
ในกรณีที่คุณสงสัยเกี่ยวกับ downvote นั้นจะถูกวางไว้โดยบัญชี bot ชุมชนโดยอัตโนมัติเพราะโพสต์ของคุณถูกแก้ไข ขออภัยไม่มีสิ่งใดที่เราสามารถทำได้เกี่ยวกับมันจริงมันเป็นพฤติกรรมที่โง่ หวังว่าผู้อัปโหลดควรเรียกการถอนการโหวตโดยอัตโนมัติ
HyperNeutrino

2

R , 120 ไบต์ 110 ไบต์

function(x){k=nchar(x);i=k:1;e=expand.grid(i,i[-1]);grep("^[aeiou]+$",mapply(substr,x,e[,2],e[,2]+e[,1]),v=T)}

ลองออนไลน์!

มันทำงานอย่างไร

function(x){                  #initalize the anonymous function where input is stored in x
  k=nchar(x)                  #set k to the number of characters in x
  i=k:1                       #create vector of integers from k to 1
  e=expand.grid(i,i[-1])      #create matrix of full outer join on i 
                              #except in the second column, limit i to being less than k
  grep("^[aeiou]+$",          #search for strings made of only vowels
       mapply(substr,         #map the substring function
              x,              #with x as the string to subset
              e[,2],          #start at the second column of the outer join
              e[,2]+e[,1]     #end at the sum of the sum of the first and second columns
       ),
       v=T                    #if a match is found, return it's value
  )
}                             #by default, R returns the last line of a function

105 ไบต์วิธีการที่ดีฉันจะเพิ่มความคิดเห็นเพื่อแก้ปัญหาของฉันสังเกตว่าคุณได้ outgolfed ฉัน :)
จูเซปเป้

ฉันจะซื่อสัตย์ฉันยินดีเป็นอย่างยิ่งที่ฉันสามารถหาวิธีแก้ปัญหาให้คุณได้ :) โดยปกติแล้วคุณจะอยู่ข้างหน้าฉันหลายปีก่อนหน้านี้หรือหารหัสทั้งหมดที่ฉันทิ้งไว้บนโต๊ะ
ทำเครื่องหมาย


1

JavaScript (ES6), 105 ไบต์

s=>eval('a=[];l=i=s.length;while(i--){j=l;while(j--)if(/^[aeiou]{2,}$/.test(t=s.slice(i,j)))a.push(t)}a')

อาจมีหลายสิ่งที่ต้องทำ

let f=
s=>eval('a=[];l=i=s.length;while(i--){j=l;while(j--)if(/^[aeiou]{2,}$/.test(t=s.slice(i,j)))a.push(t)}a')
console.log(JSON.stringify(f('r67^^()*6536782!87')))
console.log(JSON.stringify(f('programming puzzles and code golf')))
console.log(JSON.stringify(f('aaand... i won!')))
console.log(JSON.stringify(f('abeoic')))
console.log(JSON.stringify(f('yah eioo ala')))
console.log(JSON.stringify(f('@yabeeeayio__e')))
console.log(JSON.stringify(f('0ioen0aaiosnjksd')))



1

05AB1E , 10 ไบต์

Œʒg≠}ʒžMм_

ลองออนไลน์!

คำอธิบาย:

Œʒg≠}ʒžMм_  
Œ            Push all substrings (abeoic => a, b, e, ..., eoi, eoc, ... abeioc)
 ʒ  }        Filter elements for which result is 1
  g≠            Push 1 if length is != 1, 0 otherwise
     ʒ       Filter elements for which result is 1
      žMм       Remove all occurences of 'aeiou' from element
         _      Negative bool: push 1 if length == 0, 0 otherwise

คำตอบที่ดี! ฉันมีŒʒžMм_}ʒg≠
นาย Xcoder

@ Mr.Xcoder ขอบคุณ ฉันยังมีŒD1ùKʒžMм_10 ไบต์ ฉันพยายามหาวิธีตีกอล์ฟลง
scottinet

1

C, 105 75 ไบต์

ฟังก์ชั่นยอมรับพอยน์เตอร์ไปยังอินพุตตัวพิมพ์เล็กและสร้างสตริงที่คั่นด้วยช่องว่างบนเอาต์พุตมาตรฐาน:

i;f(char*p){for(i=strspn(p,"aeiou");i>1;)printf("%.*s ",i--,p);*p&&f(p+1);}

โปรแกรมทดสอบ

#include <stdio.h>

int main(int argc, char **argv)
{
    for (int i = 1;  i < argc;  ++i) {
        char *in = argv[i];
        printf("'%s' -> [ ", in);
        f(in);
        puts("]");
    }
}

การสาธิต

'r67^^()*6536782!87' -> [ ]
'programming puzzles and code golf' -> [ ]
'aaand... i won!' -> [ aaa aa aa ]
'abeoic' -> [ eoi eo oi ]
'yah eioo ala' -> [ eioo eio ei ioo io oo ]
'@yabeeeayio__e' -> [ eeea eee ee eea ee ea io ]
'0ioen0aaiosnjksd' -> [ ioe io oe aaio aai aa aio ai io ]

คำอธิบาย

#include <string.h>
#include <stdio.h>

void find_polyphthongs(char *p)
{
    /* from longest polyphthong substring down to 2 */
    for (int i = strspn(p,"aeiou");  i >= 2;  --i) {
        /* print exactly [p .. p+i] */
        printf("%.*s ", i, p);
    }

    /* tail-recurse to next char */
    if (*p) {
        find_polyphthongs(p+1);
    }
}

ใช้ GCC ใน Debian Linux ผมดูเหมือนจะได้รับไปกับการประกาศโดยปริยายกันไม่ได้ของและstrchr() printf()แพลตฟอร์มอื่น ๆ อาจต้องการ<stdio.h>และ<string.h>รวมอยู่ด้วย

ลองออนไลน์ (ต้องใช้ Javascript)


f(p)char*p;ไม่สามารถเป็นได้f(char*p)?
Jonathan Frech

ค่อนข้างขวา - ฉัน f(s,d)char*s,*dแต่เดิมมีการส่งออกไปยังที่เก็บโทรจัดสรร:
Toby Speight

102 ไบต์
Jonathan Frech

1

APL (Dyalog) , 53 ไบต์

นี่คือDfn( d irect unctio n ) p '<argument>'การใช้งาน คำเตือนที่เป็นธรรม: สิ่งนี้ไม่ได้มีประสิทธิภาพมากนักและหมดเวลาสำหรับinput > 8 charactersTIO แต่ทำงานได้ตามปกติเมื่อให้เวลาเพียงพอ

p←{(G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/G←⊃,/{(,v∘.,⊢)⍣⍵⊢v'aeiou'}¨⍳≢1↓⍵}

ลองออนไลน์!

ขอบคุณ @ Adámเป็นเวลา 16 ไบต์!

มันทำงานอย่างไร:

วิธีนี้ง่ายต่อการเข้าใจหากเราแบ่งรหัสเป็นส่วนย่อย ๆ :

  • ส่วนที่ 1 - G←⊃,/{(,v∘.,⊢)⍣⍵⊢v←'aeiou'}¨⍳≢1↓⍵: ส่วนนี้ของฟังก์ชั่นนี้ใช้ความยาวของอาร์กิวเมนต์ (ขวา) และผสมเวกเตอร์aeiouกับตัวเองหลาย ๆ ครั้งทำให้เกิดการรวมของ[2, length(right arg)]สระที่เป็นไปได้ทั้งหมด
  • ส่วนที่ 2 - (G∊⊃,/⌽,\∘⌽¨,\⌽⍵)/: ส่วนนี้ตรวจสอบว่าองค์ประกอบใดของ G ที่เป็นสมาชิกของสตริงย่อยของอินพุต นี่จะคืนค่าเวกเตอร์บูลีนโดยมี1ดัชนีของชุดเสียงสระที่ปรากฏในอินพุตและ0ที่ไม่ได้อยู่ เวกเตอร์ที่ได้จะถูกแมป ( /) เหนือGส่งคืนองค์ประกอบที่สอดคล้องกับค่าความจริง

pสิ่งที่ทั้งได้รับมอบหมายแล้ว p←ไม่รวมอยู่ในจำนวนไบต์เนื่องจากไม่จำเป็นเพียงแค่ทำให้การใช้งานง่ายขึ้น


กอล์ฟมากขึ้น นอกจากนี้คุณไม่ควรใช้ตัวกรอง /ใช้
อดัม


1

Ruby 2.4, 100 ไบต์

(2..(b=(a=gets).size-1)).to_a.flat_map{|i|(0..(b-i)).to_a.map{|j|a[j,i]}}.select{|k|k=~/^[aeiou]+$/}

นี่เป็นความพยายามครั้งแรกของฉันในการเล่นกอล์ฟและฉันแน่ใจว่ามีหลายวิธีในการย่อรหัสนี้




0

T-SQL (SQL Server 2014), 281 ไบต์

;with s as(select substring(@,1,1)C,stuff(@,1,1,'')D,1 R union all select substring(D,1,1),stuff(D,1,1,''),R+1from s where len(D)>0),c as(select R i,C w from s where C LIKE'[aeiou]'union all select R,w+C from c join s ON i+1=R where s.C LIKE'[aeiou]')select w from c where len(w)>1

ป้อนให้โดย

declare @ varchar(max) = 'abeoic'

ใช้นิพจน์ตารางทั่วไปsเพื่อแยกอินพุตออกเป็นตัวอักษรแต่ละตัวที่เรียงลำดับจากนั้นนิพจน์ตารางทั่วไปตัวที่สองcเพื่อสร้างชุดค่าผสมที่สั่งซื้อทั้งหมดโดยไม่รวมเสียงสระ

ซอ Fiddle


0

PHP, 139 ไบต์

function y($s){$p=[];$l=strlen($s);for($i=2;$i<=$l;$i++)for($j=0;$j<=$l-$i;$j++)strspn($a=substr($s,$j,$i),'aeiou')==$i&&$p[]=$a;return$p;}

การสาธิตออนไลน์

function yreadable($s)
{
    $p = [];
    $l = strlen($s);
    for($i=2; $i<=$l; $i++)
        for($j=0; $j<=$l-$i; $j++)
            strspn($a=substr($s,$j,$i),'aeiou')==$i
            && $p[] = $a;
    return $p;
}

มันทำงานอย่างไร

เลือกสตริงย่อย (เริ่มต้นด้วยความยาว 2) ประกอบด้วยอักขระที่อยู่ติดกันและย้ายไปตามสตริง รวบรวมสตริงย่อยใด ๆ ที่มีสระเท่านั้น ทำซ้ำกับสตริงย่อยที่ยาวขึ้น

สำหรับสตริง 'abcdef' นี่คือสตริงย่อยที่สร้างและตรวจสอบแล้ว:

'ab','bc','cd','de','ef'
'abc','bcd','cde','def'
'abcd','bcde','cdef'
'abcde','bcdef',
'abcdef'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.