La La Land… nie czekaj, Moo Moo Moonlight


122

To wyzwanie jest hołdem dla zwycięzcy Najlepszego Obrazu na Oscars 2017 La La Land Moonlight !


Napisz funkcję / program, który pobiera ciąg zawierający tylko litery [A-Za-z], cztery symbole, które są wspólne w codziennych zdaniach .,'?i spacjach, i wyprowadza ciąg w stylu La La Land.

Aby być bardziej szczegółowym, weź litery do pierwszej grupy samogłosek i włącznie, i wydrukuj / wydrukuj ją dwukrotnie, dodając spację za każdym razem, a następnie wydrukuj / wydrukuj cały ciąg. y jest samogłoską w tym wyzwaniu. Należy zachować interpunkcję i wielkie litery.

Możesz założyć, że wszystkie ciągi zawierają co najmniej jedną samogłoskę i że wszystkie ciągi zaczynają się na literę.

Przypadki testowe:

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?

To jest więc wygrywa najkrótszy kod w każdym języku. Zalecane są objaśnienia , także w językach głównego nurtu.


1
Sprawdzian przypadku niewrażliwości: MOONLIGHT. I dla zabawy:Why did the chicken cross the road?
Tytus

35
Wyzwanie sponsorowane przez: National Stuttering Association
sergiol

6
Lub Prof. Quirrell
Brian J

1
Szósta walizka testowa zakupiona przez Louisa Prima i Księga Dżungli. Dołączono tylko po to, aby dodać ten (zły) kalambur.
Toby

Odpowiedzi:



30

05AB1E , 23 19 18 bajtów

Zapisano 1 bajt dzięki Okx .

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

Wypróbuj online! lub jako pakiet testowy

Wyjaśnienie

 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

Galaretka , 24 22 20 19 14 bajtów

-5 bajtów, wykorzystując lewę z genialnej odpowiedzi Emigny (poszukaj 10 na liście isVowel)

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

Wypróbuj online! (nie jestem pewien, jak zrobić pakiet testowy dla tego pełnego programu)


15 bajtów alternatywnych:

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

Oto pełny pakiet testowy.

W jaki sposób?

;⁶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 bajtów

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

Oto pierwszy język nie oparty na wyrażeniach regularnych (wykorzystujący wyrażenie regularne).

Zapisano 1 bajt dzięki Neilowi .


18

JavaScript (ES6), 40 46

Edytuj 5 + 1 bajtów zapisanych dzięki @ Arnauld

Zbyt długi w porównaniu do innych używających tej samej sztuczki (jak zwykle)

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 nie, ale mógłbym użyć '$& $& $&'- zawsze zapominam o specjalnych znakach dolara. Dziękuję Ci. Niestety teraz jest to naprawdę część odpowiedzi siatkówki Martina.
edc65

Jest ^to wymagane w Retina, która - myślę - domyślnie szuka wszystkich dopasowań. Ale czy naprawdę tego potrzebujemy?
Arnauld

@Arnauld znowu masz rację
edc65

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

W rzeczywistości @ETHproductions. Dzięki za zauważenie.
edc65


12

Partia, 180 bajtów

@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%

Implementuje maszynę stanu. gśledzi, czy kiedykolwiek widzieliśmy samogłoskę, więc jeśli bieżąca litera nie jest samogłoską, wiemy, czy wydrukować, czy kontynuować z następną literą.



8

Rubin, 31 32 30 bajtów

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

Dwa bajty zapisane dzięki GB i Cyoce.


6

PHP, 55 54 bajtów

Uwaga: wersja zakodowana wykorzystuje kodowanie IBM-850.

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

Uruchom tak:

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

Wyjaśnienie

Po prostu regex zamień na niecierpliwy pasujący dowolny znak na początku łańcucha, a następnie dowolną liczbę samogłosek (użyj iopcji dla niewrażliwości na wielkość liter). Ta grupa przechwytywania jest następnie drukowana dwukrotnie, a następnie cały ciąg.

Poprawki

  • Zapisano bajt za pomocą, -Raby $argnudostępnić (Thx Titus)

6

JavaScript (ES6), 38 bajtów

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




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

Wypróbuj online!


Rzecz pozostała do golfa:

• Zwiń dwa printf w jeden.

• Drukowanie mojego znaku spacji można zmienić na %*c logikę, jestem pewien.

• Używam warunkowych, które można jakoś usunąć

j=(i-13)/12 prawdopodobnie może zostać skrócony.

• [AY] sprawdza warunkowe, jeśli ==0to zwykle nie jest konieczne, chociaż obecnie utknąłem na tym (próbowałem zmienić if-else i ==0porzucić całkowicie, ale to wymaga dodania większej liczby {nawiasów} i zwiększenia rozmiaru bajtów)


Sztuczki, których użyłem do gry w golfa:

• Połączono wyszukiwanie podwójnych ciągów pętli za pomocą modulo dla osi x i dzielenia liczb całkowitych dla osi y (ciąg wejściowy vs ciąg samogłoski). (Oś X jest zapętlona dwa razy przed iteracją raz na osi y; pierwszy raz z [AZ] i drugi raz z [az] przy użyciu różnicy wartości znaku 32.

• Ominięto konieczność używania „[AY] i [ay]”, po prostu biorąc odległość między zestawami znaków a modułem 32. W ten sposób, jeśli odległość wynosi 0 (AA) lub jeśli odległość wynosi 32 (aA)

• Ponowne użycie zmiennych całkowitych, które nie są już używane jako zmienne boolowskie.

• Rekurencyjne wywoływanie funkcji z tym samym łańcuchem w celu przetworzenia go i uniknięcia drugiej pętli for.

• Ustaw wartości BOOL na logikę ustawiania innej zmiennej. (np. bool = i = 5;) wybić oba jednym kamieniem.

• Ternary puste - prawdziwe nadużycie exploitów. (GCC)


Czytelny format:

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

Powalono 10 bajtów dzięki Keyu Ganowi (w komentarzach)


Uwaga do siebie: j=(i-13)/12może zostać skrócona.
Albert Renshaw

Czy coś mi umknęło, czy mógłbyś zacząć i=j=k=m=n=0;?
Richard Irons

@RichardIrons zmienne muszą być najpierw zadeklarowane.
Albert Renshaw

Możesz użyć i,j,k,m,n;do inicjalizacji.
Keyu Gan

@KeyuGan niezdefiniowane zachowanie, nie ma gwarancji, że zawsze będzie wynosić 0. (o ile mi wiadomo?)
Albert Renshaw

4

MATL, 33 bajty

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

Wypróbuj w MATL Online

Wyjaśnienie

                % 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:)YXzapisuje 2 bajty
Luis Mendo

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

@ B. Mehta 19Y2nie istniał, gdy odpowiedź została przesłana niestety
Suever

Tak, lekko oczekiwałem tej odpowiedzi ... Będę trzymać mój komentarz, aby inni mogli dowiedzieć się również o wbudowanym dosłownym „aeiouy”.
B. Mehta,

@ B.Mehta Bez obaw. Dzięki MATL Online (matl.suever.net) możesz wybrać konkretną wersję, korzystając z menu rozwijanego w prawym górnym rogu
Suever

4

V , 21 , 20 bajtów

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

Wypróbuj online!

Wyjaśnienie:

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

Alternatywna wersja (21 bajtów):

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

Wypróbuj online!

Wykorzystuje to śmieszną kompresję wyrażeń regularnych i wciąż udaje mu się wyrzucić tyłek z innych języków golfowych. Dla porównania jest to około dwóch trzecich długości zwykłej wersji „nieskompresowanej”, a mianowicie:

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

Wyjaśnienie:

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

Oto zrzut heksowy:

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

2
+1 To musi być najbardziej imponujące przesłanie V wyrażenia regularnego, jakie kiedykolwiek widziałem
kwakanie krów


4

Python 3 , 75 68 bajtów

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

Wypróbuj online!

Wyjaśnienie:

Działa, generując wartość logiczną dla każdego znaku w ciągu wejściowym na podstawie tego, czy jest to samogłoska, i znajdując najniższy indeks 0pierwszej nie-samogłoski (z wyłączeniem pierwszego znaku). Zwraca podciąg do tego indeksu dwa razy, oddzielone spacjami i ciągiem oryginalnym.


4

Clojure, 192 188 181 bajtów

(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 bajty przez wstawianie first-sp-pred(ups).

-7 bajtów poprzez usunięcie niektórych brakujących spacji

To było o wiele trudniejsze, niż się spodziewałem! Ręcznie parsuję ciąg ... ponieważ wciąż nie udało mi się nauczyć regex: /

Informacje na temat awarii znajdują się w kodzie golfowym:

(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 bajtów

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)

Wypróbuj online!

rozwiązanie niebędące wyrażeniem regularnym


Skomentowano:

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)

Dlaczego potrzebujesz Wymienić w=c in azw=c in'aAeEiIoOuUyY'
sagiksp

4

Ohm , 19 bajtów (CP437), niekonkurujące

Nowy język i jako taki musiałem dodać kilka nowych funkcji, aby ten działał, co niestety sprawia, że ​​jest on niekonkurencyjny (ponieważ luki).

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

Wyjaśnienie:

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

Jestem ciekawy, jakie funkcje zaimplementowałeś ...?
Stewie Griffin

@StewieGriffin Odwrócenie stosu ( Q), wyszukiwanie w podtablicy ( ), ucięcie łańcuchowe / tablicowe ( ) oraz stałe samogłoskowe ( αvi αy).
Nick Clifford

4

PHP, 69 65 53 bajtów

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

wymaga PHP 5.3 lub nowszego. Uruchom jako potok z -Flub wypróbuj niektóre wersje online .

Zapisano 4 bajty (i naprawiono kod) z wyrażeniem regularnym skradzionym z @aross;
10 więcej z preg_filterzamiast preg_matchi -F
a dwie z ulepszonym regex.

75 81 bajtów dla wersji innej niż wyrażenia regularne:

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

wymaga PHP 5 lub nowszego; wymienić ?:ze ?1:dla starszych PHP. Biegnij z-nR

Awaria

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

Nie wydaje się działać. Gotowy naThis isn't a single word :T T This isn't a single word.
aross

@aross wydaje się, że sprawdza tylko małe litery? Mogę się mylić Nie znam PHP tak dobrze
Albert Renshaw

1
@AlbertRenshaw Wersja wyrażenia regularnego używa imodyfikatora, który powoduje, że wielkość wyrażeń regularnych nie jest rozróżniana. Druga wersja sprawdzała tylko małe litery. Naprawiony.
Tytus

4

R, 49 bajtów

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

Zastąpienie oparte na regeksie, dopasuj wszystko, aż nie będzie samogłoski, przechwyć i zamień je 3 razy.

scanpoczekaj na doubledane wejściowe typu, aby powiedzieć charactertypowi, że musimy podać dwa argumenty, pierwszy to domyślny, pusty ciąg dla stdin, a dla drugiego ocena R pozwala na użycie tylko, cponieważ nie jest dwuznaczna characterw tym kontekście.

Toznacza TRUEi zapisuje trochę znaków jako 4 i 5 parametr, aby podpowiedzieć, aby zignorował wielkość liter i użył PCRE (chciwość nie jest taka sama ze składnią regex R)

4 bajty zapisane dzięki uprzejmości Sumner18 wraz z linkiem Tio do uruchomionego kodu


3

Java 8, 147 140 bajtów

Gra w golfa:

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

Nie golfowany:

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

Uwaga: literał 2w kodzie to wartość java.util.regex.Pattern.CASE_INSENSITIVE.


2
Myślę, że możesz użyć, import java.util.regex.*;aby zapisać niektóre bajty.
Roman Gräf

@ RomanGräf masz rację. Pakiety zostały przeliterowane, ponieważ we wcześniejszej wersji kodu (nie działały) krótsze było nie używanie importu. Nie dokonałem ponownej oceny po naprawieniu kodu.

3

C, 123 bajty

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

Zadzwoń jako:

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

1
To jest miłe! Wyrzuciłeś moje rozwiązanie C z parku lol.
Albert Renshaw


2

Siatkówka, 24 bajty

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

Wypróbuj online


Całkiem podobne do tego
Emigna

Tak, wiem. Ale udzieliłem odpowiedzi niezależnie. Mimo to zdecydowano, że dopuszczalne są duplikaty odpowiedzi, jeśli praca nie jest plagiatem.
mbomb007

2

Python 3 , 130 102 bajtów

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)

Wypróbuj online!

Nie używa żadnej funkcji i żadnych bibliotek zewnętrznych! (Chyba że drukowanie i dane wejściowe są liczone jako funkcje, które pełnią).

Działa, sprawdzając, czy wydostaje się ze spółgłosek na początku tytułu do „strefy samogłoskowej”. Jeśli znajduje się w „strefie samogłosek” i wykrywa spółgłoskę, drukuje tytuł.

Zaoszczędź 28 bajtów dzięki @LliwTelracs


2

MATLAB / Octave, 58 51 bajtów

7 bajtów zapisanych dzięki @HughNolan

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

Tworzy anonimową funkcję o nazwie, ansktórą można wywołać przekazując do niej ciąg znaków:ans('Land')

Demo online

W celu zapewnienia zgodności z MATLAB-em $0należy zastosować zamiast $1powyższej funkcji.


Myślałem o tym, a potem zobaczyłem, że już to zrobiłeś. Zaoszczędź kilka bajtów: @(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');- również Matlab wydaje się dziwnie używać 0 USD zamiast 1 USD
Hugh Nolan

@HughNolan Świetny punkt, dzięki!
Suever

2

C (gcc) , 111 110 bajtów

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

Wypróbuj online!

To właśnie wykorzystuje funkcje biblioteczne strspn()i strcspn()i wykorzystuje kolejność gcc ocenia parametry funkcyjne. Nieco mniej golfa

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

Dzięki @gastropner za -1.


Łał!! Dobra robota!
Albert Renshaw


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.