ああ神々!Doorknobでここから離れることはできません!どこでもネットハックになります!- 前から1dによってGeobits
失望することはできませんでした...
前書き
(説明を気にしない場合や、タブ爆発症候群がある場合は、このセクションをスキップできます)
Nethack(およびRogue、および同じローグライクジャンルの同様のゲーム)の特徴的なメカニズムの1つは、その識別システムです。ゲームの開始時には、開始インベントリ内のアイテムのみが「正式に識別されます」。他のオブジェクトの大部分は未知から始まります。たとえば、「反射の盾」は、識別される前に「研磨された銀の盾」として最初に表示されます。
「磨かれた銀色の盾」は反射の盾にしかなれませんが、これは他の2つの場合に興味深い結果をもたらします。
一部のアイテムは互いに異なりますが、同じ「外観」を持っています。あなたが見つけた場合、「たとえば、灰色の石を、」それは4つの物事のいずれかになります。フリントストーン(役に立たない)、試金石(便利です)、LOADSTONEはそれはトンの重量を量ると、あなたので、(深刻なあなたを妨げなります落とすことはできません)、または幸運の石(非常に役立つ、ゲームに勝つためにほとんど必要)。
多くのアイテム(スクロール、杖、指輪、魔法書、鎧など)の外観はランダム化されています。これが意味することは、ポーションが持つ可能性のある可能性のある外観のセットリストがあることです。たとえば、[ 黄金のポーション、渦巻きポーション、発泡性のポーション、赤紫色のポーションなど]。これらの外観は、ランダムに彼らが実際に(何であるかに割り当てられている治癒のポーション、麻痺のポーション、目に見えない参照のポーション、多形のポーション、など)。
つまり、六角形のお守りは、あるゲームであなたの命を救うことができ(命を救うお守り)、次のゲームであなたを窒息死させることができます(絞殺のお守り)。
当然、これによりアイテムの識別がゲームの重要な部分になります。アイテムは「正式に識別される」ことができます。つまり、それらは明確に特定のアイテムとして明確に表示されます(たとえば、見つけた宝石の杖はすべて、モンスターを作成する杖として表示されます)。これは、主に巻物または特定の魔法書によって行われます。しかし、通常、それらは不足しています。
非公式の識別。これは、特定の特定されていないアイテムが特定のタイプであること(または複数のタイプのうちの1つにしかなれないこと)はかなり確実(または確実)であることを意味します。これはいくつかの方法で行うことができます:ワンドの彫刻テスト、リングのシンクテスト、または最も一般的な方法...
... 価格の確認!これがこの課題の目的です。
一言で言えば、Dungeons of Doomの至るところにショップがあります(そう、店主は地下ダンジョンに店を構えるのは良い考えだと思ったので、理由を聞かないでください)。これらのショップでは、旅行中に出くわすさまざまなアイテムを売買できます。アイテムを購入または販売するとき、店主は最初にあなたにどれだけあなたにそれを売る/あなたからそれを購入するかを教えてくれます。特定のアイテムには特定の価格が保証されているため、これを使用して特定のタイプのアイテムを非公式に識別することができます。
光の巻物などの一部のアイテムは、特定の金額がかかる唯一のアイテムです。これにより、明確に識別することができます。ただし、ほとんどのアイテムは同じクラスの他のアイテムと価格グループを共有しているため、可能性を絞り込むことしかできません(これは依然として有用です)。ただし、アイテムの売買価格は、多くの変数(Charisma統計など)の影響を受けます。したがって、上記のチャート。
Nethackが好きだと言えますか?
入力
入力は、現在プレイされているNethackゲーム(バニラ、3.4.3)として提供されます。
"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文字以下です。
最後から2番目の行は、次の「トークン」で構成されます。プレーヤーの名前とタイトル(「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}
常に次のいずれかになります(source):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}
常に次のいずれかになります(source):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
、価格IDを付けたばかりのスクロールとして提供する必要があります。私が使用している(および他の人が使用しているのを見た)命名システムは次のとおりです。
巻物が特定の巻物として明確に識別されている場合(識別、光、強化武器)、
#name
それ。これは、次の基本価格のスクロールの場合です(基本価格の計算方法は以下で説明します):20->識別、50->ライト、60->エンチャント武器。それ以外の場合は、スクロールの外観の最初の3文字を使用します。3文字未満の場合は最初の単語を使用します。たとえば、に
ZELGO MER
なりZEL
、にVE FORBRYDERNE
なりますVE
。これと連結します(スペース、そして)スクロールの基本価格。たとえば、ELB 300
。基本価格が2つの可能性のいずれかである場合、通常、特定の価格帯に明確に配置される提示価格を取得するまで、アイテムの売買を試み続けます。ただし、このチャレンジではそれができないため、2つの可能な基本価格をスラッシュ(
/
)で区切るだけです。たとえば、HAC 60/80
。
これは、アイテムの基本価格を購入するために提供される価格に変換するための公式です:
アイテムの基本価格から始めます
33%の「正体不明の追加料金」の可能性。
price += price / 3
33%の「サッカーマークアップ」のもう1つのチャンス(これは実際にはランダムなチャンスではありませんが、このチャレンジの目的のためです)、同じ方法で計算されます
次のように適用されるカリスマ修飾子。
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、およびソースコード掘り下げ。これらの式を逆にするのはあなたの仕事です。)
最後に、可能性のある購入価格(Charisma statでグループ化)と特定の基本価格を持つスクロールの販売価格を示す便利なASCIIグラフを次に示します。
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
(これは、すべての可能な販売価格をリストすることを除いて、ウィキのグラフと同じですが、ウィキグラフは4つの可能な販売価格のうち2つを含めることを無視します。いいえ、手動で作成しませんでした; この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:スマートプレーヤーは、より高い価格が与えられるまでアイテムの販売を繰り返し申し出ることで回避します。