Latar Belakang
Dalam Boggle , satu ronde dicetak dengan menambahkan poin untuk setiap kata unik yang ditemukan oleh seorang pemain (yaitu setiap kata yang ditemukan lebih dari satu pemain bernilai 0 poin). Poin dihitung berdasarkan jumlah huruf di setiap kata, sebagai berikut:
3 huruf: 1 poin
4 huruf: 1 poin
5 huruf: 2 poin
6 huruf: 3 poin
7 huruf: 5 poin
8 atau lebih huruf: 11 poin
Tantangan
Dalam tantangan ini, tulislah program atau fungsi yang memuat daftar string yang mewakili kata-kata setiap pemain dan menampilkan daftar skor para pemain. Anda dapat mengasumsikan bahwa akan ada setidaknya 2 pemain dan semua kata akan menjadi 3 atau lebih huruf dan semua akan menjadi huruf kecil (atau semua huruf besar jika Anda mau). Anda juga dapat mengasumsikan bahwa setiap pemain hanya akan menggunakan setiap kata sekali; artinya, daftar pemain tidak akan berisi duplikat. Ini kode golf, jadi jawaban tersingkat dalam byte menang.
Aturan
Masukan dapat diambil dalam format apa pun yang masuk akal. Contohnya termasuk daftar daftar string, daftar string yang dipisahkan koma, string yang dipisahkan koma pada setiap baris input, dll. Output dapat berupa daftar bilangan bulat (atau bahasa Anda yang setara) atau Anda dapat mencetak nilai untuk stdout menggunakan pemisah pilihan Anda (seperti baris baru).
Uji Kasus
Input => Output
[["cat","dog","bird","elephant"],
["bird","dog","coyote"],
["dog","mouse"]] => [12,3,2]
[["abc","def","ghi"],
["ghi","def","abc"]] => [0,0]
[["programming","puzzles"],
["code","golf"],
[]] => [16,2,0]
sumber
f
bukannya-
R ,
142126121117 byteCobalah online!
Dibawa
L
sebagai daftar vektor string; mengembalikan nilai.Pertama, ini
unlist
kata-katanya, menemukan duplikatnya, lalu menghapusnya dari daftar kata para pemain. Kemudian diperlukan daftar kata yang unik ini dan menghitung skor masing-masing, menggunakanpmin
untuk memastikan bahwa kata-kata yang lebih lama dari 8 mendapatkan skor sebagai 11.sumber
function(L)sapply(L,function(x)sum(c(1,1,2,3,5,11)[pmin(6,nchar(x[!x%in%(l=unlist(L))[duplicated(l)]])-2)]))
JavaScript (ES6), 92 byte
Agak mirip dengan jawaban Rick Hitchcock tetapi sebagian besar dibuat secara independen; Saya menggunakan metode penjumlahan yang berbeda (
reduce
) dan metode yang berbeda untuk memeriksa istilah berulang (filter
+includes
). Namun, kredit kepadanya untuk gagasan memeriksa barang[1]
alih-alih memeriksa.length>1
.Uji Kasus
Tampilkan cuplikan kode
sumber
s+=
dan menghapus tanda kurung di sekitar ternaries. Dan 3 lainnya dengan menggunakanmap
alih-alihreduce
: tio.run/##NY/…reduce
danincludes
membuat jawaban Anda sangat berbeda dari saya.JavaScript (ES6),
10693 byte[Tersimpan 13 (!) Byte, terima kasih kepada Arnauld, Shaggy, dan JollyJoker.]
Kasus uji:
Tampilkan cuplikan kode
sumber
c[7]?11:c[6]?5:c[5]?3:c[4]?2:1
dengan'00011234'[c.length]||11
.[15,2,0]
alih-alih[16,2,0]
untuk kasus uji terakhir, tapi itu mungkin mudah diperbaiki. Akan bekerja lagi setelah makan malam, kecuali jika Anda mengirim jawaban jenius (seperti biasanya). Terima kasih! :)'00011235'
.'11235'[c.length-3]||11
, kan?Perl 6 , 64 byte
Cobalah online!
sumber
Pyth , 26 byte
Menggunakan formula H.PWiz .
Verifikasi semua kasus uji.
Versi awal, 33 byte :
Verifikasi semua kasus uji.
Penjelasan
sumber
Haskell ,
7675 byteCobalah online!
sumber
Japt ,
292524232120 byteCobalah
Penjelasan
Input array secara implisit
U
.Memetakan di atas array (
Ë
) dan mengurangi setiap sub-array dengan penambahan (x
) setelah melewati elemen-elemennya melalui fungsi berikut, di manaX
kata saat ini.Hitung (
è
) elemen dalamU
yang mengandung (ø
)X
.Periksa apakah itu sama dengan 1.
Logis DAN (
&&
).Kurangi (
n
) 3 dari minimum (m
) 8 dan panjang (Ê
) dariX
.Secara faktorial, akar kuadrat dan bulat, masing-masing.
sumber
Python 2 ,
1061058884 byte-1 byte terima kasih kepada Jonathan Frech
-1 (17) byte terima kasih kepada reffu
Cobalah online!
sumber
Jeli , 26 byte
Cobalah online!
sumber
Java 8,
202200198 byteATAU (juga 198 byte )
Bisa dipastikan golf. Sayangnya Java tidak memiliki build-in atau metode pendek untuk menghapus semua item dari semua daftar yang ada dalam banyak ..
Penjelasan:
Coba di sini.
sumber
R, 117 byte
Pendekatan yang sangat berbeda dari jawaban R lainnya :
Kasus uji:
Membawa nama-nama yang muncul hanya sekali dalam daftar, mengonversi panjangnya menjadi faktor berdasarkan poin cut-off yang diberikan dan menerjemahkannya menjadi skor yang kemudian dijumlahkan.
sumber
Perl 5 , 104 + 2 (-na) = 106 byte
Cobalah online!
sumber
Clojure, 102 byte
next
kembalinil
jika hanya ada satu kataw
:)sumber
PHP , 226 byte
Saya pikir ini masih bisa dipangkas sedikit.
Tidak Disatukan:
Cobalah online!
sumber
Scala , 242 byte
Fungsi ini mengambil, sebagai parameter
a
,Seq[Set[String]]
dan mengembalikan sebuahArray[Int]
. Saya menggunakan Array agar bisa berubah (kehilangan 4-char).Cobalah online!
Mungkin dapat dioptimalkan, karena saya bahkan tidak bekerja di Internet
bagian. Terima kasih atas tantangan ini!
sumber
Swift 4 , 164 byte *
Ungkapan di atas secara teknis benar, Swift murni. Namun, ekspresi ini sangat kompleks sehingga, karena ledakan eksponensial dalam sistem inferensi tipe, tidak dapat diproses sebelum kompiler menyerah setelah beberapa waktu habis-habisnya (seperti 15 atau lebih).
Untuk membuat ekspresi ini dapat dikompilasi dengan kompiler saat ini, dapat dirinci seperti ini:
Kasus uji:
Rusak:
sumber
ASP + Python , 137 byte
Diharapkan data diformat sebagai:
Membutuhkan clingo 5.2.1 dengan dukungan python.
Tidak Disatukan:
Fungsi python sangat terinspirasi dari jawaban python .
sumber