チャプターはいくつありますか?


18

聖書は、これまでに書かれた中で最も影響力のある本の1つであり、史上最高の販売本として一般的に引用されています。現在の形式にコンパイルされる前に、数百年にわたって 40人の異なる著者によって書かれました。しかし、聖書の興味深い点は、聖書の分割方法です。それは2つの異なる遺言に分割され、それらは66の小さな本に分割され、それぞれがより小さな章に分割され、それぞれが個々の詩に分割されます。

各本の章の数を可能な限り短いコードでエンコードしようとするのは楽しい挑戦だと思いました。したがって、今日の課題では、本の1つを入力として受け取り、その本の章の数をThe King James Versionに従って出力するプログラムまたは関数を作成する必要があります。

STDIN / STDOUTまたはファイルの読み取り/書き込み、関数の引数/戻り値、ユーザーへのプロンプトなど、すべての合理的な形式でIOを使用できます。入力は常に聖書の66冊の本の1つであり、小文字のみです。これは、他の入力が与えられた場合、未定義の動作が許可されることを意味します。The King James Versionの聖書の章に関するWikipediaのページによると、可能な入力と出力は66のみであるため、すべてここに提供されています

genesis         50
exodus          40
leviticus       27
numbers         36
deuteronomy     34
joshua          24
judges          21
ruth            4
1 samuel        31
2 samuel        24
1 kings         22
2 kings         25
1 chronicles    29
2 chronicles    36
ezra            10
nehemiah        13
esther          10
job             42
psalms          150
proverbs        31
ecclesiastes    12
song of solomon 8
isaiah          66
jeremiah        52
lamentations    5
ezekiel         48
daniel          12
hosea           14
joel            3
amos            9
obadiah         1
jonah           4
micah           7
nahum           3
habakkuk        3
zephaniah       3
haggai          2
zechariah       14
malachi         4
matthew         28
mark            16
luke            24
john            21
acts            28
romans          16
1 corinthians   16
2 corinthians   13
galatians       6
ephesians       6
philippians     4
colossians      4
1 thessalonians 5
2 thessalonians 3
1 timothy       6
2 timothy       4
titus           3
philemon        1
hebrews         13
james           5
1 peter         5
2 peter         3
1 john          5
2 john          1
3 john          1
jude            1
revelation      22

この課題は、すべての書籍名と章数をエンコードする最適な方法を見つけることであるため、聖書に関する情報を提供する組み込み機能を使用することは許可されていません。ただし、どの言語にそのような組み込み関数があるかを見るのは興味深いので、回答と一緒に2番目の非競合バージョンを共有してください。外部ソースからの情報の取得も許可されていません(標準の抜け穴はどれも許可されていませんが、明示的に言及することは有益だと思いました)。

いつものように、これはチャレンジなので、可能な限り最短のプログラム(バイト単位)を作成するようにしてください。ゴルフをお楽しみください!


3
出力は固定されていないので、なぜこのkolmogorov-complexityなのですか?
LyricLy

3
@LyricLy出力が固定されていなくても、2つの異なるデータセットを生成する最も効率的な方法を見ることです:1)本の名前(またはそれを認識するのに十分な長さの名前)および2 )対応する章の数。
DJMcMayhem

3
あなたはただ普通の量ですべてのものを見、それから半分の聖書のような
詩sal

4
したい enklactはこの挑戦から抜け出しが、私はできない
...-完全に人間

3
@DJMcMayhemあなたは66のユニークな文字がないという事実を忘れました。:P
完全に人間の

回答:


12

ゼリー、127バイト

“£ÐgƁ÷ḅ*Wßßɦ*⁷ċṗṿỵ×Ɓṿ⁷ḢQ’b7+\;“BƝ‘
OḄ;407;270;“ọḷḊḲɦ‘%/i@“¡Ṙ×!⁸Ọ5`ỊV-ṙQȷṖÞ(sĿȮ^k³M"ɓmEf¤*0C[ạƇŻȥ#BṚñİmZẓeȦUƈ!ċ€@Ȧʋ)ƙḅyẉ’b158¤ị¢

オンラインでお試しください!

テストケース

使い方

基本的に、これは入力された文字の順序を、たとえば"joel"-> [106, 111, 101, 108]->のようなバイナリ値に変換しようとし2^3*106 + 2^2*111 + 2^1*101 + 2^0*108ます。

次に、この値は、mod 407、mod 270、[さらにもう少しmods]、mod 160の順に取られます。これは、66個すべての文字列入力を0〜158の整数にマップするためです(最終modでラッキー)。

整数は整数リストからインデックス化され、入力のチャプタ数が-th “ọḷḊḲɦ...ƙḅyẉ’b158¤であるnような値を見つけnます。ジョエルはたまたま7番目に少ない数の章を持っています。

この値はnリスト“£ÐgƁ÷ḅ*Wßßɦ*⁷ċṗṿỵ×Ɓṿ⁷ḢQ’b7+\;“BƝ‘にさらにインデックス付けされ、正確なチャプター数を見つけます。

可能な改善:同じ数のチャプターを持つ入力は、MODから同じ値にハッシュできます(0%の衝突は必要ありません)が、MODのシーケンスを決定するためにプログラムでそれを考慮しませんでした。



@%/i@“...’b158¤ị¢-> %/“...’b158¤iị¢)を避けてバイトを保存します。先頭にある単一のコードページインデックスリストに160のオフセットを使用して、別のバイトを保存します(OḄ;407;270;“ọḷḊḲɦ‘-> OḄ;“ẋn=:!ס‘+160¤)。
ジョナサンアラン

10

Excel、373バイト

Mathematicaの回答(6a+b+8c+5d+3e modulo 151)から@Mishaのアプローチを再利用する:

=CHOOSE(MOD(6*CODE(LEFT(A1,1))+CODE(MID(A1,2,1))+8*CODE(MID(A1,3,1))+5*CODE(MID(A1&A1,4,1))+3*CODE(MID(A1&A1,5,1)),151)+1,30,,,,27,,,,3,12,,,9,,149,,,28,,,13,,,35,3,,35,7,,8,,20,,49,23,13,4,,,4,,,,,,,2,,,39,,,15,3,,3,9,,12,27,,,,,,51,15,,,,70,,65,,21,11,,,4,,24,,,6,,2,1,,,,,,2,,,30,,,,,,23,,,33,,20,,,15,,,4,,4,,,12,2,,2,47,23,,2,,,,,41,,,3,,,5,,,,,11,,21,5,,,,5,2,3,26)+1

Lookupはchaptersを返し-1、それを追加します。これは、変更109二回、および,1,,,4回。

古いアプローチに更新されました。Excel、460 401バイト

CSVとして保存し、最初の行の最後に入力したブック名(C1)に結果が表示されC2ます:

1c,16,revelation
1co,29,"=VLOOKUP(LEFT(C1,1)&MID(C1,3,1)&MID(C1,6,1),A:B,2)"
1j,5
1k,22
1p,5
1s,31
1t,6
1ts,5
2c,13
2co,36
2j,1
2k,25
2p,3
2s,24
2t,4
2ts,3
3j,1
a,9
at,28
c,4
d,12
du,34
e,12
ee,48
eh,6
eo,40
er,10
g,6
gn,50
h,3
hbw,13
hg,2
hs,14
i,66
j,42
jd,1
jds,21
je,3
jh,21
jm,5
jn,4
jr,52
js,24
lm,5
lv,27
m,7
ml,4
mr,16
mt,28
n,3
nhi,13
nm,36
o,1
p,150
pi,1
pip,4
po,31
r,16
rt,4
rv,22
s,8
t,3
zc,14
zp,3

ルックアップテーブルのために、私たちは出て残すことができますet 10し、l 24これらが一致ためにer 10js 24、それぞれ。


ルックアップテーブルを必要とするExcelの数式の回答はあまり見られません。目新しさと実行に対する賛成票。Excelのスコアリングに関するメタ質問を検索/投稿することをお勧めします。具体的には、A列のレイアウトにさらに数バイトを支払う必要があると思います。また、おそらくAをCに、B:CをA:Bに移動して、Aのすべての空のセルに「充電」されないようにする必要があります。頭のてっぺんから、TSV /シート全体のCSVテキストファイルが正しいスコアである可能性がありますか?
スパー

一般的に、.csvファイル内の文字のバイトカウント(この場合、含まれている入力値のバイトカウントを引いたもの)は、これらのタイプのExcel回答のスコアであると考えています。 401バイト
テイラースコット

@ TaylorScott、CR-LFを改行文字として使用しました。401 v。464はこのためだと仮定しますか?
ヴェルニッシュ

@Wernisch、要するに、はい-改行は、文字コード10のASCII文字リテラルとして格納されていることを想定できます。つまり、1バイトとしてカウントされることを意味します
Taylor Scott

9

JavaScript(ES6)、251 197バイト

s=>`-  cE1$ " +%&  %  &!!· $!#&!!)!'=6 &!6".!  -!!Q$"/  779@@= % & $'1 U( I>!!  K * "S< :  9$!C %  . $. 9E1/ %!!'" + $ % `.split`!`.join`   `.charCodeAt(parseInt(s[2]+s[0]+s[5],36)%913%168%147)-33

テスト

書式設定およびコメント化

s =>                                 // s = book name
  `-  cE1$ " +%&  %  &!!· (...)`     // data string (truncated)
  .split`!`.join`   `                // inflate padding characters '!' -> 3 spaces
  .charCodeAt(                       // read the ASCII code at the position found by
    parseInt(s[2] + s[0] + s[5], 36) // parsing 3 characters of the input in this exact
    % 913 % 168 % 147                // order as base 36 and applying three consecutive
  ) - 33                             // modulo operations, then subtract 33

2
あなたは公式にJSで最も効率的なハッシュ方法を見つけるマスターです...または、あなたのための方法を見つけるプログラムはありますか?;)
ETHproductions

@ETHproductionsある時点で汎用Nodeプログラムを作成しましたが、特に高速ではないため、ほとんどの場合、カスタムコードを作成することになります。O_o
Arnauld

9

Mathematica:323 294バイト

Uncompress["1:eJxTTMoPSpvOwMBQzAIkfDKLSzJlgAwCBEhtJi8qwQUnpqESsqgEHyqhAjePBc7lgBOccEIUThiBCAm4AayECUZUghmV0EAlBFAdxILqN17CgWMCNwUn4QQnxEAEDyqBcLgkKsGO6gUmLAROX8rjJSRQCSU4IYpKILzAiDfEebG4wADVDmZchBYqgRYVbLgIRPiJ4VXHDDdKGuZ9AAP6TUg="][[Mod[ToCharacterCode@StringTake[#<>#,5].{6,1,8,5,3},151,1]]]&

使い方

この本は、文字コードで始まるためにabcdeを計算する(必要に応じてラップアラウンド)6a+b+8c+5d+3e、一意であることを起こるモジュロ151と、長さ151の圧縮されたリスト内のチャプター数を検索します(リスト内の未使用のエントリがあります前のエントリの複製で埋められます。これにより、おそらくランレングスエンコーディングが促進されますか?とにかく、それは役立ちます。)

リスト圧縮のアイデアを提供してくれた@numbermaniacに感謝します。これは数字を付けるのが難しいですが、ここでの改善の大きな部分です。

旧バージョン:Mathematica、548 435 407バイト

Join["111112333333344444455555666789"~(p=StringPartition)~1,"1010121213131314141616162121222224242425272828293131343636404248505266"~p~2,{"150"}][[Max@StringPosition["2jn3jnjduoaapimhgi2pe2tshbkjeonhntttzpn2toclsjnjmlhpiprtu1jn1pe1tsjmjlmt1toehiglimcmsnoaometrerzdnlecs2cihbwnhihshzcr1cimrarmsjhojds1kgrva2sujsalku2kglviatcmte1co1supordur2conmreosjbbeeegnijriiahpas",""<>#&@Characters[#<>#][[{1,3,6}]]]/3]]&

使い方

検索する前に、各名前nameを文字1、3、および6に変換しますnamename(たとえば、にleviticusなりlvi、にjobなりますjbb)。

検索するリストは、1桁と2桁の章番号を文字列にまとめることでわずかに圧縮されています。

Mathematica:40バイト、非競合

WolframAlpha["# chapters "<>#,"Result"]&

うん。


Compressリストで使用する場合Uncompress、プログラムでリストに戻すことができる文字列を取得します。関数全体が430バイトになり、5を節約できます:)
numbermaniac

ありがとう!プログラムのそのバージョンにはリストを短縮するより良い方法がありましたが、これは私が見つけた新しいアプローチでは非常にうまく機能しました:)
ミシャラヴロフ

4
2番目のMathematicaの答えに聖書の組み込みが含まれることを本当に望みました
-SztupY

組み込みはありません。がありますWolframAlpha["number of chapters of "<>#,"Result"]&が、どういうわけかそれはまったく同じことのようには感じません。
ミシャラヴロフ

1
Wolfram Alphaの答えを調べます。WolframAlphaは、標準の抜け穴と質問の両方で不正行為と呼ばれています。(もしバイトカウントにWolfram Alphaのソースコードとデータベースを含めると、それは再び大丈夫になると思います。)
ミシャラヴロフ


4

ゼリー 117  115114 バイト

OP%⁽µW%⁽£İ%237
“ĿḊƘ⁹ƙƬṂ;ɓṭ6-ạʋ⁵%$Ẋf,¥ÆÑƈø¬ȦṘd⁾“ʂụṿⱮẆƊ¦ẠLjƒ~Ḅr©“Ẏw|!¡¢o“ŻɗṢ“3ɠ‘Zċ€ÇTḢị“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤

オンラインでお試しください!またはテストスイートを見る

どうやって?

入力文字列の文字の序数の積を3 つの2 3分割余りを、リストのリストで結果を検索して、本の長さのリストで結果を検索することが分かっインデックスを使用しています。

ハッシュ関数を見つけるとき、コードページのインデックス付けを可能にするために255以上の結果を持つバケットを最大で1つだけのものを検討し、エンコードする値の総数を最小化するものを選択しました(「問題のある」バケットを削除した後、または最も長いバケットは存在しませんでした)。3つのモジュロを持つ66から59(%731%381%258)58(%731%399%239)を見つけ、56エントリを持つ1つ(%1241%865%251)[117バイトを作成] ...次に2つの剰余のみを使用して58を見つけました(%1987%251)[115バイトを作成]
..次に、3つの剰余を使用して55を見つけました。2つのダミーエントリを追加すると、ルックアップリストをさらに圧縮できます...

コード:

1。

“ĿḊƘ⁹ƙƬṂ;ɓṭ6-ạʋ⁵%$Ẋf,¥ÆÑƈø¬ȦṘd⁾“ʂụṿⱮẆƊ¦ẠLjƒ~Ḅr©“Ẏw|!¡¢o“ŻɗṢ“3ɠ‘

コードページインデックスの5つのリストのリスト(“...“...“...“...“...“...‘):

[[199,193,148,137,161,152,179,59,155,224,54,45,211,169,133,37,36,208,102,44,4,13,16,156,29,7,190,204,100,142],[167,225,226,149,207,145,5,171,76,106,158,126,172,114,6],[209,119,124,33,0,1,111],[210,157,183],[51,159]]

これはZ、バケットを取得するためにアトムを使用して転置されます。これをBと呼ぶ:

[[199,167,209,210,51],[193,225,119,157,159],[148,226,124,183],[137,149,33],[161,207,0],[152,145,1],[179,5,111],[59,171],[155,76],[224,106],[54,158],[45,126],[211,172],[169,114],[133,6],37,36,208,102,44,4,13,16,156,29,7,190,204,100,142]

01はダミーキーであり、[179,5,111]さらに2つ右に移動できます-転置には左に長いエントリが必要です)

2。

“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤

これをC(章がカウントする)と呼びます-これは整数のリストです:

[1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]

また、次のように構成されます(したがって、上記の2つのダミーキー10,12,13は昇順で許可されます)。

“£ẆJQ+k⁽’ḃ6¤+\;“£¬®µıñø"BƝ¤‘¤
                            ¤ - nilad followed by link(s) as a nilad:
           ¤                  -   nilad followed by link(s) as a nilad:
“£ẆJQ+k⁽’                     -     base 250 number = 935841127777142
         ḃ6                   -     converted to bijective base 6 = [1,3,1,1,4,2,1,1,2,5,1,2,4,3,5,4,2,6,2,2]
            +\                -     cumulative reduce with addition = [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52]
               “£¬®µıñø"BƝ¤‘  -   code-page indices = [2,7,8,9,25,27,29,34,66,150,3]
              ;               -   concatenate = [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]

コードの簡略版は次のとおりです。

OP%⁽µW%⁽£İ%237 - Link 1, hash function: list of characters   e.g. "genesis"
O              - cast to ordinals             [103,101,110,101,115,105,115]
 P             - product                                    160493569871250
   ⁽µW         - base 250 literal                                      3338
  %            - modulo                                                1050
       ⁽£İ     - base 250 literal                                      1699
      %        - modulo                                                1050
           237 - literal                                                237
          %    - modulo                                                 102

Bċ€ÇTḢịC - Main link: list of characters                     e.g. "genesis"
B        - the list of buckets, B, described  in (1) above
   Ç     - call the last link as a monad (get the hashed value)         102
 ċ€      - count for €ach - yields 29 zeros and a one or 30 zeros       [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]
    T    - truthy indexes - yields a list of length one or zero         [19]
     Ḣ   - head - extracts that value or zero if it was empty            19  ----------------------------------------------v
       C - the list of chapter lengths, C, described in (2) above       [1,4,5,6,10,12,13,14,16,21,22,24,28,31,36,40,42,48,50,52,2,7,8,9,25,27,29,34,66,150,3]
      ị  - index (the head value) into (the chapter list, c)             50
         -       - 1-indexed and modular so 0 yields 3 (the rightmost)

3

パイソン2438の 429 416 411 409バイト

lambda s:[c for x,c in zip('A|m|C|h|2|th|2 Co|D|y|E|Ep|Ec|x|ze|G|Ge|H|gg|He|Ho|I|Jo|oe|oh|na|sh|Ju|dg|Ja|Je| J|1 J|K|2 K|L|Le|Lu|M|ch|rk|tt|N|Ne|Nu|O|P|Pr|Ph|pp|Pe|2 P|R|Ro|Ru|S|Sa|2 S|T| T|2 T| Ti|2 Ti|Z|Zep'.split('|'),(28,9,4,29,36,16,13,12,34,10,6,12,40,48,6,50,3,2,13,14,66,42,3,21,4,24,1,21,5,52,1,5,22,25,5,27,24,7,4,16,28,3,13,36,1,150,31,1,4,5,3,22,16,4,8,31,24,3,5,3,6,4,14,3))if x in s.title()][-1]

オンラインでお試しください!

入力をTitle Caseに変更し、リスト内で最後に一致する部分文字列を見つけることにより機能します。

[('A', 28), ('m', 9), ('C', 4), ('h', 29), ('2', 36), ('th', 16), ('2 Co', 13), ...

例えば。'1 samuel' -> '1 Samuel'に一致し('m', 9), ('2', 36), ('S', 8), ('Sa', 31), ('2 S', 24)ます。最後の一致は('2 S', 24)ですので、答えは24


3

6502マシンコード(C64)、204バイト

00 C0 20 FD AE 20 9E AD 85 FD 20 A3 B6 A9 1E 85 FB A9 00 85 FC A8 B1 22 18 69
4A 65 FC 45 FB 85 FC E6 FB C8 C4 FD D0 EE A5 FC 4A 4A 4A 4A A8 A5 FC 29 0F 19
BA C0 A8 BE 3D C0 A9 00 4C CD BD 16 34 42 0D 01 00 04 03 04 1C 0A 00 06 15 07
00 16 00 22 03 02 0E 00 24 00 00 01 00 08 03 00 1C 03 01 00 00 00 00 00 03 03
00 00 00 24 10 1F 18 0E 10 00 00 00 32 30 1F 2A 00 0D 00 05 00 1B 00 0A 00 01
28 00 00 0C 96 00 10 00 00 00 18 00 00 03 00 00 00 00 00 00 15 09 00 05 00 04
00 00 04 00 00 04 00 00 18 00 1D 05 00 00 19 00 0D 00 00 06 06 0C 00 00 00 00
05 00 01 00 05 00 04 30 10 20 10 40 70 00 00 20 50 00 10 60 30 20

説明

ここで重要なのは、値に衝突することなくマップする特別なハッシュ関数を使用することです 0125 *。次に、章番号が126バイトのテーブルに配置されます。ハッシュは完全な8ビットで行われ、最終値はさらに別のテーブルで高ニブルを検索することによって調整されます。この方法は、低ニブルが衝突しない異なる高ニブルを組み合わせます。

コードパーツのコメント付き逆アセンブリリストを次に示します。

.C:c000  20 FD AE    JSR $AEFD          ; consume comma
.C:c003  20 9E AD    JSR $AD9E          ; evaluate argument
.C:c006  85 FD       STA $FD            ; remember string length
.C:c008  20 A3 B6    JSR $B6A3          ; free string ....
.C:c00b  A9 1E       LDA #$1E           ; initial xor key for hash
.C:c00d  85 FB       STA $FB
.C:c00f  A9 00       LDA #$00           ; initial hash value
.C:c011  85 FC       STA $FC
.C:c013  A8          TAY
.C:c014   .hashloop:
.C:c014  B1 22       LDA ($22),Y        ; load next string character
.C:c016  18          CLC                ; clear carry for additions
.C:c017  69 4A       ADC #$4A           ; add fixed offset
.C:c019  65 FC       ADC $FC            ; add previous hash value
.C:c01b  45 FB       EOR $FB            ; xor with key
.C:c01d  85 FC       STA $FC            ; store hash value
.C:c01f  E6 FB       INC $FB            ; increment xor key
.C:c021  C8          INY                ; next character
.C:c022  C4 FD       CPY $FD            ; check for string length
.C:c024  D0 EE       BNE .hashloop      ; end of string not reached -> repeat
.C:c026   .hashadjust:
.C:c026  A5 FC       LDA $FC            ; load hash
.C:c028  4A          LSR A              ; shift left four times
.C:c029  4A          LSR A
.C:c02a  4A          LSR A
.C:c02b  4A          LSR A
.C:c02c  A8          TAY                ; and copy to y index register
.C:c02d  A5 FC       LDA $FC            ; load hash again
.C:c02f  29 0F       AND #$0F           ; mask low nibble
.C:c031  19 BA C0    ORA $C0BA,Y        ; and add high nibble from table
.C:c034  A8          TAY                ; copy to y index register
.C:c035  BE 3D C0    LDX .chapters,Y    ; load chapter number from table
.C:c038  A9 00       LDA #$00           ; accu must be 0 for OS function:
.C:c03a  4C CD BD    JMP $BDCD          ; print 16bit value in A/X

その後、章番号の表、最後にハッシュ値の上位ニブルの表が続きます。

オンラインデモ

使用法: sys49152,"name"、たとえばsys49152,"genesis"(output50)。

重要:プログラムがディスクからロードされた場合(オンラインデモのように)、new最初にコマンドを発行してください!これは、マシンプログラムをロードするとC64 BASICポインターが一部破壊されるために必要です。

ケーシングに関するヒント:C64のデフォルトモードでは、入力は大文字で表示されます。これ実際には小文字ですが、C64には2つのモードがあり、デフォルトの大文字/グラフィックモードでは、小文字が大文字として表示され、大文字がグラフィックシンボルとして表示されます。


*)もちろん、これは可能な限り高密度ではありません...まあ、多分私は後でさらに良い解決策を見つけるかもしれません;)


1

Java 8、623 597 590バイト

s->{int i=s.chars().map(c->c*c*c).sum()/13595;return s.contains("tt")?28:i<258?42:i<355?1:i<357?3:i<362?16:i<366?28:i<369?21:i<375?9:i<377?24:i<380?5:i<382?1:i<386?10:i<402?7:i<436?4:i<438?5:i<439?14:i<461?3:i<463?2:i<477?22:i<478?25:i<490?5:i<491?3:i<493?12:i<500?66:i<545?3:i<546?1:i<548?21:i<562?4:i<568?24:i<570?10:i<572?31:i<573?24:i<582?16:i<583?150:i<607?40:i<629?48:i<639?50:i<663?13:i<675?3:i<677?36:i<679?52:i<734?1:i<735?6:i<736?4:i<775?14:i<785?6:i<796?3:i<800?31:i<812?6:i<876?27:i<910?29:i<911?36:i<940?22:i<1018?4:i<1035?16:i<1036?13:i<1066?12:i<1092?34:i<1229?5:i<1230?3:8;}

@Nevayのおかげで-7バイトforループをストリームに変更することで、ます。

間違いなくもっとゴルフをすることができます。
ロングショットでは最短の答えではないかもしれませんし、既存の答えを移植することでゴルフをすることもできますが、私は自分で何かを思いついたことを今でも誇りに思っています.. :)

説明:

ここで試してみてください。

  1. 入力文字列の各文字(ASCII値として)の3のべき乗を取ります
  2. それらの合計を取る
  3. 結果を除算する 13595を整数除算で除算します(Javaでは、結果を自動的に切り捨て/フロア化します)。
  4. これにより、65個の一意の値が残ります(両方の値のみがhabakkukありmatthew674
  5. そして、1つの巨大な三項ifが正しい結果を返します(可能な場合は、いくつかの値が単一の三項文に結合されます(381および382both 1; 425および436both 4; 649および663both 13; 952および1018both 4; 1122および1229both 5)。

1
int i=s.chars().map(c->c*c*c).sum()/13595;代わりに使用できますint i=0;for(int c:s.getBytes())i+=c*c*c;i/=13595;
ネヴァイ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.