首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法编织-为母亲节

算法编织-为母亲节
EN

Code Golf用户
提问于 2014-05-11 15:13:33
回答 3查看 1.1K关注 0票数 11

任务:

您的任务是创建一个程序,当给定一组股数和一个辫子的迭代次数时,该程序将指示每条链的去向。规则如下:

  • 链数总是奇数,在3到6000之间(包括在内)。
  • 开始时,这些链将被划分为两个(几乎)相等的束,即leftright。当你开始的时候,left会有更多的链。

投入7:

代码语言:javascript
复制
/ / / / \ \ \
1 2 3 4 5 6 7
  • 每一次迭代,有更多股的边的最外层的链将被放置在中心面对相反的方向。中心被定义为相对的面向链:////middle\\\之间。

1次输入7的迭代(第1串被移动到中心):

代码语言:javascript
复制
/ / / \ \ \ \
2 3 4 1 5 6 7

示例:

输入:

代码语言:javascript
复制
3 4

计算:

代码语言:javascript
复制
1 2 3
 \
2 1 3
   /
2 3 1
 \
3 2 1
   /
3 1 2

输出:

代码语言:javascript
复制
3 1 2

规则:

  • 您不需要显示字符串方向的斜线,只需要显示数字。
  • 您只需要在最后一次迭代之后显示数字。
  • 您的输出将是以空格分隔的字符串ids。
  • 输入将以下列形式显示:strands [space] iterations
  • 链的数目总是奇数,而3<=x<=6000
  • 这是密码-高尔夫,所以最短的代码赢了!
EN

回答 3

Code Golf用户

回答已采纳

发布于 2014-05-11 15:54:12

GolfScript,33个字符

代码语言:javascript
复制
~\),(@{:^1$[=]:y-.,2//y*^~}*;' '*

输入必须在stdin上提供。

示例(您可以测试在线):

代码语言:javascript
复制
> 7 1
2 3 4 1 5 6 7

> 3 4
3 1 2

> 11 2
2 3 4 5 6 11 1 7 8 9 10
票数 6
EN

Code Golf用户

发布于 2014-05-11 22:32:47

Python 2 (109) /Python3 (121)

Python 2

代码语言:javascript
复制
s,n=map(int,raw_input().split())
b=range(s)
for i in range(n):b[s/2:s/2]=[b.pop(0-i%2)]
for x in b:print x+1,

Python 3

代码语言:javascript
复制
s,n=map(int,input().split())
b=list(range(s))
for i in range(n):b[s//2:s//2]=[b.pop(0-i%2)]
for x in b:print(x+1,end=' ')

这段代码一定是被Python 2贿赂的,以展示它相对于Python 3的优势:范围是列表,除法是整数,打印不是开始换行符。奇怪的0-i%2是因为-i%2计算为(-i)%2

可能有一种比迭代更有效的方法,即直接计算每个最终结果。编织手术的周期是2*s,所以不会那么复杂。

票数 2
EN

Code Golf用户

发布于 2014-05-12 18:38:21

Java,270个字符

高尔夫球:

代码语言:javascript
复制
import java.util.*;class B{public static void main(String[] a){int n=Integer.valueOf(a[0]),t=Integer.valueOf(a[1]),i=0;List<Integer> r=new ArrayList<Integer>();for(;i<n;i++){r.add(i+1);}for(i=0;i<t;i++){int k=i%2==0?0:n-1;r.add(n/2,r.remove(k));}System.out.println(r);}}

非高尔夫:

代码语言:javascript
复制
import java.util.*;
public class Braid {
    public static void main(String[] args) {
        int num = Integer.valueOf(args[0]);
        int iterations = Integer.valueOf(args[1]);

        //populate array
        List<Integer> arr = new ArrayList<Integer>();
        for (int i=0; i < num; i++) {
            arr.add(i+1);
        }
        for (int i=0; i < iterations; i++) {
            int index = i%2==0?0:num-1; 
            arr.add(num/2, arr.remove(index));
        }
        System.out.println(arr);
    }
}

在线运行

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

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

复制
相关文章

相似问题

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