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>
Respostas:
WinDbg, 1 byte
Uau! Nunca esperei uma solução de 1 byte do WinDbg!
#
procura um padrão de desmontagem, mas como não há parâmetros, ele retorna apenas a próxima instrução de montagem em qualquer despejo / processo ao qual você esteja conectado. Não tenho certeza da lógica para definir o endereço inicial, mas sim.Saída de amostra:
fonte
Java 7,
333027 bytesPorque Java.
fonte
toString
em uma versão anterior, mas o tipo de retornoString
é maior queint
. Salve os bytes! :]hashCode()
é uma abreviação de aquithis.hashCode()
, portanto, funcionaria apenas como um método de instância, não como um método estático. Nesse caso, você precisaria de código adicional para criar um objeto no chamador. Isso é relevante aqui porque é o código para criar um objeto responsável pelo não-determinismo.()->hashCode()
por 14 bytes. Just sayin ';)MATLAB, 3 bytes
why
fornece respostas para quase qualquer pergunta. Alguns exemplos:Isso é mais curto do que qualquer
rand
função que eu possa pensar.fonte
R, 1 byte
Emite o código fonte da função e um endereço de ponteiro de memória que muda a cada (re) início de R.
fonte
Hã? , 0 bytes
Um programa vazio ainda produz saída. As últimas linhas do interpretador Python que são executadas:
No final de um programa, o intérprete Python imprimirá e
...
, em seguida, criará / abrirá um arquivo de texto chamadoNotes.txt
e gravará uma string que contém o horário atual.fonte
Labirinto , 5 bytes
Imprime
0
ou nada (50% de chance cada).Experimente online!
Há um caso muito específico em que o labirinto exibe um comportamento aleatório:
Se todas essas condições forem atendidas, a direção na qual o IP se move é escolhida (uniformemente) aleatoriamente. A cereja no topo é que essas três condições são impossíveis de atender no fluxo de controle regular, o que significa que, a menos que você modifique o código-fonte em tempo de execução.
(Isso pode parecer um pouco arbitrário, mas na verdade é o comportamento mais consistente que eu poderia encontrar para essas condições, pois normalmente a direção do IP sempre depende da direção anterior, de seus vizinhos e do sinal do topo da pilha, e parecia uma maneira elegante de incluir uma fonte de aleatoriedade no idioma.)
Com a ajuda das instruções de rotação do código fonte (
<^>v
), é possível trazer o IP para essa situação. Um exemplo é visto no topo. O IP inicialmente aponta para o leste e começa no topo. Ov
gira a coluna atual para obtermos:O IP se move junto com essa rotação, de modo que ainda esteja no
v
, apontando para leste. Todas as condições estão preenchidas agora, portanto, o IP aumentará ou diminuirá aleatoriamente. Se subir, o programa termina imediatamente. Se cair, imprime um zero, gira a coluna novamente e termina.Existem outros três programas fazendo uso disso (um que também imprime
0
, outro que imprime00
e outro que imprime000
):(Na verdade, existem muito mais do que outros três programas, porque você também pode usar em
.
vez de!
imprimir bytes nulos ou substituí-lo"
por uma grande variedade de comandos, mas acredito que todos funcionam essencialmente da mesma forma.)fonte
Befunge (-93 e -98), 3 bytes
A
?
execução é enviada em uma direção aleatória. Se ele sobe ou desce, volta para os?
e re-rotula. Se for deixado à esquerda, o programa passa para o@
e, portanto, sai sem imprimir nada. Se der certo, imprime0
(a saída produzida.
quando a pilha está vazia) e sai no@
.fonte
.
no programa que eu estava usando para testar, mas de alguma forma se tornou um,
quando copiei no PPCG. Fixo.Minecraft,
54 bytesUsado digitando no console de um servidor ou em um bloco de comando e fornecendo energia. Pode ser executado a partir da interface de bate-papo, anexando a
/
.Normalmente, isso não faz nada, mas se houver um jogador com o nome de usuário "8" no servidor, eles receberão permissões de operador. Observe que, embora o Minecraft normalmente exija nomes de usuário com 3 caracteres, algumas contas com tamanhos de nome mais curtos foram criadas antes dessa restrição.
A versão que pode ser demonstrada como não determinística sem um desses nomes de usuário ou o risco de conceder permissões a um usuário está aqui:
Exibe uma mensagem para todos, sendo a mensagem o nome de usuário de um jogador aleatório. O
op
comando usa apenas uma string literal, não qualquer script que retorne uma string.O
me
comando não funcionaria realmente para o primeiro exemplo, seria exibido"<your-username> 8"
. Quando executado a partir de um bloco de comando, não seria determinístico, pois todos os blocos de comando têm o mesmo "nome de usuário", mas a execução na interface de bate-papo exigiria/
um byte extra.fonte
/
não está incluído na contagem de bytes?help
em um bloco de comando, que é de 4 bytes (e não requer jogos piratas).sh + procps, 1 byte
Esta é a solução mais curta que conheço que funciona através da chamada para executáveis externos.
procps
é o pacote responsável por relatar informações sobre o estado atual do sistema (ps
e amigos) e é instalado na maioria das distribuições Linux por padrão;w
é o comando com o nome mais curto e retorna informações sobre os usuários conectados, mas também algumas informações não determinísticas, como tempo de atividade.fonte
Informar 7, 6 bytes
Este não é um programa válido do Inform 7, pois nem "x" nem "y" foram definidos. Então isso gera um erro.
No entanto, algumas das mensagens de erro do Inform 7 - incluindo esta - são aleatórias. Portanto, o texto impresso é tecnicamente não determinístico.
Algumas saídas possíveis incluem:
fonte
JavaScript, 4 bytes
Uma função que retorna a data / hora atual. Eu acho que esse é o menor tempo possível ...
Explicação
Como isso parece estar causando muita confusão sobre o motivo de sua validade, tentarei explicar.
Em JavaScript, uma entrada de função é válida se puder ser atribuída a uma variável e chamada como uma função. Por exemplo, esta função é uma entrada válida:
Porque é uma função que pode ser atribuída a uma variável assim:
E depois corra
f()
quantas vezes for necessário. A cada vez, ele retorna a cadeia de data / hora atual, que foi considerada não determinística pelo OP.Essa função de seta ES6 também é válida:
Ele pode ser atribuído com e
f=_=>Date()
, em seguida, executadof()
como o outro.Agora, aqui está outra entrada válida:
Por quê? Porque, assim como as outras duas entradas, ela pode ser atribuída com
f=Date
e depois chamada comf()
, retornando exatamente a mesma coisa que as outras duas. Tente:Mostrar snippet de código
fonte
Date()
invocar a função?Date
é uma função que, quando chamada sem entradas, produz a data / hora atual._=>Date()
é uma entrada claramente válida que faz exatamente a mesma coisa, assimDate
como uma entrada válida.Date
para o console JavaScript do meu navegador produz a saída determinista, ele sempre produz este:function Date() { [native code] }
. Você provavelmente quer dizerDate()
6 bytes.Bash (procps-ng), 2 bytes
$$
também é uma solução.fonte
w
for , é mais curto e também vem de procps.Python 2, 11 bytes
fonte
id(0)
, no entanto. :)Pitão, 2 bytes
Explicação:
É que, quando
O
tem0
como argumento, ele simplesmente retorna um ponto flutuante aleatório entre0
e1
, exclusivo.Vamos fazê-lo apenas para o inferno!
Além disso, parece que isso pode ser meio retro (graças a 34718 / mbomb007):
Pitão, 2 bytes
Explicação:
Experimente esta versão boooooooooooooooring
>:(
fonte
PowerShell,
42 bytes(riscado 4 ainda parece 4 )
Esse é o alias para o
Get-Process
qual produzirá a listagem do processo atual como uma tabela, incluindo identificadores, memória privada, tempo de CPU, etc.Execute-o através de algo como o seguinte:
fonte
Zsh, 5 bytes
Imprime PID.
fonte
Commodore 64 Básico, 4 bytes
Substituição PETSCII:
|
=SHIFT+Y
A página zero de um Commodore 64 é uma área de 256 bytes de memória que pode ser acessada mais rapidamente que o restante da RAM. Conseqüentemente, programas (como o intérprete BASIC) os usam para dados acessados com freqüência, e a própria CPU armazena aqui parte de seu estado interno. O conteúdo está sujeito a alterações sem aviso prévio.
O programa BASIC acima, não destruído, é
1 SYS 0
, ie. transferir a execução para o local da memória 0. Isso inicia a execução da página zero como código. Normalmente, quando o intérprete BASIC começa a executar um programa, os primeiros 16 bytes sãoentão
SYS 0
executaria o seguinteO resultado geral é gerar o
READY.
prompt do BASIC e retornar o controle ao usuário. No entanto, o local da memória 0x00 é o registro de direção de E / S da CPU e o local de memória 0x01 é o registro de endereço de E / S da CPU. Se você fez algo que as altera antes de executar o programa, os resultados podem ser imprevisíveis, desde a saída de lixo até o bloqueio do computador (o 0x22 geralmente contido no local de memória 0x07, se executado como uma instrução, é umHALT
código de operação não documentado ) .Como alternativa, um programa mais confiável imprevisível é o de quatro bytes
Imprime o tempo decorrido, em instantes (1/60 de segundo), desde a inicialização do sistema.
fonte
05AB1E , 2 bytes
Experimente online!
Emite microssegundos atuais do relógio interno da máquina executora.
Ou você poderia fazer algo assim ...
05AB1E , 3 bytes
Experimente online!
Gera um alfabeto minúsculo aleatoriamente aleatório.
Ou isso também funciona:
Experimente online!
Produz uma letra aleatória do alfabeto.
Ou isso também funciona e é mais legal:
05AB1E , 9 bytes
Experimente online!
Produz aleatoriamente um destes:
fonte
BrainfuckX e poliglota de script pequeno (etc) - 2 bytes
? - Aleatorizar o valor na célula atual
. - Enviar célula atual para stdout
fonte
C,
2521 bytesObrigado ao pseudonym117 por salvar 4 bytes.
Compilado com
gcc -o test lol.c
(sim, sou bastante original com o nome do meu arquivo ...), e executei com./test
.Ele faz o que diz: imprime o caractere correspondente ao endereço de memória de
i
, definido em tempo de execução, portanto deve ser não determinístico.fonte
&
como o valor de uma variável na pilha não está definido? 2. Você tem um número constante de coisas na pilha; o endereço da memória éi
constante?i
torna-se o que normalmente é chamadoargc
, então você tem razão, sempre será 1, a menos que haja mais argumentos. Não acredito que não me lembrei disso. Ainda não sei por que o local muda, mas se funcionar, ele funcionará.putchar
porreturn
main(){printf("%d");}
Python 2, 29 bytes
Infelizmente, não é a primeira vez que se escreve código em um smartphone.
fonte
Perl, 5 bytes
Produz o ID do processo e uma nova linha.
fonte
Ruby , 3 bytes
Experimente online!
Imprime a identificação do processo.
fonte
Pyke, 1 byte
Experimente aqui!
Mostra a hora atual
fonte
C89 com GCC / Clang, 20 bytes
A outra solução C apenas é segmentada sempre que criada com GCC ou Clang. Isso, no entanto.
Que se parece com:
Um monte de lixo não imprimível, mas não é determinístico!
fonte
puts
seu endereço fornece 1 e, quando n é 2,puts
seu endereço, 2). Adicionar 1 ao endereço de n, que deve apontar para uma largura de 4 bytesint
, fornece um endereço de lixo eletrônico com um valor de lixo eletrônico armazenado ali com um número muito certo de bytes até o próximo byte NUL. Esse comportamento é reproduzível entre o GCC e o Clang e completamente além de mim. Acho que vou perguntar no StackOverflow.n
ainda é inicializado com o que normalmente é chamado,argc
que está0
no seu caso de teste geral; portanto&n
,puts
obtém um ponteiro bastante determinístico para um byte '\ 0', resultando em uma string vazia (assumindo o tamanho do ponteiro == tamanho inteiro e tudo mais) .&n+1
no entanto, é o endereço do que normalmente é chamadoargv
(pelo menos nas ABIs que passam parâmetros na pilha na ordem inversa, em vez de registradores, e com uma pilha que cresce de alto para baixo), que, assumindo ASLR, deve ser um ponteiro diferente a cada Tempo.PHP, 12 bytes
Produz um ID exclusivo com
583f4da627ee3
base no horário atual em microssegundos. ↑fonte
<?=time();
<- 10 bytes.uniqid()
é 1.000.000 vezes mais indeterminada do quetime()
;)Groovy, 9 bytes
{print{}}
Saídas:
Script1$_run_closure1@2c8ec01c
Como ele gera o endereço de memória do fechamento, não é determinístico.
fonte
groovy Script1.groovy
, eu recebo um erro:Ambiguous expression could be either a parameterless closure expression or an isolated open code block;
. Como eu uso isso?Emotinomicon, 15 bytes
Explicação:
fonte
Borland C no Windows, 12 bytes
Eu o reescrevi porque eles dizem que é possível usar uma função. O compilador não verificou o argumento, então compile-o; mas coloca ver um endereço 'ninguém' sabe e começa a imprimir qual ponto esse endereço até encontrar o byte 0x00. Pode não ser bom se esse endereço estiver com memória insuficiente reservada para o programa, mas aqui imprima algo
fonte
argv
, uma vez que o compilador provavelmente chamaria printf com o segundo argumento do main ainda nesse registro. É exatamente o que acontece com o gcc6.2 direcionado ao Linux: veja o código fonte + asm no Godbolt compiler explorer : main não toca no RSI antescall printf
.argv
está na pilha, mas não no topo. Seu endereço é afetado pela pilha ASLR, no entanto, para que funcione. Isso funcionaria menos bem com-m32
. Você provavelmente sempre obteria zero, poismain
precisa manter a pilha alinhada para que o slot acima da string de formato possa ser uma nova memória da pilha que nunca foi tocada (e provavelmente sempre é zero, pois o kernel evita vazamentos de informações ao zerar as páginas) páginas do espaço do usuário cheias de dados antigos).Linguagem do bebê , 0 bytes
Não enviei isso originalmente porque achei que a pergunta foi pós-datada. Eu estava errado; o idioma teve um intérprete criado a tempo. Também é provavelmente a solução de 0 byte menos barata que eu já vi (já que um programa de 0 byte é especificado para fazer exatamente o que o programa pede, e não para enganar os desafios do golfe).
Baby Language é especificado para ignorar o programa fornecido e fazer algo aleatoriamente. (O intérprete vinculado na página da Esolang gera um programa legal aleatório de BF e o executa.) Isso parece ser o ajuste perfeito para esse desafio.
fonte