function answersUrl(a){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(a,b){return"https://api.stackexchange.com/2.2/answers/"+b.join(";")+"/comments?page="+a+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(a){answers.push.apply(answers,a.items),answers_hash=[],answer_ids=[],a.items.forEach(function(a){a.comments=[];var b=+a.share_link.match(/\d+/);answer_ids.push(b),answers_hash[b]=a}),a.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(a){a.items.forEach(function(a){a.owner.user_id===OVERRIDE_USER&&answers_hash[a.post_id].comments.push(a)}),a.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(a){return a.owner.display_name}function process(){var a=[];answers.forEach(function(b){var c=b.body;b.comments.forEach(function(a){OVERRIDE_REG.test(a.body)&&(c="<h1>"+a.body.replace(OVERRIDE_REG,"")+"</h1>")});var d=c.match(SCORE_REG);d?a.push({user:getAuthorName(b),size:+d[2],language:d[1],link:b.share_link}):console.log(c)}),a.sort(function(a,b){var c=a.size,d=b.size;return c-d});var b={},c=1,d=null,e=1;a.forEach(function(a){a.size!=d&&(e=c),d=a.size,++c;var f=jQuery("#answer-template").html();f=f.replace("{{PLACE}}",e+".").replace("{{NAME}}",a.user).replace("{{LANGUAGE}}",a.language).replace("{{SIZE}}",a.size).replace("{{LINK}}",a.link),f=jQuery(f),jQuery("#answers").append(f);var g=a.language;g=jQuery("<a>"+g+"</a>").text(),b[g]=b[g]||{lang:a.language,lang_raw:g,user:a.user,size:a.size,link:a.link}});var f=[];for(var g in b)b.hasOwnProperty(g)&&f.push(b[g]);f.sort(function(a,b){return a.lang_raw.toLowerCase()>b.lang_raw.toLowerCase()?1:a.lang_raw.toLowerCase()<b.lang_raw.toLowerCase()?-1:0});for(var h=0;h<f.length;++h){var i=jQuery("#language-template").html(),g=f[h];i=i.replace("{{LANGUAGE}}",g.lang).replace("{{NAME}}",g.user).replace("{{SIZE}}",g.size).replace("{{LINK}}",g.link),i=jQuery(i),jQuery("#languages").append(i)}}var QUESTION_ID=101638,ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",OVERRIDE_USER=34718,answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#answer-list,#language-list{padding:10px;width:400px;float:left}table thead{font-weight:800}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="language-list"> <h2>Shortest Solution 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>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr></tbody></table>
Ответы:
WinDbg, 1 байт
Вау! Никогда не ожидал 1-байтовое решение от WinDbg!
#
ищет шаблон дизассемблирования, но, поскольку нет параметров, он просто возвращает следующую инструкцию сборки в любом дампе / процессе, к которому вы подключены. Не уверен в логике установки начального адреса, но это так.Образец вывода:
источник
Java 7,
333027 байтПотому что Java.
источник
toString
в предыдущей версии, но затем возвращаемый тип,String
который длиннее, чемint
. Сохранить байты! :]hashCode()
это сокращение здесьthis.hashCode()
, так что он будет работать только как метод экземпляра, а не как статический метод. В этом случае вам понадобится дополнительный код для создания объекта в вызывающей стороне. Это актуально, потому что это код для создания объекта, который отвечает за недетерминизм.()->hashCode()
для 14 байтов. Просто говори;)MATLAB, 3 байта
why
дает ответы практически на любой вопрос. Несколько примеров:Это короче любой
rand
функции, о которой я могу думать.источник
R, 1 байт
Выводит исходный код функции и адрес указателя памяти, который меняется при каждом (повторном) запуске R.
источник
да? 0 байт
Пустая программа все еще производит вывод. Последние строки интерпретатора Python, которые выполняются:
В конце программы интерпретатор Python напечатает
...
, затем создаст / откроет текстовый файл с именемNotes.txt
и напишет строку, которая содержит текущее время впереди.источник
Лабиринт , 5 байт
Либо печатает,
0
либо ничего (50% шанс каждого).Попробуйте онлайн!
Существует очень специфический случай, когда Лабиринт проявляет случайное поведение:
Если все эти условия выполнены, направление, в котором движется IP, выбирается (равномерно) случайным образом. Суть в том, что эти три условия невозможно выполнить в обычном потоке управления, что означает, если вы не измените исходный код во время выполнения.
(Это может показаться немного произвольным, но на самом деле это наиболее последовательное поведение, которое я мог найти для этих условий, поскольку обычно направление IP всегда зависит от предыдущего направления, его соседей и знака вершины стека, и это казалось изящным способом включить источник случайности в язык.)
С помощью инструкций ротации исходного кода (
<^>v
) можно привести IP в эту ситуацию. Один такой пример виден сверху. IP изначально указывает на восток и начинается сверху. Вv
вращает текущий столбец так , что мы получаем:IP движется вместе с этим вращением, так что он все еще на
v
, указывая на восток. Теперь все условия выполнены, поэтому IP будет либо повышаться, либо понижаться случайным образом. Если он повышается, программа немедленно завершается. Если он падает, он печатает ноль, снова вращает столбец, а затем завершается.Есть три другие программы, использующие это (одна, которая также печатает
0
, одна, которая печатает,00
и другая, которая печатает000
):(На самом деле существует гораздо больше, чем три другие программы, потому что вы также можете использовать
.
вместо!
печати нулевых байтов или заменить"
это большим количеством разнообразных команд, но я считаю, что они все работают по существу одинаково.)источник
Befunge (-93 и -98), 3 байта
?
Передает исполнение в случайном направлении. Если он поднимается или опускается, он возвращается к?
и возвращается. Если он уходит влево, программа оборачивается@
и, таким образом, завершает работу, ничего не печатая. Если он идет правильно, он печатает0
(вывод, полученный,.
когда стек пуст), а затем выходит на@
.источник
.
в программе, которую я использовал для тестирования, но каким-то образом стало,,
когда я скопировал его в PPCG. Исправлена.Minecraft,
54 байтаИспользуется, набрав в консоли сервера или командном блоке и предоставив ему питание. Можно запустить из интерфейса чата, добавив a
/
.Обычно это ничего не делает, но если на сервере есть игрок с именем пользователя «8», ему будут предоставлены разрешения оператора. Обратите внимание, что, хотя Minecraft обычно требует, чтобы имена пользователей были длиной 3 символа, некоторые учетные записи с более короткими именами были созданы до этого ограничения.
Версия, которая может быть продемонстрирована как недетерминированная без одного из этих имен пользователей или риска предоставления пользователю полномочий оператора, находится здесь:
Отображает сообщение для всех, сообщение является именем пользователя случайного игрока. Команда
op
принимает только строковый литерал, а не скрипт, который возвращает строку.Команда
me
не будет действительно работать для первого примера, она будет отображаться"<your-username> 8"
. При запуске из командного блока это не будет детерминированным, поскольку все командные блоки имеют одно и то же «имя пользователя», но для запуска его из интерфейса чата потребуется/
один дополнительный байт.источник
/
не входит в число байтов?help
в командном блоке, который составляет 4 байта (и не требует пиратских игр).sh + procps, 1 байт
Это самое короткое из известных мне решений, которое работает через вызов внешних исполняемых файлов.
procps
является ответственным пакетом для сообщения информации о текущем состоянии системы (ps
и друзьях) и по умолчанию устанавливается в большинстве дистрибутивов Linux;w
это команда с самым коротким именем, которая возвращает информацию о вошедших в систему пользователях, а также некоторую недетерминированную информацию, например, время работы.источник
Сообщите 7, 6 байтов
Это не действительная программа Inform 7, так как ни "x", ни "y" не были определены. Так что это выдает ошибку.
Тем не менее, некоторые сообщения об ошибках в Inform 7, в том числе и это, рандомизированы. Таким образом, текст, который он печатает, технически недетерминирован.
Несколько возможных выходов включают в себя:
источник
JavaScript, 4 байта
Функция, которая возвращает текущую дату / время. Я думаю, что это самое короткое, что он получит ...
объяснение
Поскольку это, кажется, вызывает много недоразумений относительно того, почему оно действительно, я попытаюсь объяснить.
В JavaScript запись функции действительна, если ее можно присвоить переменной и вызвать как функцию. Например, эта функция является допустимой записью:
Потому что это функция, которая может быть назначена переменной, например:
А затем бегите
f()
столько раз, сколько необходимо. Каждый раз он возвращает текущую строку даты / времени, которая была определена OP как недетерминированная.Эта функция стрелки ES6 также действительна:
Он может быть назначен с помощью
f=_=>Date()
, а затем запустить,f()
как и другой.Теперь вот еще одна действительная запись:
Почему? Поскольку, как и две другие записи, он может быть назначен с,
f=Date
а затем вызван сf()
, возвращая точно то же самое, что и две другие. Попробуй:Показать фрагмент кода
источник
Date()
для вызова функции?Date
- это функция, которая при вызове без ввода выводит текущую дату / время._=>Date()
является явно действительной записью, которая делает то же самое, такDate
и действительной записью.Date
на консоль JavaScript в браузере производит детерминированный вывод, он всегда производит это:function Date() { [native code] }
. Вы, наверное, имеете в видуDate()
6 байтов.Bash (procps-ng), 2 байта
$$
это тоже решение.источник
w
короче и также происходит от procps.Python 2, 11 байт
источник
id(0)
, хотя. :)Pyth, 2 байта
Объяснение:
Дело в том, что, когда
O
имеет в0
качестве аргумента, он просто возвращает случайное значение с плавающей запятой между0
и1
, исключая.Давайте сделаем это просто ради этого!
Кроме того, кажется, что это может быть что-то вроде ретро (спасибо 34718 / mbomb007):
Pyth, 2 байта
Объяснение:
Попробуйте вместо этого версию boooooooooooooooring
>:(
источник
PowerShell,
42 байта(зачеркнуто 4 по- прежнему выглядит как 4 )
Это псевдоним для
Get-Process
которого будет выведен текущий список процессов в виде таблицы, включая дескрипторы, личную память, время процессора и т. Д.Выполните это через что-то вроде следующего:
источник
Зш, 5 байт
Печатает PID.
источник
Commodore 64 Basic, 4 байта
Замена PETSCII:
|
=SHIFT+Y
Нулевой страницы из Commodore 64 является областью 256 байт памяти , которые могут быть доступны быстрее , чем остальная часть оперативной памяти. Следовательно, программы (такие как интерпретатор BASIC) используют его для часто используемых данных, и сам ЦП хранит здесь часть своего внутреннего состояния. Содержание может быть изменено без предварительного уведомления.
Программа BASIC, приведенная выше, не имеет смысла
1 SYS 0
, т.е. передача выполнения в ячейку памяти 0. Это начинает выполнение нулевой страницы в виде кода. Обычно, когда интерпретатор BASIC начинает выполнение программы, первые 16 байтовтак
SYS 0
выполнил бы следующееОбщий результат - вывод
READY.
приглашения BASIC и возврат управления пользователю. Однако ячейка памяти 0x00 является регистром направления ввода-вывода CPU, а ячейка памяти 0x01 является регистром адреса ввода-вывода CPU. Если вы сделали что-то, что изменяет их перед запуском программы, результаты могут быть непредсказуемыми, начиная с вывода мусора и заканчивая блокировкой компьютера (0x22, обычно содержащийся в ячейке памяти 0x07, если выполняется как инструкция, является недокументированным).HALT
кодом операции) ,Альтернативно, более надежной непредсказуемой программой является четырехбайтовая
Печатает истекшее время в секундах (1/60 секунды) с момента включения системы.
источник
05AB1E , 2 байта
Попробуйте онлайн!
Выводит текущие микросекунды от внутренних часов исполняющей машины.
Или вы могли бы сделать что-то вроде этого ...
05AB1E , 3 байта
Попробуйте онлайн!
Выводит случайным образом перемешанный строчный алфавит.
Или это тоже работает:
Попробуйте онлайн!
Выводит случайную букву из алфавита.
Или это тоже работает и круче
05AB1E , 9 байтов
Попробуйте онлайн!
Выводит случайным образом один из них:
источник
BrainfuckX и маленький скрипт (и т. Д.) Полиглот - 2 байта
? - рандомизировать значение в текущей ячейке
, - Отправить текущую ячейку на стандартный вывод
источник
C
2521 байтСпасибо псевдониму 117 за сохранение 4 байта.
Скомпилирован с
gcc -o test lol.c
(да, я довольно оригинален с именем моего файла ...), и побежал с./test
.Он делает то, что говорит: печатает символ, соответствующий адресу памяти
i
, который определен во время выполнения, поэтому он должен быть недетерминированным.источник
&
поскольку значение переменной в стеке не определено? 2. У вас в стеке постоянное количество вещей, поэтому адрес памятиi
постоянен?i
становится тем, что обычно называетсяargc
, так что вы правы, оно всегда будет равно 1, если нет больше аргументов. Я не могу поверить, что я не помнил это. Я все еще не уверен, почему местоположение изменяется, но если это работает, это работает.putchar
наreturn
main(){printf("%d");}
Python 2, 29 байт
К сожалению, не первый раз пишу код на смартфоне.
источник
Perl, 5 байт
Выводит идентификатор процесса и новую строку.
источник
Рубин , 3 байта
Попробуйте онлайн!
Печатает идентификатор процесса.
источник
Пайк, 1 байт
Попробуй это здесь!
Выводит текущее время
источник
C89 с GCC / Clang, 20 байтов
Другое решение на С каждый раз при сбое с GCC или Clang просто сбивается. Это, правда.
Который выглядит как:
Довольно много непечатного хлама, но он недетерминирован!
источник
puts
его адрес равен 1, а когда n равно 2, тоputs
его адрес дает 2). Добавление 1 к адресу n, который должен указывать на ширину 4 байтаint
, дает адрес нежелательной почты с сохраненным там значением нежелательной почты с очень определенным числом байтов до следующего байта NUL. Это поведение воспроизводимо между GCC и Clang и полностью вне меня. Я думаю, я пойду спросить на StackOverflow.n
еще инициализируется , что обычно называется ,argc
который0
в своем общем тесте, так и с&n
,puts
получает вполне детерминированный указатель на «\ 0» байт , что приводит к пустой строке (предполагается , что размер указателя == целочисленный размер и все такое) ,&n+1
однако это адрес того, что обычноargv
вызывается (по крайней мере, для ABI, которые передают параметры в стеке в обратном порядке вместо регистров и со стеком, который растет от высоких до низких адресов), который, предполагая ASLR, должен быть разным указателем каждый время.PHP, 12 байт
Выводит уникальный идентификатор
583f4da627ee3
на основе текущего времени в микросекундах. ↑источник
<?=time();
<- 10 байт.uniqid()
в 1'000'000 раз больше неопределенных, чемtime()
;)Groovy, 9 байт
{print{}}
Выходы:
Script1$_run_closure1@2c8ec01c
Поскольку он выводит адрес памяти замыкания, он недетерминирован.
источник
groovy Script1.groovy
, я получаю сообщение об ошибке:Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
. Как мне это использовать?Emotinomicon, 15 байт
Объяснение:
источник
Borland C на Windows, 12 байт
Я переписал его, потому что они говорят, что можно использовать одну функцию. Компилятор не проверил аргумент, поэтому скомпилируйте его; но выводит один адрес «никто» не знает и начинает печатать, в какой точке этот адрес, пока не найдет байт 0x00. Это может быть не хорошо, если этот адрес не хватает памяти, зарезервированной для программы, но здесь выведите что-то
источник
argv
, так как компилятор, вероятно, вызовет printf со вторым аргументом main в этом регистре. Это именно то, что происходит с gcc6.2 для Linux: см. Source + asm в проводнике компилятора Godbolt : main раньше не касался RSIcall printf
.argv
находится в стеке, но не на самом верху. Его адрес зависит от стека ASLR, так что это работает. Это будет работать не так хорошо с-m32
. Вы, вероятно, всегда получите ноль, посколькуmain
необходимо поддерживать выравнивание стека, чтобы слот стека над строкой форматирования мог быть свежей стековой памятью, которая никогда не была затронута (и, вероятно, всегда равна нулю, поскольку ядро избегает утечки информации, обнуляя страницы вместо этого предоставления страниц пользовательского пространства, заполненных старыми данными).Baby Language , 0 байт
Я не представил это первоначально, потому что я думал, что это задолго до вопроса. Я ошибался; на языке действительно был создан переводчик во времени. Это также, вероятно, наименее обманчивое 0-байтовое решение, которое я когда-либо видел (учитывая, что 0-байтовая программа указана для выполнения именно того, о чем просит программа, а не для того, чтобы обманывать проблемы игры в гольф).
Детский язык определен, чтобы игнорировать программу, которую он дал, и делать что-то наугад. (Интерпретатор, связанный на странице Esolang, генерирует случайную легальную BF-программу и запускает ее.) Кажется, что она идеально подходит для этой задачи.
источник