Twoim wyzwaniem jest napisanie programu do tłumaczenia (angielskiego) leetspeak / lolspeak / txtspk na normalny angielski. Twój program powinien czytać ze standardowego wejścia i wyjścia na standardowe wyjście, chyba że Twój język ich nie obsługuje.
Możesz użyć pliku zawierającego listę słów w języku angielskim, oddzielone nowymi wierszami. Powinien zostać wywołany W
i znajdować się w tym samym katalogu, co twój program. (W systemach GNU / Linux i ewentualnie innych możesz utworzyć W
link do /usr/share/dict/words
) Lista nie musi być pisana małymi literami, możesz jej użyć, aby określić, czy słowa powinny mieć wielkie litery.
Jest to oparte na usuniętym teraz pytaniu przesłanym przez Nikosa M., które można znaleźć tutaj . Nie jest to duplikat, ponieważ to oryginalne pytanie zostało zamknięte i nie otrzymano żadnych odpowiedzi, ponieważ nie było kryterium wygranej, a użytkownik nie chciał go podać.
Punktacja
Punktacja jest nieco skomplikowana!
Twój wynik to
(leet items + bonuses) * 10 / (code length)
Najwyższy wynik wygrywa.
Twój program nie musi być i prawdopodobnie nie może być idealny, ale im dokładniejszy, tym więcej dostanie bonusów!
Ponieważ $
może to oznaczać jedno s
i drugie S
, otrzymasz premię w wysokości 5 punktów za każdy element leet za podjęcie decyzji, czy powinna ona zawierać wielką literę (tj. Wielkie litery na początku zdań).
Dostajesz dodatkową premię w wysokości 5 punktów za każdy element leet za wdrożenie odpowiednich rzeczowników (słów, które zawsze mają wielkie litery) - sposób, w jaki to działa, polega na tym, że przeglądasz listę słów, sprawia, że wyniki są pisane dużymi literami, jeśli tylko listę, a jeśli obie wersje są dostępne, po prostu zgadnij.
Jeśli znak ma dwa znaczenia (np. 1
Może oznaczać L
lub I
), dostajesz 20 punktów za element leet za wybranie tylko tych tłumaczeń przedmiotu, które tworzą prawdziwe angielskie słowa - użyj do tego listy słów. Jeśli więcej niż jedno tłumaczenie elementu leet tworzy prawdziwe angielskie słowo, możesz dowolnie wybrać jedno z ważnych tłumaczeń i nadal otrzymać bonus.
Lista Leet
Są to elementy, które możesz wdrożyć. Nie musisz wdrażać ich wszystkich, ale im więcej dodasz, tym więcej punktów otrzymasz.
Nigdy nie możesz zdobyć punktów, tłumacząc przedmiot lub postać na siebie. Ta zasada zastępuje wszelkie błędy, które mogłem popełnić na liście.
Kuszące jest zrobienie prostego tr
lub s/.../.../g
. Prawdziwym wyzwaniem jest ustalenie, które z wielu znaczeń może, a nie może być poprawne, za pomocą listy słów.
Leet Items (każdy z nich dodaje 1 do leet items
formuły)
$ -> s, S (-> c, C 5 -> s, S @ -> a, A 4 -> a, A 3 -> e, E 7 -> t, T + -> t, T # -> h, H teh -> the 'd -> ed pwnd -> pwned pwnt -> pwned k, K -> OK kk -> OK 0 [zero] -> o, O y, Y -> dlaczego 4 -> dla txt -> tekst dafuq -> co do cholery / \, ^ -> a, A \ / -> v, V d00d -> koleś n00b -> nowicjusz \ / \ / -> w, W 8 -> b, B | _ | -> u, U | - | -> h, H Я -> r, R j00 -> ty joo -> ty vv, VV -> w, W tomoz -> jutro | <-> k, K [), |) -> d, D <3 -> miłość > <-> x, X 10100111001 -> leet (binarna reprezentacja 1337) 2 -> też ur, UR -> twoja, jesteś (nie musisz poprawnie rozróżniać między nimi) u, U -> ty 8 -> -ate-, 8 x, X -> -ks -, - cks- z, Z -> s, S 1 -> i, I, l, L ! -> ja, ja ,! c, C -> patrz, C, morze b, B -> be, B, pszczoła [litera akcentowana] -> [forma nieakcentowana] (wynik 1 za obsługiwaną literę akcentowaną) &, 7 -> oraz, anned, ant (może być użyty w środku słowa)
Harder „Leet”: zdobądź 30 punktów za leet items
każdy
!!! 1 !! 1-> !!!!!!! (przetłumacz 1 w sekwencji! na!!) !!! jeden! -> !!!!! ! jedenaście-> !!!
Przykłady
Oto przykłady tego, co program, który implementuje wszystkie powyższe postacie leet i niektóre bonusy, może zrobić:
Przykładowe zdanie: |-|3 15 $|_|(# @ n00b
=He is such a newbie
Cenzura Leeta: $#!+
=s**t
Extreme leet: \/\/ 1 |< 1 P 3 [) 1 A
=Wikipedia
-xor sufiks: H4X0R
=hacker
Bardziej ekstremalny leet: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
=Always post your new questions in the sandbox
Przykład punktacji
Bash, 10 postaci, 3 przedmioty, brak bonusów:
tr 137 let
To wyniki ( 1 * 3 ) * 10 / 10 = 3
.
źródło
tr
lubs/.../.../g
. Tłumaczenie takich rzeczy byłoby nudnym wyzwaniem, dlatego musimy nagradzać lepsze tłumaczenia, które korzystają z listy słówsed
scenariusz.)sed
skrypt, mam na myśli coś więcej niż prostys/.../.../g
, ale plik, który jest analizowany i wykonywanysed
sam. Jakkolwiek zwięzły jest ten język, może być przyzwoitym językiem gry w golfa ...sed
skrypty są również w porządku i mogą być bardzo interesujące, mogłyby sobie z tymsed
Odpowiedzi:
JavaScript (49 + 5635) * 10/2174 = 26,14
Demo online:
Opcja „Prawdziwy słownik” nie działa w polu rozwijanym, ale będzie działać, jeśli zostanie uruchomiona na prawdziwym serwerze WWW. Testowane na serwerze deweloperskim Visual Studio i Google Chrome.
https://dl.dropboxusercontent.com/u/141246873/leettranslator/index.html
Wynik:
49 leet przedmiotów = 49
Bonus kapitalizacji = 5 * 49 = 245
premia za wyszukiwanie słownika = 20 * 49 = 980
premia za wykrzyknik * 3 = 90 * 49 = 4410
(przedmioty leet + bonusy) * 10 / (długość kodu)
(49 + 5635) * 10/2174 = 26,14
Kod:
Nie golfowany:
Wyniki testów:
Uwagi:
Słownik jest osobnym plikiem javascript z obiektem o nazwie W zawierającym wszystkie słowa. Zawiera tylko słowa potrzebne do przeprowadzenia odpowiednich testów.
źródło
W.js
jeśli został usunięty)Haskell - Wynik 1.421421421: (37 pozycji + (21 bonusów (wielkie litery) * 5)) * 10 / (999 bajtów)
To moja ostatnia odpowiedź.
Testy
Po skompilowaniu programu do pliku o nazwie
min-lt
możesz napisać następujący skrypt powłokiktóry to wydrukuje
źródło
-ks-
miałem na myśliks
w środku wyrazu. Zajmę się tym, jak tylko znajdę kompilatorhaskell-platform
pakiet. Czy masz przykładks
?<insertnamehere> rocX
lubroX
Rozszerzony BrainFuck : 0,6757
Czyni to 15 tłumaczeń „$ (5 @ 437 + # 0821! &”, Bez bonusów i ma 222 bajty (niepotrzebne podawanie linii nie jest wliczone). 15 * 10/222 = 0,6757
Stosowanie:
EBF nie jest tak naprawdę przeznaczony do gry w golfa, ale jego funkcja rle, makra i ciąg znaków drukowania są nieco łatwiejsze do kompresji niż BrainFuck. Kompilowany na końcu plik binarny BrainFuck wygląda następująco:
źródło
~"OTLHEAND"
Mógłbym zrobić wszystkie znaki tylko raz dla 107 bajtów kodu obiektowego zamiast robić je od 0 za każdym razem przy użyciu 354, ale moja odpowiedź jest zoptymalizowana dla rozmiaru kodu EBF :)Java: 1.236
Czyni to następujące transformacje
Obliczanie wyniku jest trudne
((39 + (21 * 5)) * 10) / 1165 = 1,236
Kod bez gry w golfa:
źródło
Wynik C # 45 * 10/2556 = 0,176
Program może wyświetlać prawie wszystkie małe i duże litery. Ponieważ nie używam angielskiej listy słów, użyty został pierwszy klucz znaleziony w Słowniku. Np. \ / \ / Staje się vav. Jeśli char jest pierwszą literą słowa, stosuje się ToUpper.
Oto mój wynik testu:
źródło