Questions tagged «stack»

对于涉及类堆栈数据结构的挑战(有关详细信息,请参见标签Wiki),包括基于栈的编程语言的解释器以及专门针对调用栈的挑战。

6
根据规范生成矩形
介绍 这项挑战的灵感来自我的2D模式匹配语言Grime。基本上,您将获得一个描述二维字符网格的“语法”,而您的工作是根据该语法生成​​一个网格。另外,从某种意义上说,网格应尽可能小。 输入值 您的输入是一个包含小写ASCII字符以及符号|和的字符串-。为简单起见,输入不包含重复的小写字符。字符串是一类矩形字符网格的规范,它使用堆栈从左到右进行解析,如下所示。 给定一个小写字符c,将任何一个m×n字符的网格压入堆栈。cm, n ≥ 1 给定一个管道|,弹出两个网格A并B从堆栈中弹出(B位于顶部),然后将AB通过串联B而获得的网格推到的右侧A。这要求A并B具有相等的高度。 给定一个连字符-,弹出两个网格A并B从堆栈中弹出(B位于顶部),然后将A/B通过串联B而获得的网格推到的底部A。这需要A并B具有相等的宽度。 确保在解析过程中对进行某些选择m和选择n(每个字母可能有所不同),输入规范正确地描述了一些矩形,该矩形最后留在堆栈上。 输出量 您的输出是由输入指定的字符的矩形网格。在删除任何行或列将使其无效的意义上,网格必须最小。您可以返回以换行符分隔的字符串(带或不带尾随换行符),2D字符数组或字符串数​​组,以最方便的格式为准。 请注意,您不需要完全如上所述地处理输入;唯一重要的是您的输出正确。 例 考虑规格 par-s||e- 首先,我们选择推1×2的矩形p,和1×1的矩形a和r(这样做的原因很清楚更高版本)。然后,我们弹出a和r矩形,并推动它们的垂直串联 a r 接下来,我们推1×2的矩形s,弹出它和上面的矩形,并推动其横向拼接 as rs 然后,我们弹出该矩形和该p矩形,并推动它们的串联 pas prs 最后,我们推入的3×1矩形e,将其弹出并上方的矩形,然后推入垂直串联 pas prs eee 这是程序的输出,或者是至少一种可能性。请注意,即使 ppas ppas pprs eeee 也是由规范生成的,它不是有效的输出,因为可以删除许多行和列。 作为一个更微妙的例子,考虑 co|m|p|il|e|r|- 此规范生成矩形 comp iler 这是有效的输出。但是,它也会产生 commp iiler 这也是有效的,因为没有使无效的行和列都无法删除。 规则 您可以提供完整的程序或功能。最低字节数获胜,并且不允许出现标准漏洞。 额外的测试案例 您可以使用它们来测试您的程序。 Input: …

1
你能超越比尔·盖茨吗?
煎饼分类是一个数学问题的通俗术语,即当可以将抹刀插入堆叠中的任意点并用来翻转其上方的所有煎饼时,按大小顺序对无序的煎饼堆叠进行分类的数学问题。煎饼数P(n)是n个煎饼所需的最小翻转次数。1个 1979年,年轻的比尔·盖茨(Bill Gates)和克里斯托斯(Christos Papadimitriou)撰写了一篇论文,证明P(n)=(5n + 5)/ 3的上限。2 我认为可以肯定的是,盖茨(和/或帕帕第米特里奥)编写了一个程序,使用他们开发的算法(可能晚于1979年)执行煎饼分类。由于盖茨是一位熟练的程序员,因此他们可能会尽可能地尝试编写此代码,但是源代码的大小尚未公开(AFAIK)。 挑战: 创建一个执行煎饼分类的函数/程序,最大翻转次数不超过盖茨和帕帕第米特里乌找到的界限。3您可以选择是要列表递增还是递减,只要它是一致的即可。 您可以假设n <50。因此,您必须将翻转次数限制为(一些随机选择的n值): n P(n) 38 65 49 83 50 85 输出应该是每次翻转之前刮刀的位置。输出可能是零索引或一个索引,您可以选择从顶部还是底部进行计数。 附加规则: 运行时必须是确定性的 没有固定的时间限制,但是您必须能够提供包含50个元素的列表的输出 测试清单: 我无法提供最困难的列表(如果是的话,我会写一篇论文,而不是挑战),所以我将提供一些随机数字列表,您可以在这些数字上测试函数/程序。如果事实证明这些列表“容易”,我可能会添加其他人。 9, 63, 62, 75, 45, 78, 59, 75, 69, 3, 28, 94, 51, 10, 45, 93, 97, 80, 72, 36, 80, 88, 30, 93, …

13
斐波那契产品
您可以将大于0的数字分解为正Fibonacci数字的唯一和。在这个问题中,我们通过重复减去最大可能的正斐波那契数来做到这一点。例如: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 现在,我将斐波那契乘积称为与上面相同的列表,但加法运算被乘积代替。例如,f(100) = 89 * 8 * 3 = 2136。 编写一个给定正整数n的程序或函数,该函数将返回该数字的斐波那契乘积。 测试用例: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

8
欠载数的最短表示
风味文字 基于堆栈的esolang 欠载有一些有趣的联系,函数式编程。其中之一是对数值数据类型的处理-像lambda演算一样,您可以通过执行N次操作的函数来表示自然数N。 为简单起见,我们仅考虑以下Underload命令子集: : -此命令复制堆栈上的顶层项目。 * -此命令将堆栈中的前两个项目合并为一个项目。 我们将一个Underload数字N定义为一个字符串,当执行该字符串时:,*它消耗堆栈中的最高位项目,并产生N个该项目的副本,并将它们连接在一起。一些例子: 没有欠载数字0,-1、1 / 2,π。 空字符串是欠载数字1,因为它使堆栈保持不变。 :*是欠载数字2,因为它复制了最上面的项目,然后将这两个副本连接在一起成为一个项目:(A):*= (A)(A)*= (AA)。 ::**是Underload数字3:(A)::**= (A)(A):**= (A)(AA)*= (AAA)。 :::*** 是欠载数字4。 :*:*也是欠载数字4:(A):*:*= (AA):*= (AA)(AA)*= (AAAA)。 通常,您会发现,如果M和N分别是欠载数字M和N,则:N*数字N + 1和MN数字M×N。 挑战 您的任务是编写最短的程序(在STDIN上接受输入)或函数(通过参数接受输入),以产生最短的欠载数字表示形式,作为字符串输入。也就是说,如果输入的正自然数N> 1,则必须生成一个负数N,其字符长度小于或等于其他所有负数N的长度。 输入和输出示例:(“输入- OUTPUT”) 1- 。 2- :*。 5- ::*:**(2×2 + 1)。 7- ::*::***(2×3 + 1)或:::**:**(3×2 + 1)。 33- ::*:*:*:*:**(2×2×2×2×2 …

2
X大于3,且X和Y之间至少相差2
我试图打败一些C ++。是否可以使这种情况更短? X > 3 & X - Y > 1 (当然,除了删除空白。) 所以,X至少4,但X >= Y + 2。 X和Y是[0,5]间隔中的整数。 我试图找到一些按位公式,但失败了。
11 code-golf  number  tips  c++  code-golf  popularity-contest  obfuscation  code-golf  c  code-golf  board-game  hexagonal-grid  code-golf  game  grid  code-golf  number  permutations  popularity-contest  math  graphical-output  number-theory  king-of-the-hill  code-challenge  compression  code-challenge  fastest-code  code-golf  math  ascii-art  animation  code-golf  popularity-contest  generation  counting  fastest-code  fastest-code  popularity-contest  image-processing  king-of-the-hill  code-golf  conversion  binary-tree  code-golf  math  number  rational-numbers  division  code-golf  restricted-source  hashing  atomic-code-golf  logic-gates  code-golf  function  code-challenge  puzzle-solver  ai-player  test-battery  popularity-contest  music  compression  code-golf  number  stack  atomic-code-golf  logic-gates  ascii-art  popularity-contest  code-golf  date  grid  code-challenge  game  code-golf  parsing  code-golf  math  geometry  sequence  popularity-contest  code-trolling  code-golf  string  restricted-source  code-golf  quine  king-of-the-hill  code-golf  math  code-golf  simulation  code-golf  ascii-art  code-challenge  sorting  optimization 

3
编写Clem解释器
Clem是一种基于堆栈的最小编程语言,具有一流的功能。您的目标是为Clem语言编写一个解释器。它应正确执行参考实现中包含的所有示例,可从此处获得。 像往常一样,存在标准漏洞。 按字节数最小的条目获胜。 克莱姆语言 Clem是具有一流功能的基于堆栈的编程语言。学习Clem的最好方法是clem不带参数地运行解释器。它将以交互模式启动,使您可以使用可用的命令进行播放。要运行示例程序,请键入clem example.clmwhere example是程序的名称。这个简短的教程应该足以让您入门。 主要有两类功能。原子功能和复合功能。复合函数是由其他复合函数和原子函数组成的列表。请注意,复合函数不能包含自身。 原子功能 第一类原子函数是常数。甲恒定仅仅是一个整数值。例如-10。当解释器遇到常量时,它将其推入堆栈。clem现在运行。键入-10在提示符下。你应该看到 > -10 001: (-10) > 该值001描述了函数在堆栈中的位置,并且(-10) 是您刚刚输入的常数。现在+11,在提示符下输入。你应该看到 > +11 002: (-10) 001: (11) > 请注意,它(-10)已移动到堆栈中的第二个位置,(11)现在占据了第一个位置。这就是堆栈的本质!您会注意到这-也是减量命令。无论何时-或+在数字之前,它们表示该数字的符号,而不是相应的命令。所有其他原子函数都是命令。共有14个: @ Rotate the top three functions on the stack # Pop the function on top of the stack and push it twice $ Swap the …

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 的数量始终增加一: @?/!@>!??/!!>!+.!!.!!.!!.+>!.!!$$$$+$>!>!$>!>!+>!$>!>!>!+>!>!///!!>!>!>!.!!.!!.!!.!!.!!.!!.!!.!!.!!.!!+!!!!! 存储库包含带注释的版本。

17
河内求解器塔
有关河内塔楼的信息,请用谷歌搜索或在Wikipedia页面上查看。 您的代码应该能够执行以下两项操作,它们是: 接受在河内塔楼起点指定了光盘数量的用户输入 以您选择的方式创建输出(只要出于某种逻辑即可)以显示塔式难题的解决方案。 逻辑输出的示例如下(使用4盘启动): L1L2C1L1R-2R-1L1L2C1C-1R-2C1L1L2C1 L代表左钉子,C代表中心钉子,R代表右钉子,数字是该盘在该钉子上移动的方向和方向。正数表示向最右边的钉子移动的钉子的数量(因为磁盘从最左边的钉子开始)。 河内塔的规则很简单: 一次只能移动一个磁盘。 每次移动都包括从一个钉子上取下上盘并将其滑到另一个钉子上,然后再将另一个钉子顶在该钉子上。 请勿在较小的磁盘上放置任何磁盘。 磁盘自然地从最左端的钉开始,最大的在底部,最小的在顶部。
10 code-golf  stack 

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 
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.