首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数我所有的羊

数我所有的羊
EN

Code Golf用户
提问于 2021-06-13 08:44:24
回答 1查看 332关注 0票数 13

沙盒

给定一个代表我的草地、羊长n和羊毛厚度k的布尔矩阵,你将不得不计算我的羊。

绵羊是一条独立的、完整的绵羊线,长度为n,厚度为k

代码语言:javascript
复制
#|##|# | #
#|  | #|# 

都是n=2,k=1.的有效绵羊吗?

代码语言:javascript
复制
##|###|##  |  ##
##|###| ## | ## 
##|   |  ##|##

都是n=3,k=2.的有效绵羊吗?

对角线羊必须由长度为k的水平线组成。

您将在给定的网格中计算有效羊的出现情况。

羊不会相交。你将得到保证,n,k≥1n ≠ k.

因此,对于n=2,k=1

代码语言:javascript
复制
##
   #
##  #

绵羊可能就在彼此的旁边,小动物也可能出现在网格中。您应该得到从网格中可以识别的最大羊数。

由于草地在羊放牧之后变得非常短,所以您的代码也必须很短(密码-高尔夫)。

I/O

您可以任意选择字段(2D数组、字符串、布尔矩阵等)。

输出必须是单个整数≥0。

测试用例

n=3, k=1

代码语言:javascript
复制
#      #
 # ### #
  #
   #
   #
   #

Output: 3

n=1,k=4

代码语言:javascript
复制
####
     ####
      
    #
    #
  ####

Output: 3

n=3, k=1

代码语言:javascript
复制
#  #
 ##
 ###
  #
 #

Output: 2

n=2, k=5

代码语言:javascript
复制
###
###
###
###
###
###

Output: 1

EN

回答 1

Code Golf用户

发布于 2022-09-05 17:13:51

Python3,629字节:

代码语言:javascript
复制
lambda b,n,k:max(map(len,F({r for x,R in E(b)for y,_ in E(R)for r in S(b,x,y,n,k)})))
E=enumerate
def S(b,x,y,n,k):
 q=[(x,y,[],r,w,h)for r,w,h in[(0,n,k),(0,k,n),(1,k,n),(-1,k,n)]]
 while q:
  x,y,C,r,w,h=q.pop(0)
  if h==0:yield tuple(C);continue
  if x<len(b)and 0<=y and y+w<=len(b[0])and all(b[x][y:y+w]):q+=[(x+1,y+r,C+[(x,y+i)for i in range(w)],r,w,h-1)]
O=lambda x,y:any(t[0]==T[0]and t[1]>T[1]for t in x for T in y)and any(t[0]==T[0]and t[1]>T[1]for t in x for T in y) 
def F(s,c=[]):
 if[]==(o:=[i for i in s if all({*j}&{*i}==set()for j in c)and 0==any(O(j,i)for j in c)]):yield c
 for i in o:yield from F(s-{i},c+[i])

在网上试试!

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

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

复制
相关文章

相似问题

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