OH ALLAH TIDAK !! Anda tidak dapat meninggalkan kami di sini dengan Gagang Pintu! Itu akan tetap di mana-mana! - 1 hari yang lalu oleh Geobits
Yah, tidak bisa mengecewakan ...
pengantar
(Anda dapat melewati bagian ini jika Anda tidak peduli tentang eksposisi dan / atau jika Anda memiliki Tab Explosion Syndrome )
Salah satu mekanisme karakteristik Nethack (dan Rogue, dan game serupa dalam genre roguelike yang sama) adalah sistem identifikasi . Di awal permainan, hanya item dalam inventaris awal Anda yang "diidentifikasi secara formal." Sebagian besar objek lain mulai tidak diketahui; misalnya, "perisai refleksi" pada awalnya akan ditampilkan sebagai "perisai perak yang dipoles" sebelum diidentifikasi.
"Perisai perak yang dipoles" hanya bisa menjadi perisai refleksi , tetapi ini memiliki konsekuensi yang menarik dalam dua kasus lainnya.
Beberapa item berbeda satu sama lain, tetapi memiliki "penampilan" yang sama. Misalnya, jika Anda menemukan " batu abu-abu ," itu bisa menjadi salah satu dari empat hal: batu batu (tidak berguna), batu ujian (dapat berguna), batu beban (yang akan sangat membebani Anda karena beratnya satu ton dan Anda tidak bisa menjatuhkannya), atau batu keberuntungan (sangat membantu, hampir diperlukan untuk memenangkan permainan).
Banyak item (gulungan, tongkat, cincin, buku mantra, beberapa baju besi, dll.) Memiliki penampilan acak. Artinya, ada daftar kemungkinan penampilan, katakanlah, ramuan bisa; misalnya, [ ramuan emas , ramuan berputar , ramuan bersoda , ramuan ungu-merah , dll]. Penampilan ini kemudian secara acak ditugaskan untuk apa mereka sebenarnya ( ramuan penyembuhan , ramuan kelumpuhan , ramuan lihat tak terlihat , ramuan polimorf , dll.).
Yang berarti bahwa jimat heksagonal dapat menyelamatkan hidup Anda dalam satu permainan (jimat menyelamatkan hidup) , dan mencekik Anda sampai mati berikutnya (jimat pencekikan) .
Tentu saja, ini membuat mengidentifikasi item menjadi bagian penting dari permainan. Item dapat "diidentifikasi secara formal," yang berarti bahwa mereka akan muncul dengan jelas sebagai item tertentu (mis. Semua tongkat permata yang Anda temukan akan muncul sebagai tongkat monster ); ini dilakukan terutama melalui gulungan atau buku mantra mengidentifikasi. Biasanya mereka dalam pasokan pendek, yang membawa kita ke ...
Identifikasi informal. Ini berarti bahwa Anda cukup yakin (atau pasti) bahwa item tertentu yang tidak dikenal dari jenis tertentu (atau itu hanya dapat menjadi salah satu dari beberapa jenis), tetapi Anda belum "secara formal" mengidentifikasinya. Ini dapat dilakukan melalui beberapa metode: mengukir-pengujian untuk tongkat, menguji-tenggelam untuk cincin, atau, metode yang paling umum ...
... identifikasi harga ! Itulah tantangannya.
Singkatnya, ada toko - toko yang berlokasi di seluruh Dungeons of Doom (ya, para pemilik toko berpikir itu akan menjadi ide yang baik untuk mendirikan toko di beberapa penjara bawah tanah; jangan bertanya mengapa). Di toko-toko ini, Anda dapat membeli dan menjual berbagai barang yang Anda temui selama perjalanan. Ketika membeli atau menjual suatu barang, penjaga toko akan memberi tahu Anda berapa banyak dia akan menjualnya kepada Anda / membelinya untuk Anda. Karena barang tertentu dijamin memiliki harga tertentu , Anda dapat menggunakannya untuk mengidentifikasi jenis barang tertentu secara tidak resmi .
Beberapa item, seperti gulungan cahaya , adalah satu-satunya item yang berharga dalam jumlah tertentu, yang memungkinkan Anda untuk mengidentifikasinya secara jelas; Namun, sebagian besar item berbagi grup harga dengan item lain dari kelas yang sama, yang hanya memungkinkan Anda mempersempit kemungkinan (yang masih berguna). Namun, harga beli / jual suatu barang dipengaruhi oleh sejumlah variabel (seperti Karisma Anda stat ). Oleh karena itu bagan di atas.
Bisakah Anda memberi tahu saya suka Nethack?
Memasukkan
Input akan diberikan sebagai (vanilla, 3.4.3) game Nethack yang saat ini dimainkan:
"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
Ini berarti dijamin memiliki beberapa properti:
Panjangnya akan selalu 24 baris.
Setiap baris akan selalu panjangnya 80 karakter atau kurang.
Baris kedua hingga terakhir akan terdiri dari " token " berikut : nama dan judul pemain (dalam bentuk " foo the bar "), daftar atribut (dipisahkan oleh satu spasi), dan penyelarasan pemain ( Sah, Netral, atau Kacau). Setiap token akan dipisahkan oleh jumlah spasi variabel. 1
Daftar atribut akan selalu ada
St:* Dx:* Co:* In:* Wi:* Ch:*
, di mana*
karakter mewakili bilangan bulat dari 3 hingga 25. 2 (Poin yang menarik di sini adalah stat terakhir, Karisma, yang Anda perlukan untuk menghitung harga.)Baris pertama akan selalu terdiri dari pesan yang terkait dengan toko (khususnya, pesan yang ditampilkan saat Anda membeli atau menjual suatu barang). Selanjutnya, item ini dijamin menjadi satu, gulir yang tidak dikenal, tidak disebutkan namanya. Untuk membeli barang, ini adalah:
"For you, {TITLE}; only {PRICE} for this scroll labeled {LABEL}."--More--
dan untuk penjualan, itu adalah:
{SHK} offers {PRICE} gold pieces for your scroll labeled {LABEL}. Sell it? [ynaq] (y)
di mana "variabel" yang tercantum di
{curly braces}
adalah sebagai berikut:{TITLE}
selalu merupakan salah satu dari " baik ", " terhormat ", " paling ramah ", atau " terhormat ", disatukan dengan " nyonya " atau " tuan ".{PRICE}
selalu merupakan bilangan bulat.{LABEL}
akan selalu menjadi salah satu dari yang berikut ( sumber ):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}
akan selalu menjadi salah satu dari yang berikut ( sumber ):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
Pesan ini dapat dibagi ke baris lain (tetapi tidak akan pernah mengambil lebih dari 2 baris). 3
Selain dari beberapa baris pertama, semua taruhan dimatikan seperti apa tampilan layar lainnya. Nethack menggunakan sebagian besar rangkaian karakter ASCII . Satu-satunya hal yang dapat Anda asumsikan dengan aman adalah bahwa inputnya akan murni ASCII (namun ini mungkin tidak masalah karena Anda dapat membuang baris 3-22).
Jika input diambil sebagai argumen fungsi, itu akan diberikan persis seperti yang ditunjukkan pada contoh di atas (baris baru dipisahkan). Jika Anda memasukkan melalui STDIN, itu akan diberikan sebagai 24 jalur input berturut-turut (sekali lagi, seperti yang ditunjukkan di atas). Anda dapat memilih apakah Anda ingin input memiliki baris tambahan atau tidak. Input dijamin tidak memiliki spasi tambahan.
Keluaran
Keluaran harus disediakan seperti apa yang seharusnya saya #name
gulir bahwa saya hanya harga-ID'd. Sistem penamaan yang saya gunakan (dan yang telah saya lihat orang lain gunakan) adalah:
Jika gulir secara jelas diidentifikasi sebagai gulir tertentu (identifikasi, cahaya, senjata mempesona),
#name
maka itu. Ini adalah kasus untuk gulungan dari harga dasar berikut (Anda akan melihat bagaimana menghitung harga dasar di bawah): 20 -> mengidentifikasi, 50 -> cahaya, 60 -> senjata mempesona.Kalau tidak, ambil tiga huruf pertama dari tampilan gulir, atau kata pertama jika kurang dari 3 karakter. Misalnya,
ZELGO MER
menjadiZEL
,VE FORBRYDERNE
menjadiVE
, dll. Bersambung dengan ini (spasi, dan kemudian) harga dasar gulir. Sebagai contohELB 300
,.Jika harga dasar bisa menjadi salah satu dari dua kemungkinan, saya biasanya terus berusaha membeli atau menjual barang sampai saya mendapatkan harga yang ditawarkan yang dengan jelas menempatkannya dalam slot harga tertentu. Namun, Anda tidak dapat melakukan itu dalam tantangan ini, jadi pisahkan saja dua harga dasar yang mungkin dengan garis miring (
/
). Sebagai contohHAC 60/80
,.
Inilah rumus untuk mengubah harga dasar suatu barang menjadi harga yang Anda tawarkan untuk membelinya:
mulai dengan harga dasar barang
kemungkinan 33% "biaya tambahan tidak dikenal," dihitung melalui
price += price / 3
kesempatan lain dari 33% "pengisap markup" (ini sebenarnya bukan kesempatan acak, tetapi untuk keperluan tantangan ini), dihitung dengan cara yang sama
pengubah karisma, yang diterapkan sebagai berikut:
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
Dan inilah rumus untuk harga dasar -> harga jual:
mulai dengan harga dasar barang
bagi ini dengan 2 atau 3 ("normal" atau "pengisap markup" masing-masing; sekali lagi, tidak acak, tetapi untuk keperluan tantangan ini)
peluang pengurangan 25% lebih lanjut 4 , dihitung melalui
price -= price / 4
Divisi adalah divisi integer, yang berarti hasil pada setiap langkah dibulatkan ke bawah. (Sumber: wiki , dan sedikit penggalian kode sumber. Membalik formula ini adalah pekerjaan Anda.)
Akhirnya, inilah grafik ASCII yang berguna yang menunjukkan kemungkinan harga beli (dikelompokkan berdasarkan status Charisma) dan menjual harga sebuah gulungan dengan harga dasar tertentu:
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
(Ini identik dengan bagan pada wiki kecuali bahwa itu mencantumkan semua kemungkinan harga jual, sementara bagan wiki lalai memasukkan dua dari empat harga jual yang mungkin. Tidak, saya tidak secara manual membuat bagan itu; dihasilkan dengan skrip Ruby ini .)
Uji kasus
Memasukkan:
"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
Keluaran: LEP 60/80
Memasukkan:
"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
Keluaran: enchant weapon
Memasukkan:
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
Keluaran: GAR 300
Memasukkan:
"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
Keluaran: VE 100
Memasukkan:
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
Keluaran: identify
(Saya harus secara manual mengkompilasi Nethack dengan semua nama penjaga toko lainnya dihapus karena saya tidak dapat menemukan penjaga toko yang memiliki ruang dalam namanya ...)
Aturan
1: ini tidak selalu benar selama permainan Nethack, tapi kami menganggap ini demi kesederhanaan.
2: sekali lagi, tidak selalu benar. Kekuatan bisa 18/01 hingga 18 / **, tetapi Anda tidak perlu mengatasinya.
3: penyederhanaan yang lebih banyak. Sebagai contoh, adalah mungkin bagi seorang penjaga toko untuk memanggil Anda "buih" atau "makhluk paling terkenal dan sakral," tetapi Anda tidak harus menangani semua itu.
4: dimana seorang pemain pintar berkeliling dengan berulang kali menawarkan untuk menjual barang sampai diberi harga yang lebih tinggi.
Jawaban:
Javascript (ES6),
1610724601612419405 byteTembok besar teks, bertemu tembok besar kode.Tidak disatukan
Contoh
Tampilkan cuplikan kode
sumber