การระบุราคาอัตโนมัติของการเลื่อนใน Nethack


21

โอ้พระเจ้าไม่ !! คุณไม่สามารถทิ้งเราไว้ที่นี่ด้วย Doorknob! มันจะถูกทำลายทุกที่! - 1 วันก่อนโดยGeobits

ก็ไม่ทำให้ผิดหวัง ...

บทนำ

(คุณสามารถข้ามส่วนนี้ได้หากคุณไม่สนใจเกี่ยวกับการแสดงออกและ / หรือหากคุณมีTab Explosion Syndrome )

หนึ่งในกลไกลักษณะของNetHack (และ Rogue และเกมที่คล้ายกันในประเภทเดียวกันโร๊คไลค์) เป็นของระบบการระบุ ที่จุดเริ่มต้นของเกมเฉพาะรายการในสินค้าคงคลังเริ่มต้นของคุณ "ระบุอย่างเป็นทางการ" วัตถุอื่น ๆ ส่วนใหญ่ไม่ทราบแน่ชัด ตัวอย่างเช่น "shield of reflect" จะเริ่มแสดงเป็น "shield silver polishing" ก่อนที่จะถูกระบุ

"โล่เงินขัดเงา" สามารถเป็นเกราะป้องกันการสะท้อนเท่านั้น แต่สิ่งนี้มีผลที่น่าสนใจในอีกสองกรณี

  1. บางรายการแตกต่างกัน แต่มี "ลักษณะที่ปรากฏ" ที่เหมือนกัน ตัวอย่างเช่นหากคุณพบ " หินสีเทา " อาจเป็นหนึ่งในสี่สิ่ง: หินเหล็กไฟ (ไร้ประโยชน์), touchstone (มีประโยชน์), loadstone (ซึ่งจะหนัก encumber คุณเพราะหนักตันและคุณ ไม่สามารถวางได้) หรือโชคดี (มีประโยชน์อย่างยิ่งเกือบจะจำเป็นสำหรับการชนะเกม)

  2. หลายรายการ (เลื่อน, ไม้เท้า, แหวน, spellbooks, เกราะบาง, ฯลฯ ) มีลักษณะแบบสุ่ม สิ่งนี้หมายความว่ามีรายการชุดของความเป็นไปได้ที่เป็นไปได้พูดว่า potions อาจมี; ตัวอย่างเช่น [ potion ทองคำ , potion swirly , potionเป็นฟอง , potion สีม่วงแดงฯลฯ ] ลักษณะเหล่านี้จะได้รับมอบหมายแบบสุ่มให้กับสิ่งที่พวกเขาเป็นจริง ( ยาแห่งการรักษา , ยาพิษอัมพาต , ยาที่มองไม่เห็น , ยาของ polymorph , ฯลฯ )

    ซึ่งหมายความว่าพระเครื่องหกเหลี่ยมอาจช่วยชีวิตคุณได้ในเกมหนึ่ง (พระเครื่องของการประหยัดชีวิต)และสำลักคุณไปสู่ความตายต่อไป (พระเครื่องของบีบรัด)

โดยธรรมชาติแล้วสิ่งนี้ทำให้การระบุไอเท็มเป็นส่วนสำคัญของเกม ไอเท็มสามารถ "ระบุอย่างเป็นทางการ" ซึ่งหมายความว่าพวกมันจะปรากฏอย่างไม่น่าสงสัยว่าเป็นไอเท็มบางอย่าง (เช่นไม้เท้าอัญมณีที่คุณพบจะปรากฏเป็นไม้เท้าของมอนสเตอร์ที่สร้างขึ้น ) สิ่งนี้จะทำผ่านการเลื่อนหรือspellbooksเพื่อระบุเป็นหลัก โดยปกติแล้วสิ่งเหล่านี้จะขาดตลาดซึ่งทำให้เรา ...

บัตรประจำตัวที่ไม่เป็นทางการ ซึ่งหมายความว่าคุณค่อนข้างมั่นใจ (หรือบางอย่าง) ว่ารายการที่ไม่ระบุบางรายการเป็นประเภทบางประเภท (หรืออาจเป็นประเภทเดียวเท่านั้น) แต่คุณยังไม่ได้ระบุอย่างเป็นทางการ ซึ่งสามารถทำได้ผ่านวิธีการหลายวิธี: การทดสอบแกะสลักสำหรับไม้กายสิทธิ์, อ่างทดสอบสำหรับแหวนหรือวิธีที่พบมากที่สุด ...

เลื่อนแผนภูมิรหัสราคา

... การระบุราคา ! อะไรคือสิ่งที่ท้าทายนี้เกี่ยวกับ

โดยสรุปมีร้านค้าตั้งอยู่ทั่ว Dungeons of Doom (ใช่แล้วเจ้าของร้านคิดว่ามันเป็นความคิดที่ดีที่จะสร้างร้านค้าในดันเจี้ยนใต้ดินบางแห่งอย่าถามว่าทำไม) ในร้านค้าเหล่านี้คุณสามารถซื้อและขายสิ่งของต่าง ๆ ที่คุณเจอระหว่างการเดินทาง เมื่อซื้อหรือขายสินค้าเจ้าของร้านจะบอกคุณก่อนว่าเขาจะขายให้คุณเท่าไหร่ / ซื้อจากคุณเพื่อ เนื่องจากบางรายการรับประกันว่าจะมีราคาเฉพาะคุณสามารถใช้สิ่งนี้เพื่อระบุรายการบางประเภทอย่างไม่เป็นทางการ

บางรายการเช่นสกรอลล์แสงเป็นเพียงรายการเดียวที่ต้องเสียค่าใช้จ่ายจำนวนหนึ่งซึ่งช่วยให้คุณสามารถระบุได้อย่างชัดเจน อย่างไรก็ตามรายการส่วนใหญ่แบ่งกลุ่มราคากับรายการอื่น ๆ ของระดับเดียวกันซึ่งจะช่วยให้คุณ จำกัด ความเป็นไปได้ (ซึ่งยังมีประโยชน์) อย่างไรก็ตามราคาซื้อ / ขายของรายการได้รับผลกระทบจากตัวแปรจำนวนมาก (เช่นCharisma stat ของคุณ) ดังนั้นแผนภูมิข้างต้น

คุณบอกได้ไหมว่าฉันชอบ Nethack

อินพุต

ข้อมูลที่ป้อนจะมีให้ในรูปแบบ (วานิลลา, 3.4.3) เกม Nethack ที่กำลังเล่นอยู่:

"For you, most gracious sir; only 177 for this scroll labeled VERR YED HORRE."
--More--

        ------------
        |          .                                        ---------
        |          |                         ----------     |    ^  |
        |          .##       ################.        +#   #.       .#
        |          | #                       |       _|#   #---------#
        |          | ###                   ##.<       |#   ####      #
        |          .#########################----------#      #      #
        ------------   ###     #         ############# #      #      #
           #             #  -----------  #             #      #   ####
         ###             ###|         |###             #      #   #----------
         #                 #.         |#             ### #    #   #|.???????|
        ##                  |         |#             #--------#   #|.??@????|
    ----.----###############.         |#             #|      |#   #-@???????|
    |.......+#              |         |#             #.      |#    ----------
    |.......|               |         .#              |      |#
    |......>|               -----------               |      +#
    ---------                                         --------


Wizard the Evoker         St:12 Dx:14 Co:11 In:16 Wi:12 Ch:10  Chaotic
Dlvl:2  $:0  HP:11(11) Pw:0(8) AC:9  Exp:1 T:11

ซึ่งหมายความว่าจะรับประกันว่าจะมีคุณสมบัติหลายอย่าง:

  • มันจะเสมอเป็น 24 สายยาว

  • แต่ละบรรทัดจะเสมอเป็น 80 อักขระหรือน้อยกว่าความยาว

  • บรรทัดที่สองถึงครั้งสุดท้ายจะประกอบด้วย " โทเค็น " ต่อไปนี้: ชื่อผู้เล่นและชื่อ (ในรูปแบบของ " foo the bar "), รายการแอตทริบิวต์ (คั่นด้วยช่องว่างเดียว) และการจัดตำแหน่งของผู้เล่น ( ถูกกฎหมายเป็นกลางหรือวุ่นวาย) แต่ละโทเค็นจะถูกคั่นด้วยจำนวนช่องว่างตัวแปร 1

  • รายการแอททริบิวต์จะเป็นSt:* Dx:* Co:* In:* Wi:* Ch:*โดยที่*อักขระแทนจำนวนเต็มตั้งแต่ 3 ถึง 25 2 (จุดที่น่าสนใจที่นี่คือสถิติล่าสุดคือ Charisma ซึ่งคุณต้องคำนวณราคา)

  • บรรทัดแรกจะประกอบด้วยข้อความที่เกี่ยวข้องกับร้านค้าเสมอ (โดยเฉพาะข้อความที่แสดงเมื่อคุณซื้อหรือขายสินค้า) นอกจากนี้รายการนี้รับประกันว่าจะเป็นม้วนเดียวไม่ปรากฏชื่อและไม่มีชื่อ สำหรับการซื้อไอเท็มนี่คือ:

    "For you, {TITLE}; only {PRICE} for this scroll labeled {LABEL}."--More--
    

    และสำหรับการขายมันคือ:

    {SHK} offers {PRICE} gold pieces for your scroll labeled {LABEL}.  Sell it? [ynaq] (y)
    

    โดยที่ "ตัวแปร" แสดงอยู่ใน{curly braces}รายการดังต่อไปนี้:

    • {TITLE}เป็นหนึ่งใน " ดี ", " เป็นเกียรติ ", " มีน้ำใจมากที่สุด " หรือ "เป็นที่นิยม " โดยแบ่งเป็น " ผู้หญิง " หรือ " ท่าน "

    • {PRICE} เป็นจำนวนเต็มเสมอ

    • {LABEL}จะเป็นหนึ่งในสิ่งต่อไปนี้ ( แหล่งที่มา ):

      ZELGO MER       JUYED AWK YACC  NR 9             XIXAXA XOXAXA XUXAXA
      PRATYAVAYAH     DAIYEN FOOELS   LEP GEX VEN ZEA  PRIRUTSENIE
      ELBIB YLOH      VERR YED HORRE  VENZAR BORGAVVE  THARR
      YUM YUM         KERNOD WEL      ELAM EBOW        DUAM XNAHT
      ANDOVA BEGARIN  KIRJE           VE FORBRYDERNE   HACKEM MUCHE
      VELOX NEB       FOOBIE BLETCH   TEMOV            GARVEN DEH
      READ ME
      
    • {SHK}จะเป็นหนึ่งในสิ่งต่อไปนี้ ( แหล่งที่มา ):

      Skibbereen      Ballingeary     Inishbofin      Annootok        Abitibi
      Kanturk         Kilgarvan       Kesh            Upernavik       Maganasipi
      Rath Luirc      Cahersiveen     Hebiwerie       Angmagssalik    Akureyri
      Ennistymon      Glenbeigh       Possogroenoe    Aklavik         Kopasker
      Lahinch         Kilmihil        Asidonhopo      Inuvik          Budereyri
      Kinnegad        Kiltamagh       Manlobbi        Tuktoyaktuk     Akranes
      Lugnaquillia    Droichead Atha  Adjama          Chicoutimi      Bordeyri
      Enniscorthy     Inniscrone      Pakka Pakka     Ouiatchouane    Holmavik
      Gweebarra       Clonegal        Kabalebo        Chibougamau     Lucrezia
      Kittamagh       Lisnaskea       Wonotobo        Matagami        Dirk
      Nenagh          Culdaff         Akalapi         Kipawa
      Sneem           Dunfanaghy      Sipaliwini      Kinojevis
      

    ข้อความนี้อาจแบ่งเป็นบรรทัดอื่น (แต่จะไม่ใช้เกิน 2 บรรทัด) 3

  • นอกเหนือจากสองสามบรรทัดแรกการเดิมพันทั้งหมดจะปิดตามลักษณะที่เหลือของหน้าจอ NetHack ใช้ส่วนใหญ่ของชุดตัวอักษรแอสกี สิ่งเดียวที่คุณสามารถคาดเดาได้อย่างปลอดภัยคืออินพุตจะเป็น ASCII ล้วนๆ (อย่างไรก็ตามนี่อาจจะไม่สำคัญเพราะคุณสามารถทิ้งบรรทัดที่ 3-22 ได้)

หากอินพุตถูกนำมาเป็นอาร์กิวเมนต์ของฟังก์ชั่นมันจะได้รับตรงตามที่แสดงในตัวอย่างข้างต้น หากคุณป้อนผ่าน STDIN จะได้รับอินพุต 24 บรรทัดติดต่อกัน (อีกครั้งดังที่แสดงด้านบน) คุณอาจเลือกว่าคุณต้องการให้อินพุทมีการขึ้นบรรทัดใหม่หรือไม่ อินพุตรับประกันว่าไม่มีช่องว่างต่อท้าย

เอาท์พุต

ควรให้ผลลัพธ์เป็นสิ่งที่ฉันควร#nameเลื่อนที่ฉันเพิ่งราคารหัส ระบบการตั้งชื่อที่ฉันใช้ (และที่ฉันเคยเห็นคนอื่นใช้) คือ:

  • หากสกรอลถูกระบุอย่างไม่น่าสงสัยว่าเป็นสครอลบางตัว (ระบุ, แสง, อาวุธเคลิบเคลิ้ม) แสดง#nameว่า นี่เป็นกรณีสำหรับการเลื่อนของราคาพื้นฐานต่อไปนี้(คุณจะเห็นวิธีการคำนวณราคาฐานด้านล่าง): 20 -> ระบุ, 50 -> แสง, 60 -> อาวุธร่ายมนต์

  • มิฉะนั้นใช้ตัวอักษรสามตัวแรกของการปรากฏตัวของสกรอลล์หรือคำแรกถ้ามันน้อยกว่า 3 ตัวอักษร ยกตัวอย่างเช่นZELGO MERกลายเป็นZEL, VE FORBRYDERNEกลายVEเป็นต้น Concatenate กับเรื่องนี้ (เว้นวรรคแล้ว) ราคาฐานของการเลื่อน ตัวอย่างเช่นELB 300.

  • หากราคาฐานเป็นหนึ่งในสองทางที่เป็นไปได้ฉันมักจะพยายามซื้อหรือขายสินค้าจนกว่าฉันจะได้รับราคาที่เสนออย่างไม่น่าสงสัยที่จะวางลงในช่วงราคาหนึ่ง อย่างไรก็ตามคุณไม่สามารถทำเช่นนั้นได้ในความท้าทายนี้ดังนั้นให้แยกราคาฐานสองรายการที่เป็นไปได้ด้วยเครื่องหมายทับ ( /) ตัวอย่างเช่นHAC 60/80.

นี่คือสูตรสำหรับการแปลงราคาฐานของรายการเป็นราคาที่คุณเสนอให้ซื้อ:

  • เริ่มต้นด้วยราคาฐานของรายการ

  • โอกาสที่จะเป็นไปได้ 33% "ค่าธรรมเนียมที่ไม่ปรากฏหลักฐาน" คำนวณโดย price += price / 3

  • โอกาสอีกครั้งของ 33% "มาร์กอัป sucker" (นี่ไม่ใช่โอกาสสุ่มจริง ๆ แต่สำหรับจุดประสงค์ของการท้าทายนี้) คำนวณด้วยวิธีเดียวกัน

  • ตัวแก้ไขความสามารถพิเศษซึ่งใช้ดังต่อไปนี้:

    Ch    3-5     6-7       8-10      11-15  16-17     18        19-25
    Mod   +100%   +50%      +33%      +0%    -25%      -33%      -50%
    Code  p *= 2  p += p/2  p += p/3  ---    p -= p/4  p -= p/3  p /= 2
    

และนี่คือสูตรสำหรับราคาพื้นฐาน -> ราคาขาย:

  • เริ่มต้นด้วยราคาฐานของรายการ

  • หารด้วย 2 หรือ 3 ("ปกติ" หรือ "มาร์กอัป sucker" ตามลำดับอีกครั้งไม่ใช่แบบสุ่ม แต่มันมีไว้สำหรับจุดประสงค์ของการท้าทายนี้)

  • โอกาสที่จะลดลงอีก 25% 4คำนวณจากprice -= price / 4

การหารคือการหารจำนวนเต็มซึ่งหมายถึงผลลัพธ์ในแต่ละขั้นตอนจะถูกปัดเศษลง (ที่มา: วิกิและการขุดซอร์สโค้ดเล็กน้อยการกลับสูตรเหล่านี้เป็นงานของคุณ)

สุดท้ายนี่คือแผนภูมิ ASCII แบบพกพาที่มีประโยชน์ซึ่งแสดงราคาซื้อที่เป็นไปได้ (จัดกลุ่มตามสถิติ Charisma) และขายราคาของสกรอลล์พร้อมราคาฐานที่แน่นอน:

Base  Ch<6          6-7          8-10         11-15        16-17        18           19-25        Sell
20    40/52/68      30/39/51     26/34/45     20/26/34     15/20/26     14/18/23     10/13/17     5/6/8/10
50    100/132/176   75/99/132    66/88/117    50/66/88     38/50/66     34/44/59     25/33/44     12/16/19/25
60    120/160/212   90/120/159   80/106/141   60/80/106    45/60/80     40/54/71     30/40/53     15/20/23/30
80    160/212/282   120/159/211  106/141/188  80/106/141   60/80/106    54/71/94     40/53/70     20/26/30/40
100   200/266/354   150/199/265  133/177/236  100/133/177  75/100/133   67/89/118    50/66/88     25/33/38/50
200   400/532/708   300/399/531  266/354/472  200/266/354  150/200/266  134/178/236  100/133/177  50/66/75/100
300   600/800/1066  450/600/799  400/533/710  300/400/533  225/300/400  200/267/356  150/200/266  75/100/113/150

(นี่เป็นเหมือนแผนภูมิบนวิกิยกเว้นว่าจะแสดงรายการราคาขายที่เป็นไปได้ในขณะที่วิกิพีเดียละเลยแผนภูมิที่จะรวมสองในสี่ราคาขายที่เป็นไปไม่ฉันไม่ได้ด้วยตนเองทำให้แผนภูมิที่มิ. สร้างขึ้นด้วยสคริปต์ทับทิมนี้ .)

กรณีทดสอบ

การป้อนข้อมูล:

"For you, honored sir; only 80 for this scroll labeled LEP GEX VEN ZEA."
--More--                   #                                          #
                      ----------------                              -----
                      |              |              ------------####+   |
      -----           |              -##############+          .#   |   |
      |   .###########|           >  |#           # |          |  ##.   |
      |   |          #------------.---#           ##.          |  # -----
      -+---          ##################             ----.-------###    #
       ####                     ###                     #       #      #
          #                     #                       #     ###      ###
          ###                 ###                       #     #          #
            #                 #                         #   ###     -----|--
       -----.---            ###                     ----+---#       |...@..|
       |       |            #                       |      |#       |???+??|
       |  <    .#          ##                     ##+      |        |+?????|
       |       |#    ------.-------                 |      |        |??]?@?|
       ---------###  |            |                 |      |        --------
            #     #  |            |                 --------
                  ###|            |                       #
                    #+            |
                     --------------

Wizard the Evoker         St:11 Dx:15 Co:9 In:20 Wi:9 Ch:11  Chaotic
Dlvl:7  $:0  HP:11(11) Pw:1(8) AC:9  Exp:1

เอาท์พุท: LEP 60/80


การป้อนข้อมูล:

"For you, most gracious sir; only 80 for this scroll labeled DAIYEN FOOELS."
--More--                                                             #
                ------------                         -----      -------
 -----          |          |                         |   |      |     |
 |!)%|          |          |     ---------------     |   |     #-     |
 |*[@|          |          .#####|   <         |#####.   |   ###|     |
 |?(?|          ---------.--    #+             |#    |   |   #  |     |
 |[!(|                  ##       |             |#    |   +#### #.     .#
 |.@.|         ##################.             +#    ---.-     #|     |#
 ---|-                ###        ---------------#       ##     #-------#
    ##                #                    ######        #     #       #
     #              ###                         #        #     #       #
     ##             #                           #        #     #       #
  ------        #####                           #        #     #       #
  |    |       -.----                           #        #     #       #
  |    .#####  |^   |                        ####        #     #       #
  |    |    #  |    |          ----          #-----------.---- #       #------
  |    |    ###|    |          |  |          #.      >       | #       #|    |
  ------      #.    |          |  |           |              .##       #|    |
               |    |          ----           |              |         #.    |
               ------                         ----------------          ------

Wizard the Evoker         St:11 Dx:14 Co:16 In:15 Wi:10 Ch:9  Chaotic
Dlvl:6  $:0  HP:11(11) Pw:9(9) AC:9  Exp:1

เอาท์พุท: enchant weapon


การป้อนข้อมูล:

Aklavik offers 113 gold pieces for your scroll labeled GARVEN DEH.  Sell it?
[ynaq] (y)

     -----      ------                                 ---------      -------
     |   |      |    |                         #     ##.       |      |.?)%/|
     |   |    ##.    |                       -----   # |       |      |.@!=*|
     |<  |    # |    |            #        ##.   .#####+    >  |#    #-.*?@[|
     |   .##### |    |      ------------   # | { |#    |^      |#    #|.=%)+|
     ---.-      |    |      |          .#### |   |#    ---------##   #-------
       ##       -.----     #.          |     |   |#          # ###   #
       #         ########  #|          .##   |   |#            ##    #
     ###                #  #------------ #   -----#          ####    #
     #                  #######          ##########################  #
     #                    #   #                            ###----.--#
     #                    ### #                            # #|     |#
   --.----       ########################################### #.     |#
   |     |       #----------.-#                               |     |#
   |     |       #|          |#                               -------
   |     |       #|          .#
   |     |########|          |
   -------        ------------
                   #    #
Wizard the Evoker         St:9 Dx:14 Co:11 In:19 Wi:10 Ch:12  Chaotic
Dlvl:4  $:0  HP:11(11) Pw:5(9) AC:9  Exp:1 Satiated

เอาท์พุท: GAR 300


การป้อนข้อมูล:

"For you, good lady; only 67 for this scroll labeled VE FORBRYDERNE."--More--

                                                 -------
                                               ##|     |
  ------------                                 # |     |
  |+[!/!?%[?)|                               ### |     |          --------
  |[)(!/+]?!@|               #               #   |     |        ##+      |
  |.......@..|            --------------   ###   | <   | ##       |      |
  --------+---           #|            |   #     |     |  #       |    > |
          #            ###|            .####     --.----  ###    #-      |
          #            ###.            |           #        #  ###|      |
          #          #### ---.----------           #        ######.      |
          #          ####    ##                    #         ###  --------
          #        ####       #                    #         #
          #        ####       ########################     ###
        ###      ####                            ----+---- #
        #   #    ####                            |       .##
    ----.------####                              |  ^    |
    |         +####                              |    >  |
    |         |                                  | ^     |
    -----------                                  ---------

Wizard the Evoker         St:18 Dx:18 Co:16 In:20 Wi:20 Ch:18  Chaotic
Dlvl:4  $:150 HP:11(11) Pw:5(7) AC:9  Exp:1

เอาท์พุท: VE 100


การป้อนข้อมูล:

Droichead Atha offers 5 gold pieces for your scroll labeled XIXAXA XOXAXA
XUXAXA.  Sell it? [ynaq] (y)
                                                ------------
                   -----                        |          .#
                   |   .### -----------        #.       {  |#
       -----       |   |  # |         |      ###|          |#
       |   .#     #.   |  # |         |      #  ---------+--#
       |   |    ###-|---    |         .##  ###          ##  #
       |   |    #   # #     |         | #  #            #   #
       |   -#####   #       |         | #### ############   #
       |>  | ##     #       ---------+-  ## -.----------    # ----------
       |   .####    ###             ## #####|          |    # |.*??/?)*|
       -----   #      #             #  #    |          |    # |@*)%!)]%|
               ###    ###         ######    |          |    # |.=)!%*!!|
                 #      #         #  #      |          |    ##+@*[%)(%?|
                 #####################      |          |      |.]?*?)%%|
                    -----+---.----##########.          |      |.%)%!!!%|
                    |            +##        ------------      ----------
                    |    <       |                  #
                    |            |
                    --------------

Wizard the Digger          St:11 Dx:9 Co:14 In:6 Wi:6 Ch:9  Lawful
Dlvl:3  $:0  HP:15(15) Pw:0(1) AC:9  Exp:1

เอาท์พุท: identify

(ฉันต้องคอมไพล์ Nethack ด้วยชื่อเจ้าของร้านคนอื่น ๆ ที่ถูกลบเพราะฉันไม่สามารถหาเจ้าของร้านที่มีช่องว่างในชื่อของเขา ... )

กฎระเบียบ


1: นี่ไม่จำเป็นต้องเป็นจริงเสมอในระหว่างเกม Nethack แต่เราถือว่านี่เพื่อความเรียบง่าย

2: อีกครั้งไม่จริงเสมอไป ความแข็งแกร่งอาจเป็น 18/01 ถึง 18 / ** แต่คุณไม่จำเป็นต้องจัดการมัน

3: oversimplifications ขั้นต้นมากขึ้น ตัวอย่างเช่นเป็นไปได้สำหรับเจ้าของร้านที่จะเรียกคุณว่า "ขยะ" หรือ "สิ่งมีชีวิตที่มีชื่อเสียงและศักดิ์สิทธิ์ที่สุด" แต่คุณไม่ต้องจัดการกับสิ่งเหล่านั้น

4: ผู้เล่นอัจฉริยะคนไหนที่เสนอขายสินค้าซ้ำ ๆ จนกว่าจะได้ราคาสูงขึ้น


15
กำแพงศักดิ์สิทธิ์ของข้อความ!
orlp

คำตอบ:


10

Javascript (ES6), 1610 724 601 612 419 405 ไบต์

a=>(b=a.match(/(\d+) (g|f).+d (\w{0,3})[\s\S]+h:(\d+)/m),c=+b[4],d=[20,50,60,80,100,200,300].map(e=>(f=e>>1,g=~~(e/3),[e,b[2]=='g'?[g-(g>>2),g,f-(f>>2),f]:[e,e+g,e+g+~~((e+g)/3)].map(h=>c<6?h*2:c<8?h+h>>1:c<11?h+~~(h/3):c<16?h:c<18?h-(h>>2):c<19?h-~~(h/3):h>>1)])).filter(i=>i[1].includes(+b[1])),j={20:'identify',50:'light',60:'enchant weapon'}[d[0][0]],k=b[3]+' '+d[0][0],d.length==1?j||k:k+'/'+d[1][0])

กำแพงข้อความขนาดใหญ่ตรงตามกำแพงรหัสขนาดใหญ่

Ungolfed

inp => (
    extraction = inp.match(/(\d+) (g|f).+d (\w{0,3})[\s\S]+h:(\d+)/m),

    charisma = +extraction[4],

    allowed = [20, 50, 60, 80, 100, 200, 300].map(base => (
        tmp1 = base >> 1,
        tmp2 = ~~(base / 3),
        [
            base,
            extraction[2] == 'g' ?
                [tmp2 - (tmp2 >> 2), tmp2, tmp1 - (tmp1 >> 2), tmp1]
            :
                [base, base + tmp2, base + tmp2 + ~~((base + tmp2) / 3)].map(val =>
                    charisma < 6 ?
                        val * 2
                    : charisma < 8 ?
                        val + val >> 1
                    : charisma < 11 ?
                        val + ~~(val / 3)
                    : charisma < 16 ?
                        val
                    : charisma < 18 ?
                        val - (val >> 2)
                    : charisma < 19 ?
                        val - ~~(val / 3)
                    : val >> 1
            )
        ]
    )).filter(key => key[1].includes(+extraction[1])),

    name_ = {
        20: 'identify',
        50: 'light',
        60: 'enchant weapon'
    }[allowed[0][0]],

    tmp3 = extraction[3] + ' ' + allowed[0][0],

    allowed.length == 1 ?
        name_ || tmp3
    :
        tmp3 + '/' + allowed[1][0]
)

ตัวอย่าง


1
นั่นคือกองสคริปต์ขนาดใหญ่
เสียชีวิต

1
ว้าวมีคนตอบในที่สุด? ดี: D
Doorknob

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