ท้าทาย
รับสตริงเป็นอินพุทให้ลงโปรแกรมฟูริเยร์ซึ่งส่งเอาต์พุตสตริงนั้น
ในฟูริเยร์ไม่มีวิธีที่ง่ายในการส่งออกสตริง: คุณต้องผ่านแต่ละรหัสตัวอักษรและเอาท์พุทที่เป็นตัวละคร
ฟูริเยร์
ภาษาจะขึ้นอยู่กับการสะสมซึ่งเป็นตัวแปรทั่วโลกซึ่งจะเริ่มต้นที่ 0 ในตอนเริ่มต้นของโปรแกรม ตัวดำเนินการนี้ใช้โดยผู้ปฏิบัติงานเกือบทุกภาษา มีเพียงบางคนเท่านั้นที่ไม่เปลี่ยนค่าของตัวสะสม
ตัวละครออกมา
a
รับค่าของตัวสะสมเป็นรหัส ASCII และส่งออกอักขระ ไม่เปลี่ยนค่าของตัวสะสม
หากสะสมมากกว่า 255 โปรแกรมจะส่งคืนข้อผิดพลาด เช่นเดียวกันหากตัวสะสมมีค่าน้อยกว่า 0
หมายเลขออก
o
ส่งออกค่าของตัวสะสม ไม่เปลี่ยนค่าของตัวสะสม
เพิ่ม
^
เพิ่มการสะสมหนึ่ง
ลดลง
v
ลดการสะสมโดยหนึ่ง
เพิ่ม
+x
ตั้งค่าตัวสะสมเป็นค่าของตัวสะสมบวกกับค่าของ x
ลบออก
-x
ตั้งค่าตัวสะสมเป็นค่าของตัวสะสมลบด้วยค่าของ x
คูณ
*x
ตั้งค่าตัวสะสมเป็นค่าของตัวสะสมคูณด้วยค่าของ x
การแบ่ง
/x
ตั้งค่าตัวสะสมเป็นค่าของตัวสะสมหารด้วยค่าของ x (โปรดทราบว่านี่คือการหารจำนวนเต็มดังนั้นจะได้1/6
ผลลัพธ์0
)
จำนวน
n
ตั้งค่าตัวสะสมเป็นจำนวนเต็ม n
บันทึก
ที่นี่x
และn
สามารถเป็นจำนวนเต็มตั้งแต่0
ถึง2^32-1
รวมได้
ข้อมูลมากกว่านี้
คุณต้องใช้โอเปอเรเตอร์ที่อธิบายไว้ข้างต้นเท่านั้น ดังนั้นโปรแกรมฟูริเยร์เอาท์พุทของคุณจึงไม่ถูกต้องหากใช้สิ่งใดสิ่งหนึ่งดังต่อไปนี้ (โปรดทราบว่าตัวดำเนินการต่อไปนี้ได้รับอนุญาตสำหรับเงินรางวัล):
- วนซ้ำซ้ำ
- ถ้างบ
- ตัวแปร
- สุ่ม
- modulo
- อินพุตของผู้ใช้
- มากกว่า / น้อยกว่าผู้ประกอบการ
- ผู้ประกอบการความเท่าเทียมกัน
- หน้าจอที่ชัดเจน
- หน่วงเวลา
- ฟังก์ชั่นวันที่
โปรแกรมของคุณอาจเป็นโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นโดยรับอินพุตผ่าน STDIN ไฟล์หรืออาร์กิวเมนต์ของฟังก์ชัน คุณอาจป้อนข้อมูลโดยตรงจากอินเทอร์เน็ต
โปรดทราบว่าถ้ามีในรหัสของคุณคุณควรแทนที่ด้วยvv
-2
เดียวกันจะไปสำหรับแทนที่มันด้วย^^
+2
ตัวอย่าง
หากอินพุตเป็น7n
ดังนั้นโปรแกรมที่คาดหวังคือ:
55a110a
แต่คุณสามารถบันทึกหนึ่งไบต์ด้วย
55a*2a
อีกวิธีคือ
7o110a
ใช้หมายเลขออก
ในทำนองเดียวกันถ้ามีการป้อนข้อมูลHello
แล้วโปรแกรมที่คาดหวังคือ:
72a101a108a108a111a
คุณสามารถตีมันลง 3 ไบต์ (เนื่องจากการส่งออกจะไม่เปลี่ยนการสะสม):
72a101a108aa111a
แต่เดี๋ยวก่อนเราสามารถใช้โอเปอเรเตอร์การเพิ่มเติมประหยัด 2 ไบต์:
72a101a+7aa+3a
การจัดรูปแบบ
เนื่องจากฉันจะใช้ลีดเดอร์บอร์ดย่อย Snippet ของ Martin Büttnerโปรดคุณจัดรูปแบบชื่อดังนี้:
# <Language name>, <length of total output> bytes
จากนั้นคุณสามารถใส่อะไรก็ได้ที่คุณต้องการด้านล่างชื่อ
การชนะ
คุณควรโพสต์ความยาวของโปรแกรมฟูริเยร์ (ผลิตโดยรหัสของคุณ) เพื่อส่งออกไฟล์ข้อความนี้และไฟล์ข้อความนี้ คะแนนของคุณคือความยาวรวมของโปรแกรมฟูริเยร์ทั้งหน่วยเป็นไบต์ (อักขระที่ไม่ใช่ ASCII ไม่ได้ใช้ในฟูริเยร์ดังนั้นจึงไม่ได้สร้างความแตกต่าง)
บุคคลที่มีคะแนนต่ำสุดชนะ หากมีการเสมอกันโปรแกรมที่สั้นที่สุดในหน่วยไบต์จะเป็นผู้ชนะ
เงินรางวัล
เงินรางวัล 500 ค่าตอบแทนนี้เป็นคำตอบใหม่ที่ใช้กับสายของฟังก์ชั่นของฟูริเยร์ ซึ่งรวมถึงตัวแปรลูปและถ้ามีคำสั่ง ฯลฯ คำตอบใหม่นี้จะไม่ได้รับการยอมรับ
ลีดเดอร์บอร์ด
อ้างถึงส่วนการจัดรูปแบบด้านบน:
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>