Diberikan string, kembalikan "keberuntungan" string itu.
Keberuntungan string, karena saya baru saja mengarang untuk tujuan tantangan ini, adalah bilangan bulat, ditentukan sebagai berikut:
- Keberuntungan dasar untuk string adalah 1.
- Untuk setiap huruf berturut-turut yang dibagikan dengan kata "keberuntungan" (tidak peka huruf besar-kecil), gandakan keberuntungan dengan 2. Misalnya, jika string Anda adalah " lu mberjack" atau "sma ck " Anda akan mengalikan dengan 4. (Lebih khusus, 2 ^ jumlah karakter berurutan yang dibagikan.)
- Huruf yang dibagikan harus dalam urutan yang sama secara berurutan seperti "beruntung" tetapi dapat dimulai di mana saja di kata untuk nilai yang sama ("luc" memiliki pengali 8 * yang sama dengan "cky").
- Jika kata tersebut memiliki banyak kejadian di mana ia berbagi karakter berturut-turut dengan lucky, gunakan string karakter berturut-turut terpanjang.
- Untuk huruf APA PUN yang dibagikan dengan kata "pertanda" kurangi 2 dari keberuntungan.
- Itu bisa cocok dengan karakter berapa kali, dalam urutan apa pun. Misalnya string "nnnnnomemenn" kehilangan 24 keberuntungan (12 huruf yang cocok)
Contoh:
luck("lucky")
>>32
2 ^ 5 (5 huruf berurutan) = 32
luck("firetruck")
>>6
2 ^ 3 - 2 (3 surat berturut-turut dari uck , e dibagikan dengan pertanda)
luck("memes")
>>-7
1 - 8 (jumlah dasar, 4 dibagikan dengan "pertanda")
Ini adalah kode golf, jadi jawabannya dengan byte paling sedikit menang.
Anda dapat input dan output dengan cara apa pun yang Anda inginkan - menulis fungsi, menggunakan input standar, dll.
Untuk fungsi, anggap tipe data apa pun yang masuk akal untuk bahasa itu. (Misalnya, dalam JavaScript, Anda akan lulus String
dan mengembalikan a Number
)
Sunting: Anda dapat menganggap setiap input huruf kecil.
int8_t str_luck(const char* str);
atau seharusnyauint64_t str_luck(const char* str);
?Jawaban:
05AB1E ,
36322826 bytePenjelasan
Cobalah online
Disimpan 2 byte berkat Adnan
sumber
'
, jadi untuk 26:Œv'¸éyåiyˆ}}¯é¤go¹'ƒÖ¦Ãg·-
:).JavaScript (ES7),
123112107 byteSunting: Disimpan 11 byte berkat @Titus dengan mengasumsikan bahwa surat
L
itu tidak muncul di input. Disimpan 5 byte berkat @Oriol. Versi ES6 untuk125114109 byte:sumber
replace([^])
bukanmatch([])
? Apakah Anda membuang 3 byte atau ada alasan?null
hasil pertandingan?()
dalam hal ini; memakan semua enam yang akan Anda simpanmatch(/[omen]/)
. Kasihan.L
ke ujung substr (yang tidak akan pernah muncul di string asli) Saya tidak perlu khawatir tentang pertandingan asing dan saya benar-benar dapat menggunakan array yang sama[5,4,3,2,1,0]
dua kali, menghemat 13 byte kekalahan!-2*s.split(/[omen]/).length+2
lebih pendek.Pyth,
272628 byte1 byte disimpan berkat OP :-)
Penjelasan:
Uji di sini .
sumber
"omen"
menjadi adil"omen
dan Pyth akan mengertiRuby,
9187 byteString#count
Penggunaan finnicky menyerang lagi! (Ketika melewati sebuah String, ia menghitung semua kemunculan setiap huruf dalam argumen fungsi alih-alih semua kemunculan seluruh string.)Cobalah online
Versi yang mengambil garis dari STDIN dan mencetaknya: 89 byte (86 +3 dari
-n
bendera)sumber
String#count
aneh. +1 untuk (ab) menggunakannya. Apakah lebih pendek untuk digunakangets
daripada fungsi?gets
juga harusputs
untuk output, jadi tidak dalam kasus ini.Ruby: 100 byte
sumber
/[omen]/
sebagai regex untuk menurunkannya - itu akan cocok dengan karakter apa pun dan lebih baik dalam penggunaan praktis daripada rantai|
untuk karakter tunggal.Javascript - 206 Bytes
sumber
s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n'
agar terlihat seperti ini:"oman".split("").includes(s[k])
(s[k]=='o'||s[k]=='m'||s[k]=='e'||s[k]=='n')
Anda dapat menggunakan('omen'.indexOf(s[k])+1)
(dengan asumsi ini adalah JavaScript)function luck(r)
untukr=>
menjadikannya fungsi anonim, itu saja yang diperlukan untuk tantangan ini. Saya juga mengedit tantangan sehingga Anda tidak perlu khawatir tentang kasus sehingga Anda dapat menghapusr=r.toLowerCase();
substring
Anda dapat menggunakanslice
saya percaya (coba ini, karena saya tidak yakin)Ruby, 57 byte
gets
set$.
ke 1 sebagai efek samping, lalu kami tambahkan sampai ekspresi reguler yang cocok dengan$.
karakter beruntung berturut - turut tidak lagi cocok.sumber
Haskell, 99
Pendekatan lain ... Saya baru belajar tentang fungsi alias
Pemakaian
sumber
Mathematica, 86 byte
Kode:
Penjelasan:
LongestCommonSubsequence
mengembalikan substring bersebelahan terpanjang yang umum untuk input dan"lucky"
.StringLength
memberikan panjangnya.StringCount
menghitung jumlah kemunculan karakter"omen"
dalam input.sumber
Python (139 Bytes)
sumber
from intertools import*
TSQL, 233 byte
Golf:
Tidak Disatukan:
Cobalah online
sumber
Haskell (
134132 Bytes)Bukan pegolf kode atau programmer Haskell, jadi akan sangat senang dengan beberapa tips yang satu ini.
(Contoh:
g "firetruck"
)sumber
Python 3,
168157152139144136 byteEDIT: Hal-hal yang sangat jelas saya seharusnya melihat lebih mudah telah diubah, dan beberapa sedikit kurang jelas.
Sunting 2: stoopid (˚n˚). Program melempar kesalahan. Saya memperbaikinya. sebenarnya bukan 153 :(
Terima kasih kepada Leaky Nun karena telah menghemat 5 byte, dan untuk jmilloy karena telah menghemat
138 byte.Program berjalan melalui semua substring yang mungkin ada dalam input (mungkin mungkin, karena ia menghitung substring yang tidak mungkin juga, 8 hingga 7, misalnya), memeriksa apakah substring berada dalam "beruntung", kemudian menetapkan eksponen 2 hingga panjang substring harus lebih besar dari nilai saat ini. Mungkin dapat ditingkatkan dengan hanya menggunakan satu loop sementara. Mungkin bisa menggunakan beberapa peningkatan; Saya masih memahami ini.
sumber
while p+1
menjadiwhile-~p
b=s[p:q]
,len(b)
pastiq-p
benar?print(2**m-2*sum(i in"omen" for i in s))
untuk tiga baris terakhir Anda, Anda akan melakukan lebih baik, seperti 148?while-~q:n=q-p;m=n if(s[p:q]in"lucky")*n>m else m;q-=1
untuk 143?sum(map(s.count,"omen"))
menghemat satu byte, menjadikannya 135Program PHP,
139135108bytelompatan kuantum gagal untuk banyak substring di mana kejadian pertama lebih pendek. :(
sebenarnya saya bisa menyimpan 7 byte lagi di PHP <5.4 dengan register_globals aktif
pemakaian:
php -d error_reporting=0 <filename> <string>
+5 untuk suatu fungsi:
tes (pada fungsi)
sumber
C # (Visual C # Interactive Compiler) dengan flag
/u:System.Text.RegularExpressions.Regex
, 99 byteCobalah online!
sumber
Scala, 155 byte
sumber