Ne kadar Mana'ya ihtiyacım var?


33

Dungeon Master , 1987 yılında Atari ST'de yayınlanan ilk gerçek zamanlı rol yapma oyunlarından biriydi. O zaman için diğer heyecan verici şeyler arasında, rune dayalı oldukça sofistike bir büyü sistemi sundu.

Bugün sizin göreviniz, Zindan Master'da belirli bir büyüyü yapmak için gereken Mana puanlarının sayısını değerlendiren bir program veya işlev yazmaktır.

Dungeon Master ekran görüntüsü

'Yazım denetimi' sistemi, yukarıdaki resimde sağ üst cam göbeği kutusudur.

Büyüler, runeler ve Mana

Dungeon Master büyüleri, aşağıdaki kategoriler arasında bu kesin sıraya göre seçilmiş 2 ila 4 rundan oluşur:

  1. Güç (zorunlu)
  2. Elemental Etki (zorunlu)
  3. Form (isteğe bağlı)
  4. Sınıf / Hizalama (isteğe bağlı)

Geçerli büyülerin ya:

  • Güç + Elementel Etki
  • Güç + Elementel Etki + Form
  • Güç + Elementel Etki + Form + Sınıf / Hizalama

Her kategori 6 run içermektedir ve her runenin bir Mana bankası bedeli vardır:

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

Mana maliyetini değerlendirme

Büyünün Mana bedeli, tüm runelerin Mana bedelinin toplamıdır:

  • Güç runenin maliyeti her zaman temel maliyetine eşittir (1'den 6'ya).

  • Diğer runeler için, aşağıdaki formül geçerlidir:

    maliyet = kat ((güç + 1) * üs_cost / 2)

    nerede güç Güç rune taban maliyetidir.

Örnekler

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

Açıklamalar ve kurallar

  • Girişiniz, büyünün runelarını belirten 2 ila 4 karakterden oluşacak. Bunları 4 farklı parametre, bir dizi dizi (örn. ['Lo', 'Ful']) Veya seçtiğiniz tek karakterli bir ayırıcıyla (örn. ) Yalnızca bir dizi gibi makul bir formatta alabilirsiniz 'Lo Ful'. Lütfen cevabınıza seçilen giriş biçimini belirtiniz.
  • Runlerin geçerli olduğu garanti edilir.
  • Kategorilerin sırasına saygı gösterilmelidir. Kullanılmayan kategoriler eksik olabilir veya bazı sahte değerler ile değiştirilmiş olabilir.
  • Runes'i bu formatlardan herhangi birinde kabul edebilirsiniz: 1. Büyük harf ve ardından küçük harf ( 'Ful') 2. Tüm küçük harf ( 'ful') 3. Tüm büyük harf ( 'FUL'). Ama olamaz farklı biçimleri karıştırın.
  • Oldukça açık, büyünün oyunda aslında bir etkisi olup olmadığını bilmek umrumda değil (meraklı, yararlı büyü burada listelenir .)
  • Bu , yani bayt cinsinden en kısa kod kazanır.
  • Ve unutmayın: Lord Chaos sizi izliyor!

Test durumları

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
Teğetsel - ancak bu sistemi sevenler için, Wozz'un Büyülü Ülkesi, neredeyse aynı sistemi uygulayan Japonca bir SNES oyunudur (İngilizce çeviri mevcuttur). google.co.jp/webhp?ie=UTF-8#q=magical+land+of+wozz
Coty Johnathan Saxman

Birisinin Dungeon Master'ı oynarken (ST'de olduğunu sanmıyorum) belli belirsiz bir hafızam var. Savaşçılarından birini sihirli bir kolyeyle donatmışlardı ve çoğu zaman bunun şarj edilip edilmediğini kontrol ederlerdi ve eğer öyleyse, savaşçının döküm yapabilmesi için bir tür hafif üretici büyü olduğunu düşündüğümden başka bir rune atarlardı. Bu, her 10 dakikada bir büyü ve sonunda sihirbazlıkta bir seviye kazandı.
Neil

@ Neil Bu kolye muhtemelen Moonstone (+3 Mana) veya Pendant Feral (+1 Wizard Skill) idi. Tüm öğeler burada listelenmiştir .
Arnauld,

bu betiğin mümkün olan tüm giriş kombinasyonlarını göstermesi gerekir
NieDzejkob

Yanıtlar:


6

SOGL V0.12 , 110 78 bayt

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

Burada dene!

Muhtemelen her şeyi yeniden yapmaktan bir veya iki bayt golf alabilir

Açıklama:

θ            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
işte daha da ilginç kılan şey bu
Walfrat

Bir açıklama ekleyebilir misiniz?
CalculatorFeline

@CalculatorFelineBu cevabı biraz unuttum. Muhtemelen golf olacak ve daha sonra bir açıklama ekleyin
dzaima

17

Python 2 , 135 119 115 bayt

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

Çevrimiçi deneyin!

Giriş, stdin dizelerinin listesidir


Outgolfed ...>. <
Bay

TIO giriş yönteminizi de cevabımı da kopyaladım, umarım sakıncası yok.
Bay Xcoder

@ Mr.Xcoder Artık tüm test durumlarını dahil ettim. İstersen kopyalayabilirsiniz
ovs

Oo, güzelce indeksleme yapılır - JS çözümüm için ödünç alabilir miyim?
Shaggy

11

05AB1E , 83 82 bayt

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

Çevrimiçi deneyin!

-1 Emigna sayesinde .

SOOOOOOO ungolfed :(

Açıklama:

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

Küçük bir golf .•Y<εΔ•, başlangıçta indeks yaparsanız endeksi arttırmanıza gerek kalmayacağı anlamına gelir.
Emigna

@Emigna Ooh'un bunu denemek için zamanı yoktu ...
Outgolfer Erik

11

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

Dizeleri bir dizi olarak girdi alır.

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'nin Python çözümünden endeksleme hilesini ödünç alarak devasa bir 44 bayt kurtardı - bu cevabı kaldırıyorsanız, lütfen bunu da reddedin.
  • Arnauld sayesinde 13 bayt kurtardı , bir üçlü kullanmak için ne kadar açık bir fırsat olması gerektiğine işaret etti.

Çevrimiçi Deneyin!


açıklama

Hoo, oğlum, bu eğlenceli olacak - önemsiz çözümlere yaptığım açıklamalar en iyi ihtimalle berbat! Hadi gidelim ...

a=>

Diziyi parametre ile argüman olarak alan isimsiz bir işlev a.

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

Dizideki elemanları, her birini bir işlevden geçirerek azaltın; tParametre, çalışan toplam olup cparametre, mevcut dize ve 0başlangıç değeri t.

parseInt(c,36)

Geçerli elemanı bir taban 36 dizgisinden ondalık bir tam sayıya dönüştürün.

%141%83%50%23

Üzerinde birkaç modulo işlemi gerçekleştirin.

+`27169735 2  4567 435262`[]

Karakteri o dizindeki dizgeden al ve sayıya dönüştür.

v=

Bu numarayı değişkene atayın v.

+a?

Değişkenin abir sayı olup olmadığını kontrol edin . İlk öğe aiçin dizgelerin dizisi olacak, onu sayıya dönüştürmeye çalışarak NaNfalsey döndürür . Takip eden her geçişte, gerçek aolan pozitif bir tamsayı olacaktır.

a*v+v>>1

Eğer abir sayı ise, değeri ile çarpın, değerini vekleyin vve sonucun bitlerini 1 bit sağa kaydırın , bu sonucu 2'ye bölmek ve döşemeyle aynı sonucu verir.

:a=v

Eğer abir sayı değilse, biz vona değerini atarız , bu da bize 0ilk seferde toplamımıza bir ekleme yapacaktır .

t+

Son olarak, yukarıdaki üçlünün sonucunu koşu toplamımıza ekledik.


Orijinal, 156 bayt

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ğıdakileri tekrar kullanarak bir bayttan tasarruf edebilirsiniz: a=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)(EDIT: Girdide geçen tam sayılarla ilgili alakasız bir yorum kaldırıldı - sanırım kendi sorunumu çok iyi anlamadım gibi görünüyor ^^)
Arnauld

Düzgün bir numara, teşekkürler, @Arnauld. Bana şu anda daha az byte olarak indekslediğimiz ama çok fazla şansı olmayan bir sayı verecek bir hesaplama yapmaya çalışıyorum.
Shaggy

6

JavaScript, 212 210 207 206 bayt

Düz arama algoritması, arama dizeleri sadece toplam baytlara katkıda bulunur.

kod

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

Giriş biçimi

Dize dizisi, her öğe ilk harf büyük harfli bir dizedir. Örnek: ["Mon", "Zo", "Ir", "Neta"]

açıklama

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

Bu temel maliyetler için sorgular.

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

Yukarıdaki dizi sonucundan ilk madde ile 2 değişken başlatır ve o maddeyi kaldırır. Öncelikle numaraya atılması gerekir, aksi takdirde bir sonraki bölümde dize bitiştirme olarak değerlendirilir.

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

Güç dışı runelerin maliyetlerini temel güce ekler. Yer değiştirme (filan) / 2 yerine kaydırma yapılır.

eval(/*blah*/;p)

Son sonucu değerlendirin. (Kredi: Adım Tavuk)

Test Kılıfları

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

Düzenleme 1: 212> 210 - Bir çift tel kaldırıldı

Düzenleme 2: 210> 207 - JS kuralları hakkında hatırlatıcı ve eval () işlevinin kullanımıyla ilgili ipucu için Teşekkürler Adım Hen . AS3, eval () kullanımını yasakladığından beri, uzun zamandır kullanmadım.

Düzenleme 3: 207> 206 - indexOf () 'u search () ile değiştirdiğin için teşekkürler Shaggy


1
gİçini aramadığınız sürece g, JS cevaplarının kaldırılmasına izin veriyoruz g=. Ayrıca, bir değerlendirmeyi değiştirip kaldırarak birkaç bayttan tasarruf edebilirsiniz return: Fiddle
Stephen

@StepHen eval () fikri ve JS kuralları için teşekkürler, AS3 değerlendirmeyi yasakladığından () Artık kullanamayacağımı düşündüm
Shieru Asakoto

Evet, hala çalışıyor ve dili uygulama tarafından tanımladık: P
Stephen

1
searchsize bir bayt kazandıracak indexOf.
Shaggy

@Shaggy İşe yaradı, arama fikri için teşekkürler;)
Shieru Asakoto


3

Python 2 , 320 318 314 311 307 bayt

Giriş Biçimi - Dizelerin Listesi. Tam program:

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)

Çevrimiçi deneyin!


1
Bunu golf oynamaktan vazgeçtim, böylece golf fikirleri olan herkes kendi içinde düzenleme yapabilir .
Bay Xcoder

3

Excel, 339 bayt

Girişler A1içinden girildi D1. Başka bir hücrede formül.

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

Alternatif olarak, CSV olarak içe aktarma:

Excel ve CSV, 228 bayt

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

İlk satırda giriş, SPACEboş değerler için girildi . Sonuç A3'te görüntülendi.


2

SCALA, 1106 karakter, 1106 bayt

Bu oldukça uzun, muhtemelen optimize edilebilir, ancak yapması eğlenceliydi :)

Giriş formatı : Bir dizede boşlukla ayrılmış runes. Sadece 2 giriş varsa ("Lo Ful" gibi) kodum tamamlar while(k.length<4)k:+=""( "ABC D" olmasını istiyorsam parametreleri değiştirerek 24 bayt tasarruf edebilirim ).

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

Bu muhteşem meydan okuma için teşekkürler. Çevrimiçi deneyin!


@ Kodumla ilgili bir şey fark ettim mi: gerçekten bir şey olup olmadığını kontrol etmez! Demek istediğim, eğer "Lo Whoo Gor" yazarsanız 5 çıkar! Tamam mı? Yoksa bunu düzeltmeli miyim?
V. Courtois,

Bu iyi, çünkü "runların geçerli olduğu garanti edilir" (2. kural).
Arnauld,

Ah doğru :) Düşünmeden yaptım bu yüzden bu kuralı unuttum. Tekrar teşekkürler.
V. Courtois,

2

Shakespeare Programlama Dili , 4420 bayt

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

Girişi büyük harfli bir dize olarak alır.

Açıklama çok yakında ... Şimdilik, Eğlenceli gerçek: Microsoft SPL'de olumsuz bir isim. Diğer tüm kabul edilen kelimeler Shakespeare'in eserlerinde yer aldı.

Çevrimiçi deneyin!


1

Java (OpenJDK 8) , 252 bayt

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

Çevrimiçi deneyin!

Runes , ilk harf biçiminde (ilk harf büyük harf, dinlenme küçük harf) olarak String[](dizi String) girilir .

Hem o twist, standart "n-inci harfi bulmak" yöntemidir Rosve Ra4 segmentte var. Bir satır içi ve açık değiştirilmesi ile bu tedavi Raiçin X.


1

Retina , 124 123 bayt

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

Çevrimiçi deneyin! Link, test durumlarını içerir. Boşluklu boşlukları alır. Açıklama: İlk aşamalar basitçe her runeyi bir rakama çevirir, bu daha sonra birliğe dönüştürülür. İlk sayıdan sonraki sayılar ilk sayıdan bir ile çarpılır, ardından ilk sayı iki katına çıkar. Son aşama tamsayı tüm sonucu 2'ye böler ve toplamı alır.


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

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

Dört komut satırı argümanı sağlamanız gerekir - yani ilk test durumu için çalıştırmanız gerekir ./a.out Lo Ful "" ""



1

Git, 205 bayt

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}

Bu çağrılabilir bir fonksiyondur, runeleri bir dilim ipi gibi alır, örn. []string{"Um", "Ful"} .

Go Bahçesi üzerinde deneyin .


0

Haskell, 623 bayt

Sayısal vudu yerine ADT kullanımı.

Not: için 36 ekleyin. {-# LANGUAGE GADTs,ViewPatterns #-}

  • Puan, derlendiği / çalıştırıldığı varsayılarak hesaplanır. -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

Giriş: normal bir dize gibi tek bir büyü

Lo Ful

Um Ful

Son satır ile değiştirilerek çok satırlı işlem yapılabilir.

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

Ancak bu sayıya bayt ekler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.