Utwórz dwukierunkowy kalkulator Gematria dla dowolnej sekwencji znaków Unicode jako alfabetu.
Gematri-Co?
Gematria to system przypisywania wartości liczbowych symbolom, opracowany przez starożytnych Greków i przyjęty przez starożytnych Żydów. Jest w pewien sposób podobny do ASCII lub Unicode, jest po prostu nieliniowy ... Zobacz następującą tabelę (pełna tabela jest dostępna w linku powyżej):
Index Letter Letter name Value
--------------------------
0 א "Alef" 1
1 ב "Bet" 2
...
8 ט "Tet" 9
9 י "Yud" 10
10 כ "Kaf" 20
...
17 צ "Tsady" 90
18 ' "Kuf" 100
19 ר "Resh" 200
...
Nazwy liter nie są ważne, tylko ich indeks w „Tablicy” alfabetu i odpowiednia wartość liczbowa. Alfabet hebrajski ma tylko 22 litery (nie licząc liter „końcowych”), więc maksymalna dostępna wartość wynosi 400.
Jeśli pożyczymy ten system na alfabet angielski (AZ), otrzymamy A = 1, B = 2 ... L = 30 ... U = 300 ... Z = 800.
Dwie rzeczy, które musimy wiedzieć.
Jedną z najważniejszych cech tego systemu jest obliczanie „wartości Gematrii” słowa poprzez sumowanie wartości liter. (Niektórzy twierdzą, że istnieje mistyczny związek między słowami lub frazami (gdy wartość przestrzeni wynosi zero) - które mają tę samą wartość Gematrii).
Każda nieujemna liczba całkowita może być reprezentowana w symbolach. Na przykład (i na razie pozostańmy z alfabetem angielskim) wartość 32 to LB (L = 30 + B = 2). Wartość 1024 to ZTKD (800 + 200 + 20 + 4. Zauważ, że ZSSKD to również 1024, ale nie jest to prawna reprezentacja, ponieważ można ją kompaktować).
Wyzwanie
Napisz program / funkcję / fragment kodu w wybranym języku, który jest najpierw konfigurowany za pomocą alfabetu (patrz API poniżej), a następnie zaakceptuj argument. Argumentem tym może być liczba całkowita lub słowo / fraza. Jeśli jest to liczba całkowita - twój program powinien wypisywać / zwracać swoją reprezentację w symbolach alfabetu - najbardziej kompaktowy (patrz (2) powyżej). Jeśli jest to słowo lub fraza, twój program powinien wypisać / zwrócić wartość Gematria (sumując wartości symboli, nie licząc białych znaków, patrz (1) powyżej).
API
Twój program / funkcja powinna zaakceptować 3 argumenty. Możesz je pobrać ze STDIN, lub jako argumenty funkcji, możesz nawet założyć, że są to zmienne, które zostały zainicjowane programowo przed wywołaniem funkcji.
- Pierwszy argument - pierwszy znak alfabetu (w Unicode).
- Drugi argument - ostatni znak alfabetu (w Unicode).
- Trzeci argument - Liczba całkowita, która ma być reprezentowana w symbolach, LUB fraza utworzona przez dany alfabet.
Wartość wyjściowa / zwracana: W zależności od trzeciego argumentu, jak wyjaśniono powyżej.
Założenia
- Pierwsze dwa argumenty zawsze będą miały jeden znak, a drugi będzie zawsze większy niż pierwszy.
- Sekwencja (od pierwszej do ostatniej włącznie) nigdy nie będzie zawierać żadnej z wartości 30–39 (które reprezentują cyfry 0–9), w przeciwnym razie trzeci argument będzie dwuznaczny. EDYCJA: Nie będzie również zawierać spacji, ponieważ w wyrażeniach spacje są liczone jako zera.
- Trzeci argument, jeśli jest to fraza, może zawierać tylko spacje i litery danego alfabetu. Pusty ciąg nie jest prawidłowym wejściem (możesz założyć, że nie jest pusty). Jeśli jest to liczba całkowita, możesz założyć, że jest to liczba całkowita dodatnia.
Przykłady
Input Output
A Z CODE GOLF 175
a s 512 sssssjb
A B 7 BBBA
≐ ⊐ ≤≫ ≥ 1700
Punktacja
Score = upvotes - length/100.0
Twój kod powinien być krótki, ale co ważniejsze, popularny. Negatywne wyniki mogą również grać razem. Zwycięzca otrzyma odpowiedź z najwyższym wynikiem od tygodnia, 2014-11-29 19:20:00 UTC.
Odpowiedzi:
CJam,
807570 bajtów, głosy poparcia - 0,7Sprawdź to tutaj.
Jest to pełny program, który pobiera dane wejściowe ze STDIN i drukuje wynik do STDOUT.
Nie jestem do końca pewien, jak mam tutaj strzelać dla popularności, więc po prostu gram w golfa, mając nadzieję na uzyskanie imponująco imponującego rozmiaru kodu. ;)
Wierzę, że konwersję zamiany na ciąg znaków można jeszcze poprawić, ale nie widzę jej teraz.
Dzięki Optimizer za przypomnienie mi o ustawionym skrzyżowaniu i że puste tablice są fałszywe.
W drugim przypadku wynik pozostawia się na stosie, który jest drukowany automatycznie na końcu programu.
źródło
Java 7, wynik = głosy poparcia - 3,97
Tak !!! Jawa!!! Ulubiony język golfa na świecie. Co, tak naprawdę możesz grać w golfa w java ??? Cóż, to trochę jak użycie buldożera do puttowania.
a
ma zawierać pierwszy znak.b
ma zawierać ostatni znak.c
oczekuje się, że będzie miał ciąg wejściowy.Oto funkcja gry w golfa:
Tutaj jest wcięty kodem struktury:
Tutaj jest całkowicie rozwinięty:
źródło
APL (głosy poparcia - 1,05)
Jest to funkcja, która pobiera dwa znaki po lewej stronie, a argument do konwersji po prawej:
Wersja bez golfa:
źródło
Haskell, 188 bajtów; Pozytywne opinie - 1,88
Jest to w pełni rozwinięty program STDIN-to-STDOUT, mocno golfowy. EDYCJA: Teraz poniżej 200 bajtów! EDYCJA 2: Zapisano jeden bajt z sugestią @ dumhaskeller.
Konstruuje nieskończoną listę wartości
x = [1,2,3,4,5,6,7,8,9,10,20,30,..]
w pierwszym wierszu i wykonuje operacje we / wy w trzecim wierszu. Wartość listuc
, biorąc pod uwagę zakres[a..b]
, jest to wartość w pozycjilength [a..c] - 1
zx
. W drugim wierszu rozgałęziamy się na pierwszej literzeu
trzeciego argumentu i albo sumujemy jego wartości gematrii (jeśliu
nie jest cyfrą), albo łapczywie konstruujemy słowo o podanej wartości (jeśliu
jest cyfrą).Wersja bez golfa z bardziej czytelnymi nazwami zmiennych:
źródło
{}
klauzulę where dla uzyskania jednobajtowego zyskuCJam, 70 bajtów, #Upvotes - 0,7
Zakłada się, że zostaną przekazane prawidłowe dane wejściowe. Pobiera dane wejściowe ze STDIN, jak mówi specyfikacja API i wypisuje wyniki do STDOUT.
Przykłady:
Wypróbuj online tutaj
Zablokuj mądre wyjaśnienie :
źródło