Вдохновленный этим вопросом CR (пожалуйста, не убивайте меня за просмотр CR)
спекуляция
Вероятности неправильного написания слова:
- 1/3 времени не меняйте выход
- 1/3 времени удалить случайного персонажа
- 1/3 времени дублирует случайный символ
Вероятность удаления / дублирования заданного символа на входе должна быть одинаковой для всех символов.
Если два последовательных символа одинаковы (с учетом регистра), вероятность изменения одного из них должна быть такой же, как если бы они были одним символом. Т.е. выходы для AA
(которые являются AA
или A
или AAA
) должны иметь одинаковую вероятность.
Ввод будет содержать только буквы для простоты.
Примеры
Первая строка - это ввод, следующие строки - все возможные ошибки. Каждая строка должна иметь одинаковую вероятность вывода, входные данные исключены в примерах, но все равно должны иметь 1/3 вероятности вывода.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: если вы удалите символ, он может стать (-f) oo, f (-o) o и fo (-o). Так чтоfo
должно быть в два раза чащеoo
, но вы говорите, что каждая строка имеет равную вероятность.If two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
Ответы:
Пип ,
3827 байтЭто было весело - использовать возможности регулярных выражений Пипа и изменяемые строки, которые я давно не использовал. Принимает ввод через аргумент командной строки.
Объяснение:
Попробуйте онлайн!
источник
Руби,
6455 + 1 (p
флаг) = 56 байтВвод - это строка STDIN, переданная без завершающей строки.
источник
CJam (21 байт)
Онлайн демо
рассечение
источник
JavaScript (ES6), 107
Меньше гольфа
Тестовое задание
источник
Java 7,
189180178 байтUngolfed и тестовые случаи:
Попробуй это здесь.
Возможный вывод:
источник
Python 2, 134 байта
Пробелы в цикле for являются вкладками.
Попробуйте это на Ideone
источник
Pyth - 17 байт
Этот на самом деле обрабатывает специальные случаи с последовательным символом правильно.
Тестовый пакет .
источник
APL, 21
Это начинается с создания вектора нулей с 1 в случайном положении. Затем умножает его на случайное число от 1 до 3. +1 и мод 3 получает вектор со всеми 1 и одним случайным образом расположенным 0,1 или 2.
Наконец, ⍵ / ⍨ говорит, что каждая буква должна быть написана n раз, где n - числа в векторе.
Попробуйте это на tryapl.org
источник
Python 2, 123 байта
источник
JavaScript (ES6), 103
источник
APL, 27 байт
Объяснение:
Тестовое задание:
источник