Desafio
Dada uma string como entrada, jogue golfe no programa Fourier que produz essa string.
No Fourier, não há uma maneira fácil de gerar uma string: você precisa passar por cada código de caractere e emiti-lo como caractere.
Fourier
O idioma é baseado em um acumulador, uma variável global que é inicializada como 0 no início do programa. Isso é usado por quase todos os operadores no idioma. Apenas alguns não alteram o valor do acumulador.
Personagem fora
a
Pega o valor do acumulador como o código ASCII e gera o caractere. Não altera o valor do acumulador.
Se o acumulador for maior que 255, o programa retornará um erro. Da mesma forma, se o acumulador for menor que 0.
Número fora
o
Emite o valor do acumulador. Não altera o valor do acumulador.
Aumentar
^
Aumente o acumulador em um.
Diminuir
v
Diminua o acumulador em um.
Adicionar
+x
Define o acumulador para o valor do acumulador mais o valor de x.
Subtrair
-x
Define o acumulador para o valor do acumulador menos o valor de x.
Multiplicar
*x
Define o acumulador como o valor do acumulador multiplicado pelo valor de x.
Dividir
/x
Define o acumulador com o valor do acumulador dividido pelo valor de x. (Observe que essa é a divisão inteira, portanto, 1/6
resulta em 0
)
Número
n
Defina o acumulador para o número inteiro n.
Nota
Aqui, x
e n
pode ser qualquer número inteiro de 0
até 2^32-1
inclusivo.
Mais Informações
Você deve usar apenas os operadores descritos acima. Portanto, seu programa Fourier emitido é inválido se usar qualquer um dos seguintes itens (observe que os seguintes operadores são permitidos para a recompensa):
- Repetir loops
- Se as declarações
- Variáveis
- Aleatória
- Módulo
- Entrada do Usuário
- Maior / menor que operadores
- Operadores de igualdade
- Limpar tela
- Atraso de tempo
- Funções de data
Seu programa pode ser um programa completo ou uma função, recebendo entrada via STDIN, um arquivo ou argumentos de função. Você também pode receber informações diretamente da Internet.
Observe que, se houver um vv
no seu código, você deve substituí-lo por -2
. O mesmo vale para ^^
substituí-lo por +2
.
Exemplos
Se a entrada for 7n
, o programa esperado é:
55a110a
Mas você pode salvar um byte com
55a*2a
Outra maneira é
7o110a
Usando número para fora.
Da mesma forma, se a entrada for Hello
, o programa esperado é:
72a101a108a108a111a
Você pode reduzir em 3 bytes (porque a saída não altera o acumulador):
72a101a108aa111a
Mas espere, podemos usar o operador de adição, economizando 2 bytes:
72a101a+7aa+3a
Formatação
Como usarei o cabeçalho de snippet de pilha de Martin Büttner, você poderia formatar o título da seguinte forma:
# <Language name>, <length of total output> bytes
Em seguida, você pode colocar o que quiser abaixo do título.
Ganhando
Você deve postar o comprimento dos programas Fourier (produzidos pelo seu código) para gerar esse arquivo de texto e esse arquivo de texto . Sua pontuação é o comprimento combinado dos dois programas de Fourier em bytes (caracteres não ASCII não são usados no Fourier, portanto, isso realmente não faz diferença).
A pessoa com as pontuações mais baixas ganha. Se houver um empate, o programa mais curto em bytes vence.
Recompensa
Esta recompensa de 500 representantes é para um novo resposta que joga as cordas usando qualquer uma das funções de Fourier. Isso inclui variáveis, loops e instruções if etc. Esta nova resposta não será aceita.
Entre os melhores
Consulte a seção de formatação acima:
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>