Napisałem jakiś tekst, ale wygląda zbyt profesjonalnie. Chcę, żeby wyglądało na to, że byłem naprawdę zmęczony, kiedy to napisałem. Musisz wstawić kilka literówek.
Twoim wyzwaniem jest pobranie dowolnej pojedynczej linii tekstu i dodanie literówek. Oznacza to, że dla każdej postaci będzie 10% szans na jej typof.
Definicja „typofied” polega na tym, że musisz (losowo) wybrać jedną z następujących opcji:
- Duplikuj znak.
- Usuń znak.
Przesuń znak o jeden klawisz na klawiaturze. „Klawiatura” jest zdefiniowana jako:
qwertyuiop asdfghjkl zxcvbnm
Aby zmienić postać, musisz przejść o jedno pole w górę, w dół, w lewo lub w prawo. Należy to wybrać losowo. Opcja przesunięcia dotyczy tylko znaków alfabetycznych. Sprawa musi zostać zachowana. Zachowaj ostrożność przy takich przypadkach, jak
m
!
Definicja „losowy” jest taka, że wynik nie może być przewidywalny (patrząc na poprzednie wyniki). Na przykład nie możesz typofy co dziesiątej postaci. Ponadto losowość musi mieć równomierny rozkład. Na przykład nie można wykonać 30% duplikatu, 30% usunięcia i 40% przesunięcia; musi to być 1/3 szansy dla każdego (1/2 dla każdego, jeśli jest to postać niealfabetyczna).
Przykładowe dane wejściowe:
This is some correct text. It is too correct. Please un-correctify it.
Przykładowe dane wyjściowe:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
To jest golf-golf , więc wygra najkrótszy kod w bajtach.
Odpowiedzi:
GolfScript, 120 znaków
Kod można przetestować tutaj .
źródło
C, 358 bajtów
(Są tylko trzy wiersze kodu, ale podzieliłem wiersz 3 dla czytelności)
Tablica ciągów na początku zawiera listę możliwych sąsiadujących klawiszy dla każdej litery alfabetu. Musiałem podwoić „O” (sąsiadujące z „P”), aby uniknąć obliczeń
random()%1
przy wyborze przesuniętej postaci.Testowe uruchomienie:
Aktualizacja:
Oto rozszerzona i skomentowana wersja tego samego kodu źródłowego:
źródło
char*s[26]
. Kompilator powinien być w stanie sam to zrozumieć.continue
s naelse
s. (zostaw miejsce;
pierwszego).Ruby, 168
Nieco krótszy czas przy użyciu strategii indeksowania tablic:
Oryginalna wersja wyrażeń regularnych (184):
źródło
Kernel#putc
do drukowania wyników, ponieważ nie wymagało to parens, oszczędzając mi jedną postać. Oczywiścieputc
drukuje tylko pierwszy znak, a ciąg wyjściowy może czasem mieć dwa znaki. Głupi błąd. Wypróbuj tę wersję!Python, 251
Bardzo prosta technika wyszukiwania, przez chwilę myślałem, że taniej byłoby zakodować klawiaturę jako niekierowany wykres, ale narzut związany z tworzeniem takiego typu w Pythonie okazał się zaporowy. Ponieważ losowe funkcje Pythona mają zbyt opisowe nazwy, używam ich
choice()
wyłącznie, zmieniając ich nazwę naw
. 10% szansy na błąd jest obsługiwane przez miejsce, ww([z]*9+[...])
którym dziewięć kopii nietypowej postaci znajduje się na liście z jedną literówką.-16 znaków - dzięki grc, +2 znaki (i poprawność, warte wiele więcej niż 2 znaków) - dzięki Dhara
źródło
d="SQ VNH XVF...".split()
, po usunąć przestrzeńprint
i wymienićif
/else
z([...]+[...])*z.isalpha()
. Nie potrzebujesz też zmiennej,d
ponieważ używasz jej tylko raz.w=__import__('random').choice
(przynajmniej w Python 3 afaik).input()
i,print()
aby zapisać 2 znaki.C #, 320 bajtów (360 bajtów z zawijaniem programu)
Obejmuje obsługę „przesuniętych” wielkich liter.
Jako funkcja (320 bajtów):
Jako program, który czyta wiersz tekstu (360 bajtów):
Próbka wyjściowa wejściowa:
źródło
Func<int,int> n=x=>r.Next(x);
dobry pomysł. Gdyby tylko kompilator mógł wnioskować o typie dla delegatów ...JS,
303,288,275,273, 274 (naprawa błędów)Algorytm dla klucza:
Wersja bez gry w golfa na żądanie:
źródło
;
. To jedyny sposób, aby powiedzieć, że faktycznie ma 274 bajty. Poza tym działa tylko w nowszych wersjach Javascript i JScript.Perl,
278239197169162156151149Uruchom z
-p
, a następnie 148 + 1 = 149 bajtów. Na przykład:Bez golfa, mniej więcej:
Na początku myślałem, że losowy wybór elementu w tablicy (26 z nich o różnych długościach) jest bardziej statystycznie „czysty” (tj. Losowy), ale być może był zły. (Zobacz poprzednią wersję.) Ta ostatnia próba polega na podążaniu za liderami :-), przechodzeniu wzdłuż ciągu przez -1,1, -11,11 (losowo) i powtarzaniu do poprawnego kroku.
Edycja: Dzięki pomocy tobyink i innym optymalizacjom udało nam się znacznie zmniejszyć rozmiar kodu.
Ostatnie podejście wykorzystuje kilka sztuczek z wyszukiwaniem wyrażenia regularnego, aby znaleźć prawidłowy krok wzdłuż łańcucha podstawienia, eliminując ręczne sprawdzanie.
Kolejna edycja: 5 bajtów wyłączone, ponieważ nie potrzebujemy liczb całkowitych do indeksów tablic + mała sztuczka z niedozwolonym indeksem tablic. Próbowałem tej samej sztuczki z
[-4+rand@-]
(tj. Indeksami ujemnymi) i pozbyłem się jednego elementu listy,'',
ale niczego nie zapisałem.Edit: Powrót do prostoty - zastępując warunek
~~rand 10
zrand>.1
oszczędza 2 bajty ...źródło
sub i
. Nie używasz ścisłego, więc'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
możesz podać go jako jedno słowo (zapisujesz dwa znaki cudzysłowu). Podobnie też może'Z'
(choć oznacza to, że musisz dodać spację między nim, agt
więc zapisuje tylko jedną postać). Łączne oszczędności: 4 znaki.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
można przepisać jako($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Oznacza to, że ocena nie jest leniwa (oblicza wszystkie trzy sposoby, w jakie postać może zostać podstawiona przed podjęciem decyzji o technice zamiany), ale działa i zapisuje kolejne siedem znaków według moich obliczeń.gt'Z'
- które można upuścić. Po tych wszystkich zmianach powinno być możliwe sprowadzenie go do 184 znaków.$s
na$,
(ta wbudowana zmienna jest separatorem pólprint
, ale nigdzie nie drukujesz wielu pól, więc jej wbudowane użycie jest nieistotne, co sprawia, że zmienna jest gotowa do ponownego użycia), możesz wyeliminować białe znaki w$s x3
co czyni go tylko$,x3
.PHP, funkcja z 368 bajtami
Oto moja próba.
To trochę „frankencode”, ale to trochę działa.
Bardziej „czytelny” kod:
Jedyną różnicą między 2 kodami jest to, że ma się mnóstwo zakładek i znaków nowej linii.
Nie wywołuje dokładnie tego samego rodzaju „nieprawidłowości”, ale usuwa lub zastępuje znak przy użyciu tych warunków.
Możesz spróbować na http://writecodeonline.com/php/ .
Skopiuj i wklej ten kod:
Po przetestowaniu proszę powiedzieć, czy jest to poprawna odpowiedź.
źródło
C #, 581 bajtów
i w bardziej czytelnym formacie:
źródło
PHP,
326320318315 znakówI bardziej czytelna i skomentowana wersja:
Przypuszczam, że wciąż można to poprawić.
-2, -3 dzięki Ismael Miguel
źródło
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
zmiany(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
i zaoszczędzisz 2 bajty.($e?0:32)
, zamieniając na32*!!$e
(zauważ brak nawiasów) oszczędzaj 2 bajty. Jeśli$e
ZAWSZE jest to wartość logiczna, możesz to zrobić32*!$e
i oszczędzasz 3 bajty. Działa to, ponieważ php ma pierwszeństwo arytmetyczne. Oznacza to, że mnożenia i dzielenia są dokonywane przed dodaniem i odjęciem.Java (475 bajtów)
To jest moja próba w pełnym języku, jakim jest Java. Pobieranie liczb losowych w Javie jest dość długie, a mapowanie nie jest tak naprawdę wydajne. Prawdopodobnie można to poprawić.
Stosowanie:
Nieskompresowane, dodano wyróżnienia:
źródło
AutoHotkey 441 bajtów
Dane wejściowe należy podać jako parametr wiersza polecenia, dane wyjściowe podano jako komunikat o błędzie.
Wersja golfowa
Wersja bez gry w golfa i z adnotacjami (różnica polega na tym, że ta wersja ma więcej białych znaków i przypisania zmiennych znajdują się w osobnych wierszach w celu zapewnienia czytelności).
źródło