首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在火星规则足球比赛中取得满分

在火星规则足球比赛中取得满分
EN

Code Golf用户
提问于 2020-05-08 08:39:42
回答 4查看 674关注 0票数 9

Story

火星人一直怀着极大的好奇心从太空观察澳大利亚统治足球火柴。他们完全爱上了这场比赛,因此受到鼓舞,开始了他们自己的足球联赛。然而,作为一个愚蠢的生物,他们无法理解这个得分系统。

我们知道,在澳大利亚规则中,一个进球等于6分(G=6),落后等于1分(B=1)。火星人足够聪明地计算出有两种类型的分数,但他们没有足够聪明的意识到,他们可以通过分析比赛结果来推断出这些分数的积分值。国际奥林匹斯蒙斯委员会(International奥林usMons Committee )没有被吓倒,它规定,在所有的火星人足球比赛中,球门和后部的得分值(即GB)将被随机选择。

‘完美’分数

G = 6B = 1 (在澳大利亚规则中)时,正好有四个整数对( [g,b] ),这样一个具有g目标和b后面的团队就有一个gb积分。我们将把满足gG+bB=gb[g,b]对称为完美分数。澳大利亚规则中的四个完美分数是

[g,b]=[2,12]

[3,9][4,8][7,7].

挑战

给定两个严格的正整数GB,它们代表火星规则足球比赛中的目标和后面的点数,编写一个程序或函数来确定该比赛的所有可能的完美分数。规则:

  • 输入可以采用任何方便的格式(一对整数、列表、字符串等)。您可能不会假设G>B
  • 输出也可以是任何格式,只要[g,b]对是明确可识别的(例如,列表或字符串中的连续元素)。对的顺序并不重要。如果您在回答中说明了这一点,您可以按[b,g]顺序输出对。您可能不会输出总分(产品gb),因为通常有多种不完美的方法来实现相同的总分。
  • 您的程序/函数必须在有限的时间内终止/返回。

这是密码-高尔夫:每种语言中最短的提交(以字节为单位)获胜。

测试用例

输入->输出

代码语言:javascript
运行
复制
[6, 1] -> [[2, 12], [3, 9], [4, 8], [7, 7]]
[6, 2] -> [[3, 18], [4, 12], [5, 10], [6, 9], [8, 8], [14, 7]]
[1, 1] -> [[2, 2]]
[1, 6] -> [[7, 7], [8, 4], [9, 3], [12, 2]]
[7, 1] -> [[2, 14], [8, 8]]
[7, 5]  -> [[6, 42], [10, 14], [12, 12], [40, 8]]
[13, 8] -> [[9, 117], [10, 65], [12, 39], [16, 26], [21, 21], [34, 17], [60, 15], [112, 14]]

*这个问题从来没有在地球上发生过。

EN

回答 4

Code Golf用户

发布于 2020-05-08 09:17:58

05AB1E,10 字节数

代码语言:javascript
运行
复制
>PLãʒ*OyPQ

在网上试试验证所有测试用例.

解释:

代码语言:javascript
运行
复制
>           # Increase both values in the (implicit) input-pair by 1
 P          # And take the product of those
  L         # Pop and push a list in the range [1, (G+1)*(B+1)]
   ã        # Create all possible pairs by taking the cartesian product with itself
    ʒ       # Filter those pairs [g,b] by:
     *      #  Multiply it with the (implicit) input-pair at the same positions:
            #   [G,B] * [g,b] will result in [Gg,Bb]
      O     #  Sum those: Gg+Bb
       yP   #  Take the product of the current pair: gb
         Q  #  And check that both values are the same: Gg+Bb == gb
            # (after which the result is output implicitly)

最后一个测试用例不再使用(G+1)\times(B+1)的上限而不是我的初始(2^G+2^B) (字节计数保持不变)。一定要为提供这个数学上界的@SurculoseSputumPython的答案投票。

票数 6
EN

Code Golf用户

发布于 2020-05-08 15:15:46

C (gcc),84字节

代码语言:javascript
运行
复制
b;g;f(B,G){for(b=0;++b<~B*~G;)for(g=0;++g<~B*~G;b*B+g*G-b*g||printf("%d %d ",b,g));}

在网上试试!

打印由空格分隔的bg的值。

使用bg的上界,由外科手术痰Python回答中计算。

票数 2
EN

Code Golf用户

发布于 2020-05-08 20:49:16

皮斯,17字节

代码语言:javascript
运行
复制
fq*FTs*VTQ^Sy*FQ2

在网上试试!

端口@KevinCruijssen的05AB1E答案,经过一些修改,使其更适合于Pyth。

尤其是…的上界

g \leq B(G+1)
b \leq G(B+1)

来自@SurculoseSputum的回答被用来推导出:

g,b \leq 2GB
代码语言:javascript
运行
复制
fq*FTs*VTQ^Sy*FQ2
            y*FQ    Multiply G and B, then multiply by 2
           S        Range( 1, 2*GB )
          ^     2   Cartesian product of that range with itself
f                   Filter for elements (g,b) satisfying:
  *FT                g*b
 q                    equals
     s*VTQ            G*g + B*b

奖金:@xnor的Python回答端口(21个字节)

代码语言:javascript
运行
复制
AQVSJ*GHI!%JN+NH+G/JN

在网上试试!

在两行上输出每对g,b。我觉得这个解决方案很有趣,因为它只包含大写字母和运算符。

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

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

复制
相关文章

相似问题

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