Cel jest naprawdę prosty. Odbierając ciąg wejściowy, przeanalizuj wszystkie elementy HTML, które odpowiadają następującym znakom (w tym ich wariantom wielkich liter):
áàãâäéèêëíìîïóòõôöúùûüýÿ
Zasady analizy:
- Każdy byt zaczyna się
&
i kończy na;
- Pierwszym znakiem po
&
będzie zmodyfikowany znak (ważna jest litera!) - Pozostałe znaki odnoszą się do nazwy akcentu użyć (
acute
,grave
,circ
,tilde
iuml
). Nazwa akcentu MUSI być pisana małymi literami! * - Każdy podmiot, który wytwarza HTML znak, że nie ma na tej liście, lub że jest nieważny, należy pozostawić nietknięte (Np:
&
,&etilde;
,&a;
) - Jednostki numeryczne należy zignorować, ponieważ nie pasują do powyższych reguł
Ta zmiana została wprowadzona w dniu 18-02-2016. Wszystkie istniejące odpowiedzi, które akceptują jednostki HTML z dużymi nazwami akcentów, są poprawne. Wszelkie przyszłe odpowiedzi muszą być zgodne z tą zasadą.
Przykłady:
á //á
Téhèh //Téhèh
an & //an &
Wynik:
Dane wyjściowe mogą być w ISO-8859- X (1-15), Windows-1252 lub UTF-8/16/32.
Możesz wybrać jedno i tylko jedno prawidłowe kodowanie i użyć go do dowolnego wyniku. Możesz bezpiecznie założyć, że dane wejściowe będą w ASCII.
Każde z poniższych jest prawidłowym wyjściem dla á
:
á
(ISO-8859-1 / 15 lub Windows-1252, odpowiednik\xE1
)á
(UTF-8, odpowiednik\xC3\xA1
lub\u00E1
)aÌ
(UTF-8, odpowiednika\xCC\x81
luba\u0301
)- Dowolna kombinacja znaków diakrytycznych, bez użycia encji HTML.
Dane wyjściowe muszą być wizualnie podobne, gdy są renderowane / wyświetlane, do znaków na liście.
Pamiętaj, że wszystkie standardowe luki i wbudowane * są niedozwolone . Ponieważ jest to gra w golfa , najkrótsza odpowiedź wygrywa.
* Ta zmiana została wprowadzona z powodu wielkiego odrzucenia premii i kar, a w momencie pisania nie unieważnia żadnej odpowiedzi
Odpowiedzi:
Japt,
8175 bajtówSześć
?
s reprezentuje znaki niedrukowalne. Przetestuj online!Uwaga: Wyprowadza trzecią opcję kodowania; to znaczy litera, po której następuje surowe kodowanie UTF-8 odpowiedniego łączącego znaku diakrytycznego.
Jak to działa
Hexdump kodu:
źródło
Ý
sam, ale należy go zmienić na…JavaScript (ES6),
141122134 bajtówPodążyłem za przykładem Daavko, używając znaków diakrytycznych, i czuję się jak idiota, że nie zastanawiałem się nad użyciem go wcześniej. W rzeczywistości robi się zaskakująco krótko na JavaScript.
EDYCJA: Neil wyłapał kilka złych przypadków niezdefiniowanych, które są teraz naprawione.
źródło
String.prototype.replace
jest tak absurdalnie gra w golfa podczas przemierzania strun.É
(cokolwiek to jest właściwe).Siatkówka , 115 bajtów
Jestem nowym golfistą, ale myślę, że to może zadziałać.
Ta wersja została wykonana przed wprowadzeniem reguły, która nie zezwala na zastąpienie wielkich liter html (na przykład
Á
).Dość proste wyszukiwanie i zamiana. Wykorzystuje UTF-8.
Wykorzystuje podejście [litera] \ xCC \ x [kod szesnastkowy znaku diakrytycznego]. Znak diakrytyczny jest dodawany po każdej odpowiedniej literze.
Z jakiegoś powodu domyślna czcionka Droid Sans Mono w interpretatorze nie może poprawnie renderować liter „circ” i „uml”. Jeśli zmienisz to za pomocą narzędzi programistycznych na coś takiego jak DejaVu Sans, będzie dobrze. Myślę, że to ograniczenie czcionki, a nie programu. Ale jeśli to wina programu, postaram się to naprawić.
Oto wersja 129-bajtowa, która nie zastępuje wielkich liter HTML (na przykład
Á
)Wypróbuj online!
Wypróbuj online! Wersja 129-bajtowa
źródło
JavaScript (ES6), 288 bajtów
Tworzy obiekt mapy znaków (z podstawowym kodem numerycznym dla każdego znaku) i używa przesunięć (lub 0, jeśli nie istnieje), aby ustalić, czy obiekt powinien zostać przekształcony i jaki jest jego kod znaku. Symetria w przypadkach oznacza dodanie 32, jeśli małe litery, z wyjątkiem sytuacji
Ÿ
, gdy używa innego przesunięcia dla UTF8.źródło
Ÿ
UTF8: jest po prostu w dziwnym miejscu. Mimo to pomyślałem, że raczej dobrze skondensowałem i zoptymalizowałem, biorąc pod uwagę, że dosłowna lista zastąpień byłaby ponad dwa razy dłuższa. Widzisz coś, czego ja nie jestem?.toLowerCase()
. To imię jest OGROMNE !!! PonadtoString.fromCharCode
może przyjmować wiele parametrów lub być nazywanyString.fromCharCode.call([...])
i
flagi.