Kendisi bir alt dize mi?


21

Bir dize verildiğinde, dizenin programın kaynak kodunun bir temeli olup olmadığını döndürün.

Standart quine kuralları geçerlidir, yani kendi kaynak kodunuzu okuyamazsınız. Girişin uzunluğunun programın uzunluğuna eşit veya daha az olması garanti edilir. Gerçekte truthy ve falsey değerleri değil, iki farklı değer döndürebilirsiniz. Ayrıca tam bir program yerine, bir işlev de gönderebilirsiniz.

Bu bir yani en kısa kod kazanır!

Bir örnek

Kaynak kodunuz buysa, print(input() = False)True için True nt(iancak False için döndürmelidir tupn.



2
En zorlukla olduğu gibi @ totaltal insan, evet.
caird coinheringaahing


10
@StanStrum Kopyaları işaret etmek değil, insanların ilgilerini çekebilecek ilgili zorlukları göstermek ve bunları sağdaki kenar çubuğunda göstermek.
tamamen insan

1
Giriş boş olabilir mi? (Aslında, kod boş olabilir mi?)
Lynn

Yanıtlar:



6

JavaScript , 25 bayt

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

Çevrimiçi deneyin!

Ben şahsen bunun hayranı değilim ama buna izin var .

Alternatif (geçersiz?) Çözüm, 19 bayt

Bu, girişi bir regex olarak alır.

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

Çevrimiçi deneyin!


Kendini okumuyor mu?
Adám


Açıkça bahsetmenin amacı nedir (Node.js)? Tarayıcılarda da çalışmıyor mu?

@ThePirateBay Chrome'da beklendiği gibi çalışır.
steenbergh

1
Siz beyler ileriyi düşünüyor, sadece TIO şablonundan. : P
tamamen insan

5

Java 8, 124 112 bayt (işlev)

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);}

Burada dene.


İşte bunun yerine tam program (PPCG'de fonksiyonların kullanımına neden olan nedenlerden birini görmek için, çünkü bazı diller gibi Java - tam programlar için çok ayrıntılı zorunlu kod kodu gerektirir).

Java 8, 226 214 bayt (tam program)

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]));}}

Burada dene.


Açıklama:

  • String sBiçimlendirilmemiş kaynak kodu içerir.
  • %sbu stringi kendi içine girmek için kullanılır s.format(...).
  • %c, %1$cVe 34çift tırnak biçimlendirmek için kullanılır.
  • s.format(s,34,s) hepsini bir araya getirir.

Ve sonra .contains(...)bu kaynak kodun verilen girişi içerip içermediğini kontrol etmek için kullanılır.


Bu, "Çevrimiçi deneyin" olduğunda tüm dizeler için geçerli .
MichaelK

1
@MichaelKarner benim için değil ... Her seferinde bir argüman eklemediğinizden emin misiniz? Sadece bir argüman kullanılır. Her yeni bir test yaptığınızda, argümanı değiştirerek programı çalıştırmanız gerekir.
Olivier Grégoire

@ OlivierGrégoire Haklısınız, TIO sayfasını yanlış kullandım. Teşekkür ederim. :)
MichaelK


2

Haskell , 92 bayt

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

Çevrimiçi deneyin! Standart quine'nin açıkça uzatılması. İthalattan kurtulmak iyi olurdu, ama isInfixOfdaha kısa baytlarda hesaplanabileceğinden şüpheliyim .



2

QBIC , 28 bayt

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

Bu, giriş kaynağın bir alt dizini değilse 0, aksi takdirde X, alt dizinin (ilk) dizini ise X basılır.

açıklama

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

#QBIC'de bir dize değişkeni tanımlar ve onu ilk kullanılabilir dize değişkenine atar. Bu B$programda, çünkü A$zaten tarafından alınmış ;(bir cmd satırından bir dize okuyun). Ardından, sınırlayıcıya kadar her şey değişmeze beslenir; sınırlayıcı bir ters çevirme çubuğudur - bu da onu dizi dizilimlerinde bulunmayan tek ASCII karakteri yapar. Bu durumda, QBIC'in geri tepmesine gerek yoktur, çünkü hazır bilgi kodun sonunda QBIC'in otomatik kapanma özelliği ile sonlandırılmıştır. QBIC'nin hazır değerleri hakkında daha fazla bilgi için , Vitrin başlığına bakın .


ABu bağlamda neler var ?
caird coinheringaahing

@cairdcoinheringaahing yanımda küçük bir hata, olmalıydı Bve bir açıklama eklendi.
steenbergh

2

Jöle , 10 bayt

“;⁾vṾƓẇ”vṾ

Çevrimiçi deneyin!

Nasıl çalışır

“;⁾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.

1

Julia, 72 bayt

Şimdi insanların problemlerinin sadece klasik quine varyasyonları olduğunu söylerken ne anlama geldiklerini anlıyorum.

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

açıklama

#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)


0

05AB1E , 17 bayt

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

Ekleyerek varsayılan .0"D34çý"D34çý

Çevrimiçi deneyin.

Açıklama:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.