Código mais curto para produzir saída não determinística

83

Você precisa produzir uma saída não determinística .

Nesse caso, isso será definido para significar que a saída nem sempre será o mesmo resultado.

Regras:

  • Um gerador de números pseudo-aleatórios que sempre tem a mesma semente não conta.

  • Você pode contar com a execução do programa em um horário diferente (desconhecido) a cada execução.

  • O ID do processo do seu código (se não for corrigido pelo intérprete) pode ser considerado não determinístico.

  • Você pode confiar na aleatoriedade baseada na Web.

  • Seu código pode não receber entrada não vazia. Meta post relacionado .

  • O programa não precisa parar, mas a saída deve ser exibida.

Entre os melhores

mbomb007
fonte
33
@ mbomb007 Em C, existem muitas coisas que são simplesmente comportamentos "indefinidos". Qualquer intérprete pode fazer o que quiser em qualquer situação. Pelo que sabemos, o gcc pode pedir uma pizza para você se você tentar transbordar um número inteiro assinado em uma terça-feira chuvosa, mas fará com que uma truta salte da tela nos outros dias. Portanto, você nunca saberia se é realmente determinístico ou não em uma determinada implementação.
Martin Ender
12
@MartinEnder Não tenho certeza se isso importa. Nós definimos línguas aqui por sua implementação, não pela especificação (como línguas sem uma implementação não é permitido)
Nathan Merrill
2
@MartinEnder Sim, eu concordo com Nathan.
mbomb007
7
Observe que o comportamento indefinido em C geralmente leva a falhas e as falhas no UNIX e Linux levam a arquivos principais que contêm o ID do processo dentro deles. Isso parece estar de acordo com a pergunta atualmente redigida.
5
A menos que eu entenda mal, a pergunta não pede código que aproveite o comportamento indefinido. Ele solicita código que aproveite o comportamento definido para garantir o não determinismo.
WGroleau

Respostas:

110

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:

0:000> #
Search address set to 75959556 
user32!NtUserGetMessage+0xc
75959556 c21000          ret     10h

0:000> #
user32!NtUserGetMessage+0xf 
75959559 90              nop

0:000> #
user32!NtUserMessageCall 
7595955a 90              nop

0:000> #
user32!NtUserMessageCall+0x1 
7595955b 90              nop

0:000> #
user32!NtUserMessageCall+0x2 
7595955c 90              nop

0:000> #
user32!NtUserMessageCall+0x3 
7595955d 90              nop

0:000> #
user32!GetMessageW
7595955e 8bff            mov     edi,edi

0:000> #
user32!GetMessageW+0x2 
75959560 55              push    ebp

0:000> #
user32!GetMessageW+0x3 
75959561 8bec            mov     ebp,esp

0:000> #
user32!GetMessageW+0x5 
75959563 8b5510          mov     edx,dword ptr [ebp+10h]
leite
fonte
9
Uma das respostas mais legais aqui, isso deve conquistar uma solução de "Data atual" na minha opinião.
Magic Octopus Urn
que acima parece que o disassebly, passo a passo do início de alguma função na montagem da CPU 386 intel
RosLuP
60

Java 7, 33 30 27 bytes

int a(){return hashCode();}

Porque Java.

Cutucar
fonte
49
Porque Java. Provavelmente a melhor explicação de Java de todos os tempos.
F. George
5
@carusocomputing que eu tinha toStringem uma versão anterior, mas o tipo de retorno Stringé maior que int. Salve os bytes! :]
Puxão
12
Isso é válido como uma função? hashCode()é uma abreviação de aqui this.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.
15
No Java 8: ()->hashCode()por 14 bytes. Just sayin ';)
Olivier Grégoire
4
@pts Vou basear-me na meta post discutindo a estrutura de envio padrão das postagens. As funções são permitidas por padrão, a menos que o desafio especifique que um programa completo é necessário.
puxão
52

MATLAB, 3 bytes

why

whyfornece respostas para quase qualquer pergunta. Alguns exemplos:

why
The programmer suggested it.

why
To fool the tall good and smart system manager. 

why
You insisted on it.

why
How should I know?

Isso é mais curto do que qualquer randfunção que eu possa pensar.

Stewie Griffin
fonte
33
MATLAB tem um builtin para isso ? Por quê?
ETHproductions
59
@ETHproductions O programador sugeriu
Eddie Curtis
40

R, 1 byte

t

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.

chrki
fonte
36

Hã? , 0 bytes


Um programa vazio ainda produz saída. As últimas linhas do interpretador Python que são executadas:

print "..."
f = open('Notes.txt', 'w')
f.write(time.strftime("%c") + " - The user tried to give me commands again. I still have no idea what they are talking about...\n")

No final de um programa, o intérprete Python imprimirá e ..., em seguida, criará / abrirá um arquivo de texto chamado Notes.txte gravará uma string que contém o horário atual.

mbomb007
fonte
5
De todas as coisas que eu pensava que as pessoas usaria no meu GitHub, eu não acho que um intérprete de linguagem piada seria um: P
Kade
@Kade Na verdade, eu também ia usá-lo para responder a outra pergunta (código mais curto para reproduzir um som, com apenas um byte) - mas a pergunta está encerrada.
Mbomb007
Embora não fosse concorrente, a menos que eu olhasse para o intérprete .NET original, eu acho.
Mbomb007
30

Labirinto , 5 bytes

v
!
@

Imprime 0ou nada (50% de chance cada).

Experimente online!

Há um caso muito específico em que o labirinto exibe um comportamento aleatório:

  • Deve haver uma parede em frente ao ponteiro de instruções e atrás dele.
  • Deve haver um lado esquerdo e direito do ponteiro de instruções.
  • O topo atual da pilha deve ser zero.

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. O vgira a coluna atual para obtermos:

@
v
!

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 imprime 00e outro que imprime 000):

v
@
!

"
>@!

"
>!@

(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.)

Martin Ender
fonte
30

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, imprime 0(a saída produzida .quando a pilha está vazia) e sai no @.


fonte
Não é garantido que isso seja encerrado, mas eu ia postar exatamente isso com +1
Daniel
Você pode alterar a vírgula para um período para gerar 0 como um número em vez de um caractere nulo (valor ASCII 0). +1
MildlyMilquetoast
Estava .no programa que eu estava usando para testar, mas de alguma forma se tornou um ,quando copiei no PPCG. Fixo.
7
@Dopapp, ele termina quase com certeza, porém, com probabilidade 1. Eu aceitaria isso como uma garantia;)
Oliphaunt 1/16/16
@JamesHolderness Acho que você pode fazer isso em 1. Não tenho certeza se isso conta ...
MildlyMilquetoast
29

Minecraft, 5 4 bytes

op 8

Usado 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:

me @r

Exibe uma mensagem para todos, sendo a mensagem o nome de usuário de um jogador aleatório. O opcomando usa apenas uma string literal, não qualquer script que retorne uma string.

O mecomando 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.

Pavel
fonte
Portanto, /não está incluído na contagem de bytes?
Esolanging Fruit
11
@ Challenger5 A barra é opcional nos blocos de comandos, não permitida no console do servidor e obrigatória na interface de bate-papo.
Pavel
2
Na verdade, deve ser 4 bytes + 2 blocos (bloco de comando e de origem redstone), ou 6 blytes
RudolfJelin
2
@RudolphJelinek Você pode executá-lo no console sem blocos de comando.
Pavel
1
Outra opção não determinística seria helpem um bloco de comando, que é de 4 bytes (e não requer jogos piratas).
Pokechu22
21

sh + procps, 1 byte

w

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 ( pse 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
21

Informar 7, 6 bytes

x is y

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:

Problema. A frase 'x é y' parece dizer que duas coisas são iguais - estou lendo 'x' e 'y' como duas coisas diferentes e, portanto, não faz sentido dizer que uma é a outra: seria como dizer que 'Adams é Jefferson'. Tudo bem se a segunda coisa fosse o nome de um tipo, talvez com propriedades: por exemplo, 'Virginia é uma sala iluminada' diz que algo chamado Virginia existe e que é uma 'sala', que eu conheço sobre, combinado com uma propriedade chamada 'lighted', que eu também conheço.

Problema. A frase 'x é y' parece dizer que duas coisas são iguais - estou lendo 'x' e 'y' como duas coisas diferentes e, portanto, não faz sentido dizer que uma é a outra: seria como dizer que 'Adão é Eva'. Tudo bem se a segunda coisa fosse o nome de um tipo, talvez com propriedades: por exemplo, 'Terra de Nod é uma sala iluminada' diz que algo chamado Terra de Nod existe e que é uma 'sala', que é um tipo que eu conheço, combinado com uma propriedade chamada 'iluminada' que eu também conheço.

Problema. A frase 'x é y' parece dizer que duas coisas são iguais - estou lendo 'x' e 'y' como duas coisas diferentes e, portanto, não faz sentido dizer que uma é a outra: seria como dizer que "Clark Kent é Lex Luthor". Tudo bem se a segunda coisa fosse o nome de um tipo, talvez com propriedades: por exemplo, 'Metropolis é uma sala iluminada' diz que algo chamado Metropolis existe e que é uma 'sala', que é um tipo que eu conheço sobre, combinado com uma propriedade chamada 'lighted', que eu também conheço.

Problema. A frase 'x é y' parece dizer que duas coisas são iguais - estou lendo 'x' e 'y' como duas coisas diferentes e, portanto, não faz sentido dizer que uma é a outra: seria como dizer que 'Ésquilo é Eurípides'. Tudo bem se a segunda coisa fosse o nome de um tipo, talvez com propriedades: por exemplo, 'O submundo é uma sala iluminada' diz que algo chamado Submundo existe e que é uma 'sala', que é um tipo que eu conheço sobre, combinado com uma propriedade chamada 'lighted', que eu também conheço.

Draconis
fonte
7
Até as mensagens de erro são detalhadas!
Destructible Lemon
21

JavaScript, 4 bytes

Date

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:

function(){return Date()}

Porque é uma função que pode ser atribuída a uma variável assim:

f=function(){return Date()}

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:

_=>Date()

Ele pode ser atribuído com e f=_=>Date(), em seguida, executado f()como o outro.

Agora, aqui está outra entrada válida:

Date

Por quê? Porque, assim como as outras duas entradas, ela pode ser atribuída com f=Datee depois chamada com f(), retornando exatamente a mesma coisa que as outras duas. Tente:

ETHproductions
fonte
1
Você não precisa Date()invocar a função?
milk
4
@milk 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, assim Datecomo uma entrada válida.
ETHproductions
1
Isso faz sentido.
milk
2
Digitando Datepara o console JavaScript do meu navegador produz a saída determinista, ele sempre produz este: function Date() { [native code] }. Você provavelmente quer dizer Date()6 bytes.
pts
2
se "data" acima é ok de "malloc (8)" ou "tempo (0)" seria ok em C também
RosLuP
12

Bash (procps-ng), 2 bytes

ps

$$ também é uma solução.

Rɪᴋᴇʀ
fonte
1
Se assim wfor , é mais curto e também vem de procps.
Liori
1
Você editou isso em uma duplicata da minha resposta .
@ ais523 oops, desculpe.
1/16
11

Python 2, 11 bytes

print id(1)
Azul
fonte
1
Foi esse que encontrei. Eu tinha id(0), no entanto. :)
mbomb007
2
Tecnicamente, venci você, já que sou o OP e o encontrei antes de postar a pergunta. Não queria postar a pergunta e postar imediatamente minha resposta mais curta.
mbomb007
11

Pitão, 2 bytes

O0

Explicação:

 0 0
O  Random float in [0, 1)

É que, quando Otem 0como argumento, ele simplesmente retorna um ponto flutuante aleatório entre 0e 1, exclusivo.

Vamos fazê-lo apenas para o inferno!

Além disso, parece que isso pode ser meio retro (graças a 34718 / mbomb007):

Dilbert: 8 de setembro de 1992


Pitão, 2 bytes

OT

Explicação:

 T 10
O  Random integer in [0, 10]

Experimente esta versão boooooooooooooooring>:(

Erik, o Outgolfer
fonte
10

PowerShell, 4 2 bytes

(riscado 4 ainda parece 4 )

ps

Esse é o alias para o Get-Processqual 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:

C:\Tools\Scripts\golfing>powershell.exe "ps"
AdmBorkBork
fonte
1
Eu tenho que admitir, eu verifiquei para ver se estava realmente riscado. Você realmente nem pode dizer.
Carcigenicate
@Carcigenicate Eu posso dizer se foi cruzado sem selecionar o texto (Ubuntu 16.04.1, Chrome 54.0.2840.100).
Erik the Outgolfer
Visível no Android também, embora não claramente: p
tomsmeding 01/12/16
Parece bom no aplicativo iOS.
Mateusz Piotrowski
Eu não tenho o representante para fazer isso sozinho, mas você pode fazer 04 e atacar.
Bobson
9

Zsh, 5 bytes

<<<$$

Imprime PID.

betseg
fonte
9

Commodore 64 Básico, 4 bytes

1S|0

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ão

2F 37 00 AA  B1 91 B3 22
22 00 00 4C  00 00 00 00

então SYS 0executaria o seguinte

00: ROL-AND $37,A  - Undocumented opcode: rotate the value at memory location 0x37 left, and store the result in the accumulator
02: BRK            - Call the interrupt vector

O 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, é um HALTcódigo de operação não documentado ) .

Como alternativa, um programa mais confiável imprevisível é o de quatro bytes

1?TI

Imprime o tempo decorrido, em instantes (1/60 de segundo), desde a inicialização do sistema.

Marca
fonte
8

05AB1E , 2 bytes

žd

Experimente online!

Emite microssegundos atuais do relógio interno da máquina executora.

Ou você poderia fazer algo assim ...

05AB1E , 3 bytes

A.r

Experimente online!

Gera um alfabeto minúsculo aleatoriamente aleatório.

Ou isso também funciona:

A.R

Experimente online!

Produz uma letra aleatória do alfabeto.

Ou isso também funciona e é mais legal:

05AB1E , 9 bytes

"ž"A.RJ.V

Experimente online!

Produz aleatoriamente um destes:

ž 23  > ža           push current hours
        žb           push current minutes
        žc           push current seconds
        žd           push current microseconds
        že           push current day
        žf           push current month
        žg           push current year
        žh           push [0-9]
        ži           push [a-zA-Z]
        žj           push [a-zA-Z0-9_]
        žk           push [z-aZ-A]
        žl           push [z-aZ-A9-0_]
        žm           push [9-0]
        žn           push [A-Za-z]
        žo           push [Z-Az-a]
        žp           push [Z-A]
        žq           push pi
        žr           push e
        žs           pop a, push pi to a digits (max. 100000)
        žt           pop a, push e to a digits (max. 10000)
        žu           push ()<>[]{}
        žv           push 16
        žw           push 32
        žx           push 64
        žy           push 128
        žz           push 256
Urna de polvo mágico
fonte
8

BrainfuckX e poliglota de script pequeno (etc) - 2 bytes

?.

? - Aleatorizar o valor na célula atual

. - Enviar célula atual para stdout

wyldstallyns
fonte
8

C, 25 21 bytes

Obrigado ao pseudonym117 por salvar 4 bytes.

main(i){putchar(&i);}

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.

Paul Picard
fonte
1. Você pode pular &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 é iconstante?
Riley #
2
itorna-se o que normalmente é chamado argc, 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á.
Riley #
1
Ele muda nos sistemas operacionais modernos devido ao ASLR , um recurso de segurança projetado para dificultar as adivinhações de endereços pelas explorações. Você obterá um resultado consistente em alguns sistemas operacionais mais antigos.
1
Você pode economizar um pouco substituindo putcharporreturn
ceilingcat 2/16/16
1
Em compiladores modernos com avisos para não declarar o tipo de um parâmetro, você pode fazer:main(){printf("%d");}
Myria
7

Python 2, 29 bytes

import os
print os.urandom(9)

Infelizmente, não é a primeira vez que se escreve código em um smartphone.

Pavel
fonte
6

Perl, 5 bytes

say$$

Produz o ID do processo e uma nova linha.


fonte
6

Ruby , 3 bytes

p$$

Experimente online!

Imprime a identificação do processo.

Martin Ender
fonte
1
$. também funcionaria abordagem agradável embora :)
Jatin Dhankhar
5

Pyke, 1 byte

C

Experimente aqui!

Mostra a hora atual

Azul
fonte
1
Estou bastante certo de que isso é determinístico.
Rɪᴋᴇʀ
@EasterlyIrk em um comentário excluído mbomb disse que estava tudo bem #
Blue
Ah, tudo bem. Parece determinístico para mim, mas as regras do OP.
Rɪᴋᴇʀ
Na minha história editar eu tinha uma versão de 3 bytes com aleatoriedade adequada
Azul
@EasterlyIrk Se o horário atual é determinístico, o mesmo acontece com os números pseudo-aleatórios, pois é com isso que eles são propagados. O objetivo não é "aleatoriedade". O objetivo é não determinismo.
mbomb007
5

C89 com GCC / Clang, 20 bytes

A outra solução C apenas é segmentada sempre que criada com GCC ou Clang. Isso, no entanto.

main(n){puts(&n+1);}

Que se parece com:

$ for _ in `seq 1 50`; do ./test_89; done
���z�U
�VW��U
�F��U
�v�f2V
��FV
���*=V
�6���U
�20wU
��
�+V
�6
   �U
��V�uU
�v��V
���K�U
��7�qU
�6S�jU
�&�WU
��wV
��6l�U
���U
�F�ߨU
�f���U
���s7V
�f��?V
��;B�U
�;��U
��GV
�� ��U
�vKV
�V?]wU
�����U
��.�U
�v"�XU
��uhpU
��LD�U
�����U
�6X�U
��M�.V
�69��U
��ԤV
���U
����U
�vx4.V
�֝+xU
�F��U
�֤BQV
��#�U
���1^U
����sU
��4�U
��AݗU

Um monte de lixo não imprimível, mas não é determinístico!

gato
fonte
por que "main (n) {puts (& n + 1);}" e não "main (n) {puts (& n);}"?
RosLuP 2/16/16
@RosLuP Sua segunda opção, que parece óbvia para o observador casual, fornece o byte no valor de n (quando n é 1, putsseu endereço fornece 1 e, quando n é 2, putsseu endereço, 2). Adicionar 1 ao endereço de n, que deve apontar para uma largura de 4 bytes int, 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.
gato
eu leio "put (& n)" desta maneira: dá para put o endereço de n, suponha que n = 0x01020304 put imprimiria convertido em caracteres 04 03 02 01 ou o inverso disso
RosLuP
1
Lembre-se de que você nainda é inicializado com o que normalmente é chamado, argcque está 0no seu caso de teste geral; portanto &n, putsobté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+1no entanto, é o endereço do que normalmente é chamado argv(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.
Guntram Blohm
@GuntramBlohm Você está certo e isso é muito interessante, embora para mim os ponteiros tenham 8 bytes e ints sejam 4 bytes.
cat
5

PHP, 12 bytes

<?=uniqid();

Produz um ID exclusivo com 583f4da627ee3base no horário atual em microssegundos.

Mario
fonte
<?=time();<- 10 bytes.
Ismael Miguel
@IsmaelMiguel uniqid()é 1.000.000 vezes mais indeterminada do que time();)
Mario
Não estou dizendo o contrário. Mas propondo outra resposta. Você é livre para escolher esse.
Ismael Miguel
@IsmaelMiguel alguém deu a mesma resposta já ...
Mario
5

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.

Urna de polvo mágico
fonte
E eu pensei que Kotlin era o caminho para a solução JVM mais curta possível.
F. George
Tentando colocar isso em um arquivo e em execução 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?
Paŭlo Ebermann 04/12/16
Atribua-o a uma variável de fechamento e chame-o.
Magic Octopus Urn
5

Emotinomicon, 15 bytes

😀😅🎲⏬

Explicação:

😀😅🎲⏬
😀      push 0. Stack: [0]
  😅    push 1. Stack: [1]
    🎲  random[pop;pop]. Stack: [1 or 0]
      ⏬output
Roman Gräf
fonte
O nome do idioma é Emotinomicon
acrolith
@daHugLenny Como é que eu perdi que :)
Roman Gräf
5

Borland C no Windows, 12 bytes

m(){puts();}

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

RosLuP
fonte
Isso não produz resultados não-determinísticos, apenas segfaults toda vez.
gato
Alternativamente, se você receber algo diferente de um segfault, qual compilador?
gato
@cat é um compilador Borland C + Windows7 Os. Na forma como vejo: o código acima obtém o endereço no topo da pilha (onde, neste caso, há o endereço para retornar na função main ()) e ler a partir desse endereço dentro do código de espaço principal ... Portanto, depende da saída do compilador. Mas eu não sei 100% ... É possível espaço de código não é legível em seu sistema operacional e de esta falha => seg
RosLuP
1
@RosLuP: Seria apenas imprimir qualquer lixo na memória da pilha (ou no segundo registro de passagem de arg, para x86-64 e na maioria das convenções de chamada RISC que passam os primeiros args nos registradores). Não imprimiria o endereço da pilha. No x86-64, provavelmente seria impresso 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 antes call printf.
22416 Peter Cordes
1
@RosLuP: argvestá 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, pois mainprecisa 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).
22626 Peter Cordes
5

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