Es wurden zwei Zufallszahlen A und B erzeugt, die entweder 1, 2 oder 3 sind
Ihre Aufgabe ist es, zufällig eine dritte Zahl C auszuwählen, die auch 1,2 oder 3 sein kann. C kann jedoch nicht A oder B entsprechen.
- Und ja, A kann gleich B sein.
- Wenn A = B, dann hat C nur noch zwei Zahlen, kann es sein.
- Wenn A nicht gleich B ist, kann C nur eine Zahl haben.
- Angenommen, A und B wurden bereits für Sie ausgewählt
So würden A und B in Python erstellt
A = random.randrange(1,4)
B = random.randrange(1,4)
Angenommen, dies ist bereits in Ihrem Code enthalten.
Dies ist die kürzeste, die ich mir in Python ausgedacht habe
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
Dies ist, was A, B und C gleich sein können.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
Dies ist, was A, B und C nicht gleich sein können
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
? Außerdem ist Ihre Lösung äußerst ineffizient, da sie Zeit mit Schleifen verschwendet und möglicherweise unendlich viel Zeit in Anspruch nimmt. Auchimport random
zählt inAntworten:
Ruby, 22 Zeichen
Immer noch nicht sicher, ob ich die Frage richtig verstanden habe ...
quelle
C 26
Wenn ich die Frage richtig verstanden habe:
Wenn
a
undb
verschieden sind, gibt es keinen Zufall. Die Antwort muss die einzige 1,2,3 sein , das nicht benutzt wird:6-a-b
.WENN
a
undb
sind gleich gibt es 2 Möglichkeiten:quelle
Befunge (
156898574)Okay, das ist schrecklich, ich weiß. Aber es ist mein erster Befunge-Versuch überhaupt, also bin ich immer noch ziemlich froh, dass es überhaupt funktioniert. Ich bin mir sicher, dass es eine viel, viel bessere Lösung gibt.
quelle
GolfScript, 13 Zeichen
Dies ist ein vollständiges GolfScript-Programm, das zwei durch Leerzeichen getrennte Zahlen (von denen angenommen wird, dass sie entweder 1, 2 oder 3 sind) von der Standardeingabe liest und eine Zufallszahl aus dem Satz {1, 2, 3} ausgibt, die keiner entspricht der eingegebenen Zahlen.
Probieren Sie es online aus.(Hinweis: Der Link verweist auf die vorherige Version. Ich bin auf einem mobilen Gerät und kann ihn nicht reparieren.)
Hier ist eine kommentierte Version des Programms:
Wenn Sie eine benannte Funktion bevorzugen, die die beiden Zahlen als Argumente auf dem Stapel verwendet, sind ein paar Zeichen mehr erforderlich:
Der eigentliche Hauptteil der Funktion ist nur ein Zeichen länger als der eigenständige Code (da wir den benötigen)
[
nur zwei Argumente verwendet werden müssen), aber der Aufwand, den Code in einen Block einzuschließen und einem Symbol zuzuweisen, beträgt fünf mehr Zeichen für insgesamt 19.Alternativ, wenn Sie buchstäblich die beiden Zahlen in den Variablen zugewiesen
A
undB
, und wollen die dritte Nummer zugewiesenC
, die auch in 19 Zeichen getan werden kann:(Wenn es akzeptabel ist, stattdessen die dritte Zahl auf dem Stapel zu belassen, können Sie die
:C;
das Ende weglassen.)Ps. Vielen Dank für den Vorschlag
^
, Howard.quelle
\-
Ihnen können verwenden^
.Python - 35
Angenommen, es wird zufällig importiert, was in der Frage angegeben zu sein scheint.
PYG - 25
quelle
Python, 14 Zeichen
Ich habe es für alle 9 möglichen Fälle versucht und es scheint gut zu funktionieren!
(edit): Wie edc65 betonte, ist dies nicht gültig, da es nicht zufällig ist ... Ich habe diesen Teil der Frage verpasst und ich fühle mich im Moment dumm.
quelle
Befunge - 99 Bytes
Nicht sehr beeindruckend.
quelle
PowerShell, 21
Sehr unkompliziert. Missbrauch der Tatsache, dass Vergleichsoperatoren mit einem Array als linkem Operanden unterschiedlich agieren.
quelle
Mathematica, 37 Bytes
Grundsätzlich das gleiche wie die Ruby-Antwort, jedoch dank der Funktionsnamen von Mathematica erheblich länger. Ich verwende Variablen in Kleinbuchstaben, da Namen in Großbuchstaben mit eingebauten Elementen in Konflikt geraten können (dies ist in diesem Fall nicht der Fall, aber Sie tun dies in Mathematica einfach nicht).
quelle
R, 42 Zeichen
Vektor
x
ist der Vektor der Wahrscheinlichkeitsgewichte zum Erhalten der Elemente des abgetasteten Vektors. Es wird zuerst für jedes Element auf 1 gesetzt, dann werden Elemente, die A und B entsprechen, auf 0 gesetzt, daher haben sie keine Chance, ausgewählt zu werden.quelle
Rebol - 40 Zeichen
quelle
CJam - 12
Dies setzt voraus, dass die Variablen A und B entsprechend der Frage bereits gesetzt wurden.
Sie können es unter http://cjam.aditsu.net/ ausprobieren.
Um es mit Zufallszahlen zu testen, verwenden Sie:
Um es mit bestimmten Werten zu testen, verwenden Sie (zum Beispiel):
Erläuterung:
4,
Erstellt das Array [0 1 2 3], werden[AB0]-
die Zahlen A, B und 0 aus dem Array entfernt.mr
Das verbleibende Array mischt0=
das erste ElementIn einer zukünftigen CJam-Version wird dieses Programm 2 Bytes kürzer sein :)
quelle
C 67
quelle
JS, 35
inspiriert von Brandon Anzaldis Antwort
quelle
Julia, 32 oder 56, abhängig von den Regeln
32 wenn ich a und b nicht erzeugen muss.
quelle
JS, 43
quelle
A
undB
.TI-BASIC, 23
quelle
Java -
1261238385 (mit dem Schlauenc=6-a-b
)Vollversion:
quelle
6-a-b
wenn keine andere Wahl getroffen wird. Die beiden anderen werden verwendet. Es ist eine geschickte Art und Weise der nicht ausgewählte Zahl von 1 der Kommissionierung, 2, 36-1-2 = 3
,6-1-3=2
,6-2-3=1
so dass für jede nicht gleich a, b6-a-b
nimmt das dritter. Clever wie? Die einzige Zeit, die Sie zufällig verwenden können, ist wanna==b
.R, 24 Zeichen
Initialisieren Sie mit
Dann
Oder eben
n=1:3;n[!n%in%c(a,b)]
doch dann gibst du beide Nummern zurück.quelle
R, 31 Zeichen
Wenn Sie
sample(x)
in R tun , dann wird es als Zufallsstichprobe von interpretiert1:x
. Das(1:3)[-c(A,B)]
zweimalige Wiederholen des Vektors ist eine Möglichkeit, dies zu verhindern.quelle
Javascript - 76
quelle
y+New Date(z-y)
ist ein SyntaxErrory+new Date(z-y)
hingegen meldetnew Date()
String mity
angehängtem.C - 38
quelle
Java, 264 Bytes
Dieser Code generiert
n
verschiedene Zufallszahlen von 0 bisk
.quelle
J (
2119: zu lang für meinen Geschmack)Gibt es J-Assistenten, die beim Entfernen dieser Variablenzuweisung helfen?Es ist nur 2 Zeichen kürzer ...Oder, wenn es nicht zufällig sein muss, können Sie dies tun:
12 Zeichen.
quelle
Golfscript, 13 Zeichen
quelle
JavaScript -
41 (bis zu 46) 37 35 3430Aktualisiert:
Hat es geschafft, es auf 30 Zeichen zu reduzieren, indem es modifiziert wurde, inspiriert von Stevevarrills Antwort in C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Danke, nyuszika7h, dass du mich auf 34 ~ gebracht hast:
C=A;while(C==A|C==B)C=1+new Date%3
Aus der Antwort von xem entlehnt, um zumindest mit ihm mithalten zu können:
C=A;while(C==A||C==B)C=1+new Date%3
Danke, dass du mich daran erinnert hast
1+new Date%3 === (new Date%3)+1
!Vorherige Lösung:
C=A;while(C==A||C==B)C=(new Date%3)+1
Stellen Sie sicher, dass die Bedingungen von
while()
erfüllt sind, und wiederholen Sie den Vorgang, bis sie nicht mehr erfüllt sind.Andere Lösung:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Dies setzt voraus, dass
C
bereits deklariert wurde ODER dass der JavaScript-Interpreter nicht deklarierte Variablen verarbeiten kann.Wenn der JS-Interpreter jedoch EOL ohne Semikolon verarbeiten kann, kann er auf 41 reduziert werden.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Wenn dies
C
nicht deklariert wurde und es keine Fehlerkorrektur gibt, wird die Anzahl der Zeichen auf 46 erhöht.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Testprogramm:
quelle
|
anstelle von zu verwenden||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 Bytes)
Dieser Code setzt voraus, dass die Zahlen in stdin eingegeben werden. Es wird eine Zufallszahl ausgewählt, wenn beide ersten Zahlen gleich sind, bis sie unterschiedlich sind, andernfalls wird die letzte verfügbare Zahl ausgewählt.
quelle
Python,
5441 ZeichenZiemlich lange Antwort in Python, aber ich mag Listenverständnis, also habe ich mich entschieden, dies hier zu posten
// [0] bedeutet, dass es das erste Element von ist
quelle