创建一个解释编程语言桶的程序。
水桶工作在两个桶:第一个可以容纳A,第二个可以容纳B单位的液体。你可以用这些桶做的事情是:
f:装满A桶
F:装满桶B
e:空桶A
E:空桶B
从A到B的液体单位,直到其中一个是空的,另一个是满的,以先发生者为准。
P:和命令p一样,但从B到A
输出桶A的值
O:输出桶B的值
这些示例假设A小于或等于元组(A,B)中的B,这是确定要解释语言的哪个变体的主要元组。A是桶的较小值或等价物,B是较大或相等值:根据你的需要替换。
您的程序应该要求三个输入:
元组(A,B)决定解释语言桶的哪个变体。
作为一般规则,确保前两个输入可以介于0到2,147,483,647之间。
除了fFeEpPoO之外,第三个输入中的任何字符都不需要处理。假设源中没有除这些字符之外的其他字符。
任何相当于将更多液体倒入桶中的命令都不需要处理。
假设程序永远不会尝试从空桶中倒出液体。
这是密码高尔夫,所以最短的解决方案获胜。
在我修改规范之前所做的任何程序都是非竞争性的.
发布于 2019-08-11 04:04:58
发布于 2019-08-10 14:01:29
接受输入为([b, a])(code),其中code是一个字符串。返回输出值数组。
B=>c=>Buffer(c).map(h=j=>(i=j>>5&1,k=j&3)?k>2?o.push(b[i]):b[i]=~-k*B[i]:b[i]&&b[k=i^1]<B[k]&&h(j,b[i]--,b[k]++),b=[0,0],o=[])&&oB => c => // B = [b, a]; c = code string
Buffer(c) // turn c into a buffer
.map(h = j => // for each ASCII code j:
( i = j >> 5 & 1, // i = 1 for lower case, 0 for upper case
k = j & 3 // k = 0 for 'p', 1 for 'e', 2 for 'f', 3 for 'o'
) ? // if k is not 0:
k > 2 ? // if k = 3:
o.push(b[i]) // push b[i] in o[]
: // else:
b[i] = ~-k * B[i] // set b[i] to B[i] if k = 2, or 0 if k = 1
: // else (k = 0):
b[i] && // if b[i] is not empty
b[k = i ^ 1] < B[k] // and the other bucket b[k] is not full:
&& h( // do recursive calls
j, // to pour as much as possible,
b[i]--, // decrementing b[i]
b[k]++ // and incrementing b[k] at each iteration
), //
b = [0, 0], // start with b = [0, 0]
o = [] // and initialize o[] to an empty array
) && o // end of map(); return o[]发布于 2019-08-10 19:13:08
NθNηF⁺eES≡ιf≔θζF≔ηεe≔⁰ζE≔⁰εpF∧ζ‹εη«≦⊖ζ≦⊕ε»PF∧η‹ζθ«≦⊖ε≦⊕ζ»o⟦Iζ⟧O⟦Iε在网上试试!链接是详细的代码版本。实现问题中指定的桶的变体。对于原始版本,Fs可以更改为Ws,用于相同的字节计数:
NθNηF⁺eES≡ιf≔θζF≔ηεe≔⁰ζE≔⁰εpW∧ζ‹εη«≦⊖ζ≦⊕ε»PW∧η‹ζθ«≦⊖ε≦⊕ζ»o⟦Iζ⟧O⟦Iε在网上试试!链接是详细的代码版本。解释:
NθNη输入水桶的大小。
F⁺eES循环执行这些命令,但是在前面加上eE,这样桶就处于已知的状态。
≡ι切换当前命令。
f≔θζ如果是f,那么填充第一个桶。
F≔ηε如果是F,那么填充第二个桶。
e≔⁰ζ如果e然后清空第一个桶。
E≔⁰ε如果E然后清空第二个桶。
pW∧ζ‹εη«≦⊖ζ≦⊕ε»如果p,然后将一个单元从第一个桶倒到第二个桶,直到第一个桶空了,或者第二个桶满了。(有趣的是,这似乎是用木炭表达这一概念的最佳方式。)
PW∧η‹ζθ«≦⊖ε≦⊕ζ»如果P然后将一个单元从第二个桶倒到第一个桶,直到第二个桶空了,或者第一个桶满了。
o⟦Iζ⟧如果o在自己的行上输出第一个桶。
O⟦Iε如果O在自己的行上输出第二个桶。( ⟧是隐式的,在输入中跳过未识别的字符也是如此。)
https://codegolf.stackexchange.com/questions/189661
复制相似问题