Cyclic Polyglot Challenge (Cops)

11

Cyclic Polyglot Challenge

Ini adalah utas polisi. Anda dapat menemukan utas perampok di sini .

Polyglot Siklik

Polglot siklik N-elemen adalah program lengkap yang dapat dijalankan dalam N bahasa yang berbeda. Di setiap bahasa, ketika program dijalankan tanpa input (mungkin tunduk pada pengecualian ini ), ia harus mencetak nama bahasa ke STDOUT. Khususnya, jika program dijalankan dalam bahasa Kth, ia harus mencetak nama bahasa th (K +1). Jika program dijalankan dalam bahasa ke-N (yaitu, bahasa terakhir dalam siklus elemen-N), itu harus mencetak nama bahasa pertama.

Contoh mungkin berguna.

a = [[ v = 7, puts('Befunge') ]]
__END__
= print("Ruby")
-->*+:292*++,,@
--3    9
--7    *
--^,:-5<

Menjalankan program ini dengan Lua mencetak string "Ruby". Menjalankan program ini di Ruby mencetak string "Befunge". Menjalankan program ini di Befunge mencetak string "Lua", menyelesaikan siklus. Program ini merupakan 3 siklus yang terdiri dari Lua, Ruby, dan Befunge.

Bahasa yang sama tidak dapat muncul dua kali dalam satu siklus, dan versi berbeda dari bahasa yang sama (seperti Python 2 dan Python 3) tidak dapat muncul dalam siklus yang sama satu sama lain.

Polisi

Tantangan Anda adalah untuk menulis polyglot N-siklik, di mana N setidaknya 2. Kemudian, Anda harus menambahkan, mengganti, dan menghapus sejumlah karakter ke program untuk menghasilkan polyglot M-siklik, di mana M benar-benar lebih besar dari N Anda harus memposting polyglot N-cyclic yang lebih pendek (dan bahasa yang digunakannya), serta jumlah karakter yang Anda ubah untuk menghasilkan polyglot yang lebih panjang. Skor Anda adalah N, jumlah bahasa dalam siklus pendek Anda.

Perampok akan mencoba mengidentifikasi siklus panjang Anda. Jika, setelah tujuh hari, tidak ada yang berhasil memecahkan solusi Anda, Anda harus mengedit jawaban Anda menyatakan bahwa itu aman. Anda juga harus memposting polyglot M-siklik yang lebih panjang saat ini.

Perampok

Dengan poliglot N-siklik polisi dan jumlah karakter yang ditambahkan untuk menghasilkan siklus poliglot yang lebih besar, tujuan Anda adalah menghasilkan siklus yang lebih besar. Jika Anda dapat menghasilkan siklus yang lebih lama dengan menambahkan, menghapus, atau mengganti karakter sebanyak yang dilakukan polisi atau lebih sedikit karakter , Anda telah memecahkan polyglot polisi. Skor Anda adalah panjang dari siklus baru yang Anda buat. Poliglot baru Anda tidak harus sama atau bahkan mirip dengan poliglot rahasia polisi; hanya perlu lebih besar dari yang sudah ada.

Solusi Anda mungkin juga retak. Jika perampok lain datang dan menghasilkan siklus yang lebih panjang dari milik Anda, mulai dari poliglot polisi yang sama, mereka telah mencuri poin Anda.

Bahasa Pemrograman yang Valid

Karena tantangan ini secara tidak langsung melibatkan menebak bahasa pemrograman yang digunakan oleh peserta lain, definisi bahasa pemrograman untuk keperluan tantangan ini akan sedikit lebih ketat daripada definisi yang biasa. Bahasa pemrograman yang digunakan dalam tantangan ini harus memenuhi semua kondisi berikut.

Catatan Akhir

  • Kode yang Anda tulis harus merupakan program mandiri dalam setiap bahasa yang dimaksudkan untuk dijalankan. Fungsi atau cuplikan kode tidak diizinkan.
  • Program Anda tidak akan diberi input melalui STDIN. Demikian juga, program Anda harus mencetak apa pun ke STDERR.
  • Skor polisi adalah jumlah bahasa dalam siklus polyglot yang mereka poskan. Polisi harus memposting bahasa yang menjalankan polyglot yang diposting dengan benar, serta jumlah karakter yang mereka tambahkan untuk menghasilkan polyglot yang lebih panjang. Mereka tidak bertanggung jawab untuk memposting bahasa yang lebih lama, polyglot tersembunyi berjalan hingga jawaban mereka aman.
  • Skor perampok adalah jumlah bahasa yang digunakan polyglot yang dimodifikasi. Seperti halnya polisi, perampok harus memposting daftar bahasa yang digunakan polyglot dengan benar.
  • Jumlah karakter yang diubah harus dihitung dalam jarak Levenshtein.
Silvio Mayolo
sumber
3
"Bahasa itu harus memiliki juru bahasa atau kompiler yang tersedia secara bebas. Maaf, penggemar Mathematica, tetapi perampok harus dapat memverifikasi solusi Anda." Apa yang salah dengan Cloud Terbuka Wolfram? sandbox.open.wolframcloud.com
Scott Milner
Saya tidak menyadari hal itu, karena saya memiliki salinan Mathematica di komputer saya. Komentar dihapus.
Silvio Mayolo
Apakah boleh untuk N = 2 dan M = 3?
mdahmoune
Ya itu baik baik saja. Skor Anda hanya 2, tapi itu bisa diterima.
Silvio Mayolo

Jawaban:

1

C (gcc) , 126 byte

M=N+1

Levenshtein(polyglot(M),polyglot(N))adalah 36 byte

#include<stdio.h>
#define print(a) main(){int z[1];if(sizeof(0,z)==4)printf("C(gcc)");else printf("Perl5");}
print("C++(gcc)")

Cobalah online!

mdahmoune
sumber
Cracked (dengan Levenshtein dari 10)
Stephen