Diberikan string karakter ASCII, output karakter yang ada di tengah. Jika tidak ada karakter tengah (ketika string memiliki panjang genap), output karakter ASCII yang ordinalnya adalah rata-rata lantai dari dua karakter tengah. Jika string kosong, string kosong harus dihasilkan.
Kasus uji:
12345 => 3
Hello => l
Hiya => q
(empty input) => (empty output)
Program terpendek dalam karakter menang. (Bukan byte.)
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 characters
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 characters
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 characters
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 characters
<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 = 64599; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 47556; 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>
code-golf
string
tidak ada tubuh di sini
sumber
Jawaban:
Pyth, 15 byte
Demonstrasi
Dimulai dengan "Hiya" sebagai input:
Perhatikan bahwa ini macet dengan kesalahan pada input kosong, dan tidak mencetak apa pun ke STDOUT, yang merupakan cara yang valid untuk menghasilkan string kosong dengan default kode-golf.
sumber
B
ifurcate menunjukkan utilitasnya lagi.C
fungsionalitas lantai: github.com/isaacg1/pyth/commit/0baf23ec Perhatikan hari ditambahkan, pada hari yang sama pertanyaan ini ditanyakan. Itu karena pertanyaan ini mengilhami saya untuk menambahkan fungsionalitas itu, membuatnya tidak memenuhi syarat untuk digunakan pada pertanyaan ini.Brainf ***, 61 byte
Mandarin , 16 karakter
Ini membutuhkan input dalam rentang ASCII 1-127 dan diakhiri null. Ini menghapus pasangan karakter dari awal dan akhir string sampai ada satu atau dua karakter yang tersisa. Jika ada dua, itu menambahkan mereka bersama-sama, lalu membaginya dengan 2, membulatkan ke bawah. Karakter yang tersisa dicetak.
Cobalah dengan penerjemah ini .
Pembedahan:
* Mengingat setiap instruksi dapat dikompresi menjadi 3 bit dan dikodekan dalam UTF-32, seluruh program secara teknis dapat dinyatakan dalam 6 karakter.
EDIT: Dan terima kasih kepada Jan Dvorak karena memperkenalkan saya ke bahasa Mandarin , yang mengompres ini menjadi 16 karakter, setara dengan jawaban CJam Dennis .
sumber
Given each instruction could be compressed to 3 bits and encoded in UTF64, the whole program could technically be expressed in 3 characters.
Kamu menang. Internet. Dan yang lainnya.+-<>,.[]
, dalam penyandian apa pun, bukan representasi binernya. Kami memiliki konsensus bahwa penyandian yang tidak dapat digunakan oleh penerjemah yang ada tidak valid.CJam, 16 byte
Cobalah online!
Bagaimana itu bekerja
sumber
TeaScript , 23 byte
25 30 31 33Menggunakan ide @ isaacg untuk membalik string.
Cobalah online
Uji semua kasus
Penjelasan && Tidak Terkumpul
TeaScript masih JavaScript sehingga fungsinya sangat mirip dengan JavaScript juga.
sumber
Matlab,
3937 bytefloor((end+[1,2])/2)
mengembalikan dua indeks tengah string jika panjangnya genap, dan mengembalikan indeks tengah dua kali jika panjangnya ganjil.mean
hanya mengembalikan rata-rata dari nilai-nilai itu danchar
secara otomatis meletakannya.sumber
8086 kode mesin + DOS, 31 byte
Hexdump:
Kode sumber assembly (dapat dirakit dengan tasm):
Ada beberapa penggunaan halus dari pendaftaran FLAGS di sini. Setelah menggeser panjang string dengan 1 bit (yang setara dengan pembagian dengan 2), dua flag menyimpan informasi tambahan:
Biasanya, flag harus diperiksa segera, tetapi di sini saya menggunakan fakta bahwa
mov
instruksi tidak mengubah flag. Jadi mereka bisa diperiksa setelah memuat char tengah.sumber
Python 3,
61595755 byteSaya mencoba untuk tidak bermain golf dengan bahasa tempat saya bekerja, tetapi ini tidak terlalu jahat.
Berkat @ xsot selama 2 byte!
Program lengkapnya adalah 59 byte:
Coba di sini .
sumber
-1-len(x)//2
setara dengan~len(x)//2
karena bagaimana pembagian lantai bekerja pada bilangan bulat negatif.Prolog, 111 byte
Kode
Dijelaskan
Contohnya
sumber
R , 73 byte
Cobalah online!
Banyak terima kasih kepada @ngm untuk datang dengan ide non-rekursif ini - diizinkan untuk bermain golf 20 byte.
Solusi lama:
R ,
10195 byteCobalah online!
Solusi rekursif. Memperbaiki satu masalah dengan harga 2 byte:
try(expr, silent = TRUE)
untuk mengelola case di mana input kosong.terima kasih Giusppe untuk 4 byte!
sumber
intToUtf8
memotong non-integer?Sekam , 11 byte
Cobalah online!
Penjelasan
Combinator lezat dan lezat sepanjang jalan.
ö
adalah "menyusun keempat fungsi ini",¤
adalah "menerapkan argumen pertama ke hasil menerapkan argumen kedua ke dua argumen tambahan secara terpisah",S
adalah "menerapkan fungsi ini (yang harus mengambil dua argumen) untukS
argumen ketiga dan hasilnya menerapkanS
argumen kedua ke argumen ketiga ". Karena itu,Diedit untuk menambahkan: Sebenarnya, ini sedikit gagal untuk menyesuaikan dengan spesifikasi masalah, yang meminta string dalam kasus input kosong dan karakter dalam kasus lain.
Karena pengetikan yang ketat pada Husk, tidak mungkin untuk mendefinisikan suatu fungsi / program yang dapat mengembalikan salah satu dari dua jenis. Saya memilih untuk mengembalikan satu karakter dalam semua kasus, dan untuk Husk, pilihan paling masuk akal untuk satu karakter untuk mewakili string kosong adalah
'(space)'
karena itulah nilai "default" (dan pada kenyataannya, itulah sebabnya program ini mengembalikannya; default nilai digunakan saat mengambil→
item ( ) terakhir dari daftar kosong).Saya bisa juga secara wajar memilih untuk mengembalikan string nol atau satu karakter, yang akan gagal spesifikasi ke arah lain, tetapi saya tidak melakukannya karena menambahkan empat byte:,
Ṡ&ö;c½S¤+öc→←½↔
dengan;
mengubah karakter menjadi string satu karakter, yang lainö
untuk secara eksplisit menyusun yang diperlukan, danṠ&
untuk pintas dalam kasus input palsu.sumber
C ++ 14, 56 byte
Lambda anonim mengambil string sebagai argumen dan mengembalikan int sebagai kode char. Karena
""
, ia kembali0
. Tidak yakin bagaimana persisnya input dan output akan terlihat (tidak ditentukan dalam pertanyaan).Tidak disatukan, dengan penggunaan
sumber
0
untuk "".JavaScript (ES6), 83 byte
89 91Disimpan 2 byte berkat @ Cᴏɴᴏʀ O'Bʀɪᴇɴ
Disimpan 6 byte berkat produk @ETH
JavaScript tidak terlalu bagus di semua kode char string ini.
sumber
s=>String.fromCharCode((s[~~(t=s.length/2-.5)][r="charCodeAt"]()+s[Math.ceil(t)][r])/2)
lebih pendek 5 byte.()
sekitarcharCodeAt
jadi benar-benar 3 karakter, tapi terima kasih!t
bilangan bulat tidak berfungsiMath.ceil(t)
dapat diubah menjadi0|t+.9
O ,
4434 byteDicoret 44 masih teratur 44 :(
Bytes terbuang pada:
sumber
Minkolang 0,13 ,
2320 byteCoba di sini.
Penjelasan
sumber
hiya
kembalii
sebagai gantinyaq
Japt ,
4029232120 byteDisimpan 4 byte berkat @ ן nɟuɐɯɹɐ ן oɯ
Sekarang hanya setengah dari panjang aslinya! Saya suka golf kode. :-D
Bekerja dengan baik pada string kosong. Cobalah online!
Bagaimana itu bekerja
Seperti yang Anda lihat, ini menggunakan banyak auto-flooring. (Terima kasih, JavaScript!) Saran diterima!
sumber
V=Ul /2;((UcV +Uw cV )/2 d
?c
tanpa argumen sehingga saya lupa itu diterima. Terima kasih!Pergi,
166156153 bytePergi mungkin bukan bahasa terbaik untuk bermain golf ... tapi saya menyukainya, sangat banyak, dan saya mempelajarinya, jadi di sana.
Implementasi ini menerima
\n
input kosong ( ) dan mungkin akan terputus dengan input non-ASCII / ASCII. Namun, OP belum menentukan pengkodean input / output sehingga ASCII adalah semua yang saya dukung secara eksplisit.Mengedit : Ternyata
if
/else
adalah lebih pendek dariswitch
. Sekarang saya tahu, saya kira.Golf:
Tidak Disatukan:
sumber
𝔼𝕊𝕄𝕚𝕟, 23 karakter
Try it here (Firefox only).
Terima kasih kepada @ETHProductions untuk idenya!
sumber
C #, 77 byte
Sebenarnya tidak mengembalikan string, dan Anda akan mendapatkan karakter spasi jika string input kosong karena fungsi harus selalu mengembalikan nilai. Diperlukan 2 byte lagi untuk mengembalikan sebuah string.
Program lengkap dengan uji kasus:
Atau, program lengkap yang membaca input pengguna dan mencetak pusat string yang dimasukkan:
C #, 144 byte
Sekali lagi, ia menggunakan trik yang sama untuk mencetak karakter spasi, yang tidak akan dilihat pengguna, dan bukan string kosong, jika tidak solusinya 2 byte lebih lama.
sumber
Vim,
382423 penekanan tombolKarena vim telah dibangun di fungsi untuk menemukan tengah garis tapi tidak tengah arang , kami membagi setiap karakter pada baris terpisah pertama yang menggunakan
substitute
, menemukan garis tengah, kemudian hapus semuanya setelah dan sebelum.Jika Anda ingin menjalankan ini, waspadalah terhadap
.vimrc
file yang dapat mengubah perilaku.
(regex ajaib) dang
(gdefault). Perhatikan bahwa itu sebenarnya menyelamatkan saya 3 kali penekanan tombol pada mesin saya :)Jawaban sebelumnya
Mengambil buffer satu baris sebagai input, memperbarui buffer saat ini dengan karakter tengah. Saya pikir akan ada jalan pintas untuk ini di vim!
Catatan: solusi yang berpotensi lebih pendek tampaknya menyebabkan loop tak terbatas ... Jika seseorang memiliki ide:
qq^x$x@qq@qp
(12 penekanan tombol) - ini berfungsi dengan<c-c>
setelah yang terakhir@q
...sumber
Mathematica,
11899 karakterManipulasi kode karakter mma mahal ...
sumber
%
yang diandalkannya.VBA, 130 Bytes
Saya pikir saya bisa bermain golf salah satu
asc()
panggilan, tetapi tidak bisa membuatnya bekerja lebih pendek.sumber
K, 40 byte
sumber
> <>, 24 + 3 (untuk -s) = 27 byte
Solusi lama (Tidak berfungsi untuk input kosong):
Keduanya mengambil input melalui stack
-s
. Keduanya 24 byte.Cobalah online di sini.
sumber
pb , 83 byte
Meskipun setidaknya ada 3 karakter dalam string input, yang pertama dan terakhir dihapus. Ini menyisakan 1 karakter (harus dicetak tidak dimodifikasi) atau 2 (harus dirata-rata dan dicetak). Untuk menangani ini, karakter pertama dan terakhir dari string ditambahkan bersama-sama dan dibagi dua. Jika hanya ada satu karakter
(a+a)/2==a
,. Jika ada dua,(a+b)/2
adalah karakter yang perlu dicetak. pb "meminjam" evaluasi ekspresi Python (def expression(e): return eval(e, globals())
) jadi ini secara otomatis didasarkan.Menangani input kosong menghabiskan biaya 5 byte. Secara khusus,
<b[1]>
pada baris pertama. Sebelumnya, ketika saya mengatakan "string", itu adalah kebohongan total. pb tidak memiliki string, ia memiliki karakter yang berdekatan satu sama lain. Mencari "karakter terakhir dari string" hanya berarti menggerakkan kuas ke kiri hingga menyentuh karakter. Ketika tidak ada input yang disediakan, loop "sementara setidaknya ada 3 karakter" dilewati seluruhnya dan mulai mencari karakter terakhir. Tanpa itu<b[1]>
, ia akan terus mencari selamanya. Kode itu menempatkan karakter dengan nilai 1 pada (-1, -1) khusus ditemukan ketika input kosong. Setelah menemukan "karakter terakhir" dari string kuas mengasumsikan yang pertama adalah pada (0, -1) dan langsung ke sana, menemukan nilai 0.(1+0)/2
adalah 0 dalam pb,Terima kasih, penanya-pertanyaan hipotetis. Sebelumnya, ketika saya mengatakan "cetak", itu adalah kebohongan total. Di pb, Anda tidak benar-benar mencetak nilai, Anda cukup meletakkannya di kanvas. Daripada "cara untuk output", lebih tepat untuk membayangkan kanvas sebagai array 2D yang sangat besar. Ini memungkinkan indeks negatif di kedua dimensi, dan banyak pemrograman di pb benar-benar memastikan sikat sampai ke lokasi di kanvas yang Anda inginkan. Ketika program selesai dieksekusi, semua yang ada di kanvas dengan koordinat X dan Y yang tidak negatif akan dicetak ke lokasi yang sesuai di konsol. Ketika program dimulai, seluruh kanvas diisi dengan nilai 0. Agar tidak harus mencetak jumlah baris yang tak terbatas, masing-masing dengan jumlah byte nol yang tak terbatas, setiap baris output hanya dicetak hingga karakter bukan nol terakhir, dan baris hanya dicetak hingga yang terakhir dengan karakter bukan nol di dalamnya. Jadi menempatkan a
0
at (0, 0) masih merupakan output kosong.Tidak Disatukan:
sumber
Serius ,
2220 byteTerima kasih @Mego karena mahir dalam bahasa Anda
Cobalah online atau apa pun
sumber
,;``@(lIƒ
akan meninggalkan Anda dengan nilai input pada tumpukan jika nilainyalen
> 0, atau menghentikan program sebaliknya. Perhatikan bahwa ada backticks yang tidak bisa dicetak - karakter 127.ƒ
harus dilakukan?CoffeeScript,
104103 bytesumber
Ruby,
434241 byte42 byte
43 byte
Pemakaian:
sumber
Java 7, 152 byte
Kasus yang tidak disatukan & uji:
Coba di sini.
Keluaran:
sumber
PHP,
14793 bytePenghargaan dan terima kasih khusus kepada Jörg Hülsermann karena golf jawaban saya turun 54 byte!
Versi sebelumnya:
Kode pengujian:
Tes online
Saya merasa ini bisa diperbaiki, tetapi tidak cukup waktu untuk itu ...sumber
<?=($l=strlen($s=$argv[1]))%2?$s[($l-1)/2]:chr(floor((ord($s[$l/2])+ord($s[$l/2-1]))/2));
adalah proposal sayaExcel,
12279 byteSebenarnya jawaban @Sophia Lechner sekarang:
-5 byte dari solusi awal berkat @Taylor Scott.
Diperlukan 12 byte untuk String Kosong.
sumber
Average(...,...)
dan gunakan(...+...)/2
untuk -5 byte.=IFERROR(IF(ISODD(LEN(A1)),MID(A1,LEN(A1)/2+1,1),CHAR((CODE(MID(A1,LEN(A1)/2,1))+CODE(MID(A1,LEN(A1)/2+1,1)))/2)),"")
=IFERROR(CHAR(CODE(MID(A1,LEN(A1)/2+1,1))/2+CODE(MID(A1,LEN(A1)/2+.5,1))/2),"")
untuk 79 byte