Sheffle vawols ท่อ ureund!


42

ได้รับสายเข้าให้ผลลัพธ์ที่สตริงกับสระทั้งหมดa, e, i, oและuสลับที่สุ่มระหว่างกัน

ยกตัวอย่างเช่นในสตริงthis is a testมี 4 [i, i, a, e]สระ: ดังนั้นการสับสระที่ถูกต้องสามารถทำให้ได้[a, i, e, i]ผลผลิตที่thas is e tistได้

เกี่ยวกับการสับ

ฟืทั้งหมดจะต้องเท่าเทียมกันมีแนวโน้มที่ถ้าเราพิจารณาสระเท่ากับจะแตกต่าง สำหรับตัวอย่างข้างต้นมี 24 shuffles เป็นไปได้:

[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 ]

แต่ละคนควรมีความเท่าเทียมกันอย่างเท่าเทียมกัน

คุณไม่สามารถลองสับแบบสุ่มของสตริงทั้งหมดจนกว่าจะพบสระที่อยู่ในตำแหน่งที่ถูกต้อง กล่าวโดยย่อเวลาในการทำงานของรหัสของคุณจะคงที่หากอินพุตนั้นคงที่

อินพุตและเอาต์พุต

  • คุณอาจสันนิษฐานว่าตัวอักษรทั้งหมดในอินพุตจะเป็นตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ นอกจากนี้คุณยังสามารถรองรับปลอกแบบผสมได้ แต่สิ่งนี้จะไม่ให้โบนัสใด ๆ กับคุณ

  • ข้อมูลที่ป้อนจะประกอบด้วยอักขระ ASCII ที่พิมพ์ได้ อักขระทั้งหมดที่อยู่ในอินพุตจะอยู่ในเอาต์พุตเฉพาะสระเท่านั้นที่จะต้องล้อมรอบและไม่มีอะไรอื่น

  • อินพุตสามารถว่างได้ ไม่มีการรับประกันว่าข้อมูลจะมีอย่างน้อยหนึ่งเสียงสระหรืออย่างน้อยหนึ่งเสียงสระ

  • คุณสามารถรับอินพุตจากSTDINเป็นพารามิเตอร์ฟังก์ชันหรือสิ่งอื่นที่คล้ายคลึงกัน

  • คุณสามารถพิมพ์เอาต์พุตไปที่STDOUTส่งคืนจากฟังก์ชันหรือสิ่งอื่นที่คล้ายคลึงกัน

กรณีทดสอบ

บรรทัดแรกคืออินพุตที่กำหนด บรรทัดที่สองเป็นหนึ่งในผลลัพธ์ที่เป็นไปได้

<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

เกณฑ์การให้คะแนน

นี่คือ , SA สรรพสินค้าใหญ่ shirtist enswer en ไบต์ wons


17
คุณคนอังกฤษ / อเมริกันและคุณขาดyสระเสียง .. ;)
Kevin Cruijssen

6
@KevinCruijssen ฉันไม่ใช่เจ้าของภาษาและฉันก็คิดว่าyจะเป็นเสียงสระด้วย แต่ความท้าทายครั้งสุดท้ายที่ฉันพูดyคือเสียงสระฉันถามว่าทำไมฉันถึงเลือก!
ทำให้เสียชีวิต

7
@KevinCruijssen ตัวอักษรไม่ใช่เสียงสระ: เสียง
Peter Taylor

6
+1 สำหรับ cwm การปีนเขาและ / หรือชาวเวลส์ยังมีชีวิตอยู่;)
สลายตัวของเบต้า

2
@KevinCruijssen ไม่มี co wเกี่ยวกับ vo w อื่น ๆที่ไม่ได้รับการพิจารณาโดยทั่วไป
corsiKa

คำตอบ:


13

เยลลี่ 15 ไบต์

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

ลองออนไลน์!

มันทำงานอย่างไร

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.

ทำไมสิ่งนี้จึงดูค่อนข้างช้าเมื่อเทียบกับคำตอบอื่น ๆ
ลดขนาด

เยลลี่นำเข้า SymPy และ NumPy ก่อนสิ่งอื่นใด โปรแกรมนี้และโปรแกรมเปล่ามีเวลาดำเนินการประมาณเดียวกัน
เดนนิส

15
ก่อนที่ทุกคนถามeuoiเป็นหนทางของความปลาบปลื้มใจเร่าร้อนในเที่ยวสำมะเลเทเมา Bacchic โบราณ
เดนนิส

5
@Dennis จากความอยากรู้ แต่ทำไม Jelly ถึงสร้างด้วยคำในพจนานุกรม? คำศัพท์ในพจนานุกรมเหล่านี้มาจากไหน
Kevin Cruijssen

1
@KevinCruijssen เมื่อฉันออกแบบ Jelly มีภาษากอล์ฟสองสามภาษาที่ใช้shoco อยู่แล้วและการใช้พจนานุกรมภาษาอังกฤษก็ดูเหมือนจะเป็นวิธีที่ดีในการปรับปรุงแนวคิดนี้ ฉันใช้ไฟล์/usr/share/dict/wordsจากคอมพิวเตอร์ของฉันและรวมไว้ในล่ามเยลลี่
เดนนิส

17

R, 92 91

ยังไม่สามารถแสดงความคิดเห็นได้ดังนั้นฉันจึงเพิ่มคำตอบของตัวเองแม้ว่าจะคล้ายกับ @ Andreï Kostyrka คำตอบ (เชื่อหรือไม่ก็ได้ แต่คิดด้วยตนเอง)

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

บันทึกหนึ่งไบต์ต้องขอบคุณ @Vlo

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

5
สุจริตฉันไม่อยากเชื่อเลย แค่ล้อเล่น. เคล็ดลับที่ดีในการบันทึกไบต์!
Andreï Kostyrka

เพียงเพื่อความซื่อสัตย์ฉันไม่ได้ขโมยความคิดของคุณเพื่อตีกอล์ฟคำตอบของฉันต่อไป
Andreï Kostyrka

3
ฮิฮิ, จำต้องได้รับพวกเขา upvotes หวานดังนั้นฉันสามารถแสดงความคิดเห็น;)
Billywob

บันทึกไบต์ด้วยการกำหนดแบบอินไลน์ 91 ไบต์s=strsplit(readline(),"")[[1]];s[v]=sample(s[v<-s%in%c("a","e","i","o","u")]);cat(s,sep="")
Vlo

บันทึกไบต์อื่นโดยใช้แทนel() [[1]]
Andreï Kostyrka

11

R, 99 98 89 ไบต์

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

ดูเหมือนจะเป็นทางออกแรกที่มนุษย์อ่านได้! ขอบคุณGiuseppeสำหรับการบันทึก 9 ไบต์!

กรณีทดสอบ:

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

ดูเหมือนว่าไม่มีทางที่จะทำการมอบหมายตัวแปรภายใน (ภายใน, เช่น, cat), และอีกครั้งที่บางคนกำลังจะพิสูจน์ว่าฉันผิด ...


2
letters[c(1,5,9,15,21)]มีความยาว 1 ไบต์และ OEIS A161536 และ A215721 ดูเหมือนจะไม่มีความช่วยเหลือเล็กน้อย
Andreï Kostyrka

จะไม่z=grepl("[aeiou]",x)สั้นลงหรือ
Giuseppe

@Giuseppe คุณทำอีกครั้ง! ขอบคุณ
Andreï Kostyrka

10

CJam, 23 ไบต์

lee_{"aeiou"&},_mrerWf=

ลองออนไลน์!

คำอธิบาย

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


5

Python 3, 109 ไบต์

รองรับเสียงสระตัวเล็กเท่านั้น

ขอบคุณ @Alissa สำหรับการบันทึกไบต์พิเศษ

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)

ไอเดียมัน!


มันจะไม่สั้นลงไหมถ้ามันเป็นฟังก์ชั่นรับสายและส่งคืนสตริงนั้นด้วยสระแบบสับ
Alissa

@Alissa ขอบคุณมันบันทึกหนึ่งไบต์! : D
Beta Decay

ไม่แน่ใจว่ามันจะสั้นกว่านี้หรือไม่ แต่คุณสามารถa.pop(random.randrange(0,len(a)))สับก.
Alissa

4

TSQL, 275 ไบต์

แข็งแรงเล่นกอล์ฟ:

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 @

ซอ



3

Java 7, 243 241 ไบต์

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

ใช่นี่อาจเป็นเรื่องที่เล่นกอล์ฟได้บ้าง แต่ Java ไม่ได้มี built-in ที่มีประโยชน์สำหรับ afaik นี้ .. นอกจากนี้ฉันยังลืม codegolfed array-variant สำหรับCollections.shuffle..

กรณีที่ไม่ได้รับการทดสอบ &:

ลองที่นี่

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

เอาต์พุตที่เป็นไปได้:

a
cwm
tha queck brown fox jumps evor tho lezy dig.
ebcdifghujklmnopqrstavwxyz
prigrommeng puzzlos & cade golf
fatelazi
mertan inder

1
วิธีการนำกลับมาใช้iในการวนซ้ำครั้งที่สอง?
Frozn

ฉันคิดว่า "ทำไมเขาไม่ไปกับ char [] แทนที่จะเป็น list" ดังนั้นฉันจึงเริ่ม แต่ไม่มีการArrays.shuffleหยุดฉันที่นั่น ...
Olivier Grégoire

โกน 6 ตัวละครพร้อมปรับแต่งเล็กน้อย: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

Brachylogขนาด 39 ไบต์

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

ลองออนไลน์!

คำอธิบาย

  • ภาคแสดงหลัก:

    @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.
    
  • คำกริยาที่ 1:

    .          Input = Output…
    '~e@V      …provided that it is not a vowel.
    ;          Otherwise Output is a free variable.
    
  • คำกริยาที่ 2:

    e.         Output is an element of the input…
    ~e@V,      … and it is a vowel.
    

3

Javascript (ES6), 78 76 ไบต์

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

บันทึก 2 ไบต์ขอบคุณ apsillers

รุ่นสำรองที่เสนอโดย apsillers (76 ไบต์เช่นกัน)

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

ทดสอบ

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


1
ไม่ใช่การปรับปรุง (คะแนนเท่ากันที่แน่นอน) แต่ความสนุกที่ฉันพบ: วางl=...ทั้งหมดและใช้ฟังก์ชั่นที่ถูกผูกไว้[].pop.bind(s.match(r).sort(_=>Math.random()-.5)))เป็นอาร์กิวเมนต์ที่สองเพื่อreplace(แทนฟังก์ชั่นลูกศร) อาจมีการปรับปรุงให้ดีขึ้นตามถนนสายนั้น แต่ฉันยังไม่พบ หากคุณใช้ภาษา JS-เซ็ตที่มีผู้ประกอบการผูกผมคิดว่าคุณสามารถทำอะไรได้:: (s.match(r).sort(_=>Math.random()-.5)))::pop
apsillers

3

MATL , 15 ไบต์

tt11Y2m)tnZr7M(

ลองออนไลน์!

คำอธิบาย

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

3

Japt v2.0a0, 14 13 ไบต์

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

ลองมัน


คำอธิบาย

           :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.

2

Pyth, 26 ไบต์

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

โปรแกรมที่รับอินพุตของสตริงที่ยกมาและพิมพ์สตริงแบบสับ

ลองออนไลน์

มันทำงานอย่างไร

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

2

PHP, 144 129 ไบต์

การใช้อินพุตตัวพิมพ์เล็ก

$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];

คำอธิบาย:

$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

2

ที่จริงแล้ว 24 ไบต์

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

ลองออนไลน์!

คำอธิบาย:

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

2

Bash, 75 ไบต์

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

รับค่าสตริงเป็นอาร์กิวเมนต์และพิมพ์ผลลัพธ์เป็น stdout

เช่น

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

พิมพ์

<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

2

Bash, 89

ถือว่าอินพุตทั้งหมดเป็นตัวพิมพ์เล็ก

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

2

PowerShell v3 +, 155 99 ไบต์

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

อุปกรณ์ขนาดใหญ่สำหรับ @ Ben Owenสำหรับการเล่นกอล์ฟขนาด 56 ไบต์

รับข้อมูล$nโดยคาดว่าตัวพิมพ์เล็กทั้งหมดจะพิมพ์ทันทีเป็นchar-array

เราท่อที่เป็นWhere-Objectข้อที่จะดึงออกองค์ประกอบเหล่านั้นว่า-matchเป็นสระเสียงท่อให้พวกเขาSort-Objectด้วยการ{Get-Random}เป็นกลไกการเรียงลำดับ การโทรGet-Randomโดยไม่มีตัวระบุจะส่งคืนจำนวนเต็มระหว่าง0และ[int32]::MaxValue- เช่นการกำหนดน้ำหนักแบบสุ่มให้กับแต่ละองค์ประกอบได้ทันที $aเราเก็บสระสุ่มลง

$nสุดท้ายเราผ่านห่วง สำหรับแต่ละองค์ประกอบ|%{...}หากตัวละครปัจจุบันอยู่ที่ใดที่หนึ่ง-in $aเราจะแสดงองค์ประกอบต่อไปในการ$aโพสต์เพิ่มขึ้น$iในครั้งต่อไป มิฉะนั้นเราจะส่งออกตัวละครปัจจุบัน นั่นคือทั้งหมดที่ห่อหุ้มใน parens และ-joined เข้าด้วยกันเป็นสตริง สตริงนั้นจะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทจะเป็นนัยเมื่อข้อสรุปของโปรแกรม

กรณีทดสอบ

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

คุณสามารถบันทึกจำนวนมากได้ที่นี่โดยวนซ้ำ$nอักขระและการจับคู่ในแต่ละสระเพื่อส่งออก - charแทนสระ สิ่งที่ชอบ:$a=[char[]]$n|?{$_-match'[aeiou]'}|sort{random}
เบ็นโอเว่น

@ BenOwen Holy dang ใช่ ขอบคุณสำหรับการเล่นกอล์ฟขนาด 56 ไบต์ $aสำหรับชีวิตของฉันฉันจะไม่คิดออกเป็นวิธีที่ดีกว่าที่จะสร้าง
AdmBorkBork

2

Python 3, 106 ไบต์

ตัวพิมพ์เล็กเท่านั้น

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)

1

PHP> = 5.3 , 139 136 ไบต์ (และไม่มีข้อผิดพลาดเกิดขึ้น)

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

1

K (oK) , 29 ไบต์

วิธีการแก้:

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

ลองออนไลน์!

ตัวอย่าง:

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

คำอธิบาย:

ค้นหาตำแหน่งของสระและแทนที่ด้วยสระที่วาดในลำดับแบบสุ่ม

{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

0

APL (Dyalog Unicode) ขนาด 21 ไบต์

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

ลองออนไลน์!

ถือว่าเป็นตัวพิมพ์ใหญ่


{⍵∊'AEIOU'}→ จะ∊∘'AEIOU'ทำงานอย่างไร
Kritixi Lithos

@Cowsquack ({⍵[?⍨≢⍵]}@∊)∘'AEIOU'ผมไม่คิดอย่างนั้นตั้งแต่นั้นมาก็จะได้รับการแยกวิเคราะห์เป็น
Erik the Outgolfer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.