Скільки мені потрібно Мана?


33

Dungeon Master була однією з перших рольових ігор в реальному часі в реальному часі, спочатку випущених в 1987 році на Atari ST. Серед інших захоплюючих для того часу речей, вона запропонувала досить складну систему заклинань, засновану на рунах.

Ваше завдання сьогодні - написати програму або функцію, яка оцінює кількість балів Мана, необхідних для того, щоб подати задане заклинання в Dungeon Master.

Скріншот майстра підземелля

Система "заклинання" - це праворучне верхнє червоне поле на зображенні, що зображено вище.

Заклинання, руни і Мана

Заклинання Dungeon Master складаються з 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 |
=============================================================================

Оцінка вартості Мани

Вартість Мана заклинання - це сума вартості Мани всіх рун:

  • Вартість руни Power завжди дорівнює її базовій вартості (від 1 до 6).

  • Для інших рун застосовується наступна формула:

    вартість = поверх ((потужність + 1) * базова вартість / 2)

    де потужність - основна вартість руни Power.

Приклади

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']) або лише одна рядок з одно символьним роздільником (наприклад '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
Coty Johnathan Saxman

У мене неясна пам'ять спостерігати, як хтось грає Dungeon Master (я не думаю, що це було на ST). Вони оснастили одного з своїх бійців чарівним намистом, і кожен так часто перевіряли, чи не зарядився він, і якщо так кинули ще одну руну, що, на мою думку, було легким заклинанням, якесь, щоб винищувач міг кинути це заклинання кожні десять хвилин, і, врешті-решт, набуває рівня майстерності.
Ніл

@Neil Це намисто, ймовірно, було або Місячним каменем (+3 Мана), або Підвіскою дикою (+1 Майстерність майстра). Усі елементи перераховані тут .
Арнольд

цей сценарій повинен вивести всі можливі комбінації вводу
NieDzejkob

Відповіді:


6

SOGL V0.12 , 110 78 байт

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

Спробуйте тут!

Можливо, мабуть, гольф на два байти від того, щоб переробляти все

Пояснення:

θ            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
ось що робить його ще цікавішим
Вальфрат

Чи можете ви додати пояснення?
CalculatorFeline

@CalculatorFeline Kinda забув про цю відповідь. Напевно буде гольф і потім додамо пояснення
dzaima

17

Python 2 , 135 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:])

Спробуйте в Інтернеті!

Введення - це список рядків з stdin


Перевершив ...>. <
Містер Xcoder

Я також скопіював ваш метод введення TIO у свою відповідь, сподіваюся, ви не заперечуєте.
Містер Xcoder

@ Mr.Xcoder Зараз я включив усі тестові випадки. Ви можете скопіювати їх, якщо захочете
вт

О, добре зроблено на індексації - майте на увазі, якщо я позичу його для свого рішення JS?
Кудлатий

11

05AB1E , 83 82 байт

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

Спробуйте в Інтернеті!

-1 завдяки Еміньї .

SOOOOOOO неозорений :(

Пояснення:

.•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

Один невеликий гольф - це те, що якщо ви індексуєте .•Y<εΔ•на початку, вам не потрібно збільшувати індекс.
Емінька

@Emigna Ooh ще не встиг спробувати це ...
Erik the 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
  • Збережено величезний 44 байт, запозичивши трюк індексації у ovs 'Python рішення - якщо ви підтримуєте цю відповідь, будь ласка, також відмініть цей.
  • Збережено 13 байт завдяки Арнольду, який вказував на те, що повинно було бути очевидною можливістю використовувати тернар.

Спробуйте в Інтернеті!


Пояснення

Ого, хлопче, це буде весело - мої пояснення до тривіальних рішень висмоктуються в найкращі часи! Давайте давайте підемо ...

a=>

Анонімна функція, яка приймає масив як аргумент через параметр a.

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

Зменшіть елементи в масиві, пропустивши кожен через функцію; tпараметр є наростаючим підсумком, то cпараметр є поточним рядком , і 0це початкове значення t.

parseInt(c,36)

Перетворити поточний елемент з базового рядка 36 в десяткове ціле число.

%141%83%50%23

Виконайте на ньому кілька модульних операцій.

+`27169735 2  4567 435262`[]

Візьміть символ із рядка в цьому індексі та перетворіть його на число.

v=

Призначте це число змінній v.

+a?

Перевірте, чи aє змінною число. Першим елементом aбуде масив рядків, намагаючись перетворити те, що число повернеться NaN, що є фальсиєю. На кожному наступному проходженні aбуде додатне ціле число, яке є правдою.

a*v+v>>1

Якщо aце число, то ми множимо його на значення v, додаємо значення vта переміщуємо біти результату на 1 біт праворуч, що дає такий самий результат, як ділення на 2 та настил.

:a=v

Якщо aце не число, ми присвоюємо йому значення v, яке також дасть нам 0додавати до нашого загального під час першого проходу.

t+

Нарешті, ми додаємо результат з трирічного вище до нашого загального результату.


Оригінал, 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()))

Ви можете зберегти ще один байт шляхом повторного використання: 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')

Формат введення

У рядковому масиві кожен елемент є рядком з великої літери. Приклад: ["Пн", "Зо", "Ір", "Нета"]

Пояснення

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);

Додає витрати на неенергетичні руни до базової потужності. Зсув використовується замість підлоги (бла) / 2.

eval(/*blah*/;p)

Оцініть останній результат. (Кредит: Step Hen)

Випробування

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 (). Оскільки AS3 забороняє використовувати eval (), я давно не користуюся цим

Редагувати 3: 207> 206 - Дякую Шагі за ідею заміни indexOf () на пошук ()


1
Якщо ви не зателефонуєте gвсередину g, ми дозволяємо відповіді JS видалити g=. Крім того, ви можете зберегти пару байт, переключивши його на eval і видаливши return: Fiddle
Стівен

@StepHen Дякую за ідею eval () та правила JS, оскільки AS3 заборонив eval () я подумав, що більше не можу цим користуватися
Shieru Asakoto

Ну, це все ще працює, і ми визначаємо мову за реалізацією: P
Стівен

1
searchзаощадить вас на байтах indexOf.
Кудлатий

@Shaggy Це спрацювало, дякую за пошукову ідею;)
Shieru Asakoto


3

Python 2 , 320 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
Я начебто відмовився від гольфу, тому кожен, хто має ідеї гольфу , може редагувати в собі .
Містер Xcoder

3

Excel, 339 байт

Вхідні дані, введені A1наскрізь D1. Формула в будь-якій іншій клітині.

=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 байт

Це досить довго, напевно, оптимізується, але це було цікаво робити :)

Формат вводу : розділені пробілом руни в рядку. Якщо є лише два входи (наприклад, "Lo Ful"), мій код завершує його while(k.length<4)k:+=""(тому я можу зберегти 24 байти , змінивши параметри, якщо мені потрібно, щоб він був "ABC D").

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! Це добре? Або я повинен це виправити?
В. Куртуа

Це добре, оскільки "руни гарантовано дійсні" (2 правило).
Арнольд

О правда :) Я це зробив, не думаючи, тому забув це правило. Знову дякую.
В. Куртуа

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-ту букву", з поворотом, який є Rosі Raв 4-му сегменті. Я поставився до цього за допомогою прямої та явної заміни Raна X.


1

Сітківка , 124 123 байт

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

Спробуйте в Інтернеті! Посилання включає тестові випадки. Займає розділені космосом руни. Пояснення: Початкові етапи просто перетворюють кожну руну в цифру, яка потім перетворюється в одинарну. Числа після першого множать на одне більше, ніж перше число, після чого перше число подвоюється. Ціле число остаточного етапу ділить весь результат на 2 і приймає суму.


1

С, 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));
}

Вам потрібно надати чотири аргументи командного рядка - так що для першого тестового випадку потрібно запустити ./a.out Lo Ful "" ""



1

Ідіть, 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 .


0

Haskell, 623 байти

Використання ADTs замість числового вуду.

ПРИМІТКА. Додайте 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

Але це додало би байт до числа

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.