Artykuł Spinning ze Spintax
Spinanie artykułów to technika optymalizacji pod kątem wyszukiwarek, dzięki której optymalizatorzy wyszukiwarek publikują unikalną wersję odpowiednich treści w katalogach artykułów, witrynach Web 2.0 lub innych źródłach linków zwrotnych.
Czasami są używane przez autorów stron na ich własnych stronach, ale zwykle unika się ich, ponieważ jakość wirowanych treści będzie niższa niż ręcznie napisanych. Przędzenie polega na przepisaniu istniejących artykułów lub części artykułów i zastąpieniu określonych słów, zwrotów, zdań, a nawet całych akapitów dowolną liczbą alternatywnych wersji, aby zapewnić nieco inną odmianę przy każdym obrocie.
Ten proces może być całkowicie zautomatyzowany lub przepisany ręcznie. Twoim zadaniem dzisiaj będzie stworzenie programu lub funkcji, która interpretuje ciąg znaków zawierający Spintax , składnię, za pomocą której program odczytuje różne dostępne opcje. Poniżej znajduje się przykładowy ciąg wykorzystujący Spintax:
{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}
Jak widać, sekcje ciągu, które mają być „wirowane”, są zamknięte w nawiasy klamrowe, w których poszczególne opcje są podzielone przez |
znak. Oto kilka przykładowych zdań, które mogą się pojawić.
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!
Twoja praca
Twoim zadaniem, jeśli zdecydujesz się to zaakceptować, jest stworzenie programu lub funkcji, która pobierze ciąg wejściowy, który może zawierać Spintax , ale może go nie wydrukować , a następnie wydrukuje 5 wersji ciągu, losowo wybierając jedną z opcji z każdego bloku opcji. Możesz poczynić kilka założeń:
- Nie będziesz musiał obsługiwać zagnieżdżonej Spintax (
{This|is {an|one}|example}
). - Te
|
,{
oraz}
znaków nie wystąpią inne niż gdziekolwiek indziej w bloku Spintax. - Nie musisz sprawdzać, czy 5 zdań wyjściowych jest odrębnych, o ile kod wybiera opcje za pomocą funkcji liczb losowych w Twoim języku.
- Możesz założyć, że dane wejściowe kończą się nową linią.
Zasady
Testy
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#
Czwarty test można znaleźć tutaj.
To jest golf golfowy , więc wygrywa najmniejsza liczba bajtów.
{
,|
,}
zostanie znaleziona w ciągu wejściowego jest tam, gdzie jest Spintax.Odpowiedzi:
Pyth, 18 lat
Wypróbuj online tutaj
Wyjaśnienie:
źródło
Ruby, 46
Z flagą wiersza polecenia
-p
uruchomPrzeczytaj ciąg z końcowym znakiem nowej linii. Połącz to z sobą 5 razy, zmutuj na miejscu i wyślij wynik.
/{(.+?)}/
jest wyrażeniem regularnym z leniwym kwantyfikatorem: bez?
tego pasowałby{
do skrajnej lewej do skrajnej prawej}
zamiast najbliższej.$1
to magiczna zmienna odnosząca się do pierwszej grupy przechwytywania w każdym meczu, natomiast?|
literał odnosi się do|
postaci.sample
to metoda tablicowa zwracająca losowy element.źródło
CJam,
25221918 bajtówTen kod wymaga, aby dane wejściowe zawierały znak nowej linii.
Wypróbuj online w interpretatorze CJam .
Jak to działa
W każdej iteracji na stosie pozostają dwie porcje (jedna stała, jedna zmienna) i zostaną wydrukowane po wyjściu z programu.
źródło
Python 3, 110 bajtów
Podział Regex, podobnie jak inne.
Python 3,
121116114 bajtówTen dokonuje odpowiednich zamian, a następnie ocenia. Gdyby nie ucieczka przed odwrotnymi ukośnikami i apostrofami, byłoby to krótsze.
Załóżmy na przykład, że mamy Spintax
Do
.translate
wykonuje kilka konwersje dać:źródło
Perl, 50
49
znaki+1
dla-p
.Działa, ustawiając najpierw
$_
na 5 zdań. Następnie wykonuje globalne wyszukiwanie i zamienia, gdzie szukamy każdej{ | | }
grupy. Dzieli grupę|
i wybiera losowy element do zamiany.Biegnij z:
źródło
$_ x=5
oszczędza kilka bajtów.Struś v0.7.0 , 27 znaków
Wyjaśnienie:
(uwaga: wydanie 0.7.0 zostało opublikowane po opublikowaniu tego pytania, ale odpowiedź jest nadal aktualna, ponieważ wszystkie zatwierdzenia składające się na to wydanie zostały wypchnięte przed opublikowaniem tego pytania).
źródło
Pip,
252220 bajtówPóźno na przyjęcie, ale tu jest moje. Pobiera dane wejściowe jako argument wiersza polecenia, który może wymagać cytowania.
Wyjaśnienie:
17 bajtów (ale nie jest to poprawne przesłanie)
Wymaga najnowszej wersji Pipa, zaktualizowanej po opublikowaniu tego pytania. Operator RC (wybór losowy) był planowany przez jakiś czas, ale do tej pory nie wdrożyłem go do wdrożenia. : ^ (
Dowiedz się więcej o Pip
źródło
JavaScript ES6,
8684 bajtówOczekuje to, że dane wejściowe będą miały końcowy znak nowej linii. Zaczyna się od powtórzenia danych wejściowych 5 razy, a następnie zastąpienia każdego ciągu Spintax losowym słowem, które uzyskuje się przez podzielenie
|
znaków, a następnie wybranie losowej liczby między 0 a długością wynikowej tablicy minus 1. W tym przypadek|0
jest tylko krótszym sposobemMath.floor
. Dzięki vihan1086 za przypomnienie mi o oznaczonych ciągach szablonów.Poniższy fragment stosu zawiera niepoznany i łatwy do przetestowania kod.
źródło
|0
jest równoważneMath.floor
nieMath.round
. Chociaż to jest to, co chcesz, ponieważMath.round
zapewni nierówną dystrybucję.Perl, 82 bajty
źródło
Python 2, 139 bajtów
Dodano dwa bajty dla cytatów wokół ciągu wejściowego. Jeśli nie są potrzebne, daj mi znać.
Wypróbuj tutaj
źródło
Java,
243215242234 bajtyZnajduje ciągi w nawiasach klamrowych
{}
i zastępuje je losowym elementem z szeregu ciągów utworzonych przez podział przez znak potoku. (Trochę za późno zdałem sobie sprawę, że trzeba wydrukować pięć zdań: P)źródło
Bash:
144138 znakówPrzykładowy przebieg:
źródło
w()(...)
zamiastw(){...}
(pozwala wyeliminować białe znaki),printf
zamiastecho -n
nawiasów klamrowych zamiastdo
idone
.printf
, to nie udałoby się na wejściowym łańcuchu zawierającym „%”, chyba że coś źle zrozumiałem.JavaScript,
143142 bajtówźródło
Python 3, 97 bajtów
Używanie funkcji lambda w podstawianiu wyrażeń regularnych. Jest to trochę podobne do tego, jak to zrobiłem w moim module Spintax https://github.com/AceLewis/spintax, jednak nie dotyczy zagnieżdżonego Spintaxa ani ucieczki od znaków.
Jeśli nie zakładasz, że wejście kończy się znakiem nowej linii, to będzie to 104 bajty.
źródło