Se han generado dos números aleatorios A y B para ser 1, 2 o 3
su trabajo es elegir aleatoriamente un tercer número C que también puede ser 1,2 o 3. Pero, C no puede ser igual a A o B.
- Y sí, A puede ser igual a B.
- Si A = B, entonces a C solo le quedan dos números, puede ser.
- Si A no es igual a B, C solo tiene un número que puede ser.
- Suponga que A y B ya han sido elegidos para usted
Así es como se crearían A y B en Python
A = random.randrange(1,4)
B = random.randrange(1,4)
Suponga que esto ya está en su código.
Este es el más corto que he encontrado en Python
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
Esto es lo que A, B y C pueden igualar.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
Esto es lo que A, B y C no pueden igualar
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
funciona? Además, su solución es altamente ineficiente, ya que desperdicia el tiempo en bucle y posiblemente podría tomar una cantidad infinita de tiempo en ejecutarse. Además,import random
cuenta en tamaño de byte ...Respuestas:
Ruby, 22 personajes.
Aún no estoy seguro si entendí la pregunta correctamente ...
fuente
C, 26
Si he entendido la pregunta correctamente:
Si
a
yb
son diferentes, no hay al azar. la respuesta debe ser el único de 1,2,3 que es utilizado:6-a-b
.SI
a
yb
son los mismos que hay 2 opciones:fuente
Befunge (
156898574)Bien, esto es terrible, lo sé. Pero es mi primer intento de Befunge, así que todavía estoy muy feliz de que incluso funcione. Estoy seguro de que hay una solución mucho mejor.
fuente
GolfScript, 13 caracteres
Este es un programa completo de GolfScript que lee dos números separados por espacios en blanco (se supone que cada uno es 1, 2 o 3) de la entrada estándar, y genera un número aleatorio del conjunto {1, 2, 3} que no es igual a ninguno de los números de entrada.
Pruébalo en línea.(Nota: el enlace es a la versión anterior; estoy en un dispositivo móvil y no puedo solucionarlo).
Aquí hay una versión comentada del programa:
Si prefiere una función con nombre que tome los dos números como argumentos en la pila, eso requiere algunos caracteres más:
El cuerpo real de la función es solo un carácter más largo que el código independiente (porque necesitamos el
[
que nos aseguremos de consumir solo dos argumentos), pero la sobrecarga de envolver el código en un bloque y asignarlo a un símbolo requiere cinco más caracteres, para un total de 19.Alternativamente, si literalmente tiene los dos números asignados a las variables
A
yB
desea asignar el tercer númeroC
, eso también se puede hacer en 19 caracteres:(Si dejar el tercer número en la pila es aceptable, puede dejar el
:C;
el final).PD. Gracias por la sugerencia de usar
^
, Howard.fuente
\-
que pueda usar^
.Python - 35
Asume que se importa al azar, lo que parece especificarse en la pregunta.
PYG - 25
fuente
Python, 14 caracteres
¡Lo probé por cada 9 casos posibles y parece funcionar bien!
(editar): Como señaló edc65, esto no es válido ya que no es aleatorio ... Me perdí esa parte de la pregunta y me siento estúpido en este momento.
fuente
Befunge - 99 bytes
No muy impresionante
fuente
PowerShell, 21
Muy sencillo Abusando del hecho de que los operadores de comparación actúan de manera diferente con una matriz como su operando izquierdo.
fuente
Mathematica, 37 bytes
Básicamente lo mismo que la respuesta de Ruby, pero considerablemente más largo gracias a los nombres de las funciones de Mathematica. Estoy usando variables en minúsculas, porque los nombres en mayúsculas pueden entrar en conflicto con los integrados (no lo hacen, en este caso, pero simplemente no lo haces en Mathematica).
fuente
R, 42 caracteres
Vector
x
es el vector de ponderaciones de probabilidad para obtener los elementos del vector que se está muestreando. Al principio se establece en 1 para cada uno, luego los elementos correspondientes a A y B se establecen en 0, por lo tanto, no tienen posibilidad de ser seleccionados.fuente
Rebol - 40 caracteres
fuente
CJam - 12
Esto supone que las variables A y B ya se han establecido, de acuerdo con la pregunta.
Puedes probarlo en http://cjam.aditsu.net/
Para probarlo con números aleatorios, use:
Para probarlo con valores específicos, use (por ejemplo):
Explicación:
4,
crea la matriz [0 1 2 3][AB0]-
elimina los números A, B y 0 de la matrizmr
baraja la matriz restante0=
toma el primer elementoEn una futura versión de CJam, este programa será 2 bytes más corto :)
fuente
C 67
fuente
JS, 35
inspirado en la respuesta de Brandon Anzaldi
fuente
Julia, 32 o 56 dependiendo de las reglas
32 si no necesito generar ayb.
fuente
JS, 43
fuente
A
yB
primero.TI-BASIC, 23
fuente
Java -
1261238385 (usando el inteligentec=6-a-b
)Versión completa:
fuente
6-a-b
cuando no hay otra opción, se toman las otras dos. Es una forma inteligente de recoger el número no seleccionado de 1, 2, 3.6-1-2 = 3
,6-1-3=2
,6-2-3=1
por lo que para cada una no-iguales, b6-a-b
recoge la tercera. Listo eh? El único momento en que puede usar al azar es cuándoa==b
.R, 24 caracteres
Inicializar con
Luego
O simplemente
n=1:3;n[!n%in%c(a,b)]
pero luego devuelve ambos números.fuente
R, 31 caracteres
Si lo hace
sample(x)
en R, entonces se interpreta como una muestra aleatoria de1:x
. Repitiendo el vector(1:3)[-c(A,B)]
dos veces es una forma de evitar que esto suceda.fuente
Javascript - 76
fuente
y+New Date(z-y)
es un SyntaxErrory+new Date(z-y)
por otro lado informanew Date()
cadena cony
adjunto.C - 38
fuente
Java, 264 bytes
Este código genera
n
diferentes números aleatorios de 0 ak
.fuente
J (
2119: demasiado largo para mi gusto)¿Hay algún asistente J para ayudar a eliminar esa asignación variable?Solo son 2 caracteres más cortos ...O, si no tiene que ser aleatorio, puede hacer esto:
12 caracteres
fuente
Golfscript, 13 personajes
fuente
JavaScript -
41 (hasta 46) 37 35 3430Actualizado:
Logré reducirlo a 30 caracteres modificándolo, inspirado en la respuesta de stevevarrill en C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Gracias nyuszika7h por bajarme a 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Tomando prestado de la respuesta de xem al menos estar a la par con él:
C=A;while(C==A||C==B)C=1+new Date%3
¡Gracias por recordarme eso
1+new Date%3 === (new Date%3)+1
!Solución anterior:
C=A;while(C==A||C==B)C=(new Date%3)+1
Asegúrese de que
while()
se cumplan las condiciones de , y repita hasta que no lo sean.Otra solución:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Esto supone que
C
ya se ha declarado O que el intérprete de JavaScript puede manejar variables no declaradas.Sin embargo, si el intérprete JS puede manejar EOL sin punto y coma, podría reducirse a 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Si
C
no se ha declarado, y no hay corrección de errores, eso llevará la cuenta de hasta 46 caracteres.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Programa de prueba:
fuente
|
lugar de||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 bytes)
Este código supone que los números se ingresarán en stdin. Escogerá un número aleatorio si los dos primeros números son iguales hasta que sea diferente; de lo contrario, elegirá el último número disponible.
fuente
Python,
5441 caracteresRespuesta bastante larga en Python pero me gusta la comprensión de la lista, así que decidí publicar esto aquí
// [0] significa que es el primer elemento de
fuente