Python:私がPHPだったらよかった[終了]


8

彼が何であったかについて決して満足しなかったストーンカッターについての古い話があります。彼は太陽になりたいと願い、そうなった。雲に遮られて、彼は雲になりたかった-そして雲になった。風が吹いたとき、彼は自分が風になることを望んだ。山に止められ、山になりたかったので山になった。しかし、間もなく彼は石ころにハッキングされ、石ころになりたかった。

同様に、あなたの仕事は、それが存在する言語に決して満足しないプログラムを書くことです。あなたのプログラムはそれを別の言語に変えるために正規表現の置換のセットを出力する必要があります。等々。

ルール

  1. 選択した言語でプログラムを作成します。
  2. プログラムは、一連の少なくとも2つのセグメントを出力する必要があります。セグメントは、セミコロンで区切られた一連のテキストです。ただし、セミコロンが正規表現内に含まれている場合、セミコロンをそこに分割すると無効な構文が生じるため、セグメントは分離されません。例を参照してください。
  3. 最初のセグメントは検索する正規表現パターンで、2番目のセグメントは置換パターンです。3番目は別の「検索」パターン、4番目は「置換」パターンなどです。
  4. プログラムに正規表現パターンを適用します。最初のセグメントのパターンを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. プログラム自体を繰り返す必要はありません。
    • 上記の例では、1番目と4番目のプログラムが異なる場合があります。
  11. 正規表現の任意のバージョンを使用できますが、すべてのプログラムで同じバージョンを使用する必要があります。
  12. 各プログラムの合計出力は100文字を超えることはできません。
  13. 各出力には、実際にプログラムを変更するための指示が含まれている必要があります。つまり、サイクル内の2つの連続したプログラムが同じであってはなりません。

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文字の制限が必要ですか?
マーティンエンダー2014年

@MartinBüttnerはい; 何故なの?
Ypnypn 2014年

確かに、それはより長い文字です\;;)
マーティン・エンダー

C ++はCと必ずしも互換性がありません
golfer9338

8
おそらく、サイクル内のすべてのプログラムが異なるように要求する必要があると思います。私が間違っている場合はその旨を述べてください-そして私は明白な解決策を優先すると主張します
Peter Taylor

回答:


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がこの種の問題に取り組んでいることに少し驚いています。

(束の削除と削除を取り消して申し訳ありません。プログラムが機能しなかったのではないかと思ったので、一瞬パニックになりました。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.