标签: code-golf

Code Golf:相当于Excel列名的数字

挑战

按字符数排序的最短代码,将输出Excel列字符串的数字等效值.

例如,A列为1,B为2,依此类推.一旦你点击Z,下一列变为AA,然后AB依此类推.

测试用例:

A:    1
B:    2
AD:   30
ABC:  731
WTF:  16074
ROFL: 326676
Run Code Online (Sandbox Code Playgroud)

代码计数包括输入/​​输出(即完整程序).

excel code-golf

76
推荐指数
19
解决办法
5万
查看次数

Code Golf:玩多维数据集

挑战

按字符数最短的代码,根据用户输入输出玩砖塔系列.

输入将是一系列数字(正数,负数和零),表示当前立方体塔在其索引之后的高度.高度为0表示没有塔并且间隔开.

立方体塔由堆积的立方体组成.如果当前索引上的输入数字为正,则立方体会上升,如果输入数字为负数,则立方体会下降.使用以下4行绘制单个立方体:

   __
 /__ /|
|   | |
|___|/

立方体是3D - 这意味着当两个塔彼此相邻放置时它们彼此隐藏,产生假视角.

可以假设所有输入都是有效且没有错误 - 每个数字在一行上用空格分隔,至少有一个数字.

测试用例

Input:
    2 -3 -2 1 2 -1
Output:
       __              __
     /__ /|          /__ /|
    |   | |        _|   | |
    |___|/|      /__|___|/|
    |   | |__  _|   |   | |__
    |___|/__ /__|___|___|/__ /|
        |   |   | |     |   | |
        |___|___|/|     |___|/
        |   |   | |
        |___|___|/
        |   | |
        |___|/

Input:
    1 2 3 4 -2 4 3 2 1
Output:
                   __ …

language-agnostic code-golf rosetta-stone

61
推荐指数
7
解决办法
3386
查看次数

将字符串转换为摩尔斯电码

挑战

按字符数排序的最短代码,它将仅使用字母字符(大写和小写),数字,逗号,句点和问号输入字符串,并返回摩尔斯电码中字符串的表示形式.摩尔斯电码代码输出应包括一个短音(-ASCII 0x2D)用于长音(AKA'dah')和一个点(.,ASCII 0x2E)用于短蜂鸣音(AKA'dit').

每个字母应用空格(' 'ASCII 0x20)分隔,每个字应用正斜杠(/ASCII 0x2F)分隔.

摩尔斯电码表:

替代文字http://liranuna.com/junk/morse.gif

测试用例:

Input:
    Hello world

Output:
    .... . .-.. .-.. --- / .-- --- .-. .-.. -..
Run Code Online (Sandbox Code Playgroud)
Input:
    Hello, Stackoverflow.

Output:
    .... . .-.. .-.. --- --..-- / ... - .- -.-. -.- --- ...- . .-. ..-. .-.. --- .-- .-.-.-
Run Code Online (Sandbox Code Playgroud)

代码计数包括输入/​​输出(即完整程序).

language-agnostic code-golf

57
推荐指数
9
解决办法
2万
查看次数

Code Golf:自来水

挑战

按字符排序的最短代码,用于从输入中识别和标记土地的ASCII表示中的水凹陷.

输入将是景观的ASCII表示,具有丘陵,山谷和平坦的土地.该程序应模拟景观如果被淹没将会是什么样子 - 用水填充所有山谷(角色x).

景观将始终以角色开始和停止,_并且至少2个字符长,输入最短__.

山被定义为加高,不应该用水填充:

  __
_/  \_
Run Code Online (Sandbox Code Playgroud)

山谷被定义为凹陷,将被水填满,直到遇到平地:

_    _
 \__/
Run Code Online (Sandbox Code Playgroud)

可以假定输入是干净的,并且仅由字符space(), newline (\n),下划线(_)以及前向和后向斜杠(/\)组成.输入可以看作是一条连续线,以及包含模糊线输入的任何输入,如_/_

_   _
 \_/
 / \
Run Code Online (Sandbox Code Playgroud)

被认为无效.

关于水下洞穴,如果洞穴水位高于水位,则应保持水位.

测试用例

Input:
    __/\__
          \__              
             \       ___       ___________
             /      /   \_     \_
             \_____/      \__  _/
                             \/
Output:

    __/\__
          \__              
             \       ___       ___________
             /xxxxxx/   \xxxxxx\_
             \xxxxx/      \xxxxx/
                             \/
Run Code Online (Sandbox Code Playgroud)
Input:
                                         __       ___
                                        /  \_____/
                                       / _______
                         ________     /  \     /
                   _____/        \ …
Run Code Online (Sandbox Code Playgroud)

language-agnostic code-golf rosetta-stone

53
推荐指数
4
解决办法
3156
查看次数

Code Golf:正则表达式解析器

目标

今天的Code Golf挑战是尽可能少地创建一个正则表达式解析器.

语法

不,我不是要求你匹配Perl风格的正则表达式.毕竟,对于那些人来说,已经有一个非常可靠的翻译!:-)

以下是您需要了解的有关此挑战的正则表达式语法的所有信息:

  • 术语被定义为一个单一的文字字符,或分组括号内的正则表达式().
  • *(星号)字符表示Kleene星操作在上一届.这意味着前一个词的零个或多个连接在一起.
  • +(加)字符表示一个方便快捷方式:a+相当于aa*,这意味着一个或多个之前的术语的.
  • ?(问号)字符代表零或前项之一.
  • 所述|(管)字符代表的交替,也就是说,在任一侧上的正则表达式可以在比赛中使用.
  • 假设所有其他字符都是字面的.您可以假设所有其他角色都在其中[0-9A-Za-z](即所有英语字母数字).

或者,换一种说法:*/ +/ ?具有最高的优先级,然后串联,然后交替.由于交替的优先级低于连接,因此在没有括号的正则表达式中使用它会导致它被绑定到每一侧的完整正则表达式.*+?,在另一方面,将只适用于前一学期.

挑战

您的挑战是编写一个程序来编译或解释正则表达式(如上所定义),然后针对它测试一些字符串.

我要把输入留给你了.我的建议是,正则表达式可能应该首先出现,然后对任何数量的字符串进行测试; 但如果你想让它持久,那很好.如果你想把所有东西放在命令行参数或stdin,或命令行中的正则表达式和stdin中的字符串,或其他什么,那很好.只显示一两个用法示例.

输出应该是truefalse每行一个,以反映正则表达式是否匹配.

笔记:

  • 我不应该这样说......但是不要在你的语言中使用任何正则表达式库!您需要自己编译或解释模式.(编辑:如果需要拆分或连接字符串,可以使用正则表达式.您无法使用它直接解决问题,例如,将输入正则表达式转换为语言正则表达式并使用它.)
  • 正则表达式必须完全匹配此挑战的输入字符串.(等效地,如果您熟悉类似Perl的正则表达式,则假设所有匹配的字符串开始和结束都已到位)
  • 对于这个挑战,所有特殊字符()*+?|都不会按字面意思出现.如果输入中有一个,可以安全地假设没有模式可以匹配相关字符串.
  • 应以区分大小写的方式评估要测试的输入字符串.

例子

对于这些示例,我假设一切都是在命令行参数中完成的,首先是regex.(正如我上面所说,输入取决于你.)myregex这里代表你对程序的调用.

> myregex easy easy Easy hard
true
false
false

> myregex ab*a aa …
Run Code Online (Sandbox Code Playgroud)

regex language-agnostic code-golf rosetta-stone

53
推荐指数
6
解决办法
7872
查看次数

天际线问题

我刚刚在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:Fractran

挑战

编写一个充当Fractran解释器的程序.任何语言的字符数最短的翻译都是赢家.你的程序必须有两个输入:要执行的fractran程序和输入整数n.该程序可以是任何方便您的程序的形式 - 例如,2元组列表或平面列表.输出必须是单个整数,是执行结束时寄存器的值.

Fractran

Fractran是John Conway发明的一种微不足道的深奥语言.fractran程序由一系列正分数和一个初始状态n组成.解释器维护一个程序计数器,最初指向列表中的第一个部分.Fractran程序以下列方式执行:

  1. 检查当前状态的产品和当前在程序计数器下的分数是否为整数.如果是,则将当前状态乘以当前分数,并将程序计数器重置为列表的开头.
  2. 推进程序计数器.如果到达列表的末尾,则暂停,否则返回步骤1.

有关Fractran如何以及为何如此工作的详细信息,请参阅esolang条目以及关于良好数学/错误数学的此条目.

测试向量

节目: [(3,2)]
输入: 72(2 3 3 2)
输出: 243(3 5)

节目: [(3,2)]
输入: 1296(2 4 3 4)
输出: 6561(3 8)

节目: [(455,33),(11,13),(1,11),(3,7),(11,2),(1,3)]
输入: 72(2 3 3 2)
输出: 15625(5 6)

奖金测试矢量:

您的提交无需正确执行此最后一个程序即可成为可接受的答案.但是如果有的话会感到荣幸!

节目: [(455,33),(11,13),(1,11),(3,7 ),(11,2 ),(1,3)]
输入: 60466176(2 10 3 10)
输出: 7888609052210118054117285652827862296732064351090230047702789306640625(5 100)

提交和评分

程序严格按字符长度排列 - 最短是最好的.随意提交一个布局合理,文档化和代码的"缩小"版本,以便人们可以看到正在发生的事情.

语言'J'不可接受.这是因为在其中一个链接页面上已经有一个众所周知的J解决方案.如果你是J粉丝,抱歉!

然而,作为额外奖励,任何能够 fractran中提供工作分形翻译 …

code-golf esoteric-languages

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

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
查看次数