好吧,不能令人失望...
介绍
(如果您不关心博览会和/或患有Tab爆炸综合症,则可以跳过本节)
Nethack(和Rogue以及同一个roguelike类型的类似游戏)的特征机制之一就是其识别系统。在游戏开始时,只会“正式识别”起始库存中的项目。绝大多数其他物体始于未知。例如,在被识别之前,“反射盾”将最初显示为“抛光银盾”。
“抛光的银盾”只能是反射的盾,但这在另外两种情况下会产生有趣的结果。
某些项目互不相同,但是具有相同的“外观”。例如,如果您找到“ 灰色石头 ”,则可能是以下四件事之一:火石(无用),试金石(可能有用),负载石(会重担,因为它重达一吨,而您不能丢掉它)或运气石(极其有用,这对于赢得比赛几乎是必需的)。
许多物品(卷轴,魔杖,戒指,咒语书,一些装甲等)具有随机外观。这意味着存在一系列可能出现的外观,例如,药水可能具有的列表;例如,[ 金色药水,涡旋药水,泡沫腾腾的药水,紫红色药水等]。这些外观,然后随机分配到他们其实都是(治疗药水,瘫痪的药水,看到隐形药水,多晶型的药水等)。
这意味着六角形护身符可以在一场游戏中拯救您的生命(挽救生命的护身符),而在下一场游戏中将您窒息杀死(扼杀护身符)。
自然地,这使得识别物品成为游戏的关键部分。物品可以被“正式识别”,这意味着它们将明确地显示为一定物品(例如,您发现的所有镶有珠宝的魔杖都将显示为创造怪物的魔杖);这主要是通过标识卷或咒语书来完成的。通常情况下,这些都供不应求,这使我们...
非正式鉴定。这意味着您非常确定(或确定)某个未识别的项目属于某种类型(或只能是几种类型之一),但尚未“正式”识别它。这可以通过几种方法完成:对棒进行雕刻测试,对戒指进行下沉测试,或者最常用的方法...
... 价格识别!这个挑战是关于什么的。
简而言之,在《毁灭的地下城》中遍布商店(是的,店主们认为在地下地下城中建立商店是个好主意;不要问为什么)。在这些商店里,您可以买卖旅行中遇到的各种物品。在购买或出售商品时,店主会首先告诉您他将多少商品出售给您/从您那里购买。由于某些商品保证有特定的价格,因此您可以使用它来非正式地标识某种商品。
某些物品,例如光轴滚动条,是唯一花费一定金额的物品,使您可以明确地标识它们。但是,大多数商品与其他同类商品共享一个价格组,这只能让您缩小可能性范围(这仍然很有用)。但是,一件商品的买/卖价格受许多变量(例如您的魅力统计)的影响。因此,上面的图表。
你能告诉我我喜欢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字符集。您唯一可以放心的假设是,输入将完全是ASCII码(但是这可能无关紧要,因为您仍然可以丢弃3-22行)。
如果将输入作为函数参数,则其输入将完全如上例所示(换行符分隔)。如果您通过STDIN输入,它将作为连续的24行输入给出(同样,如上所示)。您可以选择是否要让输入的行尾带有换行符。确保输入没有尾随空格。
输出量
输出应该作为#name
我刚刚标价的滚动条的内容。我使用的命名系统(我已经看到其他人使用过)是:
如果将卷轴明确地标识为某个卷轴(标识,轻型,附魔武器),则为该卷轴
#name
。以下基本价格的滚动条就是这种情况(您将在下面看到如何计算基本价格):20->确定,50->轻,60->附魔武器。否则,请使用滚动条外观的前三个字母,如果少于3个字符,则使用第一个单词。例如,
ZELGO MER
变为ZEL
,VE FORBRYDERNE
变为VE
等等。与此并置(一个空格,然后是)滚动的基本价格。例如,ELB 300
。如果基本价格可能是两种可能性之一,那么我通常会一直尝试购买或出售该物品,直到获得一个可以明确地将其放入某个价格槽的报价为止。但是,您无法在此挑战中做到这一点,因此只需用斜杠(
/
)分隔两个可能的基本价格。例如,HAC 60/80
。
以下是将商品的基本价格转换为您提供的购买价格的公式:
从项目的基本价格开始
通过以下方式计算得出的可能性为33%的“不确定的附加费”
price += price / 3
以相同的方式计算得出33%的“吮吸者加价”的机会(实际上这不是随机机会,但就本挑战而言,是)
一种魅力修饰符,其应用如下:
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(分别为“正常”或“吸盘标记”;同样,不是随机的,但这是为了进行此挑战)
进一步减少25%的机会4,通过计算
price -= price / 4
除法是整数除法,这意味着每一步的结果均四舍五入。(来源:Wiki和一些源代码挖掘。颠倒这些公式是您的工作。)
最后,这是一个方便的ASCII图表,显示了具有一定基本价格的滚动条的可能的购买价格(按Charisma stat分组):
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
(这是相同的,只是它列出了所有可以卖的价格维基图表,而维基图表忽略包括两个四个可能的卖出价格不,我没有手动作出这样的图表;与产生此Ruby脚本)
测试用例
输入:
"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:更多的过度简化。例如,店主可以称您为“浮渣”或“最著名和最神圣的生物”,但您不必处理任何此类事情。
4:聪明的玩家通过反复提供要出售的物品直到获得更高的价格来解决这个问题。