Apakah itu substring itu sendiri?

21

Diberikan string, kembalikan apakah string tersebut adalah substring dari kode sumber program.

Aturan quine standar berlaku, artinya Anda tidak dapat membaca kode sumber Anda sendiri. Panjang input dijamin kurang dari atau sama dengan panjang program. Anda dapat mengembalikan dua nilai berbeda, belum tentu nilai benar dan salah. Anda juga dapat mengirimkan fungsi, bukan program lengkap.

Ini adalah sehingga kode terpendek menang!

Sebuah contoh

Jika kode sumber Anda print(input() = False), itu harus mengembalikan Benar untuk nt(itetapi Salah untuk tupn.

caird coinheringaahing
sumber
1
Terkait
DJMcMayhem
2
@ sebenarnya manusia seperti kebanyakan tantangan, ya.
caird coinheringaahing
1
Juga terkait .
AdmBorkBork
10
@StanStrum Ini bukan untuk menunjukkan duplikat, itu untuk menunjukkan tantangan terkait bahwa orang mungkin tertarik dan untuk menunjukkannya di bilah sisi di sebelah kanan.
totallyhuman
1
Bisakah input kosong? (Sebenarnya, bisakah kodenya kosong?)
Lynn

Jawaban:

6

JavaScript , 25 byte

f=s=>('f='+f).includes(s)

Cobalah online!

Saya pribadi bukan penggemar ini, tetapi diizinkan .

Solusi alternatif (tidak valid?), 19 byte

Ini mengambil input sebagai regex.

f=s=>s.test('f='+f)

Cobalah online!

benar-benar manusiawi
sumber
Bukankah itu membaca sendiri?
Adám
Apa tujuan penyebutan secara eksplisit (Node.js)? Apakah itu tidak berfungsi di browser juga?
@ThePirateBay Bekerja seperti yang diharapkan di Chrome.
steenbergh
1
Kalian berpikir jauh ke depan, itu hanya dari template TIO. : P
totallyhuman
5

Java 8, 124 112 byte (fungsi)

p->{String s="p->{String s=%c%s%1$c;return s.format(s,34,s).contains(p);}";return s.format(s,34,s).contains(p);}

Coba di sini.


Ini dia sebagai program penuh sebagai gantinya (untuk melihat salah satu alasan mengapa fungsi diizinkan pada PPCG, karena beberapa bahasa - seperti Java - memerlukan kode verplose wajib wajib untuk program penuh).

Java 8, 226 214 byte (program penuh)

interface M{static void main(String[]a){String s="interface M{static void main(String[]a){String s=%c%s%1$c;System.out.print(s.format(s,34,s).contains(a[0]));}}";System.out.print(s.format(s,34,s).contains(a[0]));}}

Coba di sini.


Penjelasan:

  • Ini String sberisi kode sumber yang tidak diformat.
  • %sdigunakan untuk memasukkan String ini ke dalam dirinya sendiri dengan s.format(...).
  • %c, %1$cdan 34digunakan untuk memformat tanda kutip ganda.
  • s.format(s,34,s) menempatkan semuanya bersama-sama.

Dan kemudian .contains(...)digunakan untuk memeriksa apakah kode sumber ini berisi input yang diberikan.

Kevin Cruijssen
sumber
Ini memberi saya benar untuk semua string ketika saya "Coba online".
MichaelK
1
@MichaelKarnerfors bukan untuk saya ... Apakah Anda yakin Anda tidak menambahkan argumen setiap kali? Hanya satu argumen yang digunakan. Anda harus menjalankan program mengubah argumen setiap kali Anda membuat tes baru.
Olivier Grégoire
@ OlivierGrégoire Anda benar, saya menggunakan halaman TIO salah. Terima kasih. :)
MichaelK
3

Bash, 43 , 28 byte

[[ $BASH_COMMAND = *"$1"* ]]

coba online

Nahuel Fouilleul
sumber
Saya tidak tahu Bash, tetapi bisakah ini bermain golf lebih jauh dengan menghapus banyak ruang kosong?
caird coinheringaahing
@cairdcoinheringaahing Saya rasa tidak, typesetformat seperti AFAICT ini. Cobalah online!
Erik the Outgolfer
tetapi mungkin diperbaiki mungkin menggunakan teknik lain
Nahuel Fouilleul
baru saja menemukan solusi lain
Nahuel Fouilleul
Apa yang $1harus dilakukan
caird coinheringaahing
2

Haskell , 92 byte

import Data.List;f s=isInfixOf s$(++)<*>show$"import Data.List;f s=isInfixOf s$(++)<*>show$"

Cobalah online! Perpanjangan jelas dari quine standar. Menyingkirkan impor akan menyenangkan, tetapi saya ragu isInfixOfdapat dihitung dalam jumlah byte yang lebih pendek.

Laikoni
sumber
2

QBIC , 28 byte

?instr(B+B,;)#?instr(B+B,;)#

Ini mencetak 0 jika input bukan substring dari sumber, dan X sebaliknya X adalah indeks substring (pertama).

Penjelasan

Latter part:
#?instr(B+B,;)#   Define a string literal B$ with a copy of the source

First part:
?                 PRINT
 instr(   , )     the index of
           ;          the cmd line parameter A$
       B+B            in B$ concatenated with itself

#mendefinisikan string literal dalam QBIC, dan menetapkannya ke variabel string pertama yang tersedia. Itu ada B$di program ini, karena A$sudah diambil oleh ;(baca string dari cmd line). Kemudian, semuanya hingga pembatas dimasukkan ke dalam literal; pembatas adalah backtick - yang juga menjadikannya satu-satunya karakter ASCII yang tidak termasuk dalam string lits. Dalam hal ini, QBIC tidak memerlukan backtick, karena literal diakhiri di akhir kode oleh fitur penutupan otomatis QBIC. Untuk informasi lebih lanjut tentang literal QBIC, lihat utas Showcase .

steenbergh
sumber
Apa yang ada Adalam konteks ini?
caird coinheringaahing
@cairdcoinheringaahing sedikit kesalahan di pihak saya, seharusnya Bdan penjelasan ditambahkan.
steenbergh
2

Jelly , 10 byte

“;⁾vṾƓẇ”vṾ

Cobalah online!

Bagaimana itu bekerja

“;⁾vṾƓẇ”vṾ  Main link. No arguments.

“;⁾vṾƓẇ”    Set the left argument and the return value to ';⁾vṾƓẇ'.
         Ṿ  Uneval; yield '“;⁾vṾƓẇ”'.
        v   Dyadic eval; eval ';⁾vṾƓẇ' with argument '“;⁾vṾƓẇ”'.

  ⁾vṾ       Yield 'vṾ'.
 ;          Append it to '“;⁾vṾƓẇ”', yielding the source code.
     Ɠ      Read a string from STDIN.
      ẇ     Check if it's a substring of the source code.
Dennis
sumber
1

Julia, 72 byte

Saya sekarang mengerti apa yang orang maksud ketika mereka mengatakan bahwa masalah quine hanyalah variasi dari quine klasik.

x="~y=contains\"x=\$(repr(x));\$x\",y)";~y=contains("x=$(repr(x));$x",y)

Penjelasan

#Defines x to be the next line of the source, with the help of escaping characters
x="~y=contains\"x=\$(repr(x));\$x\",y)"; 
#Interpolates together a comparison string, including repr(x), the re-escaped from of x, and x itself, for comparison. 
~y=contains("x=$(repr(x));$x",y)
eaglgenes101
sumber
0

Perl 5, 60 + 2 (-pl) byte

$_=(sprintf$a=q($_=(sprintf$a=q(%s),$a)=~/\Q$_/),$a)=~/\Q$_/

coba online

Nahuel Fouilleul
sumber
0

05AB1E , 17 byte

0"D34çýIå"D34çýIå

Modifikasi default 0"D34çý"D34çýdengan menambahkan .

Cobalah online.

Penjelasan:

0                    # Push 0 to the stack
                     #  STACK: [0]
 "D34çýIå"           # Push the string 'D34çýIå' to the stack
                     #  STACK: [0, 'D34çýIå']
          D          # Duplicate this string
                     #  STACK: [0, 'D34çýIå', 'D34çýIå']
           34ç       # Push '"' to the stack
                     #  STACK: [0, 'D34çýIå', 'D34çýIå', '"']
              ý      # Join the stack by this '"' delimiter
                     #  STACK: ['0"D34çýIå"D34çýIå']
               I     # Take the input
                     #  STACK: ['0"D34çýIå"D34çýIå', 'Iå"D']
                å    # Check if it's a substring of the source code
                     #  STACK [1]
                     # (Output the top of the stack implicitly)
Kevin Cruijssen
sumber