Deux nombres aléatoires A et B ont été générés pour être 1, 2 ou 3
votre travail consiste à choisir au hasard un troisième nombre C qui peut également être 1,2 ou 3. Mais, C ne peut pas être égal à A ou B.
- Et oui, A peut être égal à B.
- Si A = B, alors C n'a plus que deux nombres, cela peut être.
- Si A n'est pas égal à B, C ne peut avoir qu'un seul nombre.
- Supposons que A et B ont déjà été choisis pour vous
C'est ainsi que A et B seraient créés en Python
A = random.randrange(1,4)
B = random.randrange(1,4)
Supposons que cela se trouve déjà dans votre code.
C'est le plus court que j'ai trouvé en Python
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
C'est ce que A, B et C peuvent égaler.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
C'est ce que A, B et C ne peuvent pas égaler
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
fonctionne? De plus, votre solution est très inefficace car elle perd du temps en boucle et peut éventuellement prendre un temps infini pour s'exécuter. Aussi,import random
compte en taille d'octet ...Réponses:
Ruby, 22 caractères
Je ne sais toujours pas si j'ai bien compris la question ...
la source
C, 26
Si j'ai bien compris la question:
Si
a
etb
sont différents, il n'y a pas d'aléatoire. la réponse doit être le seul 1,2,3 qui est utilisé:6-a-b
.SI
a
etb
sont les mêmes, il y a 2 choix:la source
Befunge (
156898574)D'accord, c'est terrible, je sais. Mais c'est ma première tentative de Befunge, donc je suis toujours assez content que cela fonctionne même. Je suis sûr qu'il existe une solution beaucoup, bien meilleure.
la source
GolfScript, 13 caractères
Il s'agit d'un programme GolfScript complet qui lit deux nombres séparés par des espaces (chacun étant supposé être 1, 2 ou 3) à partir de l'entrée standard et génère un nombre aléatoire de l'ensemble {1, 2, 3} qui ne correspond à aucun des numéros d'entrée.
Essayez-le en ligne. (Remarque: le lien est vers la version précédente; je suis sur un appareil mobile et je ne peux pas le réparer.)
Voici une version commentée du programme:
Si vous préférez une fonction nommée qui prend les deux nombres comme arguments sur la pile, cela prend quelques caractères supplémentaires:
Le corps réel de la fonction n'a qu'un caractère de plus que le code autonome (car nous avons besoin de
[
pour nous assurer que nous ne consommons que deux arguments), mais la surcharge de l'encapsulation du code dans un bloc et de son affectation à un symbole prend cinq plus de caractères, pour un total de 19.Alternativement, si vous avez littéralement les deux nombres affectés dans les variables
A
etB
que vous voulez que le troisième numéro soit attribuéC
, cela peut également être fait en 19 caractères:(Si laisser le troisième numéro sur la pile est acceptable, vous pouvez laisser le
:C;
à la fin.)Ps. Merci pour la suggestion d'utilisation
^
, Howard.la source
\-
vous pouvez utiliser^
.Python - 35
Suppose que le hasard est importé, ce qui semble être spécifié dans la question.
PYG - 25
la source
Python, 14 caractères
Je l'ai essayé pour tous les 9 cas possibles et cela semble bien fonctionner!
(modifier): Comme l'a souligné edc65, ce n'est pas valable car ce n'est pas aléatoire ... J'ai raté cette partie de la question et je me sens stupide en ce moment.
la source
Befunge - 99 octets
Pas très impressionnant.
la source
PowerShell, 21
Très simple. Abuser du fait que les opérateurs de comparaison agissent différemment avec un tableau comme opérande gauche.
la source
Mathematica, 37 octets
Fondamentalement la même que la réponse Ruby, mais considérablement plus longue grâce aux noms de fonctions de Mathematica. J'utilise des variables en minuscules, car les noms en majuscules peuvent entrer en conflit avec les fonctions intégrées (ce n'est pas le cas dans ce cas, mais vous ne le faites tout simplement pas dans Mathematica).
la source
R, 42 caractères
Le vecteur
x
est le vecteur des poids de probabilité pour obtenir les éléments du vecteur échantillonné. Il est d'abord mis à 1 pour chacun, puis les éléments correspondant à A et B sont mis à 0, donc ils n'ont aucune chance d'être choisis.la source
Rebol - 40 caractères
la source
CJam - 12
Cela suppose que les variables A et B ont déjà été définies, selon la question.
Vous pouvez l'essayer sur http://cjam.aditsu.net/
Pour le tester avec des nombres aléatoires, utilisez:
Pour le tester avec des valeurs spécifiques, utilisez (par exemple):
Explication:
4,
crée le tableau [0 1 2 3][AB0]-
supprime les nombres A, B et 0 du tableaumr
mélange le tableau restant0=
prend le premier élémentDans une future version CJam, ce programme sera 2 octets plus court :)
la source
C 67
la source
JS, 35
inspiré par la réponse de Brandon Anzaldi
la source
Julia, 32 ou 56 selon les règles
32 si je n'ai pas besoin de générer a et b.
la source
JS, 43
la source
A
et d'B
abord.TI-BASIC, 23
la source
Java -
1261238385 ( en utilisant l'intelligentc=6-a-b
)Version complète:
la source
6-a-b
lorsqu'il n'y a pas d'autre choix, les deux autres sont pris. Il est un moyen intelligent de choisir le nombre de unselected 1, 2, 36-1-2 = 3
,6-1-3=2
,6-2-3=1
donc pour chaque non-égalité, b6-a-b
prend la troisième. Intelligent hein? Le seul moment où vous pouvez utiliser au hasard est quanda==b
.R, 24 caractères
Initialiser avec
alors
Ou tout simplement,
n=1:3;n[!n%in%c(a,b)]
mais vous retournez les deux numéros.la source
R, 31 caractères
Si vous le faites
sample(x)
dans R, alors il est interprété comme un échantillon aléatoire de1:x
. Répéter le vecteur(1:3)[-c(A,B)]
deux fois est un moyen d'empêcher que cela ne se produise.la source
Javascript - 76
la source
y+New Date(z-y)
s'agit d'un SyntaxErrory+new Date(z-y)
, d'autre part, rapporte lanew Date()
chaîne avec eny
annexe.C - 38
la source
Java, 264 octets
Ce code génère
n
différents nombres aléatoires de 0 àk
.la source
J (
2119: trop long à mon goût)Existe-t-il des assistants J pour supprimer cette affectation de variable?C'est seulement 2 caractères plus courts ...Ou, si cela ne doit pas être aléatoire, vous pouvez le faire:
12 caractères.
la source
Golfscript, 13 personnages
la source
JavaScript -
41 (jusqu'à 46) 37 35 3430Mis à jour:
A réussi à le réduire à 30 caractères en le modifiant, inspiré par la réponse de stevevarrill en C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Merci nyuszika7h de m'avoir fait descendre à 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Emprunter de la réponse de xem pour au moins être à égalité avec lui:
C=A;while(C==A||C==B)C=1+new Date%3
Merci de me le rappeler
1+new Date%3 === (new Date%3)+1
!Solution précédente:
C=A;while(C==A||C==B)C=(new Date%3)+1
Assurez-vous que les conditions
while()
sont remplies et parcourez jusqu'à ce qu'elles ne le soient pas.Autre solution:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Cela suppose qu'il
C
a déjà été déclaré OU que l'interpréteur JavaScript peut gérer les variables non déclarées.Cependant, si l'interpréteur JS peut gérer EOL sans point-virgule, il peut être ramené à 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
S'il
C
n'a pas été déclaré et qu'il n'y a pas de correction d'erreur, cela portera le décompte à 46 caractères.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Programme de test:
la source
|
au lieu de||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 octets)
Ce code suppose que les nombres seront entrés sur stdin. Il choisira un nombre aléatoire si les deux premiers nombres sont identiques jusqu'à ce qu'il soit différent, sinon il choisira le dernier numéro disponible.
la source
Python,
5441 caractèresQuite long answer in Python but I like list comprehension, so I decided to post this here
// [0] means it is the first element of
la source