var QUESTION_ID=69385,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/69385/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=83c949450c8b"> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr></thead> <tbody id="answers"> </tbody> </table> </div><div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody> </table>
**Leaderboard:**
"oozing snotter"
imo ~Odpowiedzi:
Vim, 18 klawiszy
Kluczową sztuczką jest to, że wklejenie czegoś w trybie wizualnym faktycznie powoduje umieszczenie starej zawartości zaznaczenia wizualnego w buforze wklejania.
źródło
v
bycia wyrzuconym przez bycie włączającym i próbowanie wybrania z powrotem samogłoski.pieprzenie mózgu,
238207 bajtówWymaga
,
zwrócenia 0 na EOF, 8-bitowym zawijaniu komórek i możliwości przejścia w lewo z komórki 0. Z mojego doświadczenia są to najczęściej używane ustawienia domyślne.Jestem z tego całkiem zadowolony. Moja pierwsza próba miała 314 bajtów i jest to z pewnością poprawa. :)
Działa poprzez przechowywanie każdego bajtu z danych wejściowych w dwóch komórkach; jeden z rzeczywistą wartością bajtu, a drugi z wyjściem następującego kodu, gdy podano (wartość bajtu - 97):
Jeśli znak jest spółgłoską, wychodzi z tego z niezerową wartością. Jeśli jest to samogłoska, to staje się 0. Stamtąd wystarczy po prostu ustalić, gdzie zaczyna się drugie słowo i wydrukować wszystko w kolejności.
238 bajtowa wersja tego programu znalazła znak spacji po zebraniu wszystkich danych wejściowych. To był ból głowy, ponieważ wiązało się to z utworzeniem komórki, która zawierała 0 dokładnie tam, gdzie próbowałem na nią zapętlić. Sposób, w jaki rozwiązałem, spowodował odjęcie 30 od każdego znaku w pierwszym słowie i 32 od każdego znaku po nim. Dość duża część kodu została poświęcona obsłudze tych bzdur.
Teraz 32 odejmuje się od każdego znaku w pętli wejściowej, który jest krótszy i ma podobny efekt uboczny, z którym łatwiej sobie poradzić. Jako bonus, zrobienie tego w ten sposób pozwoliło mi stworzyć moją własną postać spacji w krótszy sposób: Zamiast odejmować 139 od 171 (171 dostajesz, gdy biegniesz spacją przez detektor samogłoski powyżej), pętla, która dodaje 32 do każdej postaci dokłada wszelkich starań, aby dodać 32 do komórki 171. To kosztuje cztery bajty, ale oznacza to, że mogę odjąć 171 później (zamiast odjąć 139), aby zaoszczędzić 3 bajty netto.
Z komentarzami:
źródło
y
jako samogłoska, ale pytanie mówi, że tak nie jest. (nye cat
->ce nyat
)y
jak spółgłoskę ... Zbadam, dlaczego to robi.vim, 23
Zastanawiam się, czy vim rzeczywiście jest konkurencyjny w tym wyzwaniu. Prawdopodobnie nie z językami golfowymi, ale być może z Ruby / Python / Perl / etc.
źródło
Python,
686360 bajtówWypróbuj online na Ideone .
Jak to działa
Ciąg wzorca jest powtarzany trzy razy (
*3
), co powoduje powstanie wzorcaWszystkie instancje będą pasować do niepustego ciągu nieposiadającego samogłosek lub niepustego ciągu, po którym następuje pojedynczy znak spacji.
Pierwsze wystąpienie będzie pasować do spółgłosek na początku pierwszego słowa. Ponieważ
+
jest chciwy, będzie próbował dopasować jak najwięcej, tj. Wszystkie do pierwszej samogłoski.Z tego powodu druga instancja rozpocznie się od samogłoski, więc będzie pasować do reszty pierwszego słowa, aż do spacji oddzielającej słowa.
Podobnie jak w pierwszym przypadku, trzeci dopasuje wszystkie spółgłoski na początku drugiego słowa, co spowoduje pomyślne dopasowanie dla całego wzorca.
Nieprzetworzony ciąg znaków
\3\2\1
(r
uniemożliwia Pythonowi zamianę\3
itp. Na znaki kontrolne) odwraca kolejność dopasowywania nawiasowych wzorców, tzn. Zastępuje je spółgłosek na początku drugiego słowa, a następnie wszystkich znaków z pierwszej samogłoski pierwsze słowo do spacji, a na końcu spółgłosek na początku pierwszego słowa.Ostatni argument argumentu
sub
(1
) powoduje, że zwraca on natychmiast po pierwszym udanym zastąpieniu, aby uniknąć bezsensownych zamian w pozostałej części drugiego słowa. Jest to wymagane, ponieważ wzór może pasować do dowolnego ciągu trzech lub więcej kolejnych spółgłosek.źródło
JavaScript (ES6), 54 bajty
Wyjaśnienie
Test
źródło
match
kiedy wrócę do domu+!i
Sztuką jest miłym rozwiązaniem. +1Python 3,
10810199 bajtów(Bez użycia wyrażenia regularnego)
Ta funkcja oczekuje danych wejściowych za pomocą 2 argumentów, np
f('blushing','crow')
. Zwraca nowe słowa w krotce.Istnieje wiele rozwiązań wyrażeń regularnych, więc chciałem napisać coś, co nie korzystało z biblioteki re Pythona.
Jak to działa
Jedyną skomplikowaną częścią jest wyrażenie lambda
S
(skrót oznacza „ S plit przed pierwszą samogłoską”). Rekurencyjnie „iteruje” po danym słowie, przenosząc po jednym znaku od początkus
(który zaczyna się od całego słowa) do końcap
(który zaczyna się pusty). Przy pierwszej napotkanej samogłosce zwraca(p,s)
, tj. (Przedrostek, przyrostek). Zauważ, że jest to niewłaściwa kolejność w porównaniu do parametrów!Pomyślałem, że bardziej sensowne jest, aby zwrócone zamówienie było prefiksem, a następnie sufiksem (ponieważ generalnie prefiks występuje przed sufiksem). Ta kolejność może
a,b=S(x)
nieco ułatwić odczytanie kodu.Ale nie miałem wyboru kolejności parametrów lambda, więc nie mogłem
p
wcześniej zdefiniowaćs
. Pierwszy parametrs
, miał wziąć całe słowo, bop
miał wartość domyślną, a domyślne parametry przejść ostatni. Dzięki temu nie musiałem wywoływać funkcjiS
dwa razy z pustym łańcuchem i można było zapisać kilka bajtów. Być może jednak była to po prostu zła decyzja o zwróceniu prefiksu / sufiksu w odwrotnej kolejności, ponieważ zastosowano go w wyrażeniu lambda.Jeśli chodzi o wybór wyrażenia lambda
def S(s,p=""):return
zamiast funkcji, potrzeba więcej bajtów niż powiedziećS=lambda s,p="":
. Mogę dokonać tego wyboru, ponieważ Python ma ocenę zwarć i operator trójskładnikowy. Nie potrafię jednak odpowiednio wyjaśnić, w jaki sposób zastosowałem zwarcia; trudno jest o tym myśleć.To moja pierwsza odpowiedź. Mam nadzieję, że zrobiłem to poprawnie i że warto opublikować rozwiązanie, które nie może wygrać.
Edycja: Komentatorzy z podziękowaniami: nieco, dwukrotnie zmniejszono liczbę bajtów i usunięto niepotrzebne informacje. Próbowano poprawić pisanie. Mam nadzieję, że nie popełniłem błędów.
źródło
C # 6, 115 bajtów
To tylko ból, że przestrzeń nazw dla wyrażenia regularnego jest tak długa.
źródło
System.Text.RegularExpressions.Regex.Replace
44 znaki! +1, ponieważ to musi być jakiś rekord.CJam,
272422 bajtówI / O to jedno słowo w wierszu. Wypróbuj online!
Jak to działa
źródło
Perl, 33 bajty
Powyższy kod ma długość 32 bajtów i wymaga
-p
przełącznika ( +1 bajt ).Podstawienie jest bardzo podobne do odpowiedzi Retina @ DigitalTrauma , ale ta odpowiedź korzysta z rekurencyjnych subpatentów PCRE .
Wypróbuj online na Ideone .
źródło
Retina , 34
Wypróbuj online.
źródło
JavaScript ES6,
935852 bajtówZaoszczędź 6 bajtów dzięki ETHProductions!
Sprawdź to! (Tylko ES6)
Pokaż fragment kodu
źródło
$4
wcale;)C,
255201199 bajtówNie widzę tu wielu odpowiedzi w języku C, więc ciesz się; Również mile widziane granie w golfa, sugestie i krytyka.
Jeśli main () nie jest wymagany, możemy zapisać 24 bajty, dochodząc do 179 bajtów
Nie golfowany:
EDYCJA: Dzięki sugestii feersum zaoszczędziłem 54 bajty. = D.
źródło
strpbrk
.Python 2,
364352269251 bajtówEDYCJA: Dziękuję bardzo @Cyoce za pomoc w golfa 83 bajtów!
Proszę, pomóż mi w golfa! W każdym razie przynajmniej jestem pierwszym odpowiadającym na Pythona. Mam nadzieję, że uda mi się pokonać Javę, jeśli kiedykolwiek pojawi się odpowiedź w języku Java!
Wypróbuj tutaj
źródło
Japt,
2625 bajtówNa szczęście dodałem klasę samogłoski do wyrażeń regularnych Japt kilka dni temu. Niestety nie dodałem klasy nie-samogłoskowej ani nie omijałem podwójnych ukośników odwrotnych w ciągach wyrażeń regularnych.
¿
Powinna być surowa char U + 0093. Dane wejściowe są łańcuchem wieloliniowym, jednym słowem / linią. Wypróbuj online!EDYCJA: Dodałem teraz klasę
\V
inną niż samogłoska i obejście\\
(z%
), więc ten kod działa teraz dla 21 bajtów : ( Wypróbuj online )Jak to działa
Stara wersja (26 bajtów):
Wypróbuj online!
Jak to działa
źródło
Python 3, 100 (lub 99) bajtów
Grałem z kilkoma wersjami, ale wydaje się, że nie można go znaleźć poniżej. Można go zmniejszyć o 99 bajtów, używając
def f(g)
zamiast tego, więc zajmuje listę ciągów zamiast dwóch oddzielnych ciągów, ale wolę dwa argumenty.Alternatywą jest równa długość:
Próbowałem zastąpić, jak używa @TanMath, ale nie mogłem go skrócić. Ponadto TanMath może skrócić swoją odpowiedź o bajt, używając również
"[aeiou]"
zamiast,"[aeiou]+"
ponieważ musimy dopasować tylko pojedyncze wystąpienia. Wreszcie, implementacjainput()
wydaje się zmienić między py2 i py3 - automatycznie ocenia stdin jako ciąg.źródło
s=re.split
alternatywnie?*
in*g
. 2. Druga wersja może być rozgrywana w golfa dolambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
jest domyślnym argumentem, więc nie musisz go określać. Nienazwana lambda jest akceptowalnym poddaniem;f=
nie jest wymagany.sed, 38 znaków
Używanie rozszerzonego wyrażenia regularnego z rozwiązania Retina .
Powyższe ma 37 znaków i wymaga
-r
przełącznika (znak +1).Przykład:
źródło
C # 6, 165 bajtów
Rozszerzony:
źródło
"aeiou".ToCharArray()
może być'a','e','i','o','u'
za -2 bajtyIndexOfAny
nie wymaga parametrów, więc musiałoby byćnew[]{'a','e','i','o','u'}
IndexOfAny
to metoda params. W każdym razie świetna odpowiedź𝔼𝕊𝕄𝕚𝕟, 24 znaki / 42 bajty
Try it here (Firefox only).
Jeśli potrzebujesz pomocy w zrozumieniu tego, przekłada się to na ES6 as
źródło
PowerShell, 52 bajty
Jest to wyrażenie regularne z czterema grupami przechwytywania; z:
('(.*?)([aeiou]\S+) '*2)
do'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
Siły tablica args w ciągu, i dodaje spacją więc przestrzeń spływu w regex nie złamie go.źródło
JavaScript (ES6),
1201071021019992 bajtówUwzględnia to, czy parametry były obiektem takim jak ten i odwrotnie:
var a = {x: "man", y:"plaster"]}
źródło
.match(/[aeiou]/).index
może stać się:.search`[aeiou]`
Python,
129108105109 bajtówTen program pobiera listę takich słów
["master","plan"]
EDYCJA : Dzięki @Volatility
EDYCJA: Teraz używa re.split
Ta odpowiedź używa wyrażenia regularnego, jak większość z nich.
Wypróbuj tutaj
źródło
str.replace
zastępuje wszystkie instancje podłańcucha, więc chcesz ograniczyć go do jednej zamiany przez posiadanie.replace(f,l,1)
. Można jednak zaoszczędzić sporo stosująci,j=input()
oraz ponowne wiązaniere.findall
i'[^aeiou]+'
do pojedynczych zmiennych znakowych.input()
na dwie zmienne. Miałeś na myślii,j=input().split()
(orazraw_input()
w Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 bajtów
Tutaj masz swoją pierwszą odpowiedź Java. Nie tak doświadczony z golfem, więc każda sugestia jest mile widziana!
Nie golfowany:
źródło
java.util.function.Function
? Bardzo wątpię, że musi tam być, chyba że masz na myśliimport
, ale porzuć import, ponieważ odwołujesz się do niego tylko raz. Zmieńpublic class C{public static void Main(String[] a)
nainterface C{void Main(String[]a)
Function<String, Integer>
nie potrzebuje białych znakówfor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
dofor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
to straszna, zdecydowanie za długa nazwa.Function<String, Integer>
sięjava.util.function.Function<String,Integer>
i upuść importOktawa, 96 bajtów
Dzięki wbudowanym funkcjom Octave i funkcji „indeksu w dowolnym miejscu” cała ta definicja jest tylko definicją pojedynczej, anonimowej funkcji. Zasadniczo rekonstruujemy spłaszczony ciąg, przechowując punkty odcięcia w
a
ib
. Szczególnie cieszę się zf
funkcji inline , która znajduje punkt odcięcia i uniemożliwiła mifind(ismember(a,b),1)
dwukrotne użycie całej tej rzeczy. Również brak wyrażenia regularnego :) .źródło
TeaScript , 27 bajtów
\w
jest właściwie[^aeiou]
.źródło
\w
meta wyrażenia regularnego na[^aeiou]
? Dlaczego?\w
był już używany przez JavaScript. Wkrótce zmienię toEliksir ,
143117 bajtówPodziel dwa ciągi (a, b) na pierwszej samogłosce i skonstruuj nowe ciągi, aby powrócić.
EDYCJA: Odciąłem kilka bajtów, używając dopasowania wzorca zamiast nieporęcznych
elem
wywołań, aby uzyskać wartości z krotek.źródło
Java, 147 bajtów
Zakładam, że tylko funkcja jest w porządku.
split(regex)
niestety zużywa ogranicznik, co oznacza, że muszę użyćsubstring
przyrostków.źródło
Pyth,
3028 bajtówPobiera dane wejściowe i podaje dane wyjściowe jako listę dwóch słów.
Wypróbuj online.
źródło
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
przypisuje dwuelementową listę do G i H iC
transponuje. Może być coś jeszcze lepszego.Python (bez wyrażeń regularnych), 85 bajtów
Przykładowy przebieg:
t
jest funkcją rekurencyjną, która oblicza indeks najwcześniejszej samogłoski po pierwszym znaku w argumencies
. Jeśli drugi znaks[1]
jest samogłoską, oceniaTrue
, która maint
wartość1
. W przeciwnym razie wykonuje rekurencyjne wywołanie z usuniętym pierwszym znakiem i dodaje 1 do wynikowego indeksu za pomocą-~
(uzupełnienie dwóch uzupełnień jednego). Wreszcie, wynikit
są używane jako wskaźniki do krojenia łańcuchów w celu obliczenia łyżki.źródło
GNU Awk 4.0, 48 znaków
Przykładowy przebieg:
źródło
PowerShell, 61 bajtów
Używa wyrażenia regularnego do zamiany pierwszych znaków każdego słowa bez samogłoski
źródło