Python: Saya berharap saya PHP [ditutup]

8

Ada cerita lama tentang seorang pemahat batu yang tidak pernah puas dengan dirinya. Dia berharap bisa menjadi matahari, dan memang begitu. Diblokir oleh awan, ia ingin menjadi - dan menjadi - awan. Ketika angin bertiup, dia berharap dirinya menjadi angin. Dihentikan oleh gunung, dia ingin menjadi gunung, dan dengan demikian menjadi satu. Namun, tak lama kemudian, ia diretas oleh pemahat batu, dan ingin menjadi pemahat batu.

Demikian pula, tugas Anda adalah menulis sebuah program yang tidak pernah puas dengan bahasa yang digunakan. Program Anda harus menampilkan serangkaian penggantian regex untuk mengubahnya menjadi bahasa yang berbeda. Dan seterusnya.

Aturan

  1. Tulis program dalam bahasa pilihan Anda.
  2. Program harus menampilkan serangkaian setidaknya dua segmen. Segmen adalah sekelompok teks, dipisahkan oleh titik koma. Namun, jika tanda titik koma terkandung dalam suatu regex, sehingga memecahnya akan menghasilkan sintaks yang tidak valid, itu tidak memisahkan segmen. Lihat contohnya.
  3. Segmen pertama adalah pola regex untuk ditemukan, dan segmen kedua adalah pola penggantian. Yang ketiga adalah pola "temukan" yang lain, dan yang keempat adalah pola "ganti", dan seterusnya.
  4. Terapkan pola regex ke program. Ganti pola pada segmen pertama dengan satu pada segmen kedua; ganti pola ketiga dengan yang di keempat, dan seterusnya.
  5. Hasilnya harus berupa program dalam bahasa yang berbeda, yang dengan sendirinya mengikuti aturan 2 hingga 4.
  6. Bahasa yang digunakan harus membentuk siklus berulang yang tak terbatas.
    • Misalnya, Python -> PHP -> C ++ -> Python -> PHP -> C ++ -> Python -> ...
  7. Skor Anda adalah periode siklus. Ikatan terputus oleh panjang kode awal terpendek.
    • Dalam contoh di atas, skornya adalah tiga.
  8. Dalam setiap iterasi siklus, tidak ada bahasa yang dapat digunakan lebih dari satu kali.
  9. Untuk aturan 5 dan 7, bahasa yang kompatibel (C dan C ++) dan versi berbeda dari bahasa yang sama (Python 2 dan Python 3) dianggap sama.
  10. Program-program itu sendiri tidak perlu diulang.
    • Dalam contoh di atas, program pertama dan keempat mungkin berbeda.
  11. Versi regex apa pun dapat diterima, tetapi hal yang sama harus digunakan untuk semua program.
  12. Total output untuk setiap program tidak boleh melebihi 100 karakter.
  13. Setiap output harus berisi instruksi untuk benar-benar mengubah program. Artinya, tidak ada dua program berturut-turut dalam siklus yang mungkin sama.

Contoh

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

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

Output:

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

Segmennya adalah:

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

Menerapkan penggantian regex, agar, memberi kita:

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"

Menjalankan baris terakhir memberi kita petunjuk untuk mengubahnya kembali menjadi kode Python.

Ypnypn
sumber
Jika Anda menggunakan ukuran kode sebagai tie breaker, apakah kami benar-benar membutuhkan batas 100 karakter?
Martin Ender
@ MartinBüttner Ya; kenapa tidak?
Ypnypn
Tentu, tetapi ini adalah karakter yang lebih lama dari \;;)
Martin Ender
C ++ belum tentu kompatibel dengan C.
golfer9338
8
Saya pikir Anda mungkin ingin mensyaratkan bahwa semua program dalam siklus berbeda. Jika saya salah, sebutkan itu - dan saya mengklaim prioritas pada solusi yang jelas.
Peter Taylor

Jawaban:

6

2 Bahasa: Python, Ruby; 33 29 byte

Berikut cara lain untuk melakukan Python dan Ruby, itu sedikit lebih pendek daripada yang ada di tantangan:

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

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

Seharusnya tidak terlalu sulit untuk menambahkan PHP ke dalam campuran.

Martin Ender
sumber
1

2 bahasa: Python 2 dan Befunge-93, 77 byte

Setelah membaca peraturan dengan hati-hati kali ini , saya menemukan jawaban yang nyata. Itu tidak akan memenangkan hadiah apa pun, tapi Befunge terlalu menyenangkan untuk diprogram.

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

Output program Python ini:

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

Yang menghasilkan penggantian ini:

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

Yang mengubah program menjadi program Befunge ini:

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

Mungkin saya akan melihat apakah saya bisa membuatnya satu baris. Terus terang, saya sedikit terkejut Befunge bekerja untuk masalah semacam ini sama sekali.

(Maaf telah menghapus dan membatalkan penghapusan banyak; Saya panik sejenak karena saya pikir program mungkin tidak berhasil.)

Kasran
sumber