La La Land, không phải chờ đợi, Moo Moo Moonlight


122

Thử thách này là một sự tôn vinh cho người chiến thắng Phim hay nhất tại Oscar 2017, La La Land Moonlight !


Viết hàm / chương trình chỉ lấy một chuỗi chỉ chứa các chữ cái [A-Za-z], bốn biểu tượng phổ biến trong các câu .,'?và khoảng trắng hàng ngày và xuất ra chuỗi theo kiểu La La Land.

Để cụ thể hơn, hãy lấy các chữ cái lên đến, và bao gồm, nhóm nguyên âm đầu tiên và in / xuất nó hai lần một khoảng trắng mỗi lần, sau đó in / xuất toàn bộ chuỗi. y là một nguyên âm trong thử thách này. Dấu câu và viết hoa nên được giữ.

Bạn có thể giả sử rằng tất cả các chuỗi chứa ít nhất một nguyên âm và tất cả các chuỗi bắt đầu bằng một chữ cái.

Các trường hợp thử nghiệm:

Land
La La Land

Moonlight
Moo Moo Moonlight

quEueIng
quEueI quEueI quEueIng

This isn't a single word.
Thi Thi This isn't a single word.

It's fun to play golf
I I It's fun to play golf

Ooo
Ooo Ooo Ooo

I'm okay
I I I'm okay

Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.

Why is y a vowel?
Why Why Why is y a vowel?

Đây là nên mã ngắn nhất trong mỗi ngôn ngữ sẽ thắng. Giải thích được khuyến khích , cũng trong các ngôn ngữ chính.


1
Trường hợp kiểm tra cho trường hợp không nhạy cảm : MOONLIGHT. Và chỉ để cho vui:Why did the chicken cross the road?
Tít

35
Thử thách được tài trợ bởi: Hiệp hội nói lắp quốc gia
sergiol

6
Hoặc giáo sư Quirrell
Brian J

1
Trường hợp thử nghiệm thứ 6 được mua cho bạn bởi Louis Prima và Jungle Book. Tham gia chỉ để thêm chữ này (xấu).
Toby

Câu trả lời:



30

05AB1E , 23 19 18 byte

Đã lưu 1 byte nhờ Okx .

Dlð«žOsSåJTk>£D¹ðý

Hãy thử trực tuyến! hoặc như một bộ thử nghiệm

Giải trình

 Dl                  # create a lowercase copy of implicit input
   ð«                # append a space
     žO              # push the vowels
       s             # swap lowercase input to the top of the stack
        S            # split into a list of chars
         å           # check each char for membership in the vowel-string
                     # (creates a list with 1 at the index of vowels and 0 for non-vowels)
          J          # join to string
           Tk        # find the index of 10
             >       # increment
              £      # take that many items from input
               D     # duplicate this string
                ¹    # push input
                 ðý  # join the strings by space

25

Thạch , 24 22 20 19 14 byte

-5 byte bằng cách sử dụng một mẹo từ câu trả lời xuất sắc của Emigna (tìm 10 trong danh sách isVowel)

;⁶e€Øyw⁵ḣ@;⁶Ȯ;

Hãy thử trực tuyến! (không chắc chắn làm thế nào để tạo một bộ thử nghiệm cho chương trình đầy đủ này)


Thay thế 15 byte:

;⁶e€Øyw⁵ḣ@;⁶ẋ2;

Đây là bộ thử nghiệm đầy đủ.

Làm sao?

;⁶e€Øyw⁵ḣ@;⁶Ȯ; - Main link: string s
 ⁶             - space character
;              - concatenate to s (for all vowel edge case)
    Øy         - vowels + y yield
  e€           - exists in? for €ach (gives a list of isVowel identifiers)
       ⁵       - 10
      w        - index of first sublist (with implicit decimalisation of 10 to [1,0])
        ḣ@     - head with reversed @rguments (start of word up to & including vowel group)
           ⁶   - space character
          ;    - concatenate (start of word up to & including vowel group plus a space)
            Ȯ  - print and yield (hence a full program...
               -     ...the alternative ẋ2 repeats instead in order to return the result)
             ; - join with the input, s
               - implicit print (of the second repetition and input string)

19

Python, 61 byte

import re;lambda x:re.sub('(.*?[aeiouy]+)',r'\1 \1 \1',x,1,2)

Ở đây có ngôn ngữ không dựa trên regex đầu tiên (sử dụng regex).

Đã lưu 1 byte nhờ Neil .


18

JavaScript (ES6), 40 46

Biên tập 5 + 1 byte đã lưu thx @Arnauld

Quá dài so với người khác sử dụng cùng một thủ thuật (như thường lệ)

x=>x.replace(/.*?[aeiouy]+/i,'$& $& $&')

let f=
x=>x.replace(/.*?[aeiouy]+/i,'$& $& $&')

test=`Land
La La Land

Moonlight
Moo Moo Moonlight

queueing
queuei queuei queueing

This isn't a single word.
Thi Thi This isn't a single word.

It's fun to play golf
I I It's fun to play golf

Ooo
Ooo Ooo Ooo

I'm okay
I I I'm okay

Hmm, no. There will be at least one vowel, but it can be anywhere.
Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere.`
test.split(`\n\n`).forEach(z=>{
  var [i,k]=z.split(`\n`),x=f(i);
  console.log(k==x ? 'OK':'KO',i+'\n'+x);
})


@Arnauld không, nhưng tôi có thể sử dụng '$& $& $&'- Tôi luôn quên các ký tự đô la đặc biệt. Cảm ơn bạn. Thật không may bây giờ nó thực sự là một cổng của câu trả lời võng mạc của Martin.
edc65

Điều ^này là bắt buộc trong Retina mà - tôi nghĩ - sẽ tìm tất cả các kết quả khớp theo mặc định. Nhưng chúng ta có thực sự cần nó ở đây không?
Arnauld

@Arnauld bạn lại đúng
edc65

-2:x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
nderscore 27/2/2017

@ETHproductions trên thực tế. Cảm ơn đã chú ý.
edc65


12

Hàng loạt, 180 byte

@echo off
set/ps=
set v=aeiouy
set g=c
set t=
:l
call set w=%%v:%s:~,1%=%%
if %v%==%w% goto %g%
set g=o
:c
set t=%t%%s:~,1%
set s=%s:~1%
goto l
:o
echo %t% %t% %t%%s%

Triển khai một máy trạng thái. gtheo dõi xem chúng ta đã từng thấy một nguyên âm chưa, vì vậy nếu chữ cái hiện tại không phải là nguyên âm, chúng ta sẽ biết nên xuất hay tiếp tục với chữ cái tiếp theo.



8

Hồng ngọc 31 32 30 byte

->s{(s[/.*?[aeiouy]+/i]+' ')*2+s}

Hai byte được lưu nhờ GB và Cyoce.


6

PHP, 55 54 byte

Lưu ý: phiên bản được mã hóa sử dụng mã hóa IBM-850.

echo preg_filter("/^(.*?[aeiouy]+)/i","$1 $1 $0",$argn);
echo preg_filter(~ðíÎÐı└ñ×ÜûÉèåóÈÍðû,~█╬▀█╬▀█¤,$argn);     # Encoded

Chạy như thế này:

echo "This isn't a single word." | php -nR 'echo preg_filter(~ðíÎÐı└ñ×ÜûÉèåóÈÍðû,~█╬▀█╬▀█¤,$argn);'

Giải trình

Chỉ là một biểu thức chính thay thế bằng không phù hợp với bất kỳ ký tự nào ở đầu chuỗi, theo sau là bất kỳ số nguyên âm nào (sử dụng i tùy chọn cho trường hợp không nhạy cảm). Nhóm chụp đó sau đó được in hai lần, theo sau là toàn bộ chuỗi.

Tinh chỉnh

  • Đã lưu một byte bằng cách sử dụng -Rđể tạo $argnsẵn (Thx Titus)

6

Javascript (ES6), 38 byte

x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x

f=
x=>(y=/.*?[aeiouy]+/i.exec(x)+' ')+y+x
<!-- snippet demo: -->
<input list=l oninput=console.log(f(this.value))>
<datalist id=l><option value=Land>
<option value=Moonlight>
<option value=queueing>
<option value="This isn't a single word.">
<option value="It's fun to play golf">
<option value=Ooo>
<option value="I'm okay.">
<option value="Hmm, no. There will be at least one vowel, but it can be anywhere.">
<option value="Why is y a vowel?">


6

Perl, 25 + 1 ( -pcờ)

s/.*?[aeiouy]+/$& $& $&/i


5

C, 202 196 195 193 190 180

i,j,k,m,n;f(char*a){if((a[i/12]-"AEIOUY"[i++%6])%32==0)k=n=24-(i%12);else if(k&&!n--){m=j=(i-13)/12;for(i=0;i<j*2;)printf("%c%c",a[i%j],(i==j-1)*32),i++;printf(" %s", a);}m?:f(a);}

Hãy thử trực tuyến!


Điều trái với golf:

• Thu gọn hai printf thành một.

• In char không gian của tôi có thể được thay đổi thành %*clogic Tôi chắc chắn.

• Tôi đang sử dụng các điều kiện có thể được gỡ bỏ bằng cách nào đó

j=(i-13)/12có khả năng có thể được rút ngắn.

• [AY] kiểm tra có điều kiện nếu ==0điều đó thường không cần thiết, mặc dù hiện tại tôi đang bị mắc kẹt trên đó (đã thử chuyển đổi if-if và bỏ ==0hoàn toàn nhưng điều đó yêu cầu thêm {ngoặc} và tăng kích thước byte)


Thủ thuật tôi đã từng chơi golf này:

• Kết hợp tìm kiếm chuỗi kép cho chuỗi vòng lặp bằng cách sử dụng modulo cho trục x và phép chia số nguyên cho trục y (chuỗi đầu vào so với chuỗi nguyên âm). (Trục X được lặp hai lần trước khi lặp một lần trên trục y; lần đầu tiên với [AZ] và lần thứ hai với [az] sử dụng vi sai giá trị 32 ký tự.

• Bỏ qua việc phải sử dụng "[AY] và [ay]" bằng cách chỉ lấy khoảng cách giữa các bộ ký tự và modulo 32. Bằng cách đó nếu khoảng cách là 0 (AA) hoặc nếu khoảng cách là 32 (aA)

• Sử dụng lại các biến số nguyên không còn được sử dụng làm biến boolean.

• Gọi đệ quy một hàm có cùng chuỗi để xử lý qua nó và tránh vòng lặp thứ hai.

• Đặt giá trị BOOL theo logic của việc đặt biến khác. (ví dụ bool = i = 5;) để hạ gục cả hai với một viên đá.

• Ternary trống - lạm dụng khai thác thực sự. (GCC)


Định dạng có thể đọc được:

i,j,k,m,n;
f(char*a){
    if((a[i/12]-"AEIOUY"[i++%6])%32==0)
        k=n=24-(i%12);
    else
        if(k&&!n--){
            m=j=(i-13)/12;
            i=0;
            for(;i<j*2;)
               printf("%c%c",a[i%j],(i==j-1)?32:0),i++;
            printf(" %s", a);
        }
    m?:f(a);
}

Đã loại bỏ 10 byte nhờ Keyu Gan (trong phần bình luận)


Lưu ý đến bản thân: j=(i-13)/12có khả năng có thể được rút ngắn.
Albert Renshaw

Tôi đang thiếu một cái gì đó, hoặc bạn có thể bắt đầu với i=j=k=m=n=0;?
Richard Irons

@RichardIrons các biến phải được khai báo trước.
Albert Renshaw

Bạn có thể sử dụng i,j,k,m,n;để khởi tạo.
Keyu Gan

@KeyuGan hành vi không xác định, không được đảm bảo luôn là 0. (theo như tôi biết?)
Albert Renshaw

4

MATL, 33 byte

'(^.*?[yY%s]+)'13Y2YD'$1 $1 $1'YX

Dùng thử tại MATL Online

Giải trình

                % Implicitly grab input as a string
'(^.*?[yY%s]+)' % Push this string literal (regex pattern)
13Y2            % Push the string literal 'AEIUOaeiuo'
YD              % Replace the '%s' in the string with 'AEIUOaeiuo'
'$1 $1 $1'     % Push the string literal to use for replacement which repeats
                % the first match 3 times
YX              % Perform regular expression matching and replacement
                % Implicitly display the result

'(^.*?[yY%s]+)'13Y2YD'$1 '8:)YXtiết kiệm 2 byte
Luis Mendo

'(^.*?[%s]+)'19Y2YD'$1 '8:)YXtiết kiệm thêm 2
B. Mehta

@ B.Mehta 19Y2không tồn tại khi câu trả lời này không may được gửi
Suever

Vâng, hơi mong đợi câu trả lời ... Tôi sẽ giữ bình luận của mình để những người khác cũng có thể tìm hiểu về chữ "aeiouy" sẵn có.
B. Mehta

@ B.Mehta Không phải lo lắng. Với MATL Online (matl.suever.net), bạn có thể chọn một phiên bản cụ thể bằng cách sử dụng trình đơn thả xuống ở trên cùng bên phải
Suever

4

V , 21 , 20 byte

é /ã[aeiouy]«“.
3ä|<

Hãy thử trực tuyến!

Giải trình:

é               " Insert a space
  /             " Jump forward too...
   ã[aeiouy]«. "   The first non-vowel after a vowel
3ä              " Make three copies of
  |             " Everything from the cursor to the first character
   <            " Delete the space we inserted

Hexdump:

00000000: e920 2fe3 5b61 6569 6f75 795d ab93 2e0a  . /.[aeiouy]....
00000010: 33e4 7c3c                                3.|<

Phiên bản thay thế (21 byte):

Í㨃[aeiouy]«©/± ± &

Hãy thử trực tuyến!

Điều này sử dụng nén regex nực cười, và nó vẫn có thể khiến nó bị đá bởi các ngôn ngữ chơi gôn khác. Để tham khảo, đây là khoảng hai phần ba chiều dài của phiên bản "không nén" thông thường, cụ thể là:

:%s/\v\c(.{-}[aeiou]).*/\1 \1 &

Giải trình:

Í                               " Replace on every line:
 ã                              "   Case-insensitive
  ¨              ©              "   Capture-group 1
   <131>                        "   Any character, any number of times (non-greedy)
        [aeiouy]«               "   A vowel, repeated once or more
                  <129>         "   Followed by anything
                       /        " Replaced with:
                        ± ±     "   Capture group one twice, with spaces between
                            &   "   The whole matched pattern

Đây là một hexdump:

00000000: cde3 a883 5b61 6569 6f75 795d aba9 812f  ....[aeiouy].../
00000010: b120 b120 26                             . . &

2
+1 Đây phải là bản đệ trình V regex ấn tượng nhất mà tôi từng thấy
Bò lang băm


4

Python 3 , 75 68 byte

lambda s:(s[:[x in"aAeEiIoOuUyY"for x in s][1:].index(0)+1]+" ")*2+s

Hãy thử trực tuyến!

Giải trình:

Hoạt động bằng cách tạo giá trị boolean cho mỗi ký tự trong chuỗi đầu vào dựa trên việc đó có phải là nguyên âm hay không và tìm chỉ số thấp nhất của 0nguyên âm đầu tiên (không bao gồm ký tự đầu tiên). Nó trả về chuỗi con cho chỉ mục này hai lần, cách nhau bởi khoảng trắng và chuỗi gốc.


4

Clojure, 192 188 181 byte

(fn[p](let[[f] p v #(#{\a \e \i \o \u \y}(Character/toLowerCase %))[q r](split-with(if(v f)v #(not(v %)))p)[w _](split-with v r)as #(apply str %)](str(as(repeat 2(str(as q)(as w) \ )))p)))

-4 byte bằng cách nội tuyến first-sp-pred(rất tiếc).

-7 byte bằng cách loại bỏ một số khoảng trắng bị bỏ lỡ

Điều này khó khăn hơn nhiều so với tôi nghĩ nó sẽ xảy ra! Tôi đang phân tích cú pháp chuỗi một cách thủ công ... vì tôi vẫn chưa có cơ hội học regex: /

Xem mã tiền đánh bạc để biết sự cố:

(defn repeat-prefix-cons [phrase]
  (let [[first-letter] phrase ; Get first letter

        ; Function that checks if a lowercased character is a part of the vowel set
        vowel? #(#{\a \e \i \o \u \y} (Character/toLowerCase %))

        ; cons(onant)? Negation of above
        cons? #(not (vowel? %))

        ; Decide how to split it depending on if the first character is a vowel
        first-sp-pred (if (vowel? first-letter) vowel? cons?)

        ; Split off the first chunk of cons/vowels
        [pre1 r] (split-with first-sp-pred phrase)

        ; Split off the rest of the vowels
        [pre2 r2] (split-with vowel? r)

        ; Shortcut function that turns a list into a string (Basically (join "" some-list-of-strings) )
        as #(apply str %)]

    (str ; ... then concat the prefix in front of the original phrase, and return
      (as ; ...then turn it back into a string since "repeat" returns a list... ^
        (repeat 2 ; ... then repeat it twice (shame Clojure doesn't have string multiplication)... ^
                (str (as pre1) (as pre2) \ ))) ; Concat the 2 prefix parts together with an space at the end... ^
      phrase)))

4

Python 3 , 101 96 byte

s=input()
v=i=0
for c in s:
 w=c in'aAeEiIoOuUyY'
 if v*~-w:break
 v=w;i+=1
print(s[:i],s[:i],s)

Hãy thử trực tuyến!

một giải pháp phi regex


Đã bình luận:

s=input()
a='aAeEiIoOuUyY'
v=i=0
for c in s:          # for each character in the string
 w=c in a            # w = True if the character is a vowel, else false
                     # true is equivalent to 1  and false to zero
                     # v*(w-1) evaluates only to true (-1 in this case) if v=1 (last character was a vowel) and w=0 (current character is not a vowel)
 if v*(w-1):break    # if so, break the loop
 v=w;i+=1            # increase the counter and set v to w
print(s[:i],s[:i],s)

Tại sao bạn cần một? Thay thế w=c in abằngw=c in'aAeEiIoOuUyY'
sagiksp

4

Ohm , 19 byte (CP437), không cạnh tranh

Ngôn ngữ mới, và như vậy, tôi đã phải thêm một số tính năng mới để làm cho công việc này, điều đáng buồn làm cho điều này không cạnh tranh (vì sơ hở).

≡┬üC▓αy_ε;TF«u├DQüj

Giải trình:

≡┬üC▓αy_ε;TF«u├DQüj     Main wire, arguments: s

≡                       Triplicate input
 C                    Push input, all lowercase with concatenated space character
    ▓    ;              Map string into an array with...
     αy_ε                 Boolean: is element a vowel?
          TF«u          Find first occurrence of [true, false]
              ├D        Slice input up to that index and duplicate it
                Q       Reverse stack
                 üj     Join on spaces, implicitly print

Tôi tò mò muốn biết những tính năng bạn đã triển khai ...?
Stewie Griffin

@StewieGriffin Stack đảo ngược ( Q), tìm kiếm phân đoạn ( u), cắt chuỗi / mảng ( ) và hằng số nguyên âm ( αvαy).
Nick Clifford

4

PHP, 69 65 53 byte

<?=preg_filter("#.*?[aeiouy]+#i","$0 $0 $0",$argn,1);

yêu cầu PHP 5.3 trở lên. Chạy như ống với -Fhoặc thử một số phiên bản trực tuyến .

Đã lưu 4 byte (và sửa mã) với regex bị đánh cắp từ @aross;
10 hơn với preg_filterthay preg_match-F
và hai khác với một regex được cải thiện.

75 81 byte cho phiên bản không phải regex:

for(;$c=$argn[$i++];)($k+=$k^!trim($c,aeiouyAEIOUY))>1?:$w.=$c;echo"$w $w $argn";

yêu cầu PHP 5 trở lên; thay thế ?:bằng ?1:cho PHP trở lên. Chạy với-nR

Phá vỡ

for(;$c=$argn[$i++];)       // loop $c through input characters
    ($k+=$k^!                   // 2. !$k and vowel or $k and not vowel: increment $k
        trim($c,aeiouyAEIOUY)   // 1. strip vowels -> vowel=false, non-vowel=true
    )>1                         // 3. if $k>1
    ?                           // do nothing
    :$w.=$c;                    // else append $c to $w
echo"$w $w $argn";          // output

Không xuất hiện để làm việc. Ra ngoài cho This isn't a single word:T T This isn't a single word.
vào

@aross có vẻ như nó chỉ kiểm tra giá trị chữ thường? Tôi có thể sai Tôi không biết rõ về PHP
Albert Renshaw

1
@AlbertRenshaw Phiên bản regex sử dụng công cụ isửa đổi làm cho trường hợp regex không nhạy cảm. Một phiên bản khác chỉ kiểm tra chữ thường. Đã sửa.
Tít

4

R, 49byte

sub("(.*?[aeiouy]+)","\\1 \\1 \\1",scan(,""),T,T)

Regex dựa trên thay thế, khớp mọi thứ cho đến khi không phải là nguyên âm, bắt và thay thế nó 3 lần.

scanĐợi một doublekiểu đầu vào, để bảo nó sử dụng characterkiểu, chúng ta phải cung cấp cho nó hai đối số, đầu tiên là chuỗi emtpy mặc định cho stdin và trong lần thứ hai, đánh giá R chỉ cho phép sử dụng cvì nó không mơ hồ charactertrong ngữ cảnh này.

Tlà viết tắt của TRUEvà lưu một số char làm tham số thứ 4 và thứ 5 vào phụ để bảo nó bỏ qua trường hợp và sử dụng PCRE (sự tham lam không giống với cú pháp R regex)

4 byte được lưu lịch sự của Sumner18 cùng với liên kết Tio để chạy mã


3

Java 8, 147 140 byte

Chơi gôn

import java.util.regex.*;s->{Matcher m=Pattern.compile("([^aeiouy]*[aeiouy]+)",2).matcher(s);m.find();return m.group()+" "+m.group()+" "+s;}

Ung dung:

import java.util.regex.*;

public class LaLaLandNoWaitMooMooMoonlight {

  public static void main(String[] args) {
    for (String[] strings : new String[][] { { "Land", "La La Land" }, { "Moonlight", "Moo Moo Moonlight" },
        { "queueing", "queuei queuei queueing" }, { "This isn't a single word.", "Thi Thi This isn't a single word." },
        { "It's fun to play golf", "I I It's fun to play golf" }, { "Ooo", "Ooo Ooo Ooo" },
        { "I'm okay", "I I I'm okay" }, { "Hmm, no. There will be at least one vowel, but it can be anywhere.",
            "Hmm, no Hmm, no Hmm, no. There will be at least one vowel, but it can be anywhere." } }) {
      final String input = strings[0];
      final String expected = strings[1];
      final String actual = f(s -> {
        java.util.regex.Matcher m = java.util.regex.Pattern.compile("([^aeiouy]*[aeiouy]+)", 2).matcher(s);
        m.find();
        return m.group() + " " + m.group() + " " + s;
      } , input);
      System.out.println("Input:    " + input);
      System.out.println("Expected: " + expected);
      System.out.println("Actual:   " + actual);
      System.out.println();
    }

  }

  private static String f(java.util.function.Function<String, String> function, String input) {
    return function.apply(input);
  }
}

Lưu ý: nghĩa đen 2trong mã là giá trị của java.util.regex.Pattern.CASE_INSENSITIVE.


2
Tôi nghĩ bạn có thể sử dụng import java.util.regex.*;để lưu một số byte.
Roman Gräf

@ RomanGräf bạn đúng. Tôi đã có các gói được đánh vần bởi vì trong phiên bản mã trước đó (không hoạt động), nó không ngắn hơn khi không sử dụng nhập khẩu. Tôi đã không đánh giá lại sau khi sửa mã.

3

C, 123 byte

#define v(x)while(x strchr("AEIOUY",*s&95))++s;
a;f(s,t)char*s,*t;{t=s;v(!)v()a=*s;*s=0;printf("%s %s ",t,t);*s=a;puts(t);}

Gọi như:

main(){char s[] = "queueing"; f(s);}

1
Cái này đẹp đấy! Bạn đã loại giải pháp C của tôi ra khỏi công viên lol.
Albert Renshaw


2

Võng mạc, 24 byte

i1`.*?[aeiouy]+
$0 $0 $0

Dùng thử trực tuyến


Khá giống với điều này
Emigna

Vâng, tôi biết. Nhưng tôi đã trả lời một cách độc lập. Mặc dù vậy, người ta đã quyết định rằng các câu trả lời trùng lặp được cho phép, nếu tác phẩm không bị đạo văn.
mbomb007

2

Python 3 , 130 102 byte

w=input();a='';v=0
for i in w:
	if i in 'aeiouyAEIOUY': v=1
	elif v:
		break
	a+=i
a+=' ';print(a*2+w)

Hãy thử trực tuyến!

Sử dụng không có chức năng của bất kỳ loại và không có thư viện bên ngoài! (Trừ khi in và tính đầu vào là các chức năng, mà chúng làm).

Hoạt động bằng cách xem nếu nó thoát ra khỏi các phụ âm khi bắt đầu tiêu đề vào 'vùng nguyên âm'. Nếu nó nằm trong 'vùng nguyên âm' và phát hiện ra một phụ âm, thì nó sẽ in tiêu đề.

Đã lưu 28 byte nhờ @LliwTelracs


2

MATLAB / Octave, 58 51 byte

7 byte được lưu nhờ @HughNolan

@(x)regexprep(x,'(^.*?[aeiouyAEIOUY]+)','$1 $1 $1')

Tạo một hàm ẩn danh có tên ansđược gọi bằng cách chuyển một chuỗi tới nó:ans('Land')

Demo trực tuyến

Để tương thích MATLAB, $0nên được sử dụng thay $1cho chức năng trên.


Đã suy nghĩ về điều này và sau đó thấy bạn đã hoàn thành nó. Lưu một vài byte: @(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');- Matlab dường như sử dụng $ 0 thay vì $ 1 một cách kỳ lạ
Hugh Nolan

@HughNolan Điểm tuyệt vời, cảm ơn!
Suever

2

C (gcc) , 111 110 byte

*d="AEIOUYaeiouy";b;f(char*a){b=strcspn(a,d);write(printf(" "),a,write(1,a,b+strspn(a+b,d)));printf(" %s",a);}

Hãy thử trực tuyến!

Điều này chỉ sử dụng chức năng thư viện strspn()strcspn()và khai thác thứ tự mà gcc đánh giá các thông số chức năng. Hơi ít chơi golf

*d="AEIOUYaeiouy";b;
f(char*a){
  b=strcspn(a,d);
  write(printf(" "),a,write(1,a,b+strspn(a+b,d)));
  printf(" %s",a);
}

Cảm ơn @gastropner cho -1.


Chà !! Công việc tốt đẹp!
Albert Renshaw


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.