La La Land… jangan tunggu, Moo Moo Moonlight


122

Tantangan ini merupakan penghargaan bagi pemenang Best Picture di Oscar 2017, La La Land Moonlight !


Tulis fungsi / program yang mengambil string yang hanya berisi huruf [A-Za-z], empat simbol yang umum dalam kalimat .,'?dan spasi setiap hari , dan output string dalam gaya La La Land.

Untuk lebih spesifik, ambil huruf hingga, dan termasuk, grup vokal pertama, dan cetak / output dua kali menambahkan spasi setiap kali, lalu cetak / output seluruh string. y adalah vokal dalam tantangan ini. Tanda baca dan huruf besar harus dipertahankan.

Anda dapat mengasumsikan bahwa semua string berisi setidaknya satu vokal, dan bahwa semua string dimulai dengan huruf.

Kasus uji:

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?

Ini adalah sehingga kode terpendek dalam setiap bahasa menang. Penjelasan didorong , juga dalam bahasa umum.


1
Kasus uji untuk kasus ketidakpekaan: MOONLIGHT. Dan hanya untuk bersenang-senang:Why did the chicken cross the road?
Titus

35
Tantangan disponsori oleh: National Stuttering Association
sergiol

6
Atau Prof. Quirrell
Brian J

1
Case test ke-6 dibeli oleh Louis Prima dan Jungle Book untuk Anda. Bergabung hanya untuk menambahkan permainan kata-kata (buruk) ini.
Toby

Jawaban:



30

05AB1E , 23 19 18 byte

Disimpan 1 byte berkat Okx .

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

Cobalah online! atau sebagai Test suite

Penjelasan

 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

Jelly , 24 22 20 19 14 byte

-5 byte dengan memanfaatkan trik dari jawaban brilian Emigna (lihat 10 di daftar isVowel)

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

Cobalah online! (tidak yakin bagaimana membuat test suite untuk program lengkap ini)


Alternatif 15 byte:

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

Berikut ini adalah paket tes lengkap.

Bagaimana?

;⁶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)

Di sinilah bahasa berbasis non-regex pertama (menggunakan regex).

Disimpan 1 byte berkat Neil .


18

JavaScript (ES6), 40 46

Edit 5 + 1 byte yang disimpan thx @Arnauld

Terlalu lama dibandingkan dengan yang lain menggunakan trik yang sama (seperti biasa)

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 tidak, tapi saya bisa menggunakan '$& $& $&'- Saya selalu lupa karakter dolar spesial. Terima kasih. Sayangnya sekarang ini benar-benar pelabuhan jawaban retina Martin.
edc65

The ^diperlukan di Retina yang - saya pikir - mencari semua pertandingan secara default. Tetapi apakah kita benar-benar membutuhkannya di sini?
Arnauld

@Arnauld kau benar lagi
edc65

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

@ ETHproduk sebenarnya. Terima kasih telah memperhatikan.
edc65


12

Batch, 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%

Menerapkan mesin negara. gmelacak apakah kita pernah melihat vokal, jadi jika huruf saat ini bukan vokal, kita tahu apakah akan menampilkan atau melanjutkan dengan huruf berikutnya.



8

Rubi, 31 32 30 Bytes

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

Dua byte disimpan berkat GB dan Cyoce.


6

PHP, 55 54 byte

Catatan: versi yang disandikan menggunakan penyandian IBM-850.

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

Jalankan seperti ini:

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

Penjelasan

Hanya ganti regex dengan non-pencocokan karakter apa pun di awal string, diikuti oleh jumlah vokal apa pun (gunakan iopsi untuk ketidakpekaan huruf). Grup tangkapan itu kemudian dicetak dua kali, diikuti oleh seluruh string.

Tweaks

  • Menyimpan byte dengan menggunakan -Ragar $argntersedia (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 ( -pbendera)

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);}

Cobalah online!


Hal yang tersisa untuk golf:

• Perkecil dua printf menjadi satu.

• Mencetak ruang char saya dapat diubah menjadi %*clogika saya yakin.

• Saya menggunakan kondisional yang bisa dihapus entah bagaimana

j=(i-13)/12kemungkinan bisa dipersingkat.

• [AY] memeriksa kondisi jika ==0yang biasanya tidak diperlukan, meskipun saya saat ini terjebak pada yang satu itu (mencoba mengganti if-else dan membuang ==0semuanya tetapi itu membutuhkan penambahan lebih banyak {kurung} dan menambah ukuran byte)


Trik yang saya gunakan untuk bermain golf ini:

• Menggabungkan pencarian string loop ganda dengan menggunakan modulo untuk sumbu x dan pembagian integer untuk sumbu y (string input vs string vokal). (Sumbu X dilingkarkan dua kali sebelum iterasi sekali pada sumbu y; pertama dengan [AZ] dan yang kedua dengan [az] menggunakan nilai karakter 32 diferensial.

• Bypassed harus menggunakan "[AY] dan [ay]" dengan hanya mengambil jarak antara set karakter dan modulo 32. Dengan begitu jika jaraknya 0 (AA) atau jika jaraknya 32 (aA)

• Menggunakan kembali variabel integer yang tidak lagi digunakan sebagai variabel boolean.

• Secara berulang memanggil fungsi dengan string yang sama untuk memprosesnya dan menghindari for-loop kedua.

• Atur nilai BOOL ke logika pengaturan variabel lain. (misalnya bool = i = 5;) untuk melumpuhkan keduanya dengan satu batu.

• Pelecehan eksploit yang benar-benar kosong. (GCC)


Format yang Dapat Dibaca:

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);
}

Menurunkan 10 byte berkat Keyu Gan (dalam komentar)


Catatan untuk diri sendiri: j=(i-13)/12kemungkinan bisa dipersingkat.
Albert Renshaw

Apakah saya kehilangan sesuatu, atau Anda bisa mulai dengan i=j=k=m=n=0; ?
Richard Irons

@RichardIron, variabel harus dideklarasikan terlebih dahulu.
Albert Renshaw

Anda dapat menggunakan i,j,k,m,n;untuk inisialisasi.
Keyu Gan

@KeyuGan perilaku tidak terdefinisi, tidak dijamin selalu menjadi 0. (sejauh yang saya tahu?)
Albert Renshaw

4

MATL, 33 byte

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

Cobalah di MATL Online

Penjelasan

                % 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:)YXmenghemat 2 byte
Luis Mendo

'(^.*?[%s]+)'19Y2YD'$1 '8:)YXmenyimpan 2 lainnya
B. Mehta

@ B.Mehta 19Y2tidak ada ketika jawaban ini diajukan sayangnya
Suever

Ya, sedikit mengharapkan balasan itu ... Saya akan menyimpan komentar saya sehingga orang lain dapat belajar tentang 'aeiouy' secara literal juga.
B. Mehta

@ B.Mehta Jangan khawatir. Dengan MATL Online (matl.suever.net) Anda dapat memilih versi tertentu menggunakan drop-down di kanan atas
Suever

4

V , 21 , 20 byte

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

Cobalah online!

Penjelasan:

é               " 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.|<

Versi alternatif (21 byte):

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

Cobalah online!

Ini menggunakan kompresi regex konyol, dan masih berhasil mendapatkan itu ditendang oleh bahasa golf lainnya. Sebagai referensi, ini sekitar dua pertiga panjang versi "tidak terkompresi" reguler, yaitu:

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

Penjelasan:

Í                               " 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

Ini hexdump:

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

2
+1 Ini harus menjadi pengajuan regex V paling mengesankan yang pernah saya lihat
Sapi dukun


4

Python 3 , 75 68 byte

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

Cobalah online!

Penjelasan:

Bekerja dengan menghasilkan nilai boolean untuk setiap karakter dalam string input berdasarkan pada apakah itu vokal, dan menemukan indeks terendah 0, non-vokal pertama (tidak termasuk karakter pertama). Ini mengembalikan substring ke indeks ini dua kali, dipisahkan oleh spasi, dan string asli.


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 dengan inlining first-sp-pred (whoops).

-7 byte dengan menghapus beberapa ruang yang terlewat

Ini jauh lebih menantang daripada yang saya kira akan terjadi! Saya secara manual menguraikan string ... karena saya masih belum sempat belajar regex: /

Lihat kode pra-golf untuk rincian:

(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)

Cobalah online!

solusi non-regex


Berkomentar:

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)

Mengapa Anda membutuhkannya? Ganti w=c in adenganw=c in'aAeEiIoOuUyY'
sagiksp

4

Ohm , 19 byte (CP437), tidak bersaing

Bahasa baru, dan karena itu, saya harus menambahkan beberapa fitur baru untuk membuat karya ini, yang sayangnya membuat ini tidak kompetitif (karena celah).

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

Penjelasan:

≡┬ü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

Saya ingin tahu fitur apa yang Anda implementasikan ...?
Stewie Griffin

@StewieGriffin Stack reversal ( Q), pencarian subarray ( u), string / array slicing ( ), dan konstanta vokal ( αvdan αy).
Nick Clifford

4

PHP, 69 65 53 byte

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

membutuhkan PHP 5.3 atau yang lebih baru. Jalankan sebagai pipa dengan -Fatau coba beberapa versi online .

Disimpan 4 byte (dan memperbaiki kode) dengan regex dicuri dari @aross;
10 lagi dengan preg_filterbukan preg_matchdan-F
dan dua lagi dengan regex yang ditingkatkan.

75 81 byte untuk versi non-regex:

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

membutuhkan PHP 5 atau lebih baru; ganti ?:dengan ?1:untuk PHP yang lebih lama. Jalankan dengan-nR

Kerusakan

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

Tampaknya tidak berfungsi. This isn't a single wordT T This isn't a single word.
Put

@ Aross tampaknya memeriksa nilai huruf kecil saja? Saya mungkin salah saya tidak tahu PHP dengan baik
Albert Renshaw

1
@AlbertRenshaw Versi regex menggunakan ipengubah yang membuat case regex tidak sensitif. Versi lainnya hanya memeriksa huruf kecil. Tetap.
Titus

4

R, 49bytes

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

Ganti berbasis Regex, cocokkan semuanya hingga bukan vokal, tangkap dan ganti dengan sendirinya 3 kali.

scanmenunggu doubleinput tipe, untuk mengatakannya untuk menggunakan charactertipe kita harus memberikannya dua argumen, pertama adalah default, string emtpy untuk stdin, dan untuk yang kedua evaluasi R memungkinkan untuk menggunakan hanya ckarena tidak ambigu untukcharacter dalam konteks ini.

T berdiri untuk TRUE dan menyimpan beberapa char sebagai parameter ke-4 dan ke-5 untuk sub untuk mengatakannya untuk mengabaikan kasus dan menggunakan PCRE (keserakahan tidak sama dengan sintaks R regex)

4 byte disimpan milik Sumner18 bersama dengan tautan Tio untuk menjalankan kode


3

Java 8, 147 140 byte

Golf:

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

Tidak Terkumpul:

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);
  }
}

Catatan: literal 2dalam kode adalah nilai java.util.regex.Pattern.CASE_INSENSITIVE.


2
Saya pikir Anda dapat menggunakan import java.util.regex.*;untuk menyimpan beberapa byte.
Roman Gräf

@ RomanGräf Anda benar. Saya meminta paket-paketnya dijabarkan karena dalam versi kode yang lebih lama (tidak berfungsi) lebih pendek untuk tidak menggunakan impor. Saya tidak mengevaluasi kembali setelah memperbaiki kode.

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);}

Panggil sebagai:

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

1
Ini bagus! Anda membuat solusi C saya keluar dari taman lol.
Albert Renshaw

2

Pyke , 22 byte

l1~V\y+L{$0R+f2<ssDQdJ

Cobalah online!

Ini adalah 4 byte lebih lama dari yang seharusnya saya menerapkan cara yang lebih pendek untuk mendapatkan vokal termasuk y.


2

Retina, 24 byte

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

Cobalah online


Cukup mirip dengan ini
Emigna

Ya aku tahu. Tetapi saya membuat jawabannya secara mandiri. Meski begitu, sudah diputuskan bahwa jawaban rangkap diperbolehkan, jika karya tersebut tidak dijiplak.
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)

Cobalah online!

Tidak menggunakan fungsi apa pun dan tidak ada perpustakaan eksternal! (Kecuali cetak dan input dihitung sebagai fungsi, yang mereka lakukan).

Bekerja dengan melihat apakah itu keluar dari konsonan di awal judul ke 'zona vokal'. Jika berada di 'zona vokal' dan mendeteksi konsonan, maka ia mencetak judul.

Disimpan 28 byte berkat @LliwTelracs


2

MATLAB / Oktaf, 58 51 byte

7 Bytes disimpan berkat @HughNolan

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

Membuat fungsi anonim bernama ansyang dapat dipanggil dengan meneruskan string ke sana:ans('Land')

Demo online

Untuk kompatibilitas MATLAB, $0harus digunakan sebagai pengganti $1fungsi di atas.


Memikirkan hal ini dan kemudian melihat Anda sudah melakukannya. Simpan beberapa byte: @(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');- juga Matlab tampaknya menggunakan $ 0 daripada $ 1 anehnya
Hugh Nolan

@HughNolan Poin bagus, terima kasih!
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);}

Cobalah online!

Ini hanya menggunakan fungsi pustaka strspn()dan strcspn()dan mengeksploitasi urutan di mana gcc mengevaluasi parameter fungsi. Sedikit kurang 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);
}

Terima kasih kepada @gastropner untuk -1.


Wow!! Kerja bagus!
Albert Renshaw


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.