var QUESTION_ID=86647,OVERRIDE_USER=48934;function answersUrl(e){return"http://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"http://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>
Jawaban:
V ,
1514 byteCobalah online!
Solusi yang cukup mudah. The sempurna tantangan bagi V!
Penjelasan:
Mudahnya, berdasarkan cara kerja rekursi, ini akan berjalan sekali untuk setiap caret tunggal.
sumber
Cheddar,
777267 byteTidak ada regex!
Saya suka jawaban ini karena ini merupakan demonstrasi yang luar biasa dari kemampuan Cheddar. Terutama berkat fungsi ganti yang ditambahkan oleh Conor. PR untuk dev tidak pernah dibuat sehingga fungsi ganti hanya ada pada cabang ini (pembaruan: Saya membuat PR dan sekarang ini pada cabang beta terbaru yang dapat Anda instal dengan
npm install -g cheddar-lang
)Saya telah menemukan cara untuk bermain golf, tetapi sayangnya hasil pengawasan dalam hal ini terjadi ketika panjang item tidak sama:
Saya bisa menyimpan banyak byte menggunakan regex, dan sebenarnya saya baru saja membuat regex untuk Cheddar ... satu-satunya masalah adalah bahwa tidak ada fungsi regex: /
Penjelasan
Untuk mendapatkan pemahaman yang lebih baik. Ini adalah tujuan
.lines
pengembalian1^2
yang
.turn
dengan memutar ini:ke:
Contoh lain yang akan membuatnya lebih jelas:
menjadi:
Mengapa format?
Apa yang
%-2s
dilakukannya cukup sederhana.%
menentukan kita sedang memulai "format", atau bahwa suatu variabel akan dimasukkan ke dalam string ini pada titik ini.-
artinya ke kanan-pad string, dan2
merupakan max-length. Secara default itu bantalan dengan spasi.s
hanya menentukan itu sebuah string. Untuk melihat fungsinya:sumber
turn
metode untuk string?Perl, 21 + 1 = 22 byte
Jalankan dengan
-p
bendera. Ganti♥
denganESC
byte mentah (0x1b
), dan↓
dengan tab vertikal (0x0b
).Tab vertikal adalah ide Martin Ender. Ini menghemat dua byte! Terima kasih.
sumber
JavaScript (ES6),
5655 byteRegexps untuk menyelamatkan tentu saja. Yang pertama mengganti semua karakter dengan spasi, kecuali jika menemukan tanda sisipan, dalam hal ini tanda tanda menghapus tanda sisipan dan membiarkan karakter setelahnya. (Karakter-karakter ini dijamin ada.) Yang kedua adalah yang jelas untuk mengganti setiap tanda sisipan dan karakter berikutnya dengan spasi.
Sunting: Disimpan 1 byte berkat @Lynn yang menemukan cara untuk menggunakan kembali string pengganti untuk penggantian kedua yang memungkinkan penggantian dipetakan di atas larik regexps.
sumber
s=>[/.(\^(.))?/g,/\^.(())/g].map(r=>s.replace(r,' $2'))
byte lebih pendek.Python 3,
15710198858374 byteSolusi ini melacak apakah karakter sebelumnya
^
, lalu memutuskan apakah akan menampilkan ke baris pertama atau kedua berdasarkan itu.Output sebagai array dari
['firstline', 'secondline']
.Disimpan
1315 byte berkat @LeakyNun!Disimpan 7 byte berkat @Joffan!
sumber
a=['','']
dan menggabungkan' '
danc
langsung kea[l]
dana[~l]
?Python 2, 73 byte
Tidak ada regex. Ingat jika karakter sebelumnya adalah
^
, dan menempatkan karakter saat ini di garis atas atau bawah berdasarkan itu, dan spasi di yang lain.sumber
Pyth, 17 byte
Mengembalikan array 2 string. (Sertakan
j
untuk bergabung dengan mereka dengan baris baru.)Cobalah online .
sumber
MATL , 18 byte
Cobalah online!
sumber
Ruby, 47 +1 (
-n
bendera) = 48 byteJalankan seperti ini:
ruby -ne 'puts$_.gsub(/\^(.)|./){$1||" "},gsub(/\^./," ")'
sumber
$_=$_.gsub(/\^(.)|./){$1||" "}+gsub(/\^./," ")
dan-p
bukannya-n
.+$/
berarti itu tidak akan menghemat byte.puts
melempar baris baru untuk Anda secara otomatis ketika,
ada di antara argumen.ruby -p ... <<< 'input'
tetapi saya setuju, jika tidak ada baris baru, itu tidak baik! Sebenarnya, saya mungkin telah menambahkan baris baru dalam tes saya sebelumnya ... Itu sedang bekerja jadi saya tidak bisa memeriksa!gets
mencakup sebagian besar baris baru, tetapi jika Anda mem-pipkan file yang tidak mengandung baris baru, maka itu tidak akan muncul dan hasilnya akan salah . Uji kode Anda denganruby -p ... inputfile
sejak Ruby mengarahkan kembaligets
ke file jika itu argumen baris perintah.Python (2),
766867 Bytes-5 Bytes berkat @LeakyNun
-3 Bytes terima kasih kepada @ KevinLau-notKenny
-1 Byte, terima kasih kepada @ValueInk
-0 byte terima kasih kepada @DrGreenEggsandIronMan
Fungsi Lambda anonim ini mengambil string input sebagai satu-satunya argumen dan mengembalikan dua garis output yang dipisahkan oleh baris baru. Untuk menyebutnya beri nama dengan menulis "f =" sebelum itu.
Regex sederhana: Bagian pertama menggantikan yang berikut dengan spasi: karakter apa pun dan
wortelcaret atau hanya char, tetapi hanya jika tidak ada caret sebelum mereka. Bagian kedua menggantikan setiap tanda dalam string dan char setelahnya dengan spasi.sumber
from re import*
lambda i,s=re.sub:[s("(?<!\^).\^?"," ",i),s("\^."," ",i)]
untuk -1 byteCembung, 24 byte
Cobalah online!
sumber
Retina, 16 byte
Port jawaban Perl saya, ditunjukkan oleh Martin Ender. Ganti
♥
denganESC
byte mentah (0x1b
) dan↓
dengan tab vertikal (0x0b
).sumber
shell + TeX + catdvi,
5143 byteMenggunakan
tex
untuk mengeset beberapa matematika yang indah, dan kemudian menggunakancatdvi
untuk membuat representasi teks. Perintah kepala menghapus sampah (penomoran halaman, mengikuti baris baru) yang ada.Sunting: Mengapa melakukan hal yang lama, tepat, dan mengarahkan
/dev/null
ketika Anda dapat mengabaikan efek samping dan menulis ke satu file huruf?Contoh
Memasukkan:
abc^d+ef^g + hijk^l - M^NO^P (Ag^+)
Output TeX (dipotong ke persamaan): Output akhir:
Asumsi: Mulai dengan direktori kosong (atau direktori khusus tanpa nama yang diakhiri dengan "i"). Input adalah argumen tunggal ke skrip shell. Input bukan string kosong.
Seseorang memberi tahu saya apakah ini penyalahgunaan peraturan, khususnya
catdvi
.sumber
Haskell,
745655 byteMengembalikan sepasang string. Contoh penggunaan:
unzip.g $ "abc^d+e:qf^g + hijk^l - M^NO^P: (Ag^+)"
->(" d g l N P + ","abc +e:qf + hijk - M O : (Ag )")
g
membuat daftar pasangan, di mana elemen pertama adalah char di baris atas dan elemen kedua adalah char di baris bawah.unzip
mengubahnya menjadi sepasang daftar.Sunting: @xnor yang disarankan
unzip
yang menyimpan 18 byte. @Laikoni menemukan satu byte lagi untuk disimpan. Terima kasih!sumber
j=unzip.g
?g[]=[]
dengang x=x
untuk menyimpan satu byte.Perl, 35 byte
34 byte kode +1 untuk
-p
Pemakaian
Catatan: Ini persis sama dengan jawaban Value Ink yang saya lihat sesudahnya. Akan dihapus jika diperlukan karena ini tidak benar-benar menambah solusi Ruby.
sumber
Java 8 lambda,
132128112 karakterVersi ungolfed terlihat seperti ini:
Output sebagai array, cukup memeriksa apakah ada tanda sisipan dan jika demikian karakter berikutnya akan diletakkan di baris atas, kalau tidak akan ada spasi.
Pembaruan
Karakter yang diganti dengan nilai ascii mereka untuk menyimpan 4 karakter.
Terima kasih kepada @LeakyLun karena menunjukkan untuk menggunakan array char sebagai input.
Juga terima kasih kepada @KevinCruijssen untuk beralih
int
kechar
untuk menyimpan beberapa karakter.sumber
char[]
dan menggunakanfor(char c:i)
untuk melihat apakah jumlah byte dapat dikurangi.i->{String[]r={"",""};for(char j=0,c;j<i.length;j++){c=i[j];r[0]+=c==94?i[++j]:32;r[1]+=c==94?32:c;}return r;}
with"abc^d+ef^g + hijk^l - M^NO^P (Ag^+)".toCharArray()
sebagai input. ( Ide perubahan ini. )Coconut ,
122 11496 byteSunting:
826 byte ke bawah dengan bantuan dari Leaky Nun.Jadi seperti yang saya pelajari hari ini python memiliki operator kondisional ternary, atau bahkan dua dari mereka:
<true_expr> if <condition> else <false_expr>
dan<condition> and <true_expr> or <false_expr>
dengan yang terakhir datang dengan satu char kurang.Versi python conform dapat diidealkan .
Percobaan pertama:
Memanggil dengan
f("abc^d+ef^g + hijk^l - M^NO^P (Ag^+)")
cetakanAdakah yang sudah mencoba bermain golf dengan kelapa? Ini memperkaya python dengan konsep pemrograman yang lebih fungsional seperti pencocokan pola dan penggabungan fungsi (dengan
..
) yang digunakan di atas. Karena ini adalah percobaan pertama saya di kelapa, tips apa pun akan dihargai.Ini pasti dapat dipersingkat karena kode python yang valid juga kelapa yang valid dan jawaban python yang lebih pendek telah diposting, namun saya mencoba untuk menemukan solusi murni fungsional.
sumber
x and y or z
) untuk menggantikancase
.s[0]=="^"
sebagai gantinyamatch['^',c]+r in l
match['^',c]+r
dengans[0]=="^"
, makac
danr
tidak lagi terikat. Bagaimana ini membantu?s[1]
untuk menggantic
dans[2:]
menggantir
.Dyalog APL, 34 byte
Ini mengembalikan vektor dua elemen dengan dua garis
Contoh dijalankan (uparrow di depan adalah untuk memformat vektor dua el untuk konsumsi manusia):
sumber
PowerShell v2 +,
8883 byteSedikit lebih lama dari yang lain, tetapi menampilkan sedikit keajaiban PowerShell dan sedikit logika yang berbeda.
Pada dasarnya konsep yang sama dengan jawaban Python - kita beralih pada input karakter-oleh-karakter, ingat apakah yang sebelumnya adalah tanda sisipan (
$c
), dan menempatkan karakter saat ini ke tempat yang tepat. Namun, logika dan metode untuk menentukan ke mana output ditangani sedikit berbeda, dan tanpa tuple atau variabel terpisah - kami menguji apakah karakter sebelumnya adalah tanda sisipan, dan jika demikian output karakter ke pipa dan menyatukan spasi ke$b
. Kalau tidak, kami memeriksa apakah karakter saat ini adalah tanda sisipanelseif($_-94)
dan selama tidak, kami menggabungkan karakter saat ini ke$b
dan mengeluarkan spasi ke pipeline. Akhirnya, kami menetapkan apakah karakter saat ini adalah tanda untuk putaran berikutnya.Kami mengumpulkan karakter-karakter dari pipa bersama-sama dalam parens, merangkum mereka dalam
-join
yang mengubahnya menjadi string, dan meninggalkannya bersama dengan$b
di pipa. Output pada akhirnya tersirat dengan peralihan baris baru.Sebagai perbandingan, berikut adalah port langsung dari jawaban Python @ xnor , sebesar 85 byte :
sumber
Gema,
4241 karakterGema memproses input sebagai stream, jadi Anda harus menyelesaikannya dalam satu jalur: baris pertama ditulis segera setelah diproses, baris kedua dikumpulkan dalam variabel $ s, kemudian output di akhir.
Contoh dijalankan:
sumber
Cinnamon Gum, 21 byte
Non-bersaing. Cobalah online.
Penjelasan
Saya tidak banyak dari pemain golf regex jadi mungkin ada cara yang lebih baik untuk melakukan ini.
String tersebut didekompresi menjadi:
(perhatikan ruang trailing)
Tahap pertama
S
menerima input dan menggunakan tampilan negatif di belakang untuk mengganti semua karakter selain caret tanpa caret sebelumnya dengan spasi, lalu hapus semua caret. Kemudian langsung menampilkan string input yang dimodifikasi dengan baris baru dan menghapusS
tahap itu. Karena STDIN sekarang habis dan tahap sebelumnya tidak memberikan input apa pun,S
tahap berikutnya menerima baris terakhir dari STDIN lagi dan kemudian mengganti semua caret diikuti oleh karakter apa pun dengan spasi dan menghasilkan itu.Dalam Perl psuedo-code:
sumber
J ,
2827 byteCobalah online!
Pasti ada cara yang lebih baik ...
sumber