Défi
Étant donné une chaîne en entrée, faites défiler le programme Fourier qui produit cette chaîne.
Dans Fourier, il n'y a pas de moyen facile de sortir une chaîne: vous devez parcourir chaque code de caractère et le sortir en tant que caractère.
Fourier
Le langage est basé sur un accumulateur, une variable globale qui est initialisée à 0 au début du programme. Ceci est utilisé par presque tous les opérateurs de la langue. Seuls certains ne modifient pas la valeur de l'accumulateur.
Personnage sorti
a
Prend la valeur de l'accumulateur comme code ASCII et sort le caractère. Ne modifie pas la valeur de l'accumulateur.
Si l'accumulateur est supérieur à 255, le programme renverra une erreur. De même si l'accumulateur est inférieur à 0.
Numéroter
o
Sort la valeur de l'accumulateur. Ne modifie pas la valeur de l'accumulateur.
Augmenter
^
Augmentez l'accumulateur d'une unité.
Diminution
v
Diminuez l'accumulateur d'une unité.
Ajouter
+x
Définit l'accumulateur à la valeur de l'accumulateur plus la valeur de x.
Soustraire
-x
Définit l'accumulateur à la valeur de l'accumulateur moins la valeur de x.
Multiplier
*x
Définit l'accumulateur à la valeur de l'accumulateur multipliée par la valeur de x.
Diviser
/x
Définit l'accumulateur à la valeur de l'accumulateur divisée par la valeur de x. (Notez que c'est une division entière, donc cela 1/6
donne 0
)
Nombre
n
Réglez l'accumulateur sur l'entier n.
Remarque
Ici, x
et n
peut être n'importe quel entier de 0
à 2^32-1
inclusif.
Plus d'information
Vous ne devez utiliser que les opérateurs décrits ci-dessus. Par conséquent, votre programme Fourier généré n'est pas valide s'il utilise l'un des éléments suivants (notez que les opérateurs suivants sont autorisés pour la prime):
- Répéter les boucles
- Si les déclarations
- Variables
- au hasard
- Modulo
- Entrée utilisateur
- Supérieur / inférieur aux opérateurs
- Opérateurs d'égalité
- Écran propre
- Temporisation
- Fonctions de date
Votre programme peut être un programme complet ou une fonction, prenant en entrée via STDIN, un fichier ou des arguments de fonction. Vous pouvez également saisir des informations directement depuis Internet.
Notez que s'il y a un vv
dans votre code, vous devez le remplacer par -2
. Il en va de même pour le ^^
remplacer par +2
.
Exemples
Si l'entrée est 7n
, alors le programme attendu est:
55a110a
Mais vous pouvez enregistrer un octet avec
55a*2a
Une autre façon est
7o110a
Utilisation du numéro.
De même, si l'entrée est Hello
, alors le programme attendu est:
72a101a108a108a111a
Vous pouvez jouer au golf de 3 octets (car la sortie ne change pas l'accumulateur):
72a101a108aa111a
Mais attendez, nous pouvons utiliser l'opérateur d'addition, économisant 2 octets:
72a101a+7aa+3a
Formatage
Parce que je vais utiliser le classement Stack Snippet de Martin Büttner, veuillez formater le titre comme suit:
# <Language name>, <length of total output> bytes
Ensuite, vous pouvez mettre tout ce que vous souhaitez sous le titre.
Gagnant
Vous devez publier la longueur des programmes Fourier (produits par votre code) pour sortir ce fichier texte et ce fichier texte . Votre score est la longueur combinée des deux programmes Fourier en octets (les caractères non ASCII ne sont pas utilisés dans Fourier, donc cela ne fait pas vraiment de différence).
La personne avec les scores les plus bas gagne. S'il y a égalité, le programme le plus court en octets l'emporte.
Prime
Cette prime de 500 répétitions est pour une nouvelle réponse qui joue les cordes en utilisant l'une des fonctions de Fourier. Cela inclut les variables, les boucles et les instructions if, etc. Cette nouvelle réponse ne sera pas acceptée.
Classement
Reportez-vous à la section de mise en forme ci-dessus:
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>