Utwórz funkcję, która pobiera ciąg sylaby pinyin jako argument i zwraca wartość true dla kombinacji, w przeciwnym razie wartość false.
Użyj „v” dla „ü”.
Oto pełna lista kombinacji. http://www.pinyin.info/rules/initials_finals.html
Przykłady
f("bu") == true
f("zheng") == true
f("nv") == true
f("ri") == true
f("cei") == false
f("ia") == false
f("kian") == false
f("qa") == false
Nie rób takich rzeczy, jak skrobanie stron internetowych lub czytanie plików metod wprowadzania, aby zmniejszyć liczbę znaków. (Jeśli to zrobisz, długość danych będzie liczona do liczby znaków) Jednym z celów tego kodu golfa jest sprawdzenie, w jaki sposób można uprościć reguły. Najkrótszy kod wygrywa.
code-golf
kolmogorov-complexity
Ming-Tang
źródło
źródło
nar
? : Pnvi
kiedykolwiek była to poprawna kombinacja.Odpowiedzi:
JavaScript 1.6,
503496477 znakówSformatowano trochę bardziej czytelnie (wykluczając wszelkie błędy przy dzieleniu kodu na kilka wierszy):
Przypadki początkowe od zera oraz kilka zdarzeń jednorazowych są testowane przy użyciu wyrażenia regularnego. Następnie tabela jest kodowana jako (połączona) seria 6 cyfr, liczba podstawowa 36, po jednej na dźwięk początkowy. Wyszukiwanie następnie używa pary
indexOf
połączeń i Shift, aby wybrać odpowiedni bit.Testowane względem wszystkich komórek w tabeli kombinacji (wypełnione komórki testowane na prawdziwość, puste komórki testowane na fałsz).
Edycja: Zastąpiłem niektóre z 36 znaków wyszukiwania podstawowego 36 porównaniami, ponieważ g–, k–, h–, j–, q– i z– mają gęste bloki wartości prawda / fałsz.
Edycja: Zmieniono ułożenie testu bitów, aby uniknąć niepotrzebnych
!!
i bardziej zagęściło wyrażenie regularne.źródło
!!
? Nie jestem pewien, czy rozumiem, dlaczego miałbyś kiedykolwiek potrzebować podwójnej nie ...if (g(s) == (validList.indexOf(s) >= 0)
którą zwraca false16 == true
; Dyskutowałem o tym z perspektywy „co to prawda” naprawdę znaczy „i zostawiłem to w sobie. W obu przypadkach mam dziś planowaną zmianę na później, która zakończy się!!
zastąpieniem1<<r&*parseInt
(mniej więcej)(parseInt>>r)&1
tak, aby return wynosi 1 i golę dwa znaki.PHP, 548 znaków
To prawda, że prawdopodobnie nie jest to optymalne, ale napisałem wyrażenie regularne w celu dopasowania prawidłowych kombinacji pinyin. Zredukowane znaki poprzez zastąpienie powtarzających się podciągów zmiennymi.
Kod
Stosowanie
źródło
F #, 681 znaków
Nie do końca rozumie sylaby bez poprawnej początkowej spółgłoski (Y, W itp.).
źródło
APL (Dyalog Extended) , 475 bajtów
Wypróbuj online!
Gra w golfa w toku.
Nie golfił
Wypróbuj online!
Funkcja pomocnika
s
rozpakowuje łańcuch rozdzielany spacjami:Najpierw przechowuję ewentualne ciągi początkowe i końcowe w sylabie, a następnie tworzę tabelę
tab
zawierającą konkatenację każdego ciągu z pierwszej listy z każdym ciągiem z drugiej listy.Następnie przechowuję dane binarne jako listę liczb całkowitych. Niektóre liczby całkowite są powtarzane i dlatego mogą być przechowywane w zmiennych, co pozwala również na elucję niektórych spacji.
Każda liczba całkowita jest dekodowana na binarną i reprezentuje jeden wiersz tabeli. Każdy bit liczby wskazuje, czy dana sylaba w tym wierszu jest prawidłową sylabą, przy czym MSB reprezentuje pierwszą kolumnę. Wszystkie nieprawidłowe sylaby są usuwane z tabeli.
Spłaszczamy tabelę do listy, dodajemy formularze bez początkowej spółgłoski jako specjalny przypadek i na koniec sprawdzamy, czy nasze dane wejściowe znajdują się na liście.
Możliwy dalszy potencjał golfowy:
Pomocny generator skryptów i przypadków testowych w Pythonie: Wypróbuj online!
źródło