La La Land… nein warte, Moo Moo Moonlight


122

Diese Herausforderung ist eine Hommage an den Gewinner von Best Picture bei den Oscars 2017, La La Land Moonlight !


Schreiben Sie eine Funktion / ein Programm, die / das eine Zeichenfolge verwendet, die nur Buchstaben enthält [A-Za-z], die vier in Sätzen .,'?und Leerzeichen des Alltags üblichen Symbole , und die die Zeichenfolge im Stil von La La Land ausgibt.

Um genauer zu sein, nehmen Sie die Buchstaben bis einschließlich der ersten Vokalgruppe und drucken / geben Sie sie zweimal aus, wobei Sie jedes Mal ein Leerzeichen hinzufügen, und drucken / geben Sie dann die gesamte Zeichenfolge aus. y ist ein Vokal in dieser Herausforderung. Zeichensetzung und Großschreibung sollten beibehalten werden.

Sie können davon ausgehen, dass alle Zeichenfolgen mindestens einen Vokal enthalten und dass alle Zeichenfolgen mit einem Buchstaben beginnen.

Testfälle:

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?

Das ist also gewinnt der kürzeste Code in jeder Sprache. Erklärungen sind erwünscht , auch in den Hauptsprachen.


1
Testfall für die Groß- und Kleinschreibung: MOONLIGHT. Und nur zum Spaß:Why did the chicken cross the road?
Titus

35
Herausforderung gesponsert von: National Stuttering Association
Sergiol

6
Oder Prof. Quirrell
Brian J

1
6. Testfall, den Louis Prima und das Dschungelbuch für Sie gekauft haben. Trat nur bei, um dieses (schlechte) Wortspiel hinzuzufügen.
Toby

Antworten:



30

05AB1E , 23 19 18 Bytes

Dank Okx 1 Byte gespeichert .

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

Probieren Sie es online! oder als Testsuite

Erläuterung

 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 Bytes

-5 Bytes mit einem Trick aus Emignas genialer Antwort (10 in der isVowel-Liste suchen)

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

Probieren Sie es online! (nicht ganz sicher, wie man eine Testsuite für dieses vollständige Programm erstellt)


15- Byte-Alternative:

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

Hier ist die vollständige Testsuite.

Wie?

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

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

Hier kommt die erste nicht auf Regex basierende Sprache (mit Regex).

1 Byte dank Neil gespeichert .


18

JavaScript (ES6), 40 46

Bearbeiten Sie 5 + 1 Bytes, die als @Arnauld gespeichert wurden

Übermäßig lang im Vergleich zu anderen mit dem gleichen Trick (wie üblich)

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 nein, aber ich könnte es gebrauchen '$& $& $&'- ich vergesse immer die speziellen Dollarzeichen. Danke. Leider ist es jetzt wirklich eine Antwort auf Martins Retina.
Edc65

Das ^wird in der Retina benötigt, die - glaube ich - standardmäßig nach allen Übereinstimmungen sucht. Aber brauchen wir das hier wirklich?
Arnauld

@ Arnauld Sie haben wieder Recht
edc65

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

@ETHproductions in der Tat. Danke fürs bemerken.
edc65


12

Batch, 180 Bytes

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

Implementiert eine Zustandsmaschine. gVerfolgt, ob wir jemals einen Vokal gesehen haben, so wissen wir, ob der aktuelle Buchstabe ausgegeben oder mit dem nächsten Buchstaben fortgefahren werden soll, wenn er kein Vokal ist.



8

Rubin, 31 32 30 Bytes

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

Zwei Bytes gespart dank GB und Cyoce.


6

PHP, 55 54 Bytes

Anmerkung: Die codierte Version verwendet die IBM-850-Codierung.

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

Laufen Sie wie folgt:

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

Erläuterung

Nur ein regulärer Ausdruck, der mit einem beliebigen Zeichen am Anfang der Zeichenfolge ersetzt wird, gefolgt von einer beliebigen Anzahl von Vokalen (verwenden Sie die iOption für Groß- / Kleinschreibung). Diese Erfassungsgruppe wird dann zweimal gedruckt, gefolgt von der gesamten Zeichenfolge.

Optimierungen

  • Ein Byte mit gespeichert -R, um $argnverfügbar zu machen (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 ( -pFlagge)

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

Probieren Sie es online!


Was bleibt zum Golfen:

• Zwei Ausdrucke in einen zusammenfalten.

• Das Drucken meines Leerzeichens kann in geändert werden %*c Ich bin mir sicher, dass das Logik .

• Ich benutze Bedingungen, die irgendwie entfernt werden können

j=(i-13)/12 kann wahrscheinlich verkürzt werden.

• [AY] bedingte Überprüfungen, ob ==0dies normalerweise nicht erforderlich ist, obwohl ich gerade dabei bin (ich habe versucht, das If-else zu wechseln und das Ganze zu ==0verwerfen, aber das erfordert das Hinzufügen von {Klammern} und das Erhöhen der Bytegröße)


Tricks, die ich zum Golfspielen benutzt habe:

• Kombinierte Suche nach Double-for-Loop-Strings mit Modulo für die x-Achse und Integer-Division für die y-Achse (Eingabe-String vs. Vokal-String). (Die X-Achse wird zweimal wiederholt, bevor sie einmal auf der Y-Achse iteriert wird. Das erste Mal mit [AZ] und das zweite Mal mit [az], wobei der Zeichenwert 32 als Differenz verwendet wird.

• Umgangen werden muss "[AY] und [ay]", indem nur der Abstand zwischen Zeichensätzen und Modulo 32 genommen wird. Auf diese Weise wird der Abstand 0 (AA) oder der Abstand 32 (aA).

• Wiederverwenden von Integer-Variablen, die nicht mehr als Boolesche Variablen verwendet werden.

• Rufen Sie eine Funktion mit derselben Zeichenfolge rekursiv auf, um sie zu verarbeiten und eine zweite for-Schleife zu vermeiden.

• Setzen Sie BOOL-Werte auf die Logik zum Setzen einer anderen Variablen. (zB bool = i = 5;), um beide mit einer Klappe zu schlagen.

• Ternary Empty-True-Exploit-Missbrauch. (GCC)


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

10 Bytes dank Keyu Gan abgeschlagen (in Kommentaren)


Hinweis für sich selbst: j=(i-13)/12Kann wahrscheinlich verkürzt werden.
Albert Renshaw

Vermisse ich etwas oder könntest du damit anfangen i=j=k=m=n=0;?
Richard Irons

@RichardIrons Die Variablen müssen zuerst deklariert werden.
Albert Renshaw

Sie können i,j,k,m,n;für die Initialisierung verwenden.
Keyu Gan

@KeyuGan undefiniertes Verhalten, nicht garantiert immer 0. (soweit ich weiß?)
Albert Renshaw

4

MATL, 33 Bytes

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

Probieren Sie es bei MATL Online aus

Erläuterung

                % 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:)YXspeichert 2 Bytes
Luis Mendo

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

@ B.Mehta 19Y2existierte nicht, als diese Antwort leider eingereicht wurde
Suever

Ja, ich habe mit dieser Antwort ein wenig gerechnet ... Ich werde meinen Kommentar behalten, damit andere auch etwas über das eingebaute wörtliche "Aeiouy" erfahren können.
B. Mehta

@ B.Mehta Keine Sorge. Mit MATL Online (matl.suever.net) können Sie eine bestimmte Version über das Dropdown-
Menü

4

V , 21 , 20 Bytes

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

Probieren Sie es online!

Erläuterung:

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

Alternative Version (21 Byte):

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

Probieren Sie es online!

Dies nutzt die lächerliche Regex-Komprimierung und schafft es immer noch, von den anderen Golfsprachen in den Arsch getreten zu werden. Als Referenz ist dies ungefähr zwei Drittel der Länge der regulären "unkomprimierten" Version, nämlich:

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

Erläuterung:

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

Hier ist ein Hexdump:

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

2
+1 Dies muss die beeindruckendste V-Regex-Einsendung sein, die ich je gesehen habe
Kühe quaken


4

Python 3 , 75 68 Bytes

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

Probieren Sie es online!

Erläuterung:

Generiert einen booleschen Wert für jedes Zeichen in der Eingabezeichenfolge, basierend darauf, ob es sich um einen Vokal handelt oder nicht, und ermittelt den niedrigsten Index des 0ersten Nicht-Vokals (ohne das erste Zeichen). Die Teilzeichenfolge wird zweimal an diesen Index zurückgegeben, getrennt durch Leerzeichen und die ursprüngliche Zeichenfolge.


4

Clojure, 192 188 181 Bytes

(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 Bytes durch Inlining first-sp-pred(whoops).

-7 Bytes durch Entfernen einiger fehlender Leerzeichen

Das war weitaus herausfordernder als ich gedacht hatte! Ich analysiere die Zeichenfolge manuell ... da ich mich noch nicht mit Regex beschäftigt habe: /

Informationen zur Aufschlüsselung finden Sie im Pre-Golf-Code:

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

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)

Probieren Sie es online!

eine nicht-reguläre Lösung


Kommentiert:

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)

Warum brauchst du eine? Ersetzen w=c in adurchw=c in'aAeEiIoOuUyY'
sagiksp

4

Ohm , 19 Bytes (CP437), nicht konkurrierend

Neue Sprache, und als solche musste ich einige neue Funktionen hinzufügen, um diese Arbeit zu machen, was diese leider nicht wettbewerbsfähig macht (weil Lücken).

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

Erläuterung:

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

Ich bin gespannt, welche Funktionen Sie implementiert haben ...?
Stewie Griffin

@StewieGriffin Stapelumkehr ( Q), Subarray-Suche ( ), String- u/ Array-Slicing ( ) und Vokalkonstanten ( αvund αy).
Nick Clifford

4

PHP, 69 65 53 Bytes

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

benötigt PHP 5.3 oder neuer. Laufen Sie als Pipe mit -Foder probieren Sie einige Versionen online aus .

4 Bytes gespart (und den Code korrigiert) mit Regex, der von @aross gestohlen wurde;
10 weitere mitpreg_filter statt preg_matchund -F
und zwei mit verbesserter Regex.

75 81 Bytes für eine Nicht-Regex-Version:

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

benötigt PHP 5 oder neuer; ersetzen?: mit ?1:für ältere PHP. Laufen Sie mit-nR

Nervenzusammenbruch

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

Scheint nicht zu funktionieren. This isn't a single wordT T This isn't a single word.
Ausgegeben

@aross scheint nur Kleinbuchstaben zu prüfen? Ich kann mich irren, ich kenne PHP nicht so gut
Albert Renshaw

1
@AlbertRenshaw Die Regex-Version verwendet den iModifikator, der die Groß- und Kleinschreibung des Regex unempfindlich macht. Die andere Version überprüfte nur Kleinbuchstaben. Fest.
Titus

4

R, 49 Bytes

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

Regex-basiertes Ersetzen, stimmen Sie alles ab, bis kein Vokal mehr vorhanden ist, erfassen Sie es und ersetzen Sie es dreimal von selbst.

scanWarten Sie auf eine Typeneingabe double, damit der characterTyp verwendet wird. Wir müssen ihm zwei Argumente geben. Das erste ist die Standard-Leerzeichenfolge für stdin, und das zweite ist in der R-Auswertung nur zulässig, cda sie characterin diesem Kontext nicht mehrdeutig ist .

T steht für TRUE und speichere ein Zeichen als 4. und 5. Parameter, um zu sagen, dass Groß- und Kleinschreibung ignoriert und PCRE verwendet werden soll (die Gier ist nicht mit der regulären Syntax identisch).

4 Bytes mit freundlicher Genehmigung von Sumner18 zusammen mit dem Tio- Link zum laufenden Code gespeichert


3

Java 8, 147 140 Bytes

Golf gespielt:

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

Ungolfed:

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

Hinweis: Das Literal 2im Code ist der Wert von java.util.regex.Pattern.CASE_INSENSITIVE.


2
Ich denke, Sie können verwenden import java.util.regex.*;, um einige Bytes zu speichern.
Roman Gräf

@ RomanGräf du bist richtig. Ich hatte die Pakete geschrieben, weil es in einer früheren Version des Codes (nicht funktioniert) kürzer war, keine Importe zu verwenden. Ich habe nach der Korrektur des Codes keine Neubewertung vorgenommen.

3

C, 123 Bytes

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

Anrufen als:

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

1
Das ist nett! Du hast meine C-Lösung aus dem Park geworfen, lol.
Albert Renshaw

2

Pyke , 22 Bytes

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

Probieren Sie es online!

Dies ist 4 Bytes länger als es eigentlich sein sollte, wenn ich einen kürzeren Weg implementiert hätte, um Vokale einschließlich zu erhalten y.



2

Python 3 , 130 102 Bytes

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)

Probieren Sie es online!

Verwendet keinerlei Funktion und keine externen Bibliotheken! (Es sei denn, Druck und Eingabe gelten als Funktionen, die sie ausführen).

Funktioniert so, dass es zu Beginn des Titels aus den Konsonanten in die 'Vokalzone' gelangt. Befindet es sich in der Vokalzone und erkennt einen Konsonanten, wird der Titel gedruckt.

28 Bytes dank @LliwTelracs gespart


2

MATLAB / Octave, 58 51 Bytes

7 Bytes gespart dank @HughNolan

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

Erstellt eine anonyme Funktion mit dem Namen, ansdie durch Übergabe einer Zeichenfolge aufgerufen werden kann:ans('Land')

Online Demo

Aus Gründen der MATLAB-Kompatibilität $0sollte anstelle $1der obigen Funktion verwendet werden.


Ich habe darüber nachgedacht und dann gesehen, dass du es schon getan hast. Sparen Sie ein paar Bytes: @(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');- Auch Matlab scheint seltsamerweise $ 0 statt $ 1 zu verwenden
Hugh Nolan

@HughNolan Toller Punkt, danke!
Suever

2

C (GCC) , 111 110 Bytes

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

Probieren Sie es online!

Dies nutzt nur Bibliotheksfunktionen strspn()und strcspn()und nutzt die Reihenfolge , in der gcc Funktionsparameter auswertet. Etwas weniger golfen

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

Danke an @gastropner für -1.


Beeindruckend!! Gute Arbeit!
Albert Renshaw


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.