Meydan okuma
Girdi olarak bir dize verildiğinde, o dizgeyi çıkaran Fourier programında golf oynayın.
Fourier'de bir dizgeyi çıkarmanın kolay bir yolu yoktur: her karakter kodundan geçmeniz ve bunu bir karakter olarak çıkarmanız gerekir.
Fourier
Dil, programın başlangıcında 0'a ilklendirilen global bir değişken olan bir akümülatöre dayanmaktadır. Bu, dildeki hemen hemen her operatör tarafından kullanılır. Sadece birkaçı akümülatörün değerini değiştirmez.
Karakter
a
Akümülatörün değerini ASCII kodu olarak alır ve karakteri verir. Akümülatörün değerini değiştirmez.
Akümülatör 255'ten büyükse, program bir hata verecektir. Aynı şekilde, akümülatör 0'dan az ise.
Sayı
o
Akümülatörün değerini verir. Akümülatörün değerini değiştirmez.
Artırmak
^
Akümülatörü birer birer arttırın.
Azaltmak
v
Akümülatörü bir azaltın.
Eklemek
+x
Akümülatörü, akümülatör değerine artı x değerine ayarlar.
çıkarmak
-x
Akümülatörü, akümülatörün değerine eksi x değerine ayarlar.
Çarpmak
*x
Akümülatörü, akümülatörün değerine x değeri ile çarpılan değere ayarlar.
bölmek
/x
Akümülatörü, akünün değerine bölerek x değerine ayarlar. (Not: Bu bölünme tamsayıdır, bu yüzden 1/6
sonuçları 0
)
Numara
n
Akümülatörü n tamsayısına ayarlayın.
Not
Burada, x
ve n
herhangi bir tamsayı olabilir 0
için 2^32-1
kapsayıcı.
Daha fazla bilgi
Sadece yukarıda açıklanan operatörleri kullanmalısınız. Bu nedenle, çıkarılan Fourier programınız aşağıdakilerden herhangi birini kullanıyorsa geçersizdir (aşağıdaki operatörlerin lütuf için izin verildiğini unutmayın):
- Döngüleri tekrarla
- Eğer ifadeler
- Değişkenler
- rasgele
- Modülo
- Kullanıcı girişi
- Operatörlerden daha büyük / daha az
- Eşitlik operatörleri
- Temiz ekran
- Zaman gecikmesi
- Tarih fonksiyonları
Programınız, STDIN, bir dosya veya fonksiyon argümanları üzerinden giriş yaparak tam bir program veya fonksiyon olabilir. Ayrıca doğrudan İnternet'ten de giriş yapabilirsiniz.
Bir varsa unutmayın vv
kodunuzda, sen ile değiştirmek gerekir -2
. Aynı şey ^^
, bununla değiştirilir +2
.
Örnekler
Girdi ise 7n
, beklenen program şudur:
55a110a
Ancak bir bayt ile kaydedebilirsiniz.
55a*2a
Başka bir yol
7o110a
Sayı kullanımı.
Benzer şekilde, eğer girdi ise Hello
, beklenen program şudur:
72a101a108a108a111a
3 byte kadar golf oynayabilirsiniz (çünkü çıktı akümülatörü değiştirmez):
72a101a108aa111a
Fakat bekleyin, toplama operatörünü kullanabiliriz, 2 byte tasarruf ederek
72a101a+7aa+3a
Biçimlendirme
Martin Büttner'ın Yığın Snippet lider panosunu kullanacağım için lütfen başlığı şöyle biçimlendirir misiniz:
# <Language name>, <length of total output> bytes
Ardından, istediğiniz herhangi bir şeyi başlığın altına koyabilirsiniz.
Kazanan
Bu metin dosyasını ve bu metin dosyasını çıkarmak için Fourier programlarının uzunluğunu (kodunuz tarafından üretilen) göndermelisiniz . Puanınız her iki Fourier programının bayt cinsinden toplam uzunluğudır (ASCII olmayan karakterler Fourier'de kullanılmaz, bu nedenle gerçekten bir fark yaratmaz).
En düşük puan alan kişi kazanır. Bir bağ varsa, bayt cinsinden en kısa program kazanır.
cömertlik
Bu 500 rep ödül, Fourier'in işlevlerinden herhangi birini kullanarak dizeleri golf yapan yeni bir cevap içindir. Bu değişkenler, döngüler ve eğer ifadeler vs. içeriyorsa.
Liderler Sıralaması
Yukarıdaki biçimlendirme bölümüne bakı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>