Idenya sederhana. Anda harus membuat penggantian surat "divisualisasikan", dengan memberikan 3 string (input dapat dipisahkan koma, input terpisah, atau sebagai larik). Segmen pertama adalah kata yang ingin Anda koreksi, dan segmen kedua adalah huruf yang ingin Anda ganti, dan segmen ketiga adalah pengganti untuk huruf-huruf di segmen 2.
Sebagai contoh:
| | Input | Starting Word | Output |
|----|-----------------------------|---------------|-------------|
| #1 | Hello world -wo -ld +Ea +th | Hello world | Hello Earth |
| #2 | Hello World -wo -ld +Ea +th | Hello World | Hello Worth |
| #3 | Hello -llo +y | Hello | Hey |
| #4 | Red -R -d +Gr +en | Red | Green |
| #5 | mississippi -is -i +lz +p | mississippi | mlzslzspppp |
| #6 | Football -o -a +a +i | Football | Fiitbill |
| #7 | mississippi -is -i +iz +p | mississippi | mpzspzspppp |
Penjelasan
Penggantian harus dilakukan langkah demi langkah dengan pasangannya masing-masing. Berikut ini adalah ilustrasi dengan input mississippi -is -i +iz +p
untuk memberikan output mpzspzsppp
(lihat contoh di #7
atas)
| Step | Input | Output |
|------ |--------------------------- |------------- |
| #1 | mississippi -is -i +iz +p | |
| #2 | mississippi -is +iz | mizsizsippi |
| #3 | mizsizsippi -i +p | mpzspzspppp |
Aturan
- Input selalu dalam urutan ini
<starting_string> <list_of_letters_to_replace> <replacement_letters>
. - Surat untuk mengganti dan mengganti kelompok tidak akan pernah dicampur (yaitu: tidak akan pernah ada
-a +i -e +o
). - Surat untuk diganti selalu diawali dengan
-
dan surat pengganti selalu diawali dengan+
. (Awalan wajib) - Mungkin ada lebih dari satu set surat untuk diganti, jadi Anda harus melihat awalan.
- Asumsikan jumlah grup surat yang akan diganti dan jumlah grup surat pengganti selalu sama (yaitu: tidak akan pernah ada
-a -e +i
) - Penggantian adalah case-sensitive (lihat contoh
#1
dan#2
). - Penggantian dilakukan sesuai urutan yang diberikan pada input.
- Penggantian surat dapat diganti dengan penggantian lainnya. Lihat contoh
#6
. - Segmen pertama (kata awal) tidak akan pernah menyertakan
-
atau+
karakter. - Ini adalah kode-golf sehingga byte terpendek menang.
Papan peringkat
Berikut ini adalah Stack Snippet untuk menghasilkan leaderboard reguler dan tinjauan pemenang berdasarkan bahasa.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
# Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda bisa menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
# Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat tautan nama bahasa yang kemudian akan muncul di cuplikan papan peringkat:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=96473,OVERRIDE_USER=38505;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>
letter to replace
(dengan awalan-
) dan input int (n / 2) +1 ke n-1 adalahreplacement
(dengan awalan+
)gello
), dan kemudian mengirim saya pengganti surat (-g +h
) karena dia ingin mengganggu daripada mengirimhello*
.Jawaban:
05AB1E ,
1517 byteCobalah online!
Penjelasan
Atau dengan format input yang kurang ketat
Cobalah online
sumber
JavaScript (ES6),
8583 byteUji kasus
Tampilkan cuplikan kode
sumber
Pyke,
1311 byteCoba di sini!
Atau 2 byte jika dalam format input berbeda:
Coba di sini!
sumber
Perl, 58 byte
57 byte kode +1 untuk
-p
.Membutuhkan item pertama di satu baris, lalu penggantian di baris berikutnya. Terima kasih banyak kepada @Dada yang menggunakan pendekatan berbeda untuk membantu mengurangi sebesar 4 byte!
Pemakaian
sumber
perl -pE 's/(.*?) -(\S*)(.*?)\+(\S*)/"(\$1=~s%$2%$4%gr).\"$3\""/ee&&redo'
. Saya tidak bisa mengatur untuk membuatnya lebih pendek, tapi mungkin Anda bisa :)perl -pE '$a=<>;1while$a=~s%-(\S*)(.*?)\+(\S*)%"s/$1/$3/g;q{$2}"%ee'
. (mengambil string pada satu baris, dan "bendera" pada baris berikutnya)GNU sed 86 Bytes
Termasuk +1 untuk -r
Cobalah online!
Contoh:
sumber
PHP,
9897 byteTantangan ini menggambarkan perilaku str_replace yang tepat, jadi untuk php itu semua tentang membuat array pengganti. Saya mencoba melakukannya dengan hanya menggunakan satu "substring" tetapi itu mungkin bukan solusi terbaik. Gunakan seperti:
sunting: 1 byte disimpan berkat Titus
sumber
$v[0]>'+'
menghemat satu byte lebih$v[0]=='-'
. Anda juga bisa menggunakannyaord($v)&4
.Java 7,
153133 byteTidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
new String[]{'Rom Ro. Rom", "-Ro." , "+No."}
? Hanya menulis sesuatu yang (semoga) cocok dengan regex yang salah.Rom No. Rom
. Btw, Anda dapat mencobanya sendiri dengan mengeklikTry it here.
tautan di pos, dan kemudian mem-forknya. :)PHP, 164 Bytes
sumber
Vim, 25 byte
qq+dE+r-PdiW:1s<C-R>"-g<CR>@qq@q
Mengasumsikan input dalam format ini:
+dE+r-PdiW
: Menggabungkan-
dan+
menjadi register tunggal, dengan+
diubah menjadi a-
.:1s<C-R>"-g
: Menggunakan register sebagai potongan kode, disisipkan langsung ke:s
perintah, dengan-
sebagai pemisah.sumber
Cembung , 19 byte
Cobalah online!
sumber
R,
9894 byteSunting: disimpan 4 byte berkat @rturnbull
Kasus yang tidak disatukan dan diuji
Karena
scan
(membaca input dari stdin) tidak berfungsi dengan benar di R-fiddle saya menampilkan program dengan membungkusnya dalam suatu fungsi sebagai gantinya. Perhatikan bahwa fungsi mengambil vektor sebagai masukan dan dapat dijalankan oleh misalnya:f(c("Hello world", "-wo", "-ld", "+Ea", "+th"))
. Program gofled di atas akan meminta pengguna untuk memasukkan menggunakan stdin di mana mengetik"Hello world" -wo -ld -Ea +th
di konsol akan menghasilkan hasil yang sama.Jalankan kode pada R-fiddle
sumber
"
sekitar string input?"Hello world" => enter => "-wo" => enter => "-ld" => enter => "+Ea" => enter =>"+th"
yang biasanya bagaimana string dibaca.l=length(i)
kel=length(i)/2
dan memperbarui referensi kemudianl
.Haskell,
8578 byteContoh penggunaan:
("mississippi" # "-is -i") "+lz +p"
->"mlzslzspppp"
.Bagaimana itu bekerja:
Sunting: @BlackCap menemukan 6 byte untuk disimpan dan saya sendiri yang lain.
sumber
import Data.Lists;a#b=foldl(uncurry replace
flip)a.zip(g b).g;g=map tail.words
flip
infiks. Awalan standar lebih pendek satu byte.Python 3, 93 byte
Cobalah online!
Input adalah daftar dengan string, string pengganti dipisahkan oleh ruang.
Input contoh:
['mississippi','-is -i','+iz +p']
sumber
PowerShell v2 +, 90 byte
Mengambil input sebagai tiga argumen, dengan string
-
dan+
dipisahkan oleh spasi. Lakukan-split
on$b
(-split
saat berakting dalam mode unary terbagi di whitespace), kemudian|%{...}
lewati masing-masing. Setiap iterasi yang kami lepaskan-
, menemukan[$i++]
string pengganti berikutnya dan menghapusnya+
, dan menggunakan-creplace
(penggantian case-sensitive) untuk mengiris dan memotong$a
dan menyimpannya kembali$a
. Kemudian,$a
dibiarkan di atas pipa dan output tersirat.sumber
PHP, 106 byte
pendekatan lurus ke depan. Jalankan dengan
php -r '<code> <arguments>
.sumber