# Mathematica: <s>323</s> 294 bytes Uncompress["1:eJxTTMoPSpvOwMBQzAIkfDKLSzJlgAwCBEhtJi8qwQUnpqESsqgEHyqhAjePBc7lgBOccEIUThiBCAm4AayECUZUghmV0EAlBFAdxILqN17CgWMCNwUn4QQnxEAEDyqBcLgkKsGO6gUmLAROX8rjJSRQCSU4IYpKILzAiDfEebG4wADVDmZchBYqgRYVbLgIRPiJ4VXHDDdKGuZ9AAP6TUg="][[Mod[ToCharacterCode@StringTake[#<>#,5].{6,1,8,5,3},151,1]]]& ### How it works For a book beginning with character codes `a`,`b`,`c`,`d`,`e` (wrapping around if necessary) computes `6a+b+8c+5d+3e` modulo 151, which happens to be unique, and then looks up the number of chapters in a compressed list of length 151. (Unused entries in the list are filled in with duplicates of the previous entry. This encourages run-length encoding, maybe? Anyway, it helps.) Thanks to @numbermaniac for the list compression idea, which is hard to put a number on but is a huge part of the improvement here. # Old version: Mathematica, <s>548</s> <s>435</s> 407 bytes Join["111112333333344444455555666789"~(p=StringPartition)~1,"1010121213131314141616162121222224242425272828293131343636404248505266"~p~2,{"150"}][[Max@StringPosition["2jn3jnjduoaapimhgi2pe2tshbkjeonhntttzpn2toclsjnjmlhpiprtu1jn1pe1tsjmjlmt1toehiglimcmsnoaometrerzdnlecs2cihbwnhihshzcr1cimrarmsjhojds1kgrva2sujsalku2kglviatcmte1co1supordur2conmreosjbbeeegnijriiahpas",""<>#&@Characters[#<>#][[{1,3,6}]]]/3]]& ### How it works We convert each name `name` to characters 1, 3, and 6 of `namename` (e.g. `leviticus` becomes `lvi`, `job` becomes `jbb`) before looking it up. The list we look things up in is slightly compressed by putting the 1-digit and the 2-digit chapter numbers together in strings. # Mathematica: 40 bytes, non-competing WolframAlpha["# chapters "<>#,"Result"]& Yeah.