Artículo girando con Spintax
La rotación de artículos es una técnica de optimización de motores de búsqueda mediante la cual los optimizadores de motores de búsqueda publican una versión única de contenido relevante en directorios de artículos, sitios web 2.0 u otras fuentes de backlinks.
Los autores del sitio web lo utilizan ocasionalmente en sus propios sitios, pero generalmente se evita porque la calidad del contenido hilado será inferior a la del contenido escrito a mano. Spinning funciona reescribiendo artículos existentes, o partes de artículos, y reemplazando palabras, frases, oraciones o incluso párrafos enteros específicos con cualquier número de versiones alternativas para proporcionar una variación ligeramente diferente con cada giro.
Este proceso puede ser completamente automatizado o reescrito manualmente. Su trabajo hoy será crear un programa o función que interprete una cadena que contenga Spintax , la sintaxis mediante la cual un programa leería las diferentes opciones disponibles. A continuación se muestra una cadena de ejemplo que usa Spintax:
{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}
Como puede ver, las secciones de la cadena que se deben 'girar' están encerradas entre llaves, donde el |
carácter divide las opciones individuales . Aquí hay algunas oraciones de ejemplo que esto podría producir.
Hi there, user! What's up?
Hello, user! How are you?
Bonjour, user! Feeling alright?
Hello, user! What's up?
Hi there, user! I caught a fish!
Tu trabajo
Su misión, si elige aceptarla, es crear un programa o función que tome una cadena de entrada que pueda contener o no Spintax , luego imprima 5 versiones de la cadena, seleccionando al azar una de las opciones de cada bloque de opciones. Puedes hacer algunas suposiciones:
- No necesitará manejar Spintax anidado (
{This|is {an|one}|example}
). - Las
|
,{
y los}
caracteres no se producen en ningún otro lugar que no sea dentro de un bloque Spintax. - No necesita verificar si las 5 oraciones de salida son distintas, siempre que el código seleccione opciones utilizando la función de números aleatorios de su idioma.
- Puede suponer que la entrada termina con una nueva línea.
Reglas
Pruebas
1. {A|The|One} {quick|magnificent|charming|lucky|fast|super|cool} {gold|tan|yellow|white|brown|silver} {beaver|packrat|cat|lion|tiger|fox|dog|wolf} {consumed|ate|pilfered} my {pastry|strudel|cake}.
-------------------------------------------
One cool brown wolf consumed my pastry.
...(3 more here)...
The charming yellow beaver ate my cake.
-------------------------------------------
2. This sentence is valid, and happens to have no Spintax!
-------------------------------------------
This sentence is valid, and happens to have no Spintax!
...(3 more here)...
This sentence is valid, and happens to have no Spintax!
-------------------------------------------
3. {beg|get|ton|sun|bun|can|top|big}{2|3|4|5}{A|B|C|D|E|F|G}{2|3|4|5|6|7}{at|as|be|ex|hi|}{!|#|%}
-------------------------------------------
top2F2hi%
...(3 more here)...
big3E4ex#
Una cuarta prueba se puede encontrar aquí.
Este es el código de golf , por lo que gana la menor cantidad de bytes.
{
,|
,}
se va a encontrar en la cadena de entrada es donde hay Spintax.Respuestas:
Pyth, 18
Pruébalo en línea aquí
Explicación:
fuente
Ruby, 46
Con el indicador de línea de comando
-p
, ejecuteLeer en una cadena con una nueva línea final. Concatenarlo consigo mismo 5 veces, mutarlo en su lugar y generar el resultado.
/{(.+?)}/
es una expresión regular con un cuantificador perezoso: sin el?
, coincidiría con el extremo izquierdo del extremo{
derecho en}
lugar del más cercano.$1
es una variable mágica que se refiere al primer grupo de captura en cada partida, mientras que el?|
literal se refiere al|
personaje.sample
es un método de matriz que devuelve un elemento aleatorio.fuente
CJam,
25221918 bytesEste código requiere que la entrada contenga una nueva línea final.
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
En cada iteración, quedan dos fragmentos (uno constante, uno variable) en la pila y se imprimirán cuando el programa salga.
fuente
Python 3, 110 bytes
Regex dividiéndose, como los demás.
Python 3,
121116114 bytesÉste realiza los reemplazos apropiados y luego lo evalúa. Si no fuera por escapar de las barras diagonales inversas y los apóstrofes, esto habría resultado más corto.
Por ejemplo, supongamos que tenemos el Spintax
El
.translate
realiza algunas conversiones para dar:fuente
Perl, 50
49
personajes+1
para-p
.Funciona al establecer primero
$_
las 5 oraciones. Luego realiza una búsqueda y reemplazo global, donde buscamos cada{ | | }
grupo. Divide al grupo|
y elige un elemento aleatorio para el reemplazo.Corre con:
fuente
$_ x=5
Guarda algunos bytes.Avestruz v0.7.0 , 27 caracteres
Explicación:
(nota: la versión 0.7.0 se realizó después de que se publicó esta pregunta, pero la respuesta sigue siendo válida ya que todas las confirmaciones que conformaron esa versión se enviaron antes de que se publicara esta pregunta).
fuente
Pip,
252220 bytesTarde a la fiesta, pero aquí está la mía. Toma la entrada como un argumento de línea de comando, que puede necesitar ser citado.
Explicación:
17 bytes (pero no un envío válido)
Requiere la última versión de Pip, actualizada después de que se publicó esta pregunta. El operador RC (elección aleatoria) se planeó durante algún tiempo, pero nunca llegué a implementarlo hasta ahora. : ^ (
Aprenda más sobre Pip
fuente
JavaScript ES6,
8684 bytesEsto espera que la entrada tenga una nueva línea final. Comienza repitiendo la entrada 5 veces, y luego reemplazando cada cadena Spintax con una palabra aleatoria, que se obtiene dividiendo los
|
caracteres y luego eligiendo un número aleatorio entre 0 y la longitud de la matriz resultante menos 1. En este caso,|0
es solo una forma más corta de hacerloMath.floor
. Gracias a vihan1086 por recordarme las cadenas de plantillas etiquetadas.El Fragmento de pila a continuación contiene código sencillo y fácilmente comprobable.
fuente
|0
es equivalente aMath.floor
noMath.round
. Aunque eso es lo que desea, yaMath.round
que proporcionaría una distribución desigual.Perl, 82 bytes
fuente
Python 2, 139 bytes
Se agregaron dos bytes para las comillas alrededor de la cadena de entrada. Si no son necesarios, hágamelo saber.
Pruébalo aquí
fuente
Java,
243215242234 bytesEncuentra cadenas dentro de llaves
{}
y las reemplaza con un elemento aleatorio de la matriz de cadenas creadas dividiéndolas por el carácter de la tubería. (Me di cuenta demasiado tarde que había que imprimir cinco oraciones: P)fuente
Bash:
144138 caracteresEjecución de muestra:
fuente
w()(...)
lugar dew(){...}
(permite eliminar espacios en blanco), enprintf
lugar deecho -n
y llaves en lugar dedo
ydone
.printf
eso, fallaría en la cadena de entrada que contiene "%", a menos que haya entendido mal algo.Javascript,
143142 bytesfuente
Python 3, 97 bytes
Usando una función lambda en la sustitución de expresiones regulares. Esto es algo similar a cómo lo hice en mi módulo Spintax https://github.com/AceLewis/spintax, sin embargo, no trata con Spintax anidado o escapar de los personajes.
Si no asume que la entrada termina con una nueva línea, será de 104 bytes.
fuente