var QUESTION_ID=188988;
var OVERRIDE_USER=53748;
var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;function answersUrl(d){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(d,e){return"https://api.stackexchange.com/2.2/answers/"+e.join(";")+"/comments?page="+d+"&pagesize=100&order=asc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){answers.push.apply(answers,d.items),answers_hash=[],answer_ids=[],d.items.forEach(function(e){e.comments=[];var f=+e.share_link.match(/\d+/);answer_ids.push(f),answers_hash[f]=e}),d.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(d){d.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),d.has_more?getComments():more_answers?getAnswers():process()}})}getAnswers();var SCORE_REG=function(){var d=String.raw`h\d`,e=String.raw`\-?\d+\.?\d*`,f=String.raw`[^\n<>]*`,g=String.raw`<s>${f}</s>|<strike>${f}</strike>|<del>${f}</del>`,h=String.raw`[^\n\d<>]*`,j=String.raw`<[^\n<>]+>`;return new RegExp(String.raw`<${d}>`+String.raw`\s*([^\n,]*[^\s,]),.*?`+String.raw`(${e})`+String.raw`(?=`+String.raw`${h}`+String.raw`(?:(?:${g}|${j})${h})*`+String.raw`</${d}>`+String.raw`)`)}(),OVERRIDE_REG=/^Override\s*header:\s*/i;function getAuthorName(d){return d.owner.display_name}function process(){var d=[];answers.forEach(function(n){var o=n.body;n.comments.forEach(function(q){OVERRIDE_REG.test(q.body)&&(o="<h1>"+q.body.replace(OVERRIDE_REG,"")+"</h1>")});var p=o.match(SCORE_REG);p&&d.push({user:getAuthorName(n),size:+p[2],language:p[1],link:n.share_link})}),d.sort(function(n,o){var p=n.size,q=o.size;return p-q});var e={},f=1,g=null,h=1;d.forEach(function(n){n.size!=g&&(h=f),g=n.size,++f;var o=jQuery("#answer-template").html();o=o.replace("{{PLACE}}",h+".").replace("{{NAME}}",n.user).replace("{{LANGUAGE}}",n.language).replace("{{SIZE}}",n.size).replace("{{LINK}}",n.link),o=jQuery(o),jQuery("#answers").append(o);var p=n.language;p=jQuery("<i>"+n.language+"</i>").text().toLowerCase(),e[p]=e[p]||{lang:n.language,user:n.user,size:n.size,link:n.link,uniq:p}});var j=[];for(var k in e)e.hasOwnProperty(k)&&j.push(e[k]);j.sort(function(n,o){return n.uniq>o.uniq?1:n.uniq<o.uniq?-1:0});for(var l=0;l<j.length;++l){var m=jQuery("#language-template").html(),k=j[l];m=m.replace("{{LANGUAGE}}",k.lang).replace("{{NAME}}",k.user).replace("{{SIZE}}",k.size).replace("{{LINK}}",k.link),m=jQuery(m),jQuery("#languages").append(m)}}
body{text-align:left!important}#answer-list{padding:10px;float:left}#language-list{padding:10px;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="https://cdn.sstatic.net/Sites/codegolf/primary.css?v=f52df912b654"> <div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><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><table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
void foo(char *c, size_t len)
допустимо ли использование одного буфера ввода / вывода и длины и не имеет никакого возвращаемого значения, просто побочный эффект на объекте, на который он имеет указатель.Ответы:
Malbolge , 20775 и 2334 байта
Возможно, я никого не побил этим, но это было невероятно весело.
Попробуйте онлайн!
Если в какой-то момент задача не требует остановки (например, eof), она становится довольно тривиальной, забивая 2334 байта :
Попробуйте онлайн!
объяснение
Меня попросили объяснить, как работает программа. Я выберу второй вариант, так как его легче объяснить, чем первый, но способ, которым обе эти работы действительно похожи.
Давайте начнем с расшифровки кода. Как кто-то в комментариях сделал это, прежде чем я начал работать над объяснением, поэтому я действительно советую вам проверить это.
Это не делает чтение программы более простым, как можно было бы сказать, но прежде чем мы перейдем непосредственно к коду, давайте рассмотрим основы Malbolge.
Виртуальная машина основана на trits ( три- Nary цифры с ). Каждое машинное слово имеет ширину в десять тритов, что составляет от 0 до 2222222222t (= 59048d). Каждая позиция памяти содержит машинное слово; адреса тоже шириной в одно машинное слово. И данные, и код находятся в одном и том же пространстве памяти.
Существует три регистра, каждый из которых содержит одно машинное слово, изначально 0: кодовый регистр C, который является указателем на инструкцию, которая должна быть выполнена, регистр данных D, используемый для манипулирования данными, и аккумулятор A, также используемый несколькими инструкции по манипулированию данными.
Если выполняемая инструкция не находится в диапазоне 33-126, выполнение прекращается (в этом случае ссылочный интерпретатор зависает из-за ошибки). В противном случае, чтобы определить фактическую команду для выполнения, значение, на которое указывает регистр C, добавляется в сам регистр C, а результат делится на 94, принимая остаток.
Вот таблица всех возможных инструкций.
Теперь, когда код более понятен, и на самом деле можно сказать, что там происходит, мы можем перейти к общему представлению о том, что там происходит.
Без каких-либо скачков программирование Malbolge в значительной степени тривиально. Тем не менее, когда используются переходы, перед повторным выполнением этого кода необходимо выполнить задачу дешифрования. Каждый раз, когда выполняется инструкция, она сразу становится зашифрованной, поэтому она не ведет себя так, как раньше.
Чтобы проиллюстрировать обходной путь, давайте посмотрим на нормализованную программу Cat Malbolge:
Итак, как вы можете видеть, во второй строке у нас есть
/
и<
инструкции, касающиеся ввода-вывода. Используя тот факт, чтоC
регистр является указателем команды, мы можем изменить его, используяi
инструкцию, эффективно создающую ветку. Однако, прежде чем произойдет переход, нам нужно расшифровать инструкции, которые всего за несколько циклов считывают и записывают вывод в TTY и из него, в сочетании с переходом. Поскольку не существует реального способа эффективного хранения констант, нам нужно встроить много не связанных инструкций и использовать их значение для вычисления других необходимых констант (используя тот факт, что Malbolge не разделяет программу и данные)Примечание. Части этого ответа были взяты со страницы Esolang wiki Malbolge, лицензированной по ссылке CC0 - link .
Возможно, вы захотите проверить мой другой ответ с участием Seed
источник
мозговой трах , 6 байтов
Попробуйте онлайн!
На этот раз по-настоящему конкурентный ответ в мозге. :-) Он просто читает из стандартного input (
,
), затем зацикливается, пока чтение символа не равно нулю ([
), записывает чтение символа дважды (..
) и, наконец, читает новый символ (,
), прежде чем вернуться к началу цикла (]
).Альтернативный 6-байтовый ответ:
Попробуйте онлайн!
источник
Seed ,
60133942388438653848 байтПопробуйте онлайн!
источник
Желе , 1 байт
Полная программа.
Попробуйте онлайн!
источник
Ḥ
ż`F
), в то время как мой не могу поверить)Язык программирования Шекспира ,
139129109106 байт-3 байта благодаря Джо Кингу
Попробуйте онлайн!
Извергает предупреждения и завершается с ошибкой. Смирись с этим.
источник
Haskell ,
151413 байтПопробуйте онлайн!
или разборчиво:
Объяснение: Списки есть
Monad
в Haskell, и оператор bind>>=
использует aconcatMap
, выполняя функцию, которая берет элемент и возвращает список по каждому элементу списка, а затем объединяет результирующие списки в один большой список.Теперь мы должны построить функцию , которая, учитывая значение, возвращает список этого значения в два раза, что достигается путем
(<$"dd")
, который может быть прочитан как «Возьмите список['d','d']
и заменить каждый элемент с аргументом этой функции."dd"
Может быть любое выражение, которое приводит к списку ровно из двух элементов, но это самое короткое, что я мог придумать.источник
<$
было чем-то, о чем я никогда бы не подумал05AB1E , 2 байта
Хорошо, я сдаюсь. Я не могу найти 1 байт, чтобы решить эту проблему. Нагрузка 2 байта, хотя ..
Попробуйте
ø˜
онлайн или ПопробуйтеøS
онлайн .Попробуйте
ζ˜
онлайн или ПопробуйтеζS
онлайн .Попробуйте
€D
онлайн или Попробуйте€Â
онлайн .Попробуйте
.ι
онлайн.Попробуйте
ºS
онлайн.Попробуйте
·S
онлайн или ПопробуйтеxS
онлайн .Попробуйте
+S
онлайн.Ввод / вывод в виде списка символов.
Объяснение:
Единственная программа, которая работает одинаково в обеих версиях 05AB1E. :)
Эта версия в основном работает так же, как и выше для новой версии. В старой версии вам
‚
сначала понадобится явная пара , а затем вы можете сжать / перенести это. Простоζ
в одномерном списке не будет опциона в устаревшей версии 05AB1E.В новой версии 05AB1E при создании карты все значения в стеке сохраняются в результирующем списке. Принимая во внимание, что с унаследованной версией 05AB1E она сохранит только высшее значение. Именно поэтому они работают только в новой версии.
Этого встроенного еще не было в прежней версии 05AB1E.
В традиционной версии 05AB1E, горизонтальное зеркало встроенное бы
∞
вместоº
. Однако∞S
в устаревшей версии это не работает, поскольку он неявно преобразует список в строку с разделителями новой строки, прежде чем полностью отразить ее ( попробуйте здесь ), после чегоS
они также будут включать эти новые строки.Двойной короткий для
2*
. В новой версии 05AB1E, встроенной в Elixir, это работает только для числовых значений. Однако старая версия 05AB1E была построена на Python, поэтому2*
работает аналогично и повторяет символ.Опять же, поскольку устаревшая версия 05AB1E была построена на Python, это
"a"+"a"
приводит к"aa"
, тогда как+
нельзя использовать для добавления строк в новой версии. (PS: есть дополнение для строк, которое работает в обеих версиях,«
но это , но если дать два аргумента списка, он объединит их вместе вместо объединения каждой строки с одинаковыми индексами, как в программе выше ( попробуйте здесь ).)источник
ζ˜
для современного 05AB1E.ø˜
, поэтому я не стал добавлять его. Я добавил это (так же какøS
/ζS
/xS
).Схема пирамиды ,
229 218213 байтПопробуйте онлайн!
Это определенно может быть короче. Ввод осуществляется через аргументы командной строки. Это соответствует в основном:
С некоторыми оговорками, такими как печать на самом деле обрабатывается как в состоянии цикла, так и в теле цикла.
Альтернатива 215 байт:
Попробуйте онлайн!
источник
set
Может быть сдвинута вверх и влево , не мешая ни с чем. Попробуйте онлайн!Желе , 1 байт
Полная программа печати результата.
Попробуйте онлайн!
Как?
Использует функцию
ошибки...«двойной» атом Jelly,
Ḥ
реализован с помощью Python*
и векторизован, в то время как списки символов Jelly (его единственные «строки») реализованы в виде списков строк Python, которые обычно имеют длину всего один символ - то есть пока мы не поймем, что в Python'blah'*2='blahblah'
...источник
ḤṾV
$ echo -n "Ḥ" | hexdump -C
00000000 e1 b8 a4 |...|
af
,Ḥ
это просто визуальное представление этого байта, см Jellÿ в кодовую страницу (также связанный в заголовке поста).Желе, 1 байт
Попробуйте онлайн!
Простите за неопытность, я только начинаю с Желе. Я считаю, что происходит то, что мы определили двоичную цепочку, которая рассматривает один аргумент как левый и правый аргументы. В этом случае цепочка состоит из "zip; interleave x и y", чередуя входную строку с собой.
Кто-то уже опубликовал 1-байтовое решение Jelly, поэтому я надеюсь, что опубликовать мое решение будет неплохо.
источник
Python,
3425 байтПопробуйте онлайн! Еще один, который возвращает строку вместо списка символов:
Попробуйте онлайн!
источник
lambda i:sum(zip(i,i),())
должен сделать за -9.for i in input():print(i,end=i)
lambda i:''.join(c*2 for c in i)
32 байта, но возвращает строку, а не списокlambda i:''.join(c*2for c in i)
PowerShell ,
292321 байт-6 байт благодаря Андрею Одегову
-2 байт благодаря мази
Попробуйте онлайн!
Принимает ввод через splatting, по сути, делая его массивом символов
источник
8088 Assembly, IBM PC DOS,
1610 байтСобранный байт
xxd
дампаНесобранный список:
Автономный исполняемый файл DOS для ПК. Вход с
STDIN
, вывод на консоль.Интерактивный консольный ввод:
Ввод по трубе:
Оригинальный 16-байтовый ответ:
Собранный байт
xxd
дампаНесобранный список:
Автономный исполняемый файл DOS для ПК. Ввод через командную строку, вывод на консоль.
источник
LODSW
собирается поставить ведущую пространство (20H
) из81H
вAH
котором, конечно , испортит ,LOOP
если это вCH
... облом.sed ,
108 байтПопробуйте онлайн!
Спасибо @manatwork за -2 байта.
источник
s/./&&/g
.JavaScript (Node.js) , 22 байта
Принимает ввод как массив символов.
Попробуйте онлайн!
JavaScript (ES6), 26 байт
Принимает ввод в виде строки.
Попробуйте онлайн!
Альтернативная версия, предложенная @PabloLozano:
Попробуйте онлайн!
Делать это рекурсивным способом также так же долго:
Попробуйте онлайн!
источник
s=>s.replace(/./gs,c=>c+c)
так что это.
также соответствуетjoin('')
Должен позаботиться об этом. С другой стороны, это может привести к нестандартному увеличению выходных данных, что может оказаться недействительным.["aa","bb","cc"]
однако это список строк, ни строка, ни список символов сам по себе. Добавление объединения или сглаживания его в список символов допустимо, но должно быть засчитано в счетчик байтов.Haskell , 8 байт
Попробуйте онлайн!
Любая двухсимвольная строка работает вместо
"x2"
.источник
Брахилог , 2 байта
Попробуйте онлайн!
объяснение
источник
Befunge-98 (PyFunge) , 6 байт
Попробуйте онлайн!
источник
C (gcc) , 40 байтов
Попробуйте онлайн!
Предполагается, что
t
буфер достаточно большой для хранения вывода.Возможно, не соответствует стандартам, но работает на TIO.
источник
J ,
63 байта-3 байта благодаря Ричарду Доновану
Попробуйте онлайн!
K (ок) ,
84 байта-4 байта благодаря ngn!
Попробуйте онлайн!
источник
{2}#
APL (dzaima / APL) , 2 байта SBCS
Функция анонимного молчаливого префикса.
Попробуйте онлайн!
⌿
это "копия" :-)источник
Haskell , 15 байт
Здесь
(:)<*>pure
принимает аргумент и возвращает список, содержащий этот аргумент дважды. Затем>>=
отображает эту функцию на каждую запись входного списка (которая в нашем случае является строкой) и выравнивает результат (список списков) обратно в список.Попробуйте онлайн!
источник
Ржавчина ,
8346 байтПопробуйте онлайн!
Мне это не нравится, но это не обман .
источник
Лабиринт , 12 байт
Попробуйте онлайн!
Я только что открыл этот язык, поэтому этот ответ может быть значительно улучшен ...
источник
","
вместо"",
), я справился одиннадцать - может быть десять или лучше?Stax , 2 байта
Запустите и отладьте его на staxlang.xyz!
Копировать. Zip. Неявная печать.
источник
R ,
5033 байта-17 байт благодаря Джузеппе
Попробуйте онлайн!
источник
gsub('(.)','\\1\\1',a)
?gsub
делает замена регулярного выражения - заменяет однозначное совпадение(.)
в группе захвата 1 на две копии группы захвата 1\\1\\1
для всех возможных совпадений, в отличие от того,sub
которое делает только одно.Сетчатка , 4 байта
Попробуйте онлайн!
Соответствует пустой строке (то есть позиции перед / после каждого символа) и вставляет строку между этим и предыдущим соответствием (которое всегда точно соответствует предыдущему символу; за исключением первого соответствия, где оно ничего не делает).
источник
Java 8, 27 байт
Попробуйте онлайн.
Старый 31 байт отвечает до изменения правил:
ПРИМЕЧАНИЕ. Предложение @EmbodimentOfIgnorance (
\n|.
вместо)(?s).
было отменено, поскольку оно не выполняется, если входные данные содержат\r
. Спасибо за сообщение @ OlivierGrégoire .Попробуйте онлайн.
Объяснение:
Regex объяснение:
источник
(?s).
можно заменить на\n|.
\n|.
Версия не работает корректно с входом"\r"
.(?s).
Версия корректно работает с\r
, хотя.\n
можно печатать, но не входит в диапазон печати ASCII.Pyth , 2 байта
Попробуйте онлайн!
.i
Оставляет две копии входных данных вместе. Ввод неявный, поэтому «полная» версия этой программы будет.iQQ
, гдеQ
ввод программы.источник
MarioLANG ,
23 2017 байтовПопробуйте онлайн!
В отличие от brainfuck, MarioLANG возвращает -1 в EOF, поэтому мы должны увеличить прочитанное значение, прежде чем сравнивать его с нулем, а затем уменьшить, прежде чем печатать. Это, вероятно, самый короткий ответ, возможный в MarioLANG.
источник