Python:我希望我是PHP [关闭]


8

有一个关于a夫的老故事,他从未对自己的外貌感到满意。他希望自己能成为太阳,所以他做到了。在云层的阻挡下,他希望成为-并且变成-云层。风吹起时,他希望自己成为风。在山上停下来之后,他希望成为一座山,因此成为了一座山。但是不久,他就被by夫砍死,并希望成为stone夫。

同样,您的任务是编写一个对其使用的语言永远不满意的程序。您的程序必须输出一组正则表达式替换项,才能将其转换为另一种语言。等等。

规则

  1. 用您选择的语言编写程序。
  2. 该程序应输出一系列至少两个部分。段是一堆文本,用分号分隔。但是,如果将一个分号包含在正则表达式中,则将其拆分会导致语法无效,因此不会分隔段。参见示例。
  3. 第一部分是要查找的正则表达式模式,第二部分是替换模式。第三个是另一个“查找”模式,第四个是“替换”模式,依此类推。
  4. 将正则表达式模式应用于程序。将第一段上的图案替换为第二段上的图案;将第三个模式替换为第四个模式,依此类推。
  5. 结果应该是使用其他语言的程序,该程序本身遵循规则2至4。
  6. 使用的语言必须形成无限的重复循环。
    • 例如,Python-> PHP-> C ++-> Python-> PHP-> C ++-> Python-> ...
  7. 您的分数是周期的周期。领带被最短的初始代码长度打断。
    • 在上面的示例中,分数为3。
  8. 在该循环的每个迭代中,不得使用任何语言多次。
  9. 对于规则5和7,兼容语言(C和C ++)以及同一语言的不同版本(Python 2和Python 3)被视为相同。
  10. 程序本身不需要重复。
    • 在上面的示例中,第一程序和第四程序可能不同。
  11. 可以使用任何版本的regex,但所有程序都必须使用相同的版本。
  12. 每个程序的总输出不得超过100个字符。
  13. 每个输出必须包含实际更改程序的指令。即,循环中没有两个连续的程序可以相同。

Python-> Ruby-> Python-> ...

print "uts;Z;rint;uts;Z(?=;Z);rint"

输出:

uts;Z;rint;uts;Z(?=;Z);rint

这些段是:

FIND     ;    REPLACE
uts      ;    Z
rint     ;    uts
Z(?=;Z   ;    rint   (breaking the first segment in two would result in invalid syntax)

按顺序应用正则表达式替换,可以为我们提供:

print "Z;Z;rint;Z;Z(?=;Z);rint"      # replace each "uts" with "Z"
puts "Z;Z;uts;Z;Z(?=;Z);uts"         # replace each "rint" with "uts"
puts "rint;Z;uts;rint;Z(?=;Z);uts"   # replace each "Z" followed by ";Z" with "rint"

运行最后一行为我们提供了将其转换回Python代码的说明。


如果您使用代码大小作为平局,我们真的需要100个字符限制吗?
马丁·恩德

@MartinBüttner是的;为什么不?
Ypnypn 2014年

当然,但它的字符长于\;;)
马丁·恩德

C ++不一定兼容C.
golfer9338

8
我认为您可能希望要求周期中的所有程序都不同。如果我错了,请声明-我主张明显的解决方案。
彼得·泰勒

Answers:


6

2种语言:Python,Ruby;33 29个字节

这是另一种处理Python和Ruby的方法,比挑战中的方法要短一些:

Python:   print'^;puts"^.*?\\42#\\73"#'
prints:   ^;puts"^.*?\42#\73"#

Ruby:     puts"^.*?\42#\73"#print'^;puts"^.*?\\42#\\73"#'
prints:   ^.*?"#;

它不应该是困难的PHP添加到组合。


1

2种语言:Python 2和Befunge-93,77个字节

这次仔细阅读了规则之后,我想出了一个真正的答案。它不会赢得任何奖项,但是Befunge太有趣了,无法编程。

u=u">>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u"
print u

该Python程序输出:

>>>>>:#,_@;Z;print;>>>>>:#,_@;Z(?=;Z);print;<v;Y;u;<v;Y(?=;Y);u

产生这些替换:

FIND         REPLACE
>>>>>:#,_@   Z
print        >>>>>:#,_@
Z(?=;Z)      print
<v           Y
u            <v
Y(?=;Y)      u

将程序转换为以下Befunge程序:

<v=<v"print;Z;>>>>>:#,_@;print;Z(?=;Z);>>>>>:#,_@;u;Y;<v;u;Y(?=;Y);<v"
>>>>>:#,_@ <v

也许我会看看是否可以将其设置为一行。坦白说,我有点惊讶Befunge致力于解决此类问题。

(很抱歉删除和取消删除一堆;我恐慌了一秒钟,因为我认为该程序可能无法正常工作。)

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.