给定一组9个数字,m[]以随机顺序只包含数字1到9,没有两个数字是相同的,它用任何一种语言创建一个程序,该程序将数字顺序(1、2、3等)重新排列。只需交换两个相邻的数字(如。1,3,2→1,2,3)。
m[]中。您的代码不必打印输出,但是重新排列的数组必须在m[]中。
发布于 2015-05-10 19:02:49
#//.{a___,b_,c_,d___}/;b>c:>{a,c,b,d}&这是一个未命名的函数,它接受一个数组,它应用一个替换规则,直到无法再找到模式。该模式是一个列表,其中包含两个连续的元素b和c,其中有b > c,并且规则要求交换b和c,但在其他情况下保持数组不动。
这里有很多语法糖,但是如果您知道一点Mathematica的话,代码实际上是非常可读的:
# //. {a___,b_,c_,d___} /; b>c :> {a,c,b,d} &
^ ^ ^ ^ ^ ^ ^
| | | | | | |
| | | | Declares an unnamed function |
| | | | | |
| The function's argument |
| | | | |
| Replace while possible... |
| | | |
| Zero or more list elements.
| | |
| A single list element
| |
| A condition for the pattern
|
| What to replace the pattern with发布于 2015-05-10 19:22:27
from random import*
while m!=sorted(m):p=randrange(8);m[p:p]=m.pop(p+1),博戈肖特 (也就是愚蠢的排序)方法:随机交换邻居元素,直到数组被排序。通常不到一秒。
2字节,这要归功于@xnor。
发布于 2015-05-11 08:15:23
for i in range(8)*8:m[i:i+2]=sorted(m[i:i+2])在列表周围循环,对连续的元素对进行排序。索引i通过0,1,2,3,4,5,6,7循环8次,这保证了所有元素都会冒泡并对列表进行排序。
https://codegolf.stackexchange.com/questions/49935
复制相似问题