标签: code-golf

代码高尔夫 - 十六进制到(原始)二进制转换

在回答关于十六进制到(原始)二进制转换的这个问题时,评论表明它可以用"5-10行C或任何其他语言"来解决.

我确信(某些)脚本语言可以实现,并希望看到如何.对于C,我们能否证明评论是真的吗?

注意:这并不意味着十六进制到ASCII二进制 - 特别是输出应该是对应于输入ASCII十六进制的原始八位字节流.此外,输入解析器应跳过/忽略空格.

编辑(Brian Campbell)为了保持一致性,我可以提出以下规则吗?如果您认为这些内容没有帮助,请随意编辑或删除这些内容,但我认为,由于已经讨论过某些案例应该如何运作,因此一些澄清会有所帮助.

  1. 程序必须从stdin读取并写入stdout(我们也可以允许读取和写入在命令行上传入的文件,但我无法想象在任何语言中都会比stdin和stdout更短)
  2. 该程序必须仅使用您的基础包含的软件包,标准语言分发.对于C/C++,这意味着它们各自的标准库,而不是POSIX.
  3. 程序必须编译或运行,没有任何特殊选项传递给编译器或解释器(因此,'gcc myprog.c'或'python myprog.py'或'ruby myprog.rb'都可以,而'ruby -rscanf myprog.rb '是不允许的;要求/导入模块会计入您的字符数).
  4. 程序应该读取由相邻的十六进制数字对(大写,小写或混合大小写)表示的整数字节,可选地由空格分隔,并将相应的字节写入输出.每对十六进制数字首先写入最重要的半字节.
  5. 程序对无效输入的行为(字符除外[a-fA-F \t\r\n],将单个字节中的两个字符分开的空格,输入中的奇数个十六进制数字)是未定义的; 任何行为(除了主动损坏用户的计算机或其他东西)都是可接受的(抛出错误,停止输出,忽略坏字符,将单个字符视为一个字节的值,都可以)
  6. 程序可能不会写入额外的字节输出.
  7. 代码按源文件中最少的总字节数进行评分.(或者,如果我们想要对原始挑战更加真实,那么得分将基于最低代码行数;在这种情况下,我会对每行施加80个字符的限制,否则你会得到一堆1线的关系).

binary hex code-golf

12
推荐指数
4
解决办法
6310
查看次数

Code Golf:从文本中快速构建关键字列表,包括实例数

我已经用PHP为自己设计了这个解决方案,但我很好奇它是如何以不同的方式完成的 - 甚至更好.我最感兴趣的两种语言是PHP和Javascript,但我很想知道今天用其他主要语言(主要是C#,Java等)可以多快地完成这项工作.

  1. 仅返回出现次数大于X的单词
  2. 仅返回长度大于Y的单词
  3. 忽略像"和,是,等等"这样的常用术语
  4. 在处理之前随意剥去标点符号(即"约翰"成为"约翰")
  5. 返回集合/数组中的结果

额外信用

  1. 将引用的陈述保持在一起,(即"它们'太好了,显然不是真的'")
    实际的陈述是"太好不可能"

额外信用额度

  1. 您的脚本可以根据它们在一起找到的频率来确定应该保存在一起的单词吗?这是在事先不知道单词的情况下完成的.例:
    *"果蝇在医学研究方面是一件好事.过去对果蝇进行了大量的研究,并取得了许多突破.未来,果蝇将继续研究,但是我们的方法可能会改变."*
    显然,这里的词是"果蝇",这对我们来说很容易找到.你的search'n'scrape脚本也可以确定吗?

源文:http://sampsonresume.com/labs/c.txt

答案格式

  1. 除了操作持续多长时间之外,看到代码,输出的结果会很棒.

language-agnostic code-golf text-parsing rosetta-stone

12
推荐指数
2
解决办法
1270
查看次数

Code Golf:Frobenius Number

编写计算给定正数集的Frobenius数的最短程序.Frobenius数是最大数,不能写为集合中数字的正倍数之和.

例如:对于该组中的鸡McNugget的TM尺寸[6,9,20]弗罗贝尼乌斯数为43,因为没有无解的方程*6 + B*9 + C*20 = 43(用A,B ,c> = 0),43是具有此属性的最大值.

可以假设给定集合存在Frobenius数.如果不是这种情况(例如对于[2,4]),则不会出现特定的行为.

参考文献:

[编辑]我决定接受GolfScript版本.虽然MATHEMATICA版本可能被认为是"技术上正确的",但它显然会带来竞争的乐趣.也就是说,我也对其他解决方案印象深刻,特别是Ruby(对于通用语言来说非常简短).

language-agnostic code-golf rosetta-stone

12
推荐指数
4
解决办法
1628
查看次数

代码高尔夫7月版第4期:计算前十个发生的单词

鉴于以下总统名单可以在最小的计划中进行前十个字数:

输入文件

    Washington
    Washington
    Adams
    Jefferson
    Jefferson
    Madison
    Madison
    Monroe
    Monroe
    John Quincy Adams
    Jackson
    Jackson
    Van Buren
    Harrison 
    DIES
    Tyler
    Polk
    Taylor 
    DIES
    Fillmore
    Pierce
    Buchanan
    Lincoln
    Lincoln 
    DIES
    Johnson
    Grant
    Grant
    Hayes
    Garfield 
    DIES
    Arthur
    Cleveland
    Harrison
    Cleveland
    McKinley
    McKinley
    DIES
    Teddy Roosevelt
    Teddy Roosevelt
    Taft
    Wilson
    Wilson
    Harding
    Coolidge
    Hoover
    FDR
    FDR
    FDR
    FDR
    Dies
    Truman
    Truman
    Eisenhower
    Eisenhower
    Kennedy 
    DIES
    Johnson
    Johnson
    Nixon
    Nixon 
    ABDICATES
    Ford
    Carter
    Reagan
    Reagan
    Bush
    Clinton
    Clinton
    Bush
    Bush
    Obama

以 …

code-golf counting text-files

11
推荐指数
5
解决办法
1111
查看次数

Code golf:将多个排序列表组合到一个排序列表中

实现一种算法,将任意数量的排序列表合并为一个排序列表.目标是用您喜欢的任何语言创建最小的工作程序.

例如:

input:  ((1, 4, 7), (2, 5, 8), (3, 6, 9))
output: (1, 2, 3, 4, 5, 6, 7, 8, 9)

input:  ((1, 10), (), (2, 5, 6, 7))
output: (1, 2, 5, 6, 7, 10)
Run Code Online (Sandbox Code Playgroud)

注意:连接输入列表然后使用语言提供的排序功能的解决方案不符合高尔夫的精神,并且不会被接受:

sorted(sum(lists,[])) # cheating: out of bounds!
Run Code Online (Sandbox Code Playgroud)

除了其他任何东西,你的算法应该(但不一定)快得多!

清楚地说明语言,任何缺点和字符数.只在计数中包含有意义的字符,但可以随意为代码添加空格以用于艺术/可读性目的.

为了保持整洁,建议改进评论或在适当的时候编辑答案,而不是为每个"修订"创建新的答案.

编辑:如果我再次提交这个问题,我会扩展"无语言提供排序"规则为"不连接所有列表然后排序结果".连接然后排序的现有条目实际上非常有趣和紧凑,因此我不会回溯地引入它们中断的规则,而是可以自由地在新提交中使用更严格的规范.


灵感来自于在Python中组合两个排序列表

language-agnostic sorting algorithm merge code-golf

10
推荐指数
6
解决办法
7021
查看次数

数组搜索代码挑战

这是我的(代码高尔夫)挑战:取两个字节数组并确定第二个数组是否是第一个数组的子字符串.如果是,则输出第一个数组中第二个数组内容出现的索引.如果在第一个数组中没有找到第二个数组,则输出-1.

示例输入:{63,101,245,215,0} {245,215}

预期产出:2

示例输入2:{24,55,74,3,1} {24,56,74}

预期输出2:-1

编辑:有人指出bool是多余的,所以你所要做的就是返回一个表示值索引的int,如果找不到则返回-1.

search code-golf bytearray rosetta-stone

10
推荐指数
5
解决办法
2404
查看次数

代码高尔夫:黑白棋

好的,这是一个相当复杂的代码高尔夫挑战:实施一个黑白棋(奥赛罗)游戏.

  • 游戏应显示游戏板的当前状态,并允许单台计算机上的玩家交替输入动作.
  • 必须捕获不正确的输入和不允许的移动,但可以静默忽略.
  • 游戏必须在不再进行任何动作时结束(因为棋盘已满或因为没有动作会翻转任何棋子).
  • 然后游戏必须宣布谁赢了,或者是否是平局.

以尽可能少的字符执行此操作.

会话应该看起来像这样:

 abcdefgh
1        
2        
3        
4   wb   
5   bw   
6        
7        
8        
b>d3
 abcdefgh
1        
2        
3   b    
4   bb   
5   bw   
6        
7        
8        
Run Code Online (Sandbox Code Playgroud)

code-golf reversi

10
推荐指数
2
解决办法
2536
查看次数

Code-Golf:一行PHP语法

说明

PHP在其语法中有一些漏洞,偶尔在开发过程中,程序员会介入它们.这可能会导致很多挫折,因为这些语法漏洞似乎无缘无故地存在.例如,一个人不能轻易地创建一个数组并在同一行上访问该数组的任意元素(func1()[100]不是有效的PHP语法).此问题的解决方法是使用临时变量并将语句分成两行,但有时这会导致非常详细,笨重的代码.

挑战

我知道其中一些漏洞(我确信还有更多漏洞).甚至很难提出解决方案,更不用说代码高尔夫风格了.获胜者是所有四个语法孔中总字符数最少的人.

规则

  1. 声明必须是这种形式的一行:$output = ...;,哪里...不包含任何;.
  2. 仅使用标准库函数(无自定义函数或eval允许)
  3. 语句与非工作语法的假定功能相同(即使在失败的情况下).
  4. 声明必须在没有任何语法错误的情况下运行E_STRICT | E_ALL.

语法孔

  1. $output = func_return_array()[$key];- 访问函数返回数组的任意偏移量(stringinteger)
  2. $output = new {$class_base.$class_suffix}(); - 用于创建新类的任意字符串连接
  3. $output = {$func_base.$func_suffix}(); - 任意字符串连接被称为函数
  4. $output = func_return_closure()(); - 调用从另一个函数返回的闭包

php arrays syntax code-golf function

10
推荐指数
1
解决办法
1457
查看次数

Code golf:重复文字的"颜色突出显示"

(感谢下面的greg0ire帮助了解关键概念)

挑战:构建一个程序,找到所有子串并用颜色属性"标记"它们(用XML有效地突出显示它们).

规则:

  1. 这应该只对长度为2或更长的子串进行.
  2. 子串只是连续字符串,可能包括非字母字符.请注意,空格和其他标点符号不会分隔子字符串.
  3. 字符大小写不容忽视.
  4. 应该通过在XML中标记子字符串来完成"突出显示".您的标记应该是一个形式<TAG#>theSubstring</TAG#>,其中#是该子字符串和相同子字符串唯一的正数.
  5. 算法的优先级是找到最长的子字符串,而不是它在文本中匹配的次数.

注意:以下示例中显示的标记顺序并不重要.OP仅用于清晰度.


输入示例:

LoremIpsumissimplydummytextoftheprintingandtypesettingindustry.LoremIpsumhasbeentheindustry'sstandarddummytexteversincethe1500s,whenanunknownprintertookagalleyoftypeandscrambledittomakeatypespecimenbook.
Run Code Online (Sandbox Code Playgroud)

部分正确的输出(OP在这个例子中可能没有完全完全替换)

<TAG1>LoremIpsum</TAG1>issimply<TAG2>dummytext</TAG2>of<TAG5>the</TAG5><TAG3>print</TAG3>ingand<TAG4>type</TAG4>setting<TAG6>industry</TAG6>.<TAG1>LoremIpsum</TAG1>hasbeen<TAG5>the</TAG5><TAG6>industry</TAG6>'sstandard<TAG2>dummytext</TAG2>eversince<TAG5>the</TAG5>1500s,whenanunknown<TAG3>print</TAG3>ertookagalleyof<TAG4>type</TAG4>andscrambledittomakea<TAG4>type</TAG4>specimenbook.
Run Code Online (Sandbox Code Playgroud)

您的代码应该能够处理边缘情况,例如:

示例输入2:

hello!TAG!</hello.TAG.</
Run Code Online (Sandbox Code Playgroud)

示例输出2:

<TAG1>hello</TAG1>!<TAG2>TAG</TAG2>!<TAG3></</TAG3><TAG1>hello</TAG1>.<TAG2>TAG</TAG2>.<TAG3></</TAG3>
Run Code Online (Sandbox Code Playgroud)

获胜者,冠军:

  • 最优雅的解决方案获胜(由其他评论评判,赞成)
  • 使用shell脚本的解决方案的奖励积分/考虑因素

轻微澄清:

  • 输入可以是硬编码或从文件中读取
  • 标准仍然是"优雅",虽然它有点模糊,但它也包含简单的字符/行数.其他人和/或赞成者的评论也表明了SO社区如何看待这一挑战

language-agnostic string code-golf rosetta-stone

10
推荐指数
1
解决办法
810
查看次数

Ruby在1行代码中读/写文件

我是Ruby的新手,我正在研究一些katas,我坚持这个愚蠢的问题.我需要将1个文件的内容复制到1行代码中的新文件中

第一次尝试:

File.open(out, 'w').write(File.open(in).read)
Run Code Online (Sandbox Code Playgroud)

很好,但是我需要关闭文件:

File.open(out, 'w') { |outf| outf.write(File.open(in).read) }
Run Code Online (Sandbox Code Playgroud)

然后关闭阅读:

File.open(out, 'w') { |outf| File.open(in) { |inf| outf.write(outf.read)) } }
Run Code Online (Sandbox Code Playgroud)

这是我想出来的,但它看起来不像我的一行代码:(

想法?

问候,

ruby code-golf

10
推荐指数
2
解决办法
1万
查看次数