Wygenerowano dwie liczby losowe A i B o wartości 1, 2 lub 3
Twoim zadaniem jest losowe wybranie trzeciej liczby C, która może również wynosić 1,2 lub 3. Ale C nie może być równe A ani B.
- I tak, A może być równe B.
- Jeśli A = B, to C ma tylko dwie liczby, może to być.
- Jeśli A nie jest równe B, C może mieć tylko jedną liczbę.
- Załóż, że A i B zostały już dla Ciebie wybrane
Tak powstałyby A i B w Pythonie
A = random.randrange(1,4)
B = random.randrange(1,4)
Załóżmy, że jest to już zawarte w kodzie.
To jest najkrótszy, jaki wymyśliłem w Pythonie
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
Właśnie to mogą równać A, B i C.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
To, czego A, B i C nie mogą się równać
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
działa? Również twoje rozwiązanie jest wysoce nieefektywne, ponieważ marnuje czas na zapętlenie i może zająć nieskończoną ilość czasu. Ponadtoimport random
liczy się rozmiar bajtu ...Odpowiedzi:
Ruby, 22 znaki
Nadal nie jestem pewien, czy poprawnie zrozumiałem pytanie ...
źródło
C, 26
Jeśli poprawnie zrozumiałem pytanie:
Jeśli
a
ib
są różne, nie ma losowości. odpowiedź musi być jedynym 1,2,3 że jest nieużywany:6-a-b
.JEŚLI
a
ib
są takie same, istnieją 2 opcje:źródło
Befunge (
156898574)Okej, to okropne, wiem. Ale to moja pierwsza próba Befunge w historii, więc wciąż jestem bardzo szczęśliwy, że to w ogóle działa. Jestem pewien, że istnieje o wiele lepsze rozwiązanie.
źródło
GolfScript, 13 znaków
Jest to kompletny program GolfScript, który odczytuje dwie liczby oddzielone spacjami (każda przyjmowana jako 1, 2 lub 3) ze standardowego wejścia i wysyła losową liczbę ze zbioru {1, 2, 3}, która nie jest równa żadnemu liczb wejściowych.
Wypróbuj online.(Uwaga: link jest do poprzedniej wersji; jestem na urządzeniu mobilnym i nie mogę go naprawić).
Oto skomentowana wersja programu:
Jeśli wolisz funkcję o nazwie, która przyjmuje dwie liczby jako argumenty na stosie, wymaga to kilku dodatkowych znaków:
Rzeczywista treść funkcji jest tylko o jeden znak dłuższa niż samodzielny kod (ponieważ potrzebujemy
[
upewnić się, że zużywamy tylko dwa argumenty), ale narzut związany z zawijaniem kodu w bloku i przypisywaniem go do symbolu zajmuje pięć więcej znaków, w sumie 19.Alternatywnie, jeśli dosłownie masz dwie liczby przypisane do zmiennych
A
iB
chcesz przypisać trzecią liczbęC
, możesz to zrobić również w 19 znakach:(Jeśli zamiast tego dopuszczalne jest pozostawienie trzeciej liczby na stosie, możesz zostawić
:C;
koniec.)Ps. Dzięki za sugestię użycia
^
, Howard.źródło
\-
ciebie możesz użyć^
.Python - 35
Zakłada, że losowy jest importowany, co wydaje się być określone w pytaniu.
PYG - 25
źródło
Python, 14 znaków
Próbowałem tego dla 9 możliwych przypadków i wydaje się, że działa dobrze!
(edytuj): Jak zauważył edc65, nie jest to ważne, ponieważ nie jest przypadkowe ... Przegapiłem tę część pytania i czuję się teraz głupio.
źródło
Befunge - 99 bajtów
Niezbyt imponujące.
źródło
PowerShell, 21
Bardzo proste. Nadużywanie faktu, że operatory porównania działają inaczej z tablicą jako lewym operandem.
źródło
Mathematica, 37 bajtów
Zasadniczo to samo co odpowiedź Ruby, ale znacznie dłużej dzięki nazwom funkcji Mathematica. Używam zmiennych o małych literach, ponieważ nazwy wielkich liter mogą kolidować z wbudowanymi (w tym przypadku nie, ale po prostu nie robisz tego w Mathematica).
źródło
R, 42 znaki
Wektor
x
jest wektorem wag prawdopodobieństwa dla uzyskania elementów próbkowanego wektora. Na początku jest ustawiane na 1, a następnie elementy odpowiadające A i B są ustawiane na 0, dlatego nie mają szans na wybranie.źródło
Rebol - 40 znaków
źródło
CJam - 12
Zakłada się, że zmienne A i B zostały już ustawione, zgodnie z pytaniem.
Możesz spróbować na http://cjam.aditsu.net/
Aby przetestować go za pomocą liczb losowych, użyj:
Aby przetestować go z określonymi wartościami, użyj (na przykład):
Wyjaśnienie:
4,
tworzy tablicę [0 1 2 3][AB0]-
usuwa liczby A, B i 0 z tablicymr
tasuje pozostała tablica0=
bierze pierwszy elementW przyszłej wersji CJam ten program będzie o 2 bajty krótszy :)
źródło
C 67
źródło
JS, 35
zainspirowany odpowiedzią Brandona Anzaldiego
źródło
Julia, 32 lub 56 lat w zależności od zasad
32 jeśli nie muszę generować a i b.
źródło
JS, 43
źródło
A
iB
najpierw.TI-BASIC, 23
źródło
Java -
1261238385 (używając sprytnegoc=6-a-b
)Pełna wersja:
źródło
6-a-b
wtedy, gdy nie ma innego wyboru, oba pozostałe są brane. Jest zręczny sposób wybranie liczby niezaznaczoną spośród 1, 2, 36-1-2 = 3
,6-1-3=2
,6-2-3=1
więc dla każdego przypadku równe a, b6-a-b
wybiera trzeci. Sprytnie, prawda? Jedyny raz, kiedy możesz użyć losowego, to kiedya==b
.R, 24 znaki
Zainicjuj za pomocą
Następnie
Lub po prostu,
n=1:3;n[!n%in%c(a,b)]
ale zwracasz obie liczby.źródło
R, 31 znaków
Jeśli zrobisz to
sample(x)
w R, to jest interpretowane jako losowa próbka z1:x
.(1:3)[-c(A,B)]
Dwukrotne powtórzenie wektora jest jednym ze sposobów na powstrzymanie tego.źródło
JavaScript - 76
źródło
y+New Date(z-y)
jest toy+new Date(z-y)
drugiej strony @xem zgłaszanew Date()
ciąg zy
dołączonym.C - 38
źródło
Java, 264 bajty
Ten kod generuje
n
różne liczby losowe od 0 dok
.źródło
J (
2119: za długo jak na mój gust)Czy w pobliżu są j-kreatorzy, którzy pomogą usunąć to przypisanie zmiennej?To tylko 2 znaki krótsze ...Lub, jeśli nie musi to być przypadek, możesz to zrobić:
12 znaków.
źródło
Golfscript, 13 znaków
źródło
JavaScript -
41 (do 46) 37 35 3430Zaktualizowano:
Udało się go zmniejszyć do 30 znaków, modyfikując go, zainspirowany odpowiedzią Stevevarrilla w C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Dziękuję nyuszika7h za doprowadzenie mnie do 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Pożyczając od odpowiedzi Xema, aby przynajmniej był na równi z nim:
C=A;while(C==A||C==B)C=1+new Date%3
Dzięki za przypomnienie mi o tym
1+new Date%3 === (new Date%3)+1
!Poprzednie rozwiązanie:
C=A;while(C==A||C==B)C=(new Date%3)+1
Upewnij się, że warunki
while()
są spełnione, i powtarzaj, dopóki nie będą.Inne rozwiązanie:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Zakłada się, że
C
została już zadeklarowana LUB, że interpreter JavaScript może obsługiwać niezadeklarowane zmienne.Jeśli jednak interpreter JS może obsłużyć EOL bez średnika, można go obniżyć do 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Jeśli
C
nie został zadeklarowany i nie ma dla niego korekcji błędów, suma będzie się składać z maksymalnie 46 znaków.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Program testowy:
źródło
|
zamiast||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 bajtów)
Ten kod zakłada, że liczby będą wprowadzane na standardowe wejście. Wybierze losową liczbę, jeśli obie pierwsze liczby będą takie same, aż będzie inna, w przeciwnym razie wybierze ostatnią dostępną liczbę.
źródło
Python,
5441 znakówDość długa odpowiedź w Pythonie, ale lubię rozumieć listę, więc postanowiłem opublikować to tutaj
// [0] oznacza, że jest to pierwszy element
źródło