Thử thách
Đưa ra một chuỗi làm đầu vào, đánh xuống chương trình Fourier để tạo ra chuỗi đó.
Trong Fourier, không có cách dễ dàng nào để xuất một chuỗi: bạn phải đi qua từng mã ký tự và xuất ra dưới dạng một ký tự.
Fourier
Ngôn ngữ dựa trên bộ tích lũy, một biến toàn cục được khởi tạo thành 0 khi bắt đầu chương trình. Điều này được sử dụng bởi hầu hết mọi nhà khai thác trong ngôn ngữ. Chỉ một số không thay đổi giá trị của bộ tích lũy.
Nhân vật ra
a
Lấy giá trị của bộ tích lũy làm mã ASCII và xuất ký tự. Không thay đổi giá trị của bộ tích lũy.
Nếu bộ tích lũy lớn hơn 255, chương trình sẽ trả về lỗi. Tương tự như vậy nếu tích lũy nhỏ hơn 0.
Đánh số
o
Xuất ra giá trị của bộ tích lũy. Không thay đổi giá trị của bộ tích lũy.
Tăng
^
Tăng tích lũy thêm một.
Giảm bớt
v
Giảm tích lũy thêm một.
Thêm vào
+x
Đặt bộ tích lũy thành giá trị của bộ tích lũy cộng với giá trị của x.
Trừ
-x
Đặt bộ tích lũy thành giá trị của bộ tích lũy trừ đi giá trị của x.
nhân
*x
Đặt bộ tích lũy thành giá trị của bộ tích lũy nhân với giá trị của x.
Chia
/x
Đặt bộ tích lũy thành giá trị của bộ tích lũy chia cho giá trị của x. (Lưu ý rằng đây là phép chia số nguyên, do đó, 1/6
kết quả là 0
)
Con số
n
Đặt bộ tích lũy thành số nguyên n.
chú thích
Ở đây, x
và n
có thể là bất kỳ số nguyên từ 0
để 2^32-1
toàn diện.
Thêm thông tin
Bạn chỉ phải sử dụng các toán tử được mô tả ở trên. Do đó, chương trình Fourier xuất ra của bạn không hợp lệ nếu nó sử dụng bất kỳ điều nào sau đây (lưu ý rằng các toán tử sau được phép cho tiền thưởng):
- Lặp lại các vòng lặp
- Nếu báo cáo
- Biến
- Ngẫu nhiên
- Modulo
- Đầu vào của người dùng
- Lớn hơn / ít hơn các nhà khai thác
- Toán tử bình đẳng
- Xóa màn hình
- Thời gian trễ
- Hàm ngày
Chương trình của bạn có thể là một chương trình đầy đủ hoặc một hàm, nhận đầu vào thông qua STDIN, một đối số tệp hoặc hàm. Bạn cũng có thể lấy đầu vào trực tiếp từ Internet.
Lưu ý rằng nếu có một vv
mã trong mã của bạn, bạn nên thay thế nó bằng -2
. Tương tự như vậy ^^
, thay thế nó bằng +2
.
Ví dụ
Nếu đầu vào là 7n
, thì chương trình dự kiến là:
55a110a
Nhưng bạn có thể lưu một byte với
55a*2a
Một cách khác là
7o110a
Sử dụng số ra.
Tương tự nếu đầu vào là Hello
, thì chương trình dự kiến là:
72a101a108a108a111a
Bạn có thể đánh gôn xuống 3 byte (vì đầu ra không thay đổi bộ tích lũy):
72a101a108aa111a
Nhưng chờ đã, chúng ta có thể sử dụng toán tử cộng, tiết kiệm 2 byte:
72a101a+7aa+3a
Định dạng
Bởi vì tôi sẽ sử dụng bảng xếp hạng Stack Snippet của Martin Büttner, vui lòng bạn có thể định dạng tiêu đề như vậy:
# <Language name>, <length of total output> bytes
Sau đó, bạn có thể đặt bất cứ điều gì bạn muốn dưới tiêu đề.
Chiến thắng
Bạn nên đăng độ dài của các chương trình Fourier (được tạo bởi mã của bạn) để xuất tệp văn bản này và tệp văn bản này . Điểm của bạn là độ dài kết hợp của cả hai chương trình Fourier tính bằng byte (các ký tự không phải ASCII không được sử dụng trong Fourier để nó không thực sự tạo ra sự khác biệt).
Người có điểm thấp nhất sẽ thắng. Nếu có hòa, chương trình ngắn nhất tính bằng byte sẽ thắng.
Tiền thưởng
Tiền thưởng 500 rep này là cho một câu trả lời mới , đó là đánh gôn bằng cách sử dụng bất kỳ chức năng nào của Fouri. Điều đó bao gồm các biến, vòng lặp và nếu câu lệnh, vv Câu trả lời mới này sẽ không được chấp nhận.
Bảng xếp hạng
Tham khảo phần định dạng ở trên:
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>