Questions tagged «interpreter»

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

2
解决模块化SNISP的暂停问题
本着为Befinge解决停机问题的精神,让我们定义另一种称为Modilar SNISP的 2D语言。Modilar SNISP具有以下六个指令: \ 指令指令指针如下: 如果从顶部接近,请向右走; 如果从右边靠近,则往上走; 如果从底部接近,则向左走; 如果从左侧接近,则向下走。 / 指令指令指针如下: 如果从顶部接近,则向左走; 如果从左侧接近,则上升; 如果从底部接近,请向右走; 如果从右边靠近,则往下走。 ! 跳过下一条指令。 @ 将IP位置和方向推送到调用堆栈中。 #从调用堆栈中弹出IP位置和方向并进行恢复,然后跳过下一条指令。如果调用堆栈为空,则执行停止。 . 什么也没做。 指令指针从右上角的左上角开始。如果它离开了运动场,执行将停止。 模块化SNISP不能比PDA强大,因为它的唯一无限存储源是带有有限字母(所有IP(位置,方向)对的集合)的堆栈(调用堆栈)。暂停问题对于PDA来说是可以决定的,因此这一挑战应该总是可能的。 挑战 您的目标是编写一个程序,该程序使用代表Modilar SNISP程序的字符矩阵,并根据是否停止而返回两个不同的输出之一。 这是代码高尔夫球,因此最短的有效程序(以字节为单位)获胜。 技术指标 字符矩阵的处理方式很灵活:可以使用换行符分隔的字符串,字符串数组,字符数组,二维字符数组,带整数表示宽度的扁平字符数组等。测试用例选择其中的第一个。 您可以假设输入矩阵将是矩形的(因此您不必填充短行)并且长度和宽度将为非零。 您可以选择任意两个不同的输出,而不仅仅是真/假。 你可以假设输入矩阵将只包含有效的命令(\,/,!,@,#,和.)。 当说一条命令“跳过下一条指令”时,您可以假定将要跳过下一条指令。特别是,在以下情况下将永远不会遇到它:(1)它位于运动场的边缘,并且(2)IP垂直于该边缘移动,以使IP之后的“下一条指令”位于运动场之外。 测试用例 以下代码段可用于测试使用该语言的程序。请注意,它比此处给出的实际规范稍微宽松一些(例如,它允许使用.非禁忌字符)。 function htmlEscape(t){let i=document.createElement("span");return i.innerText=t,i.innerHTML}function tick(){snisp.tick(),snisp.update()}function run(){runButton.style.display="none",stopButton.style.display="",code.style.display="none",executionArea.style.display="",snisp.initialize(),intervalId=setInterval(tick,INTERVAL_MS)}function stop(){runButton.style.display="",stopButton.style.display="none",code.style.display="",executionArea.style.display="none",clearInterval(intervalId)}let TICKS_PER_SECOND=5,INTERVAL_MS=1e3/TICKS_PER_SECOND,runButton=document.getElementById("run-button"),stopButton=document.getElementById("stop-button"),code=document.getElementById("code"),executionArea=document.getElementById("execution-display"),intervalId,snisp={x:null,y:null,direction:null,callStack:null,stopped:null,playfield:null,padRows:function(){let t=Math.max(...this.playfield.map(t=>t.length));for(let i=0;i<this.playfield.length;i++)this.playfield[i]=this.playfield[i].padEnd(t,".")},initialize:function(){this.x=0,this.y=0,this.direction="right",this.callStack=[],this.stopped=!1,this.playfield=code.value.split("\n"),this.padRows(),this.update()},getCurrentChar:function(){let t=this.playfield[this.y];if(void 0!=t)return t[this.x]},backslashMirror:function(){let …

3
RoboZZle口译员
您的任务是编写RoboZZle解释器。如果您不熟悉该游戏,请在robozzle.com上观看视频或阅读下面的说明。 机器人生活在一个正方形的红色,绿色,蓝色或黑色正方形网格中。黑色方块无法访问。其他的则可以访问,其中一些包含星号。目标是收集所有星星,而不会踩到黑色方块或从地图上掉下来。机器人占据一个正方形并面向特定方向-左,右,上或下。它遵循类似汇编的指令,分为子程序F1,F2,...,F5。一条指令是一对谓词(“无”,“如果红色”,“如果绿色”,“如果蓝色”)和一个动作(“前进”,“左转”,“右转”), “将当前方块涂成红色”,“将其涂成绿色”,“将其涂成蓝色”,“什么都不做”,“调用F1”,...,“调用F5”)。对子例程的调用使用堆栈,并且可以是递归的。就像在常规编程中一样,在子例程的最后一条指令完成之后,从调用子例程的那一点开始执行。从F1的第一条指令开始执行,一直持续到机器人访问带有星星的所有正方形,或者机器人踩到黑色正方形或在地图外部或执行了1000条指令(谓词失败且“不执行任何操作”) (不计算在内),或者没有更多要执行的指令(堆栈下溢)。 输入: a-编码地图的12x16字符矩阵(通常用您的语言表示,例如字符串数组)对地图'#'进行编码- 不可访问的(黑色)正方形,'*'带有星星的正方形,'.'其余的 c-12x16字符矩阵,描述可访问正方形的颜色- 'R'(红色),'G'(绿色)或'B'(蓝色)。无法访问的方块将由三个中的任意字母表示。 y和x-机器人的基于0的行和列; a[y][x]保证是'.' d-的方向上的机器人朝向:0 1 2 3右,下,左,上,即朝向(y,x+1),(y+1,x),(y,x-1),(y-1,x) f-单个字符串,F1 ... F5的串联实现。每个实现都是谓词操作对的序列(可能为空)(每个子例程最多10对),以终止'|'。 谓词:'_'无,'r'红色,'g'绿色,'b'蓝色 动作:'F'向前,'L'向左'R'转,向右转,'r'涂红色,'g'涂绿色,'b'涂蓝色,'1'呼叫F1,...,'5'呼叫F5,'_'不执行任何操作 您不必像上面一样命名输入,但是它们的值必须与指定的相同。 输出:(1或true)如果机器人根据规则收集了所有恒星,则为0(false)。 范例: a=["################","################","##*....*...*#.##","##.####.#####.##","##.####.#####.##","##.####*...*#.##","##.########.####","##*........*#.##","################","################","################","################"] c=["RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRBBBBRGGGGRRRR","RRBRRRRGRRRRRRRR","RRBRRRRGRRRRRRRR","RRBRRRRRGGGBRRRR","RRBRRRRRRRRGRRRR","RRRBBBBGGGGBRBRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR","RRRRRRRRRRRRRRRR"] y=2; x=6; d=2 // and then depending on "f": f="_FrLg2_1|_FbLrR_2||||" // result:1 f="_FrRg2_1|_FbLrR_2||||" // result:0 (stepped on a black square) f="_FrLrL_1|_FbLrR_2||||" // result:0 (1000-step limit …

9
做译员!
是的是一种基于堆栈的语言,其中有一些用空格分隔的指令: yes: Push 1 to the stack no: Push 0 to the stack what: Push the input to the stack (input is taken at the start of program execution and is the same for the whole execution) sure: Increment the last item in the stack nah: Decrement the last item …

4
写一个班次翻译
编辑:你们中有些人怀疑,官方解释器中有一个错误:组成顺序.颠倒了。我有两种版本的解释器,在这里使用了错误的一种。这些示例也是针对此错误版本编写的。我已经修复了存储库中的解释器以及以下示例。的描述>也有点模棱两可,所以我已经解决了。而且,为此花了很长时间的道歉,我陷入了一些现实生活中。 EDIT2:我的解释器在实现中存在一个错误,该错误.反映在示例中(它们依赖于未定义的行为)。现在,此问题已解决。 介绍 Shift是我几年前制作的一种深奥的函数式编程语言,但今天发布了。它基于堆栈,但是像Haskell一样具有自动监视功能。 规格 Shift中有两种数据类型: 功能,具有任意的正元数(输入次数),并且其返回的输出的列表。例如,一个重复其唯一输入的函数具有arity 1,而交换其两个输入的函数具有arity 2。 空格完全相同,除了没有功能外没有其他目的。 Shift程序包含零个或多个命令,每个命令都是一个ASCII字符。共有8条命令: !(应用)弹出的功能f和值x从堆栈,并适用f于x。如果f为1,则将列表f(x)添加到堆栈的最前面。如果具有arity n > 1,则将一个新的(n-1)-ary函数g推入堆栈。它接受输入并返回。x1,x2,...,xn-1f(x,x1,x2,...,xn-1) ?(空白)将空白推入堆栈。 +(clone)将复制其输入的一元函数压入堆栈:任何值x都映射到[x,x]。 >(shift)将接受n-ary函数的一元函数压入堆栈f,并返回(n+1)-ary函数g,该函数忽略其第一个参数x,调用f其余参数,并x在结果前加钉。例如,shift(clone)是一个二进制函数,它接受输入a,b并返回[a,b,b]。 /(fork)将接受三个输入的三元函数压入堆栈a,b,c,[b]如果a为空白,[c]则返回,否则返回。 $(呼叫)推到堆栈弹出的功能的二元函数f和一个值x,并适用f于x完全一样!一样。 .(chain)将一个二进制函数压入堆栈,该函数会弹出两个函数f和g,并返回它们的组成:h具有与ar相同的Arity 的函数,该函数f通常接受其输入f,然后将它们应用于它们,然后完全应用于g结果(调用它的次数取决于其Arity的规定),而输出中的未使用项f保留在的结果中h。例如,假设f的是,克隆其第二个参数,和一个二进制函数g是呼叫。如果堆栈包含[f,g,a,b,c]并且我们包含.!!,那么它包含[chain(f,g),a,b,c]; 如果我们做!!下一个,然后f首次应用于a,b,产生[a,b,b],则将g其应用于该元素的前两个元素,因为其Arity为2,产生[a(b),b],堆栈最终为[a(b),b,c]。 @(比如)推送一元函数,该函数仅返回其输入,并0在其为空白以及1为函数的情况下进行打印。 请注意,除!简单地将一个值压入堆栈外,所有命令均无法执行输入,而输出任何内容的唯一方法是use @。通过逐一评估命令,在调用“ say”时打印0s或1s并退出来解释程序。此处未描述的任何行为(应用空格,应用长度为0或1的堆栈,在空格上调用“ chain”等)都是未定义的:解释器可能崩溃,无提示失败,要求输入或执行任何操作。 任务 您的任务是为Shift编写解释器。它应该从STDIN,命令行或函数参数中获取要解释的Shift程序,然后打印到STDOUT或返回0s和1s 的结果(可能是无限的)输出。如果编写函数,则必须能够以某种方式访问​​无限长的输出(Python中的生成器,Haskell中的惰性列表等)。另外,您也可以输入另一个数字n,n如果长度大于,则返回至少一个字符n。 最低字节数获胜,并且不允许出现标准漏洞。 测试用例 此Shift程序打印01: ?@!@@! 从左侧开始:推一个空格,按下say,然后将say应用于该空格。这输出0。然后,将发言权推两次,然后将第二个发言权应用于第一个发言权。这输出1。 该程序永远循环,不产生任何输出: $+.!!+!! 推动call和clone,然后对其应用链(!由于chain是二进制函数,我们需要两个s )。现在,堆栈包含一个函数,该函数接受一个参数,将其复制,然后在第二个参数上调用第一个副本。使用+!!,我们复制此函数并对其进行调用。 该程序打印0010: ?@$.++>!.!!.!!.!!!!+?/!!!@!@>!!! 推空白并说。然后,编写一个二进制函数,该函数复制其第二个参数b,然后复制第一个参数a并将其与自身组合,然后将该合成应用于的副本b,返回[a(a(b)),b]。其应用到说和空白,然后申请比如说剩余堆栈上的两个元素。 打印此程序0。对于!!!您追加的每个内容,它都会打印出一个额外的0。 ?@+$>!>!+>!///!!>!>!.!!.!!.!!+!!!! 推空白并说。然后,组成一个三元函数,将其f,g,x作为输入并返回[f,f,g,g(x)]。克隆该函数,并将其应用于自身(例如)和空白。该应用程序不会更改堆栈,因此我们可以根据需要多次应用该函数。 此程序将打印无限序列001011011101111...,其中1s 的数量始终增加一: @?/!@>!??/!!>!+.!!.!!.!!.+>!.!!$$$$+$>!>!$>!>!+>!$>!>!>!+>!>!///!!>!>!>!.!!.!!.!!.!!.!!.!!.!!.!!.!!.!!+!!!!! 存储库包含带注释的版本。

30
谈话翻译
“ Talk”是基于baroquified的基于累加器的语言,是为响应Dennis 在talk.tryitonline.net上的报价而创建的。 Waiting for someone to create an esolang called talk. 。“对话”语言具有4个命令: 00 如果累加器为0,则将累加器设置为0。 01 如果累加器为0,则将累加器设置为1。 10 如果累加器为1,则将累加器设置为0。 11 如果累加器为1,则将累加器设置为1。 输入: 根据我们的标准I / O规则,可以通过任何可接受的输入方法进行输入。 有两个输入,初始累加器值和程序。您可以根据需要将这两个输入合并为一个输入,或将输入拆分为有效命令(例如,将它们作为列表;例如[00, 01, 00])。 输出: 在命令执行结束时,累加器将隐式输出。 规则: 输入可以是单个字符串或字符列表。 因为这是 代码高尔夫球,最短答案(以字节为单位)获胜。 我们采用数字或字符串/字符。 测试用例: 0 0001111101 -> 1 0 000100 -> 1 0 11001000 -> 0 排行榜 这是一个堆栈片段,用于按语言生成常规排行榜和获胜者概述。 …

7
高尔夫代码:弗雷序列(I)
挑战 在此任务中,您将得到一个整数N(小于10 ^ 5),输出N阶的Farey序列。 输入N在单行中给出,输入由EOF终止。 输入项 4 3 1 2 输出量 F4 = {0/1, 1/4, 1/3, 1/2, 2/3, 3/4, 1/1} F3 = {0/1, 1/3, 1/2, 2/3, 1/1} F1 = {0/1, 1/1} F2 = {0/1, 1/2, 1/1} 约束条件 输入数量不会超过10 ^ 6个值 您可以使用任何选择的语言 最短的解决方案获胜!
10 code-golf  math  code-golf  math  code-golf  number  number-theory  code-golf  math  arithmetic  repeated-transformation  code-golf  geometry  popularity-contest  code-golf  code-golf  tips  haskell  math  fastest-algorithm  code-golf  combinatorics  code-golf  math  polynomials  rational-numbers  code-golf  code-golf  popularity-contest  javascript  code-golf  kolmogorov-complexity  code-golf  code-golf  math  combinatorics  permutations  code-challenge  restricted-source  random  array-manipulation  code-challenge  generation  code-golf  code-golf  ascii-art  arithmetic  division  code-challenge  number  code-golf  math  number  binary  code-golf  ascii-art  code-golf  interpreter  stack  code-golf  internet  networking  code-golf  math  code-golf  ascii-art  code-golf  math  sequence  code-golf  hello-world  restricted-source  code-golf  ascii-art  code-golf  geometry  code-golf  kolmogorov-complexity  pi  code-golf  math  combinatorics  permutations  code-golf  math  code-challenge  ascii-art  code-golf  string  code-golf  quine  code-golf  math  floating-point  golfscript  code-golf  string  code-golf  sliding-puzzle  code-challenge  arithmetic  code-golf  math  code-golf  geometry  optimized-output 

2
粉末玩具中打高尔夫球的技巧
玩得开心,“粉玩具”是高尔夫运动中一个有趣的挑战,尤其是在摆球逻辑方面。 使TPT成为挑战的是许多解决问题的方法: Should I use Cellular Automaton rules, SWCH logic, Filt logic, subframe filt logic, and/or wall logic? 这样,TPT高尔夫球技巧的位置将非常有帮助,因此我提出了这个问题。 该线程可能会使用很多缩写。其中很多都是游戏中的元素,因此在Wiki上进行搜索会带给您很多有关它们的信息,例如它们的外观。 这是您可能在此主题中看到的最常见的内容,并附有游戏内描述(及其全名),以供不希望搜索的人使用: SPRK:电力。TPT中所有电子设备的基础是沿着电线和其他导电元件传播的。 过滤:过滤。过滤光子,更改颜色。 ARAY:Ray Emitter。光线碰撞时会创建点。 BTRY:电池。产生无限电。 DRAY:复印机射线。复制前面的一行粒子。 CRAY:粒子射线发射器。创建由其ctype设置的粒子束,范围由tmp设置。 SWCH:切换。仅在打开时进行。(PSCN打开,NSCN关闭) 所有元素清单
9 code-golf  tips  the-powder-toy  code-golf  number  array-manipulation  integer  code-golf  string  decision-problem  boggle  code-golf  array-manipulation  average  code-golf  math  code-golf  decision-problem  restricted-source  code-golf  code-golf  math  primes  code-golf  random  code-golf  tips  perl  code-golf  string  parsing  code-golf  math  number  decision-problem  code-golf  math  number  code-golf  string  alphabet  code-golf  math  geometry  code-golf  interpreter  brainfuck  code-golf  code-golf  decision-problem  boggle  code-golf  math  number  sequence  code-golf  math  code-golf  ascii-art  code-challenge  restricted-source  quine  code-golf  math  decision-problem  number-theory  primes  code-golf  ascii-art  code-golf  integer  graph-theory  chess  code-golf  math  interpreter  code-golf  code-golf  code-golf  ascii-art  code-golf  arithmetic  number-theory  code-golf  string  kolmogorov-complexity  code-golf  string  decision-problem  code-golf  primes  factoring  encode  code-golf  decision-problem  code-golf  geometry  grid  code-golf  quine  code-golf  matrix  code-golf  matrix  code-golf  code-golf  number  array-manipulation  code-golf  array-manipulation  sorting  code-golf  matrix  code-golf  brain-flak 

5
解读TwoMega
在这个挑战,你会写一个解释2 Ω(转录为TwoMega),基于松散的语言brainfuck具有无限维存储空间。 语言 2 Ω包含三个部分的状态: 的磁带,它是比特的无穷列表,全部初始化为0。它有一个最左边的元素,但没有最右元素。 的存储器指针,这是一个非负整数,它是在带的元素的索引。较高的内存指针指向更右侧的磁带单元。内存指针0指向最左边的元素。内存指针初始化为0。 该超立方体,这是一个概念性∞维“盒子”细胞,其中的每一个包含一个位初始化为0。超立方体的宽度被绑定在每一个维度为仅2细胞,但尺寸的无穷大装置的数量细胞是不可数的。 指向超立方体的索引是一个无限的位列表,它引用了超立方体中的一个单元(以与使用有限的位列表来引用一个有限维的超立方体相同的方式)。因为磁带是无限的位列表,所以整个磁带始终引用Hypercube的元素;此元素称为引用对象。 2 Ω给出意到7个不同的字符: < 将内存指针减1。将其减少到0以下是未定义的行为,因此您无需处理它。 > 将内存指针加1。 ! 翻转参考对象的位。 . 在参考对象处输出该位。 ^用引用对象的位的倒数替换磁带上的内存指针指向的单元处的位。 [x]x只要引用对象的位为1,就运行代码。 挑战 您的任务是编写一个程序,该程序将字符串作为输入,并以2Ω程序的形式执行该输入。 这是 代码高尔夫球,因此最短的有效答案(以字节为单位)将获胜。 笔记 您可以假定该程序将仅包含字符<>!.^[],并且[]将被正确嵌套。 您的解释器应仅受系统上可用内存的限制。它应该能够在合理的时间内运行示例程序。 样例程序 打印1: !. 打印010: .!.!. 永远打印0: ![!.!] 永远打印0,如果有,!则永远打印1 : [.]![!.!]

2
解读DOGO!
解读DOGO DOGO是鲜为人知的编程语言。最初的DOGO(Usenet帖子中的玩笑语言)从未实现,但已经创建了类似的语言。该语言的命令为: +===========+================================================================+ | Command | Description | +===========+================================================================+ | SIT | If the value of the current memory cell is 0, jump to STAY. | +-----------+----------------------------------------------------------------+ | STAY | If the value of the current memory cell is not 0, jump to SIT. | +-----------+----------------------------------------------------------------+ | ROLL-OVER | Select …

14
高尔夫计算口译员
介绍 计算是一种深奥的笑话语言。 在esolangs条目中: 计算没有必需的语法,并且可以解决所有问题。它足够聪明,可以解释任何人类语言(英语,西班牙语,拉丁语等),任何编程语言(C ++,Java,brainfuck等)或任何您能想到的数据。唯一的缺点是绝对没有I / O。 一些示例程序 Hello World 基本的Hello World程序 What is love? 确定爱是(宝贝不要伤害我)。 When will we ever graduate? 确定该网站退出beta的确切日期。 挑战 您的任务是编写完整的Compute解释器。这听起来很难,但是请记住Compute绝对没有I / O。因此,您的解释器将只为输入程序中的每一行睡眠一秒钟,然后\n\nDone.在此之后输出(这是no I / O的唯一例外)。 您可以在本网站底部找到官方口译员。 请注意,官方解释器会为给定源代码中的每个字符暂停一秒钟。为了避免在等待有意义的问题来测试口译员时的漫长等待时间,我们在挑战中坚持行列。 规则 输入可能包含多行,并用分隔\n。总会有至少一行。 与正式实现不同,您不必将文件作为输入。您可以采用任何所需输入形式的Compute程序。 允许的唯一输出是\n\nDone.。尾随换行符是允许的。 允许功能或完整程序。 输入/输出的默认规则。 有标准漏洞。 这是 代码高尔夫球,因此最低字节数获胜。决胜局是较早提交的。
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.