파이썬 : 내가 PHP 였으면 좋겠다.


8

자기 자신에 대해 결코 만족하지 못한 스톤 커터에 대한 오래된 이야기가 있습니다. 그는 태양이 될 수 있기를 바랐으므로 그렇게되었습니다. 그는 구름에 막혀 구름이되고 싶었다. 바람이 불 때 그는 바람이되기를 바랐다. 산에 들러 그는 산이되고 싶어서 하나가되었습니다. 그러나 얼마 지나지 않아 그는 스톤 커터에 의해 해킹 당하고 스톤 커터가되기를 원했습니다.

마찬가지로, 당신의 임무는 그 언어에 만족하지 않는 프로그램을 작성하는 것입니다. 프로그램은 다른 언어로 바꾸려면 정규식 대체 세트를 출력해야합니다. 등등.

규칙

  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. 프로그램 자체는 반복 할 필요가 없습니다.
    • 위의 예에서, 제 1 및 제 4 프로그램은 상이 할 수있다.
  11. 모든 버전의 정규식이 허용되지만 모든 프로그램에 동일하게 사용해야합니다.
  12. 각 프로그램의 총 출력은 100자를 초과 할 수 없습니다.
  13. 각 출력에는 실제로 프로그램을 변경하기위한 지시 사항이 포함되어야합니다. 즉, 사이클에서 두 개의 연속 프로그램이 동일하지 않을 수 있습니다.

파이썬-> 루비-> 파이썬-> ...

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"

마지막 줄을 실행하면 이것을 파이썬 코드로 되 돌리는 지침이 제공됩니다.


타이 브레이커로 코드 크기를 사용하는 경우 실제로 100 자 제한이 필요합니까?
Martin Ender

@ MartinBüttner 예; 왜 안돼?
Ypnypn

물론, 그러나 그것은보다 긴 문자입니다 \;.)
Martin Ender

C ++는 반드시 C와 호환되지는 않습니다.
golfer9338

8
사이클의 모든 프로그램이 달라야한다고 생각합니다. 내가 틀렸다면 그렇게 말하십시오-나는 명백한 해결책에 우선권을 주장합니다.
피터 테일러

답변:


6

2 개 언어 : Python, Ruby; 33 29 바이트

다음은 파이썬과 루비를 수행하는 또 다른 방법입니다. 도전 과제보다 약간 짧습니다.

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

이 파이썬 프로그램은 다음을 출력합니다 :

>>>>>:#,_@;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.