Tantangan:
Ambil string huruf besar atau kecil sebagai input (opsional), dan hitung skor yang didapat string dalam permainan Scrabble dalam bahasa Inggris.
Aturan:
Skor setiap huruf adalah sebagai berikut (gunakan ini bahkan jika ada versi lain dari permainan):
1 point: E, A, I, O, N, R, T, L, S, U
2 points: D, G
3 points: B, C, M, P
4 points: F, H, V, W, Y
5 points: K
8 points: J, X
10 points: Q, Z
Skor string hanyalah jumlah dari skor setiap huruf yang digunakan. Anda mungkin berasumsi bahwa Anda memiliki banyak ubin yang tersedia, kata-kata yang sangat panjang, dan kata-kata dengan banyak huruf yang sama merupakan input yang valid.
Kasus uji:
ABC -> 7
PPCG -> 11
STEWIE -> 9
UGPYKXQ -> 33
FIZZBUZZ -> 49
ABCDEFGHIJKLMNOPQRSTUVWXYZ -> 87
Jawaban terpendek di setiap bahasa menang! Format input dan output fleksibel, sehingga Anda dapat mengambil input sebagai array karakter (huruf besar atau kecil) jika Anda mau.
Jawaban:
sed 4.2.2 , 81
Keluaran dalam bentuk unary .
Kurangi setiap huruf menjadi kombinasi huruf yang memiliki skor lebih rendah hingga semua huruf memiliki 1-skor. Kemudian gantilah yang dengan
1
s untuk memberikan hitungan yang unary.Cobalah online!
sumber
Haskell ,
8684 byteCobalah online!
Penjelasan
Sebagian besar huruf memberikan skor 1 dan karenanya kita tidak perlu melacaknya, alih-alih kita hanya mengurangi setiap skor (menyimpan 1 byte
10
juga) dan kemudian menambahkan panjang string ke skor yang dihasilkan.Terima kasih @nimi untuk -2 bytes (rearanging kata-kata dan menggunakan
[1..]
bukan[4,3..]
)!sumber
zip[1..]$words"DG BCMP FHVWY K . . JX . QZ"
memberikan alternatif lain dengan panjang yang samaOktaf , 50 byte
Cobalah online!
Tantangan diterima. Penjelasan:
sumber
-47
tapi itu golf kode untuk Anda!==
seperti itu di Octave. Tidak berfungsi di MATLAB. Senang mendengarnya.bsxfun
) juga lebih pendek pada 61 byte: Coba online!Beatnik , 733 byte
Karena itu benar-benar harus dilakukan, ini dia. Benar-benar jahat untuk men-debug dan memberikan beberapa tantangan.
Masukan harus huruf besar saja. Outputnya unary (harap tidak apa-apa?)
Cobalah online!
Proses umum adalah:
Berakhir dengan kesalahan.
Penjelasan lebih lengkap:
sumber
Brain-Flak ,
210, 204, 198, 184, 170 byteCobalah online!
Terima kasih kepada @ JoKing karena telah menghemat 14 byte!
Versi yang dapat dibaca:
sumber
Pyth, 40 byte
Coba di sini
Penjelasan
sumber
Python 2 , 78 byte
Cobalah online!
Versi lebih pendek, port jawaban DanielIndie ,
7170 byte-1 byte terima kasih kepada Sunny Patel
Cobalah online!
sumber
JavaScript (Node.js) ,
71666362 byteCobalah online!
sumber
Java 8,
757170 byte-1 byte dengan mengubah
"02210313074020029000033739".charAt(c-65)-47
ke unsintables (dan dua\n
) sehingga-47
dapat dihapus. Terinspirasi oleh jawaban Octaf @Sanchises .Cobalah online.
sumber
Oktaf / MATLAB, 85 byte
Cobalah online!
sumber
Jelly , 19 byte
Tautan monadik yang menerima daftar karakter huruf besar yang mengembalikan bilangan bulat
Cobalah online! Atau lihat test-suite .
Bagaimana?
sumber
R ,
9063 byteCobalah online!
Mengambil input sebagai string huruf besar. R menangani unfintables dan string multiline tanpa masalah, jadi itu bagus. Sekarang kita hampir dua kali lipat dari paket eksternal!
Dan karena CRAN memiliki begitu banyak barang acak:
R + ScrabbleScore 31 byte
Cobalah online!
Sayangnya,
sws
memeriksa validitas secara default.sumber
utf8ToInt
alih - alihmatch
dan berhasil mendapatkan beberapa down lagi!Emojicode , 358 byte
Cobalah online!
Penjelasan:
Saya mengubah nama variabel dari satu huruf menjadi kata-kata yang lebih bermakna, dan memperluas beberapa bagian kode saya semoga membuatnya lebih mudah dibaca oleh orang-orang yang tidak terbiasa dengan bahasa tersebut. Anda dapat menguji program yang diperluas di sini .
sumber
05AB1E , 21 byte
Mengambil input sebagai daftar karakter huruf kecil.
Cobalah online! atau sebagai Test suite
sumber
Oktaf , 73 byte
Cobalah online!
Digunakan
ismember
untuk memetakan setiap karakter dalam aliran inputx
ke indeksnya dalam string pencarian'QZJXKFHVWYBCMPDG'
. Elemen apa pun yang tidak ditemukan akan dipetakan ke indeks 0 (ini akan mencakup karakter 1 poin).Selanjutnya kita menambahkan 1 ke indeks untuk membuat 0 menjadi referensi 1-indeks yang valid, dan mencari ke dalam string
'09977433333222211'
. Ini adalah satu elemen lebih panjang dari string pencarian pertama. Digit mewakili nilai titik dari setiap elemen dalam string asli, minus 1, dengan elemen tambahan menjadi '0' dibeginning
.Akhirnya string yang dihasilkan dikonversi menjadi bilangan bulat dengan mengurangi
47
('0'-1
), menghasilkan nilai poin untuk setiap huruf, dan semua nilai poin kemudian dijumlahkan.sumber
C ++, 95 byte
Cobalah online (bukan tautan TIO, maaf)
Penjelasan:
m
, larik nilai setiap huruf secara berurutan, minus 1. minus 1 adalah karena Q dan Z: Saya tidak dapat memiliki angka dua digit di sanap
sampai kita mendapatkan karakter nol, dan menambahkan skor nomor (*p
memberi kita surat, dan-65
agar kita dapat mengindeks array dengan benar). Sejakm
adalahchar*
itu mengkonversi kechar
sehingga kita dikurangi48
sehingga membawanya kembali ke 0, tetapi menambahkan1
sejakm
dinyatakan sebagai salah satu skor kurang untuk setiap karakter.Saya bukan poster keranjingan di sini jadi saya harap saya telah melakukan ini dengan benar. Saya percaya mereka kembali
n
dihitung sebagai mencetak nilai, dan menyatakan fungsi itu baik-baik saja.sumber
Haskell , 66 byte
Cobalah online! Pendekatan yang sama dengan jawaban JavaScript DanielIndie .
Haskell ,
8281 byteCobalah online!
sumber
PowerShell , 60 byte
Cobalah online!
sumber
Japt , 36 byte
Mengambil input sebagai string huruf kecil, mengembalikan nomor.
Penjelasan singkat:
Cobalah online!
sumber
Ruby , 60 byte
Cobalah online!
Lambda, menerima input sebagai array karakter (huruf besar) dan mengembalikan integer.
sumber
Perl 5
-pF
, 50 byteCobalah online!
sumber
Gforth , 109 Bytes
Input harus dalam huruf besar:
C PPCG 11 OK
Dapat dibaca
Cobalah online!
sumber
Perl 6 , 52 byte
Cobalah online!
Memetakan setiap karakter ke angka, dan menjumlahkannya. Dan menambahkan 1 untuk setiap karakter karena tidak ada angka 10 tanpa menimbulkan byte unicode.
sumber
Retina 0.8.2 , 41 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan: Seperti jawaban Haskell, huruf nontrivial diterjemahkan ke 1 kurang dari skor mereka, dan 1 ditambahkan kemudian ketika karakter dikonversi ke unary. Menempatkan yang
FHVWY
terakhir memungkinkan mereka semua untuk memetakan ke skor 3 + 1.sumber
C (gcc),
7872 byteSebenarnya ada 26 karakter di string itu. Lihat kode yang diberikan dengan benar dan jalankan di sini .
Berkat gastropner untuk bermain golf 6 byte.
Versi tidak disatukan:
sumber
Excel, 91 byte
Penjelasan:
A1
{ }
ke kedua ujungnya.MID(A1,ROW(A:A),1)
menarik setiap karakter secara bergantian (dan banyak nilai kosong juga, karena itu akan mengembalikan nilai sebanyak ada baris di sheet)CODE(MID(~)&"z")
mengeluarkan nilai ASCII untuk setiap karakter. The&"z"
menambahkan sebuahz
akhir dariMID()
hasil karenaCODE()
tidak seperti input kosong. Nilai ASCII untukz
lebih tinggi dari setiap huruf kapital, jadi itu diabaikan secara efektif nanti.MID("02210313074020029000033739",CODE(~)-64,1)
menarik keluar surat dari string skor berdasarkan nilai ASCII-nya yang disesuaikan hingga 64 sehingga huruf-huruf itu berjalan 1-26 bukannya 65-90."0"&MID(~)
menambahkan nol keMID()
hasil karena Excel tidak akan membiarkan Anda melakukan matematika dengan string kosong, yang akan ada beberapa.0+("0"&MID(~))
mengubah semua string menjadi angka.SUM(0+("0"&MID(~)))
menambahkan semua string yang sekarang nomor.LEN(A1)+SUM(~)
menambahkan panjang input ke penjumlahan karena semua nilai dalam string skor (02210313074020029000033739
) disesuaikan ke bawah oleh satu sehingga mereka semua akan menjadi satu digit panjangnya.Ada solusi yang sangat mirip di Google Sheets tetapi ia datang pada 97 byte karena
ArrayFromula()
lebih panjang dari{}
(tetapi setidaknya itu bisa menangani0 + "" = 0
).sumber
SUBSTITUTE()
, datang pada 527 byte yang lumayan.Bahasa Wolfram (Mathematica) , 74 byte
Tentu saja Wolfram | Alpha mendukung penilaian Scrabble! Ini adalah fungsi anonim.
Ini tidak berfungsi pada TIO.
Untuk menjalankan, buka di sini , gulir ke bawah dan klik "Buat Notebook Baru» ". Kode yang digunakan di notebook ada di program TIO ini sehingga Anda dapat menyalinnya. Rekatkan setiap panggilan fungsi dalam blok kode sendiri. Jika Anda menjalankan terlalu banyak dalam satu blok, eksekusi tidak akan selesai.
Catatan yang
WolframAlpha
mengirim permintaan menggunakan Internet. Meskipun ada jawaban lain pada PPCG yang menggunakannya, saya pikir Anda harus tahu.Program ini menggunakan fungsi yang lebih pendek di bawah ini, tetapi menyebutnya pada setiap karakter individu dari input (mengirim panggilan terpisah ke Wolfram | Alpha setiap kali!)
Ini hanya berfungsi untuk input hingga panjang 15, lebar papan Scrabble. (49 byte)
Sama seperti di atas, tetapi akan menampilkan hasilnya dalam kotak, bersama dengan apakah input adalah kata Scrabble yang valid. (45 byte)
sumber
C # (.NET Core) , 50 + 18 = 68 byte
+18 byte untuk
using System.Linq;
Cobalah online!
sumber
K (oK) ,
6038 byteLarutan:
Cobalah online!
Penjelasan:
Indeks ke dalam skor, jumlah hasil.
sumber
Japt
-x
,43393530 byteCobalah online!
Solusi 35 byte:
Jalankan secara online
sumber