Artikel Spinnen mit Spintax
Article Spinning ist eine Suchmaschinenoptimierungstechnik, mit der Suchmaschinenoptimierer eine eindeutige Version des relevanten Inhalts in Artikelverzeichnissen, Web 2.0-Sites oder anderen Quellen für Backlinks veröffentlichen.
Es wird gelegentlich von Website-Autoren auf ihren eigenen Websites verwendet, jedoch in der Regel vermieden, da die Qualität von gesponnenen Inhalten geringer ist als von Hand geschriebene Inhalte. Beim Drehen werden vorhandene Artikel oder Teile von Artikeln umgeschrieben und bestimmte Wörter, Ausdrücke, Sätze oder sogar ganze Absätze durch eine beliebige Anzahl alternativer Versionen ersetzt, um bei jeder Drehung eine geringfügig andere Variation bereitzustellen.
Dieser Vorgang kann vollständig automatisiert oder manuell umgeschrieben werden. Ihre Aufgabe heute wird es sein, ein Programm oder eine Funktion zu erstellen, die eine Zeichenfolge interpretiert , die Spintax enthält , die Syntax, mit der ein Programm die verschiedenen verfügbaren Optionen liest. Unten ist eine Beispielzeichenfolge, die Spintax verwendet:
{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}
Wie Sie sehen, sind Abschnitte der Zeichenfolge, die 'gesponnen' werden sollen, in geschweiften Klammern eingeschlossen, wobei die einzelnen Optionen durch das |
Zeichen getrennt werden. Hier sind einige Beispielsätze, die dies erzeugen könnte.
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!
Deine Arbeit
Ihre Aufgabe ist es, ein Programm oder eine Funktion zu erstellen, die eine Eingabezeichenfolge verwendet, die Spintax enthalten kann oder nicht , und dann 5 Versionen der Zeichenfolge auszudrucken, wobei Sie zufällig eine der Optionen aus jedem Optionsblock auswählen. Sie können einige Annahmen treffen:
- Sie müssen nicht mit verschachteltem Spintax (
{This|is {an|one}|example}
) umgehen . - Die Zeichen
|
,{
und}
werden an keiner anderen Stelle als in einem Spintax-Block vorkommen. - Sie müssen nicht überprüfen, ob die 5 Ausgabesätze unterschiedlich sind, solange der Code Optionen mithilfe der Zufallszahlenfunktion Ihrer Sprache auswählt.
- Sie können davon ausgehen, dass die Eingabe mit einem Zeilenumbruch endet.
Regeln
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#
Ein vierter Test ist hier zu finden .
Das ist Code-Golf , also gewinnt die geringste Anzahl von Bytes.
{
, an dem,, in der Eingabezeichenfolge zu finden ist|
,}
ist der Ort, an dem sich Spintax befindet.Antworten:
Pyth, 18
Probieren Sie es hier online aus
Erläuterung:
quelle
Rubin, 46
-p
Führen Sie mit Befehlszeilenflag ausLesen Sie eine Zeichenfolge mit einem nachgestellten Zeilenumbruch ein. Verketten Sie es fünfmal mit sich selbst, mutieren Sie es an der richtigen Stelle und geben Sie das Ergebnis aus.
/{(.+?)}/
ist ein regulärer Ausdruck mit einem faulen Quantifizierer: Ohne?
würde er vom linken{
zum rechten}
statt zum nächsten Quantifizierer passen .$1
ist eine magische Variable, die sich auf die erste Erfassungsgruppe in jedem Match?|
bezieht , während sich das Literal auf den|
Charakter bezieht .sample
ist eine Array-Methode, die ein zufälliges Element zurückgibt.quelle
CJam,
25221918 BytesFür diesen Code muss die Eingabe eine abschließende Newline enthalten.
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
In jeder Iteration verbleiben zwei Blöcke (eine Konstante, eine Variable) auf dem Stapel und werden gedruckt, wenn das Programm beendet wird.
quelle
Python 3, 110 Bytes
Regex-Aufteilung, wie die anderen.
Python 3,
121116114 BytesDieser führt die entsprechenden Ersetzungen durch und wertet sie dann aus. Ohne das Entgehen von Backslashes und Apostrophen wäre dies kürzer ausgefallen.
Angenommen, wir haben die Spintax
Das
.translate
führt ein paar Umbauten durch, um zu geben:quelle
Perl, 50
49
Zeichen+1
für-p
.Es funktioniert, indem zuerst
$_
die 5 Sätze eingestellt werden. Dann wird ein globales Suchen und Ersetzen durchgeführt, bei dem nach jeder{ | | }
Gruppe gesucht wird . Es teilt die Gruppe auf|
und wählt ein zufälliges Element für die Ersetzung aus.Laufen mit:
quelle
$_ x=5
spart ein paar Bytes.Strauß v0.7.0 , 27 Zeichen
Erläuterung:
(Hinweis: Die Version 0.7.0 wurde nach dem Veröffentlichen dieser Frage erstellt, die Antwort ist jedoch weiterhin gültig, da alle Commits, aus denen diese Version besteht, vor dem Veröffentlichen dieser Frage verschoben wurden.)
quelle
Pip,
252220 BytesSpät zur Party, aber hier ist meins. Übernimmt Eingaben als Befehlszeilenargument, das möglicherweise in Anführungszeichen gesetzt werden muss.
Erläuterung:
17 Bytes (aber keine gültige Übermittlung)
Erfordert die neueste Version von Pip, die nach dem Veröffentlichen dieser Frage aktualisiert wurde. Der RC-Operator (zufällige Auswahl) war für einige Zeit geplant, aber ich bin erst jetzt dazu gekommen, ihn umzusetzen. : ^ (
Erfahren Sie mehr über Pip
quelle
JavaScript ES6,
8684 BytesDies setzt voraus, dass die Eingabe eine nachgestellte Newline enthält. Es beginnt damit, die Eingabe fünfmal zu wiederholen und dann jede Spintax-Zeichenfolge durch ein zufälliges Wort zu ersetzen, das durch Aufteilen der
|
Zeichen und anschließende Auswahl einer Zufallszahl zwischen 0 und der Länge des resultierenden Arrays minus 1 erhalten wird Fall|0
ist nur eine kürzere Art und Weise zu tunMath.floor
. Vielen Dank an vihan1086, der mich an markierte Template-Strings erinnert hat.Das folgende Stapel-Snippet enthält unbenutzten und leicht testbaren Code.
quelle
|0
ist gleichbedeutend mitMath.floor
nichtMath.round
. Dies ist jedoch genau das, was Sie möchtenMath.round
, um eine ungleichmäßige Verteilung zu erreichen.Perl, 82 Bytes
quelle
Python 2, 139 Bytes
Zwei Bytes für Anführungszeichen um die Eingabezeichenfolge hinzugefügt. Wenn diese nicht benötigt werden, lassen Sie es mich wissen.
Probieren Sie es hier aus
quelle
Java,
243215242234 BytesFindet Zeichenfolgen in geschweiften Klammern
{}
und ersetzt sie durch ein zufälliges Element aus dem Array von Zeichenfolgen, die durch Aufteilen durch das Pipe-Zeichen erstellt wurden. (Mir war etwas zu spät klar, dass fünf Sätze gedruckt werden mussten: P)quelle
Bash:
144138 ZeichenProbelauf:
quelle
w()(...)
stattw(){...}
(erlaubt Leerzeichen zu beseitigen),printf
stattecho -n
und geschweiften Klammern stattdo
unddone
.printf
würde dies bei Eingabezeichenfolgen mit "%" fehlschlagen, sofern ich nichts falsch verstanden habe.Javascript,
143142 Bytesquelle
Python 3, 97 Bytes
Verwendung einer Lambda-Funktion bei der Regex-Substitution. Dies ähnelt der Vorgehensweise in meinem Spintax-Modul https://github.com/AceLewis/spintax, es wird jedoch nicht mit verschachtelter Spintax oder dem Entkommen von Zeichen gearbeitet.
Wenn Sie nicht annehmen, dass die Eingabe mit einem Zeilenumbruch endet, sind es 104 Byte.
quelle