Tujuan
Tujuan dari tantangan ini adalah: memberikan string sebagai input, menghapus duplikat pasangan huruf, jika item kedua dalam pasangan adalah kapitalisasi yang berlawanan. (Yaitu huruf besar menjadi huruf kecil dan sebaliknya).
Pasangan harus diganti dari kiri ke kanan. Misalnya, aAa
harus menjadi aa
dan tidak aA
.
Input & output:
Input: Output:
bBaAdD bad
NniIcCeE Nice
Tt eE Ss tT T e S t
sS Ee tT s E t
1!1!1sStT! 1!1!1st!
nN00bB n00b
(eE.gG.) (e.g.)
Hh3lL|@! H3l|@!
Aaa Aa
aaaaa aaaaa
aaAaa aaaa
Input terdiri dari simbol ASCII yang dapat dicetak.
Anda tidak boleh menghapus digit yang digandakan atau karakter non-huruf lainnya.
Pengakuan
Tantangan ini adalah kebalikan dari "kasus Duplikat & saklar" @nicael . Bisakah kamu membalikkannya?
Terima kasih untuk semua kontributor dari kotak pasir!
Katalog
Cuplikan Stack di bagian bawah posting ini menghasilkan katalog dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
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 dapat 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 nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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="language-list"> <h2>Shortest Solution 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> <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> <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><script>var QUESTION_ID = 85509; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 36670; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "//api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "//api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(42), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
abB
?abB
atauab
?abB
harus menampilkanab
aa
;aA
;AA
, hanya pasangan tengah yang sesuai dengan pola dan menjadia
, jadiaa
;a
;AA
Jawaban:
Jelly , 8 byte
Cobalah online! atau verifikasi semua kasus uji .
Bagaimana itu bekerja
sumber
Retina , 18 byte
Cobalah online!
Penjelasan
Ini satu (dan cukup sederhana) substitusi yang cocok dengan pasangan yang relevan dan menggantinya dengan hanya karakter pertama. Pasangan ini dicocokkan dengan mengaktifkan insensitivitas kasus di tengah pola:
Substitusi hanya menulis kembali karakter yang sudah kita tangkap dalam grup
1
.sumber
Brachylog , 44 byte
Brachylog tidak memiliki ekspresi reguler.
Penjelasan
sumber
C #,
8775 byteDengan regex yang perkasa dari Martin Ender. C # lambda di mana input dan output berada
string
.12 byte disimpan oleh Martin Ender dan TùxCräftîñg.
C #,
141134 byteC # lambda di mana input dan output berada
string
. Algoritma itu naif. Ini yang saya gunakan sebagai referensi.Kode:
7 byte berkat Martin Ender!
Cobalah secara online!
sumber
Perl,
4024 + 1 = 25 byteGunakan regex yang sama dengan Martin.
Gunakan
-p
benderaUji di ideone
sumber
Python 3,
645958 byteUji di Ideone .
sumber
C, 66 byte
sumber
Pyth,
2420 byte4 byte berkat @Jakube.
Ini masih menggunakan regex, tetapi hanya untuk tokenizing.
Suite uji.
sumber
JavaScript (ES6),
7168 bytePenjelasan:
Mengingat
c>'@'
, satu-satunya cara untukparseInt(c+l,36)
menjadi kelipatan 37 adalah untuk keduanyac
danl
memiliki nilai yang sama (mereka tidak dapat memiliki nilai nol karena kami mengecualikan ruang dan nol, dan jika mereka tidak memiliki nilai maka ekspresi akan mengevaluasi keNaN<1
yang false) adalah bagi mereka untuk menjadi surat yang sama. Namun, kita tahu bahwa mereka bukan huruf yang sama-sensitif, jadi mereka harus sama-tidak sensitif.Perhatikan bahwa algoritma ini hanya berfungsi jika saya memeriksa setiap karakter; jika saya mencoba menyederhanakannya dengan mencocokkan pada huruf maka akan gagal pada hal-hal seperti
"a+A"
.Sunting: Disimpan 3 byte berkat @ edc65.
sumber
`
jika saya gunakanreplace
. (Saya hanya meminta mereka sebelumnya untuk mencoba konsisten, tetapi kemudian saya memasukkan jawaban saya sambil mengeditnya untuk pengiriman dan menjadi tidak konsisten lagi. Sigh ...)C,
129127125107106105939290888578 bytePort AC jawaban C # saya . C saya mungkin agak buruk. Saya tidak lagi menggunakan bahasa itu. Setiap bantuan dipersilahkan!
a!=b
=a^b
a&&b
=a*b
(c|32)==(d|32)
masalah bitwise sayaKode:
Cobalah online!
sumber
f(char*s){while(*s) {char c=*s,d=s+1;putchar(c);s+=isalpha(c)&&d&&((c|32)==(d|32)&&c!=d);}}
s+++1
menjadi++s
.c
dand
akan selalu dapat dicetak ASCII, jadi95
harus berfungsi sebagai gantinya~32
. Juga, saya pikirc;d;f(char*s){for(;*s;){putchar(c=*s);s+=isalpha(c)*(d=*(++s))&&(!((c^d)&95)&&c^d);}}
akan berhasil (tetapi belum diuji).MATL , 21 byte
Cobalah online! . Atau verifikasi semua kasus uji .
Penjelasan
Ini memproses setiap karakter dalam satu lingkaran. Setiap iterasi membandingkan karakter saat ini dengan karakter sebelumnya. Yang terakhir disimpan dalam clipboard K, yang diinisialisasi ke
4
secara default.Karakter saat ini dibandingkan dengan yang sebelumnya dua kali: pertama case-insensitive dan kemudian case sensitif. Karakter saat ini harus dihapus jika dan hanya jika perbandingan pertama benar dan yang kedua salah. Perhatikan bahwa, karena clipboard K awalnya berisi 4, karakter pertama akan selalu disimpan.
Jika karakter saat ini dihapus clipboard K harus diatur ulang (sehingga karakter selanjutnya akan disimpan); jika tidak, harus diperbarui dengan karakter saat ini.
sumber
Java 7, 66 byte
Menggunakan regex Martin Ender dari jawaban Retina-nya .
Tidak digabungkan & kode uji:
Coba di sini.
Keluaran:
sumber
JavaScript (ES6),
61 byte, 57 Bytess=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')
Terima kasih kepada Neil untuk menghemat 5 byte.
sumber
s=>s.replace(/./g,c=>l=c!=l&/(.)\1/i.test(l+c)?'':c,l='')
"code".length
, tidak menyadari ada urutan melarikan diri di sana. Terima kasih(code).toString().length
.(code+"").length
JavaScript (ES6) 70
sumber
===
?0==""
tetapi tidak0===""
@ NeilCembung, 18 byte
Cobalah online!
Pendekatan serupa dengan jawaban Pyth @Leaky Nun . Itu membangun array
["aA" "bB" ... "zZ" "Aa" "Bb" ... "Zz" '.]
, bergabung dengan'|
karakter, dan menguji input berdasarkan regex itu. Kemudian dibutuhkan karakter pertama dari setiap pertandingan.sumber