我刚刚在UVA的在线评审中遇到了这个小问题,并且认为它可能是一个小代码高尔夫的好候选人.
问题:
您将设计一个程序,以帮助建筑师根据城市中建筑物的位置绘制城市的天际线.为了使问题易于处理,所有建筑物都是矩形的,并且它们共用一个共同的底部(它们内置的城市非常平坦).这个城市也被视为二维的.建筑物由有序三元组(Li,Hi,Ri)指定,其中Li和Ri分别是建筑物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) 按字符计算的最短代码根据用户输入输出沙漏.
输入由两个数字组成:第一个数字是大于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) 你可能还记得你小时候的这些图画,但现在是时候让电脑画出来了(完整的ascii辉煌).玩得开心!
描述:
输入是多行(由换行符终止),描述"字段".这个领域散布着"数字"(由空格分隔).所有行都可以被认为是相同的长度(您可以将空格填充到末尾).
任务:
以这些数字的自然顺序
绘制线条(1 -> 2 -> 3 -> ...N)
(假设N <= 99),具有以下特征:
+
'字符替换数字-
'|
'/
\
重要笔记:
当绘制类型为4和5的线时,您可以假设(给定点与坐标x1,y1和x2,y2连接)distance(x1,x2) == distance(y1,y2)
.或换句话说(如用户jball评论):"非水平或垂直对齐的连续元素始终与斜杠或反斜杠的斜率对齐".
重要的是遵循点连接的顺序(较新的线可以击出较旧的线).
- 样本输入1 -
8 7 6 10 9 5 3 4 11 12 13 1 2
- 样本输出1 -
+ /| / +--+ +--------+ \ / \ / + / | / +--+ + | \ | +------------------------+ +--------------------------+
- …
这是周日,一轮代码高尔夫的时间!
通过字符计数写出最短的源代码,以确定输入数字是"幸福素数","悲伤素数","快乐非素数"还是"悲伤非素数".
输入应该是来自命令行参数或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结尾的是不愉快的数字(或悲伤的数字).
例如,
这是受到这个主题的启发: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) 按字符数排序的最短代码将输出Morris数字序列.在莫里斯数列,又称外观数列是数字的顺序启动,如下所示:
1, 11, 21, 1211, 111221, 312211, ...
您可以无限生成序列(即,您不必生成特定的数字).
该程序不需要任何输入(但是接受输入的奖励点,从而提供从任意任意起点或数字开始的选项).至少你的程序必须从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) 按字符数发布您的最短代码,以检查玩家是否赢了,如果是,那么.
假设你在变量b
(board)中有一个整数数组,它包含Tic Tac Toe板,以及玩家的移动:
所以,鉴于阵列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赢了.如果没有人赢了你可以输出0
或false
.
我自己的(Ruby)解决方案即将推出.
编辑:对不起,忘了将其标记为社区维基.您可以假设输入格式正确,不必进行错误检查.
更新:请以函数的形式发布您的解决方案.大多数人已经这样做了,但有些人没有,这不完全公平.电路板作为参数提供给您的功能.结果应该由函数返回.该函数可以具有您选择的名称.
按字符计数的最短代码,用于从输入字符串生成波形.
通过提升(第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) 代码高尔夫的常用规则.这是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) 代码高尔夫系列似乎相当受欢迎.我遇到了一些将数字转换为单词表示的代码.一些例子是(编程乐趣的2的权力):
我的同事出现的算法差不多有两百行.似乎会有更简洁的方法来做到这一点.
现行指南: