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 ~Jawaban:
Vim, 18 penekanan tombol
Trik penting adalah bahwa menempelkan sesuatu dalam mode Visual benar-benar menempatkan konten lama pilihan visual dalam buffer paste.
sumber
v
menjadi inklusif dan mencoba memilih dari belakang vokal.brainfuck,
238207 byteMembutuhkan
,
mengembalikan 0 pada EOF, sel pembungkus 8-bit dan kemampuan untuk bergerak ke kiri dari sel 0. Dalam pengalaman saya, ini adalah pengaturan default yang paling umum.Saya cukup senang dengan yang ini. Percobaan pertama saya adalah 314 byte dan ini jelas merupakan peningkatan. :)
Ia bekerja dengan menyimpan setiap byte dari input dalam dua sel; satu dengan nilai aktual dari byte dan yang lainnya dengan output dari kode berikut ketika diberikan (nilai byte - 97):
Jika karakter adalah konsonan, itu keluar dari itu dengan nilai yang tidak nol. Jika itu sebuah vokal, itu menjadi 0. Dari sana itu hanya masalah menemukan di mana kata kedua dimulai dan mencetak semuanya secara berurutan.
Versi 238 byte dari program ini menemukan karakter spasi setelah mengumpulkan semua input. Itu sakit kepala karena hal itu melibatkan pembuatan sel yang berisi 0 tepat di mana saya mencoba untuk memutarnya. Cara saya menyelesaikannya memiliki efek mengurangi 30 dari setiap karakter di kata pertama dan 32 dari setiap karakter setelahnya. Sebagian besar kode didedikasikan untuk menangani omong kosong itu.
Sekarang, 32 dikurangkan dari setiap karakter dalam loop input, yang lebih pendek dan memiliki efek samping serupa yang lebih mudah untuk ditangani. Sebagai bonus, melakukannya dengan cara ini memungkinkan saya untuk membuat karakter ruang saya sendiri dengan cara yang lebih singkat: Alih-alih mengurangi 139 dari 171 (171 adalah apa yang Anda dapatkan ketika Anda menjalankan ruang melalui detektor vokal di atas), loop yang menambahkan 32 untuk setiap karakter keluar dari jalannya untuk juga menambahkan 32 ke 171 sel. Ini biaya empat byte di sana, tetapi berarti saya dapat mengurangi 171 dari nanti (bukannya mengurangi 139) untuk total bersih 3 byte yang disimpan.
Dengan komentar:
sumber
y
sebagai vokal, tetapi pertanyaannya mengatakan itu tidak. (nye cat
->ce nyat
)y
sebagai konsonan ... Saya akan melihat mengapa ia melakukan itu.vim, 23
Saya ingin tahu apakah vim sebenarnya kompetitif dalam tantangan ini. Mungkin tidak dengan bahasa golf, tapi mungkin dengan Ruby / Python / Perl / dll.
sumber
Python,
686360 byteCobalah online di Ideone .
Bagaimana itu bekerja
String pola diulang tiga kali (
*3
), menghasilkan polaSemua instance akan cocok dengan string non-kosong non-vokal, atau string non-kosong diikuti oleh karakter spasi tunggal.
Contoh pertama akan cocok dengan konsonan di awal kata pertama. Karena
+
serakah, ia akan berusaha untuk mencocokkan sebanyak mungkin, yaitu, semua hingga vokal pertama.Karena ini, instance kedua akan mulai pada vokal, sehingga akan cocok dengan sisa kata pertama, hingga dan termasuk ruang yang memisahkan kata-kata.
Serupa dengan contoh pertama, yang ketiga akan cocok dengan semua konsonan di awal kata kedua, menghasilkan kecocokan yang berhasil untuk seluruh pola.
String mentah
\3\2\1
(r
mencegah Python dari penggantian\3
dll. Dengan karakter kontrol) membalikkan urutan kecocokan dari pola dipatenkan, yaitu, menggantikannya dengan konsonan di awal kata kedua , lalu semua karakter dari vokal pertama dari kata pertama hingga ke angkasa, dan akhirnya konsonan di awal kata pertama.Argumen terakhir untuk
sub
(1
) membuatnya kembali segera setelah penggantian pertama yang berhasil, untuk menghindari penggantian yang tidak masuk akal di sisa kata kedua. Ini diperlukan karena pola dapat cocok dengan string apa pun dari tiga konsonan berturut-turut atau lebih.sumber
JavaScript (ES6), 54 byte
Penjelasan
Uji
sumber
match
ketika saya tiba di rumah+!i
trick adalah solusi yang bagus. +1Python 3,
10810199 byte(Tidak menggunakan regex)
Fungsi ini mengharapkan input melalui 2 argumen, mis
f('blushing','crow')
. Mengembalikan kata-kata baru dalam sebuah tuple.Ada banyak solusi regex, jadi saya ingin menulis sesuatu yang tidak menggunakan pustaka ulang Python.
Bagaimana itu bekerja
Satu-satunya bagian yang rumit adalah ekspresi lambda
S
(singkatannya berarti " S plit before the vowel pertama"). Secara berulang "iterates" di atas kata yang diberikan, memindahkan satu karakter pada satu waktu dari awals
(yang dimulai dengan seluruh kata) ke akhirp
(yang mulai kosong). Pada vokal pertama yang dijumpainya kembali(p,s)
, yaitu (awalan, akhiran). Perhatikan bahwa itu adalah urutan yang salah dibandingkan dengan parameter!Saya pikir lebih masuk akal untuk urutan yang dikembalikan menjadi awalan, lalu sufiks (karena umumnya awalan berjalan sebelum sufiks). Pesanan ini mungkin membuat
a,b=S(x)
kode sedikit lebih mudah dibaca.Tetapi saya tidak punya pilihan urutan dalam parameter lambda, jadi saya tidak bisa mendefinisikan
p
sebelumnyas
. Parameter pertamas
,, harus mengambil seluruh kata karenap
memiliki nilai default, dan parameter default menjadi yang terakhir. Melakukan itu, saya tidak perlu memanggil fungsiS
dengan string kosong dua kali, dan beberapa byte dapat disimpan. Namun, mungkin itu hanyalah keputusan yang buruk untuk mengembalikan awalan / akhiran dalam urutan yang berlawanan seperti yang digunakan dalam ekspresi lambda.Adapun pilihan ekspresi lambda atas fungsi, dibutuhkan lebih banyak byte untuk mengatakan
def S(s,p=""):return
daripadaS=lambda s,p="":
. Saya dapat membuat pilihan itu karena Python memiliki evaluasi hubung singkat, dan operator ternary. Namun, saya tidak bisa menjelaskan bagaimana saya menggunakan arus pendek; sulit untuk dipikirkan.Ini jawaban pertamaku. Saya harap saya melakukan ini dengan benar, dan ada nilai untuk memposting solusi yang tidak dapat menang.
Suntingan: Komentator terima kasih: Mengurangi jumlah byte sedikit, dua kali, dan menghapus info yang tidak perlu. Berusaha memperbaiki tulisan. Semoga tidak membuat kesalahan.
sumber
C # 6, 115 byte
Hanya saja sakitnya namespace untuk regex begitu lama.
sumber
System.Text.RegularExpressions.Regex.Replace
44 karakter! +1 karena itu harus semacam catatan.CJam,
272422 byteI / O adalah satu kata per baris. Cobalah online!
Bagaimana itu bekerja
sumber
Perl, 33 byte
Kode di atas adalah 32 byte dan membutuhkan
-p
sakelar ( +1 byte ).Substitusi ini sangat mirip dengan jawaban Retina yang satu @ DigitalTrauma , tetapi jawaban ini mengambil keuntungan dari sub-pola rekursif PCRE .
Cobalah online di Ideone .
sumber
Retina , 34
Cobalah online.
sumber
JavaScript ES6,
935852 byteDisimpan 6 byte berkat Produk ETH!
Menguji! (Hanya ES6)
Tampilkan cuplikan kode
sumber
$4
sama sekali;)C,
255201199 byteSaya tidak melihat banyak jawaban C di sekitar sini, jadi nikmatilah; Juga, pertama kali bermain golf, saran, dan kritik dipersilakan.
Jika main () tidak diperlukan, kami dapat menyimpan 24 byte, mencapai 179 byte
Tidak Disatukan:
EDIT: Berkat saran feersum saya menghemat 54 byte. = D
sumber
strpbrk
.Python 2,
364352269251 byteSunting : Terima kasih banyak kepada @Cyoce karena membantu saya bermain golf 83 byte!
Tolong bantu saya bermain golf ini! Bagaimanapun, setidaknya saya adalah penjawab Python pertama. Dan saya harap saya bisa mengalahkan Jawa, jika ada jawaban Java!
Coba di sini
sumber
Japt,
2625 byteUntungnya, saya menambahkan kelas vokal ke fitur regex Japt beberapa hari yang lalu. Sayangnya, saya tidak menambahkan kelas non-vokal atau jalan memutar backslash ganda dalam string regex.
The
¿
harus char baku U + 0093. Input adalah string multi-baris, satu kata / baris. Cobalah online!EDIT: Saya sekarang telah menambahkan kelas non-vokal
\V
dan jalan\\
(dengan%
), jadi kode ini sekarang berfungsi untuk 21 byte : ( Coba online )Bagaimana itu bekerja
Versi lama (26 byte):
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3, 100 (atau 99) byte
Dimainkan dengan beberapa versi tetapi sepertinya tidak bisa mendapatkannya di bawah. Dapat menurunkan 99 byte dengan menggunakan
def f(g)
sebagai gantinya sehingga dibutuhkan daftar string daripada dua string terpisah, tapi saya lebih suka dua arg roue.Alternatifnya sama dengan panjang:
Saya mencoba mengganti, seperti menggunakan @TanMath, tapi saya tidak bisa membuatnya lebih pendek. Selain itu, TanMath bisa mendapatkan jawabannya lebih pendek dengan satu byte dengan juga menggunakan
"[aeiou]"
alih-alih"[aeiou]+"
karena kita hanya perlu mencocokkan satu instance. Akhirnya, implementasiinput()
tampaknya telah berubah antara py2 dan py3 - secara otomatis mengevaluasi stdin sebagai string.sumber
s=re.split
dalam alternatif?*
masuk*g
. 2. Versi kedua dapat di-golf hinggalambda x,y,s=lambda s:re.split("[aeiou]",s)[0]:(s(y)+x[len(s(x)):],s(x)+y[len(s(y)):])
.f=
.s
adalah argumen default, jadi Anda tidak perlu menentukannya. Lambda yang tidak disebutkan namanya adalah pengiriman yang dapat diterima;f=
tidak diperlukan.sed, 38 karakter
Menggunakan ekspresi reguler yang diperluas dari solusi Retina .
Panjang di atas adalah 37 karakter dan membutuhkan
-r
sakelar (+1 karakter).Contoh:
sumber
C # 6, 165 byte
Diperluas:
sumber
"aeiou".ToCharArray()
bisa'a','e','i','o','u'
untuk -2 byteIndexOfAny
tidak butuh params, jadi perlunew[]{'a','e','i','o','u'}
IndexOfAny
adalah metode params. Anyways, jawaban yang bagus𝔼𝕊𝕄𝕚𝕟, 24 karakter / 42 byte
Try it here (Firefox only).
Jika Anda perlu bantuan untuk memahami ini, ini diterjemahkan ke ES6 sebagai
sumber
PowerShell, 52 byte
Itu adalah regex ganti dengan empat kelompok tangkap; dengan:
('(.*?)([aeiou]\S+) '*2)
untuk'(.*?)([aeiou]\S+) (.*?)([aeiou]\S+) '
"$args "
pasukan args array menjadi string, dan menambahkan ruang tambahan sehingga ruang tambahan di regex tidak akan rusak.sumber
JavaScript (ES6),
1201071021019992 byteIni memperhitungkan jika parameternya adalah objek seperti ini, dan mundur:
var a = {x: "man", y:"plaster"]}
sumber
.match(/[aeiou]/).index
dapat menjadi:.search`[aeiou]`
Python,
129108105109 byteProgram ini menerima daftar kata-kata seperti ini
["master","plan"]
EDIT : Terima kasih @Vatilitas
EDIT: Sekarang menggunakan re.split
Jawaban ini menggunakan regex seperti kebanyakan dari mereka.
Coba di sini
sumber
str.replace
mengganti semua instance dari substring, jadi Anda ingin membatasi itu untuk satu penggantian dengan memiliki.replace(f,l,1)
. Namun, Anda bisa menyimpan banyak dengan menggunakani,j=input()
, dan memutarkan kembalire.findall
dan'[^aeiou]+'
ke variabel karakter tunggal.input()
menjadi dua variabel. Apakah maksud Andai,j=input().split()
(danraw_input()
dengan Python 2)?"sass","bit" -> "babb", "sit"
.Java 8, 343 Bytes
Di sini Anda memiliki Java-Answer pertama Anda. Tidak begitu berpengalaman dengan bermain golf, jadi setiap saran sangat dihargai!
Tidak Disatukan:
sumber
java.util.function.Function
? Saya sangat meragukannya harus ada di sana, kecuali maksud Andaimport
, tetapi hentikan impor karena Anda hanya merujuknya sekali. Ubahpublic class C{public static void Main(String[] a)
keinterface C{void Main(String[]a)
Function<String, Integer>
tidak perlu ruang putihfor(int i=0;i<s.length();++i)if("aeiou".contains(s.substring(i,i+1)))return i;
menjadifor(int i=0;i++<s.length();if("aeiou".contains(s.substring(i,i+1))){return i;})
i1
adalah varname yang mengerikan, terlalu lama.Function<String, Integer>
kejava.util.function.Function<String,Integer>
dan jatuhkan imporOktaf, 96 byte
Berkat penugasan sebaris Octave dan fungsionalitas 'indeks-di mana saja', semua ini hanyalah definisi dari satu fungsi anonim. Pada dasarnya, kami merekonstruksi string spoonerized sambil menyimpan titik cut-in
a
danb
. Saya terutama senang denganf
fungsi inline , yang menemukan titik cut-off, dan mencegah saya harus menggunakan seluruhfind(ismember(a,b),1)
hal dua kali. Juga, tidak ada regex :) .sumber
TeaScript , 27 byte
\w
sebenarnya[^aeiou]
.sumber
\w
meta regex default menjadi[^aeiou]
? Mengapa?\w
itu sudah digunakan oleh JavaScript. Saya akan segera mengubahnya kembaliElixir ,
143117 BytesPisahkan dua string (a, b) pada vokal pertama dan buat string baru untuk kembali.
EDIT: Turunkan beberapa byte dengan menggunakan pencocokan pola, bukan
elem
panggilan kikuk untuk mendapatkan nilai dari tupel.sumber
Java, 147 Bytes
Saya berasumsi hanya sebuah fungsi juga baik-baik saja.
split(regex)
sayangnya mengkonsumsi pembatas, yang berarti bahwa saya harus menggunakansubstring
untuk mendapatkan sufiks.sumber
Pyth,
3028 byteMengambil input dan memberikan output sebagai daftar dari dua kata.
Cobalah online.
sumber
ACm,Kh:d"[aeiou]"3.-dKQ+V_GH
.A
menetapkan daftar dua elemen ke G dan H, danC
mentransposisi. Mungkin ada sesuatu yang lebih baik.Python (tanpa regex), 85 byte
Contoh dijalankan:
t
adalah fungsi rekursif yang menghitung indeks vokal paling awal setelah karakter pertama dalam argumennyas
. Jika karakter keduas[1]
adalah vokal, ia mengevaluasiTrue
, yang memilikiint
nilai1
. Kalau tidak, ia membuat panggilan rekursif dengan karakter pertama dihapus, dan menambahkan 1 ke indeks yang dihasilkan menggunakan-~
(komplemen dua komplemen seseorang). Akhirnya, hasilt
digunakan sebagai indeks untuk mengiris tali untuk menghitung spoonerism.sumber
GNU Awk 4.0, 48 karakter
Contoh dijalankan:
sumber
PowerShell, 61 byte
Menggunakan regex untuk menukar karakter non-vokal pertama dari setiap kata
sumber