Wie viel Mana brauche ich?

33

Dungeon Master war eines der ersten Echtzeit-Rollenspiele, das 1987 auf dem Atari ST veröffentlicht wurde. Unter anderem bot es für die damalige Zeit ein ziemlich ausgeklügeltes Zaubersystem, das auf Runen basierte.

Ihre Aufgabe heute ist es, ein Programm oder eine Funktion zu schreiben, die die Anzahl der Manapunkte auswertet, die zum Wirken eines bestimmten Zaubers in Dungeon Master erforderlich sind.

Dungeon Master-Screenshot

Das "Zauber" -System ist das Cyan-Feld oben rechts im obigen Bild.

Zaubersprüche, Runen und Mana

Dungeon Master-Zaubersprüche bestehen aus 2 bis 4 Runen, die genau in dieser Reihenfolge aus den folgenden Kategorien ausgewählt werden:

  1. Leistung (Pflichtfeld)
  2. Elementarer Einfluss (obligatorisch)
  3. Formular (optional)
  4. Klasse / Ausrichtung (optional)

Dies bedeutet, dass gültige Zaubersprüche entweder:

  • Macht + Elementarer Einfluss
  • Kraft + Elementarer Einfluss + Form
  • Kraft + Elementarer Einfluss + Form + Klasse / Ausrichtung

Jede Kategorie enthält 6 Runen und jeder Rune sind Manakosten zugeordnet:

=============================================================================
| 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 |
=============================================================================

Bewertung der Manakosten

Die Manakosten des Zaubers sind die Summe der Manakosten aller Runen:

  • Die Kosten der Power-Rune entsprechen immer den Grundkosten (von 1 bis 6).

  • Für die anderen Runen gilt folgende Formel:

    Kosten = Etage ((Strom + 1) * Grundkosten / 2)

    Wobei Macht die Grundkosten der Macht-Rune sind.

Beispiele

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

Erläuterungen und Regeln

  • Ihre Eingabe besteht aus 2 bis 4 Zeichenfolgen, die die Runen des Zaubers bezeichnen. Sie können sie in jedem vernünftigen Format verwenden, z. B. 4 verschiedene Parameter, ein Array von Zeichenfolgen (z. B. ['Lo', 'Ful']) oder nur eine Zeichenfolge mit einem Trennzeichen Ihrer Wahl (z 'Lo Ful'. B. ). Bitte geben Sie in Ihrer Antwort das ausgewählte Eingabeformat an.
  • Die Runen sind garantiert gültig.
  • Die Reihenfolge der Kategorien muss eingehalten werden. Nicht verwendete Kategorien fehlen möglicherweise oder werden durch einen falschen Wert ersetzt.
  • Sie können die Runen in einem der folgenden Formate akzeptieren: 1. Ein Großbuchstabe, gefolgt von Kleinbuchstaben ( 'Ful') 2. Alle Kleinbuchstaben ( 'ful') 3. Alle Großbuchstaben ( 'FUL'). Sie können jedoch keine verschiedenen Formate mischen.
  • Offensichtlich ist es uns egal, ob der Zauber tatsächlich einen Effekt im Spiel hat (für die neugierigen, nützlichen Zaubersprüche sind hier aufgelistet ).
  • Das ist , also gewinnt der kürzeste Code in Bytes.
  • Und denk dran: Lord Chaos beobachtet dich!

Testfälle

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
Arnauld
quelle
1
Tangential - aber für Leute, die dieses System mögen, ist The Magical Land of Wozz ein japanisches SNES-Spiel (englische Übersetzung verfügbar), das fast dasselbe System implementiert - bei dem jede Buchstabenfolge zum Zauber wird. google.co.jp/webhp?ie=UTF-8#q=magical+land+of+wozz
Coty Johnathan Saxman
Ich habe eine vage Erinnerung daran, wie ich jemanden Dungeon Master spielen sah (ich glaube nicht, dass es auf dem ST war). Sie hatten einen ihrer Kämpfer mit einer magischen Kette ausgestattet, und sie überprüften von Zeit zu Zeit, ob sie aufgeladen war, und gaben dann eine weitere Rune von etwas, von dem ich glaube, dass es ein Licht erzeugender Zauberspruch war, damit der Kämpfer sie wirken konnte Dieser Zauber alle zehn Minuten oder so, und schließlich ein Level in der Zauberei gewonnen.
Neil
@Neil Diese Halskette war wahrscheinlich entweder der Mondstein (+3 Mana) oder der anhängende Wildfang (+1 Zaubererfertigkeit). Alle Artikel sind hier aufgelistet .
Arnauld
Dieses Skript sollte alle möglichen Eingabekombinationen ausgeben
NieDzejkob

Antworten:

6

SOGL V0.12 , 110 78 Bytes

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

Probieren Sie es hier aus!

Könnte wahrscheinlich ein oder zwei Bytes Golf spielen, wenn man alles noch einmal macht

Erläuterung:

θ            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
dzaima
quelle
2
Das macht es noch interessanter
Walfrat
Können Sie eine Erklärung hinzufügen?
CalculatorFeline
@CalculatorFeline Irgendwie hat diese Antwort vergessen. Wird wahrscheinlich Golf & dann eine Erklärung hinzufügen
dzaima
17

Python 2 , 135 119 115 Bytes

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:])

Probieren Sie es online!

Die Eingabe ist eine Liste von Zeichenfolgen aus stdin

ovs
quelle
Outgolfed ...>. <
Mr. Xcoder
Ich habe auch Ihre TIO-Eingabemethode auf meine Antwort kopiert, ich hoffe, es macht Ihnen nichts aus.
Mr. Xcoder
@ Mr.Xcoder Ich habe jetzt alle Testfälle aufgenommen. Sie können sie kopieren , wenn Sie wollen
ovs
Gut gemacht, wenn ich es für meine JS-Lösung ausleihe.
Shaggy
11

05AB1E , 83 82 Bytes

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

Probieren Sie es online!

-1 danke an Emigna .

SOOOOOOO ungolfed :(

Erläuterung:

.•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
Erik der Outgolfer
quelle
Ein kleiner Vorteil ist, dass Sie den Index .•Y<εΔ•nicht erhöhen müssen, wenn Sie zu Beginn in indexieren.
Emigna
@Emigna Ooh hatte noch keine Zeit, das zu versuchen ...
Erik the Outgolfer
11

JavaScript (ES6), 157 156 116 112 100 99 97 Byte

Nimmt Eingaben als ein Array von Zeichenfolgen.

a=>a.map(c=>t+=(v=+`27169735020045670435262`[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),t=0)|t
  • Durch das Ausleihen des Index-Tricks aus der Python-Lösung von ovs konnten 44 Byte eingespart werden. Wenn Sie diese Antwort positiv bewerten, stimmen Sie dieser ebenfalls zu.
  • 13 Bytes gespart dank Arnauld , der darauf hinwies, was eine offensichtliche Gelegenheit gewesen sein sollte, ein Ternär zu verwenden.

Probieren Sie es online!


Erläuterung

Hoo, Junge, das wird Spaß machen - meine Erklärungen zu trivialen Lösungen sind zum Kotzen! Lass es uns versuchen ...

a=>

Eine anonyme Funktion, die das Array als Argument über einen Parameter verwendet a.

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

Reduzieren Sie die Elemente im Array, indem Sie sie durch eine Funktion führen. Der tParameter ist die laufende Summe, der cParameter ist die aktuelle Zeichenfolge und 0der Anfangswert von t.

parseInt(c,36)

Konvertiert das aktuelle Element von einer Basiszeichenfolge 36 in eine Dezimalzahl.

%141%83%50%23

Führen Sie einige Modulo-Operationen aus.

+`27169735 2  4567 435262`[]

Nehmen Sie das Zeichen aus der Zeichenfolge an diesem Index und konvertieren Sie es in eine Zahl.

v=

Weisen Sie diese Nummer der Variablen zu v.

+a?

Überprüfen Sie, ob die Variable aeine Zahl ist. Für das erste Element awird das Array von Zeichenfolgen sein, und der Versuch, diese in eine Zahl umzuwandeln, wird zurückgegeben NaN, was falsch ist. Bei jedem folgenden Durchgang awird eine positive ganze Zahl angegeben, was wahr ist.

a*v+v>>1

Wenn aes sich um eine Zahl handelt, multiplizieren wir sie mit dem Wert von v, addieren den Wert von vund verschieben die Bits des Ergebnisses um 1 Bit nach rechts. Dies ergibt dasselbe Ergebnis wie Division durch 2 und Flooring.

:a=v

Wenn aes sich nicht um eine Zahl handelt, weisen wir ihr den Wert vzu, wodurch wir 0beim ersten Durchgang eine zusätzliche Zahl zu unserer Gesamtsumme hinzufügen können.

t+

Schließlich addieren wir das Ergebnis aus dem obigen Ternär zu unserer laufenden Summe.


Original, 156 Bytes

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()))
Zottelig
quelle
Sie können ein weiteres Byte speichern, indem Sie erneut Folgendes verwenden: a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)(BEARBEITEN: Ein irrelevanter Kommentar zu den in der Eingabe übergebenen Ganzzahlen wurde entfernt. Ich habe meine eigene Herausforderung anscheinend nicht gut verstanden. ^^)
Arnauld,
Ordentlicher Trick, danke, @Arnauld. Ich habe versucht, eine Berechnung zu finden, die mir die Zahl gibt, die wir momentan in weniger Bytes indizieren, aber nicht viel Glück haben.
Shaggy
6

JavaScript, 212 210 207 206 Bytes

Unkomplizierter Suchalgorithmus, die Suchzeichenfolgen tragen nur zur Gesamtzahl der Bytes bei.

Code

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

Eingabeformat

String-Array, jedes Element ist ein String mit Großbuchstaben. Beispiel: ["Mo", "Zo", "Ir", "Neta"]

Erläuterung

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

Dies fragt nach den Grundkosten.

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

Initialisiert 2 Variablen mit dem ersten Element aus dem obigen Array-Ergebnis und entfernt dieses Element. Muss zuerst in Zahl umgewandelt werden, sonst wird es im nächsten Teil als Zeichenkettenverkettung betrachtet.

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

Addiert die Kosten der Nicht-Power-Runen zur Basis-Power. Shifting wird anstelle von Floor (blah) / 2 verwendet.

eval(/*blah*/;p)

Bewerten Sie das letzte Ergebnis. (Gutschrift: Step Hen)

Testfälle

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

Edit 1: 212> 210 - Ein Paar Klammern entfernt

Edit 2: 210> 207 - Danke Step Hen für die Erinnerung an die JS-Regeln und einige Hinweise zur Verwendung der eval () -Funktion. Da AS3 die Verwendung von eval () verbietet, habe ich das schon lange nicht mehr benutzt

Edit 3: 207> 206 - Danke Shaggy für die Idee, indexOf () durch search () zu ersetzen.

Shieru Asakoto
quelle
1
Sofern Sie nicht ginnerhalb von anrufen g, erlauben wir JS-Antworten, die zu entfernen g=. Sie können auch ein paar Bytes sparen, indem Sie es auf eval umschalten und return: Fiddle
Stephen
@StepHen Danke für die eval () Idee und die JS-Regeln, seit AS3 die eval () verboten hat, dachte ich, ich kann das nicht mehr benutzen
Shieru Asakoto
Nun, es funktioniert immer noch und wir definieren die Sprache durch die Implementierung: P
Stephen
1
searchSparen Sie sich ein paar Bytes indexOf.
Shaggy
@ Shaggy Es hat funktioniert, danke für die Suche Idee;)
Shieru Asakoto
3

Haskell , 159 156 148 133 130 127 Bytes

k(p:y)=sum$floor<$>c p:map(\x->c x*(c p+1)/2)y
c s=read["3764529516342767"!!(foldl(\c n->c*94+fromEnum n-9)0s%7086%17)]
(%)=mod

Probieren Sie es online!

Bartavelle
quelle
3

Python 2 , 320 318 314 311 307 Bytes

Eingabeformat - Liste der Zeichenfolgen. Volles Programm:

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)

Probieren Sie es online!

Mr. Xcoder
quelle
1
Ich habe das Golfen irgendwie aufgegeben, also kann jeder, der Golfideen hat, diese gerne selbst bearbeiten .
Mr. Xcoder
3

Excel, 339 Bytes

Eingänge eingegeben A1durch D1. Formel in einer anderen Zelle.

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

Alternativ können Sie auch als CSV importieren:

Excel & CSV, 228 Bytes

,,,
=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)

Eingabe in der ersten Zeile SPACEfür Nullen. Ergebnis wird in A3 angezeigt.

Wernisch
quelle
2

SCALA, 1106 Zeichen, 1106 Byte

Das ist ziemlich lang, wahrscheinlich optimierbar, aber es hat Spaß gemacht :)

Eingabeformat : durch Leerzeichen getrennte Runen in einer Zeichenfolge. Wenn es nur 2 Eingaben gibt (wie "Lo Ful"), vervollständigt mein Code es mit while(k.length<4)k:+=""(so kann ich durch Ändern der Parameter 24 Bytes sparen , wenn ich es als "ABC D" fordere).

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}}}}

Vielen Dank für diese großartige Herausforderung. Probieren Sie es online!

V. Courtois
quelle
@Arnauld Ich habe gerade etwas an meinem Code bemerkt: Er überprüft nicht wirklich, ob das Ding existiert! Ich meine, wenn ich "Lo Whoo Gor" eingebe, gibt es 5 aus! Ist es okay? Oder soll ich das beheben?
V. Courtois
Das ist in Ordnung, weil die Runen garantiert gültig sind (2. Regel).
Arnauld
Oh wahr :) Ich habe es ohne nachzudenken gemacht, also habe ich diese Regel vergessen. Danke noch einmal.
V. Courtois
2

Shakespeare-Programmiersprache , 4420 Bytes

,.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]

Nimmt die Eingabe als Großbuchstaben.

Erklärung folgt in Kürze ... Im Moment ist Fun fact: Microsoft ein negatives Substantiv in SPL. Alle anderen akzeptierten Wörter erschienen in den Werken von Shakespeare.

Probieren Sie es online!

NieDzejkob
quelle
1

Java (OpenJDK 8) , 252 Byte

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

Probieren Sie es online!

Die Runen werden als a eingegeben String[] (Array von String) in der ersten Form (der erste Buchstabe ist ein Großbuchstabe, der Rest ist ein Kleinbuchstabe).

Es ist die Standardmethode "Finde den n-ten Buchstaben", mit der Wendung, dass beide Rosund Raim 4. Segment existieren. Ich behandeln , dass mit einer Inline - und explizitem Austausch von Razu X.

Olivier Grégoire
quelle
1

Retina , 124 123 Bytes

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

Probieren Sie es online! Link enthält Testfälle. Nimmt durch Leerzeichen getrennte Runen. Erklärung: Die Anfangsphasen wandeln einfach jede Rune in eine Ziffer um, die dann in eine unäre Zahl umgewandelt wird. Die Zahlen nach der ersten werden mit eins mehr multipliziert als die erste Zahl, woraufhin die erste Zahl verdoppelt wird. Die Ganzzahl der letzten Stufe dividiert das gesamte Ergebnis durch 2 und berechnet die Summe.

Neil
quelle
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));}

Mehr ungolfed:

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

Sie müssen vier Befehlszeilenargumente angeben - für den ersten Testfall müssen Sie also ausführen ./a.out Lo Ful "" ""

Jerry Jeremiah
quelle
255 Bytes
Ceilingcat
1

Go, 205 Bytes

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}

Es ist eine aufrufbare Funktion, die Runen als ein Stück Zeichenfolge annimmt, z []string{"Um", "Ful"}.

Probieren Sie es auf dem Go Playground aus .

icza
quelle
0

Haskell, 623 Bytes

Verwenden von ADTs anstelle von numerischem Voodoo.

HINWEIS: Addieren Sie 36 für {-# LANGUAGE GADTs,ViewPatterns #-}

  • Das Ergebnis wird unter der Annahme berechnet, dass es mit kompiliert / ausgeführt wird -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

Eingabe: Ein einzelner Zauberspruch als normale Zeichenfolge, z

Lo Ful

Um Ful

Multilining kann durch Ersetzen der letzten Zeile durch erfolgen

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

Dies würde jedoch die Anzahl der Bytes erhöhen

Archaephyrryx
quelle