Natknąłeś się na stary indyjski rękopis, który opisuje kopce zakopanego skarbu. Manuskrypt informuje również o lokalizacji skarbu, z tym że niektóre kluczowe liczby zostały zakodowane pośrednio w tekście. Dowiadujesz się, że tekst wykorzystuje system „Kaadi”, ograniczony podzbiór bardziej powszechnego systemu „Katapayadi”.
(System Katapayadi to starożytny indyjski system do kodowania cyfr jako liter, często używany jako mnemonika do zapamiętywania długich cyfr).
Twoim zadaniem tutaj jest odkodowanie tekstu zakodowanego w systemie Kaadi i wydrukowanie wartości liczbowej.
Detale
Wprowadź znaki
System Kaadi opiera się na zasadach systemu Katapayadi , ale wykorzystuje tylko pierwszy rząd spółgłosek. Twój tekst tutaj został przetłumaczony na alfabet łaciński i wiadomo, że zawiera tylko:
- samogłoski „a”, „e”, „i”, „o”, „u”
- spółgłosek „g”, „k”, „c”, „j” i ich formy kapitałowe (reprezentujące aspirowaną formę tych spółgłosek) oraz „ṅ” i „ñ”.
(Możesz wybrać opcję otrzymywania i obsługiwać „ṅ” jako „ng”, a „ñ” jako „ny”, jeśli jest to wygodniejsze w Twoim języku).
Przypisanie wartości
W tym systemie
każda spółgłoska, po której następuje samogłoska, ma przypisaną cyfrę. To są:
'k'=>1, 'K'=>2,
'g'=>3, 'G'=>4,
'ṅ'=>5,
'c'=>6, 'C'=>7,
'j'=>8, 'J'=>9,
'ñ'=>0
Należy jednak pamiętać, że wartości te mają zastosowanie tylko wtedy, gdy po spółgłosek następuje samogłoska. kacCi
ma taką samą wartość jak kaCi
( ka
, Ci
= (1,7)), ponieważ środkowej c nie towarzyszy samogłoska.
Ponadto, początkowa samogłoska lub sekwencja obu samogłosek oznacza 0
aikaCi
, to:ai
,ka
,Ci
= (0,1,7)Dodatkowe samogłoski gdziekolwiek indziej w środku tekstu nie mają żadnej wartości:
kauCia
jest taki sam, jakkaCi
dodatkowe samogłoski można zignorować.
Końcowa wartość liczbowa
Po ustaleniu wartości cyfr literowych, ostateczna wartość liczbowa jest uzyskiwana jako odwrotna kolejność tych cyfr, tj. Pierwsza cyfra z tekstu jest najmniej znaczącą cyfrą w wartości końcowej.
Na przykład.
GucCi
ma Gu
i Ci
, więc (4, 7), więc końcowa wartość to 74.
kakakaGo
to (1,1,1,4), więc odpowiedź to 4111.
guṅKo
to (3,2), więc koduje 23. ( gungKo
jeśli używasz ASCII -odpowiednik.)
Wejście
- Ciąg zawierający tekst zakodowany w Kaadi
- będzie zawierać tylko samogłoski i powyższe spółgłosek
- samogłoski są zawsze pisane małymi literami i występują w grupach nie większych niż 2
- możesz zaakceptować litery 5 i 0 jako ich znaki Unicode „ṅ” i „ñ” lub jako ich odpowiedniki ASCII „ng” i „ny” (są pisane małymi literami w dowolnej formie)
- możesz założyć, że nie ma spacji ani interpunkcji
Wynik
- Wartość liczbowa tekstu, zgodnie z powyższymi zasadami
- w przypadku pustych danych wejściowych, oprócz 0, dopuszczalne są puste dane wyjściowe lub dowolne dane wyjściowe false-y w wybranym języku
- dla niepoprawnego wprowadzania (wprowadzania z użyciem czegoś innego niż samogłoski i powyższe spółgłosek), wynik jest niezdefiniowany - wszystko idzie
Przypadki testowe
"GucCi"
=> 74
"kakakaGo"
=> 4111
"aiKaCiigukoJe"
=> 913720
""
=> 0 //OR empty/falsey output
"a"
=> 0
"ukkiKagijeCaGaacoJiiKka"
=> 1964783210
"kegJugjugKeg"
=> 2891
"guṅKo"
=> 23
"Guñaaka"
=> 104
"juñiKoṅe"
=>5208
(ostatnie mogą być:
"gungKo"
=> 23
"Gunyaaka"
=> 104
"junyiKonge"
=>5208
jeśli wolisz.)
Obowiązują standardowe zasady we / wy i luki . Niech zwycięży najlepszy golfista!
aiaKaci
można wprowadzić? (3 wiodące samogłoski)ord(c)%47%10
daje unikalny indeks[0..9]
dla każdej spółgłoski. (Zord("ṅ")=7749
iord("ñ")=241
.)Odpowiedzi:
JavaScript (ES6), 83 bajty
Wypróbuj online!
W jaki sposób?
Używamy następującego wyrażenia regularnego, aby dopasować początek łańcucha lub jedną ze spółgłosek Kaadi, a następnie samogłoskę:
Dla każdego dopasowania w ciągu wejściowym wywołujemy następującą funkcję zwrotną, która przyjmuje zawartość c grupy przechwytywania jako parametr:
Wartość spółgłoski znajdujemy, szukając jej pozycji w wyrażeniu regularnym (przymuszanym do łańcucha przez dodanie jej do siebie).
Spółgłoski są uporządkowane w taki sposób, że ich wartość jest równa ich pozycji modulo 10 :
Kiedy dopasujemy początek łańcucha zamiast spółgłoski, c jest pustym łańcuchem, którego pozycja w wyrażeniu regularnym wynosi 0 - co, dogodnie, jest oczekiwanym wynikiem w tym przypadku.
Na koniec wstawiamy tę cyfrę na początku łańcucha wyjściowego o .
źródło
Siatkówka , 41 bajtów
Wypróbuj online! Link zawiera przypadki testowe. Wyjaśnienie:
Przetłumacz spółgłoski, po których następują samogłoski.
Obsługuj wiodącą samogłoskę.
Usuń wszystko inne.
Odwróć wynik.
źródło
Python 2 , 93 bajty
Nienazwana funkcja akceptująca ciąg Unicode, który zwraca ciąg reprezentujący wynik dziesięciu baz.
Wypróbuj online!
źródło
Java 8,
136126 bajtówWypróbuj online.
Wyjaśnienie:
źródło
Galaretka , 27 bajtów
Wypróbuj online!
Galaretka ma wbudowane ... 1-bajtowe
ṅ
.Wyjaśnienie
źródło
O%47%10
daje unikalny indeks[0...9]
dla każdej spółgłoski. (Co oznacza, żeO%47
przy domniemanym moduloị
pozwoliłoby na wybranie poprawnej wartości w tablicy 10 wpisów.)6;µe€Øẹœpṫ€0O%47ị“ ʠḷ’Œ?’¤Ṛ
ale także 27, chyba że można grać w golfa.Python 2 , 101 bajtów
Wypróbuj online!
Python 3 ,
104102 bajtówWypróbuj online!
Zapisano
źródło
JavaScript (Node.js) , 126 bajtów
Wypróbuj online!
źródło
x=[..."ñkKgGṅcCjJ"]
na właśnie,x="ñkKgGṅcCjJ"
ponieważindexOf
działa również z0
, więc zawodzi przypadki testowe 3 i 6 (jak można zobaczyć w Output on TIO).Czerwony ,
152143 bajtyWypróbuj online!
Czytelny:
źródło
MATL ,
484745 bajtówWypróbuj online!
(„b” zamiast „d”, aby zapisać bajt)
(-2 bajty dzięki Luisowi Mendo)
MATLAB (a stąd i MATL) traktujący łańcuchy jako głupią serię bajtów sprawił, że przeniesienie rozwiązania Python @ TFeld było trudniejsze niż sobie wyobrażałem (może rozwiązanie z prostą pętlą byłoby tutaj łatwiejsze?). Skończyło się na alternatywnej
'ng'
,'ny'
wejściowej metodzie i zamianieng
zb
na początku w celu ułatwienia obróbki.Wyjaśnienie:
źródło
unicode2native
, ale myślę, że teraz tego właśnie chcesz. Zgadzam się, obsługa Unicode w MATLAB nie jest najlepsza. I nie zaczynaj od Octave :-D Jeśli chodzi o MATL, został on zaprojektowany zanim istniał nowy typ danych string w MATLAB (i tak mi się to nie podoba), więc w MATL „string” jest taki sam jak to było w starych wersjach MATLAB: wektor wiersza znaków. Zrobiłem notatkę, aby wyjaśnić, że w dokumentacji, dzięki za zauważenie!Stax , 27 bajtów
Uruchom i debuguj
źródło