Tantangan
Diberikan string sebagai input, mainkan program Fourier yang menampilkan string itu.
Di Fourier tidak ada cara mudah untuk menghasilkan string: Anda harus melalui setiap kode karakter dan menampilkannya sebagai karakter.
Fourier
Bahasa ini didasarkan pada akumulator, variabel global yang diinisialisasi ke 0 pada awal program. Ini digunakan oleh hampir setiap operator dalam bahasa ini. Hanya beberapa yang tidak mengubah nilai akumulator.
Karakter keluar
a
Mengambil nilai akumulator sebagai kode ASCII dan mengeluarkan karakter. Tidak mengubah nilai akumulator.
Jika akumulator lebih besar dari 255, program akan mengembalikan kesalahan. Demikian juga jika akumulator kurang dari 0.
Nomor keluar
o
Menghasilkan nilai akumulator. Tidak mengubah nilai akumulator.
Meningkatkan
^
Tambah akumulator satu per satu.
Mengurangi
v
Kurangi akumulator dengan satu.
Menambahkan
+x
Menetapkan akumulator ke nilai akumulator plus nilai x.
Mengurangi
-x
Menetapkan akumulator ke nilai akumulator dikurangi nilai x.
Berkembang biak
*x
Mengatur akumulator ke nilai akumulator dikalikan dengan nilai x.
Membagi
/x
Menetapkan akumulator ke nilai akumulator dibagi dengan nilai x. (Perhatikan bahwa ini adalah pembagian bilangan bulat, sehingga 1/6
menghasilkan 0
)
Jumlah
n
Atur akumulator ke integer n.
Catatan
Di sini, x
dan n
dapat setiap bilangan bulat dari 0
ke 2^32-1
inklusif.
Informasi lebih lanjut
Anda hanya harus menggunakan operator yang dijelaskan di atas. Karena itu, program Fourier yang Anda keluarkan tidak valid jika menggunakan salah satu dari yang berikut ini (perhatikan bahwa operator berikut diizinkan untuk mendapatkan hadiah):
- Ulangi loop
- Pernyataan jika
- Variabel
- Acak
- Modulo
- Input Pengguna
- Lebih besar / kurang dari operator
- Operator kesetaraan
- Hapus layar
- Waktu tunda
- Fungsi tanggal
Program Anda bisa berupa program penuh atau fungsi, menerima input melalui STDIN, file atau argumen fungsi. Anda juga dapat mengambil input langsung dari Internet.
Perhatikan bahwa jika ada vv
dalam kode Anda, Anda harus menggantinya dengan -2
. Hal yang sama berlaku untuk ^^
menggantikannya +2
.
Contohnya
Jika inputnya 7n
, maka program yang diharapkan adalah:
55a110a
Tetapi Anda dapat menyimpan satu byte dengan
55a*2a
Cara lain adalah
7o110a
Menggunakan nomor keluar.
Demikian pula jika inputnya Hello
, maka program yang diharapkan adalah:
72a101a108a108a111a
Anda dapat menurunkannya dengan 3 byte (karena keluaran tidak mengubah akumulator):
72a101a108aa111a
Tapi tunggu, kita bisa menggunakan operator tambahan, menghemat 2 byte:
72a101a+7aa+3a
Memformat
Karena saya akan menggunakan leaderboard Stack Snippet Martin Büttner, bisakah Anda memformat judul seperti:
# <Language name>, <length of total output> bytes
Kemudian, Anda dapat meletakkan apa pun yang Anda inginkan di bawah judul.
Kemenangan
Anda harus memposting panjang program Fourier (dihasilkan oleh kode Anda) untuk menampilkan file teks ini dan file teks ini . Skor Anda adalah panjang gabungan dari kedua program Fourier dalam byte (karakter non-ASCII tidak digunakan dalam Fourier sehingga tidak benar-benar membuat perbedaan).
Orang dengan skor terendah menang. Jika ada seri, program terpendek dalam byte akan menang.
Karunia
Hadiah 500 rep ini adalah untuk jawaban baru yang memanfaatkan string menggunakan salah satu fungsi Fourier. Itu termasuk variabel, loop dan jika pernyataan dll. Jawaban baru ini tidak akan diterima.
Papan peringkat
Lihat bagian pemformatan di atas:
var QUESTION_ID=55384;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 getAnswers(){jQuery.ajax({url:answersUrl(page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),e.has_more?getAnswers():process()}})}function shouldHaveHeading(e){var a=!1,r=e.body_markdown.split("\n");try{a|=/^#/.test(e.body_markdown),a|=["-","="].indexOf(r[1][0])>-1,a&=LANGUAGE_REG.test(e.body_markdown)}catch(n){}return a}function shouldHaveScore(e){var a=!1;try{a|=SIZE_REG.test(e.body_markdown.split("\n")[0])}catch(r){}return a}function getAuthorName(e){return e.owner.display_name}function process(){answers=answers.filter(shouldHaveScore).filter(shouldHaveHeading),answers.sort(function(e,a){var r=+(e.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0],n=+(a.body_markdown.split("\n")[0].match(SIZE_REG)||[1/0])[0];return r-n});var e={},a=1,r=null,n=1;answers.forEach(function(s){var t=s.body_markdown.split("\n")[0],o=jQuery("#answer-template").html(),l=(t.match(NUMBER_REG)[0],(t.match(SIZE_REG)||[0])[0]),c=t.match(LANGUAGE_REG)[1],i=getAuthorName(s);l!=r&&(n=a),r=l,++a,o=o.replace("{{PLACE}}",n+".").replace("{{NAME}}",i).replace("{{LANGUAGE}}",c).replace("{{SIZE}}",l).replace("{{LINK}}",s.share_link),o=jQuery(o),jQuery("#answers").append(o),e[c]=e[c]||{lang:c,user:i,size:l,link:s.share_link}});var s=[];for(var t in e)e.hasOwnProperty(t)&&s.push(e[t]);s.sort(function(e,a){return e.lang>a.lang?1:e.lang<a.lang?-1:0});for(var o=0;o<s.length;++o){var l=jQuery("#language-template").html(),t=s[o];l=l.replace("{{LANGUAGE}}",t.lang).replace("{{NAME}}",t.user).replace("{{SIZE}}",t.size).replace("{{LINK}}",t.link),l=jQuery(l),jQuery("#languages").append(l)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",answers=[],page=1;getAnswers();var SIZE_REG=/\d+(?=[^\d&]*(?:<(?:s>[^&]*<\/s>|[^&]+>)[^\d&]*)*$)/,NUMBER_REG=/\d+/,LANGUAGE_REG=/^#*\s*([^,]+)/;
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> <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>