О, БОГИ НІ !! Ви не можете залишити нас тут з Дорнобом! Це буде скрізь сіткою! - 1d тому від Geobits
Ну, не міг розчарувати ...
Вступ
(ви можете пропустити цей розділ, якщо вам не важливо експозицію та / або якщо у вас є синдром вибухової вибухи )
Однією з характерних механіки Нетхака (і Rogue, і подібних ігор в одному і тому ж жанровій схожій жанрі) є його система ідентифікації . На початку гри "формально ідентифікуються" лише предмети у вашому початковому інвентарі. Переважна більшість інших об'єктів починаються невідомими; наприклад, "щит відображення" спочатку відображатиметься як "полірований сріблястий щит", перш ніж його ідентифікують.
"Полірований срібний щит" може бути лише щитом відображення , але це має цікаві наслідки у двох інших випадках.
Деякі предмети відрізняються один від одного, але мають однаковий «зовнішній вигляд». Наприклад, якщо ви знайдете " сірий камінь ", це може бути одна з чотирьох речей: крем'яний камінь (непотрібний), сенсорний камінь (може бути корисним), вантажний камінь (який сильно обтяжить вас, тому що важить вагу тонни, і ви не може кинути його), або вдача (надзвичайно корисна, майже необхідна для перемоги в грі).
Багато предметів (сувої, палички, каблучки, книги-орфограми, деякі броні тощо) мають рандомізований вигляд. Це означає, що існує набір переліку можливих проявів, скажімо, зілля; наприклад, [ золоте зілля , закручене зілля , неміцне зілля , фіолетово-червоне зілля тощо]. Ці прояви потім випадковим чином присвоюються тим, що вони є насправді ( зілля зцілення , зілля від паралічу , зілля бачити невидиме , зілля з поліморфу тощо).
Що означає, що шестикутний амулет міг врятувати ваше життя в одній грі (амулет рятівного життя) , а наступну задушити вас (амулет задухи) .
Природно, це робить ідентифікацію предметів критичною частиною гри. Елементи можуть бути "формально ідентифіковані", це означає, що вони однозначно відображатимуться як певний предмет (наприклад, всі коштовні палички, які ви знайдете, відображатимуться як палички створення монстра ); це робиться в основному за допомогою сувої або книги орфографії ідентифікації. Зазвичай їх не вистачає, але це призводить нас до ...
Неформальна ідентифікація. Це означає, що ви майже впевнені (або певні), що певний невстановлений предмет певного типу (або що він може бути лише одним із декількох типів), але ви його ще "формально" не визначили. Це можна зробити за допомогою декількох методів: гравірування-тестування на палички, тестування раковини на кільцях або, найпоширеніший метод ...
... ідентифікація ціни ! У чому полягає ця проблема.
Коротше кажучи, є магазини, розташовані по всій Підземеллях Сунь (так, крамарі думали, що було б гарною ідеєю встановити магазин у підземній підземеллі; не запитуйте чому). У цих магазинах ви можете купувати та продавати різні предмети, на які ви потрапляєте під час подорожей. Купуючи чи продаючи предмет, кравець спочатку скаже вам, за скільки він би продав його вам / купив у вас. Оскільки на певні товари гарантується конкретна ціна , ви можете використовувати цю інформацію для неофіційного визначення певного виду товару.
Деякі предмети, такі як прокручування світла , є єдиними предметами, які коштують певну суму, що дозволяє однозначно їх ідентифікувати; Однак більшість товарів поділяють цінову групу з іншими товарами того ж класу, що лише дозволяє звузити можливості (що все-таки корисно). Тим НЕ менше, ціни на покупку / продаж з пункту залежать від цілого ряду змінних (таких , як ваш Charisma стат). Звідси діаграма вище.
Не могли б ви сказати, що мені подобається 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 (Тут цікавою є остання статистика, Харизма, на яку потрібно обчислити ціни.)Перший рядок завжди міститиме повідомлення, пов’язане з магазином (зокрема, повідомлення, яке відображається під час покупки чи продажу товару). Крім того, цей предмет гарантовано буде одним, невстановленим, неназваним прокруткою. Для придбання предмета це:
"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
Це повідомлення може бути розділено на інший рядок (але воно не займе більше двох рядків). 3
Окрім перших кількох рядків, усі ставки відключені, як виглядає решта екрана. Nethack використовує більшість наборів символів ASCII . Єдине, що ви можете сміливо припустити, це те, що вхід буде суто ASCII (однак це, мабуть, не має значення, оскільки ви все одно можете відкинути лінії 3-22).
Якщо вхід приймається як аргумент функції, він буде заданий точно так, як показано в прикладі вище (розділений новий рядок). Якщо ви вводите через STDIN, він буде вказаний у вигляді 24 послідовних рядків введення (знову, як показано вище). Ви можете вибрати, хочете ви, щоб вхід мав зворотний новий рядок чи ні. На вході гарантується відсутність пробілів.
Вихідні дані
Вихід повинен бути наданий як те, що я повинен #name
прокручувати, що я просто цінував ID. Система імен, яку я використовую (і яку я бачив, як інші використовують), це:
Якщо сувій однозначно ідентифікується як певний сувій (ідентифікація, легка, чарівна зброя),
#name
це що. Це стосується сувої наступних базових цін (ви побачите, як розрахувати базову ціну нижче): 20 -> визначити, 50 -> легка, 60 -> чарівна зброя.В іншому випадку візьміть перші три літери зовнішності прокрутки або перше слово, якщо воно менше трьох символів. Наприклад,
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 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
(Це ідентично графіку на wiki, за винятком того, що в ньому перераховані всі можливі ціни продажу, тоді як вікі-графік нехтує включенням двох з чотирьох можливих цін продажу. Ні, я не вручну склав цю діаграму; генерується за допомогою цього сценарію 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 вручну зі всіма видаленими іменами крамника, тому що я не міг знайти крамника, який мав пробіл у його імені ...)
Правила
- Це код-гольф , тому найкоротший код у байтах
підніметьсяwin.
1: це не завжди завжди вірно під час гри в Nethack, але ми припускаємо це заради простоти.
2: знову ж таки, не завжди правда. Міцність може бути від 18/01 до 18 / **, але вам це не потрібно впоратися.
3: більше валових надмірностей. Наприклад, крамаря може називати вас "негідником" або "найвідомішим і священним створінням", але вам не потрібно нічого з цього впоратися.
4: якого розумний гравець обіймає, неодноразово пропонуючи продати товар, доки не буде вища ціна.