Dois números aleatórios A e B foram gerados para serem 1, 2 ou 3
seu trabalho é escolher aleatoriamente um terceiro número C, que também pode ser 1,2 ou 3. Mas, C não pode ser igual a A ou B.
- E sim, A pode ser igual a B.
- Se A = B, então C tem apenas dois números restantes.
- Se A não for igual a B, C terá apenas um número.
- Suponha que A e B já foram escolhidos para você
É assim que A e B seriam criados em Python
A = random.randrange(1,4)
B = random.randrange(1,4)
Suponha que isso já esteja no seu código.
Este é o mais curto que eu vim em Python
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
É isso que A, B e C podem ser iguais.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
Isto é o que A, B e C não podem ser iguais
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
funciona? Além disso, sua solução é altamente ineficiente, pois perde tempo e pode levar uma quantidade infinita de tempo para ser executada. Além disso,import random
as contagens de tamanho byte ...Respostas:
Ruby, 22 caracteres
Ainda não tenho certeza se entendi a pergunta corretamente ...
fonte
C, 26
Se entendi a pergunta corretamente:
Se
a
eb
são diferentes, não há aleatória. a resposta deve ser o único de 1,2,3 que não é utilizado:6-a-b
.SE
a
eb
são iguais, existem 2 opções:fonte
Befunge (
156898574)Ok, isso é terrível, eu sei. Mas é minha primeira tentativa de Befunge, então ainda estou muito feliz que funcione. Tenho certeza de que há uma solução muito, muito melhor.
fonte
GolfScript, 13 caracteres
Este é um programa completo do GolfScript que lê dois números separados por espaços em branco (cada um assumido como 1, 2 ou 3) da entrada padrão e gera um número aleatório do conjunto {1, 2, 3} que não é igual a nenhum dos números de entrada.
Experimente online.(Observação: o link é para a versão anterior; estou em um dispositivo móvel e não consigo corrigi-lo.)
Aqui está uma versão comentada do programa:
Se você preferir uma função nomeada que aceita os dois números como argumentos na pilha, isso requer mais alguns caracteres:
O corpo real da função é apenas um caractere mais longo que o código independente (porque precisamos do
[
ter certeza de que consumimos apenas dois argumentos), mas a sobrecarga de envolver o código em um bloco e atribuí-lo a um símbolo leva cinco mais caracteres, para um total de 19.Como alternativa, se você literalmente tem os dois números atribuídos às variáveis
A
eB
, e deseja o terceiro número atribuídoC
, isso também pode ser feito em 19 caracteres:(Se, em vez disso, deixar o terceiro número na pilha for aceitável, você poderá deixar
:C;
o final.)Ps. Obrigado pela sugestão
^
, Howard.fonte
\-
você pode usar^
.Python - 35
Assume que aleatório é importado, o que parece estar especificado na pergunta.
PYG - 25
fonte
Python, 14 caracteres
Eu tentei para cada 9 casos possíveis e parece funcionar bem!
(edit): Como o edc65 apontou, isso não é válido, pois não é aleatório ... Eu perdi essa parte da pergunta e me sinto estúpido agora.
fonte
Befunge - 99 bytes
Não é muito impressionante.
fonte
PowerShell, 21
Muito simples. Abusando do fato de que os operadores de comparação agem de maneira diferente com uma matriz como seu operando esquerdo.
fonte
Mathematica, 37 bytes
Basicamente, o mesmo que a resposta do Ruby, mas consideravelmente maior graças aos nomes das funções do Mathematica. Estou usando variáveis em minúsculas, porque os nomes em maiúsculas podem colidir com os incorporados (nesse caso, eles não são, mas você simplesmente não faz isso no Mathematica).
fonte
R, 42 caracteres
Vetor
x
é o vetor de pesos de probabilidade para obter os elementos do vetor que está sendo amostrado. Ele é definido como 1 para cada um primeiro e, em seguida, os elementos correspondentes a A e B são definidos como 0, portanto, eles não têm chance de serem selecionados.fonte
Rebol - 40 caracteres
fonte
CJam - 12
Isso pressupõe que as variáveis A e B já foram definidas, de acordo com a pergunta.
Você pode experimentá-lo em http://cjam.aditsu.net/
Para testá-lo com números aleatórios, use:
Para testá-lo com valores específicos, use (por exemplo):
Explicação:
4,
cria a matriz [0 1 2 3][AB0]-
remove os números A, B e 0 da matrizmr
embaralha a matriz restante0=
leva o primeiro elementoEm uma versão futura do CJam, este programa será 2 bytes mais curto :)
fonte
C 67
fonte
JS, 35
inspirado na resposta de Brandon Anzaldi
fonte
Julia, 32 ou 56, dependendo das regras
32 se eu não precisar gerar a e b.
fonte
JS, 43
fonte
A
eB
primeiro.TI-BASIC, 23
fonte
Java -
1261238385 (usando o inteligentec=6-a-b
)Versão completa:
fonte
6-a-b
quando não há outra opção, os dois outros são usados . É uma maneira inteligente de escolher o número não seleccionada a partir de 1, 2, 3.6-1-2 = 3
,6-1-3=2
,6-2-3=1
assim, para cada n igual a, b6-a-b
escolhe o terceiro um. Inteligente eh? A única vez que você pode usar aleatoriamente é quandoa==b
.R, 24 caracteres
Inicialize com
Então
Ou apenas
n=1:3;n[!n%in%c(a,b)]
mas depois você retorna os dois números.fonte
R, 31 caracteres
Se você faz
sample(x)
em R, é interpretado como uma amostra aleatória de1:x
. Repetir o vetor(1:3)[-c(A,B)]
duas vezes é uma maneira de impedir que isso aconteça.fonte
Javascript - 76
fonte
y+New Date(z-y)
é um SyntaxErrory+new Date(z-y)
por outro lado, relata anew Date()
string comy
anexado.C - 38
fonte
Java, 264 bytes
Este código gera
n
números aleatórios diferentes de 0 ak
.fonte
J (
2119: tempo demais para o meu gosto)Existem J assistentes por perto para ajudar a remover essa atribuição de variável?É apenas 2 caracteres mais curtos ...Ou, se não precisar ser aleatório, você pode fazer o seguinte:
12 caracteres.
fonte
Golfscript, 13 caracteres
fonte
JavaScript -
41 (até 46) 37 35 3430Atualizada:
Conseguiu reduzir para 30 caracteres modificando-o, inspirado na resposta de stevevarrill em C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Obrigado nyuszika7h por me reduzir a 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Tomando emprestado da resposta do xem para, pelo menos, se equiparar a ele:
C=A;while(C==A||C==B)C=1+new Date%3
Obrigado por me lembrar isso
1+new Date%3 === (new Date%3)+1
!Solução anterior:
C=A;while(C==A||C==B)C=(new Date%3)+1
Certifique-se de que as condições
while()
sejam satisfeitas e faça um loop até que não estejam.Outra solução:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Isso pressupõe que
C
já foi declarado OU que o interpretador JavaScript pode manipular variáveis não declaradas.No entanto, se o intérprete JS puder manipular a EOL sem ponto e vírgula, poderá ser reduzido para 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Se
C
não tiver sido declarado e não houver correção de erro, isso elevará a contagem para 46 caracteres.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Programa de teste:
fonte
|
vez de||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 bytes)
Este código assume que os números serão inseridos no stdin. Ele selecionará um número aleatório se os dois primeiros números forem iguais até que sejam diferentes, caso contrário, escolherá o último número disponível.
fonte
Python,
5441 caracteresResposta bastante longa em Python, mas eu gosto de entender a lista, então decidi postar isso aqui
// [0] significa que é o primeiro elemento de
fonte