ฉันต้องการมานามากแค่ไหน?


33

Dungeon Masterเป็นเกมเล่นตามบทบาทแบบเรียลไทม์เกมแรกที่เปิดตัวครั้งแรกในปี 1987 ใน Atari ST ในบรรดาสิ่งที่น่าตื่นเต้นอื่น ๆ ในเวลานั้นมันมีระบบคาถาที่ค่อนข้างซับซ้อนบนพื้นฐานของรูน

งานของคุณในวันนี้คือการเขียนโปรแกรมหรือฟังก์ชั่นที่ประเมินจำนวนคะแนนมานาที่ต้องใช้ในการร่ายคาถาที่กำหนดให้ใน Dungeon Master

สกรีนช็อต 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 rune เท่ากับต้นทุนพื้นฐานเสมอ (จาก 1 ถึง 6)

  • สำหรับอักษรรูนอื่น ๆ จะใช้สูตรต่อไปนี้:

    cost = 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']) หรือเพียงหนึ่งสตริงที่มีตัวคั่นอักขระเดียวที่คุณเลือก (เช่น'Lo Ful') โปรดระบุรูปแบบการป้อนข้อมูลที่เลือกในคำตอบของคุณ
  • อักษรรูนรับประกันว่าถูกต้อง
  • ต้องเคารพคำสั่งของหมวดหมู่ หมวดหมู่ที่ไม่ได้ใช้อาจหายไปหรือถูกแทนที่ด้วยค่าที่ผิดพลาดบางอย่าง
  • คุณสามารถยอมรับอักษรรูนในรูปแบบใด ๆ เหล่านี้: 1. ตัวพิมพ์ใหญ่ตามด้วยตัวพิมพ์เล็ก ( 'Ful') 2. ตัวพิมพ์เล็กทั้งหมด ( 'ful') 3. ตัวพิมพ์ใหญ่ทั้งหมด ( 'FUL') แต่คุณไม่สามารถผสมรูปแบบต่าง ๆ ได้
  • เห็นได้ชัดว่าเราไม่สนใจที่จะรู้ว่าคาถานั้นมีผลกระทบในเกมหรือไม่ (สำหรับคาถาที่มีประโยชน์และมีการระบุไว้ที่นี่ )
  • นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
  • และจำไว้ว่าLord Chaosกำลังเฝ้าดูคุณอยู่!

กรณีทดสอบ

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
Tangential - แต่สำหรับคนที่ชอบระบบนี้ 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

@ Neil สร้อยคอนี้อาจเป็นได้ทั้ง Moonstone (+3 Mana) หรือ Pendant Feral (ทักษะตัวช่วยสร้าง +1) รายการทั้งหมดที่มีการระบุไว้ที่นี่
Arnauld

สคริปต์นี้ควรแสดงเอาต์พุตชุดค่าผสมที่เป็นไปได้ทั้งหมด
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 โปรดลืมเกี่ยวกับคำตอบนี้ อาจจะเล่นกอล์ฟแล้วเพิ่มคำอธิบาย
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


แซงหน้า ... >. <
Mr. Xcoder

ฉันได้คัดลอกวิธีการป้อนข้อมูล TIO ของคุณไปยังคำตอบแล้วหวังว่าคุณจะไม่สนใจ
นาย Xcoder

@ Mr.Xcoder ฉันได้รวมกรณีทดสอบทั้งหมดแล้ว คุณสามารถคัดลอกพวกเขาหากคุณต้องการ
OVS

Oo ทำได้ดีมากในการจัดทำดัชนี - ใจถ้าฉันยืมสำหรับโซลูชัน JS ของฉัน
Shaggy

11

05AB1E , 83 82 ไบต์

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

ลองออนไลน์!

-1 ขอบคุณที่Emigna

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

@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 ไบต์ด้วยการยืมเคล็ดลับการจัดทำดัชนีจากโซลูชัน Python ของ Ovs - หากคุณกำลังตอบคำถามนี้อยู่
  • บันทึกแล้ว 13 ไบต์ขอบคุณArnauld ที่ชี้ให้เห็นว่าอะไรควรเป็นโอกาสที่ชัดเจนในการใช้แบบไตรภาค

ลองออนไลน์!


คำอธิบาย

ฮูเด็กนี่จะสนุก - คำอธิบายของฉันเกี่ยวกับการแก้ปัญหาเล็กน้อยดูดเวลาดีที่สุด! ไปกันเถอะ ...

a=>

aฟังก์ชั่นที่ไม่ระบุชื่อการอาร์เรย์เป็นอาร์กิวเมนต์ผ่านพารามิเตอร์

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

ลดองค์ประกอบในอาร์เรย์โดยส่งผ่านแต่ละฟังก์ชัน tพารามิเตอร์เป็นรวมการทำงานของcพารามิเตอร์เป็นสตริงในปัจจุบันและเป็นค่าเริ่มต้นของ0t

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+

ในที่สุดเราเพิ่มผลลัพธ์จาก ternary ด้านบนไปยังผลรวมการวิ่งของเรา


ดั้งเดิม 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=>a.reduce((t,c)=>t+(v=+'27169735020045670435262'[parseInt(c,36)%141%83%50%23],+a?a*v+v>>1:a=v),0)(แก้ไข: ลบความคิดเห็นที่ไม่เกี่ยวข้องเกี่ยวกับจำนวนเต็มที่ส่งผ่านไปยังอินพุท - ดูเหมือนว่าฉันไม่เข้าใจความท้าทายของตัวเองดีมาก ^^)
Arnauld

เคล็ดลับเรียบร้อยขอบคุณ @Annauld กำลังพยายามหาการคำนวณที่จะให้ตัวเลขที่เรากำลังจัดทำดัชนีในไบต์น้อยลงในขณะนี้ แต่ไม่มีโชคมาก
Shaggy

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

รูปแบบอินพุต

อาเรย์สตริงแต่ละรายการเป็นสตริงตัวอักษรตัวใหญ่ตัวแรก ตัวอย่าง: ["จันทร์", "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);

เพิ่มค่าใช้จ่ายของอักษรรูนที่ไม่ใช่พลังงานให้กับพลังงานพื้นฐาน ใช้การเลื่อนเป็นแบบพื้น (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 - Hen Step Stepขอบคุณสำหรับการเตือนกฎ JS และคำแนะนำในการใช้ฟังก์ชัน eval () เนื่องจาก AS3 ห้ามการใช้ eval () ฉันไม่ได้ใช้มันมาเป็นเวลานาน

แก้ไข 3: 207> 206 - ขอบคุณShaggyสำหรับความคิดที่แทนที่ indexOf () ด้วยการค้นหา ()


1
ถ้าคุณโทรgภายในของgเราช่วยให้คำตอบ JS g=เพื่อลบ นอกจากนี้คุณสามารถบันทึกสองสามไบต์โดยเปลี่ยนเป็น eval และลบreturn: Fiddle
Stephen

@ StepHen ขอบคุณสำหรับความคิด eval () และกฎ JS เนื่องจาก AS3 ห้าม eval () ฉันคิดว่าฉันไม่สามารถใช้สิ่งนั้นได้อีกต่อไป
Shieru Asakoto

มันยังใช้งานได้และเรากำหนดภาษาโดยการนำไปใช้: P
Stephen

1
searchindexOfจะช่วยให้คุณประหยัดมากกว่าไบต์
Shaggy

@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สำหรับค่า null ผลลัพธ์แสดงใน A3


2

SCALA, 1106 ตัวอักษร, 1106 ไบต์

นี่ค่อนข้างนานอาจจะปรับให้เหมาะสม แต่มันสนุกที่จะทำ :)

รูปแบบอินพุต : รูนที่คั่นด้วยช่องว่างในสตริง หากมีเพียง 2 อินพุต (เช่น "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! ไม่เป็นไร หรือฉันควรแก้ไขปัญหานี้?
V. Courtois

ไม่เป็นไรเพราะ"รูนถูกรับประกันว่าถูกต้อง" (กฎข้อที่ 2)
Arnauld

โอ้จริง :) ฉันทำโดยไม่ได้คิดดังนั้นฉันลืมกฎนี้ ขอบคุณอีกครั้ง.
V. Courtois

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-th" โดยมีการบิดที่ทั้งสองRosและRaอยู่ในส่วนที่ 4 ฉันได้รับการรักษาที่มีอินไลน์และการเปลี่ยนที่ชัดเจนในการที่จะRaX


1

Retina , 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

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

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

คุณต้องระบุอาร์กิวเมนต์บรรทัดคำสั่งสี่ข้อ - ดังนั้นสำหรับกรณีทดสอบครั้งแรกที่คุณต้องรัน ./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}

มันเป็นฟังก์ชั่น callable []string{"Um", "Ful"}ใช้อักษรรูนเป็นชิ้นของสตริงเช่น

ลองใช้ในสนามเด็กเล่นไป


0

Haskell, 623 ไบต์

ใช้ ADT แทน voodoo ที่เป็นตัวเลข

หมายเหตุ: เพิ่ม 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

Multilining สามารถทำได้โดยการแทนที่บรรทัดสุดท้ายด้วย

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

แต่นี่จะเพิ่มไบต์ไปยังการนับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.