Tag: 代码高尔夫

代码高尔夫:有限状态机!

有限状态机 确定性有限状态机是一种简单的计算模型,在基础CS课程中被广泛用作自动机理论的介绍。 它是一个简单的模型,相当于正则expression式,它决定了某个inputstring是Accepted还是Rejected 。 抛开一些手续 ,一个有限状态机的运行包括: 字母表 ,一组字符。 状态 ,通常可视化为圆形。 其中一个州必须是开始状态 。 一些州可能会接受 ,通常可视化为双圈。 过渡 ,通常可视化为国家之间的定向拱,指向与字母表相关联的状态之间的链接。 inputstring , 字母字符列表。 机器上的运行从起始状态开始。 inputstring的每个字母都被读取; 如果在当前状态和对应于该字母的另一个状态之间存在转换,则当前状态改变为新状态。 读完最后一个字母后,如果当前状态为接受状态,则接受inputstring。 如果最后一个状态不是接受状态,或者一个字母在运行过程中没有相应的状态,则inputstring将被拒绝。 注:这个短暂的破坏远非FSM的全面正式定义; 维基百科的精美文章是对这个主题的一个很好的介绍。 例 例如,下面的机器会告诉从二进制数字中,从左到右读取的偶数是否为0 : 字母表是集{0,1} 。 状态是S1和S2。 (S1, 0) -> S2 , (S1, 1) -> S1 , (S2, 0) -> S1 , (S2, 1) -> S2 。 inputstring是任何二进制数字,包括一个空string。 规则: 以您select的语言实施FSM。 […]

代码高尔夫: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 […]

代码 – 高尔夫:编译和崩溃的最短程序是什么?

这有点儿乐趣 你能制定最短的程序,编译但是什么都不做,但是执行时立即崩溃吗? 因此,“崩溃”是指程序停止时出现错误情况(例如核心转储)。 有一种语言崩溃比C使用gcc编译器更快(7个字符)? [我留下这个答案让别人find。] (应该可以使用编译器标志,否则7现在不行,编译器检查好多了。) [评估结果]我无法标记一个单一的答案,因为有多个正确的多种语言。 将一个答案取消给另一个答案是不公平的。 请用选票select最佳答案。

代码高尔夫:井字游戏

根据人物数量发布最短代码,以检查玩家是否赢了,如果是,哪个。 假设你在一个variablesb (棋盘)中有一个整数数组,这个variables保存井字棋板,以及玩家的移动位置: 0 =没有设置 1 =玩家1(X) 2 =玩家2(O) 所以,给定数组b = [ 1, 2, 1, 0, 1, 2, 1, 0, 2 ]代表板 X|O|X -+-+- |X|O -+-+- X| |O 对于这种情况,你的代码应该输出1来表示玩家1赢了。 如果没有人赢了,你可以输出0或false 。 我自己的(Ruby)解决scheme即将推出。 编辑 :对不起,忘记标记为社区维基。 你可以假设input是正确的,不需要检查错误。 更新 :请以function的forms发布您的解决scheme。 大多数人已经这样做了,但有些人没有,这不完全公平。 该板作为参数提供给您的function。 结果应该由函数返回。 该function可以有你select的名称。

天际线问题

我刚刚在UVA的在线裁判遇到这个小问题,并认为它可能是一个小代码高尔夫球的一个很好的候选人。 问题: 您将devise一个计划来帮助build筑师根据城市build筑物的位置绘制城市的天际线。 为了解决问题,所有的build筑物都是矩形的,并且共有一个共同的底部(他们build造的城市非常平坦)。 这个城市也被视为二维的。 build筑物由有序三元组(Li,Hi,Ri)指定 ,其中Li和Ri分别是build筑物i的左侧和右侧坐标,而Hi是build筑物的高度。 在下图中,build筑物左侧显示三元组 (1,11,5), (2,6,7), (3,13,9), (12,7,16), (14,3,25), (19,18,22), (23,13,29), (24,4,28) 右侧显示的天际线由以下顺序表示: 1, 11, 3, 13, 9, 0, 12, 7, 16, 3, 19, 18, 22, 3, 23, 13, 29, 0 输出应该由描述天际线的vector组成,如上例所示。 在天际线vector(v1,v2,v3,… vn)中 , vi使得i是偶数,表示水平线(高度)。 vi使得我是一个奇数,表示一个垂直线(x坐标)。 天际线向量应该代表所采取的“path”,例如,从最小x坐标开始的错误,并在所有定义天际线的行上水平和垂直行进。 因此天际线vector中的最后一个条目将是0.坐标必须用空格分隔。 如果我不计算所提供的(testing)build筑物的声明,并且包括所有空格和制表符,我的解决scheme是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 […]

代码高尔夫:正则expression式分析器

目标 今天的Code Golf挑战是尽可能less地创build一个正则expression式parsing器。 语法 不,我没有要求你匹配Perl风格的正则expression式。 毕竟,已经有一个非常可靠的解释器! 🙂 以下是关于这个挑战的正则expression式语法的所有知识: 一个术语被定义为单个文字字符,或者在分组括号()的正则expression式。 * (星号)字符表示上一个TERM中的Kleene星形运算 。 这意味着零个或更多以前的术语连接在一起。 + (加号)字符表示一个方便的捷径: a+等同于aa* ,意思是前面的一个或多个术语。 这个? (问号)字符代表零或前一个字词之一。 | (pipe)字符表示交替,这意味着任何一方的REGULAR EXPRESSIONS都可用于匹配。 所有其他字符被假定为文字。 你可以假定所有其他的字符都在[0-9A-Za-z] (即所有的英文字母数字)。 换句话说: * / + / ? 具有最高优先级,然后连接,然后交替。 由于交替的优先级比连接低,因此在没有括号的正则expression式中它的使用会导致它被绑定到每一边的完整正则expression式。 *和+和? 另一方面,只适用于前一个任期。 挑战 你的挑战是编写一个程序来编译或解释一个正则expression式(如上面定义的),然后testing一些string。 我将离开input给你。 我的build议是,正则expression式可能应该是第一位的,然后是任何数量的string来testing它。 但如果你想让它持续下去,那很好。 如果你想把所有的命令行参数或标准input,命令行中的正则expression式和标准input中的string,或者其他任何东西,那很好。 只显示一个或两个用法示例。 输出应该是true或false ,每行一个,以反映正则expression式是否匹配。 笔记: 我不需要说这个…但是不要在你的语言中使用任何正则expression式库! 您需要自己编译或解释模式。 ( 编辑:如果需要分割或连接string,则可以使用正则expression式,但不能直接使用它来解决问题,例如,将input正则expression式转换为语言正则expression式并使用它)。 正则expression式必须完全匹配这个挑战的inputstring。 (相当于,如果您熟悉类似于Perl的正则expression式,则假定所有匹配的string的起始和结束锚定都已到位) 对于这个挑战,所有的特殊字符()*+?| 预计不会真正发生。 如果在input中出现,则假定没有模式可以匹配所讨论的string是安全的。 input要testing的string应以区分大小写的方式进行评估。 […]

将string转换成莫尔斯电码

挑战 字符计数的最短代码,它将只使用字母字符(大写和小写),数字,逗号,句号和问号input一个string,并返回莫尔斯码中的string表示forms。 莫尔斯电码的输出应该包含一个长音(AKA'dah')的短划线( – ,ASCII 0x2D)和短音(AKA'dit')的一个点( . ,ASCII 0x2E)。 每个字母应该用空格分隔( ' ' ,ASCII 0x20),每个字应该用正斜杠( / ,ASCII 0x2F)分隔。 莫尔斯电码表: 替代文字http://liranuna.com/junk/morse.gif testing用例: Input: Hello world Output: …. . .-.. .-.. — / .– — .-. .-.. -.. Input: Hello, Stackoverflow. Output: …. . .-.. .-.. — –..– / … – .- -.-. -.- — …- . .-. […]

build立给定文本中最常用词的ASCII图表

挑战: build立给定文本中最常用单词的ASCII图表。 规则: 只接受az和AZ (字母字符)作为单词的一部分。 忽略套pipe( She == she为我们的目的)。 忽略下面的话(我知道这是相当的任意的): the, and, of, to, a, i, it, in, or, is 澄清:考虑don't :这将被视为az和AZ范围内的两个不同的“单词”:( don和t )。 可选 (现在正式更改规范为时已晚),您可以select放弃所有单个字母的单词(这可能会缩短忽略列表)。 parsing给定的text (读取通过命令行参数指定的文件或通过input;假设us-ascii )并为我们构build一个具有以下特征的word frequency chart : 显示22个最常用单词(按降序排列)的图表(请参阅下面的示例)。 条width表示单词的出现次数(按比例)。 追加一个空格并打印单词。 确保这些条(总是空格 – 空格)总是适合的 : bar + [space] + word + [space]应该总是<= 80字符(确保考虑到可能有不同的条和字长度:例如:最常用的单词可能会比第一个单词长得多,而在频率上差别不大)。 在这些约束条件下最大化条宽,并适当缩放条(根据它们所代表的频率)。 一个例子: 这个例子的文本可以在这里find ( 刘易斯·卡罗尔的“爱丽丝梦游仙境” )。 这个特定的文本将产生下面的图表: _________________________________________________________________________ […]

什么是导致堆栈溢出的最短代码?

为了纪念Stack Overflow的公开发行,导致堆栈溢出的最短代码是什么? 欢迎任何语言。 ETA:为了清楚这个问题,看看我是一个偶然的Scheme用户:tail-call“recursion”是真正的迭代,任何可以通过体面的编译器相对简单地转换成迭代解决scheme的解决scheme将不会被算。 😛 ETA2:我现在select了一个“最佳答案”。 看到这个职位的理由。 感谢大家的贡献! 🙂