pengantar
Ternyata, meme cinta alien sama seperti kita. Setiap ras alien yang kami temui sejauh ini memiliki versinya sendiri 2spooky4me
(lihat pertanyaan berikut ) dan setara, dengan beberapa variasi. Penghuni planet CUTE1f tidak bisa menangani banyak hantu, jadi hantu yang mereka sukai adalah 1spooky2me
, sementara para pemudi kerangka menyukai mereka hantu, jadi mereka cenderung menggunakannya 9spooky11me
.
Tantangan
Menerjemahkan meme adalah pekerjaan yang sulit, jadi Anda telah ditugaskan menulis penerjemah meme universal untuk membantu orang-orang ini mengakses memenet dengan benar. Program Anda akan menerima meme dan transformasi untuk diterapkan pada urutan digit dalam meme itu agar sesuai untuk penduduk planet yang berbeda.
Memasukkan
Program Anda akan menerima dua input string:
- Meme input (misalnya
2spooky4me
). Cocok [a-zA-Z0-9]+
.
- Transformasi untuk diterapkan padanya (mis
+1
. Untuk beralih dari 2spooky4me
ke 3spooky5me
). Pertandingan [+\-*/^]\d+
(Anda harus menerima +
, -
, *
, /
, dan ^
sebagai operator, terlepas dari representasi asli dalam bahasa Anda).
Keluaran
Program Anda harus mengembalikan output string (dicetak ke output standar atau setara) dengan transformasi yang diberikan diterapkan pada urutan digit dalam meme input. Dalam peristiwa yang aneh, ternyata juga semua ras yang ditemui sejauh ini lebih memilih meme integral daripada yang fraksional, sehingga transformasi ini harus melakukan aritmatika bilangan bulat (misalnya 1spooky1me /2
harus menghasilkan 0spooky0me
).
Contohnya
Operasi aritmatika standar berlaku:
Input: 2spooky4me +1
Output: 3spooky5me
Input: 2spooky4me -1
Output: 1spooky3me
Input: 2spooky4me *15
Output: 30spooky60me
Input: 10spooky900me /5
Output: 2spooky180me
Urutan digit adalah integral; pemotongan bilangan bulat harus terjadi dalam kasus-kasus seperti ini:
Input: idontunderstandmemes3 /2
Output: idontunderstandmemes1
Input Anda mungkin tidak memiliki urutan digit apa pun:
Input: notreallyafunnymeme *100
Output: notreallyafunnymeme
Anda harus mendukung eksponensial, meskipun itu bukan operasi asli dalam bahasa pilihan Anda:
Input: 2spooky4me ^3
Output: 8spooky64me
Tidak ada batasan panjang string dari jumlah urutan digit dalam string:
Input: some1meme2sequences3can4be5really6long7 /2
Output: some0meme1sequences1can2be2really3long3
Tambahan
Jika bahasa Anda mendukung bilangan bulat presisi sembarang sebagai fitur bahasa, Anda harus menggunakannya. Jika tidak, Anda tidak perlu mendukung integer presisi sewenang-wenang. Misalnya, Anda harus menggunakan Integer
dalam Haskell bukan Int
karena itu tersedia sebagai bagian dari bahasa; di Java
, Anda tidak diharuskan untuk menggunakannya BigInteger
karena ini fitur perpustakaan, bukan fitur bahasa.
Input: 2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky4me /2
Output: 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000spooky2me
Ini kode-golf , sehingga celah standar dilarang, dan jawaban terpendek dalam byte menang!
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard 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 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 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 = 79809; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 45941; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://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 "https://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(), 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>
BigInteger
untuk perhitungannya?Jawaban:
Jolf,
1514 byteCoba di sini!
Penjelasan
Menyenangkan untuk dicatat, saya memperbarui Jolf setelah tantangan ini, menambahkan beberapa bawaan RegExp. Ini bisa
1211 byte:sumber
Ruby,
504443 byteFGITW menjawab. Harus cepat!
Terima kasih kepada @Neil untuk menghemat 6 byte.
Oh benar, dicoret 44 masih 44
sumber
a=gets;$><<gets.gsub(/\d+/){eval$&+a}
. Milik saya melewatkan hal ^! = **, dan mungkin sedikit lebih lama.^
. : DPerl,
3634 byteKode sumber panjangnya 30 byte dan membutuhkan sakelar
-pi
( +4 byte ). Dibutuhkan input pertama dari STDIN, input kedua sebagai argumen-i
.Terima kasih kepada @DenisIbaev untuk bermain golf 2 byte!
Uji di Ideone .
sumber
-pi
adalah 4 byte?-pi
dari sisa perintah."0|$&"
lebih pendek dari"0|".$&
."0|$&$^I"
berfungsi juga. Terima kasih!PowerShell v2 +,
139137 byteOoof ... 47 bytes hanya untuk memperhitungkan
^
karena itu bukan operator asli di PowerShell. Disimpan 2 byte berkat @TessellatingHeckler.Mengambil input sebagai
$a=<word>
,$b=<operation>
seperti.\universal-spooky-meme.ps1 2spooky4me ^3
. Kami-split
$a
pada digit, melampirkan bahwa dalam parens sehingga kami menjaga pembatas, dan pipa array yang dihasilkan melalui loop|%{...}
. Jika bagian saat ini adalah angka, kita berada di bagian pertamaif
. Kita perlu memeriksa apakah karakter pertama$b
adalah^
. Jika tidak, kami hanya menggabungkan bagian kami saat ini dan$b
dan mengirimkannya keiex
(mirip denganeval
), lalu meninggalkannya di saluran pipa. Kalau tidak, kita perlu membuat string eksponensial dengan"$_*"*$b.Trim('^')+1
dan mem-pipe-nyaiex
, dan membiarkannya pada pipeline. Untuk2spooky4me ^3
contoh yang diberikan , ini akan menjadi2*2*2*1
dan4*4*4*1
, masing-masing.Kalau tidak, kita biarkan saja apa adanya di pipeline.
Semua hasil tersebut dikumpulkan dari pipa dengan parens enkapsulasi sebelum
-join
disatukan kembali menjadi satu string. Itu adalah re-left pada pipeline, dan output tersirat pada penghentian program.Contohnya
sumber
Floor(("$_$b"|iex))
denganFloor((iex $_$b))
untuk menyelamatkan pasangan, atau mungkiniex $_+$b
.JavaScript (ES7),
5857 byteSunting: Disimpan 1 byte ketika saya ingat itu
replace
juga berfungsi pada string literal.sumber
Pyth, 29
Ini bekerja dengan mengekstraksi setiap angka dari meme, dan kemudian interleaving (
.i
) diikuti oleh spasi dan dibungkus daftar dengan argumen lain. Jadi, jika nomor kami adalah7
dan kami memiliki^20
kita akan mendapatkan daftar:["^", "7 ", "20"]
. Meratakan dan menggunakan Pytheval
(.v
) pada ini selalu memberikan operasi yang kita inginkan. Akhirnya nilai-nilai ini disatukan dengan string asli yang terpecah pada kemunculan angka.Ini bisa lebih pendek satu byte jika kedua input dikelilingi oleh karakter kutipan, atau dua byte lebih pendek jika hanya satu dari mereka yang dapat dikutip.
Cobalah di sini atau jalankan Test Suite
sumber
Python 2,
156898887 byteTerinspirasi oleh jawaban lain yang menggunakan fungsi substitusi bahasa mereka dengan penangan fungsi untuk memproses bagian numerik dari
i
string nput panjang dengano
perator. Sial untuk Python,^
harus diganti oleh**
, yang menelan biaya 18 byte kekalahan. The.group(0)
panggilan hanya untuk mengakses objek pertandingan 's representasi string tidak membuat hal-hal yang lebih baik ...Terima kasih kepada QPaysTaxes karena telah menemukan ruang palsu dan RootTwo untuk argumen yang tidak perlu
.group
!sumber
i,o:
p.group()
. (defaultnya ke 0); dan (2) masukkanr=re.sub;
gantire.sub
panggilan pertama denganr
dan kemudian gunakanr('^','**',o)
sebagai gantinyao.replace(...)
r('^','**',o)
maka membutuhkan melarikan diri^
ke\^
agar sesuai dengan karakter, bukan awalo
, menghemat bersih tanpa byte :-( - tapi terima kasih telah menunjukkan yang tidak perlu0
!Javascript (ES6) 99 byte
Contoh lain, mengapa kita benci menunggu ES7 untuk mendapatkan kompatibilitas
Contoh yang bisa dijalankan:
sumber
\d+|\D+
, yang setara dengan.+
.[a-zA-Z0-9]+
adalah regex yang Anda inginkan, bukan? Atau[a-zA-Z]+|[0-9]+
jika pemisahan itu membuat perbedaan?Math.pow
secara langsung karena Anda harus huruf besar-kecil pula. Juga, apakah Anda menggunakan divisi integer?\d+|\D+
Tidak sama dengan.+
. Mereka tidak sama karena ekspansi tisu terjadi sebelumor
. Itu akan sama jika terlihat seperti(\d|\D)+
, tetapi karena, itu tidak akan cocok dengan semua yang dikatakan2a
dalam satu kelompok, itu akan menjadi dua kelompok yang terpisah.Julia,
715954 bytePersyaratan untuk digunakan
big
jika tersedia membuat ini jauh lebih lama daripada ...Cobalah online!
sumber
Kotlin,
416413 BytesKurangnya
eval()
di Kotlin benar-benar meningkatkan jumlah byte ...Cobalah secara Online!
Tidak disatukan
sumber
PowerShell (v4),
124120 byte(baris baru hanya di sini untuk menghindari pengguliran horizontal, mereka bekerja ketika disimpan sebagai satu baris).
Komentar, dan versi ungolfed diminta:
iex
sepertieval()
dalam bahasa lain. Itu hanya"2spooky" "+3"
->eval("2+3")
^
operator atau eksponensial nyaman lainnya seperti**
, itu hanya dapat menggunakan[math]::Pow()
panggilan perpustakaan sehingga ada blok besar untuk menangani cabang itu."2*" * n
yang menjadi"2*2*2*2*"
dan kemudian menambahkan+1
di akhir untuk mengalikan dengan satu alih-alih mengeluh tentang trailing*
.[math]::Truncate()
. Sebagai gantinya, saya menyimpan karakter dengan menggunakan-replace
untuk memotong titik desimal dan apa pun setelahnya.Kasus uji:
NB. Dalam tes terakhir angka-angka meluap menjadi tipe
[BigInteger]
secara otomatis, tetapi mereka diberikan dalam notasi ilmiah. Untungnya, setiap ras yang dikenal mampu berkomunikasi antara bintang-bintang memiliki perkembangan ilmiah yang cukup untuk dapat memproses notasi ilmiah tanpa masalah.sumber
Bash + GNU coreutils, 144 Bytes
Ini terlihat pada perubahan antara digit dan non-digit, itu sebabnya karakter input acak tidak valid (koma) ditambahkan ke string input. Koma ini kemudian diabaikan dalam output. Konvensi OP mengikuti persis sintaks
bc
yang digunakan di sini untuk melakukan matematika.sumber
Lua,
14593 bytesumber
R, 163 byte
Sebagai seseorang yang belajar ekspresi reguler dan penggantian string dalam R, ini terbukti menjadi tantangan yang cukup sulit. Terutama karena mencocokkan angka-angka itu mudah tetapi saya tidak dapat menemukan cara untuk menggunakan banyak pergantian
gsub
. Selain itu, saya tidak tahu apakaheval(parse(paste0(...
ini cara yang paling efisien untuk beralih antar operasi. Mungkinswitch
fungsi-lebih cocok di sini.Penjelasan
sumber
Javascript (ES6), 85 Bytes
Tidak Disatukan:
sumber
()
menggunakan argumen lambda, Anda tidak perluvar
, dan Anda harus menggunakan parens dan operator koma sebagai ganti kawat gigi danreturn
^
adalah kasus khusus untuk JavaScript, itu adalah XOR bitwise bukannyaMath.pow
Groovy,
6460 BytesMengganti semua instance digit dengan penutupan yang mengevaluasi operasi pada bagian digit kata yang dilewati. Jika melewati fungsi eksponen, itu menggantinya dengan notasi yang tepat. Groovy secara implisit menangani konversi BigInteger / BigDecimal saat menggunakan
Eval.me()
karena string yang diuraikan dapat berpotensi berada di luar2^32-1
jangkauan.Dijelaskan
{a,b->...}
- Penutupan dengan dua argumen.a.replaceAll(/\d+/,{...})
- Cari semua urutan digit dalam string dan ganti dengan penutupan.{Eval.me(it+b.replace("^","**"))}
- Lebih khusus lagi, penutupan dengan setiap pertandingan memiliki operasi ditambahkan padanya, kemudian dievaluasi sebagai kode asyik..replace("^","**")
- Ganti instance pertama^
dengan operator eksponen groovy**
dalam operasi yang disediakan. Jika Anda ingin ini bekerja dengan string persamaan penuh yang menggunakan eksponen, gunakanreplaceAll()
sebagai ganti untuk hukuman +3 byte.Catatan samping yang menyenangkan adalah skenario pengujian yang valid:
(22348952345238905290858906209862398036spooky409552me, /200*4943^8-23939+((100/203)+600)
sumber
RProgN , 39 Bytes
Dijelaskan
Secara teknis jawaban tidak valid, karena bahasa ini tidak ada untuk itu. Namun, itu tidak dirancang khusus untuk itu, atau penambahan khusus apa pun. Jadi saya menjalankannya. Menuntutku.
Cobalah secara Online!
sumber
Perl 6, 111 byte
Sayangnya
EVAL
dinonaktifkan secara default. Juga, Anda harus menggunakandiv
untuk divisi integer.sumber