Article Filature avec Spintax
La rotation d'articles est une technique d'optimisation de moteur de recherche par laquelle les optimiseurs de moteur de recherche publient une version unique de contenu pertinent sur des répertoires d'articles, des sites Web 2.0 ou d'autres sources de backlinks.
Il est parfois utilisé par les auteurs de sites Web sur leurs propres sites, mais généralement évité car la qualité du contenu filé sera inférieure à celle du contenu manuscrit. La rotation fonctionne en réécrivant des articles existants, ou des parties d'articles, et en remplaçant des mots, des phrases, des phrases ou même des paragraphes entiers par un nombre illimité de versions alternatives pour fournir une variation légèrement différente à chaque rotation.
Ce processus peut être complètement automatisé ou réécrit manuellement. Votre travail aujourd'hui consistera à créer un programme ou une fonction qui interprète une chaîne contenant Spintax , la syntaxe par laquelle un programme lirait les différentes options disponibles. Voici un exemple de chaîne qui utilise Spintax:
{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}
Comme vous pouvez le voir, les sections de la chaîne qui doivent être «filées» sont placées entre accolades, où les options individuelles sont divisées par le |
caractère. Voici quelques exemples de phrases que cela pourrait produire.
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!
Votre travail
Votre mission, si vous l'acceptez, est de créer un programme ou une fonction qui prend une chaîne d'entrée qui peut ou non contenir Spintax , puis d'imprimer 5 versions de la chaîne, en sélectionnant au hasard l' un des choix de chaque bloc d'options. Vous pouvez faire quelques hypothèses:
- Vous n'aurez pas besoin de gérer Spintax imbriqué (
{This|is {an|one}|example}
). - Les caractères
|
,{
et}
n'apparaîtront nulle part ailleurs que dans un bloc Spintax. - Vous n'avez pas besoin de vérifier si les 5 phrases de sortie sont distinctes, tant que le code sélectionne des options à l'aide de la fonction de nombre aléatoire de votre langue.
- Vous pouvez supposer que l'entrée se termine par une nouvelle ligne.
Règles
Les tests
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#
Un quatrième test peut être trouvé ici.
Il s'agit de code-golf , donc le plus petit nombre d'octets gagne.
{
,|
,}
va être trouvé dans la chaîne d'entrée est l' endroit où il y a Spintax.Réponses:
Pyth, 18
Essayez-le en ligne ici
Explication:
la source
Rubis, 46
Avec l'indicateur de ligne de commande
-p
, exécutezLire dans une chaîne avec une nouvelle ligne de fin. Concatène-le à lui-même 5 fois, mute-le en place et produit le résultat.
/{(.+?)}/
est une expression régulière avec un quantificateur paresseux: sans le?
, il correspondrait à l'extrême gauche{
à l'extrême droite}
au lieu du plus proche.$1
est une variable magique faisant référence au premier groupe de capture de chaque correspondance, tandis que le?|
littéral fait référence au|
personnage.sample
est une méthode de tableau renvoyant un élément aléatoire.la source
CJam,
25221918 octetsCe code nécessite que l'entrée contienne une nouvelle ligne de fin.
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
À chaque itération, deux morceaux (une constante, une variable) sont laissés sur la pile et seront imprimés à la fin du programme.
la source
Python 3, 110 octets
Regex se dédoublant, comme les autres.
Python 3,
121116114 114 octetsCelui-ci effectue les remplacements appropriés puis l'évalue. Si ce n'était pas pour échapper aux barres obliques inverses et aux apostrophes, cela aurait été plus court.
Par exemple, supposons que nous ayons le Spintax
Le
.translate
effectue quelques conversions pour donner:la source
Perl, 50
49
caractères+1
pour-p
.Cela fonctionne en définissant d'abord
$_
les 5 phrases. Ensuite, il fait une recherche globale et remplace, où nous recherchons pour chaque{ | | }
groupe. Il divise le groupe|
et sélectionne un élément aléatoire pour le remplacement.Courir avec:
la source
$_ x=5
enregistre quelques octets.Autruche v0.7.0 , 27 caractères
Explication:
(Remarque: la version 0.7.0 a été effectuée après la publication de cette question, mais la réponse est toujours valable car tous les commits qui ont constitué cette version ont tous été poussés avant la publication de cette question.)
la source
Pip,
252220 octetsTard à la fête, mais voici le mien. Prend l'entrée comme argument de ligne de commande, qui peut devoir être cité.
Explication:
17 octets (mais pas une soumission valide)
Nécessite la dernière version de Pip, mise à jour après la publication de cette question. L'opérateur RC (choix aléatoire) était prévu depuis un certain temps, mais je n'ai jamais réussi à l'implémenter jusqu'à présent. : ^ (
En savoir plus sur Pip
la source
JavaScript ES6,
8684 octetsCela s'attend à ce que l'entrée ait une nouvelle ligne de fin. Il commence par répéter l'entrée 5 fois, puis en remplaçant chaque chaîne Spintax par un mot aléatoire, obtenu en divisant les
|
caractères puis en choisissant un nombre aléatoire entre 0 et la longueur du tableau résultant moins 1. Dans ce cas,|0
est juste une façon plus courte de faireMath.floor
. Merci à vihan1086 de m'avoir rappelé les chaînes de modèle balisées.L'extrait de pile ci-dessous contient du code non golfé et facilement testable.
la source
|0
est équivalent àMath.floor
pasMath.round
. Bien que ce soit ce que vous voulezMath.round
, la distribution serait inégale.Perl, 82 octets
la source
Python 2, 139 octets
Ajout de deux octets pour les guillemets autour de la chaîne d'entrée. Si ceux-ci ne sont pas nécessaires, faites-le moi savoir.
Essayez-le ici
la source
Java,
243215242234 octetsRecherche les chaînes entre accolades
{}
et les remplace par un élément aléatoire à partir du tableau de chaînes créé par la division par le caractère de tuyau. (J'ai réalisé un peu trop tard qu'il fallait imprimer cinq phrases: P)la source
Bash:
144138 caractèresExemple d'exécution:
la source
w()(...)
au lieu dew(){...}
(permet d'éliminer les espaces blancs),printf
au lieu deecho -n
et des accolades au lieu dedo
etdone
.printf
qui concerne , cela échouerait sur la chaîne d'entrée contenant «%», sauf si j'ai mal compris quelque chose.Javascript,
143142 octetsla source
Python 3, 97 octets
Utilisation d'une fonction lambda dans la substitution d'expression régulière. Ceci est quelque peu similaire à la façon dont je l'ai fait dans mon module Spintax https://github.com/AceLewis/spintax mais il ne traite pas de Spintax imbriqué ni d'échapper aux personnages.
Si vous ne supposez pas que l'entrée se termine par une nouvelle ligne, elle sera de 104 octets.
la source