Aln*_*tak 12 binary hex code-golf
在回答关于十六进制到(原始)二进制转换的这个问题时,评论表明它可以用"5-10行C或任何其他语言"来解决.
我确信(某些)脚本语言可以实现,并希望看到如何.对于C,我们能否证明评论是真的吗?
注意:这并不意味着十六进制到ASCII二进制 - 特别是输出应该是对应于输入ASCII十六进制的原始八位字节流.此外,输入解析器应跳过/忽略空格.
编辑(Brian Campbell)为了保持一致性,我可以提出以下规则吗?如果您认为这些内容没有帮助,请随意编辑或删除这些内容,但我认为,由于已经讨论过某些案例应该如何运作,因此一些澄清会有所帮助.
[a-fA-F \t\r\n],将单个字节中的两个字符分开的空格,输入中的奇数个十六进制数字)是未定义的; 任何行为(除了主动损坏用户的计算机或其他东西)都是可接受的(抛出错误,停止输出,忽略坏字符,将单个字符视为一个字节的值,都可以)编辑 Checkers已将我的C解决方案减少到46个字节,然后由于BillyONeal的提示加上我的错误修正(在错误的输入上没有更多的无限循环,现在它只是终止循环),然后减少到44个字节.请将Checkers减少为77到46个字节:
main(i){while(scanf("%2x",&i)>0)putchar(i);}
Run Code Online (Sandbox Code Playgroud)
而且我有一个比我上一个更好的Ruby解决方案 42 38字节(感谢Joshua Swank的正则表达式建议):
STDIN.read.scan(/\S\S/){|x|putc x.hex}
Run Code Online (Sandbox Code Playgroud)
原始解决方案
C,77个字节,或两行代码(如果你可以将它#include放在同一行,则为1 ).请注意,这在输入错误时会有无限循环; 在Checkers和BillyONeal的帮助下,这个44字节的解决方案修复了这个错误,并且只是在错误的输入上停止.
#include <stdio.h>
int main(){char c;while(scanf("%2x",&c)!=EOF)putchar(c);}
Run Code Online (Sandbox Code Playgroud)
如果你正常格式化,它甚至只有6行:
#include <stdio.h>
int main() {
char c;
while (scanf("%2x",&c) != EOF)
putchar(c);
}
Run Code Online (Sandbox Code Playgroud)
Ruby,79字节(我确信这可以改进):
STDOUT.write STDIN.read.scan(/[^\s]\s*[^\s]\s*/).map{|x|x.to_i(16)}.pack("c*")
Run Code Online (Sandbox Code Playgroud)
这些都从STDIN获取输入并写入STDOUT
39 char perliner
y/A-Fa-f0-9//dc,print pack"H*",$_ for<>
Run Code Online (Sandbox Code Playgroud)
编辑:不是真的接受大写,修复.
45字节可执行文件(base64编码):
6BQAitjoDwDA4AQI2LQCitDNIevrWMOy/7QGzSF09jLkBMAa5YDkByrEJA/D
Run Code Online (Sandbox Code Playgroud)
(粘贴到扩展名为.com的文件中)
编辑:好的,这是代码.打开一个Window的控制台,创建一个名为'hex.com'的45字节文件,输入"debug hex.com"然后输入'a'并输入.复制并粘贴以下行:
db e8,14,00,8a,d8,e8,0f,00,c0,e0,04,08,d8,b4,02,8a,d0,cd,21,eb,eb,cd,20
db b2,ff,b4,06,cd,21,74,f6,32,e4,04,c0,1a,e5,80,e4,07,2a,c4,24,0f,c3
Run Code Online (Sandbox Code Playgroud)
按Enter键'w',然后再次输入'q'并输入.你现在可以运行'hex.com'了
EDIT2:缩小了两个字节!
db e8, 11, 00, 8a, d8, e8, 0c, 00, b4, 02, 02, c0, 67, 8d, 14, c3
db cd, 21, eb, ec, ba, ff, 00, b4, 06, cd, 21, 74, 0c, 04, c0, 18
db ee, 80, e6, 07, 28, f0, 24, 0f, c3, cd, 20
Run Code Online (Sandbox Code Playgroud)
这很棘手.我简直不敢相信我是花时间做的.
由于C在功能原型方面的宽大,Brian的77字节C解决方案可以改进到44字节.
main(i){while(scanf("%2x",&i)>0)putchar(i);}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6310 次 |
| 最近记录: |