Два случайных числа A и B были сгенерированы как 1, 2 или 3
Ваша задача состоит в том, чтобы случайным образом выбрать третье число C, которое также может быть 1,2 или 3. Но C не может быть равно A или B.
- И да, A может равняться B.
- Если A = B, то у C осталось только два числа.
- Если A не равно B, C может иметь только одно число.
- Предположим, A и B уже были выбраны для вас
Вот как A и B будут созданы в Python
A = random.randrange(1,4)
B = random.randrange(1,4)
Предположим, это уже есть в вашем коде.
Это самое короткое, что я придумал в Python
while True:
C = random.randrange(1,4)
if C != A and C != B:
break
Это то, что A, B и C могут равняться.
- 1,2,3
- 1,1,2
- 2,3,1
- 3,3,2
Это то, что A, B и C не могут сравниться
- 1,2,1
- 2,3,3
- 1,1,1
- 3,2,3
C = (A!=B ? 6-A-B : (!(A-1) ? 2 : 1))
работает? Кроме того, ваше решение крайне неэффективно, поскольку оно тратит время на цикл и, возможно, может занять бесконечное количество времени для запуска. Такжеimport random
учитывается размер в байтах ...Ответы:
Рубин, 22 символа
Все еще не уверен, правильно ли я понял вопрос ...
источник
С 26
Если я правильно понял вопрос:
Если
a
иb
отличаются, то нет случайного. ответ должен быть единственным из 1,2,3, который не используется:6-a-b
.ЕСЛИ
a
иb
так же есть 2 варианта:источник
Befunge (
156898574)Хорошо, это ужасно, я знаю. Но это моя первая попытка Befunge, так что я все еще очень счастлив, что она даже работает. Я уверен, что есть гораздо лучшее решение.
источник
GolfScript, 13 символов
Это полная программа GolfScript, которая считывает два разделенных пробелом числа (каждое из которых предполагается равным 1, 2 или 3) из стандартного ввода и выводит случайное число из набора {1, 2, 3}, которое не равно из числа ввода.
Попробуйте онлайн.(Примечание: ссылка на предыдущую версию; я на мобильном устройстве и не могу это исправить.)
Вот прокомментированная версия программы:
Если вы предпочитаете именованную функцию, которая принимает два числа в качестве аргументов в стеке, это займет еще несколько символов:
Фактическое тело функции всего на один символ длиннее автономного кода (потому что нам нужен
[
чтобы убедиться, что мы потребляем только два аргумента), но накладные расходы, связанные с упаковкой кода в блок и назначением его символу, занимают пять больше символов, в общей сложности 19.В качестве альтернативы, если вам буквально присвоены два числа в переменных
A
иB
, и вы хотите назначить третье числоC
, это также можно сделать в 19 символах:(Если вместо этого приемлемо оставить третье число в стеке, вы можете оставить
:C;
без конца.)Ps. Спасибо за предложение использовать
^
, Говард.источник
\-
тебя можно использовать^
.Python - 35
Предполагается, что случайно импортируется, что, как представляется, указано в вопросе.
PYG - 25
источник
Питон, 14 символов
Я попробовал это для каждых 9 возможных случаев, и это, кажется, работает хорошо!
(правка): Как указывало edc65, это недопустимо, поскольку это не случайно ... Я пропустил эту часть вопроса и сейчас чувствую себя глупо.
источник
Befunge - 99 байт
Не очень впечатляет.
источник
PowerShell, 21
Очень просто. Злоупотребление фактом, что операторы сравнения действуют по-другому с массивом как их левый операнд.
источник
Mathematica, 37 байт
В основном так же, как ответ Ruby, но значительно дольше благодаря именам функций Mathematica. Я использую переменные в нижнем регистре, потому что имена в верхнем регистре могут конфликтовать со встроенными модулями (в данном случае это не так, но вы просто не делаете это в Mathematica).
источник
R, 42 символа
Вектор
x
- это вектор весов вероятности для получения элементов вектора выборки. Сначала устанавливается значение 1 для каждого, затем элементы, соответствующие A и B, устанавливаются в 0, следовательно, они не имеют шансов быть выбранными.источник
Реболь - 40 символов
источник
CJam - 12
Это предполагает, что переменные A и B уже были установлены, в зависимости от вопроса.
Вы можете попробовать это на http://cjam.aditsu.net/
Чтобы проверить это со случайными числами, используйте:
Чтобы проверить это с определенными значениями, используйте (например):
Объяснение:
4,
создает массив [0 1 2 3][AB0]-
удаляет числа A, B и 0 из массива,mr
перемешивает оставшийся массив0=
берет первый элементВ будущей версии CJam эта программа будет на 2 байта короче :)
источник
С 67
источник
JS, 35
вдохновленный ответом Брэндона Анзальди
источник
Юлия, 32 или 56 в зависимости от правил
32, если мне не нужно генерировать а и б.
источник
JS, 43
источник
A
иB
сначала.TI-BASIC, 23
источник
Java -
1261238385 (используя умныйc=6-a-b
)Полная версия:
источник
6-a-b
тогда, когда нет другого выбора, оба других взяты. Это умный способ выбора невыбранного числа от 1, 2, 3.6-1-2 = 3
,6-1-3=2
,6-2-3=1
так что для каждого не равного A, B6-a-b
выбирает третью. Умный а? Единственный случай, когда вы можете использовать случайный, это когдаa==b
.R, 24 символа
Инициализировать с
потом
Или просто,
n=1:3;n[!n%in%c(a,b)]
но потом вы возвращаете оба числа.источник
R, 31 символов
Если вы делаете
sample(x)
в R, то это интерпретируется как случайная выборка из1:x
. Повторение вектора(1:3)[-c(A,B)]
дважды - один из способов предотвратить это.источник
Javascript - 76
источник
y+New Date(z-y)
это ошибка синтаксисаy+new Date(z-y)
с другой стороны, сообщаетnew Date()
строку сy
добавленным.С - 38
источник
Java, 264 байта
Этот код генерирует
n
разные случайные числа от 0 доk
.источник
J (
2119: слишком долго, на мой вкус)Есть ли мастера J, чтобы помочь удалить это назначение переменных?Это всего на 2 символа короче ...Или, если он не должен быть случайным, вы можете сделать это:
12 символов
источник
Golfscript, 13 символов
источник
JavaScript -
41 (до 46) 37 35 3430Обновлено:
Удалось уменьшить его до 30 символов, изменив его, вдохновленный ответом Стиваррилл на C.
C=A-B?6-A-B:1+(A+new Date%2)%3
Спасибо, nyuszika7h, за то, что снизили меня до 34 ~:
C=A;while(C==A|C==B)C=1+new Date%3
Заимствуя из ответа Ксема, по крайней мере, попал в один ряд с ним:
C=A;while(C==A||C==B)C=1+new Date%3
Спасибо, что напомнили мне, что
1+new Date%3 === (new Date%3)+1
!Предыдущее решение:
C=A;while(C==A||C==B)C=(new Date%3)+1
Убедитесь, что условия
while()
выполнены, и проходите, пока они не будут выполнены.Другое решение:
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Это предполагает, что
C
уже было объявлено ИЛИ, что интерпретатор JavaScript может обрабатывать необъявленные переменные.Однако, если интерпретатор JS может обрабатывать EOL без точки с запятой, он может быть уменьшен до 41.
C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1
Если
C
не было объявлено, и нет исправления ошибок, это приведет к подсчету до 46 символов.var C=A!=B?6-A-B:A%2!=0?4-B:new Date%2!=1?3:1;
Тестовая программа:
источник
|
вместо||
.for(C=A;C==A|C==B;)C=1+new Date%3
Befunge-98 (57 байт)
Этот код предполагает, что числа будут введены на стандартный ввод. Он выберет случайное число, если оба первых числа будут одинаковыми, пока оно не станет другим, в противном случае он выберет последнее доступное число.
источник
Python,
5441 символовДовольно длинный ответ в Python, но мне нравится понимание списка, поэтому я решил опубликовать это здесь
// [0] означает, что это первый элемент
источник