Buat kalkulator Gematria dua arah, untuk setiap urutan karakter Unicode yang diberikan sebagai alfabet.
Gematri-Apa?
Gematria adalah sistem yang menetapkan nilai numerik pada simbol, yang dikembangkan oleh orang Yunani kuno dan diadopsi oleh orang Yahudi kuno. Ini dengan cara seperti ASCII atau Unicode, itu hanya non-linear ... Lihat tabel berikut (tabel lengkap tersedia di tautan di atas):
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
...
Nama-nama huruf tidak penting, hanya indeks mereka di "Array" dari alfabet dan nilai numerik masing-masing. Alfabet Ibrani hanya memiliki 22 huruf (tidak termasuk huruf "akhir"), sehingga nilai maksimum yang tersedia adalah 400.
Jika kita meminjam sistem ini ke alfabet Inggris (AZ) kita akan berakhir dengan A = 1, B = 2 ... L = 30 ... U = 300 ... Z = 800.
Dua hal yang perlu kita ketahui.
Salah satu fitur terpenting dalam sistem ini adalah menghitung "Nilai Gematria" suatu kata , dengan merangkum nilai hurufnya. (Beberapa mengatakan ada hubungan mistik antara kata, atau frasa (ketika nilai ruang adalah nol) - yang memiliki Nilai Gematria yang sama).
Setiap Integer non-negatif dapat direpresentasikan dalam simbol. Misalnya (dan mari kita tetap menggunakan alfabet bahasa Inggris untuk saat ini) nilai 32 adalah LB (L = 30 + B = 2). Nilai 1024 adalah ZTKD (800 + 200 + 20 + 4. Perhatikan bahwa ZSSKD juga 1024, tetapi itu bukan representasi hukum, karena dapat dipadatkan).
Tantangan
Tulis program / fungsi / potongan kode dalam bahasa pilihan Anda, yang pertama-tama diatur dengan alfabet (lihat API di bawah) dan kemudian terima argumen. Argumen itu bisa berupa Integer, atau kata / frasa. Jika itu adalah Integer - program Anda harus menampilkan / mengembalikan representasinya dalam simbol alfabet - yang paling padat (lihat (2) di atas). Jika itu kata atau frasa, program Anda harus menampilkan / mengembalikan Nilai Gematria (dengan merangkum nilai simbol, tidak menghitung spasi putih, lihat (1) di atas).
API
Program / fungsi Anda harus menerima 3 argumen. Anda bisa mendapatkannya dari STDIN, atau sebagai argumen fungsi, Anda bahkan dapat menganggap mereka adalah variabel yang diinisialisasi secara terprogram sebelum pemanggilan fungsi Anda.
- Argumen pertama - karakter pertama (dalam Unicode) dari alfabet.
- Argumen kedua - karakter terakhir (dalam Unicode) dari alfabet.
- Argumen ketiga - Integer, untuk diwakili dalam simbol, ATAU frase yang dibuat oleh alfabet yang diberikan.
Nilai Output / Pengembalian: Tergantung pada argumen ketiga, seperti yang dijelaskan di atas.
Asumsi
- Dua argumen pertama akan selalu panjang masing-masing satu karakter, dan yang kedua akan selalu lebih besar dari yang pertama.
- Urutan (pertama sampai terakhir, inklusif) tidak akan pernah menyertakan nilai 30-39 (yang mewakili angka 0-9), jika tidak maka akan membuat argumen ketiga menjadi ambigu. EDIT: Ini tidak akan mengandung spasi juga, karena dalam frasa spasi dihitung sebagai nol.
- Argumen ketiga, jika itu adalah frasa, hanya boleh berisi spasi dan huruf dari alfabet yang diberikan. String kosong bukan input yang valid (Anda dapat menganggap itu tidak kosong). Jika itu adalah Integer, Anda dapat menganggap itu adalah Integer positif.
Contohnya
Input Output
A Z CODE GOLF 175
a s 512 sssssjb
A B 7 BBBA
≐ ⊐ ≤≫ ≥ 1700
Mencetak gol
Score = upvotes - length/100.0
Kode Anda harus pendek, tetapi yang lebih penting populer. Skor negatif juga dapat dimainkan. Pemenang akan menjadi jawaban dengan skor tertinggi dalam seminggu dari sekarang, 2014-11-29 19:20:00 UTC.
Jawaban:
CJam,
807570 byte, Suara positif - 0.7Uji di sini.
Ini adalah program lengkap, yang mengambil input dari STDIN dan mencetak hasilnya ke STDOUT.
Saya tidak begitu yakin bagaimana saya harus menembak untuk popularitas di sini, jadi saya hanya bermain golf ini, berharap mendapatkan ukuran kode yang cukup mengesankan sebagai gantinya. ;)
Saya percaya konversi int-to-string masih dapat ditingkatkan, tetapi saya tidak melihatnya sekarang.
Terima kasih kepada Pengoptimal untuk mengingatkan saya tentang mengatur persimpangan dan bahwa array kosong adalah palsu.
Dalam kasus kedua, hasilnya dibiarkan di tumpukan, yang dicetak secara otomatis di akhir program.
sumber
Java 7, Score = Suara positif - 3.97
Yay !!! Jawa!!! Bahasa golf favorit dunia di dunia. Apa, Anda sebenarnya bisa bermain golf di java ??? Yah, itu seperti menggunakan buldoser untuk putt.
a
diharapkan mengandung karakter pertama.b
diharapkan berisi karakter terakhir.c
diharapkan memiliki string input.Berikut adalah fungsi golf:
Ini lekukan dengan kode struktur:
Ini sepenuhnya diperluas:
sumber
APL (upvotes - 1.05)
Ini adalah fungsi yang mengambil dua karakter di sebelah kiri, dan argumen yang akan dikonversi di sebelah kanan:
Versi tidak disatukan:
sumber
Haskell, 188 byte; Suara positif - 1,88
Ini adalah program STDIN-to-STDOUT yang lengkap, golf lengkap. EDIT: Sekarang di bawah 200 byte! EDIT2: Disimpan satu byte dengan saran @ proudhaskeller.
Itu membangun daftar nilai yang tak terbatas
x = [1,2,3,4,5,6,7,8,9,10,20,30,..]
pada baris pertama, dan apakah I / O pada baris ketiga. Nilai suratc
, mengingat rentang[a..b]
, kemudian nilai pada posisilength [a..c] - 1
darix
. Pada baris kedua, kita bercabang pada huruf pertamau
dari argumen ketiga, dan menjumlahkan nilai gematria-nya (jikau
bukan angka), atau dengan rakus membangun sebuah kata dengan nilai yang diberikan (jikau
digit).Versi tidak dikolomisasi dengan nama variabel yang lebih mudah dibaca:
sumber
{}
dari mana klausa untuk keuntungan satu byteCJam, 70 bytes, #Upvotes - 0.7
Ini mengasumsikan bahwa input yang valid akan dikirimkan. Mengambil input dari STDIN seperti yang dikatakan spesifikasi API dan mencetak hasilnya ke STDOUT.
Contoh:
Cobalah online di sini
Blokir penjelasan bijak :
sumber