Artikel Berputar dengan Spintax
Pemintalan artikel adalah teknik optimisasi mesin pencari yang digunakan pengoptimal mesin pencari untuk memposting versi unik dari konten yang relevan di direktori artikel, situs web 2.0, atau sumber lain untuk tautan balik.
Kadang-kadang digunakan oleh penulis situs web di situs mereka sendiri tetapi biasanya dihindari karena kualitas konten pintal akan lebih rendah daripada konten tulisan tangan. Pemintalan bekerja dengan menulis ulang artikel yang ada, atau bagian dari artikel, dan mengganti kata, frasa, kalimat, atau bahkan seluruh paragraf tertentu dengan sejumlah versi alternatif untuk memberikan variasi yang sedikit berbeda dengan setiap putaran.
Proses ini dapat sepenuhnya otomatis atau ditulis ulang secara manual. Pekerjaan Anda hari ini adalah membuat program atau fungsi yang menginterpretasikan string yang berisi Spintax , sintaks yang digunakan program untuk membaca berbagai opsi yang tersedia. Di bawah ini adalah contoh string yang menggunakan Spintax:
{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}
Seperti yang Anda lihat, bagian-bagian dari string yang akan 'berputar' diapit oleh kurung kurawal, di mana opsi individual dipisahkan oleh |
karakter. Berikut adalah beberapa contoh kalimat yang bisa dihasilkan.
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!
Pekerjaan Anda
Misi Anda, jika Anda memilih untuk menerimanya, adalah membuat program atau fungsi yang mengambil string input yang mungkin atau mungkin tidak mengandung Spintax , lalu mencetak 5 versi string, memilih secara acak salah satu pilihan dari setiap blok opsi. Anda dapat membuat beberapa asumsi:
- Anda tidak perlu menangani Spintax bersarang (
{This|is {an|one}|example}
). - The
|
,{
dan}
karakter tidak akan muncul di tempat lain selain di dalam blok Spintax. - Anda tidak perlu memeriksa apakah 5 kalimat keluaran berbeda, selama kode memilih opsi menggunakan fungsi angka acak bahasa Anda.
- Anda dapat menganggap input berakhir dengan baris baru.
Aturan
Tes
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#
Tes keempat dapat ditemukan di sini.
Ini adalah kode-golf , jumlah byte yang paling sedikit menang.
{
,|
,}
akan ditemukan dalam string input mana ada Spintax.Jawaban:
Pyth, 18
Cobalah online di sini
Penjelasan:
sumber
Ruby, 46
Dengan bendera baris perintah
-p
, jalankanBaca dalam string dengan baris baru. Menggabungkannya sendiri 5 kali, memutasikannya di tempat, dan output hasilnya.
/{(.+?)}/
adalah ekspresi reguler dengan kuantifier malas: tanpa?
, itu akan cocok dengan yang paling kiri{
ke yang paling tepat}
bukan yang terdekat.$1
adalah variabel ajaib yang merujuk ke grup tangkapan pertama di setiap pertandingan, sedangkan?|
literal mengacu pada|
karakter.sample
adalah metode array yang mengembalikan elemen acak.sumber
CJam,
25221918 byteKode ini membutuhkan input untuk memuat baris baru.
Cobalah online di juru bahasa CJam .
Bagaimana itu bekerja
Dalam setiap iterasi, dua potongan (satu konstanta, satu variabel) ditinggalkan di tumpukan dan akan dicetak ketika program keluar.
sumber
Python 3, 110 byte
Regex membelah, seperti yang lainnya.
Python 3,
121116114 byteYang ini melakukan penggantian yang sesuai kemudian mengevaluasinya. Jika bukan karena melarikan diri dari garis miring terbalik dan tanda kutip, ini akan menjadi lebih pendek.
Sebagai contoh, misalkan kita memiliki Spintax
Yang
.translate
melakukan beberapa konversi untuk memberikan:sumber
Perl, 50
49
karakter+1
untuk-p
.Ini bekerja dengan pengaturan pertama
$_
ke 5 kalimat. Kemudian ia melakukan pencarian dan penggantian global, tempat kami mencari setiap{ | | }
grup. Itu membagi grup|
, dan mengambil elemen acak untuk penggantian.Jalankan dengan:
sumber
$_ x=5
menghemat beberapa byte.Burung unta v0.7.0 , 27 karakter
Penjelasan:
(catatan: rilis 0.7.0 dibuat setelah pertanyaan ini diposting, tetapi jawabannya masih valid karena semua komitmen yang membentuk rilis itu semua didorong sebelum pertanyaan ini diposting.)
sumber
Pip,
252220 byteTerlambat ke pesta, tapi ini milikku. Mengambil input sebagai argumen baris perintah, yang mungkin perlu dikutip.
Penjelasan:
17 byte (tetapi bukan pengiriman yang valid)
Membutuhkan Pip versi terbaru, diperbarui setelah pertanyaan ini diposting. Operator RC (pilihan acak) telah direncanakan untuk beberapa waktu, tetapi saya tidak pernah sempat mengimplementasikannya sampai sekarang. : ^ (
Pelajari lebih lanjut tentang Pip
sumber
JavaScript ES6,
8684 byteIni mengharapkan input memiliki baris baru. Dimulai dengan mengulangi input 5 kali, dan kemudian mengganti setiap string Spintax dengan kata acak darinya, yang diperoleh dengan memisahkan
|
karakter dan kemudian memilih angka acak antara 0 dan panjang array yang dihasilkan dikurangi 1. Dalam hal ini kasus,|0
hanyalah cara yang lebih singkat untuk dilakukanMath.floor
. Terima kasih kepada vihan1086 untuk mengingatkan saya tentang string templat yang ditandai.Cuplikan Stack di bawah ini berisi kode yang tidak mudah diserang dan mudah diuji.
sumber
|0
sama denganMath.floor
tidakMath.round
. Meskipun itu yang Anda inginkanMath.round
akan memberikan distribusi yang tidak merata.Perl, 82 byte
sumber
Python 2, 139 byte
Menambahkan dua byte untuk kutipan di sekitar string input. Jika ini tidak diperlukan, beri tahu saya.
Coba di sini
sumber
Java,
243215242234 byteMenemukan string dalam kurung
{}
dan menggantinya dengan elemen acak dari array string yang dibuat dengan memisahkan oleh karakter pipa. (Saya menyadari sedikit terlambat bahwa lima kalimat harus dicetak: P)sumber
Bash:
144138 karakterContoh dijalankan:
sumber
w()(...)
bukanw(){...}
(memungkinkan untuk menghilangkan spasi putih),printf
bukanecho -n
dan kurung keriting bukando
dandone
.printf
, itu akan gagal pada input string yang mengandung "%", kecuali saya salah paham sesuatu.Javascript,
143142 bytesumber
Python 3, 97 byte
Menggunakan fungsi lambda dalam substitusi regex. Ini agak mirip dengan bagaimana saya melakukannya di modul Spintax saya https://github.com/AceLewis/spintax namun tidak berurusan dengan Spintax bersarang atau melarikan diri dari karakter.
Jika Anda tidak menganggap input berakhir dengan baris baru maka akan menjadi 104 byte.
sumber