Answers:
⌽⍞⍝⍞⊖
这⌽
会使输入(⍞
)反向(,沿着最后一个轴),并在其后跟随一个注释(⍝
标记为行注释)。取反后,程序将取反(⊖
,沿第一个轴),然后输入注释。因为在这种情况下⌽
,输入总是一维的,所以在⊖
功能上是等效的。它甚至可能比GolfScript解决方案更狡猾,因此这里是一个更清洁的解决方案(无评论),得分9。
⍬,⌽,⍞,⊖,⍬
首先⍬
,它获取一个空向量(),对其进行平整(monadic ,
),然后将其反转(⊖
,沿第一个轴)。这仍然留下一个空向量。然后,它,
与输入(⍞
)串联(二进位),而输入保持不变。然后,它,
使已经平坦的输入变平(单调),并反转(⌽
,沿着最后一个轴)。然后,它将,
另一个空向量(⍬
)连接(二进)到反向输入。这什么也没做,将反向输入留在后面。相反,该程序再次基于⌽
和⊖
一维参数在功能上等效的事实执行相同的操作。
您真的不能说我要添加无用的字符来破坏回文(二维输入或二维输入中两个不同的反向函数是不同的;我只是在利用它们在一个或多个输入中的作用相同的事实,尺寸输入)
rev||ver
先前的回答cat|tac
实际上没有用,它tac
颠倒了行的顺序,而不是行中字符的顺序。
(是的,这种语言是在挑战之前制作的。不是,这不是玩笑或漏洞
。ASCII空格(0x20
)是反向的。)
编辑:噢,老兄,这个问题太老了?如果我能早一点承诺。:<我会留下这个答案只是因为它太好了而无法通过。
-1%#%1-
肮脏,肮脏,肮脏,但很短。-1%
表示“向后选择每个元素(字符)”,#
表示“行注释”。其余的只是GolfScript的I / O魔术。
这是我发现的最短的“干净”(无评论)解决方案(14 * 1.25 = 17.5):
'';-1%..%1-;''
含义:推送一个空字符串,删除它,反转输入,克隆两次,将其自身拆分(消耗两个副本并生成一个空数组),从空数组中删除所有副本,删除emtpy数组,推送一个空字符串并(隐式)打印堆栈。
这次是回文。
puts [string rev [gets stdin]]]]nidts steg[ ver gnirts[ stup
]]
和之间]]
是\ x1A字符。)
print(input()[::-1]);#)]1-::[)(tupni(tnirp
:-)
我创建的分数为42()的新版本print(input()[::-1])#)]1-::[)(tupni(tnirp
在Python 3中使用,以将分数降低到51.25。
;
插入是没有任何有用作用的。
无聊的Rebmu解决方案是9,并具有回文惩罚。无论如何,我都会显示它:
rnRVaVRnr
使用注意到字母大写字母的轻松技巧是单独的单词,并且缺少前导大写字母表示我们没有设置固定的单词,而是生成五个普通单词:
rn rv a vr nr
这是等效代码(也是合法的Rebmu)的简写:
return reverse a vr nr
vr和nr无意义的事实无关紧要,因为尽管未分配任何内容,但它们都是有效词。因此,评估程序仅运行return reverse a
...它可以双向运行。但这在某种程度上类似于无聊的作弊:代码没有被注释掉,但是它已经死了,并且不能在一条路径上执行。
对于不会引起惩罚的更令人兴奋的事情,该13个字符的解决方案怎么样:
a VR :rv AvrA
让我们看看扩展后如何在其正向和反向路径上对其进行处理。向前:
a ; evaluate a, as it is a string it has no side effects
vr: :reverse ; "set" vr to mean what a "get" of reverse means now
a: vr a ; assign a to calling "vr" on a, effectively reversing
; ^-- result of assign is last expression, the answer!
向后为ArvA vr: RV a
:
a: reverse a ; assign A to its reversal
vr: rv: a ; make the abbreviation vr equal to assignment of a to rv
; ^-- result of assign is last expression, the answer!
不利的一面是,向后变体会覆盖反向的缩写。嘿,这不是回文,而且只有13个字符。:-)
(注意:这假设您正在/ args模式下运行Rebmu,其中a是在命令行中传递给解释器的程序的默认参数,并且您接受结果。如果实际上是从标准输入中读取内容,则需要将简单的解决方案从9个字符增加到11个字符:rnRVrArVRnr
。并且如果您必须从程序中打印到标准输出,而不是接受也会添加几个字符的解释器的表达式输出。)
i.split('').reverse().join('')//)''(nioj.)(esrever.)''(tilps.i
不太有创意,但是我能想到的最好的。(假设输入存储在变量中i
)
我确实得到了:
i.split('').reverse().join('')//)a(nioj.)(esrever.)''=a(tilps.i
但是感觉太像作弊了。:PI可以做很多琐碎的更改(例如使用i['split']
代替i.split
),但是所有这些仍然让您觉得作弊:P
(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)
(60字节)执行该操作。
;?_fA|#|Af_?;
采用回文源代码。使用两种不同的方法来完成此操作需要更长的时间(34个字节):
;[_lA|,1,-1|Z=Z+mid$(A,a,1)#|Af_?;
说明:
Read the input string from the command line as A$
;
FOR len(A$); a >= 1; a--
[ Starts a FOR loop
_l...| returns the length the argument(here, A$); sets the starting point of the loop
,1 set the end point of the loop
,-1 FOR loop incrementer (or decrementer in this case)
| Ends the argument list for the FOR loop
On each FOR iteration, add the right-most character of the input to Z$
Z=Z+mid$(A,a,1)
The cheat:
# starts a string literal, hiding the flipped source.
The literal is closed implicitly at the end-of-file.
The FOR loop is closed implicitly at the end-of-file.
Z$ gets printed implicitly at the end of the program if it's non-empty
The flipped source is the same as my palindrome-code:
; reads in A$ from the cmd line
? PRINT
_fA| The reversed version of A$
# And hide the rest of our source in a literal
-1%#%1-/1
还是-1%#%(0
?