Entry tags:
(no subject)
Последними дискуссиями у Витуса навеяло.
Я очень хорошо помню этот момент. Год был 1992-й, я только поступил в институт. Мы с Лешей Студеновым собирались писать на Pascal-е (C я тогда не знал) некую экономическую игру. Договорились вечером, разошлись по домам, и я задумался.
Игра начиналась с раздачи карт. Карты естественным образом ложились в двумерный массив, а раздавать надо было датчиком случайных чисел. И тут я задумался - а что, если одна и та же карта выпадет в раздаче дважды? Немного подумав, я понял, что просто повторять раздачу этой карты бесполезно - то же число может выпасть и третий раз. Мне стало очень грустно. И тут меня осенило - есть же цикл while! Он решит все проблемы!
Второго такого озарения с тех пор в моем програмистском опыте не было. Но ощущения я запомнил навсегда.
Я очень хорошо помню этот момент. Год был 1992-й, я только поступил в институт. Мы с Лешей Студеновым собирались писать на Pascal-е (C я тогда не знал) некую экономическую игру. Договорились вечером, разошлись по домам, и я задумался.
Игра начиналась с раздачи карт. Карты естественным образом ложились в двумерный массив, а раздавать надо было датчиком случайных чисел. И тут я задумался - а что, если одна и та же карта выпадет в раздаче дважды? Немного подумав, я понял, что просто повторять раздачу этой карты бесполезно - то же число может выпасть и третий раз. Мне стало очень грустно. И тут меня осенило - есть же цикл while! Он решит все проблемы!
Второго такого озарения с тех пор в моем програмистском опыте не было. Но ощущения я запомнил навсегда.
no subject
no subject
Вообще мое любимое занятие как программиста (после пристройки плюс-минус нового куска, если это не требует нудного кодирования базового фреймворка) - выжимать максимум из имеющейся архитектуры. Расшивая узкие места по необходимости, но все равно расширяя имеющееся.
no subject
no subject
P.S. Причём автоопределяет cp1251 и utf-8. Сейчас с интересом читаю мой любимый текст "весь юникод по алфавиту", смотрю, какие буквы в нём есть. Уже нашлись: латиница разная, греческий, кириллица, иврит, арабский, тайский и деванагари. Дальше крутить лень.
P.P.S. Но вот нормальной навигации по большому тексту встроенной всё-таки, похоже, нет.
... В Греции всё есть, даже проблемы с кодировками ...
no subject
Правда, тогда цикл понадобится для того чтобы найти карту номер N, не считая уже выданых. Но зато время завершения детерминировано.
Этот способ более точно имитирует раздачу карт из колоды. Хотя еще более точной имитацией было бы сгенерировать случайную перестановку массива, а потом просто отсчитать N первых.
no subject
Узнаешь много нового и интересного (например, она пользуется двумя разными алгоритмами в зависимости от соотношения размеров колоды и выборки).
... За каникулами, книгами и кеннингами канувших князей ...
no subject
no subject
Вообще-то можно просто закодить формулу, который по заданному [псевд]случайному семечку возвращает псевдослучайную последовательность заведомо неповторяющихся чисел, причем в нужном диапазоне. У Кнута, скажем, спереть - у него целый том этому посвящен, помнится.
Кинуть кубик еще раз, кстати, плохой метод, порождает уязвимости.
no subject
Фамилию Кнута я тогда не слышал еще.
no subject
Вопрос: хочу получить последовательность чисел от 0 до N-1, в случайном порядке, причём они не должны повторяться.
Ответ:
x(n+1) = (a * x(n) + c) % N, x(0) = rand(),
где a взаимно просто с N;
a - 1 кратно p для всех простых p — делителей m;
a - 1 кратно 4, если m кратно 4.
Выдаёт числа от 0 до N-1 в псевдослучайном порядке.
Это называется линейным конгруэнтным генератором (linear congruential generator, LCG). Существует множество других генераторов. Подробности во втором томе Кнута.
no subject
no subject
no subject
no subject
no subject
no subject
... Ледяные ласки огненных лисиц ...
no subject
Кто-то тут недавно рассказывал про GPF, вызванный ошибкой в самописном рандоме - возвращал число не от 0 до n-1, а до n - а результат использовался как индекс в массиве.
no subject
ПыСы: генератор совершенно не обязан быть самописным. Просто сишники с молоком матери впитали, что верхняя граница диапазона всегда исключительная (i=0;i<n;i++), а rand определена в stdlib как возвращающая величины от 0 до RAND_MAX включительно. Плакать после слова "грабли".
... Зачем ты выключил свопинг? ...
no subject
no subject
... Вы сбиваете с толку весь Париж! ...
no subject
Кстати, полагаю, что либо это в стандарте не особо оговорено, либо каждый производитель компилятора трактует по-всякому.
Из ISO 9899:1999 (E)
То есть да, формулировка недостаточно точная, но пример всё проясняет.
no subject