首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有趣的排列

有趣的排列
EN

Code Golf用户
提问于 2015-11-07 03:40:59
回答 7查看 1K关注 0票数 15

谁不完全喜欢排列,对吧?我知道,他们太棒了--太有趣了!

好吧,为什么不把这件事做得有趣些呢?

这是一个挑战:

给定一个精确形式的输入:nPr,其中n是从池中提取的池,r是从该池中选择的数目( nr是整数),输出/返回排列的确切数目。对于那些对术语有点生疏的人来说:排列,德夫。2a

然而,这正是挑战发挥作用的地方(让它变得不太容易):

您不能将任何内置的库、框架或方法用于您的置换函数。您不能使用阶乘方法、置换方法或任何类似的方法;您必须自己编写所有内容。

如果需要进一步澄清,请在评论中毫不犹豫地告诉我,我将迅速采取相应行动。

下面是一个I/O示例:

样本函数是permute(String) -> int

输入:

代码语言:javascript
复制
permute("3P2")

输出:

代码语言:javascript
复制
6

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

EN

回答 7

Code Golf用户

发布于 2015-11-07 04:38:58

MATLAB,54字节

代码语言:javascript
复制
[n,r]=strread(input(''),'%dP%d');disp(prod((n-r+1):n))

试着让它变小,但是MATLAB的一个缺点就是输入。它需要32个字符才能从输入字符串中获得这两个数字!

相当清楚的代码。获取表单%dP%d中的输入,其中%d是整数。把它分成nr。然后显示n-r+1n范围内每个整数的乘积。有趣的是,即使xP0给出了正确的答案1,这也是因为在MATLAB中,prod()函数返回1,如果你尝试做一个空数组的乘积。每当r为零时,范围将为空数组,因此我们得到1。

这也是完美的工作与八度以及。你可以在网上试用这里

票数 1
EN

Code Golf用户

发布于 2015-11-07 06:41:36

Python 2,66

代码语言:javascript
复制
def f(s):a,b=map(int,s.split('P'));P=1;exec"P*=a;a-=1;"*b;print P

相当直截了当。将数字输入处理为a,b。将运行中的产品保持为P,乘以a, a-1, a-2, ...的第一个b术语。

票数 1
EN

Code Golf用户

发布于 2015-11-07 15:55:31

TI-BASIC,52字节

代码语言:javascript
复制
Ans→Str1
expr(sub(Ans,1,⁻1+inString(Ans,"P→P        ;n
1
If expr(Str1                               ;If n^2*r ≠ 0
prod(randIntNoRep(P,P+1-expr(Str1)/P²
Ans

TI-BASIC有一个“列表的乘积”函数,因此绕过对内置程序的限制并不太困难。然而,TI-BASIC不支持空列表-所以我们需要

为了提取这两个数字,我提取第一个数字作为子字符串。这是昂贵的,它占据了整个第二行。为了避免在第二个数字中再次执行此操作,我将变量P设置为该数字,并使用expr(计算整个字符串,然后除以P 2。

最后,我对这两个数字之间的列表进行随机排列(注意将一个加到第二个数),然后取乘积。

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

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

复制
相关文章

相似问题

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