标签: rosetta-stone

天际线问题

我刚刚在UVA的在线评审中遇到了这个小问题,并且认为它可能是一个小代码高尔夫的好候选人.

问题:

您将设计一个程序,以帮助建筑师根据城市中建筑物的位置绘制城市的天际线.为了使问题易于处理,所有建筑物都是矩形的,并且它们共用一个共同的底部(它们内置的城市非常平坦).这个城市也被视为二维的.建筑物由有序三元组(Li,Hi,Ri)指定,其中LiRi分别是建筑物i和Hi的左右坐标,是建筑物的高度.

替代文字

在下图中,建筑物在左侧显示为三元组

(1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28) 
Run Code Online (Sandbox Code Playgroud)

右边显示的天际线由序列表示:

1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0 
Run Code Online (Sandbox Code Playgroud)

输出应包含描述天际线的矢量,如上例所示.在天际线矢量(v1,v2,v3,... vn)中,i是偶数的vi表示水平线(高度).i是奇数的vi表示垂直线(x坐标).天际线矢量应该表示所采取的"路径",例如,从最小x坐标开始并在定义天际线的所有线上水平和垂直行进的bug.因此,天际线矢量中的最后一个条目将为0.坐标必须用空格分隔.

如果我不计算提供(测试)建筑物的声明并包括所有空格和制表符,我的解决方案在Python中长度为223个字符.

这是精简版:

B=[[1,11,5],[2,6,7],[3,13,9],[12,7,16],[14,3,25],[19,18,22],[23,13,29],[24,4,28]]

# Solution.

R=range
v=[0 for e in R(max([y[2] for y in B])+1)]
for b in B:
   for x in R(b[0], b[2]):
      if b[1]>v[x]:
         v[x]=b[1]
p=1
k=0 …
Run Code Online (Sandbox Code Playgroud)

code-golf rosetta-stone

51
推荐指数
7
解决办法
2万
查看次数

Code Golf:沙漏

挑战

按字符计算的最短代码根据用户输入输出沙漏.

输入由两个数字组成:第一个数字是大于1的整数,表示灯泡的高度,第二个数字是沙漏容量的百分比(0 - 100).

沙漏的高度是通过向沙漏的灯泡添加更多线条来实现的,因此尺寸2(最小可接受尺寸)将是:

_____
\   /
 \ /
 / \
/___\
Run Code Online (Sandbox Code Playgroud)

尺寸3将增加更多的线条,使灯泡能够适应更多的"沙子".

将使用角色绘制沙子x.顶部灯泡将包含N%的"沙子",而底部灯泡将包含(100 - N)%的沙子,其中N是第二个变量.

"容量"是通过沙漏所包含的空格()来衡量的.如果百分比不准确,则应将其四舍五入.

沙子是从外面抽出的,如果百分比结果是偶数,则给出右侧优先权.

测试用例

Input:
    3 71%
Output:
    _______
    \x  xx/
     \xxx/
      \x/
      / \
     /   \
    /__xx_\
Run Code Online (Sandbox Code Playgroud)
Input:
    5 52%
Output:
    ___________
    \         /
     \xx   xx/
      \xxxxx/
       \xxx/
        \x/
        / \
       /   \
      /     \
     /  xxx  \
    /xxxxxxxxx\
Run Code Online (Sandbox Code Playgroud)
Input:
    6 75%
Output:
     _____________
     \x         x/
      \xxxxxxxxx/
       \xxxxxxx/
        \xxxxx/
         \xxx/
          \x/
          / \
         /   \
        /     \
       /       \ …
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf rosetta-stone

51
推荐指数
6
解决办法
4192
查看次数

Code Golf:连接点

你可能还记得你小时候的这些图画,但现在是时候让电脑画出来了(完整的ascii辉煌).玩得开心!

描述:

输入是多行(由换行符终止),描述"字段".这个领域散布着"数字"(由空格分隔).所有行都可以被认为是相同的长度(您可以将空格填充到末尾).

  • 数字总是从1开始
  • 它们遵循自然数的排序:每个"下一个数字"都以1递增
  • 每个数字左右都有(至少)一个空格

任务:

以这些数字的自然顺序 绘制线条(1 -> 2 -> 3 -> ...N)(假设N <= 99),具有以下特征:

  1. 用' +'字符替换数字
  2. 对于水平线:使用' -'
  3. 垂直线:使用' |'
  4. 向左或向下或向右和向上: /
  5. 向左或向上或向右和向下: \

重要笔记:

  1. 当绘制类型为4和5的线时,您可以假设(给定点与坐标x1,y1和x2,y2连接)distance(x1,x2) == distance(y1,y2).或换句话说(如用户jball评论):"非水平或垂直对齐的连续元素始终与斜杠或反斜杠的斜率对齐".

  2. 重要的是遵循点连接的顺序(较新的线可以击出较旧的线).

- 样本输入1 -

                                  8 

                                  7  6 
                      10       9       

                                        5            

                                     3  4        
                 11 

                   12                       13    
          1                          2                     

- 样本输出1 -

                                 +                                
                                /|                                
                               / +--+                             
                     +--------+      \                            
                    /                 \                           
                   /                   +                          
                  /                    |                          
                 /                  +--+                          
                +                   |                             
                 \                  |                             
                  +------------------------+                      
         +--------------------------+        

- …

language-agnostic code-golf rosetta-stone

49
推荐指数
10
解决办法
3989
查看次数

Code Golf:Happy Primes!

这是周日,一轮代码高尔夫的时间!

挑战

通过字符计数写出最短的源代码,以确定输入数字是"幸福素数","悲伤素数","快乐非素数"还是"悲伤非素数".

输入

输入应该是来自命令行参数或stdin的整数.不要担心处理大数字,但如果可以/想要这样做.对于小于1的输入值,行为将是未定义的,但是1具有明确的结果.

产量

输出应该打印数字的类型:"快乐素数","悲伤素数","快乐非素数"或"悲伤的非素数".尾随换行符是可选的.

例子

$ happyprime 139
happy prime
$ happyprime 2
sad prime
$ happyprime 440
happy non-prime
$ happyprime 78
sad non-prime
Run Code Online (Sandbox Code Playgroud)

定义

以防你的大脑需要复习.

快乐的号码

来自维基百科,

快乐数由下面的过程来定义.从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到数字等于1(它将保持不变),或者在一个不包括1的循环中无休止地循环.这些数字这个过程在1结束的是快乐的数字,而那些不以1结尾的是不愉快的数字(或悲伤的数字).

例如,

  • 139
  • 1 ^ 2 + 3 ^ 2 + 9 ^ 2 = 91
  • 9 ^ 2 + 1 ^ 2 = 82
  • 8 ^ 2 + 2 ^ 2 = 68
  • 6 ^ 2 + 8 ^ 2 = 100
  • 1 ^ 2 …

language-agnostic code-golf rosetta-stone

49
推荐指数
12
解决办法
6272
查看次数

Code Golf:Triforce

这是受到这个主题的启发:http://www.allegro.cc/forums/thread/603383

问题

假设用户为您提供1到7之间的数字输入.应从控制台输入,参数不太理想.

输入为1时,打印以下内容:

***********
 ********* 
  *******    
   *****   
    ***    
     *     
Run Code Online (Sandbox Code Playgroud)

大于1的值应生成模式的倍数,以上面的值结束,但对称堆叠.例如,3应该打印以下内容:

*********** *********** ***********
 *********   *********   ********* 
  *******     *******     *******  
   *****       *****       *****   
    ***         ***         ***    
     *           *           *     
      *********** ***********
       *********   ********* 
        *******     *******  
         *****       *****   
          ***         ***    
           *           *     
            ***********
             ********* 
              *******  
               *****   
                ***    
                 *     
Run Code Online (Sandbox Code Playgroud)

如果您也打印相反的奖励积分.

      *********** ***********
       *********   ********* 
        *******     *******  
         *****       *****   
          ***         ***    
           *           *     
            ***********
             ********* 
              *******  
               *****   
                ***    
                 *     
                 *     
                ***    
               *****   
              *******  
             ********* 
            ***********
           *           *     
          ***         ***    
         ***** …
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf rosetta-stone

48
推荐指数
11
解决办法
3727
查看次数

代码高尔夫:莫里斯序列

挑战

按字符数排序的最短代码将输出Morris数字序列.在莫里斯数列,又称外观数列是数字的顺序启动,如下所示:

1, 11, 21, 1211, 111221, 312211, ...

您可以无限生成序列(即,您不必生成特定的数字).

I/O期望

该程序不需要任何输入(但是接受输入的奖励点,从而提供从任意任意起点或数字开始的选项).至少你的程序必须从1.

输出至少是预期的顺序:

1
11
21
1211
111221
312211
...
Run Code Online (Sandbox Code Playgroud)

额外信用

如果你需要额外的功劳,你需要做这样的事情:

$ morris 1
1
11
21
1211
111221
312211
...

$ morris 3
3
13
1113
3113
132113
...
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf rosetta-stone

47
推荐指数
12
解决办法
4834
查看次数

Code Golf:Tic Tac Toe

按字符数发布您的最短代码,以检查玩家是否赢了,如果是,那么.

假设你在变量b(board)中有一个整数数组,它包含Tic Tac Toe板,以及玩家的移动:

  • 0 =没有设置
  • 1 =玩家1(X)
  • 2 =玩家2(O)

所以,鉴于阵列b = [ 1, 2, 1, 0, 1, 2, 1, 0, 2 ]将代表董事会

X|O|X
-+-+-
 |X|O
-+-+-
X| |O
Run Code Online (Sandbox Code Playgroud)

对于这种情况,您的代码应该输出1以指示玩家1赢了.如果没有人赢了你可以输出0false.

我自己的(Ruby)解决方案即将推出.

编辑:对不起,忘了将其标记为社区维基.您可以假设输入格式正确,不必进行错误检查.


更新:请以函数的形式发布您的解决方案.大多数人已经这样做了,但有些人没有,这不完全公平.电路板作为参数提供给您的功能.结果应该由函数返回.该函数可以具有您选择的名称.

code-golf tic-tac-toe rosetta-stone

42
推荐指数
7
解决办法
8340
查看次数

Code Golf:浪潮

挑战

按字符计数的最短代码,用于从输入字符串生成波形.

通过提升(第1行)较高字符并使(第1行)降低较低字符来生成波.相等的字符保持在同一行(没有提升或降级).

输入仅由小写字符和数字组成,字母被认为高于数字.

测试用例:

Input:
    1234567890qwertyuiopasdfghjklzxcvbnm

Output:
                                 z
                                l x v n
                               k   c b m
                              j
                             h
                            g
                   y   p s f
                  t u o a d
               w r   i
            9 q e
           8 0
          7
         6
        5
       4
      3
     2
    1

Input:
    31415926535897932384626433832795028841971693993751058209749445923078164062862

Output:
                9 9   8 6 6
         9 6   8 7 3 3 4 2 4  8   9   88
    3 4 5 2 5 5     2       33 3 7 5 2  4 9   9 99 …
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf rosetta-stone

41
推荐指数
11
解决办法
6203
查看次数

代码高尔夫:Mandelbrot套装

代码高尔夫的常用规则.这是python中的一个实现作为示例

from PIL import Image

im = Image.new("RGB", (300,300))
for i in xrange(300):
    print "i = ",i
    for j in xrange(300):
        x0 = float( 4.0*float(i-150)/300.0 -1.0)
        y0 = float( 4.0*float(j-150)/300.0 +0.0)
        x=0.0
        y=0.0
        iteration = 0
        max_iteration = 1000
        while (x*x + y*y <= 4.0 and iteration < max_iteration):
            xtemp = x*x - y*y + x0
            y = 2.0*x*y+y0
            x = xtemp
            iteration += 1
        if iteration == max_iteration:
            value = 255 
        else:
            value = iteration*10 % 255
        print value …
Run Code Online (Sandbox Code Playgroud)

code-golf fractals mandelbrot rosetta-stone

40
推荐指数
13
解决办法
3810
查看次数

代码高尔夫:数字到单词

代码高尔夫系列似乎相当受欢迎.我遇到了一些将数字转换为单词表示的代码.一些例子是(编程乐趣的2的权力):

  • 2 - >两个
  • 1024 - >一千二十四
  • 1048576 - >百万四万八千七百六十六

我的同事出现的算法差不多有两百行.似乎会有更简洁的方法来做到这一点.

现行指南:

  • 以任何编程语言欢迎提交的内容(我向PhiLho道歉,因为最初对此不太清楚)
  • 最大输入为2 ^ 64(请参阅以下链接,感谢mmeyers)
  • 英语输出的缩放比例较低,但欢迎使用任何算法.只需对编程语言一起评论所使用的方法.

language-agnostic nlp code-golf rosetta-stone

39
推荐指数
13
解决办法
1万
查看次数