Questions tagged «interpreter»

涉及为各种语言或形式编写口译员的任务。

28
使用堆栈片段使将来的帖子可在线运行
堆栈片段中最近加入PPCG!让人想起JSFiddle,堆栈片段允许直接在帖子中运行HTML,CSS和JavaScript ! 这是一个非常简单的堆栈片段: alert('This is JavaScript') h3 { color: red } /* This is CSS */ <h3>This is HTML</h3> 运行代码段隐藏结果展开摘要 如果支持JavaScript以外的语言,Stack Exchange的此功能对我们非常有用。(可以现场测试挑战的答案,可以动态生成示例输入,等等)。 挑战 这项挑战的目标是使用Stack Snippets和JavaScript为某些编程语言编写解释器。关键是要做出可以轻松复制并在以后的PPCG问题和答案中使用的内容。 或多或少,您需要创建一个具有“运行”按钮和两个文本框的堆栈片段,一个用于代码,一个用于输入。单击运行按钮将在输入上执行代码(以您解释的语言编写)并显示结果(可能在另一个文本框中)。该代码段应类似于cjam.aditsu.net或示例答案。 对于大多数语言,输入和输出分别代表stdin和sdout有意义,并且命令行中可能还有另一个输入框。但是,并非所有语言都具有这种传统的I / O机制。例如,HQ9 +甚至没有输入,因此它的文本框毫无意义。因此,可以自由选择一些自由语言,围绕语言进行设计,而不是遵循此规范。主要要求是您的语言应在堆栈摘录中以该术语的公认含义“可运行”。 笔记 尽管理想,但不需要实现语言的每个功能。诸如读取和写入文件或导入库之类的事情可能是笨拙的或不可能的。专注于使此网站上使用的实用程序最大化的解释器。 将您未编写的“ X语言到JavaScript语言”解释器发布(可以使用归因)是可以的。 Stack Exchange将答案限制为30,000个字符,因此,如果您的解释器可能很长,请相应地计划。 最好使翻译版本尽可能容易地包含在以后的帖子中。例如,在示例答案中,提供了整个代码段的原始Markdown,并提供了放置代码和输入的明显位置。 尽管此问题旨在使口译人员更胜一筹,而不是一个适当的挑战,但它仍然是一场流行竞赛,因此,票数最高的答案将获胜。 当前口译员清单 (按语言名称按字母顺序排序) 光束 Befunge-93 脑干 脑干 CHIQRSX9 + 死鱼 死鱼(仅运行预设代码) 傅里叶 FRACTRAN ...

30
解释脑力***
用您最喜欢的语言编写最短的程序,以解释一个脑力激荡的程序。该程序是从文件中读取的。输入和输出是标准输入和标准输出。 信元大小:8位无符号。溢出是不确定的。 数组大小:30000字节(未圈出) 错误的命令不是输入的一部分 注释以#开头并扩展到行尾注释不是所有内容+-.,[]<> 没有EOF符号 在这里可以找到一个很好的测试。它读取一个数字,然后打印质数直到该数字。为防止链接腐烂,下面是代码的副本: compute prime numbers to use type the max number then push Alt 1 0 =================================================================== ======================== OUTPUT STRING ============================ =================================================================== >++++++++[<++++++++>-]<++++++++++++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++++.[-] >++++++++++[<++++++++++>-]<+++++.[-] >++++++++++[<++++++++++>-]<+++++++++.[-] >++++++++++[<++++++++++>-]<+.[-] >++++++++++[<++++++++++>-]<+++++++++++++++.[-] >+++++[<+++++>-]<+++++++.[-] >++++++++++[<++++++++++>-]<+++++++++++++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++.[-] >+++++[<+++++>-]<+++++++.[-] >++++++++++[<++++++++++>-]<++++++++++++++++.[-] >++++++++++[<++++++++++>-]<+++++++++++.[-] >+++++++[<+++++++>-]<+++++++++.[-] >+++++[<+++++>-]<+++++++.[-] =================================================================== ======================== INPUT NUMBER ============================ =================================================================== + cont=1 [ ...

9
写一个99的翻译
99(读作“九十九”)是一种全新的Esoteric编程语言(请不要与99混淆,请注意斜体)。您在此挑战中的任务是为99写一个尽可能短的解释器。字节最少的提交将获胜。Tiebreaker转到第一个发布的提交。 由于这个问题比平时更深入,而且我渴望看到好的答案,因此,我将奖励我最喜欢的答案250 rep赏金(不一定是获胜者)。 99规格 99是命令式语言。99程序中的每一行都是一条语句,并且在执行过程中,指令指针从第一行开始,依次遍历每行后续的行,并一路执行。当执行了最后一行时,程序结束。Goto语句可能会重新路由指令指针的路径。 换行符,空格和9是在99程序中唯一重要的三个字符。所有其他字符将被完全忽略。此外,每行上的尾随空格都将被忽略,并且一行中的多个空格将被视为一个空格。(“换行符”是指任何常见的换行编码。您的解释器使用哪种都没有关系。) 所以这个程序: 9 BLAH 99 9a9bb9c9 9 this line and the next have 6 trailing spaces 9 与此程序相同: 9 99 9999 9 9 变数 99中的变量都具有一个或多个9串在一起的名称(9+在正则表达式中)。例如9,99和9999999999是完全不同的变量。自然地,存在无限多个(除非存在内存限制)。 每个变量的值是一个有符号的任意精度整数。默认情况下,每个变量都分配给自己的数字表示形式。因此,除非已将其重新分配,否则变量的值9是数字9,变量的值99是数字99,依此类推。您可以将其视为在将变量明确分配之前将其视为纯数字。 我将V在下面用于指代任意变量名称。 的每个实例V可以替换为9,99,999,9999,等。 陈述 99中有五种不同的语句类型。每行99个程序中的包含一个语句。 此处描述的语法假定所有多余字符均已删除,所有尾随空格均已删除,多个空格的所有序列均已替换为单个空格。 1.无操作 空行是无操作。它什么都不做(除了增加指令指针)。 2.输出 V V一行上的单个变量会将其打印到stdout。 如果V具有的奇数9(9,999等)V,则将打印除以9 的整数(十进制)。 如果V具有偶数9(99,9999等),则将打印代码除以9 的ASCII字符Vmod 128。(即(V / 9) % 128介于0到127之间的值。) ...

30
从较小的“ H”创建一个“ H”
挑战 创建一个函数或程序,当给定整数时size,该函数或程序将执行以下操作: 如果size等于1,则输出 H H HHH H H 如果size大于1,则输出 X X XXX X X X程序/功能的输出在哪里size - 1 (只要您愿意,0只要您在答案中指定,就可以使基本情况与相对应) 可以使用以下任何一种输出格式,以您更方便的方式: 所需结构的字符串,其中任意两个不同的字符分别对应于H和space 具有所需结构的二维数组,其中任意两个不同的值分别对应于H和space 字符串的数组/列表,每个字符串中有一行输出,并且与H和对应的任意两个不同的值space 只要每行上有恒定数量的前导空格,就可以使用前导空格。两个不同的输出字符可以取决于您选择的任何内容,只要它们不同即可。 指定代码返回的输出格式。 测试用例 1 H H HHH H H 2 H H H H HHH HHH H H H H H HH HH H HHHHHHHHH H HH HH ...
73 code-golf  ascii-art  fractal  code-golf  code-golf  string  code-golf  string  matrix  code-golf  graph-theory  maze  binary-matrix  code-golf  kolmogorov-complexity  random  code-challenge  metagolf  test-battery  brain-flak  text-processing  code-golf  matrix  code-golf  number-theory  primes  code-golf  string  matrix  code-golf  binary  bitwise  code-golf  number  factorial  floating-point  code-golf  number  sequence  code-golf  sequence  cops-and-robbers  code-golf  sequence  cops-and-robbers  code-golf  string  code-golf  math  decision-problem  number-theory  integer  code-golf  number  decision-problem  functional-programming  code-golf  array-manipulation  matrix  code-golf  string  classification  string  code-challenge  binary  compression  decode  code-golf  string  string  code-challenge  balanced-string  encode  code-golf  number-theory  integer  base-conversion  code-golf  math  number-theory  geometry  abstract-algebra  code-golf  array-manipulation  sorting  optimization  code-golf  math  geometry  image-processing  generation  code-golf  string  cops-and-robbers  repeated-transformation  grammars  cops-and-robbers  repeated-transformation  grammars  code-challenge  restricted-source  tips  source-layout  javascript  code-challenge  kolmogorov-complexity  restricted-source  code-golf  combinatorics  counting  math  fastest-code  linear-algebra  code-golf  math  permutations  matrix  linear-algebra  code-golf  string  decision-problem  restricted-source  code-golf  number  array-manipulation  subsequence  code-golf  number  array-manipulation  matrix  code-golf  brainfuck  code-golf  color  code-golf  quine  source-layout  code-golf  subsequence  code-golf  string  ascii-art  code-golf  string  ascii-art  alphabet  code-golf  decision-problem  interpreter  hexagonal-grid  halting-problem  code-golf  string  polynomials  calculus  code-golf  math  decision-problem  matrix  complex-numbers  code-golf  random  code-golf  number  arithmetic 

30
制作;#解释器
我最近创建了一种新语言;#(发音为“ Semicolon Hash”),它只有两个命令: ; 向累加器加一 #对累加器乘以127,对ASCII字符进行转换,然后输出而不带换行符。此后,将累加器重置为0。是的,正确的是127。 其他任何字符都将被忽略。它对累加器没有影响,什么也不做。 您的任务是为这种强大的语言创建一个解释器! 它应该是完整程序,也可以是将;#程序作为输入并产生正确输出的函数。 例子 Output: Hello, World! Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# Output: ;# Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;# Output: 2d{ (unprintable characters here; should have 4 `\000` bytes between the `d` and the `{` and 3 after the `{`) Program: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;hafh;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;f;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;###ffh#h#;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ffea;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;aa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;#au###h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;h;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;o Output: Fizz Buzz output Program: link below Output: ...

30
追加字符串长度
挑战: 给定s字符a- z,A- Z,0- 上的字符串9,将其长度附加s到其自身,将长度中的其他字符计为的总长度s。 输入: 只是任意长度的字符串(可以为空)。 输出: 相同的字符串,但其长度附加到末尾。代表长度的字符也应算作长度的一部分。如果要附加多个有效长度,请选择最小的长度(有关示例,请参见测试用例)。 测试用例: INPUT -> OUTPUT // Comment aaa -> aaa4 -> 1 // Empty string aaaaaaaa -> aaaaaaaa9 // aaaaaaaa10 would also normally be valid, but violates using the smallest number rule mentioned above aaaaaaaaa -> aaaaaaaaa11 a1 -> a13 // Input ...
51 code-golf  string  code-golf  string  random  code-golf  array-manipulation  code-golf  ascii-art  kolmogorov-complexity  random  code-golf  array-manipulation  code-golf  stateful  code-golf  hello-world  code-golf  string  code-golf  interpreter  lisp  code-golf  restricted-source  quine  palindrome  code-golf  ascii-art  random  generation  challenge-writing  ascii-art  random  polyglot  maze  answer-chaining  string  cops-and-robbers  whitespace  code-golf  string  cops-and-robbers  whitespace  code-golf  number  sequence  code-golf  date  code-golf  ascii-art  decision-problem  code-golf  combinatorics  chemistry  code-golf  kolmogorov-complexity  source-layout  radiation-hardening  code-golf  ascii-art  path-finding  maze  code-golf  string  ascii-art  game  animation  code-golf  string  ascii-art  code-golf  ascii-art  kolmogorov-complexity  code-golf  restricted-source  new-years 

26
翻译oOo代码
给定以oOo CODE编写的程序的输入,输出它表示的BF代码。 这是oOo CODE的工作方式的简短描述: 首先,所有非字母字符都将被删除(所有不在此范围内的字符 A-Za-z)。 例如,使用该程序PROgRam reVERsES giVeN iNPut sEqUENcE(esolangs Wiki页面上给出的示例完全可以实现您的期望)。第一步之后,我们现在有了 PROgRamreVERsESgiVeNiNPutsEqUENcE。 接下来,将所有剩余字符分成3组。现在有了 PRO,gRa,mre,VER,sES,giV,eNi,NPu,tsE,qUE,NcE。如果尾部有1个或2个字符,则将其丢弃。 根据下表将每组3个字母转换为BF命令: ooo > ooO < oOo [ oOO ] Ooo - OoO + OOo . OOO , 也就是说,如果组中的第一个字母是小写字母,第二个字母是大写字母,第三个字母是小写字母,它将转换为command [。 在我们的示例中,该程序最终成为BF程序,[>,]<[.<]+,该程序的确撤消了其输入。 因为这是code-golf,所以以字节为单位的最短代码将获胜。 测试用例: <empty string> -> <empty string> A -> <empty string> Ab -> <empty string> ...

11
运行Stackylogic
Stackylogic是一种基于逻辑的编程语言我提出了称取在0的和1为输入的,并输出一个单一的0或1在完成。 Stackylogic程序由只能包含三个字符的行组成,并且只能在01?其中一行<的末尾包含一个字符。行不能为空,并与该行<必须至少有一个0,1或?之前。 这是一个示例程序(如我将解释的那样),计算两个位的NAND: 1 ?< 11 ? 0 Stackylogic程序中的每一行都被视为一个堆栈,其底部在左侧,顶部在右侧。隐式地,在程序的第一行之前和最后一行之后有一个空堆栈(空行)。 的<,我们称之为的光标,标记堆栈的运行Stackylogic程序时开始。Stackylogic程序的执行过程如下: 将顶部字符从光标当前指向的堆栈中弹出。 如果该字符为?,则提示用户输入a 0或a,1并像该字符一样进行操作。 如果字符是0,则将光标向上移动一个堆栈(到当前行上方的行)。 如果字符是1,则将光标向下移动一个堆栈(到当前行下方的行)。 如果光标移动到的堆栈为空,则输出从堆栈弹出的最后一个值(始终为a 0或1),然后结束程序。 否则,如果光标移动到的堆栈不为空,请返回步骤1并重复该过程。 请注意,Stackylogic程序始终会结束,因为它们最终必须耗尽堆栈。 NAND范例 在NAND程序中,光标从以下位置开始?: 1 ?< 11 ? 0 我们假设用户1一旦输入,便输入a ?,这意味着光标将向下移动,使程序如下所示: 1 11< ? 0 现在,平原1位于游标堆栈的顶部。它会适当弹出,然后光标再次移动: 1 1 ?< 0 现在假设用户输入0的?,这意味着将光标向上移动: 1 1< 0 同样,1游标堆栈上还有a ,因此游标弹出并向下移动: 1 < 0 最后,游标堆栈为空,因此弹出最后一个值1,输出,程序结束。 这是准确的NAND门,因为1 NAND 0是1。如果您愿意检查的话,这当然适用于其他三个两位输入。 ...

13
为无类型的lambda演算编写解释器
面临的挑战是为无类型lambda演算编写尽可能少的字符的解释器。我们将无类型的lambda演算定义如下: 句法 有以下三种表达式: Lambda表达式的形式为(λ x. e),其中x可以是任何合法变量名和e任何合法表达式。这里x称为参数,e称为函数体。 为简单起见,我们添加了进一步的限制,即不得存在与x当前作用域同名的变量。当变量的名称出现在(λ和之间时,变量就开始在范围.内,而在对应的变量处就停止在范围内)。 功能应用程序具有形式和形式(f a),它们是合法的表达式。这里称为函数,称为参数。fafa 变量的格式为xwhere x是合法变量名。 语义学 通过将函数体内参数的每次出现替换为其自变量来应用函数。更正式的形式的表达((λ x. e) a),其中x是变量名和e和a是表达式,评估(或减少)至表达式e',其中e'是取代的每次出现的结果x在e与a。 范式是无法进一步评估的表达式。 挑战 您的任务(如果您选择接受它)是编写一个解释器,该解释器将不包含自由变量的未类型化lambda演算的表达式作为输入,并产生该表达式的标准形式(或与该表达式一致的表达式)作为其输出。 。如果该表达式没有范式或它不是有效的表达式,则该行为是不确定的。 字符数最少的解决方案获胜。 一些注意事项: 输入既可以从stdin读取,也可以从作为命令行参数给出的文件名读取(您只需要实现一个或另一个即可-无需同时实现)。输出进入标准输出。 或者,您可以定义一个函数,该函数将输入作为字符串,然后将输出作为字符串返回。 如果非ASCII字符对您有问题,则可以使用反斜杠(\)字符代替λ。 我们计算字符数,而不是字节数,因此,即使您的源文件被编码为unicodeλ也算为一个字符。 合法变量名称由一个或多个小写字母组成,即a和z之间的字符(无需支持字母数字名称,大写字母或非拉丁字母-尽管这样做当然不会使您的解决方案无效)。 就此挑战而言,没有括号是可选的。每个lambda表达式和每个函数应用程序都将恰好由一对括号包围。变量名不会用括号括起来。 语法糖就像写(λ x y. e)的(λ x. (λ y. e))并不需要得到支持。 如果评估函数的递归深度大于100,则行为不确定。该值应该足够低,以至于无需在所有语言中进行优化即可实现,而且还应足够大以能够执行大多数表达式。 您可能还假定间距将与示例中的相同,即在输入的开头和结尾或a λ或之前没有空格,而在a .和之后.以及函数与其参数之间以及a 之后恰好有一个空格λ。 样本输入和输出 输入: ((λ x. x) (λ y. (λ z. ...

27
图灵全语言翻译员
我认为这将是一个很酷的挑战,那就是为您选择的图灵完备语言提供口译服务。 规则很简单: 您可以使用任何语言来创建此解释器,即使它比此挑战要新。 您可以使用任何图灵完备的语言,只要它与编写该语言的语言不同即可。 您可能不能简单地评估代码,例如使用eval函数。 关于您如何实现此目的的解释会很好,但不是必需的。 这将以字节计分。 每个提交都必须完全正常工作,这意味着必须显示您选择的语言所具有的每个功能。 简而言之: 您的任务是为您选择的任何一种图灵完备的语言创建一个有效的口译员。 祝好运!

30
用位和字节编程
在这个挑战中,您将为我编写的一种简单语言编写一个解释器。该语言基于单个累加器A,该累加器A的长度恰好是一个字节。在程序的开头,A =0。这些是语言说明: !:反转 该指令仅将累加器的每一位取反。每个零变为1,每个零变为0。简单! >:右移 该指令将A中的每一位右移一位。最左边的位变为零,最右边的位被丢弃。 <:左移 该指令将A中的每一位向左移一位。最右边的位变为零,最左边的位被丢弃。 @:交换Nybbles 该指令将A的高四位与低四位交换。例如,如果A是01101010并且您执行@,则A将是10100110: ____________________ | | 0110 1010 1010 0110 |_______| 这就是所有指示!简单吧? 规则 您的程序必须在开始时接受一次输入。这将是一行代码。这不是交互式解释器!您只能接受一次输入,而不必在执行该行后循环回到起始位置。 您的程序必须评估所述输入。上面没有提到的每个字符都将被忽略。 然后,您的程序应以十进制打印出累加器的最终值。 适用有效编程语言的常规规则。 不允许出现标准漏洞。 这是代码高尔夫球,最小字节数获胜。 这里有一些小程序可以测试您提交的内容。箭头之前是代码,之后是预期结果: ! -> 255 !>> -> 63 !<@ -> 239 !nop!&6*! -> 255 请享用!

1
麦卡锡的LISP
麦卡锡的1959 LISP 1959年初,约翰·麦卡锡(John McCarthy)撰写了一篇具有开创性的论文,其中仅定义了9种原始函数,这些函数组合在一起仍然构成了当今所有LISP类语言的基础。该文件可在此处数字化: http://www-formal.stanford.edu/jmc/recursive.pdf 你的任务是全面落实正是在1960年的论文中描述McCarthy的LISP解析器和解释:也就是说,功能QUOTE,ATOM,EQ,CAR,CDR,CONS,COND,LAMBDA,和LABEL都应该发挥作用。考虑到答案的正确性,本文将优先于本挑战性文章,但我尝试总结以下九个功能。请注意,该语言将为ALL CAPS,并且无需进行错误检查,所有输入均应假定为有效。 种类 麦卡锡的LISP中只有两种类型:原子和链表,它被递归地定义为头(可以是列表或原子),以及头连接到(尾)的列表。NIL具有既是原子又是列表的特殊属性。 根据论文,原子名称将仅由大写字母,数字和空格字符组成,尽管连续空格的字符串应仅视为一个空格,而所有前导和尾随空格字符均应删除。实施例等效原子名称(替换空格字符下划线): ___ATOM__1__ = ATOM_1。示例不等效的原子名称:A_TOM_1 != ATOM_1 列表用括号表示NIL,每个列表的末尾都包含一个隐含符号。列表中的元素用逗号隔开,而不是像大多数现代Lisps一样用空格隔开。因此,清单(ATOM 1, (ATOM 2))将是{[ATOM 1] -> {[ATOM 2] -> NIL} -> NIL}。 QUOTE: 接受一个参数,该参数可以是一个原子(单个元素)或一个链表。精确返回参数。 测试用例: (QUOTE, ATOM 1) -> ATOM 1 (QUOTE, (ATOM 1, ATOM 2)) -> (ATOM 1, ATOM 2) ATOM: 接受一个参数,该参数可以是一个原子(单个元素)或一个链表。T如果参数是原子,则返回(true),如果参数不是原子,则返回(NILfalse)。 测试用例: (ATOM, ...

9
蛇化字符串
修饰后的字符串如下所示: T AnE eOf ifi ing h s x l A k e r isI amp Sna dSt 你的任务 取一个字符串s和一个size n,然后输出连串的字符串。输入ThisIsAnExampleOfaSnakifiedString和3将产生上面的示例。 技术指标 s 只会在代码点33和126之间(含端点)包含ASCII字符(不包含空格或换行符)。 s 长度在1到100个字符之间。 n是一个整数,代表每个输出字符串段的大小。组成“蛇”中曲线的每一行字符(上/下或左/右)都是n字符长。有关示例,请参见测试用例。 n 介于3到10之间(含3和10)。 输出字符串始终开始指向下方。 每行上都可以使用尾随空格。 在输出末尾也可以尾随换行符。 不允许前导空格。 code-golf表示以字节为单位的最短代码获胜。 测试用例 a 3 a ---------- Hello,World! 3 H Wor e , l llo d! ---------- ProgrammingPuzzlesAndCodeGolf ...
35 code-golf  string  ascii-art  code-golf  code-golf  string  balanced-string  decision-problem  code-golf  string  geometry  grid  code-golf  tips  lisp  code-golf  quine  tips  king-of-the-hill  code-challenge  math  code-golf  string  palindrome  math  fastest-code  code-golf  string  counting  code-golf  code-golf  internet  code-golf  quine  source-layout  hello-world  code-golf  math  number  sequence  arithmetic  code-golf  ascii-art  grid  code-golf  number  grid  code-golf  string  crossword  code-golf  code-golf  ascii-art  grid  counting  code-golf  code-golf  math  sequence  arithmetic  number-theory  code-golf  code-golf  graphical-output  geometry  random  code-golf  ascii-art  grid  counting  code-golf  string  ascii-art  code-challenge  test-battery  code-golf  string  code-golf  ascii-art  kolmogorov-complexity  code-golf  interpreter  code-golf  math  sequence  code-golf  math  primes  set-partitions  code-golf 

3
Tiny Lisp,微小的口译员
Lisp程序员吹嘘Lisp是一种功能强大的语言,可以通过很少的原始操作集来构建。让我们通过打高尔夫一种叫做方言的口译员来付诸实践tinylisp。 语言规格 在本规范中,任何结果被描述为“未定义”的条件都可能在您的解释器中做任何事情:崩溃,静默失败,产生随机的gobbldegook或按预期工作。此处提供了Python 3中的参考实现。 句法 tinylisp中的标记是(,)或一个或多个可打印ASCII字符的任何字符串,括号或空格除外。(即以下正则表达式:[()]|[^() ]+。)任何完全由数字组成的令牌都是整数文字。(前导零都还好。),其中包含非数字字符的任何标记是一个符号,甚至是数字好看的例子一样123abc,3.14和-10。所有空格(至少包括ASCII字符32和10)都将被忽略,除非它们分隔标记。 tinylisp程序由一系列表达式组成。每个表达式可以是整数,符号或s表达式(列表)。列表由括在括号中的零个或多个表达式组成。项目之间不使用分隔符。以下是表达式示例: 4 tinylisp!! () (c b a) (q ((1 2)(3 4))) 格式不正确的表达式(特别是括号不匹配的表达式)会产生不确定的行为。(参考实现自动关闭打开的parens,并停止对不匹配的关闭parens进行解析。) 资料类型 tinylisp的数据类型是整数,符号和列表。尽管内置函数和宏的输出格式未定义,但它们也可以视为一种类型。列表可以包含任意数量的任何类型的值,并且可以任意嵌套。必须至少从-2 ^ 31到2 ^ 31-1支持整数。 空列表(()也称为nil)和整数0是唯一在逻辑上被视为false的值。所有其他整数,非空列表,内建函数和所有符号在逻辑上均为真。 评价 程序中的表达式将按顺序求值,并将每个表达式的结果发送到stdout(稍后会详细介绍输出格式)。 整数文字求值。 空列表()将自动求值。 一个或多个项目的列表将评估其第一项并将其视为函数或宏,并以其余项作为参数来调用它。如果该项目不是函数/宏,则行为未定义。 符号将作为名称求值,并在当前函数中给出绑定到该名称的值。如果该名称未在当前函数中定义,它将在全局范围内求值为其绑定的值。如果未在当前或全局范围内定义名称,则结果是未定义的(参考实现给出错误消息并返回nil)。 内置函数和宏 tinylisp中有七个内置函数。函数先对每个参数求值,然后对它们应用一些运算并返回结果。 c-缺点[命令列表]。接受两个参数,一个值和一个列表,并返回通过将值添加到列表的前面而获得的新列表。 h-头(用Lisp术语表示为car)。取得一个列表并返回其中的第一项;如果给出nil,则返回nil。 t-tail(cdr,用Lisp术语)。获取列表并返回一个新列表,其中包含除第一项外的所有列表;如果为nil,则返回nil。 s- 减去。取两个整数并返回第一个减第二个。 l- 少于。取两个整数;如果第一个小于第二个,则返回1,否则返回0。 e-相等 接受两个相同类型的值(两个整数,两个列表或两个符号);如果两者相等(或每个元素相同),则返回1,否则返回0。未定义测试内置函数是否相等(参考实现按预期工作)。 v-评估。取得一个表示表达式的列表,整数或符号,然后对其求值。例如做(v (q (c a b)))与做是一样的(c a b); ...

5
8位虚拟机
背景 我喜欢旧的8位6502芯片。在6502机器代码中解决PPCG方面的一些挑战甚至很有趣。但是,一些应该很简单的事情(例如,读入数据或输出到stdout)在机器代码中不必要地麻烦。因此,我想到一个粗略的想法:发明我自己的8位虚拟机,该虚拟机受6502的启发,但修改后的设计使其更能应对挑战。开始实施某些东西时,我意识到如果将VM的设计减少到最低限度,这本身就是一个不错的挑战:) 任务 实现符合以下规范的8位虚拟机。这是code-golf,因此以最少的字节数实现。 输入值 您的实现应采用以下输入: 一个无符号字节pc,它是初始程序计数器(0基于VM的内存开始执行的内存中的地址) 具有最大256条目长度的字节列表,这是虚拟机的RAM(及其初始内容) 您可以采用任何合理的格式输入此信息。 输出量 字节列表,这是VM终止后RAM的最终内容(请参阅下文)。您可以假设您只得到导致最终终止的输入。允许使用任何明智的格式。 虚拟CPU 虚拟CPU具有 一个8位程序计数器 一个8位累加器寄存器称为A和 一个称为的8位索引寄存器X。 有三个状态标志: Z -在执行某些操作后置零标志 0 N -在某些操作导致负数之后设置负标志(现在将结果的第7位设置为1) C -进位标志由加法设置,并移位结果的“缺失”位 在开始的标志被全部清零,程序计数器设置为给定值和内容A,并X是不确定的。 8位值代表 范围内的无符号整数[0..255] 有符号整数(2的补码),范围为[-128..127] 取决于上下文。如果某个操作上溢或下溢,则该值会回绕(如果加法,进位标志也会受到影响)。 终止 虚拟机在以下时间终止 一HLT到达指令 访问了不存在的内存地址 程序计数器在内存外部运行(请注意,即使VM被提供了完整的256字节内存,它也不会回绕) 地址模式 隐式 -指令没有参数,隐含操作数 立即数-操作数是指令之后的字节 相对 -(仅用于分支)指令后的字节被签名(2的补码),并确定执行分支后要添加到程序计数器的偏移量。0是以下指令的位置 绝对 -指令后的字节是操作数的地址 索引 -指令加号X(寄存器)之后的字节是操作数的地址 使用说明 每条指令都由一个操作码(一个字节)组成,在寻址模式下是即时,相对,绝对和索引第二个参数字节。当虚拟CPU执行一条指令时,它会相应地(由1或2)递增程序计数器。 此处显示的所有操作码均为十六进制。 LDA -将操作数加载到 A ...

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.