编程拼图和代码高尔夫

编程益智爱好者和代码高尔夫球手的问答

3
模拟MOS 6502 CPU
这也受到了英特尔8086挑战的启发,但我认为6502挑战也很有趣。 挑战 我认为这将是一个有趣的结果。显然,这是朝着更先进的一面发展。面临的挑战是编写自己的6502 CPU仿真器。当然,这需要了解其指令集和编码格式。资源链接在此底部。6502是最容易仿真的现实世界处理器之一。就此挑战而言,如果您不想这样做,则无需担心循环时间安排-但这总是一个加号! 不要复制任何其他代码!当然,您当然可以偷看其他仿真器来帮助您理解,但不能复制和粘贴!:) 一旦代码运行成功,如果您愿意,您随时可以加倍努力,并将其转变为Apple II模拟器,或者NES,C64,VIC-20或从今天起使用的其他数十亿个旧的基于6502的系统。 测试模拟器 我已经编译了一个6502测试套件,并在其中找到了源代码:http : //code.google.com/p/hmc-6502/source/browse/trunk/emu/testvectors/AllSuiteA.asm 我的编译版本可以在这里下载:http : //rubbermallet.org/AllSuiteA.zip 将48 KB二进制文件以4000美元的价格加载到模拟器的内存空间中,从而在其下面留下16 KB的读写RAM。测试完成执行后,如果CPU通过,地址$ 0210中的值应为$ FF。您将知道程序计数器(PC)到达地址$ 45C0时测试已完成。 其他测试也可以在这里找到:http : //visual6502.org/wiki/index.php?title=6502TestPrograms 做一些更具互动性的事情 CPU工作后,您可能会想做的事情比盯着测试输出还要有趣!我为6502编译了增强型BASIC的ROM映像。它的大小为16 KB,因此您应该将其加载到仿真内存空间的$ C000中,重置虚拟6502,然后开始执行。 下载包含ehbasic.bin的该ZIP文件:http: //rubbermallet.org/ehbasic.zip EhBASIC处理输入/输出的方式非常简单。当想要向控制台写入字符时,它将字节写入存储器位置$ F001。因此,当您的模拟器看到6502尝试写入该位置时,只需使用printf(“%c”,value)将字符值打印到控制台即可;或其他您想要的。(这个挑战当然不仅限于C) 当它轮询从控制台输入的字符时,它非常相似。它将继续从$ F004的存储位置读取数据,在该位置应等待键盘上的下一个ASCII字符值被读取。如果没有更多的输入要读取,则应返回零值。 EhBASIC会在该位置轮询该值,直到它为非零为止,从而使其知道该字节是有效的键盘输入。这就是为什么如果没有更多的输入要读取,那么仿真器应该在那里返回零。在寻找输入时,EhBASIC会一直旋转直到下一个有效键。 如果在读取最后一个键值后仍未将该值清除为零,则它将导致重复该操作,就像您按住该键一样,因此请务必正确执行! 如果您的仿真器可以正常工作,那么在执行ROM映像时,控制台上将显示以下内容: 6502 EhBASIC [C]old/[W]arm ? 按C,然后按Enter,您应该看到: Memory size ? 31999 Bytes free Enhanced BASIC 2.22 …

23
打印旋转安全数字
背景 您正在为某些棋盘游戏制造商工作,需要为某些游戏生产刻有从0到n的数字的木砖。但是,事不宜迟,某些图块将变得难以区分,例如6和9。为避免这种情况,您必须为可能与其他人(并且只有那些人)混淆的数字配备一个明确的点,例如,您将拥有像9.或的图块6089.。 不幸的是,您需要为此使用一些旧的但可编程的木雕设备,该设备的接口是如此糟糕,以至于您不得不在一个繁琐的过程中手工编码程序的每个字符。幸运的是,该设备可以理解所有现有的编程语言。因此,您正在寻找可打印此类图块的最短程序。 实际任务 编写最短的程序: 以正整数n作为输入。如何读取输入取决于您。 按您选择的顺序一次打印0到n(包括0和n)中的每个数字,并用单个空格字符(包括换行符)分隔。这些数字将被打印而没有前导零。 在旋转π(180°)时会变成另一个有效数字的每个数字后面加一个点(。),即使该数字大于n。字体的0和8是旋转对称的,而9是旋转6。2和5在旋转时是不同的。1不是旋转对称的。前导零的数字无效。 例子 以下每个数字都必须完全按照这种方式打印: 2 4 5 6. 8 9. 16 60 66. 68. 69 906 909. 8088. 9806. 9886 9889.
29 code-golf  number 

2
什么代码可以使用最多的语言进行编译?[关闭]
除琐碎的程序外,什么代码可以用最多的语言进行编译? (“琐碎”是指排除诸如空程序或将直接回显的文本之类的答案。) 以下代码显然可以在以下所有编程语言中进行编译(并且在每种语言中打印出不同的内容):C,C ++,Perl,TeX,LaTeX,PostScript,sh,bash,zsh和Prolog。 %:/*:if 0;"true" +s ||true<</;#|+q|*/include<stdio.h>/*\_/ {\if(%)}newpath/Times-Roman findfont 20 scalefont setfont( %%)pop 72 72 moveto(Just another PostScript hacker,)show(( t)}. t:-write('Just another Prolog hacker,'),nl,halt. :-t. :-initialization(t). end_of_file. %)pop pop showpage(-: */ int main(){return 0&printf("Just another C%s hacker,\n",1% sizeof'2'*2+"++");}/*\fi}\csname @gobble\endcsname{\egroup \let\LaTeX\TeX\ifx}\if00\documentclass{article}\begin{doc% ument}\fi Just another \LaTeX\ hacker,\end{document}|if 0; /(J.*)\$sh(.*)"/,print"$1Perl$2$/"if$_.=q # hack …

7
人手不足的竞赛:操作系统之战[关闭]
我们都知道关于哪种操作系统是最佳操作系统的讨论是如何引起大量争论的。您现在的目标是为您最喜欢的操作系统提供更好的决定性“证明” ...啊,不,要好得多,为另一个操作系统不好提供决定性的“证明”。 任务:编写一个程序,进行一些计算,并且该程序在至少一个操作系统上正确运行,而在至少一个操作系统上错误运行。 程序应该至少进行一些计算,因此它必须读取一些简单的输入(最好是在标准输入上,或者如果需要的话,从文件中读取,但是滥用little endian / big endian不仅便宜,而且很明显),并根据输入提供一些输出。计算应该有意义且合理,例如解决现实生活或数学问题。 您应该指定两个操作系统,说明在哪个操作系统上可以正常工作,在哪个操作系统上不能正常工作。两种操作系统都应该是众所周知的,并且应该是大致相同的时间(因此,没有DOS 1.0与现代OS)。建议在扰流板标签中提供引起差异的原因的简短说明(尤其是如果您怀疑很多人不会意识到这一点)。 像这样 造成差异的原因必须是微妙的,所以#ifdef _WIN32请不要或相似!请记住,您的目标是“证明”该特定系统不好,因此人们不应(立即)发现您的把戏! 如果您的代码中有一个非常奇怪或非常不寻常的部分,则必须在注释中说明原因。当然,这种“合理性”可以是/将是一个大谎言。 得分: 这不是高尔夫!该代码应井井有条,并保持简单。请记住,您的目标是将错误隐藏在其中,以使人们不会怀疑它。代码越简单,可疑程度就越小。 获胜者将由投票决定。第一次有效提交后约10天后,得票最多。通常,应该对答案易于理解和理解的代码进行表决,这些答案应该易于阅读和理解,而漏洞却被很好地隐藏,即使被发现,也可以将其归因于错误而不是恶意。同样,如果该错误仅导致错误的结果,而不是仅导致程序崩溃或不执行任何操作,那么它的价值应该更高。 与往常一样,如果在任何主观标准上,我的答案都没有选择,则该答案应不超过最多投票者的答案低10%或1点。

5
检查三个字母是否可以构成“ Godel-Escher-Bach立方体”
这个问题的灵感来自《 Godel,Escher,Bach》一书的封面: 这里的挑战是编写一个函数,该函数告诉三个给定的字母是否可以产生可以从三个侧面读取的3D雕塑。 在本练习中,您只能使用26个5px * 5px位图的字母: 或以二进制(A到Z)格式: 01110 11110 01111 11110 11111 11111 11111 10001 11111 11111 10001 10000 10001 10001 01110 11110 01110 11110 01111 11111 10001 10001 10001 10001 10001 11111 10001 10001 10000 10001 10000 10000 10000 10001 00100 00100 10010 10000 11011 11001 10001 10001 10001 …
29 code-golf  3d 

2
ASCII艺术3D StreetView
输入: 您会得到一系列整数(通过标准输入或提示输入)。 此系列中的每对整数代表建筑物的宽度[有效范围:1..10]和高度[有效范围:0..10] 假设输入格式正确。 样本输入(第二行仅用于演示目的): 1 2 1 1 1 0 2 4 1 3 1 2 2 1 WHWHWHWHWHWHWH 相应的样本输出: ______ / ______ / | | | | __ | | / __ / | __ | | | | __ / __ / | | | | / …

16
输出源代码的图像(非完全Quine)
高尔夫代码:打印源代码的图像。 要求 必须输出源代码本身的映像,而不是输出存储在其他位置并在运行时检索到的版本。 代码必须清晰易读,以手工复制并复制结果。 任何图像格式均适用。 奖金 如果允许多个输出格式,则为分数的-10%。 如果您的代码也是 “真实”字样,则为-15%。即它不读取其源代码,但源代码已嵌入(请参见此处的示例) 如果您的代码是严格的标准,则为-30%-即代码的图像已嵌入程序中(Piet解决方案,我在找您。)

21
从1到100…在罗马数字中计数
编写一个从1到100的罗马数字计数程序,并通过标准输出打印这些数字。每个数字必须用空格分隔。 您不能使用任何内置函数来转换为罗马数字,也不能使用外部应用程序或库来进行转换。 理想的结果是 I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII XXIX XXX XXXI XXXII XXXIII XXXIV XXXV XXXVI XXXVII XXXVIII XXXIX XL XLI XLII XLIII XLIV XLV XLVI XLVII …

30
聪明人的海市age楼
从前,我在阅读有关Quora的问题/答案 真的有没有计算机科学学位的程序员无法通过FizzBu​​zz测试 此代码是显而易见的答案 for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i 当然,FizzBu​​zz已经被打死了,但这并不是这个问题的实质。您会在评论中看到有人提到该答案很不错,因为很容易添加额外条件,例如将“ Jazz”打印为4的倍数。(我不同意。扩展此方案需要O(2 ** n )代码行。) 您的挑战是编写由同行判断的最漂亮的FizzJazzBuzz版本。 选民需要考虑的一些事项: 干 除法/模运算的效率 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 

28
约瑟夫斯问题(算出)
挑战 编写一个函数,该函数将两个正整数n和k作为参数,并在计算出每个第k人后返回n中剩余的最后一个人的人数。 这是一个代码挑战,因此以最短的代码为准。 问题 n个人(从1到n编号)围成一个圈,每个k-数被计数,直到剩下一个人为止(请参阅相应的Wikipedia文章)。确定最后一位的号码。 例如,对于k = 3,两个人将被跳过,第三个将被算出。即,对于n = 7,数字将按3 6 2 7 5 1的顺序计数(详细为1 2 3 4 5 6 7 1 2 4 5 7 1 4 5 1 4 1 4),因此答案为4。 例子 J(7,1) = 7 // people are counted out in order 1 2 3 4 5 6 …

30
查找最大序列长度
假设我们有一个字符串,并且我们想要找到每个字母的最大重复序列。 例如,给定样本输入: "acbaabbbaaaaacc" 样本输入的输出可以是: a=5 c=2 b=3 规则: 您的代码可以是函数或程序-供您选择 输入可以通过标准输入,文件或函数参数 输出应仅包含出现在输入中的字符 输入最大长度为1024 输出顺序无关紧要,但必须以[char] = [最大重复序列] [定界符]的形式打印 字符串可以包含任何字符 比赛于世界标准时间23:59星期四结束。
29 code-golf 

30
确定4个点是否形成正方形
编写一个函数,该函数将平面上的4个点作为输入,并且如果4个点形成一个正方形,则返回true。这些点将具有绝对值<1000的积分坐标。 您可以使用4点的任何合理表示形式作为输入。这些点没有以任何特定顺序提供。 最短的代码胜出。 正方形示例: (0,0),(0,1),(1,1),(1,0) # standard square (0,0),(2,1),(3,-1),(1,-2) # non-axis-aligned square (0,0),(1,1),(0,1),(1,0) # different order 非正方形示例: (0,0),(0,2),(3,2),(3,0) # rectangle (0,0),(3,4),(8,4),(5,0) # rhombus (0,0),(0,0),(1,1),(0,0) # only 2 distinct points (0,0),(0,0),(1,0),(0,1) # only 3 distinct points 您可以为退化的平方返回true或false (0,0),(0,0),(0,0),(0,0)
29 code-golf  math 

30
确定字符串是否相等
您的任务很简单。确定一个字符串是否等于另一个字符串(不是地址,即值),而不使用相等运算符(例如==,===或.equal())或不等式(!=,!==)任何其他语言类似。这意味着任何地方!您不得在代码中的任何地方使用这些运算符。不过,您可能会使用诸如!exp未直接比较的切换exp != with something else。 此外,您不得使用任何功能,例如strcmp,strcasecmp等。 至于比较运算符(>=,<=,>,<),他们也不允许。我意识到一些答案包括这个,但是我真的很想看到更多的答案,它们不等于等式运算符。 显示了使用PHP的示例: <?php $a = 'string'; $b = 'string'; $tmp = array_unique(array($a, $b)); return -count($tmp) + 2; 只需返回true或false(或某种在语言中评估为true或false的值(如0或1))即可指示字符串是否匹配。字符串应经过硬编码,如上例所示。高尔夫球中不应该计算字符串,因此如果您事先声明了变量,请不要计算声明。
29 code-golf 

30
Rand5()至Rand7()
为您提供了一个函数Rand5()。此函数返回1到5之间的完全随机(均分布)整数。 提供函数Rand7(),该函数使用Rand5()产生1到7之间的完全随机整数。

13
有多少个吉米人可以容纳?
在这个简单而有趣的挑战中,您被要求确定Jimmy是否会掉下他们的平台。吉米有三个身体部位/,o以及\安排这样 /o\ 平台用表示-。如果Jimmy有两个或多个不位于平台正上方的身体部位,他们将掉下平台。 一些例子: /o\ - ------- 吉米会保持平衡,因为他们的所有身体部位都超过了-。 /o\ ------ --- 吉米将平衡,因为两个身体部位都在-s 之上。 /o\ -- ---- -- 即使将Jimmy分为两个平台,他们也会保持平衡 /o\ - 吉米不会平衡,因为两个身体部位不在平台上方。 您的任务是编写一个程序,该程序将平台作为仅包含-s和s(例如,字符串)的加长容器,并输出可放置在平台上的吉米的数量,以使它们均不会掉落,也不会掉落。交叠。吉米人的身体部位之一可能位于弦首的左侧或弦尾的右侧。 这是代码高尔夫球,因此答案以字节计分,目标是减少字节数。 测试用例 输入项 - - - - - -- -- -- ---- - -- -- ------- - 各自的产出 0 0 1 1 2 2 2 3
29 code-golf  string 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.