var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.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(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <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><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><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
legal yang membutuhkan satu buffer input / output dan panjang, dan tidak memiliki nilai balik, hanya saja efek samping pada objek yang memiliki pointer.Jawaban:
Malbolge , 20775 dan 2334 byte
Mungkin saya tidak mengalahkan siapa pun dengan itu, tapi itu sangat menyenangkan untuk dibuat.
Cobalah online!
Jika tantangan tidak memerlukan penghentian di beberapa titik (mis. Eof), itu menjadi sangat sepele, mencetak 2334 byte :
Cobalah online!
Penjelasan
Saya diminta untuk menjelaskan cara kerja program. Saya akan memilih yang kedua karena lebih mudah untuk menjelaskannya daripada yang pertama, tetapi cara keduanya bekerja sangat mirip.
Mari kita mulai dengan mendekripsi kode. Ketika seseorang di komentar melakukannya sebelum saya mulai mengerjakan penjelasannya, maka saya sangat menyarankan Anda untuk memeriksanya.
Itu tidak membuat membaca program lebih mudah orang akan mengatakan, tetapi sebelum kita langsung masuk ke kode, mari kita tinjau dasar-dasar Malbolge.
Mesin virtual didasarkan pada Trits ( tri nary digit s ). Setiap kata mesin memiliki lebar sepuluh trit, sehingga berkisar dari 0 hingga 2222222222t (= 59048d). Setiap posisi memori memiliki kata mesin; alamat juga satu kata mesin lebar. Data dan kode berbagi ruang memori yang sama.
Ada tiga register, masing-masing memegang satu kata mesin, awalnya 0: register kode C yang merupakan penunjuk ke instruksi yang akan dieksekusi, register data D digunakan untuk manipulasi data dan akumulator A juga digunakan oleh beberapa instruksi untuk memanipulasi data.
Jika instruksi untuk mengeksekusi tidak dalam kisaran 33-126, eksekusi berhenti (penerjemah referensi hang dalam kasus ini karena bug). Jika tidak, untuk menentukan instruksi aktual untuk dieksekusi, nilai yang ditunjukkan oleh register C ditambahkan ke register C itu sendiri dan hasilnya dibagi dengan 94, dengan mengambil sisanya.
Berikut adalah tabel dari semua instruksi yang memungkinkan.
Sekarang karena kodenya lebih mudah dimengerti dan sebenarnya mungkin untuk mengetahui apa yang terjadi di sana, kita dapat beralih ke ide umum tentang apa yang terjadi di sana.
Tanpa melompat, pemrograman Malbolge cukup sepele. Ketika lompatan digunakan, ada tugas mendekripsi yang harus dilakukan sebelum mengeksekusi kode ini lagi. Setiap kali sebuah instruksi dieksekusi, itu akan langsung setelah dienkripsi, sehingga tidak berlaku seperti sebelumnya.
Untuk menggambarkan solusinya, mari kita lihat program kucing Malbolge yang dinormalisasi:
Jadi seperti yang Anda lihat, pada baris kedua yang kita miliki
/
dan<
instruksi berurusan dengan hal-hal I / O. Memanfaatkan fakta bahwaC
mendaftar adalah penunjuk instruksi, kita dapat memodifikasinya menggunakani
instruksi yang secara efektif membuat cabang. Sebelum cabang terjadi, kita perlu mendekripsi instruksi yang hanya beberapa siklus membaca dan menulis output ke dan dari TTY, dikombinasikan dengan lompatan. Karena tidak ada cara nyata untuk menyimpan konstanta secara efektif, kita perlu menanamkan banyak instruksi yang tidak terkait dan menggunakan nilainya untuk menghitung konstanta lain yang diperlukan (memanfaatkan fakta bahwa Malbolge tidak memisahkan program dan data)Catatan: Sebagian dari jawaban ini diambil dari halaman Esolang wiki Malbolge yang dilisensikan di bawah CC0- link .
Mungkin, Anda mungkin ingin memeriksa jawaban saya yang lain yang menampilkan Seed
sumber
brainfuck , 6 byte
Cobalah online!
Untuk sekali ini, jawaban yang sangat kompetitif dalam brainfuck. :-) Itu hanya membaca dari input standar (
,
), kemudian loop sementara karakter membaca bukan nol ([
), menulis karakter membaca dua kali (..
) dan akhirnya membaca karakter baru (,
) sebelum kembali ke awal dari loop (]
).Alternatif jawaban 6 byte:
Cobalah online!
sumber
Seed ,
60133942388438653848 bytesCobalah online!
sumber
Jelly , 1 byte
Program lengkap.
Cobalah online!
sumber
Ḥ
ż`F
), sedangkan yang saya tidak percayaBahasa Pemrograman Shakespeare ,
139129109106 byte-3 byte terima kasih kepada Jo King
Cobalah online!
Menaburkan peringatan dan berakhir dengan kesalahan. Menghadapinya.
sumber
Haskell ,
151413 byteCobalah online!
atau terbaca:
Penjelasan: Daftar adalah
Monad
dalam Haskell, dan menggunakan operator bind>>=
adalahconcatMap
, menjalankan fungsi yang mengambil elemen dan mengembalikan daftar pada setiap elemen daftar dan kemudian menggabungkan daftar yang dihasilkan menjadi satu daftar besar.Sekarang kita hanya perlu membangun fungsi yang, diberi nilai, mengembalikan daftar nilai itu dua kali, yang dicapai dengan
(<$"dd")
, yang dapat dibaca sebagai "Ambil daftar['d','d']
dan ganti setiap elemen dengan argumen fungsi ini."dd"
Bisa jadi ekspresi apa pun yang menghasilkan daftar tepat dua elemen, tetapi ini adalah yang terpendek yang bisa saya buat.sumber
<$
adalah sesuatu yang saya tidak akan pernah pikirkan05AB1E , 2 byte
Ok, saya menyerah. Saya tidak dapat menemukan 1-byter untuk menyelesaikan ini. Banyak 2 byters, ..
Coba
ø˜
online atau CobaøS
online .Coba
ζ˜
online atau CobaζS
online .Coba
€D
online atau Coba€Â
online .Coba
.ι
online.Coba
ºS
online.Coba
·S
online atau CobaxS
online .Coba
+S
online.I / O sebagai daftar karakter.
Penjelasan:
Satu-satunya program yang berfungsi sama di kedua versi 05AB1E. :)
Versi ini pada dasarnya berfungsi sama seperti di atas untuk versi baru. Dalam versi lama Anda akan membutuhkan pasangan eksplisit
‚
terlebih dahulu, dan kemudian Anda bisa zip / transpos itu. Hanyaζ
pada daftar 1D akan menjadi no-op dalam versi warisan 05AB1E.Dalam versi baru 05AB1E, itu menyimpan semua nilai di stack ke dalam daftar yang dihasilkan saat melakukan peta. Sedangkan dengan versi lawas 05AB1E itu hanya akan mempertahankan nilai tertinggi. Itulah sebabnya ini hanya berfungsi di versi baru.
Builtin ini belum ada di sana dalam versi warisan 05AB1E.
Dalam versi warisan 05AB1E, cermin horizontal yang dibangun akan menjadi
∞
bukanº
. Namun,∞S
tidak berfungsi dalam versi lawas, karena secara implisit akan mengubah daftar menjadi string yang dibatasi-baris sebelum dicerminkan sepenuhnya ( Coba di sini ), setelahS
itu juga akan menyertakan baris baru ini.Double adalah kependekan dari
2*
. Dalam versi baru 05AB1E, build di Elixir, ini hanya bekerja pada nilai numerik. Versi legasi 05AB1E dibangun dengan Python, jadi2*
berfungsi serupa dan mengulangi karakter.Sekali lagi, karena versi warisan 05AB1E dibangun dengan Python,
"a"+"a"
menghasilkan"aa"
, sedangkan yang+
tidak dapat digunakan untuk menambahkan string dalam versi baru. (PS: Ada tambahan untuk string yang berfungsi di kedua versi, yaitu«
, tetapi ketika memberikan dua argumen daftar, ia akan menyatukannya, daripada menggabungkan setiap string pada indeks yang sama seperti program di atas ( Coba di sini ).)sumber
ζ˜
untuk 05AB1E modern.ø˜
, jadi saya tidak repot-repot menambahkannya juga. Saya telah menambahkannya (danøS
/ζS
/xS
).Skema Piramida ,
229 218213 byteCobalah online!
Ini pasti bisa lebih pendek. Input diambil melalui argumen baris perintah. Ini sama dengan pada dasarnya:
Dengan beberapa peringatan, seperti pencetakan benar-benar ditangani baik dalam kondisi loop maupun loop body.
Alternatif 215 byter:
Cobalah online!
sumber
set
bisa digeser dan meninggalkan tanpa mengganggu apa-apa. Cobalah online!Jelly , 1 byte
Program lengkap mencetak hasilnya.
Cobalah online!
Bagaimana?
Menggunakan fitur
bug...Atom "ganda" Jelly,
Ḥ
diimplementasikan dengan Python*
dan vektorisasi, sedangkan daftar karakter Jelly (satu-satunya "string") diimplementasikan sebagai daftar string Python yang biasanya hanya satu karakter panjang - yaitu sampai kita menyadari bahwa dengan Python'blah'*2='blahblah'
...sumber
ḤṾV
$ echo -n "Ḥ" | hexdump -C
<newline>00000000 e1 b8 a4 |...|
af
,Ḥ
hanya representasi visual dari byte itu, lihat Jelly ini kode-halaman (juga terhubung dalam header dari pos).Jelly, 1 byte
Cobalah online!
Maafkan pengalaman saya, saya baru saja mulai dengan Jelly. Apa yang saya yakini sedang terjadi adalah bahwa kita telah mendefinisikan rantai diad, yang memperlakukan satu argumen sebagai argumen kiri dan kanan. Dalam hal ini, rantai terdiri dari "zip; interleave x dan y", interleaving string input dengan dirinya sendiri.
Seseorang sudah memposting solusi Jelly 1-byte, jadi saya harap itu bukan sikap buruk untuk memposting milik saya.
sumber
Python,
3425 byteCobalah online! Satu lagi yang mengembalikan string bukannya daftar karakter:
Cobalah online!
sumber
lambda i:sum(zip(i,i),())
harus dilakukan untuk -9.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 byte tetapi mengembalikan sebuah string dan bukan daftarlambda i:''.join(c*2for c in i)
PowerShell ,
292321 byte-6 bytes berkat Andrei Odegov
-2 bytes berkat mazzy
Cobalah online!
Mengambil input melalui splatting, pada dasarnya membuatnya menjadi array karakter
sumber
8088 Majelis, IBM PC DOS,
1610 bytexxd
Dump byte yang dirakitDaftar belum dirakit:
Standalone PC DOS dapat dieksekusi. Input dari
STDIN
, output ke konsol.Input konsol interaktif:
Input melalui pipa:
Asli 16 byte jawaban:
xxd
Dump byte yang dirakitDaftar belum dirakit:
Standalone PC DOS dapat dieksekusi. Input melalui baris perintah, output ke konsol.
sumber
LODSW
akan menempatkan ruang terkemuka (20H
) dari81H
dalamAH
yang tentu saja akan mengacaukanLOOP
jika itu diCH
... Nyebelin.sed ,
108 byteCobalah online!
Berkat @manatwork untuk -2 byte.
sumber
s/./&&/g
.JavaScript (Node.js) , 22 byte
Mengambil input sebagai array karakter.
Cobalah online!
JavaScript (ES6), 26 byte
Mengambil input sebagai string.
Cobalah online!
Versi alternatif yang disarankan oleh @PabloLozano:
Cobalah online!
Melakukannya dengan cara rekursif juga sama panjangnya:
Cobalah online!
sumber
s=>s.replace(/./gs,c=>c+c)
sehingga.
juga cocok dengan baris barujoin('')
harus mengurus itu. Setelah dipikir-pikir, itu mungkin menambah output dengan cara yang tidak standar sehingga mungkin tidak valid.["aa","bb","cc"]
Namun adalah daftar string, bukan string atau daftar karakter itu sendiri. Menambahkan gabungan atau meratakannya ke daftar karakter valid, tetapi harus dihitung menuju byte-count.Haskell , 8 byte
Cobalah online!
String dua karakter berfungsi sebagai gantinya
"x2"
.sumber
Brachylog , 2 byte
Cobalah online!
Penjelasan
sumber
Befunge-98 (PyFunge) , 6 byte
Cobalah online!
sumber
C (gcc) , 40 byte
Cobalah online!
Asumsikan
t
adalah buffer yang cukup besar untuk menyimpan output.Mungkin tidak sesuai standar, tetapi bekerja pada TIO.
sumber
J ,
63 byte-3 byte terima kasih kepada Richard Donovan
Cobalah online!
K (oK) ,
84 byte-4 byte terima kasih kepada ngn!
Cobalah online!
sumber
{2}#
APL (dzaima / APL) , 2 byte SBCS
Fungsi awalan diam-diam anonim.
Cobalah online!
⌿
adalah "replikasi" :-)sumber
Haskell , 15 byte
Di sini
(:)<*>pure
mengambil argumen dan mengembalikan daftar yang berisi argumen ini dua kali. Kemudian>>=
memetakan fungsi ini pada setiap entri dari daftar input (yang merupakan string dalam kasus kami) dan meratakan hasilnya (daftar daftar) kembali ke daftar.Cobalah online!
sumber
Rust ,
8346 byteCobalah online!
Saya tidak suka ini, tapi itu tidak curang .
sumber
Labirin , 12 byte
Cobalah online!
Saya baru saja menemukan bahasa ini sehingga jawaban ini dapat sangat ditingkatkan ...
sumber
","
bukannya"",
), saya sudah mengelola sebelas sekarang - bisakah ada sepuluh atau lebih baik?Stax , 2 byte
Jalankan dan debug di staxlang.xyz!
Salinan. Zip. Cetak tersirat.
sumber
R ,
5033 byte-17 byte terima kasih kepada Giuseppe
Cobalah online!
sumber
gsub('(.)','\\1\\1',a)
?gsub
penggantian ekspresi reguler - menggantikan kecocokan satu karakter(.)
dalam grup tangkap 1 dengan dua salinan grup tangkap 1\\1\\1
, untuk semua kecocokan yang memungkinkan, sebagai lawan darisub
yang hanya melakukan satu.Retina , 4 byte
Cobalah online!
Cocokkan string kosong (yaitu posisi sebelum / setelah setiap karakter) dan masukkan string antara ini dan pertandingan sebelumnya (yang selalu persis karakter sebelumnya; kecuali untuk pertandingan pertama di mana ia tidak melakukan apa-apa).
sumber
Java 8, 27 byte
Cobalah online.
Jawaban 31 byte sebelum aturan diubah:
CATATAN: Saran dari @EmbodimentOfIgnorance (
\n|.
bukannya(?s).
telah dikembalikan, karena gagal jika inputnya berisi\r
. Terima kasih telah melaporkan ke @ OlivierGrégoire .Cobalah online.
Penjelasan:
Penjelasan regex:
sumber
(?s).
dapat diganti dengan\n|.
\n|.
Versi tidak bekerja dengan benar dengan masukan"\r"
. The(?s).
Versi bekerja dengan benar dengan\r
, meskipun.\n
itu dapat dicetak tetapi bukan bagian dari rentang yang dapat dicetak ASCII.Pyth , 2 byte
Cobalah online!
.i
nterleaves dua salinan input bersama. Inputnya implisit, jadi versi 'penuh' dari program ini adalah.iQQ
, di manaQ
input program.sumber
MarioLANG ,
23 2017 byteCobalah online!
Tidak seperti brainfuck, MarioLANG mengembalikan -1 pada EOF, jadi kita harus meningkatkan nilai yang dibaca sebelum membandingkannya dengan nol, dan kemudian mengurangi sebelum mencetaknya. Ini mungkin jawaban sesingkat mungkin dalam MarioLANG.
sumber