Utilizo "sufijo" libremente aquí para referirme a "cualquier subcadena que siga al prefijo".
"Prefijo" aquí significa el INICIO de una palabra, donde el inicio de una palabra se define como después de un espacio o desde el primer carácter del texto de entrada (para la primera palabra). Se ignora un "prefijo" en medio de una palabra.
Por ejemplo, si su prefijo de entrada es "armar" y el texto de entrada es "el ejército de Dumbledore estaba completamente armado para el inminente armageddon", entonces la lista de salida contiene (y, ed, edades).
Casos de prueba
Suponga que las mayúsculas y minúsculas terminan después de los espacios. La entrada no comenzará con un espacio.
Eliminar duplicados es opcional.
Input prefix: "1"
Input text:
"He1in aosl 1ll j21j 1lj2j 1lj2 1ll l1j2i"
Output: (ll, lj2j, lj2) - in any permutation
Input prefix: "frac"
Input text:
"fracking fractals fracted fractional currency fractionally fractioned into fractious fractostratic fractures causing quite a fracas"
Output: (king, tals, ted, tional, tionally, tioned, tious, tostratic, tures, as)
Input prefix: "href="https://www.astrotheme.com/astrology/"
Input text:
"(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
(div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Nolwenn_Leroy" title="Nolwenn Leroy: Astrology, birth chart, horoscope and astrological portrait")Nolwenn Leroy(br /)
(/div)
(div style="text-align: right; border-left: 1px solid #b2c1e2; border-right: 1px solid #b2c1e2; width: 446px; padding: 1px 1px 0; background: #eff8ff")
(table style="width: 100%")(tr)(td style="width: 220px")
(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
(div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Kim_Kardashian" title="Kim Kardashian: Astrology, birth chart, horoscope and astrological portrait")Kim Kardashian(br /)(span style="font-weight: normal; font-size: 11px")Display her detailed horoscope and birth chart(/span)(/a)(/div)
(/div)
(div style="padding: 0; background: url('https://www.astrotheme.com/images/site/arrondi_450_hd.png') no-repeat; text-align: left; font-weight: bold; width: 450px; height: 36px")
(div class="titreFiche" style="padding: 5px 0 0 6px")(a href="https://www.astrotheme.com/astrology/Julia_Roberts" title="Julia Roberts: Astrology, birth chart, horoscope and astrological portrait")Julia Roberts(br /)(span style="font-weight: normal; font-size: 11px")Display her detailed horoscope and birth chart(/span)(/a)(/div)
(td id="cfcXkw9aycuj35h" style="text-align: right")
(/div)"
Output: (Nolwenn_Leroy", Kim_Kardashian", Julia_Roberts")
El ganador
Este es el código de golf , por lo que gana la menor cantidad de bytes. :)
Puede aceptar las entradas de cualquier manera que funcione, siempre que su código pueda resolver problemas arbitrarios como los casos de prueba.
fuente
https://www.astrotheme.com/astrology/
ser un prefijo cuando está precedido porhref="
?Respuestas:
R , 63 bytes
Pruébalo en línea!
Desafortunadamente, la implementación de aspecto positivo es 5 bytes más larga debido a la gran
regmatches/gregexpr
combinación:fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
Japt , 9 bytes
8 bytes si podemos tomar la entrada como una matriz de palabras.
Pruébalo en línea!
fuente
url('')
), ninguna de ellas está al comienzo.Python 2 ,
5756 bytesPruébalo en línea!
-1 con agradecimiento a @mypetlion
fuente
lambda i,j:[w[len(i):]for w in j.split()if w.find(i)==0]
por -1 byteC (gcc) ,
113109106105 bytes-4 bytes gracias a @LambdaBeta!
-3 bytes gracias a @WindmillCookies!
Pruébalo en línea!
fuente
^0
. Just;*t;
and&&*t;
Japt ,
1612 bytesPuerto de Arnauld Respuesta
-4 bytes de @Shaggy
Pruébalo en línea!
fuente
05AB1E , 11 bytes
Pruébalo en línea! ( Aquí hay una demostración para cadenas multilínea)
¿Como funciona?
fuente
Stax , 8 bytes
Ejecutar y depurarlo
Explicación:
También podría usar
x%t
(longitud de X, recortar desde la izquierda), que es igualmente largo pero tiene 9 bytes .fuente
Retina , 31 bytes
Pruébalo en línea! La primera línea debe ser el prefijo deseado, el resto es el texto de entrada. No elimina duplicados. Sería de 25 bytes si algún espacio en blanco fuera un separador válido. Explicación: Queremos enumerar los sufijos de prefijos válidos. El
[^ ¶]+
coincide con el sufijo en sí. El prefijo de la expresión regular es una mirada retrospectiva que garantiza que el prefijo del sufijo sea el prefijo de entrada. A medida que se evalúa una mirada hacia atrás de derecha a izquierda, esto comienza haciendo coincidir el prefijo (usando el mismo patrón pero dentro de()
s para capturarlo), luego cualquier carácter, antes de finalmente hacer coincidir el prefijo en su propia línea al comienzo de la entrada.fuente
¶
es un personaje de nueva línea, pero no puedo entender por qué se necesitan tantos aquí.¶
asegura que toda la primera línea coincida con el prefijo. El segundo¶
es necesario porque no se sabe cuántas líneas intermedias hay. Los dos últimos¶
s funcionan de la misma manera: las clases de caracteres negadas normalmente incluyen nuevas líneas, pero no queremos que aquí.¶
, posiblemente más.Brachylog ,
2421 bytesPruébalo en línea!
Podría haber sido unos pocos bytes más cortos si hubiera un intercambio variable con predicados en línea.
La entrada es una matriz con el prefijo como primer elemento y el texto como segundo elemento.
fuente
Fórmula IBM / Lotus Notes, 54 bytes
Toma su entrada de dos campos llamados
a
yb
. Funciona porque Formula aplicará recursivamente una función a una lista sin la necesidad de un@For
bucle.No hay TIO disponible, así que aquí hay una captura de pantalla:
fuente
APL (Dyalog Unicode) , SBCS de 23 bytes
Programa completo Solicita texto y prefijo de stdin. Imprime la lista en stdout.
Pruébalo en línea!
⎕
mensaje (para texto)⊢
rendimiento que (se separa'\1'
de⎕
)(
…)⎕S'\1'
PCRE Busca y devuelve la lista del grupo de captura 1 de la siguiente expresión regular:⎕
indicador (para prefijo)'(\w+)\b',
anteponer esta cadena (grupo de caracteres de palabra seguido de un límite de palabra)5⌽
rotar los primeros 5 caracteres hasta el final;'\bPREFIX(\w+)'
fuente
C (clang) , 107 bytes
Pruébalo en línea!
Descripción:
Tiene que ser clang porque gcc segfaults sin
#include <string.h>
debido a problemas strtok.fuente
MATL, 17 bytes
Pruébalo en MATL Online
¿Cómo?
Yb
- Divida la entrada en espacios, coloque los resultados en una matriz de celdas94
- Código ASCII para^
personajeih
- Obtenga la entrada (diga "frac"), concatene '^' y la entrada'(.*)'h
- Empuje la cadena'(.*)'
en la pila, concatene '^ frac' y '(. *)'. Así que ahora tenemos'^frac(.*)
una expresión regular que coincide con "frac" al comienzo de la cadena y captura lo que viene después.6&XX
- Ejecute la coincidencia de expresiones regulares,6&
especificando el modo 'Tokens', es decir, los grupos de captura coincidentes se devuelven en lugar de la coincidencia completa.Salida implícita de los resultados.
fuente
'Tokens'
hace; ¡bueno saber!Bash + grep, 20 bytes
El prefijo se proporciona como un parámetro de línea de comandos y el texto de entrada se canaliza a través de stdin.
Pruébalo en línea!
fuente
PowerShell 3.0,
606259 bytesPerdió algunos bytes suprimiendo la salida de cmatch. Tenía una solución irregular que ganó algo al causar duplicados a propósito. Pero también arrojó líneas rojas si no coincidía con el primero, pero eso no está bien ahora que lo pienso. Sin embargo, +2 bytes para arreglarlo.
fuente
king, tals, ted, tional, tional, tionally, tioned, tioned, tious, tostratic, tures,tures,tures, tures, as
y muestra un error de índice en elHe1in
ejemplo. Powershell 5.1, 6.0.2. La solución con 62 bytes está bien.JavaScript (ES6), 57 bytes
Toma entrada en la sintaxis de curry
(text)(prefix)
. No elimina duplicados.Pruébalo en línea!
fuente
JavaScript (Node.js) ,
6459 bytes-5 bytes de @Shaggy
Pruébalo en línea!
fuente
Haskell , 51 bytes
Pruébalo en línea!
fuente
Cáscara , 11 bytes
Casi solo un puerto de la respuesta de Haskell :
Pruébalo en línea!
Explicación
fuente
Jalea ,
119 bytesUn enlace diádico que acepta el texto (una lista de caracteres) a la izquierda y el prefijo (una lista de caracteres) a la derecha que produce una lista de listas de caracteres (los sufijos resultantes).
Pruébalo en línea!(el pie de página se une con espacios para evitar la destrucción implícita del programa completo)
Nota: Agregué tres casos de borde a la cadena en el OP: sin empaquetar y nofracfracheremate al principio, que no debería generar y fracfracit hasta el final, que debería generar un fracit.
¿Cómo?
11 byter anterior:
También un enlace diádico como el anterior.
Pruébalo en línea!
fuente
Perl 5 con -asE,
232221 bytes (?)Pruébalo en línea!
Se puede ejecutar como línea de comandos de una sola línea como
perl -asE 'say/^$b(.*)/ for@F' -- -b=frac -
, o con un nombre de archivo en lugar del último-
.O de un archivo de script, digamos
perl -as -M5.010 script.pl -b=frac -
(gracias a @Brad Gilbert b2gills por el enlace TIO que demuestra esto).El código en sí es de 18 bytes, agregué 3 bytes para la
-b=
opción que asigna su valor (la entrada del prefijo) a una variable nombrada$b
en el código. Eso se sintió como una excepción al consenso habitual de "no se cuentan las banderas".-a
divide cada línea de entrada en espacios y coloca el resultado en la matriz@F
.-s
es una forma abreviada de asignar un argumento de línea de comando como variable, dando un nombre en la línea de comando. Aquí el argumento es-b=frac
, que coloca el prefijo "frac" en una variable$b
./^$b(.*)/
- Coincide con el valor$b
al principio de la cadena..*
es lo que viene después de eso, hasta el final de la palabra, y las paréntesis circundantes capturan este valor. Los valores capturados se devuelven automáticamente, para ser impresos porsay
. Iterando a través de palabras separadas por espaciosfor @F
significa que no tenemos que verificar los espacios iniciales o finales.fuente
Perl 6 , 30 bytes
Pruébalo
Expandido:
fuente
p
y<(
es necesario ya que, de lo contrario, puede verse como$v<…>
la abreviatura de$v{qw '…'}
.Java 10, 94 bytes
Pruébalo en línea aquí .
Sin golf:
fuente
Pequeño Básico , 242 bytes
Un script que no toma entradas y salidas al
TextWindow
objeto¡Pruébelo en SmallBasic.com! Requiere IE / Silverlight
fuente
Python 2 , 53 bytes
Pruébalo en línea!
fuente
Brachylog , 12 bytes
Pruébalo en línea!
Toma la entrada como a
[text, prefix]
través de la variable de entrada y genera cada palabra a través de la variable de salida. Esta fue originalmente la respuesta de Sundar, que comencé a tratar de jugar golf después de leer que "podría haber sido unos pocos bytes más cortos si hubiera un intercambio variable con predicados en línea", lo cual es posible ahora. Resulta que la salida del generador ahorra aún más bytes.Mis dos primeros intentos de jugar golf, utilizando características bastante nuevas del lenguaje:
Con las variables globales que se esperaban:
hA⁰&tṇ₁{∧A⁰;.c?∧}ˢ
(18 bytes)Con el metapredicado de aplicar a la cabeza:
ṇ₁ᵗz{tR&h;.cR∧}ˢ
(16 bytes)Y mi solución original:
Brachylog , 15 bytes
Pruébalo en línea!
La misma E / S. Esto es esencialmente un generador de palabras con el prefijo,
ṇ₁ʰ⟨∋a₀⟩
, modificado para eliminar el prefijo.Un predicado muy diferente con el mismo número de bytes:
Brachylog , 15 bytes
Pruébalo en línea!
La misma E / S.
fuente
Rojo , 62 bytes
Pruébalo en línea!
fuente
Pyth ,
2120181716 bytesPruébalo en línea!
-1 utilizando en
V
lugar deFN
porqueV
establece implícitamenteN
-2 después de leer más sobre las opciones de segmentación de cadenas
-1 usando
x
para verificar la presencia de la subcadena en el índice 0-1 usando reemplazar con "" para obtener el final de la cadena
Estoy seguro de que esto podría usar un poco de golf serio, pero como principiante de Pyth, solo ponerlo a trabajar fue una ventaja.
¿Como funciona?
fuente
Excel VBA, 86 bytes
Toma la entrada como prefijo
[A1]
y los valores[B1]
y las salidas a la consola.fuente