String Hampir Ilegal, Mark II (Cops)

Nov 04 2020

Sunting 2020-11-06: Tantangan ini telah diedit dengan ketentuan baru untuk mendorong partisipasi. Pengeditan telah dicetak tebal untuk penekanan.

Selamat datang di Find an Illegal String versi polisi dan perampok .

Sebuah string yang ilegal adalah "string karakter yang tidak dapat muncul dalam setiap program hukum dalam bahasa pemrograman pilihan Anda" (dari pos terkait).

Untuk tantangan ini, kami akan menentukan string yang hampir ilegal , yang merupakan rangkaian karakter yang sangat sulit, tetapi bukan tidak mungkin, untuk disertakan dalam program yang valid.

Tantangan Polisi

  • Pilih bahasa pemrograman, dan pilih 'string yang hampir ilegal' - ini adalah urutan karakter yang sangat sulit untuk dimasukkan dalam program yang valid tanpa menyebabkan kesalahan.
  • Tulis program yang berisi 'string hampir ilegal' sebagai substring bersebelahan yang tidak error.
  • Secara opsional, Anda juga dapat menentukan sekumpulan karakter yang dilarang. Ini adalah karakter yang tidak muncul di program Anda, kecuali di 'string yang hampir ilegal'. (Karenanya: karakter yang dilarang masih dapat muncul di dalam string yang hampir ilegal)

Itu dia! Anda akan mengungkapkan bahasa pemrograman, string yang hampir ilegal, dan kumpulan karakter yang dilarang , dan menantang perampok untuk menulis program yang berisi string ilegal tetapi tidak error.

Untuk keperluan tantangan ini, kami mendefinisikan 'tidak error' sebagai:

  • Program Anda keluar dengan kode keluar 0.
  • Program Anda tidak mencetak keluaran apapun dengan kesalahan standar.
  • Program Anda dapat mencetak apa pun ke keluaran standar, jika Anda mau, tetapi tidak harus.
  • Jika (dan hanya jika) bahasa Anda selalu mencetak output ke kesalahan standar apa pun programnya, seperti debugging atau informasi waktu, Anda dapat merancang program yang hanya menampilkan ini ke kesalahan standar. Jika Anda menggunakan klausul ini, sebutkan di pos polisi Anda.

Tantangan Perampok

Temukan jawaban yang tidak terpecahkan. Menulis program dalam bahasa yang ditentukan yang berisi sebagai substring bersebelahan string yang hampir ilegal ditentukan dan tidak error. Program Anda tidak boleh menggunakan karakter apa pun dalam rangkaian karakter terlarang, kecuali itu adalah bagian dari string yang hampir ilegal. Program Anda tidak harus persis seperti yang ada dalam pikiran polisi. Posting jawaban untuk utas perampok dan berikan komentar pada jawaban polisi untuk memecahkannya.

Klarifikasi

  • Jika jawaban polisi Anda memerlukan lingkungan atau versi operasi tertentu, Anda harus menentukan ini dalam jawaban Anda.
  • String polisi yang hampir ilegal yang mereka ungkapkan harus ditafsirkan sehubungan dengan pengkodean standar untuk penerjemah bahasa. Untuk sebagian besar program, ini adalah UTF8.
  • Solusi tidak boleh mengambil masukan apa pun (melalui masukan standar, argv, atau sumber lain) dan mungkin menganggap tidak ada masukan seperti itu yang diberikan.
  • Solusi harus berakhir dalam waktu yang terbatas. Ini berarti memasuki loop tak terbatas dan terbunuh oleh batas waktu 60 detik TIO bukanlah solusi yang valid.
  • Polisi harus memastikan jika string mereka yang hampir ilegal berisi baris baru di depan atau di belakang, maka sangat jelas hal itu dilakukan. Perampok harus dengan hati-hati mencatat setiap baris baru di depan atau di belakangnya di pos polisi.

Petunjuk pemformatan

Cara paling jelas untuk memasukkan baris baru di depan atau di belakang adalah dengan menggunakan sintaks backtick untuk posting Anda:

```

foo

```

Ditampilkan sebagai:


foo

Untuk menghilangkan ambiguitas, secara eksplisit sebutkan baris baru di depan / di belakang dalam posting Anda.

Penilaian

Setelah 10 hari tanpa celah, polisi dapat menandai jawaban mereka sebagai aman dan mengungkapkan solusinya. Setelah polisi mengungkapkan solusinya, solusi tersebut tidak lagi dapat dibobol.

Polisi dinilai berdasarkan panjang (dalam byte) dari string mereka yang hampir ilegal dalam jawaban yang aman, dengan yang lebih rendah lebih baik.

Perampok dinilai berdasarkan jumlah jawaban yang mereka pecahkan, dengan semakin tinggi semakin baik.


Contoh

Python 3, 5 byte

String ilegal:

"'1/0

Karakter yang dilarang:

#'

Python 3, jawaban contoh crack

Program:

""" "'1/0 """

Idenya adalah kita bisa mengomentari string, karena "tidak dilarang.

Jawaban

6 xnor Nov 06 2020 at 08:26

Python 2 , 5 byte ( diretas oleh tsh )

bin()

Cobalah secara online!

Dilarang: semua karakter kecuali karakter alfanumerik

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Jadi, Anda diizinkan menggunakan karakter di atas dan tidak ada yang lain (selain karakter itu bin()sendiri).

(Ide ini bukan milik saya, saya ingat dari tantangan sebelumnya, tetapi saya tidak ingat siapa yang pantas mendapatkan pujian untuk itu.)

4 cairdcoinheringaahing Nov 06 2020 at 08:40

Jelly , 4 byte, dipecahkan oleh HyperNeutrino



«{

Cobalah secara online!

Anda tidak boleh menggunakan baris baru. Karakter / byte lainnya adalah permainan yang adil


Solusi yang saya maksudkan adalah salah satu karakter yang dilarang di sini selain ”. Masing-masing karakter ini menyebabkan penguraian tautan rusak, yang berarti semua yang sebelum mereka diabaikan:

Cobalah secara online!

3 cairdcoinheringaahing Nov 06 2020 at 09:01

Jelly , 4 byte, dipecahkan oleh Unrelated String



«{

Cobalah secara online!

Saya mencoba Jelly lagi, tetapi dengan batasan yang lebih sedikit. Anda tidak dapat menggunakan quƁƘȤ(ƈɦƙɱɲƥʠʂȥ(perintah diimplementasikan di Jelly), ”atau baris baru, seperti make ini itu jauh terlalu sepele untuk retak (terima kasih kepada HyperNeutrino untuk menunjukkan bahwa)


Baik crack HyperNeutrino di komentar, maupun crack Unrelated String adalah solusi yang saya inginkan. Menempatkan Œ(atau salah satu ÐÆØœæ) dengan tidak ada setelahnya di akhir menyebabkan perilaku yang sama seperti salah satu quƁƘȤ(ƈɦƙɱɲƥʠʂȥ, karena mereka selalu berharap memiliki karakter setelahnya. Tanpa karakter apa pun, mereka menyebabkan putusnya rantai program, yang berarti bahwa semua yang sebelumnya diabaikan:

Cobalah secara online!

3 binarycat Nov 07 2020 at 05:42

Haskell, 3 byte


#"

(dimulai dengan baris baru)

Karakter terlarang: -

3 RobinRyder Nov 12 2020 at 03:35

R , 2 byte, dipecahkan oleh Dominic van Essen

'"

Cobalah secara online!

Karakter yang dilarang (baris baru dilarang):

'"`#\qel
    

Ini melarang celah yang jelas dapat saya pikirkan, tetapi saya tidak akan terkejut jika Anda menemukan celah yang sangat berbeda dari yang saya maksudkan.

Dominic van Essen memecahkan versi pertama dari tantangan ini, dan kemudian yang kedua ; kemudian Giuseppe memecahkan versi ketiga. Saya telah menambahkan qelbaris baru ke daftar karakter yang dilarang untuk menghindari celah mereka.


Solusi yang ada dalam pikiran saya adalah

assign(intToUtf8(c(37,39,34,37)), c); 1 %'"% 2

Cobalah secara online!

Panggilan menetapkan menciptakan operator biner baru, %'"%; itu setara dengan "%'"%" <- c. Dalam R, Anda dapat membuat operator baru dari bentuk %x%di mana xadalah setiap string yang: %}%, %$@%dan %µ£$%semua nama operator yang berlaku. Di sini, operator baru sama dengan fungsi penggabungan cdan keluarannya adalah vektor 1 2.

Retakan Dominic tidak menentukan operatornya; ia hanya menguburnya dalam trypanggilan, yang juga merupakan kode R yang valid.

Trik yang digunakan di sini berarti bahwa upaya apa pun di masa mendatang pada string yang hampir ilegal mungkin harus melarang %karakter tersebut.

2 binarycat Nov 07 2020 at 06:13

Ruby, 17 byte, diretas oleh Dingus

=end
#{"""'}
=end

(tidak ada baris baru di awal)

Karakter terlarang: N

2 binarycat Nov 07 2020 at 05:58

Julia, 5 byte, Dipecahkan oleh Dingus

?""":

Karakter terlarang: #

2 binarycat Nov 09 2020 at 03:15

Julia, 6 byte

?""":

Ada spasi lebar nol sebelum :

Karakter yang tidak diperbolehkan: #

1 binarycat Nov 07 2020 at 06:59

Ruby, 17 byte

=end
#{"""'}
=end

Karakter dianulir: N,%

Kali ini saya membuatnya sedikit lebih sulit.

1 binarycat Nov 07 2020 at 07:47

Ruby, 18 byte

=end
#{/"""'}
=end

Dianulir karakter: N, %,/

variasi terakhir saya, semoga solusi selanjutnya adalah yang diinginkan.

1 pxeger Nov 07 2020 at 15:01

Zsh

 
#include <cstdlib> 
#include <iostream> 
 
int main() { 
    srand(time(NULL)); 
    hello(); 
    return rand() % 2; 
} 
 
/* 
  main 
  a=0 
  \ 
  print "$((1/$a))" 
*/ 
 
void hello() std::cout << "Hello, World!" << std::endl; 
 
  • Karakter yang diizinkan: semua ASCII yang dapat dicetak kecuali blxy<'`$ (huruf kecil B, L, X, dan Y, tanda kutip tunggal, kuburan, tanda dolar)
  • Harap perhatikan semua spasi kosong di depan dan di belakangnya.

Mungkin tidak terlalu sulit tetapi Anda dapat belajar banyak tentang banyak - harus kita katakan "kebiasaan" - dari zsh.

1 AidenChow Nov 10 2020 at 05:04

Desmos, 2 byte, di- crack oleh PkmnQ

Substring:


\

(Perhatikan baris baru di awal)

Karakter yang dilarang: Semua karakter alfanumerik

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

Saya berharap kebanyakan orang tidak mengenal Desmos di sini, jadi orang tidak akan tahu harus mencoba apa.

catatan:

Ekspresi di Desmos akan dianggap error jika menunjukkan "tanda bahaya" di sebelah ekspresi, seperti ini: