マナはどれくらい必要ですか?


33

ダンジョンマスターは、1987年にアタリSTでリリースされた最初のリアルタイムロールプレイングゲームの1つでした。当時のエキサイティングなものの中でも、ルーン文字に基づいたかなり洗練されたスペルシステムを提供していました。

今日のあなたの仕事は、ダンジョンマスターで特定の呪文を唱えるのに必要なマナポイントの数を評価するプログラムまたは関数を書くことです。

ダンジョンマスターのスクリーンショット

「スペルキャスト」システムは、上の図の右上のシアンのボックスです。

スペル、ルーン、マナ

ダンジョンマスタースペルは、2〜4個のルーンで構成され、次のカテゴリからこの順番で選択されます。

  1. 電力(必須)
  2. 元素の影響(必須)
  3. フォーム(オプション)
  4. クラス/アライメント(オプション)

有効なスペルは次のいずれかであることを意味します。

  • パワー+エレメンタルインフルエンス
  • パワー+エレメンタルインフルエンス+フォーム
  • パワー+エレメンタルインフルエンス+フォーム+クラス/アライメント

各カテゴリには6つのルーンが含まれ、各ルーンには関連する基本マナコストがあります。

=============================================================================
| Power               | Rune      |   Lo |   Um |   On |   Ee |  Pal |  Mon |
|                     +-----------+------+------+------+------+------+------+
|                     | Base cost |    1 |    2 |    3 |    4 |    5 |    6 |
=============================================================================
| Elemental Influence | Rune      |   Ya |   Vi |   Oh |  Ful |  Des |   Zo |
|                     +-----------+------+------+------+------+------+------+
|                     | Base cost |    2 |    3 |    4 |    5 |    6 |    7 |
=============================================================================
| Form                | Rune      |  Ven |   Ew | Kath |   Ir |  Bro |  Gor |
|                     +-----------+------+------+------+------+------+------+
|                     | Base cost |    4 |    5 |    6 |    7 |    7 |    9 |
=============================================================================
| Class / Alignment   | Rune      |   Ku |  Ros | Dain | Neta |   Ra |  Sar |
|                     +-----------+------+------+------+------+------+------+
|                     | Base cost |    2 |    2 |    3 |    4 |    6 |    7 |
=============================================================================

マナコストの評価

呪文のマナコストは、すべてのルーンのマナコストの合計です。

  • パワールーンのコストは常に基本コスト(1〜6)に等しくなります。

  • 他のルーンについては、次の式が適用されます。

    コスト= floor((power + 1)* base_cost / 2)

    ここで、powerはPower runeの基本コストです。

Spell: Lo Ful
Cost : 1 + floor((1 + 1) * 5 / 2) = 1 + 5 = 6

Spell: Um Ful
Cost : 2 + floor((2 + 1) * 5 / 2) = 2 + 7 = 9

Spell: Pal Vi Bro
Cost : 5 + floor((5 + 1) * 3 / 2) + floor((5 + 1) * 7 / 2) = 5 + 9 + 21 = 35

明確化と規則

  • 入力は、呪文のルーン文字を指定する2〜4個の文字列で構成されます。これらは、4つの異なるパラメーター、文字列の配列(例['Lo', 'Ful'])、または選択した1文字の区切り文字を含む1つの文字列(例)など、任意の妥当な形式で使用できます'Lo Ful'。回答で選択した入力形式を指定してください。
  • ルーン文字は有効であることが保証されています。
  • カテゴリの順序を尊重する必要があります。未使用のカテゴリは欠落しているか、偽の値に置き換えられている可能性があります。
  • これらの形式のいずれかのルーン文字を受け入れることができます。1.大文字の後に小文字('Ful')が続きます。2.すべて小文字('ful')3.すべて大文字('FUL')。ただし、異なる形式を混在させることはできません
  • 明らかに、呪文が実際にゲームで何らかの効果を持っているかどうかを気にする必要はありません(好奇心が強い有用な呪文はここにリストされています)。
  • これはであるため、バイト単位の最短コードが優先されます。
  • そして覚えておいてください:ロード・カオスはあなたを見ています!

テストケース

Spell          | Output
---------------+-------
Lo Ful         | 6
Um Ful         | 9
On Ya          | 7
Lo Zo Ven      | 12
Pal Vi Bro     | 35
Ee Ya Bro Ros  | 31
On Ful Bro Ku  | 31
Lo Zo Kath Ra  | 20
On Oh Ew Sar   | 35
Ee Oh Gor Dain | 43
Mon Zo Ir Neta | 68
Mon Des Ir Sar | 75

1
タンジェンシャル-しかし、このシステムが好きな人にとっては、The Magical Land of Wozzはほぼ同じシステムを実装する日本のSNESゲーム(英語翻訳が利用可能)です。google.co.jp/webhp?ie=UTF-8#q=magical+land+of+wozz
コティジョナサンサックスマン

だれかがダンジョンマスターをプレイするのを見るのは漠然としています(STにはなかったと思います)。彼らは戦闘機の1つに魔法のネックレスを装備していましたが、それが充電されたかどうかを頻繁にチェックし、そうであれば、ある種の光生成呪文であると思うものの別のルーンをキャストし、戦闘機がキャストできるようにしましたこの呪文は10分ごとに行われ、最終的に魔法のレベルを獲得しました。
ニール

@Neilこのネックレスは、おそらくムーンストーン(+3マナ)またはペンダントフェラル(+1ウィザードスキル)のいずれかでした。すべてのアイテムはここにリストされています
アーナルド

このスクリプトは、可能なすべての入力の組み合わせを出力する必要があります
-NieDzejkob

回答:


6

SOGL V0.12110の 78 バイト

θKKι"LUOEPM”;W:A≤{B"⁶Μ↓§QΕņj“L─"¶Ζq«╝γDyΜ2¶S◄Μ$‘č¹I6nēwι{_Cb:ƧRA=┌*ΚKι=?aIc*»+

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

おそらくすべてをやり直すことで1、2バイトゴルフすることができます

説明:

θ            split on spaces
 K           pop the 1st item
  K          pop from the string the 1st character
   ι         remove the original string from stack
    "”;W     get the chars index in "LUOEPM"
        :A   save a copy to variable A
          ≤  put the power (used as the mana) on the bottom of the stack (with the thing above being the input array)

{            for the leftover items in the input do
 B             save the current name on B
  "..“         push 456779223467234567
      L─       base-10 decode it (yes, silly, but it converts it to an array of digits)
        ".‘    push "VEKIBGKRDN-SYVOFDZ"

      č        chop to characters
       ¹       create an array of those two
        I      rotate clockwise
         6n    group to an array with sub-arrays of length 6 (so each array in the array contains 3 items, corresponding to the categories, each with 6 arrays with the runes 1st letter (or "-" in the case of Ra) and base cost)
           ē   push variable e (default = user input number, which errors and defaults to 0) and after that increase it (aka `e++`)
            w  get that item in the array (the array is 1-indexed and the variable is not, so the array was created shifted (which somehow saves 0.9 ≈ 1 byte in the compression))

 ι             remove the original array
  {            for each in that (current category) array
   _             dump all contents on stack (so pushing the runes name and then base cost)
    C            save pop (base cost) on variable B
     b:          duplicate the name
       ƧRA=      push if pop = "RA"
           ┌*    get that many (so 0 or 1) dashes
             Κ   prepend the "" or "-" to the name
              K  pop the 1st letter of the name
               ι remove the modified name, leaving the 1st letter on the stack

         =?      if top 2 are equal (one of the dumped items and the 1st letter of the current inputs)
           a       push variable A (the power)
            I      increase it
             c     push variable C (the current base cost)
              *    multiply
               »   floor-divide by 2
                +  add that to the power

2
それがそれをさらに面白くするものです
-Walfrat

説明を追加できますか?
電卓

@CalculatorFeline Kindaはこの答えを忘れていました。おそらくゴルフと説明を追加します
dzaima

17

パイソン2135の 119 115バイト

b=[int('27169735 2  4567 435262'[int(x,36)%141%83%50%23])for x in input()]
print b[0]+sum(a*-~b[0]/2for a in b[1:])

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

入力は標準入力からの文字列のリストです


Outgolfed ...>。<
Xcoder氏

あなたのTIO入力メソッドも私の答えにコピーしました。気にしないでください。
ミスターXcoder

@ Mr.Xcoderこれですべてのテストケースが含まれました。必要に応じてコピーできます
-ovs

インデックス作成がうまくできました-JSソリューションのためにそれを借りてもいいですか?
シャギー

11

05AB1E83 82バイト

.•Y<εΔ•¹нk©.•M₄P畲нkÌ.•Jrû •³нkD(i\ë4 3‡4+}.•A1Δ#•I4èkD(i\ë3LJ012‡Ì})ćsv®>y*;(î(+

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

-1 エミグナのおかげ。

SOOOOOOO ungolfed :(

説明:

.•Y<εΔ•¹нk©.•M₄P畲нkÌ.•Jrû •³нkD(i\ë4 3‡4+}.•A1Δ#•I4èkD(i\ë3LJ012‡Ì})ćsv®>y*;(î(+ Accepts four runes as separate lines, lowercase. Use Ø for missing runes.
.•Y<εΔ•¹нk©                                                                        Index first letter of first rune into "aluoepm" ("a" makes 1-indexed)
           .•M₄P畲нkÌ                                                             Index first letter of second rune into "yvofdz", 2-indexed.
                      .•Jrû •³нkD(i\ë4 3‡4+}                                       Index first letter of third rune into "vekibg", 0-indexed, if it's not there pop, else, if index is 4 replace with 3, else keep as-is, then increment by 4.
                                            .•A1Δ#•I4èkD(i\ë3LJ012‡Ì}              Index fourth letter (modular wrapping) of fourth rune into "kodnra", if it's not there pop, else, if index is one of 1, 2 or 3, replace with 0, 1 or 2 respectively, else keep as-is, then increment by 2.
                                                                     )ćs           Wrap all numbers into a list, keeping the power rune behind.
                                                                        v          For each
                                                                         ®>y*;(î(   Apply the formula
                                                                                 +  Add to total sum

小さなゴルフの1つ.•Y<εΔ•は、最初にインデックスを作成する場合、インデックスを増やす必要がないことです。
エミグナ

@Emigna Oohのはまだそれを試してみた時間を持っていなかった...
エリックOutgolfer

11

JavaScriptの(ES6)、157 156 116 112 100の 99の 97バイト

入力を文字列の配列として受け取ります。

a=>a.map(c=>t+=(v=+`27169735020045670435262`[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),t=0)|t
  • ovsのPythonソリューションからインデックストリックを借用することで、44バイトを大幅に節約しました。この答えを支持する場合は、それも支持してください。
  • Arnauldが3進数を使用する明らかな機会であるべきことを指摘してくれたおかげで、13バイト節約されました。

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


説明

フー、少年、これは楽しいだろう- 些細な解決策への私の説明は、最高の時に吸う!それをやってみましょう...

a=>

parameterを介して引数として配列を受け取る匿名関数a

a.reduce((t,c)=>,0)

関数を介してそれぞれを渡すことにより、配列内の要素を減らします。tパラメータは、実行中の合計であるcパラメータは現在の文字列であると0の初期値ですt

parseInt(c,36)

現在の要素を基数36の文字列から10進整数に変換します。

%141%83%50%23

いくつかのモジュロ演算を実行します。

+`27169735 2  4567 435262`[]

そのインデックスの文字列から文字を取得し、数値に変換します。

v=

その番号をvariableに割り当てますv

+a?

変数aが数値かどうかを確認してください。最初の要素aは文字列の配列であるため、それを数値に変換しようとするNaNとfalseが返されます。後続の各パスでaは、正の整数になりますが、これは真実です。

a*v+v>>1

aが数値の場合、その値にの値を乗算し、結果の値をv加算しv、結果のビットを1ビット右にシフトします。これにより、2で除算してフローリングするのと同じ結果が得られます。

:a=v

aが数値でない場合は、vそれに値を割り当てます。これ0により、最初のパスで合計に加算することもできます。

t+

最後に、上記の3項の結果を現在の合計に追加します。


オリジナル、156バイト

a=>a.reduce((t,c)=>t+(p+1)*g(c)/2|0,p=(g=e=>+`123456234567456779223467`["LoUmOnEePaMoYaViOhFuDeZoVeEwKaIrBrGoKuRoDaNeRaSa".search(e[0]+e[1])/2])(a.shift()))

あなたは、再利用することで、1つの以上のバイトを保存することができます:a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)(EDITを:削除入力に渡された整数についての無関係なコメントを-私は非常によく自分の挑戦を理解していなかったようにそれはそう^^)
アルノー

きちんとしたトリック、ありがとう、@ Arnauld。現時点では少ないバイト数でインデックスを作成している数を得る計算を考え出そうとしていますが、運はあまりありません。
シャギー

6

JavaScript、212 210 207 206バイト

単純な検索アルゴリズムで、検索文字列は合計バイトに貢献しています。

コード

s=>eval('p=q=+(e=s.map(r=>"1 2 3 4 5  6  2 3 4 5  6  7 4  5 6   7 7  9  2 2  3   4   6 7"["LoUmOnEePalMonYaViOhFulDesZoVenEwKathIrBroGorKuRosDainNetaRaSar".search(r)])).shift();e.map(c=>p+=((q+1)*c)>>1);p')

入力フォーマット

文字列配列。各アイテムは最初の文字が大文字の文字列です。例:["Mon"、 "Zo"、 "Ir"、 "Neta"]

説明

e=s.map(r=>"1 2 3 4 5  6  2 3 4 5  6  7 4  5 6   7 7  9  2 2  3   4   6 7"["LoUmOnEePalMonYaViOhFulDesZoVenEwKathIrBroGorKuRosDainNetaRaSar".search(r)])

これにより、基本コストが照会されます。

p=q=+(/*blah*/).shift() 

上記の配列結果の最初の項目で2つの変数を初期化し、その項目を削除します。最初に数値にキャストする必要があります。そうしないと、次の部分で文字列連結と見なされます。

e.map(c=>p+=((q+1)*c)>>1);

非パワールーンのコストを基本パワーに追加します。floor(blah)/ 2の代わりにシフトが使用されます。

eval(/*blah*/;p)

最後の結果を評価します。(クレジット:ステップ編)

テストケース

Lo Ful | 6
Um Ful | 9
On Ya | 7
Lo Zo Ven | 12
Pal Vi Bro | 35
Ee Ya Bro Ros | 31
On Ful Bro Ku | 31
Lo Zo Kath Ra | 20
On Oh Ew Sar | 35
Ee Oh Gor Dain | 43
Mon Zo Ir Neta | 68
Mon Des Ir Sar | 75

編集1:212> 210-中かっこのペアを削除しました

編集2:210> 207- JSルールについてのリマインダーとeval()関数の使用に関するヒントについて、Step Henに感謝します。AS3はeval()の使用を禁止しているので、私は長い間それを使用していません

編集3:207> 206- indexOf()をsearch()に置き換えるアイデアをありがとう、Shaggy


1
g内部を呼び出さない限りg、JSの回答でg=。また、評価に切り替えて削除することにより、数バイトを節約できますreturnフィドル
スティーブン

AS3は、eval()関数を禁じ以来のeval()のアイデアとJSルールの@StepHenおかげで、私はもうそれを使用することはできませんと思った
Shieru Asakoto

まあ、それはまだ動作し、我々は実装によって言語を定義:P
スティーブン・

1
searchで1バイト節約できますindexOf
シャギー

@Shaggyうまくいきました。検索アイデアに感謝します;)
浅本しえる


3

パイソン2320の318 314 311 307バイト

入力形式-文字列のリスト。完全なプログラム:

i=input()
t=[x.split()for x in"Lo Um On Ee Pal Mon|Ya Vi Oh Ful Des Zo|Ven Ew Kath Ir Bro Gor|Ku Ros Dain Neta Ra Sar".split('|')]
c=t[0].index(i[0])+1;r=c+1;s=c+r*(t[1].index(i[1])+2)/2
if len(i)>2:s+=r*(t[2].index(i[2])+4-(i[2]=='Bro'))/2
if len(i)>3:s+=r*(t[3].index(i[3])+1+(i[3]in'KuRaSar'))/2
print(s)

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


1
私はこれをゴルフするのをやめたので、ゴルフのアイデアを持っている人は誰でも自分で編集することを歓迎します
Mr Xcoder

3

Excel、339バイト

入力はで入力しA1D1。他のセルの数式。

=CHOOSE(MOD(CODE(A1),12),2,,,1,6,,3,5,4)+INT((CHOOSE(MOD(CODE(A1),12),2,,,1,6,,3,5,4)+1)*CHOOSE(MOD(CODE(B1),12),,3,,,2,7,4,6,,5)/2)+INT((CHOOSE(MOD(CODE(A1),12),2,,,1,6,,3,5,4)+1)*CHOOSE(MOD(CODE(C1),12),7,4,6,,,7,,,5,,9)/2)+INT((CHOOSE(MOD(CODE(A1),12),2,,,1,6,,3,5,4)+1)*CHOOSE(MOD(CODE(SUBSTITUTE(D1,"Ra","E")),11),4,3,6,,2,7,,,2,0)/2)

または、CSVとしてインポートする:

ExcelおよびCSV、228バイト

,,,
=CHOOSE(MOD(CODE(A1),12),2,,,1,6,,3,5,4)+1
=A2-1+INT(A2*CHOOSE(MOD(CODE(B1),12),,3,,,2,7,4,6,,5)/2)+INT(A2*CHOOSE(MOD(CODE(C1),12),7,4,6,,,7,,,5,,9)/2)+INT(A2*CHOOSE(MOD(CODE(SUBSTITUTE(D1,"Ra","E")),11),4,3,6,,2,7,,,2,0)/2)

SPACEヌルの場合、最初の行に入力された入力。A3に表示される結果。


2

SCALA、1106文字、1106バイト

これはかなり長く、おそらく最適化可能ですが、それは楽しかったです:)

入力形式:文字列内のスペースで区切られたルーン文字。入力が2つしかない場合(「Lo Ful」など)、私のコードはそれを完了しますwhile(k.length<4)k:+=""(したがって、「ABC D」にする必要がある場合、パラメーターを変更することで24バイトを節約できます)。

def n(i:Int,p:String):Int={Math.floor(i*((""+p(0)).toInt+1)/2).toInt}
def m(s:String):Int={var k=s.split(' ')

while(k.length<4)k:+=""

k match{case Array(p,i,f,a)=>{p match{case "Lo"=>1+m(1+"/ "+i+" "+f+" "+a)
case "Um"=>2+m(2+"/ "+i+" "+f+" "+a)
case "On"=>3+m(3+"/ "+i+" "+f+" "+a)
case "Ee"=>4+m(4+"/ "+i+" "+f+" "+a)
case "Pal"=>5+m(5+"/ "+i+" "+f+" "+a)
case "Mon"=>6+m(6+"/ "+i+" "+f+" "+a)
case _ if p.contains("/")=>i match{case "Ya"=>n(2,p)+m(p+" / "+f+" "+a)
case "Vi"=>n(3,p)+m(p+" / "+f+" "+a)
case "Oh"=>n(4,p)+m(p+" / "+f+" "+a)
case "Ful"=>n(5,p)+m(p+" / "+f+" "+a)
case "Des"=>n(6,p)+m(p+" / "+f+" "+a)
case "Zo"=>n(7,p)+m(p+" / "+f+" "+a)
case _ if p.contains("/")=>f match{case "Ven"=>n(4,p)+m(p+" / "+"/ "+a)
case "Ew"=>n(5,p)+m(p+" / "+"/ "+a)
case "Kath"=>n(6,p)+m(p+" / "+"/ "+a)
case "Ir"=>n(7,p)+m(p+" / "+"/ "+a)
case "Bro"=>n(7,p)+m(p+" / "+"/ "+a)
case "Gor"=>n(9,p)+m(p+" / "+"/ "+a)
case _ if p.contains("/")=>a match{case "Ku"=>n(2,p)
case "Ros"=>n(2,p)
case "Dain"=>n(3,p)
case "Neta"=>n(4,p)
case "Ra"=>n(6,p)
case "Sar"=>n(7,p)
case _=>0}
case _=>0}
case _=>0}
case _=>0}}}}

この素晴らしい挑戦に感謝します。オンラインでお試しください!


@Arnauld私は自分のコードについて何かに気付いただけです。「Lo Whoo Gor」と入力すると5が出力されます。大丈夫ですか?または、これを修正する必要がありますか?
V.クルトワ

「ルーン文字は有効であることが保証されている」(第2規則)ため、これは問題ありません
アーナルド

ああ、本当です:)考えずにやったので、このルールを忘れました。再度、感謝します。
V.クルトワ

2

シェークスピアプログラミング言語、4420バイト

,.Ajax,.Ford,.Page,.Puck,.Romeo,.Act I:.Scene I:.[Enter Romeo and Page]Page:You big big big big big big cat.[Exit Romeo][Enter Ajax]Page:Open thy mind!Ajax:Open thy mind!Open thy mind!You is the sum of Romeo and the sum of a big big cat and a cat.Am I as big as you?If not,let us return to Scene V.Page:You is the sum of a big big cat and a cat.Let us return to Act V.Scene V:.Ajax:You is the sum of you and the sum of a big big big cat and a pig.Am I as big as you?If not,let us return to Scene X.Page:You big cat.Let us return to Act V.Scene X:.Ajax:You is the sum of you and the sum of a big cat and a cat.Am I as big as you?If not,let us return to Scene L.Page:You big big cat.Let us return to Act V.Scene L:.Ajax:You is the sum of you and the sum of a big big cat and a big cat.Am I as big as you?If not,let us return to Scene C.Page:You is the sum of a big cat and a cat.Let us return to Act V.Scene C:.Ajax:Am I as big as the sum of you and a big big big pig?Page:You is the sum of a big big cat and a big cat.If so,you is the sum of you and a cat.Ajax:Open thy mind!Act V:.Scene I:.[Exit Ajax][Enter Ford]Page:Open thy mind!Ford:Open thy mind!Open thy mind!You is the sum of Romeo and the sum of a big big big big cat and a pig.Am I as big as you?If not,let us return to Scene V.Page:You big big cat.Let us return to Act X.Scene V:.Ford:You is the sum of you and the sum of a big big big cat and a pig.Am I as big as you?If not,let us return to Scene X.Page:You is the sum of a big cat and a cat.Let us return to Act X.Scene X:.Ford:You is the sum of you and a big big cat.Am I as big as you?If not,let us return to Scene L.Page:You is the sum of a big big big cat and a pig.Let us return to Act X.Scene L:.Ford:Am I as big as the sum of you and a pig?If not,let us return to Scene C.Page:You big cat.Let us return to Act X.Scene C:.Ford:Am I as big as the sum of Romeo and a big big cat?Page:You is the sum of a big big cat and a cat.If so,you is the sum of you and a cat.Ford:Open thy mind!Act X:.Scene I:.[Exit Page][Enter Puck]Ford:You is the sum of the sum of Ajax and a pig and the quotient between the product of Ajax and I and a big cat.Puck:Open thy mind!Is you as big as a pig?If so,let us return to Act D.[Exit Puck][Enter Page]Ford:Open thy mind!Open thy mind!You is the sum of Romeo and the sum of a big big cat and a cat.Am I as big as you?If not,let us return to Scene V.Page:You is the sum of a big big cat and a cat.Let us return to Act L.Scene V:.Ford:Am I as big as the sum of you and a big big cat?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a pig.Let us return to Act L.Scene X:.Ford:Open thy mind!Am I as big as the sum of Romeo and a big cat?If not,let us return to Scene L.Page:You is the sum of a big big big cat and a pig.Let us return to Act L.Scene L:.Ford:You is the sum of Romeo and the sum of a big big big cat and a pig.Am I as big as you?If not,let us return to Scene C.Page:You is the sum of a big big big cat and a cat.Let us return to Act L.Scene C:.Ford:Am I as big as the sum of you and a big big cat?If so,let us return to Scene D.Page:You big big cat.Let us return to Act L.Scene D:.Page:Open thy mind!You is the sum of a big big cat and a big cat.Act L:.Scene I:.[Exit Page][Enter Puck]Ford:You is the sum of you and the quotient between the product of Ajax and I and a big cat.Puck:Open thy mind!Is you as big as a pig?If so,let us return to Act D.[Exit Puck][Enter Page]Ford:You is the sum of Romeo and a big big cat.Am I as big as you?If not,let us return to Scene V.Page:You is the sum of a big cat and a cat.Let us return to Act C.Scene V:.Ford:You is the sum of you and the sum of a big big big cat and a pig.Am I as big as you?If not,let us return to Scene X.Page:You big cat.Let us return to Act C.Scene X:.Ford:Am I as big as the sum of you and the sum of a big cat and a cat?If not,let us return to Scene L.Page:You big big cat.Let us return to Act C.Scene L:.Ford:Am I as big as the sum of you and a big big big cat?If not,let us return to Scene C.Page:You is the sum of a big big big cat and a pig.Let us return to Act C.Scene C:.Page:Open thy mind!Is you as big as the sum of Romeo and a cat?You big cat.If so,you is the sum of you and a big big cat.Act C:.Scene I:.[Exit Page][Enter Puck]Ford:You is the sum of you and the quotient between the product of Ajax and I and a big cat.Act D:.Scene I:.Ford:Open thy heart![Exeunt]

入力を大文字の文字列として受け取ります。

説明はすぐに来る...今のところ、楽しい事実: Microsoft SPLの否定名詞です。他のすべての受け入れられた言葉は、シェークスピアの作品に登場しました。

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


1

Java(OpenJDK 8)、252バイト

r->{int c[][]={{2,3,4,5,6,7},{4,5,6,7,7,9},{2,2,3,4,6,7}},l=r.length,p="LUOEPM".indexOf(r[0].charAt(0))+1,a=p,i=0;String[]s={"YVOFDZ","VEKIBG","KRDNXS"};for(;i<l-1;)a+=(p+1)*c[i][s[i++].indexOf((l>3?r[i].replace("Ra","X"):r[i]).charAt(0))]/2;return a;}

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

ルーン文字はString[](の配列String)として、最初のケースの形式で入力されます(最初の文字は大文字で、残りは小文字です)。

これは標準の「n番目の文字を見つける」方法で、4番目のセグメントに存在する両方のねじれがRosありRaます。Ratoをインラインで明示的に置き換えて処理しましたX


1

網膜124123バイト

Gor
9
[ZIBS]\w+
7
Mon|Des|Kath|Ra
6
..l|Ew
5
Ee|Oh|Ven|Neta
4
[OVD]\w+
3
[UYKR]\w+
2
Lo
1
\d
$*
(?<=^(1+) .*1)
$1
\G1
11
11

オンラインでお試しください!リンクにはテストケースが含まれます。スペースで区切られたルーン文字を取ります。説明:初期段階では、各ルーンを数字に変換し、その後単項に変換します。最初の数の後の数は、最初の数よりも1つ多く乗算され、その後、最初の数が2倍になります。最終段階の整数は、すべての結果を2で除算して合計を取ります。


1

C、274

#define c(p,r,x)(p+1)*b(r[x+1],x*17)/2
i;char*a="& ; $ # 4 %        ; B * 6 $ 8          6 5 - >3  +  A@( .   6 5    ";b(r,s)char*r;{for(i=0;i<17;i++)if(a[i+s]-3==(r[0]^r[1]))return i/2+1;return 0;}main(n,r)char**r;{n=b(r[1],0);printf("%d\n",n+c(n,r,1)+c(n,r,2)+c(n,r,3));}

より自由:

#include<stdio.h>
char*a="& ; $ # 4 %      "
       "  ; B * 6 $ 8    "
       "      6 5 - >3  +"
       "  A@( .   6 5    ";
int b(char*r,int s){
  for(int i=0;i<17;i++)
    if(a[i+s]-3==(r[0]^r[1]))
      return i/2+1;
  return 0;
}
#define c(p,r,i)(p+1)*b(r[i+1],i*17)/2
int main(int n,char**r){
  int x=b(r[1],0);
  printf("%d\n",x+c(x,r,1)+c(x,r,2)+c(x,r,3));
}

4つのコマンドライン引数を指定する必要があります-最初のテストケースでは、実行する必要があります ./a.out Lo Ful "" ""



1

Go、205バイト

func c(s []string)int{f,l:=strings.IndexByte,len(s)
p:=f("UOEPM",s[0][0])+3
r:=p-1+p*(f("VOFDZ",s[1][0])+3)/2
if l>2{r+=p*(f("war o",s[2][1])+5)/2}
if l>3{r+=p*(f("it Ra",s[3][len(s[3])-2])+3)/2}
return r}

これは呼び出し可能な関数であり、ルーン文字列のスライスとして受け取ります[]string{"Um", "Ful"}

Go Playgroundで試してみてください。


0

Haskell、623バイト

数値ブードゥーの代わりにADTを使用します。

注:36を追加 {-# LANGUAGE GADTs,ViewPatterns #-}

  • スコアは、以下でコンパイル/実行されると仮定して計算されます -XGADTs -XViewPatterns
data P=Lo|Um|On|Ee|Pal|Mon deriving(Enum,Read,Eq)
data E=Ya|Vi|Oh|Ful|Des|Zo deriving(Enum,Read,Eq)
data F=Ven|Ew|Kath|Ir|Bro|Gor deriving(Enum,Read,Eq)
data C=Ku|Ros|Dain|Neta|Ra|Sar deriving(Enum,Read,Eq)
data S where
  S::P->E->S
  Q::P->E->F->S
  R::P->E->F->C->S
k(a:b:x)=let{p=read a;e=read b}in case x of{[]->S p e;[c]->Q p e(read c);[c,d]->R p e(read c)(read d)}
c,d::Enum a=>a->Int
c=succ.fromEnum
d=(+2).fromEnum
e Bro=7
e x=(+2).d$x
f x|c x`elem`[1,5,6]=d x|2>1=c x
g p f x =(`div`2).(*f x).succ$c p
h(S x y)=c x+g x d y
h(Q x y z)=h(S x y)+g x e z
h(R x y z t)=h(Q x y z)+g x f t
main=print.h.k.words=<<getLine

入力:通常の文字列としての単一のスペル

Lo Ful

Um Ful

マルチライン化は、最後の行を

main=interact$unlines.map(show.h.k.words).lines

しかし、これはカウントにバイトを追加します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.