首页
学习
活动
专区
圈层
工具
发布

保水
EN

Code Golf用户
提问于 2022-02-07 07:02:06
回答 4查看 945关注 0票数 17

你的任务是检查水池中的水量。您必须创建一个程序,该程序接受由整数组成的10 by 10网格表示的输入,其高度从A=1到拉丁字母的Z=26不等。找出每个池子能容纳的水量。

你必须输出水池能容纳的水量。池外的高度为0,因此池边缘的细胞上没有水。水不会斜向漏水。

测试用例

代码语言:javascript
复制
ZZZZZZZZZZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZAAAAAAAAZ
ZZZZZZZZZZ
    OR
[[26, 26, 26, 26, 26, 26, 26, 26, 26, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 1, 1, 1, 1, 1, 1, 1, 1, 26], [26, 26, 26, 26, 26, 26, 26, 26, 26, 26]]
->
1600

ZZZZZZZZZZ
ZRRRRRRRRZ
ZRRRRRRRRZ
ZRRRRRRRRZ
ZFFFFFFFFZ
ZDDDDDDDDZ
ZDDDDDDDDZ
ZDDDDDDDDZ
ZDDDDDDDDZ
ZZZZZZZZZZ
    OR
[[26, 26, 26, 26, 26, 26, 26, 26, 26, 26], [26, 18, 18, 18, 18, 18, 18, 18, 18, 26], [26, 18, 18, 18, 18, 18, 18, 18, 18, 26], [26, 18, 18, 18, 18, 18, 18, 18, 18, 26], [26, 6, 6, 6, 6, 6, 6, 6, 6, 26], [26, 4, 4, 4, 4, 4, 4, 4, 4, 26], [26, 4, 4, 4, 4, 4, 4, 4, 4, 26], [26, 4, 4, 4, 4, 4, 4, 4, 4, 26], [26, 4, 4, 4, 4, 4, 4, 4, 4, 26], [26, 26, 26, 26, 26, 26, 26, 26, 26, 26]]
->
1056

XXXXXXXXXX
XSSSSRAAAX
XSSSSRAAAX
XSSSSRAAAX
XXXXXCXXXX
XSSSSCBBBX
XSSSSCBBBX
RSSSSCBBBX
XSSSSCBBBX
XXXXXXXXXX
    OR
[[24, 24, 24, 24, 24, 24, 24, 24, 24, 24], [24, 19, 19, 19, 19, 18, 1, 1, 1, 24], [24, 19, 19, 19, 19, 18, 1, 1, 1, 24], [24, 19, 19, 19, 19, 18, 1, 1, 1, 24], [24, 24, 24, 24, 24, 3, 24, 24, 24, 24], [24, 19, 19, 19, 19, 3, 2, 2, 2, 24], [24, 19, 19, 19, 19, 3, 2, 2, 2, 24], [18, 19, 19, 19, 19, 3, 2, 2, 2, 24], [24, 19, 19, 19, 19, 3, 2, 2, 2, 24], [24, 24, 24, 24, 24, 24, 24, 24, 24, 24]]
->
449

ZZZZZZZZZZ
RAAAAZEEEZ
RAAAAZEEEZ
RAAAAZEEEZ
RAAAAZEEEZ
RAAAAAEEEZ
RAAAAZEEEZ
RAAAAZEEEZ
QAAAAZEEEZ
ZZZZZZZZZZ
    OR
[[26, 26, 26, 26, 26, 26, 26, 26, 26, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [18, 1, 1, 1, 1, 1, 5, 5, 5, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [18, 1, 1, 1, 1, 26, 5, 5, 5, 26], [17, 1, 1, 1, 1, 26, 5, 5, 5, 26], [26, 26, 26, 26, 26, 26, 26, 26, 26, 26]]
->
816

输入以二维整数列表的形式出现。有字母的那个只是一个参考(如果你想要的话,你可以把它作为字母输入)

工作示例:

对于第一个测试用例:只有一个框,即26A's的10行,因为这个池是池的底部,而Z是池的顶部,所以26-1=25是整个池的深度。以25*8*8=1600为例,因为Z是墙,所以只占用8*8区域。

测试用例3在R的外层行有一个X,所以一定要注意水位不能超过这个值。

测试用例4:

最低的墙是Q,所以我们把17-1=16作为A=1最大高度的最高水位。我们取16*4*8=512,下一个是Z墙,但是有一个A突破了这个墙,它把所有的E和高度16的墙壁连接起来,所以E的最高水位是17-5=12,然后取12*3*8=288。最后,我们采用512+12+288=816(12来自于Z墙内的额外A )。

技巧:

把这个挑战想象成一个大盒子里的许多不同的盒子里的水。

其他人:

  • 您可以假设所有输入都来自字母表,并且它们都是大写的。
  • 你可以假设字母的外层行并不总是有最高的高度,而且都有不同的高度。
  • 由于没有溢出的规律,外排必须比第二最外层行的高度高。
  • 水位不能高于最高的“墙”

评分

这是密码-高尔夫,所以最短的代码获胜!

这个谜题的代码名社区的学分!拼图链接

EN

回答 4

Code Golf用户

回答已采纳

发布于 2022-02-13 19:13:53

木炭,108个字节

代码语言:javascript
复制
⊞υE⁺Aθ⁰WS⊞υE⁺Aι⌕ακ≔EυEιφθ≔⟦E³¦⁰⟧ηFη«≔⊟ιδ≔⊟ιε≔⌈⟦⊟ι§§υδε⟧ζ¿‹ζ§§θδε«§≔§θδεζF²F²⊞ηE⟦ζεδ⟧⁺μ∧⁼κ⊖ν⊖⊗λ»»I⁻ΣEθΣιΣEυΣι

在网上试试!链接是详细的代码版本。解释:

代码语言:javascript
复制
⊞υE⁺Aθ⁰WS⊞υE⁺Aι⌕ακ

在池中阅读,但添加零深度的边框。

代码语言:javascript
复制
≔EυEιφθ

尝试将池填充到1000的高度。

代码语言:javascript
复制
≔⟦E³¦⁰⟧ηFη«

首先从左上角开始搜索游泳池的宽度。

代码语言:javascript
复制
≔⊟ιδ≔⊟ιε

让下一个协调员检查一下。

代码语言:javascript
复制
≔⌈⟦⊟ι§§υδε⟧ζ

获取触发此搜索的邻近水位的高度,但将其限制在单元格的高度。

代码语言:javascript
复制
¿‹ζ§§θδε«

如果这低于水的当前高度,那么:

代码语言:javascript
复制
§≔§θδεζ

更新水深。

代码语言:javascript
复制
F²F²

在邻近的细胞上循环。

代码语言:javascript
复制
⊞ηE⟦ζεδ⟧⁺μ∧⁼κ⊖ν⊖⊗λ

将它们添加到要检查的单元格搜索列表中。

代码语言:javascript
复制
»»I⁻ΣEθΣιΣEυΣι

从水的高度减去细胞的高度,然后输出总数。

票数 1
EN

Code Golf用户

发布于 2022-02-07 12:24:46

Python 3,230个字节

-12944 1

代码语言:javascript
复制
R=range;S=(1,0,-1,0)
def m(A,r=0):
 for l in R(2,27):
  K={(i,j)for i in R(10)for j in R(10)if A[i][j]

在网上试试!输入是从1到26 (包括在内)的数字列表。

对于从B (2)到Z (26)的每一个可能的水位,这个函数首先将水池填满到那个高度,然后排出任何接触边缘的水。K是一组临时填充的单元格,B是"burned“单元格的集合(因为它实现了洪水填充)。

票数 6
EN

Code Golf用户

发布于 2022-02-07 07:17:49

Python3,259个字节

代码语言:javascript
复制
import numpy as np
r=range
l=np.array([[ord(j)-65for j in input()]for i in r(10)])
p=l.copy()
p[1:-1,1:-1]=25
for _ in r(11):
 for i in r(1,9):
  for j in r(1,9):p[i][j]=max(min([p[i+a][j+b]for a,b in[(-1,0),(0,1),(0,-1),(1,0)]]),l[i][j])
print(sum(sum(p-l)))

在网上试试!

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/242453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档