La La Land… beklemeyin, Moo Moo Mehtap


122

Bu meydan okuma, Oscar 2017'deki En İyi Resim kazanan La La Land Moonlight'a bir hediyedir !


Sadece harf içeren bir dize alan [A-Za-z], her gün cümleleri .,'?ve boşluklarda ortak olan dört sembol olan ve dizeyi La La Land tarzında çıkaran bir fonksiyon / program yazın .

Daha açık olmak için, harfleri ilk sesli gruba ekleyin ve dahil edin ve her seferinde bir boşluk ekleyerek iki kez yazdırın / çıktın, ardından dizgenin tamamını yazdırın / çıkarın. y bu mücadelede ünlüdür . Noktalama işaretleri ve büyük harfler kullanılmalıdır.

Tüm dizelerin en az bir ünlü harf içerdiğini ve tüm dizelerin bir harfle başladığını varsayabilirsiniz.

Test durumları:

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?

Bu olduğundan her dilde en kısa kod kazanır. Açıklamalar, anadillerde de teşvik edilmektedir .


1
Vaka duyarsızlığı için test vaka: MOONLIGHT. Ve sadece eğlence için:Why did the chicken cross the road?
Titus

35
Sponsorluk yarışması: National Stuttering Association
sergiol

6
Veya Prof. Quirrell
Brian J

1
6. deneme sınavı Louis Prima ve Jungle Book tarafından satın alındı. Sadece bu (kötü) kelimeyi eklemek için katıldı.
Toby

Yanıtlar:



30

05AB1E , 23 19 18 bayt

Okx sayesinde 1 byte kurtarıldı .

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

Çevrimiçi deneyin! veya Test paketi olarak

açıklama

 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

Jöle , 24 22 20 19 14 bayt

-5 bayt, Emigna'nın mükemmel cevabından bir numara kullanarak (isVowel listesinde 10'a bak)

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

Çevrimiçi deneyin! (bu tam program için nasıl bir test paketi hazırlayacağınızdan emin değilsiniz)


15 bayt alternatif:

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

İşte tam bir test paketi.

Nasıl?

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

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

İşte regex olmayan ilk dil (regex kullanarak) geliyor.

Neil sayesinde 1 byte kurtarıldı .


18

JavaScript (ES6), 40 46

Düzenle 5 + 1 bayt thx @Arnauld kaydetti

Aynı hile kullanan diğerlerine kıyasla aşırı uzun (her zamanki gibi)

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


@Hayır, hayır kullanabilirim '$& $& $&'- her zaman özel dolar karakterlerini unutacağım. Teşekkür ederim. Maalesef şu an gerçekten Martin Martin'in retina cevabının limanı.
edc65

^Bence - - varsayılan olarak tüm maçları arar hangi Retina gereklidir. Fakat burada gerçekten ihtiyacımız var mı?
Arnauld,

@Arnauld tekrar haklısın
edc65

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

@ETHproductions aslında. Fark ettiğin için teşekkürler.
edc65


12

Toplu iş, 180 bayt

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

Bir durum makinesi uygular. gBir sesli harf görüp görmediğimizi izler, bu nedenle mevcut harf bir sesli harf değilse, bir sonraki harfin çıktısını almayı veya devam etmeyi biliyoruz.



8

Yakut, 31 32 30 Bayt

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

GB ve Cyoce sayesinde iki bayt kurtarıldı.


6

PHP, 55 54 bayt

Not: kodlanmış sürüm IBM-850 kodlamasını kullanır.

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

Bu şekilde koş:

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

açıklama

Sadece bir regex dizenin başlangıcındaki herhangi bir karaktere hevesli olmayan, ardından herhangi bir miktarda sesli harf (büyük / küçük harf duyarlılığı için iseçenek kullanın ) ile istekli olan yerine geçer . Bu yakalama grubu daha sonra iki kez yazdırılır, ardından dizenin tamamı gösterilir.

Düzenlemeler

  • -RYapmak için kullanarak bir bayt kaydedildi$argnKullanılabilir (Thx Titus)

6

Javascript (ES6), 38 bayt

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

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

Çevrimiçi deneyin!


Golfe kalan şey:

• İki printf'i bir taneye daraltın.

• Alanımın basımı char olarak değiştirilebilir %*c mantığa eminim.

• Bir şekilde kaldırılabilen şartlandırma kullanıyorum

j=(i-13)/12 muhtemelen kısaltılabilir.

• [AY] koşullu olup olmadığına bakarsa ==0, genellikle gerekli değildir, ancak şu anda bunun üzerinde sıkıştım (başka bir deyişle anahtarını değiştirmeyi ve ==0tamamen kesmeyi denedim, ancak bu daha fazla {parantez} ekleme ve bayt boyutunu büyütmeyi gerektiriyor)


Bu golf oynamak için kullandığım püf noktaları:

• x ekseni için modulo ve y ekseni için tamsayı bölümü kullanarak döngü dizgisi araması için bir çift (giriş dizgisi - sesli dizge). (X ekseni bir kez y ekseni üzerinde yinelemeden önce iki kez ilmeklenir; ilk kez [AZ] ile ve ikinci kez [az] ile 32 diferansiyel karakter değerini kullanarak.

• Sadece karakter kümeleri ve modulo 32 arasındaki mesafeyi alarak "[AY] ve [ay]" kullanmak zorunda bırakıldı. Bu şekilde mesafe 0 (AA) ise veya mesafe 32 (aA) ise

• Artık boolean değişkenler olarak kullanılmayan tamsayı değişkenlerini tekrar kullanmak.

• Tekrarlamak için aynı dizeyle bir işlevi tekrar çağırma ve üzerinden işlem yapmak için ikinci bir döngüden kaçınmak.

• BOOL değerlerini başka bir değişken ayarlama mantığına ayarlayın. (örneğin bool = i = 5;) ikisini de bir taşla sökmek için.

• Üçlü boş-gerçek istismar istismarı. (GCC)


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

Keyu Gan sayesinde 10 bayt çaldı (yorumlarda)


Kendime not: j=(i-13)/12muhtemelen kısaltılabilir.
Albert Renshaw

Bir şey mi kaçırıyorum yoksa başlayabilir i=j=k=m=n=0;misin?
Richard,

@RichardIrons değişkenlerin önce bildirilmesi gerekir.
Albert Renshaw

i,j,k,m,n;Başlatma için kullanabilirsiniz .
Keyu Gan

@KeyuGan tanımsız davranış, her zaman 0 olacağı garanti edilmez (bildiğim kadarıyla?)
Albert Renshaw

4

MATL, 33 bayt

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

MATL Online'da deneyin

açıklama

                % 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:)YX2 bayt kaydeder
Luis Mendo

'(^.*?[%s]+)'19Y2YD'$1 '8:)YXbaşka bir 2 kaydetti
B. Mehta

@ B.Mehta 19Y2bu cevap ne yazık ki gönderildiğinde mevcut değildi
Suever

Evet, bu cevabı biraz umduğum gibi ... Benim yorumuma devam edeceğim, böylece diğerleri de yerleşik 'aeiouy' hakkında bilgi sahibi olabilirler.
B. Mehta

@ B.Mehta Endişelenmeyin. MATL Online (matl.suever.net) ile sağ üst köşedeki açılır
listeyi

4

V , 21 , 20 bayt

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

Çevrimiçi deneyin!

Açıklama:

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

Alternatif sürüm (21 bayt):

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

Çevrimiçi deneyin!

Bu gülünç regex sıkıştırma kullanır ve hala diğer golf dilleri tarafından tekme popo almak için yönetir. Başvuru için, bu normal "sıkıştırılmamış" versiyonun uzunluğunun üçte ikisi kadardır, yani:

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

Açıklama:

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

İşte bir hexdump:

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

2
+1 Bu, şimdiye kadar gördüğüm en etkileyici V regex gönderimi olmalı
İnekler,


4

Python 3 , 75 68 bayt

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

Çevrimiçi deneyin!

Açıklama:

Giriş dizesindeki her karakter için bir ünlü olup olmadığına bağlı olarak bir boolean değer üreterek 0ve ilk ünlü olmayan (ilk karakter hariç) en düşük dizinini bularak çalışır . Alt dizgiyi bu dizine iki kez, boşluklarla ve orijinal dizgiyle ayırarak döndürür.


4

Clojure, 192 188 181 bayt

(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 bayt satır içi first-sp-pred(boğmaca).

-7 bayt bazı cevapsız alanları kaldırarak

Bu, olacağını düşündüğümden çok daha zordu! İpi elle ayrıştırıyorum ... çünkü hala regex öğrenmek için uğraşmadım: /

Arıza için ön golf koduna bakınız:

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

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)

Çevrimiçi deneyin!

regex olmayan bir çözüm


Yorumlananlar:

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)

Neden bir ihtiyacın var Değiştir w=c in ailew=c in'aAeEiIoOuUyY'
sagiksp

4

Ohm , 19 bayt (CP437), rakipsiz

Yeni dil ve bunun gibi, bu işi yapmak için bazı yeni özellikler eklemek zorunda kaldım, bu ne yazık ki bunu rekabetsiz kılıyor (boşluklardan dolayı).

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

Açıklama:

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

Hangi özellikleri uyguladığınızı bilmek isterim ...?
Stewie Griffin,

@StewieGriffin Yığın tersine çevirme ( Q), alt dizi aranması ( u), dize / dizi dilimleme ( ) ve sesli harf sabitleri ( αvve αy).
Nick Clifford,

4

PHP, 69 65 53 bayt

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

PHP 5.3 veya üstü gerektirir. -FVeya ile boru olarak çalıştır çevrimiçi bazı versiyonları deneyin .

@Aross çalınan regex ile 4 bayt kurtarıldı (ve kodu düzeltildi);
10 daha preg_filteryerine preg_matchve-F
ve daha iyi bir düzenli ifade ile bir iki.

Regex olmayan bir sürüm için 75 81 bayt :

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

PHP 5 veya üstü gerektirir; yerine ?:sahip?1:eski PHP için . İle koş-nR

Yıkmak

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

İşe görünmüyor. Çıkış Tarihi This isn't a single word:T T This isn't a single word.
17:17

@ aross sadece küçük harfleri kontrol ediyor gibi görünüyor? Yanılıyor olabilirim PHP'yi o kadar iyi tanımıyorum
Albert Renshaw

1
@AlbertRenshaw Regex sürümü i, regex durumunu duyarsız kılan değiştiriciyi kullanır . Diğer versiyon sadece küçük harfleri kontrol etti. Sabit.
Titus

4

R, 49 bayt

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

Regex tabanlı değiştirme, sesli olmayana kadar her şeyi eşleştirin, yakalayın ve 3 kez kendi başına değiştirin.

scanbir doubleyazının girişini bekleyin , onu kullanıp kullanmayacağımızı söylemek için characteriki argüman vermeliyiz, ilk önce stdin için varsayılan, emtpy string ve ikincisi için R değerlendirmesi sadece bu bağlamda cbelirsiz olmadığı için kullanılmasına izin verir character.

T kısaltması TRUEduruma göre görmezden ve bazı karakterleri görmezden gelmesini ve PCRE kullanmasını söylemek için altına 4. ve 5. parametre olarak kaydeder (açgözlülük R regex sözdizimi ile aynı değildir)

4 byte, Sumner18'in nezaketini çalıştıran Tio bağlantısıyla birlikte kaydetti


3

Java 8, 147 140 bayt

golfed:

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

Not: Koddaki değişmezin 2değeri java.util.regex.Pattern.CASE_INSENSITIVE.


2
import java.util.regex.*;Bazı baytları kurtarmak için kullanabileceğini düşünüyorum .
Roman Gräf,

@ RomanGräf haklısın. Paketleri açıkladım, çünkü kodun daha eski bir sürümünde (işe yaramadı) ithalat kullanmamak daha kısadı. Kodu düzelttikten sonra yeniden değerlendirmedim.

3

C, 123 bayt

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

Çağrı yap:

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

1
Bu güzel! C çözümümü park yerinden çıkardın.
Albert Renshaw


2

Retina, 24 bayt

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

Çevrimiçi deneyin


Oldukça benzer bu
Emigna

Evet biliyorum. Ama cevabı bağımsız olarak yaptım. Buna rağmen, çalışma intihal edilmemişse, tekrarlanan cevaplara izin verildiğine karar verilmiştir.
mbomb007

2

Python 3 , 130 102 bayt

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)

Çevrimiçi deneyin!

Hiçbir çeşit fonksiyon ve harici kütüphaneler kullanmaz! (Yazdırma ve giriş yaptıkları işlevler olarak sayılmazsa).

Başlığın başlangıcında ünsüzlerden çıkıp çıkmadığını 'ünlü bölgeye' alıp görmediğini görür. 'Ünlü bölge' ise ve bir ünsüz algılarsa, adı yazdırır.

@LliwTelracs sayesinde 28 bayt kaydedildi


2

MATLAB / Octave, 58 51 bayt

@HughNolan sayesinde 7 bayt kurtarıldı

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

ansDize iletilerek adlandırılabilecek adsız bir işlev oluşturur :ans('Land')

Çevrimiçi Demo

MATLAB uyumluluk için, $0yerine kullanılması gereken $1yukarıdaki işlevinde.


Bunu düşünüyordum ve sonra zaten yaptığını gördüm. Birkaç bayttan tasarruf edin: @(x)regexprep(x,'^.*?[aeiouyAEIOUY]+','$0 $0 $0 ');- Ayrıca Matlab, 1 $ tuhaf değil, 0 $ kullanıyor gibi görünüyor
Hugh Nolan

@HughNolan Harika nokta, teşekkürler!
Suever

2

C (gcc) , 111 110 bayt

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

Çevrimiçi deneyin!

Bu sadece kütüphane fonksiyonları kullanır strspn()ve strcspn()ve gcc işlev parametreleri değerlendirir sırayı patlatır. Biraz daha az golf oynadı

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

-1 için @gastropner'a teşekkürler.


Vay!! İyi iş!
Albert Renshaw


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.