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>
la source
Réponses:
Python, 14307118 octets
601216 pour Hamlet + 13705902 pour Genesis = 14307118
Il y a certainement certains sénarios dans lesquels cette solution n'est pas optimale, comme pour
1111
, où elle sortira1111o
par opposition à11oo
. Cependant, je pense que c'est presque optimal.Modifier: enregistré quelques octets en améliorant
0o0o
à0oo
.Le nom du fichier contenant l'entrée est reçu sur STDIN, sorti sur STDOUT.
Résultats vérifiés avec l'interprète officiel.
la source
> <>, 14310665 octets
601398 pour hameau + 13709267 pour genesis
C'est toujours un travail en cours et prend beaucoup de temps à terminer.
la source
Java, 14307140 octets
Hameau - 601218
Genèse - 13 705 922
L'idée ici est de faire tout le travail à l'avance, en faisant une carte de caractère-> caractère. Ensuite, vous pouvez simplement parcourir et saisir les chaînes les plus courtes.
Une petite exception doit être faite pour les chiffres, donc je les vérifie dans la boucle principale. Il est toujours rapide, cependant, et gère le plus grand cas de test en quelques secondes. Je peux peut- être modifier cette section pour quelques octets de plus, mais je suis presque sûr qu'elle est presque optimale.
L'entrée est un nom de fichier comme argument. La sortie est écrite dans un fichier
inputFilename_out.4
et le nombre de caractères est envoyé à STDOUT.Ceci est 1737 octets pour le bris d'égalité, complètement non golfé. Je peux beaucoup jouer au golf si nécessaire, mais ça va quand même être un peu gros.
la source
01
, je crois qu'il sort01o
, ce qui n'est pas correct.else
clause de la boucle principale, vous choisissez entre utiliser la valeur réelle de l'accumulateur et la valeur de caractère du caractère précédent. Vous ne pouvez pas faire ce dernier choix si les deux sont différents, car cela signifie que vous avez utiliséo
le temps précédent et que l'accumulateur ne contient pas la valeur du caractère précédent.PHP, 14307118 octets
601216 (Hameau) + 13705902 (Bible)
Sortie Fourier pour Hamlet
Cela fonctionne comme suit:
la source