В качестве маленькой шутки в офисе кто-то захотел сценарий, который случайным образом выбирает имя, и сказал, что человек сделает несколько напитков.
Давайте назовем людей Джоном, Джеффом, Эммой, Стивом и Джули.
Я подумал, что было бы забавно создать сценарий, который на первый взгляд кажется случайным, но на самом деле всегда дает одного и того же человека в качестве выходных данных (до вас, кого вы выберете).
Ответ с наибольшим количеством голосов побеждает через неделю
И победитель....
Пол Р. с (в настоящее время) 158 голосами.
Ответы здесь замечательные, и если у кого-то еще есть какие-либо идеи, которые еще не были опубликованы, пожалуйста, добавьте их, я люблю читать их.
Ответы:
С
Важно решить, кто покупает, как можно быстрее, чтобы не тратить драгоценное время на питье - поэтому C является очевидным выбором для достижения максимальной производительности:
Объяснение:
источник
PHP
Не мог отпустить это, так вот еще один:
источник
Haskell
Он слишком прозрачен, если всегда возвращает одно и то же имя, поэтому попробуйте следующее
Всякий раз, когда вы хотите, чтобы это было случайно:
И для вашей неудачной цели:
источник
Баш - максимальная простота
Очень простой пример - давайте избежим каких-либо проблем, выполняя это учебным путем. Не забудьте запустить генератор от системных часов для хорошего результата!
Бонус:
источник
$SECONDS
FTW! \ o /source
это сделаете , вместо того, чтобы просто выполнить это? Будет ли Шебанг все еще вызывать новую оболочку или что-то?source
то это точно так же, как если бы вы вводили команды в командной строке самостоятельно; #! / bin / bash - это комментарий, поэтому он игнорируется. Это верно для любого сценария.C #
источник
rng.Next()
вызывается только один раз, массив будет отсортирован по константе, что не приведет к изменению (или изменению, которое зависит только от алгоритма сортировки).names = names.OrderBy(name => rng.Next());
=>
Указывает на то, что это лямбда - выражение в C # (закрытие).PowerShell
Это будет всегда выводить
John
.источник
Q
источник
-S 1234
опции или сделать\S 1234
из интерпретатораPerl
источник
@
префиксом) в «контексте списка» интерпретируется как все ее элементы, но в «скалярном контексте» это скаляр, равный общему количеству элементов в списке. Следовательно, внутри строки переменная списка имеет контекст списка и интерполируется, и мы получаемPerson X is buying
. Но как индекс массива, он получает скалярный контекст и интерпретируется как 1.my @index = ...
, он сразу же задается вопросом «WTF ?!».my @letters = 'a' .. 'z';
my @squares = map $_**2, 1..20;
my @sorted = sort { lc $a cmp lc $b } @words;
и т.д.ECMAScript
Это всегда выбирает Джули.
источник
(a,b)=>(a=b[0],b)
). Я уточнил свой ответ.C #
источник
var random = new Random(5); var id = random.NextInt(5);
C #
Подсказка:
Ответ:
источник
AddRange
запутались сConcat
при добавлении имен кList<string>
. Мне приходило в голову иметь Hashset с хитрым IEqualityComparer, но это было бы слишком необычно. На мой счет не было много (если таковые имеются) основанные на семени ответы, когда я отправил это.bash / coreutils
Это почти дословно взято из сценария, который я написал для аналогичной цели.
источник
-r
определяет обратную (лексикографическую) сортировку, поэтому Стив всегда будет выбран. Это можно рассматривать как невинную опечатку-R
для случайной сортировкиРубин
источник
Рубин
источник
Perl
три
srand
с сделает это в три раза больше случайным!объяснение
редактировать:
после прохождения кода один из пяти парней решил исправить очевидную ошибку, выпустив следующую программу:
Вы можете сказать, кто это сделал, просто взглянув на код?
объяснение:
источник
$RANDOM
это реальная особенность в bash, ksh и zsh (но не в perl).питон
Все знают, что вы не можете доверять случайности в таком небольшом выборочном пространстве; чтобы сделать его действительно случайным, я отказался от устаревшего метода выбора имени из списка, и вместо этого моя программа выдает совершенно случайное имя. Поскольку у большинства имен в офисе было 4 буквы, мы согласимся на это.
источник
С
Прости, Джефф!
источник
C ++ x11
источник
Scala
Я знаю, что мои пользователи будут настроены скептически, поэтому я включил доказательство того, что моя случайность действительно справедлива!
Один пример запуска:
Если кому-то еще не повезет, Джон всегда будет покупать напитки.
источник
JavaScript (с Underscore.js )
Поскольку javascript не имеет встроенного shuffle, мы будем использовать Underscore.js
источник
JavaScript
Вторая попытка, это немного сложнее:
источник
N
-арную функцию в JavaScript, знает оarguments
переменной.C ++
Чтобы быть справедливым, мы должны провести много-много испытаний и выбрать того, кого выбирают чаще всего.
источник
1<<31 == 0x80000000
несмотря ни на что, по самому определению<<
, и на дополнении 32-битной 2, это такINT_MIN
. Возможно, вы думаете о том,1<<32
что может или не может== 0
? (Потому что на x861<<32
обычно оценивается в 1 ...)T-SQL (2008+)
Объяснение:
Предлагаемое улучшение:
источник
Lua
источник
math.random()
без аргументов также возвращает число в диапазоне[0,1)
. -1 за то что не уловил.Идиоматический C ++ 11
Когда речь идет о напитках, особенно важно быть в курсе последних стандартов и стилей кодирования; Это отличный пример высокоэффективного и совместимого с идиомами средства выбора имен C ++ 11.
Он высевается из системных часов и выводит начальное число вместе с именем для проверки каждый раз.
Попробуйте это в прямом эфире: http://ideone.com/KOet5H
источник
JavaScript
источник
питон
источник
random.seed()
должен быть2
(по умолчанию). Если вы передадитеversion=1
,hash()
строка будет использоваться в качестве начального числа вместо всей строки, и, поскольку Python случайным образом заполняет хеш-значения строк, начиная с 3.2, вы получите фактически случайное имя.Perl
Эмме лучше не забывать свою сумочку! Работает под
strict
иwarnings
.источник
JavaScript
источник
parseInt(Math.random(0, 4))
и, возможно, добавить комментарии типа -Math.random
возвращает двойное число, поэтому сначала преобразуйте его в целое числоMath.random
ничего не значит для наших скудных параметров. Числа выбирает по-своему.|0
правильно округлять неожиданный результат, и поэтому не является источником какого - либо обмана.|0
Для некоторых это очевидно (для всех нас, скорее всего), но я бы поспорил, что есть много людей, которые понятия не имеют, что он делает. Это группа, на которую я рассчитывал обмануть.|0
, если вы знаете , что он делает, похоже , что это округление вниз, и это будет округление вниз, так что это не обман. (И если кто-то понятия не имеет, что|0
делает, то нет смысла вводить в заблуждение код; вы можете просто сказать ему все, что хотите, чтобы он поверил.) Вместо этого неожиданное поведение в вашем ответе основано на факте, которыйMath.random(0,4)
функционально идентиченMath.random()
, потомуMath.random
что не использует параметры.J
Бедная Джули ... Мелочи: это, возможно, был самый чистый J, который я когда-либо писал ...
источник