可逆换向器


19

您的任务很简单。该程序从标准输入中读取一行文本,并以字符反转的形式打印出相同的文本。不允许打印其他任何东西。

例如:

输入:“ Hello!”,输出:“!olleH”

要注意的是,如果源代码本身是字符反转的,则您的程序必须能够执行完全相同的操作!

评分:应用标准的代码高尔夫评分,并进行了以下修改以限制无聊

//margorp
program//

风格答案:任何回文解决方案都会对分数加+ 25%,四舍五入。例如,如果您在程序中插入没有任何作用的字符,只是为了打破回文,这种惩罚仍然适用。


2
可能无法客观地指定“有用的效果”。例如在GolfScript,那-1%#%1-/1还是-1%#%(0
彼得·泰勒

Answers:


14

APL,5

⌽⍞⍝⍞⊖

会使输入()反向(,沿着最后一个轴),并在其后跟随一个注释(标记为行注释)。取反后,程序将取反(,沿第一个轴),然后输入注释。因为在这种情况下,输入总是一维的,所以在功能上是等效的。它甚至可能比GolfScript解决方案更狡猾,因此这里是一个更清洁的解决方案(无评论),得分9

⍬,⌽,⍞,⊖,⍬

首先,它获取一个空向量(),对其进行平整(monadic ,),然后将其反转(,沿第一个轴)。这仍然留下一个空向量。然后,它,与输入()串联(二进位),而输入保持不变。然后,它,使已经平坦的输入变平(单调),并反转(,沿着最后一个轴)。然后,它将,另一个空向量()连接(二进)到反向输入。这什么也没做,将反向输入留在后面。相反,该程序再次基于一维参数在功能上等效的事实执行相同的操作。

您真的不能说我要添加无用的字符来破坏回文(二维输入或二维输入中两个不同的反向函数是不同的;我只是在利用它们在一个或多个输入中的作用相同的事实,尺寸输入)



10

Haskell,53岁

main=niam
niam=interact reverse
esrever tcaretni=main

从技术上讲不是回文,但是,由于函数声明的顺序无关紧要,因此一旦反转,您将拥有完全相同的程序。


不错(+1)。在尝试之前(Link),我不认为这实际上可以做任何事情。
2013年

main=niam声明移到中间,您将得到回文。
Johannes Kuhn 2013年

@JohannesKuhn是的,我承认它仍然是“无聊的”回文解决方案,外观有所不同。
lortabac

10

红宝石,37岁

eval <<1.reverse#
esrever.steg stup
1

反转:

1
puts gets.reverse
#esrever.1<< lave

串这里,偷偷摸摸!+1
门把手

6

Tcl,78

puts [string rev [gets stdin]];#\
]]nidts steg[ ver gnirts[ stup;# tixe emaner

不是回文。



此程序中的“重命名出口”有什么有用的作用?(我不知道Tcl)
vsz

将命令重命名exit#(#是参数,而不是注释的开头)。\#在下一行中将执行#new(不是已开始的注释,因为已转义)exit
Johannes Kuhn

6

gs2、2

(是的,这种语言是在挑战之前制作的。不是,这不是玩笑或漏洞 。ASCII空格(0x20)是反向的。)

编辑:噢,老兄,这个问题太老了?如果我能早一点承诺。:<我会留下这个答案只是因为它太好了而无法通过。


3

Golfscript,9(7 * 1.25 = 8.75)

-1%#%1-

肮脏,肮脏,肮脏,但很短。-1%表示“向后选择每个元素(字符)”,#表示“行注释”。其余的只是GolfScript的I / O魔术。

这是我发现的最短的“干净”(无评论)解决方案(14 * 1.25 = 17.5):

'';-1%..%1-;''

含义:推送一个空字符串,删除它,反转输入,克隆两次,将其自身拆分(消耗两个副本并生成一个空数组),从空数组中删除所有副本,删除emtpy数组,推送一个空字符串并(隐式)打印堆栈。


我应该预料到这一点。即使是500%的罚款也很有可能使其成为获胜者。
vsz 2013年

@vsz但是,我正在golfscript中寻找无注释(即干净)的解决方案。
John Dvorak

如果输入不包含1点的..
约翰内斯·库恩

@JohannesKuhn你是对的。我删除了该“解决方案”。
John Dvorak

@vsz一个更有趣的挑战是禁止使用注释字符(仍然惩罚回文?)我的参赛者有14个字符,我想很多。
John Dvorak 2013年

3

Ruby,44岁

puts gets.reverse#esrever.steg stup

在普通程序的结尾处只是一个注释:P

35个字符,+ 25%= 44



2

Python 3、42

print(input()[::-1]);#)]1-::[)(tupni(tnirp

学分

  • 由我创建的分数为49 + 25%= 61.25的初始版本
  • 感谢arshajii将分数从61.25提高到51.25
  • :-)我创建的分数为42()的新版本

您可以print(input()[::-1])#)]1-::[)(tupni(tnirp在Python 3中使用,以将分数降低到51.25。
arshajii

1
多数民众赞成在削减...
奥利弗·尼

“任何回文解决方案都将对分数加25%的罚款,并四舍五入。例如,如果您在程序中插入没有任何有用作用的字符,以打破回文,则该罚款仍然适用。” 我认为;插入是没有任何有用作用的。
奥利弗·尼

2

Rebmu:9(带惩罚)或13(无)

无聊的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。并且如果您必须从程序中打印到标准输出,而不是接受也会添加几个字符的解释器的表达式输出。)


2

JavaScript,62 * 1.25 = 78

i.split('').reverse().join('')//)''(nioj.)(esrever.)''(tilps.i

不太有创意,但是我能想到的最好的。(假设输入存储在变量中i

我确实得到了:

63个字符,无回文

i.split('').reverse().join('')//)a(nioj.)(esrever.)''=a(tilps.i

但是感觉太像作弊了。:PI可以做很多琐碎的更改(例如使用i['split']代替i.split),但是所有这些仍然让您觉得作弊:P


假设输入存储在变量i中,则(p=a=>a&&p()==`(p=${p})(i)`?i:i.split``.reverse().join``)(i)(60字节)执行该操作。
EscĐiệp

2

派克(Pyke),2(+ 25%),无竞争

_

Pyke隐式接受输入并隐式输出。

_ 是反向功能。


1

Tcl,99

proc unknown args {puts "Hello World!"}
}"!dlroW olleH" stup{ sgra nwonknu corp

如果调用了不存在的命令,则会调用一个特殊的unknown命令来加载该命令。或做其他有趣的事情。


1

T-SQL,86 * 1.25 = 108

这是SQL Server 2008(及更高版本)无聊的回文条目,只是为了表明它是可能的。

DECLARE @ VARCHAR(MAX)='Hi'PRINT REVERSE(@)--)@(ESREVER TNIRP''=)XAM(RAHCRAV @ ERALCED

@保留输入文本,示例字符串为“ Hi”。该条目的字符数用于两个字符的输入字符串。


1

小桶,ceil(1 + 0.25)= 2字节

?

这需要输入和取反,而隐式输出将按字面意义输出。 蒂奥



0

QBIC,14 + 25%= 18字节

;?_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  

0

Pushy,7个字节(5 + 25%)

@"i"@

在线尝试!

这是回文,因此会受到25%的罚款,但这是我所能做的最好的事情。无论运行该程序的哪种方式,它都会执行以下三个命令:

@     \ Reverse the input
 "    \ Print
  i   \ Exit

ic(明确的堆栈)或\(评论)具有相同的效果。



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.