Sheffle tho vawols ureund!

42

Bei einem gegebenen Eingangskette, Ausgabe , die Zeichenfolge mit allen Vokalen a, e, i, ound nach udem Zufallsprinzip zwischen miteinander vertauscht.

Zum Beispiel in der Zeichenfolge this is a testgibt es 4 Vokale: [i, i, a, e]. Ein gültiges Mischen dieser Vokale könnte [a, i, e, i]daher die Ausgabe ergeben thas is e tist.

Über das Mischen

Alle Vermischungen sind gleich wahrscheinlich, wenn wir gleiche Vokale als verschieden betrachten . Für das obige Beispiel sind diese 24 Mischen möglich:

[i 1 , i 2 , a, e] [i 1 , i 2 , e, a] [i 1 , a, i 2 , e] [i 1 , a, e, i 2 ]
[i 1 , e, i 2 , a] [i 1 , e, a, i 2 ] [i 2 , i 1 , a, e] [i 2 , i 1 , e, a]
[i 2 , a, i 1 , e] [i 2 , a, e, i 1 ] [i 2 , e, i 1 , a] [i 2 , e, a, i 1 ]
[a, i 1 , i 2 , e] [a, i 1 , e, i 2 ] [a, i 2 , i 1 , e] [a, i 2 , e, i 1 ]
[a, e, i 1 , i 2 ] [a, e, i 2 , i 1 ] [e, i 1 , i 2 , a] [e, i 1 , a, i 2 ]
[e, i 2 , i 1 , a] [e, i 2 , a, i 1 ] [e, a, i 1 , i 2 ] [e, a, i 2 , i 1 ]

Jeder sollte gleich wahrscheinlich sein.

Sie können keine zufällige Mischung der gesamten Zeichenfolge versuchen, bis Sie eine gefunden haben, bei der sich alle Vokale an der richtigen Stelle befinden. Kurz gesagt, die Laufzeit Ihres Codes muss konstant sein, wenn die Eingabe konstant ist.

Eingänge und Ausgänge

  • Sie können davon ausgehen, dass alle Buchstaben in der Eingabe Klein- oder Großbuchstaben sind. Sie können auch gemischte Gehäuse unterstützen, obwohl dies keinen Bonus gibt.

  • Die Eingabe besteht immer aus druckbaren ASCII-Zeichen. Alle Zeichen, die in der Eingabe sind, müssen in der Ausgabe sein, nur die Vokale müssen gemischt werden und sonst nichts.

  • Die Eingabe kann leer sein. Es gibt keine Garantie dafür, dass die Eingabe mindestens einen Vokal oder mindestens einen Nicht-Vokal enthält.

  • Sie können die Eingabe von STDIN, als Funktionsparameter oder etwas Ähnliches nehmen.

  • Sie können die Ausgabe an drucken STDOUT, von einer Funktion zurückgeben oder etwas Ähnliches.

Testfälle

Die erste Zeile ist die angegebene Eingabe. Die zweite Zeile ist eine der möglichen Ausgaben.

<empty string>
<empty string>

a
a

cwm
cwm

the quick brown fox jumps over the lazy dog.
tho qeuck brewn fax jumps ovir the lozy dog.

abcdefghijklmnopqrstuvwxyz
abcdefghujklmnipqrstovwxyz

programming puzzles & code golf
pregromming pezzlos & coda gulf

fatalize
fitaleza

martin ender
mirten ander

Wertung

Das ist , das hat der Shirtist en bytes gewonnen .

Tödlich
quelle
17
Sie Englisch / Amerikaner und Ihr Mangel an yals Vokal ..;)
Kevin Cruijssen
6
@KevinCruijssen Ich bin kein Muttersprachler und ich würde auch in Betracht ziehen y, ein Vokal zu sein, aber die letzte Herausforderung, bei der ich sagte, es ysei ein Vokal, wurde ich gefragt, warum ich das gewählt habe!
Fatalize
7
@ KevinCruijssen, Buchstaben sind keine Vokale: Töne sind.
Peter Taylor
6
+1 für cwm. Bergsteigen und / oder Walisisch am Leben erhalten;)
Beta Decay
2
@KevinCruijssen Sie haben noch keinen Co w etwa vo w els die nicht allgemein so betrachtet werden.
corsiKa

Antworten:

13

Gelee , 15 Bytes

f€“¡ẎṢɱ»ðœpżFẊ¥

Probieren Sie es online!

Wie es funktioniert

f€“¡ẎṢɱ»ðœpżFẊ¥  Main link. Argument: s (string)

  “¡ẎṢɱ»         Yield "aeuoi"; concatenate "a" with the dictionary word "euoi".
f€               Filter each character in s by presence in "aeuoi".
                 This yields A, an array of singleton and empty strings.
        ð        Begin a new, dyadic chain. Left argument: A. Right argument: s
         œp      Partition s at truthy values (singleton strings of vowels) in A.
            FẊ¥  Flatten and shuffle A. This yields a permutation of the vowels.
           ż     Zip the partition of consonants with the shuffled vowels.
Dennis
quelle
Warum scheint dies im Vergleich zu anderen Antworten ziemlich langsam zu sein?
Fatalize
Jelly importiert SymPy und NumPy vor allem anderen. Dieses Programm und das leere Programm haben ungefähr die gleiche Ausführungszeit.
Dennis
5
@Dennis Warum hat Jelly aus Neugier Wörterbuchwörter eingebaut? Woher stammen diese Wörter aus dem Wörterbuch?
Kevin Cruijssen
1
@KevinCruijssen Als ich Jelly entwarf, gab es bereits einige Golfsprachen , die Shoco verwendeten , und die einfache Verwendung eines englischen Wörterbuchs schien eine gute Möglichkeit zu sein, diese Idee zu verbessern. Ich habe die Datei /usr/share/dict/wordsvon meinem Computer verwendet und sie in den Jelly-Interpreter aufgenommen.
Dennis
17

R 92 91

Ich kann noch keinen Kommentar abgeben, daher füge ich meine eigene Antwort hinzu, obwohl sie der Antwort von @ Andreï Kostyrka sehr ähnlich ist (ob Sie es glauben oder nicht, aber ich habe sie unabhängig gefunden).

s=strsplit(readline(),"")[[1]];v=s%in%c("a","e","i","o","u");s[v]=sample(s[v]);cat(s,sep="")

Ungolfed

s=strsplit(readline(),"")[[1]]    # Read input and store as a vector
v=s%in%c("a","e","i","o","u")     # Return TRUE/FALSE vector if vowel
s[v]=sample(s[v])                 # Replace vector if TRUE with a random permutation of vowels
cat(s,sep="")                     # Print concatenated vector

Dank @Vlo ein Byte gespeichert

s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
Billywob
quelle
5
Ehrlich gesagt kann ich nicht glauben. Ich mache nur Spaß. Netter Trick um ein paar Bytes zu retten!
Andreï Kostyrka
Um ehrlich zu sein, ich klaue nicht Ihre Ideen, um meine Antwort weiter zu verbessern.
Andreï Kostyrka
3
Hehe, ich muss ihnen süße Gegenstimmen geben, damit ich einen Kommentar abgeben kann;)
Billywob
Speichern Sie ein Byte mit Inline-Zuweisung 91 Bytess=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
Vlo
Speichern Sie ein weiteres Byte, indem Sie el()anstelle von verwenden [[1]].
Andreï Kostyrka
11

R 99 98 89 Bytes

x=el(strsplit(readline(),""))
z=grepl("[aeiou]",x)
x[z]=x[sample(which(z))]
cat(x,sep="")

Scheint die erste für Menschen lesbare Lösung zu sein! Danke an Giuseppe für das Speichern von 9 Bytes!

Testfälle:

tho qaeck bruwn fux jemps over tho lozy dig.
progremmang pozzlos & cide gulf

Es scheint, als gäbe es keine Möglichkeit, eine interne Variablenzuweisung vorzunehmen (inside, like, cat), und wieder werden einige Leute beweisen, dass ich falsch liege ...

Andreï Kostyrka
quelle
2
letters[c(1,5,9,15,21)]ist 1 Byte länger und OEIS A161536 und A215721 scheinen ebenfalls wenig oder gar keine Hilfe zu sein.
Andreï Kostyrka
Wäre nicht z=grepl("[aeiou]",x)kürzer?
Giuseppe
@ Giuseppe Du hast es wieder getan! Vielen Dank.
Andreï Kostyrka
10

CJam, 23 Bytes

lee_{"aeiou"&},_mrerWf=

Probieren Sie es online!

Erläuterung

l            e# Read input, e.g. "foobar".
ee           e# Enumerate, e.g. [[0 'f] [1 'o] [2 'o] [3 'b] [4 'a] [5 'r]].
_            e# Duplicate.
{"aeiou"&},  e# Keep those which have a non-empty intersection with this string
             e# of vowels, i.e. those where the enumerated character is a vowel.
             e# E.g. [[1 'o] [2 'o] [4 'a]].
_            e# Duplicate.
mr           e# Shuffle the copy. E.g. [[2 'o] [4 'a] [1 'o]].
er           e# Transliteration. Replaces elements from the sorted copy with
             e# the corresponding element in the shuffled copy in the original list.
             e# [[0 'f] [2 'o] [4 'a] [3 'b] [1 'o] [5 'r]].
Wf=          e# Get the last element of each pair, e.g. "foabor".
Martin Ender
quelle
5

05AB1E , 17 Bytes

žMÃ.r`¹vžMyå_iy}?

Erläuterung

žMÃ                # get all vowels from input
   .r`             # randomize them and place on stack
      ¹v           # for each in input
        žMyå_i }   # if it is not a vowel
              y    # push it on stack
                ?  # print top of stack

Probieren Sie es online!

Emigna
quelle
5

Python 3, 109 Bytes

Unterstützt nur Vokale in Kleinbuchstaben.

Vielen Dank an @Alissa für das Speichern eines zusätzlichen Bytes.

import re,random
def f(s):r='[aeiou]';a=re.findall(r,s);random.shuffle(a);return re.sub(r,lambda m:a.pop(),s)

Ideone es!

Beta-Zerfall
quelle
Wäre es nicht kürzer, wenn es sich um eine Funktion handelt, die eine Zeichenfolge nimmt und diese Zeichenfolge mit gemischten Vokalen zurückgibt?
Alissa
@Alissa Danke, es hat ein Byte gespart! : D
Beta Decay
Ich bin mir nicht sicher, ob es kürzer sein wird, aber du könntest a.pop(random.randrange(0,len(a)))eine
Alissa
4

TSQL, 275 Bytes

Golf gespielt:

DECLARE @ VARCHAR(99)='the quick brown fox jumps over the lazy dog.'

;WITH c as(SELECT LEFT(@,0)x,0i UNION ALL SELECT LEFT(substring(@,i+1,1),1),i+1FROM c
WHERE i<LEN(@)),d as(SELECT *,rank()over(order by newid())a,row_number()over(order by 1/0)b
FROM c WHERE x IN('a','e','i','o','u'))SELECT @=STUFF(@,d.i,1,e.x)FROM d,d e
WHERE d.a=e.b PRINT @

Ungolfed:

DECLARE @ VARCHAR(max)='the quick brown fox jumps over the lazy dog.'

;WITH c as
(
  SELECT LEFT(@,0)x,0i
  UNION ALL
  SELECT LEFT(substring(@,i+1,1),1),i+1
  FROM c
  WHERE i<LEN(@)
),d as
(
  SELECT 
    *,
    rank()over(order by newid())a,
    row_number()over(order by 1/0)b
  FROM c
  WHERE x IN('a','e','i','o','u')
)
SELECT @=STUFF(@,d.i,1,e.x)FROM d,d e
WHERE d.a=e.b
-- next row will be necessary in order to handle texts longer than 99 bytes
-- not included in the golfed version, also using varchar(max) instead of varchar(99)
OPTION(MAXRECURSION 0) 

PRINT @

Geige

t-clausen.dk
quelle
3

Perl, 38 Bytes

Beinhaltet +1 für -p

Führen Sie mit dem Satz auf STDIN

vawols.pl <<< "programming puzzles & code golf"

vawols.pl:

#!/usr/bin/perl -p
@Q=/[aeiou]/g;s//splice@Q,rand@Q,1/eg
Tonne Hospel
quelle
3

Java 7, 243 241 Bytes

import java.util.*;String c(char[]z){List l=new ArrayList();char i,c;for(i=0;i<z.length;i++)if("aeiou".indexOf(c=z[i])>=0){l.add(c);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<z.length;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}

Ja, das kann man wahrscheinlich ein bisschen Golf spielen, aber Java hat keine praktischen Einbauten für diesen Afaik. Außerdem habe ich irgendwie die codegolfed Array-Variante für Collections.shuffle... vergessen .

Ungolfed & Testfälle:

Probieren Sie es hier aus.

import java.util.*;
class M{
  static String c(char[] z){
    List l = new ArrayList();
    char i,
         c;
    for(i = 0; i < z.length; i++){
      if("aeiou".indexOf(c = z[i]) >= 0){
        l.add(c);
        z[i] = 0;
      }
    }
    Collections.shuffle(l);
    String r = "";
    for(i = 0; i < z.length; i++){
      r += z[i] < 1
               ? (char)l.remove(0)
               : z[i];
    }
    return r;
  }

  public static void main(String[] a){
    System.out.println(c("".toCharArray()));
    System.out.println(c("a".toCharArray()));
    System.out.println(c("cwm".toCharArray()));
    System.out.println(c("the quick brown fox jumps over the lazy dog.".toCharArray()));
    System.out.println(c("abcdefghijklmnopqrstuvwxyz".toCharArray()));
    System.out.println(c("programming puzzles & code golf".toCharArray()));
    System.out.println(c("fatalize".toCharArray()));
    System.out.println(c("martin ender".toCharArray()));
  }
}

Mögliche Ausgabe:

a
cwm
tha queck brown fox jumps evor tho lezy dig.
ebcdifghujklmnopqrstavwxyz
prigrommeng puzzlos & cade golf
fatelazi
mertan inder
Kevin Cruijssen
quelle
1
Wie wäre es mit einer Wiederverwendung iin der zweiten Schleife?
Frozn
Ich dachte, "warum ist er nicht mit char [] statt mit einer Liste gegangen", also habe ich angefangen, aber der Mangel an Arrays.shufflehat mich genau dort aufgehalten ...
Olivier Grégoire
Rasierte 6 Zeichen mit einigen kleinen Verbesserungen:import java.util.*;String c(char[]z){List l=new ArrayList();int i=0,j=z.length;for(;i<j;i++)if("aeiou".indexOf(z[i])>=0){l.add(z[i]);z[i]=0;}Collections.shuffle(l);String r="";for(i=0;i<j;i++)r+=z[i]<1?(char)l.remove(0):z[i];return r;}
Durron597
3

Perl 6 , 65 Bytes

{my \v=m:g/<[aeiou]>/;my @a=.comb;@a[v».from]=v.pick(*);@a.join}

Anonyme Funktion. Übernimmt die Eingabe in Kleinbuchstaben.

( online ausprobieren )

smls
quelle
3

Ruby 45 + 1 = 46 Bytes

+1 Byte für -pFlag

a=$_.scan(e=/[aeiou]/).shuffle
gsub(e){a.pop}
Jordan
quelle
3

Brachylog , 39 Bytes

@eI:1aToS,I:2f@~:LcS,Tc
.'~e@V;
e.~e@V,

Probieren Sie es online!

Erläuterung

  • Hauptprädikat:

    @eI        I is the list of chars of the input.
    :1aT       T is I where all vowels are replaced with free variables.
    oS,        S is T sorted (all free variables come first).
    I:2f       Find all vowels in I.
    @~         Shuffle them.
    :LcS,      This shuffle concatenated with L (whatever it may be) results in S.
                 This will unify the free variables in S with the shuffled vowels.
    Tc         Output is the concatenation of elements of T.
    
  • Prädikat 1:

    .          Input = Output…
    '~e@V      …provided that it is not a vowel.
    ;          Otherwise Output is a free variable.
    
  • Prädikat 2:

    e.         Output is an element of the input…
    ~e@V,      … and it is a vowel.
    
Tödlich
quelle
3

Javascript (ES6), 78 76 Bytes

s=>s.replace(r=/[aeiou]/g,_=>l.pop(),l=s.match(r).sort(_=>Math.random()-.5))

2 Bytes dank Apsillers gespart

Alternative Version von Apsillers vorgeschlagen (auch 76 Bytes)

s=>s.replace(r=/[aeiou]/g,[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))

Prüfung

let f =
s=>s.replace(r=/[aeiou]/g,_=>l.pop(),l=s.match(r).sort(_=>Math.random()-.5))

console.log(f("the quick brown fox jumps over the lazy dog."))

Arnauld
quelle
1
Keine Verbesserung (exakt die gleiche Punktzahl), aber eine lustige Hässlichkeit, die ich gefunden habe: Löschen Sie das Ganze l=...und verwenden Sie die gebundene Funktion [].pop.bind(s.match(r).sort(_=>Math.random()-.5)))als zweites Argument für replace(anstelle einer Pfeilfunktion). Vielleicht gibt es eine Verbesserung auf diesem Weg, aber ich habe noch keine gefunden. Wenn Sie eine JS-Superset-Sprache mit dem Bind-Operator verwendet haben ::, könnten Sie dies wahrscheinlich tun (s.match(r).sort(_=>Math.random()-.5)))::pop.
Apsillers
3

MATL , 15 Bytes

tt11Y2m)tnZr7M(

Probieren Sie es online!

Erläuterung

tt      % Take input string implicitly. Duplicate twice
11Y2    % Predefined string: 'aeiou'
m       % Logical index that contains true for chars of the input that are vowels
)       % Get those chars from the input string. Gives a substring formed by the
        % vowels in their input order
tnZr    % Random permutation of that substring. This is done via random sampling
        % of that many elements without replacement
7M      % Push logical index of vowel positions again
(       % Assign the shuffled vowels into the input string. Display implicitly
Luis Mendo
quelle
3

Japt v2.0a0, 14 13 Bytes

ō²f\v
NÌr\v@o

Versuch es


Erläuterung

           :Implicit input of string U.
ö²         :Generate a random permutation of U.
  f\v      :Get all the vowels as an array.
\n         :Assign that array to U.
NÌ         :Get the last element in the array of inputs (i.e., the original value of U)
  r\v      :Replace each vowel.
     @o    :Pop the last element from the array assigned to U above.
Zottelig
quelle
2

Pyth, 26 Bytes

J"[aeiou]"s.i:QJ3.Sf}TPtJQ

Ein Programm, das die Eingabe einer Zeichenfolge in Anführungszeichen akzeptiert und die gemischte Zeichenfolge druckt.

Probieren Sie es online aus

Wie es funktioniert

J"[aeiou]"s.i:QJ3.Sf}TPtJQ  Program. Input: Q
J"[aeiou]"                  J="[aeiou]"
             :QJ3           Split Q on matches of regex J, removing vowels
                      PtJ   J[1:-1], yielding "aeiou"
                   f}T   Q  Filter Q on presence in above, yielding vowels
                 .S         Randomly shuffle vowels
           .i               Interleave non-vowel and vowel parts
          s                 Concatenate and implicitly print
TheBikingViking
quelle
2

PHP, 144 129 Bytes

Verwenden von Kleinbuchstaben

$r=Aaeiou;$v=str_shuffle(preg_replace("#[^$r]+#",'',$a=$argv[1]));for(;$i<strlen($a);)echo strpos($r,$a[$i++])?$v[$j++]:$a[$i-1];

Erläuterung:

$r="aeiou"; // set vowels

preg_replace("#[^$r]+#",'',$argv[1]) // find all vowels in input

$v=str_shuffle() // shuffle them

for(;$i<strlen($a);) // run through the text

strpos($r,$a[$i++])?$v[$j++]:$a[$i-1]; // if it's a vowel print the j-th shuffled vowel else print original text
Krypto
quelle
2

Eigentlich 24 Bytes

;"aeiou";╗@s@`╜íu`░╚@♀+Σ

Probieren Sie es online!

Erläuterung:

;"aeiou";╗@s@`╜íu`░╚@♀+Σ
;                         dupe input
 "aeiou";╗                push vowels, store a copy in reg0
          @s              split one copy of input on vowels
            @`╜íu`░       take characters from other copy of input where
              ╜íu           the character is a vowel (1-based index of character in vowel string is non-zero)
                   ╚      shuffle the vowels
                    @♀+   interleave and concatenate pairs of strings
                       Σ  concatenate the strings
Mego
quelle
2

Bash, 75 Bytes

paste -d '' <(tr aeoiu \\n<<<$1) <(grep -o \[aeiou]<<<$1|shuf)|paste -sd ''

Nimmt den String als Argument und gibt das Ergebnis an stdout aus.

Z.B

for x in "" "a" "cwm" \
         "the quick brown fox jumps over the lazy dog." \
         "abcdefghijklmnopqrstuvwxyz" \
         "programming puzzles & code golf" \
         "fatalize" "martin ender"; do
  echo "$x";. sheffle.sh "$x"; echo
done

druckt

<blank line>
<blank line>

a
a

cwm
cwm

the quick brown fox jumps over the lazy dog.
tho quuck brown fix jamps ever the lozy dog.

abcdefghijklmnopqrstuvwxyz
ibcdefghajklmnopqrstuvwxyz

programming puzzles & code golf
progremmong pazzlus & cedo gilf

fatalize
fetilaza

martin ender
mertan endir
rici
quelle
2

Bash, 89

Nimmt an, dass alle Eingaben in Kleinbuchstaben erfolgen.

a=`tee z|grep -o [aeiou]`
[ -n "$a" ]&&tr `tr -d \ <<<$a` `shuf -e $a|tr -d '
'`<z||cat z

quelle
2

PowerShell v3 +, 155 bis 99 Byte

param([char[]]$n)$a=$n|?{$_-match'[aeiou]'}|sort{random};-join($n|%{if($_-in$a){$a[$i++]}else{$_}})

Große Requisiten an @ Ben Owen für das 56-Byte-Golf

Nimmt Eingaben entgegen $n, erwartet Kleinbuchstaben und charwandelt sie sofort in ein -array um.

Wir Rohr , das in eine Where-ObjectKlausel jene Elemente zu ziehen , dass -matchein Vokal, Rohr sie Sort-Objectmit {Get-Random}als Sortiermechanismus. Wenn Sie Get-Randomohne Qualifizierer aufrufen, wird eine Ganzzahl zwischen 0und [int32]::MaxValue- zurückgegeben, dh, Sie weisen jedem Element spontan eine zufällige Gewichtung zu. Wir speichern die zufälligen Vokale in $a.

Schließlich schleifen wir durch $n. |%{...}Wenn sich das aktuelle Zeichen irgendwo befindet -in $a, geben wir für jedes Element das nächste Element in $anachträglicher Inkrementierung $iaus. Ansonsten geben wir das aktuelle Zeichen aus. Das ist alles in Parens gekapselt und -joinzu einer Schnur zusammengefasst. Diese Zeichenfolge verbleibt in der Pipeline, und die Ausgabe ist beim Programmabschluss implizit.

Testfälle

PS C:\Tools\Scripts\golfing> 'a','cwm','the quick brown fox jumps over the lazy dog.','abcdefghijklmnopqrstuvwxyz','programming puzzles & code golf','fatalize','martin ender'|%{.\vawols.ps1 $_}
a
cwm
thu qaeck brown fix jomps ovor thu lezy deg.
abcdofghejklmnupqrstivwxyz
prugrammong pizzles & code golf
fitaleza
mertin endar
AdmBorkBork
quelle
Sie können hier eine Menge Bytes sparen, indem Sie die $nZeichen durchlaufen und für jeden Vokal einen Abgleich chardurchführen, um stattdessen das -array der Vokale auszugeben. So etwas wie:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
Ben Owen
@BenOwen Heiliger Mist, ja. Vielen Dank für das 56-Byte-Golf. Für mein Leben hätte ich mir keinen besseren Weg zum Bauen vorstellen können $a.
AdmBorkBork
2

Python 3, 106 Bytes

Nur Kleinbuchstaben.

import re,random
def f(s):s=re.split('([aeiou])',s);v=s[1::2];random.shuffle(v);s[1::2]=v;return''.join(s)
Ken 'Joey' Mosher
quelle
1

PHP> = 5.3 , 139 136 Bytes (und keine Fehler geworfen)

array_map(function($a,$b){echo$a.$b;},preg_split("/[aeiou]/",$s=$argv[1]),str_split(str_shuffle(implode(preg_split("/[^aeiou]/",$s)))));
MonkeyZeus
quelle
1

K (oK) , 29 Bytes

Lösung:

{x[a:&x in"aeiou"]:x@(-#a)?a}

Probieren Sie es online!

Beispiele:

"pregrommeng pizzlas & codo gulf"
{x[a:&x in"aeiou"]:x@(-#a)?a}"programming puzzles & code golf"
"pregremmong puzzlos & coda gilf"
{x[a:&x in"aeiou"]:x@(-#a)?a}"programming puzzles & code golf"
"pregrommeng pazzlos & cidu golf"

Erläuterung:

Finden Sie die Positionen der Vokale und ersetzen Sie sie durch die gezeichneten Vokale in zufälliger Reihenfolge.

{x[a:&x in"aeiou"]:x@(-#a)?a} / the solution
{                           } / anonymous function with input x
 x[              ]            / index into x at these indices
      x in"aeiou"             / is character a vowel
     &                        / indices where true
   a:                         / assign to add
                  :           / assign
                          ?a  / draw randomly from a
                     (   )    / do this together
                       #a     / count length of a
                      -       / negate (draws from list, no duplication)
                   x@         / apply these indices to input
Streetster
quelle
0

APL (Dyalog Unicode) , 21 Byte

{⍵[?⍨≢⍵]}@{⍵∊'AEIOU'}

Probieren Sie es online!

Nimmt Großbuchstaben an.

Erik der Outgolfer
quelle
Würde {⍵∊'AEIOU'}∊∘'AEIOU'funktionieren?
Kritixi Lithos
@Cowsquack glaube ich nicht, da es dann so geparst würde ({⍵[?⍨≢⍵]}@∊)∘'AEIOU'.
Erik der Outgolfer
0

Kotlin , 122 118 Bytes

x->val v=x.filter{"aeiuo".contains(it)}.toList().shuffled()
x.split(Regex("[aeiou]")).reduceIndexed{i,a,s->a+v[i-1]+s}

Probieren Sie es online!

Makotosan
quelle