Вызов
Получив строку в качестве входных данных, бросьте вызов программе Фурье, которая выводит эту строку.
В Фурье нет простого способа вывести строку: вы должны пройти через каждый код символа и вывести его в виде символа.
Фурье
Язык основан на аккумуляторе, глобальной переменной, которая инициализируется в 0 в начале программы. Это используется почти каждым оператором в языке. Только некоторые не меняют значение аккумулятора.
Персонаж из
a
Принимает значение аккумулятора в виде кода ASCII и выводит символ. Не меняет значение аккумулятора.
Если аккумулятор больше 255, программа вернет ошибку. Аналогично, если аккумулятор меньше 0.
Номер из
o
Выводит значение аккумулятора. Не меняет значение аккумулятора.
Увеличение
^
Увеличьте аккумулятор на единицу.
Уменьшить
v
Уменьшить аккумулятор на единицу.
Добавлять
+x
Устанавливает аккумулятор в значение аккумулятора плюс значение х.
вычитать
-x
Устанавливает аккумулятор в значение аккумулятора минус значение х.
Умножение
*x
Устанавливает аккумулятор на значение аккумулятора, умноженное на значение x.
Делить
/x
Устанавливает аккумулятор в значение аккумулятора, деленное на значение х. (Обратите внимание, что это целочисленное деление, поэтому в 1/6
результате 0
)
Число
n
Установите аккумулятор в целое число n.
Заметка
Здесь x
и n
может быть любое целое число от 0
до 2^32-1
включительно.
Больше информации
Вы должны использовать только операторы, описанные выше. Поэтому ваша выведенная программа Фурье недействительна, если она использует любое из следующего (обратите внимание, что следующие награды разрешены для награды):
- Повторите петли
- Если заявления
- переменные
- случайный
- Модульное
- Пользовательский ввод
- Больше / меньше чем операторы
- Операторы равенства
- Очисти экран
- Временная задержка
- Функции даты
Ваша программа может быть либо полной программой, либо функцией, принимая входные данные через STDIN, аргументы файла или функции. Вы также можете принимать информацию прямо из Интернета.
Обратите внимание, что если vv
в вашем коде есть символ, его следует заменить на -2
. То же самое касается ^^
замены его на +2
.
Примеры
Если ввод 7n
, то ожидаемая программа:
55a110a
Но вы можете сохранить один байт с
55a*2a
Другой способ
7o110a
Используя номер вне.
Точно так же, если ввод Hello
, то ожидаемая программа:
72a101a108a108a111a
Вы можете уменьшить его на 3 байта (поскольку вывод не меняет аккумулятор):
72a101a108aa111a
Но подождите, мы можем использовать оператор сложения, сохраняя 2 байта:
72a101a+7aa+3a
Форматирование
Поскольку я буду использовать таблицу лидеров Stack Snippet Мартина Бюттнера, не могли бы вы отформатировать название следующим образом:
# <Language name>, <length of total output> bytes
Затем вы можете поместить все, что вы хотите под заголовком.
выигрыш
Вы должны опубликовать длину программ Фурье (созданных вашим кодом) для вывода этого текстового файла и этого текстового файла . Ваша оценка - это общая длина обеих программ Фурье в байтах (не-ASCII-символы не используются в Фурье, поэтому это не имеет значения).
Человек с самыми низкими баллами побеждает. Если есть связь, побеждает самая короткая программа в байтах.
премия
Эта награда в 500 повторений предназначена для нового ответа, который играет на струнах с использованием любой из функций Фурье. Сюда входят переменные, циклы и операторы if и т. Д. Этот новый ответ не будет принят.
Leaderboard
Обратитесь к разделу форматирования выше:
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>
источник
Ответы:
Python, 14307118 байт
601216 для Гамлета + 13705902 для Бытия = 14307118
Определенно есть некоторые senarios, при которых это решение не является оптимальным, например, для
1111
, где оно будет выводить1111o
в отличие от11oo
. Тем не менее, я думаю, что это почти оптимально.Изменить: Сохранение нескольких байтов путем улучшения
0o0o
до0oo
.Имя файла, содержащего входные данные, поступает в STDIN, выводится в STDOUT.
Результаты проверены официальным переводчиком.
источник
> <>, 14310665 байт
601398 для деревни + 13709267 для генезиса
Это все еще в стадии разработки и занимает много времени.
источник
Java, 14307140 байт
Гамлет - 601 218
Бытие - 13 705 922
Идея в том, чтобы сделать всю работу заранее, составив карту персонажа -> персонажа. Тогда вы можете просто перебрать и взять самые короткие строки.
Для цифр нужно сделать небольшое исключение, поэтому я проверяю их в основном цикле. Тем не менее, он по-прежнему быстр и обрабатывает тестовый набор большего размера за несколько секунд. Возможно, мне удастся настроить этот раздел еще на пару байтов, но я уверен, что он близок к оптимальному.
Ввод - это имя файла в качестве аргумента. Вывод записывается в файл
inputFilename_out.4
, а количество символов отправляется в STDOUT.Это 1737 байт для тай-брейка, полностью безглого. Я могу играть в гольф много, если нужно, но все равно будет немного большим.
источник
01
, я считаю, это выводит01o
, что не правильно.else
предложении основного цикла вы выбираете между использованием фактического значения аккумулятора и значения символа предыдущего символа. Вы не можете сделать последний выбор, если они разные, потому что это означает, что вы использовалиo
время до того, как накопитель не содержит значения предыдущего символа.PHP, 14307118 байт
601 216 (Гамлет) + 13 705 902 (Библия)
Выход Фурье для Гамлета
Это работает следующим образом:
источник