¿Es una subcadena de sí mismo?

21

Dada una cadena, devuelve si la cadena es una subcadena del código fuente del programa.

Se aplican las reglas estándar de quine, lo que significa que no puede leer su propio código fuente. Se garantiza que la longitud de la entrada será menor o igual que la longitud del programa. Puede devolver dos valores distintos, no necesariamente valores de verdad y falsey. También puede enviar una función, en lugar de un programa completo.

Este es un código más corto gana!

Un ejemplo

Si su código fuente es print(input() = False), debería devolver True para nt(ipero False para tupn.

caird coinheringaahing
fuente
1
Relacionado
DJMcMayhem
2
@totallyhuman como con la mayoría de los desafíos, sí.
caird coinheringaahing
1
También relacionado .
AdmBorkBork
10
@StanStrum No es para señalar duplicados, es para mostrar desafíos relacionados en los que las personas podrían estar interesadas y mostrarlos en la barra lateral a la derecha.
totalmente humano
1
¿Puede la entrada estar vacía? (En realidad, ¿puede el código estar vacío?)
Lynn

Respuestas:

6

JavaScript , 25 bytes

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

Pruébalo en línea!

Personalmente no soy fanático de esto, pero está permitido .

Solución alternativa (¿no válida?), 19 bytes

Esto toma la entrada como una expresión regular.

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

Pruébalo en línea!

totalmente humano
fuente
¿No se lee solo?
Adám
1
@ Adám codegolf.meta.stackexchange.com/a/13638/68615
totalmente humano el
¿Cuál es el propósito de mencionar explícitamente (Node.js)? ¿No funciona también en los navegadores?
@ThePirateBay Funciona como se esperaba en Chrome.
steenbergh
1
Ustedes están pensando en el futuro, es solo de la plantilla TIO. : P
totalmente humano
5

Java 8, 124 112 bytes (función)

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

Pruébalo aquí


Aquí está el programa completo (para ver una de las razones por las cuales las funciones están permitidas en PPCG, porque algunos lenguajes, como Java, requieren un código obligatorio muy detallado para los programas completos).

Java 8, 226 214 bytes (programa completo)

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

Pruébalo aquí


Explicación:

  • El String scontiene el código fuente sin formato.
  • %sse utiliza para ingresar esta cadena en sí misma con el s.format(...).
  • %c, %1$cy 34se usan para formatear las comillas dobles.
  • s.format(s,34,s) lo pone todo junto

Y luego .contains(...)se usa para verificar si este código fuente contiene la entrada dada.

Kevin Cruijssen
fuente
Esto me da verdad para todas las cadenas cuando "lo pruebo en línea".
MichaelK
1
@MichaelKarner no es para mí ... ¿Estás seguro de que no agregas argumentos cada vez? Solo se usa un argumento. Debe ejecutar el programa cambiando el argumento cada vez que realice una nueva prueba.
Olivier Grégoire
@ OlivierGrégoire Tienes razón, he usado la página de TIO de forma incorrecta. Gracias. :)
MichaelK
3

Bash, 43 , 28 bytes

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

pruébalo en línea

Nahuel Fouilleul
fuente
No conozco a Bash, pero ¿se puede jugar más al eliminar mucho espacio en blanco?
caird coinheringaahing
@cairdcoinheringaahing No lo creo, lo typesetformatea así AFAICT. Pruébalo en línea!
Erik the Outgolfer
pero puede ser mejorado tal vez utilizando otra técnica
Nahuel FOUILLEUL
acabo de encontrar otra solución
Nahuel Fouilleul el
¿Qué $1hacer?
caird coinheringaahing
2

Haskell , 92 bytes

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

Pruébalo en línea! Extensión obvia de la quine estándar. Deshacerse de la importación sería bueno, pero dudo que isInfixOfpueda calcularse en una cantidad menor de bytes.

Laikoni
fuente
2

QBIC , 28 bytes

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

Esto imprime 0 si la entrada no es una subcadena de la fuente y X, de lo contrario, donde X es el (primer) índice de la subcadena.

Explicación

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

#define un literal de cadena en QBIC y lo asigna a la primera variable de cadena disponible. Eso está B$en este programa, porque A$ya está tomado por ;(lea una cadena de la línea cmd). Entonces, todo hasta el delimitador se alimenta al literal; el delimitador es un backtick, lo que también lo convierte en el único carácter ASCII que no se incluye en las cadenas de caracteres. En este caso, QBIC no necesita un retroceso, porque el literal se termina al final del código por la función de cierre automático de QBIC. Para obtener más información sobre los literales de QBIC, vea el hilo Showcase .

Steenbergh
fuente
¿Qué hay Aen este contexto?
caird coinheringaahing
@cairdcoinheringaahing un pequeño error de mi parte, debería haber sido By se agrega una explicación.
steenbergh
2

Jalea , 10 bytes

“;⁾vṾƓẇ”vṾ

Pruébalo en línea!

Cómo funciona

“;⁾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
fuente
1

Julia, 72 bytes

Ahora entiendo lo que la gente quiere decir cuando dice que los problemas de quine son solo variaciones del quine clásico.

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

Explicación

#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
fuente
0

Perl 5, 60 + 2 (-pl) bytes

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

pruébalo en línea

Nahuel Fouilleul
fuente
0

05AB1E , 17 bytes

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

La modificación de la forma predeterminada 0"D34çý"D34çý añadiendo .

Pruébalo en línea.

Explicación:

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
fuente