Я написал какой-то текст, но он выглядит слишком профессионально. Я хочу, чтобы я выглядел так, как будто я очень устал, когда писал это. Мне нужно, чтобы вы вставили несколько опечаток.
Ваша задача состоит в том, чтобы взять произвольную строку текста и добавить опечатки. Это означает, что для каждого персонажа будет 10% шанс его типизации.
Определение «typofied» заключается в том, что вы должны выбрать (случайным образом) одно из следующих:
- Дублируйте персонажа.
- Удалить персонажа.
Сдвиг символа на одну клавиатуру. «Клавиатура» определяется как:
qwertyuiop asdfghjkl zxcvbnm
Для смены персонажа вы должны пройти один пробел вверх, вниз, влево или вправо. Это должно быть выбрано случайно. Опция сдвига применяется только к буквенным символам. Дело должно быть сохранено. Будьте осторожны с крайними случаями, как
m
!
Определение «случайный» заключается в том, что результат не должен быть предсказуемым (глядя на предыдущие результаты). Например, вы не можете вводить каждый десятый символ. Кроме того, случайность должна иметь равномерное распределение. Например, вы не можете сделать 30% дубликатов, 30% удаления и 40% сдвига; это должен быть шанс 1/3 для каждого (1/2 для каждого, если это не алфавитный символ).
Пример ввода:
This is some correct text. It is too correct. Please un-correctify it.
Пример вывода:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
Это код-гольф , поэтому выиграет самый короткий код в байтах.
Ответы:
GolfScript, 120 символов
Код можно проверить здесь .
источник
C 358 байтов
(Есть только три строки кода, но я разбил строку 3 для удобочитаемости)
Массив строк в начале перечисляет возможные смежные клавиши для каждой буквы алфавита. Мне пришлось удвоить «O» (рядом с «P»), чтобы избежать вычисления
random()%1
при выборе сдвинутого символа.Тестовый забег:
Обновить:
Вот расширенная и прокомментированная версия того же исходного кода:
источник
char*s[26]
. Компилятор должен сам это понять.continue
s наelse
s. (оставить там,;
где был первый).Руби, 168
Немного короче, используя стратегию индексации массива:
Оригинальная версия регулярного выражения (184):
источник
Kernel#putc
для распечатки выходных данных, так как для этого не нужны парены, за исключением одного символа. Конечно,putc
печатается только первый символ, и выходная строка иногда может содержать два символа. Глупая ошибка. Попробуйте эту версию!Питон, 251
Очень простая техника поиска, на мгновение я подумал, что может быть дешевле кодировать клавиатуру как неориентированный граф, но накладные расходы на создание такого типа в Python оказались непомерно высокими. Поскольку случайные функции Python имеют слишком описательные имена, я использую их
choice()
исключительно, переименовывая вw
. 10% вероятность ошибки обрабатывается тем,w([z]*9+[...])
что девять копий нетипизированного символа находятся в списке с одной опечаткой.-16 символов - спасибо grc, +2 символа (и правильность, стоит намного больше, чем 2 символа) - спасибо Дхара
источник
d="SQ VNH XVF...".split()
, уберите пробел послеprint
и заменитеif
/else
на([...]+[...])*z.isalpha()
. Кроме того, вам не нужна переменная,d
поскольку вы используете ее только один раз.w=__import__('random').choice
(по крайней мере, в Python 3 afaik).input()
иprint()
сохранить 2 символа.C #, 320 байт (360 байт с программным переносом)
Включает поддержку «сдвинутых» заглавных букв.
Как функция (320 байт):
Как программа, которая читает строку текста (360 байт):
Пример ввода-вывода:
источник
Func<int,int> n=x=>r.Next(x);
хорошую идею. Если бы только компилятор мог определить тип для делегатов ...JS,
303,288,275,273, 274 (исправление ошибки)Алгоритм скольжения клавиш:
Версия без гольфа для каждого запроса:
источник
;
. Это единственный способ сказать, что он на самом деле имеет 274 байта. Кроме того, он работает только на новых версиях Javascript и JScript.Perl,
278239197169162156151149Запустите с
-p
, затем 148 + 1 = 149 байт. Например:Без гольфа, более или менее:
Сначала я подумал, что выбор элемента случайным образом в массиве (из 26 из них различной длины) является более статистически «чистым» (т.е. случайным), но, возможно, это было неправильно. (См. Предыдущую версию.) Эта последняя попытка, следуя за лидерами :-), идти вдоль строки либо -1,1, -11,11 (случайным образом), и повторяться до действительного шага.
Изменить: Благодаря помощи tobyink и других оптимизаций нам удалось значительно уменьшить размер кода.
Последний подход использует некоторые приемы с поиском по регулярному выражению, чтобы найти правильный шаг вдоль строки подстановки, исключая ручные проверки.
Другое редактирование: 5 байтов выключено, потому что нам не нужны целые числа для индексов массива + небольшой трюк с недопустимым индексом массива Я попробовал тот же трюк с
[-4+rand@-]
(т.е. отрицательными индексами) и избавился от одного элемента списка,'',
но он ничего не сохранил.Изменить: Назад к простоте - замена состояние
~~rand 10
сrand>.1
экономит 2 байта ...источник
sub i
. Вы не используете строгий, поэтому'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
может быть дан как голое слово (сохраняет два символа кавычки). Точно так же можно'Z'
(хотя это означает, что вам нужно добавить пробел между ним иgt
, таким образом, он сохраняет только один символ). Общая экономия: 4 символа.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
может быть переписана как($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Это означает, что оценка не ленивая (она рассчитывает все три способа замены символа до выбора метода замены), но она работает, и по моим вычислениям она сохраняет еще семь символов.gt'Z'
- их можно отбросить. Со всеми этими изменениями вы сможете уменьшить его до 184 символов.$s
в$,
(это встроенная переменная является разделитель полей дляprint
, но вы не печать нескольких полей в любом месте, так что это встроенный в использовании не имеет значения, что делает переменную созревший для повторного использования), то вы можете устранить пробел в , что$s x3
делает его просто$,x3
.PHP, функция с 368 байтами
Вот моя попытка.
Это какой-то "frankencode", но он вроде работает.
Более «читаемый» код:
Единственная разница между двумя кодами состоит в том, что у каждого есть тонны вкладок и новых строк.
Он не производит точно такой же тип «некорректности», но он либо удаляет, либо заменяет символ, используя указанные условия.
Вы можете попробовать это на http://writecodeonline.com/php/ .
Скопируйте и вставьте этот код:
После тестирования, пожалуйста, скажите мне, если это правильный ответ.
источник
C #, 581 байт
и в более читаемом формате:
источник
PHP,
326320318315 символовИ более читаемая и прокомментированная версия:
Думаю, все еще можно улучшить.
-2, -3 благодаря Исмаилу Мигелю
источник
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
изменения,(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
и вы сэкономите 2 байта.($e?0:32)
, заменив32*!!$e
(заметьте отсутствие скобок), сохраните 2 байта. Если$e
ВСЕГДА логическое значение, вы можете сделать это32*!$e
и сохранить 3 байта. Это будет работать, потому что php имеет арифметический приоритет. Это означает, что умножения и деления делаются перед любым сложением и вычитанием.Java (475 байт)
Это моя попытка в многословном языке Java. Получение случайных чисел довольно долго в Java, и отображение не очень эффективно. Это, вероятно, может быть улучшено.
Использование:
Несжатый, похвалы добавил:
источник
AutoHotkey 441 байт
Входные данные должны быть заданы как параметр командной строки, а выходные данные - как сообщение об ошибке.
Гольф версия
Версия без гольфа и аннотированная версия (отличие в том, что в этой версии больше пробелов, а назначения переменных расположены на отдельных строках для удобства чтения).
источник