首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >置换的奇偶性

置换的奇偶性
EN

Code Golf用户
提问于 2016-03-20 02:40:07
回答 5查看 1.8K关注 0票数 15

背景

排列( 根据维基百科的定义 )的奇偶性如下:

置换σ的符号或签名表示sgn(σ),定义为+1 (如果σ是偶数),−1 (如果σ是奇数)。置换符号可以显式表示为sgn(σ)=(−1)^ N(σ),其中N(σ)是σ中的倒置数。或者,置换σ的符号可以从其分解定义为sgn(σ)=(−1)^m,其中m是分解中的转位数。

对于那些在数学上不喜欢希腊字母汤的人,我将尝试用一个例子来简化这个定义(也是从维基百科偷来的)。

示例

考虑输入数组{1, 2, 3, 4, 5},以及它的排列,比方说,{3, 4, 5, 2, 1}。为了从原始数组到其排列,您必须交换索引0213,然后是24。虽然这不是唯一的解决方案,但奇偶性定义得很好,所以这适用于所有情况。

因为它需要3个交换,所以我们用odd奇偶标记这个置换。正如您可能预期的那样,需要偶数掉期的置换被称为具有even平价。

挑战

您的挑战是以尽可能少的字节编写程序,以确定置换的奇偶性。您的程序或功能必须:

  • 接受作为参数的两个输入数组(或字符串),表示置换前后的集合。
  • 给定排列,返回或打印偶数字符e或奇数字符o
  • 应该假定数组或字符串中的所有索引都具有唯一的值。

测试用例

假设您声明了一个名为f的函数:

代码语言:javascript
复制
f([10], [10]) == "e"
f([10, 30, 20], [30, 20, 10]) == "e"
f([10, 30, 20, 40], [30, 20, 40, 10]) == "o"

这是密码-高尔夫,以字节为单位的最短程序获胜!

EN

回答 5

Code Golf用户

发布于 2016-03-20 08:00:51

Haskell,58字节

代码语言:javascript
复制
k%l|m<-zip k l=cycle"eo"!!sum[1|(a,b)<-m,(c,d)<-m,a<c,b>d]

用法:

代码语言:javascript
复制
*Main> [8,3,5]%[5,3,8]
'o'

方法与我的Python回答相同。骄傲的哈斯勒用cycle保存了一个字节。

从小麦向导中选择58个字节(按照现代删除f=的约定,56个字节):

代码语言:javascript
复制
g m=cycle"eo"!!sum[0|(a,b)<-m,(c,d)<-m,a<c,b>d]
f=(g.).zip
票数 5
EN

Code Golf用户

发布于 2016-03-20 07:48:39

Python 2,68个字节

代码语言:javascript
复制
lambda*M:"eo"[sum(a<b<M>A>B for a,A in zip(*M)for b,B in zip(*M))%2]

用法:

代码语言:javascript
复制
>>> f=lambda*M:"eo"[sum(a<b<M>A>B for a,A in zip(*M)for b,B in zip(*M))%2]
>>> f([8,3,5],[5,3,8])
'o'

计算两个压缩列表的反转对数,即从每个列表中的(a,A)(b,B)值与a<bA>B在同一索引处的值。这些比较组合为a<b<M>A>B,使用列表M大于任何数字的属性。然后取模2,并将其转化为eo

票数 4
EN

Code Golf用户

发布于 2016-03-20 02:58:46

Mathematica,77个字节

代码语言:javascript
复制
If[Mod[Plus@@Length/@(Join[{0},#]&)/@PermutationCycles[#][[1]],2]==0,"e","o"]&

我同意!

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

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

复制
相关文章

相似问题

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