একটি স্পিনট্যাক্স {কার্য | সমস্যা | প্রশ্ন}


19

স্পিনট্যাক্সের সাথে নিবন্ধ স্পিনিং

আর্টিকেল স্পিনিং একটি অনুসন্ধান ইঞ্জিন অপ্টিমাইজেশন কৌশল যা অনুসন্ধান ইঞ্জিন অপ্টিমাইজারগুলি প্রবন্ধের ডিরেক্টরি, ওয়েব ২.০ সাইট বা ব্যাকলিংকের জন্য অন্যান্য উত্সগুলিতে প্রাসঙ্গিক সামগ্রীর একটি অনন্য সংস্করণ পোস্ট করে।

এটি ওয়েবসাইট লেখকরা তাদের নিজস্ব সাইটগুলিতে মাঝে মধ্যে ব্যবহার করেন তবে সাধারণত এড়ানো হয় কারণ হাতে লিখিত সামগ্রীর চেয়ে কাটা সামগ্রীর গুণমান কম হবে। স্পিনিং বিদ্যমান নিবন্ধগুলি, বা নিবন্ধগুলির অংশগুলি আবার লিখে এবং নির্দিষ্ট স্পেন, বাক্য, বাক্য, বা এমনকি সমস্ত অনুচ্ছেদের পরিবর্তে যে কোনও সংখ্যক বিকল্প সংস্করণ সহ প্রতিটি স্পিনের সাথে কিছুটা আলাদা প্রকরণ সরবরাহ করে কাজ করে।

এই প্রক্রিয়াটি সম্পূর্ণ স্বয়ংক্রিয়ভাবে বা ম্যানুয়ালি পুনরায় লেখা যেতে পারে। আজ আপনার কাজ হ'ল একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা স্পিন্ট্যাক্সযুক্ত একটি স্ট্রিংকে ব্যাখ্যা করবে , সিন্ট্যাক্স যার মাধ্যমে একটি প্রোগ্রাম উপলব্ধ বিভিন্ন বিকল্প পড়বে। নীচে স্পিনট্যাক্স ব্যবহার করে এমন একটি স্ট্রিং রয়েছে:

{Hello|Hi there|Bonjour}, user! {What's up?|How are you?|Feeling alright?|I caught a fish!}

আপনি দেখতে পাচ্ছেন, 'কাটা' স্ট্রিংয়ের কিছু অংশগুলি কোঁকড়া ধনুর্বন্ধনী দ্বারা আবদ্ধ থাকে, যেখানে পৃথক বিকল্পগুলি |অক্ষর দ্বারা বিভক্ত হয় । এখানে কিছু উদাহরণ বাক্য যা এটি উত্পাদন করতে পারে are

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!

আপনার কাজ

আপনার মিশনটি, আপনি যদি এটি গ্রহণ করতে চান তবে এটি এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করা যা ইনপুট স্ট্রিং নেয় যা স্পিনট্যাক্স ধারণ করতে পারে বা নাও থাকতে পারে , তারপরে স্ট্রিংয়ের 5 টি সংস্করণ মুদ্রণ করে , বিকল্পগুলির প্রতিটি ব্লক থেকে এলোমেলোভাবে একটি পছন্দ নির্বাচন করে। আপনি কয়েকটি অনুমান করতে পারেন:

  1. আপনার নেস্টেড স্পিনট্যাক্স ( {This|is {an|one}|example}) হ্যান্ডেল করার দরকার হবে না ।
  2. |, {এবং }অক্ষর কোথাও একটি Spintax ব্লকের মধ্যে ছাড়া অন্য সৃষ্টি হবে না।
  3. কোডটি আপনার ভাষার এলোমেলো সংখ্যা ক্রিয়া ব্যবহার করে অপশন নির্বাচন না করা পর্যন্ত 5 আউটপুট বাক্যগুলি স্বতন্ত্র কিনা তা পরীক্ষা করে দেখার দরকার নেই।
  4. আপনি ইনপুটটি একটি নতুন লাইন দিয়ে শেষ হতে পারে।

বিধি

  1. কোনও মানক ফাঁক নেই।

টেস্ট

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#

চতুর্থ পরীক্ষাটি এখানে পাওয়া যাবে।


এটি , তাই বাইটসের সংখ্যা সবচেয়ে কম।


2
এখন, সামান্য পরিবর্তন ... পাগল libs!
জিওবিটস

ইনপুটটিতে আমরা কী ধরণের অক্ষরগুলি আশা করতে পারি?
Sp3000

@ এসএসআইআই 32-127 থেকে এসপি 3000 সবকিছু। একমাত্র জায়গা যেখানে {, |, }ইনপুট স্ট্রিং খুঁজে পাওয়া যেতে যাচ্ছে যেখানে Spintax নেই।
কেড

উত্তর:


8

পাইথ, 18

V5sOMcR\|scR\{cz\}

এটি এখানে অনলাইনে চেষ্টা করুন

ব্যাখ্যা:

V5sOMcR\|scR\{cz\}                     : z = input()
V5                                     : do this 5 times
              cz\}                     : split z on the } character
          cR\{                         : split each element of the resulting list on {
         s                             : join the list of lists back into a list of strings
     cR\|                              : split these strings on the | character
   OM                                  : Choose a random element from each inner list
  s                                    : join those choices, and print them

1
আমার godশ্বর, দ্রুত ছিল!
কেড

7

রুবি, 46

কমান্ড-লাইন পতাকা সহ -p, চালান

($_*=5).gsub!(/{(.+?)}/){$1.split(?|).sample}

একটি পেছনের নতুন লাইনের সাথে স্ট্রিং পড়ুন। এটিকে নিজের কাছে 5 বার কনটেনেট করুন, এটিকে জায়গায় পরিবর্তিত করুন এবং ফলাফলটি আউটপুট করুন। /{(.+?)}/একটি অলস কোয়ানটিফায়ার সহ একটি নিয়মিত প্রকাশ: এটি ছাড়া এটি নিকটতমটির পরিবর্তে বাম ?দিকের {সাথে ডানদিকে মিলবে match আক্ষরিক চরিত্রটিকে বোঝায় প্রতিটি ম্যাচে প্রথম ক্যাপচার গ্রুপকে উল্লেখ করে একটি ম্যাজিক ভেরিয়েবল । এলোমেলো উপাদান ফেরত দেওয়া একটি অ্যারে পদ্ধতি।}$1?||sample


6

সিজেম, 25 22 19 18 বাইট

q5*'}/{'{/~'|/mR}/

এই কোডটির জন্য একটি ইনপুট দরকার একটি ট্রেলিং নিউলাইন।

সিজেএম ইন্টারপ্রেটারে এটি অনলাইনে চেষ্টা করুন ।

কিভাবে এটা কাজ করে

q     e# Read from STDIN.
5*    e# Repeat the input five times.
'}/   e# Split at right curly brackets.
{     e# For each chunk:
  '{/ e#   Split at left curly brackets.
  ~   e#   Dump both chunks on the stack.
  '|/ e#   Split the right chunk at vertical bars.
  mR  e#   Select a chunk, pseudo-randomly.
}/    e#

প্রতিটি পুনরাবৃত্তিতে দুটি অংশ (একটি ধ্রুবক, একটি ভেরিয়েবল) স্ট্যাকের উপর ছেড়ে যায় এবং প্রোগ্রামটি প্রস্থান করার সময় মুদ্রণ করা হবে।


6

পাইথন 3, 110 বাইট

import re,random
exec('print("".join(random.choice(s.split("|"))for s in re.split("{(.*?)}",%r)));'%input()*5)

রেগেক্স বিভাজন, অন্যদের মতো।

পাইথন 3, 121 116 114 বাইট

from random import*
exec(("print(%r[:-1]);"%(input()+'"')).translate({123:"'+choice(['",124:"','",125:"'])+'"})*5)

এটি যথাযথ প্রতিস্থাপনগুলি সম্পাদন করে তারপরে এটি মূল্যায়ন করে। যদি এটি ব্যাকস্ল্যাশ এবং অ্যাসিস্ট্রোফেস থেকে বাঁচার জন্য না হয় তবে এটি আরও ছোট হয়ে উঠত।

উদাহরণস্বরূপ, ধরুন আমাদের কাছে স্পিনট্যাক্স রয়েছে

I {like|hate} {Python|C}.

.translateসঞ্চালিত দিতে কয়েক ধর্মান্তর:

print('I '+choice(['like','hate'])+' '+choice(['Python','C'])+'.')

4

পার্ল, 50

$_=$_ x5;s/{(.*?)}/@r=split"\\|",$1;$r[rand@r]/ge

49 চরিত্র +1জন্য-p

এটি প্রথম $_5 টি বাক্যে সেট করে কাজ করে । তারপরে এটি একটি বিশ্বব্যাপী অনুসন্ধান এবং প্রতিস্থাপন করে, যেখানে আমরা প্রত্যেকটির জন্য অনুসন্ধান করি{ | | } গ্রুপের । এটি গ্রুপটি বিভক্ত করে |এবং প্রতিস্থাপনের জন্য এলোমেলো উপাদান বেছে নেয়।

সাথে চালান:

echo '{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}.' | perl -pe'$_=$_ x5;s/{(.*?)}/@r=split"\\|",$1;$r[rand@r]/ge'

$_ x=5কয়েক বাইট সাশ্রয়।
ডেনিস

4

অস্ট্রিচ v0.7.0 , 27 টি অক্ষর

{`{.*?}`{);(;"|/.,R*F=}X}5*

ব্যাখ্যা:

{...}5*  repeat 5 times
  `{.*?}`  regex to match "spintax" sections
  {...}X   replace with...
    );(;     remove first and last characters (the curly brackets)
    "|/      split on |
    .,R*     multiply length of that array by a random number
    F=       take the floor of that and get the nth element of the array

(দ্রষ্টব্য: এই প্রশ্নটি পোস্ট করার পরে ০.০.০ প্রকাশ করা হয়েছিল, তবে উত্তরটি এখনও কার্যকর আছে কারণ এই প্রশ্ন পোস্ট হওয়ার আগে যে রিলিজটি করেছিল যে সমস্ত কমিটি এই সকল পোস্টে ঠেলা দিয়েছিল।)


4

পিপ, 25 22 20 বাইট

পার্টিতে দেরি হলেও এখানে আমার। কমান্ড-লাইন আর্গুমেন্ট হিসাবে ইনপুট নেয়, যা উদ্ধৃত করা প্রয়োজন হতে পারে।

L5P_@RR#_Ma^`}|{`^'|

ব্যাখ্যা:

L5                    Loop 5 times:
          a^`}|{`     Split cmdline arg on curly braces using regex
                 ^'|  Split each item of the result on pipe (if there isn't one,
                        the result is a single-item list)
         M            Map this function to each item a in the result:
   _@RR#_             Calculate a random number between 0 and len(item)-1; use it to
                        index into item
  P                   Print the resulting list, concatenating elements together

17 বাইট (তবে বৈধ জমা নেই)

L5PRC_Ma^`}|{`^'|

এই প্রশ্নটি পোস্ট করার পরে আপডেট করা পিপ এর সর্বশেষ সংস্করণ প্রয়োজন। আরসি (এলোমেলো পছন্দ) অপারেটরটি কিছু সময়ের জন্য পরিকল্পনা করা হয়েছিল, তবে এখন পর্যন্ত আমি কখনই এটি প্রয়োগের কাছাকাছি পাইনি। : ^ (

পিপ সম্পর্কে আরও জানুন


1
সিরিয়াসলি? আপনি গল্ফ প্রতিযোগিতা জিততে আপনার নিজের ভাষা লিখেন?
ক্লো

3
@Chloe: CJam , GS2 , উটপাখি , pyg , Pyth , অক্ষিপট এবং টাকা সব golfing এই সাইটের ব্যবহারকারীদের দ্বারা আবিষ্কৃত ভাষা।
ডেনিস

3

জাভাস্ক্রিপ্ট ES6, 86 84 বাইট

f=s=>s.repeat(5).replace(/{(.+?)}/g,(_,e)=>(p=e.split`|`)[Math.random()*p.length|0])

এটি প্রত্যাশা করে যে ইনপুটটি একটি পেছনের নতুন লাইন থাকবে। এটি 5 বার ইনপুট পুনরাবৃত্তি করে শুরু হয় এবং তারপরে প্রতিটি স্পিন্ট্যাক্স স্ট্রিংকে এলোমেলো শব্দ দিয়ে প্রতিস্থাপন করে, যা |অক্ষরগুলি বিভক্ত করে এবং তারপরে 0 এবং ফলাফল অ্যারে বিয়োগের দৈর্ঘ্যের মধ্যে একটি এলোমেলো সংখ্যা নির্বাচন করে প্রাপ্ত হয় this কেস, |0করার একটি ছোট উপায় Math.floor। ট্যাগযুক্ত টেম্পলেট স্ট্রিং সম্পর্কে আমাকে মনে করিয়ে দেওয়ার জন্য vihan1086 ধন্যবাদ Thanks

নীচের স্ট্যাক স্নিপেটে অলোভিত এবং সহজে পরীক্ষারযোগ্য কোড রয়েছে।

f=function(s){
  return s.repeat(5).replace(/{(.+?)}/g,function(_,e){
    return (p=e.split('|'))[Math.random()*p.length|0]
  })
}

run=function(){document.getElementById('output').innerHTML=f(document.getElementById('input').value+'\n')};document.getElementById('run').onclick=run;run()
<input type="text" id="input" value="{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}." style="width: 400px;" /><button id="run">Run</button><br />
<pre id="output"></pre>


|0Math.floorনা সমান Math.round। যদিও এটি আপনি চান হিসাবে Math.roundঅসম বিতরণ প্রদান করবে।
জর্জ রিথ

@ জর্জিরিথ আপনি ঠিক বলেছেন, আমি বোঝাতে চাইছিলাম তবে দুর্ঘটনাক্রমে বৃত্তাকার হয়ে গেছে। ধন্যবাদ
নিনজাবার্মনকি

2

পার্ল, 82 বাইট

while($o=<>){for(0..4){$_=$o;s/{(.*?)}/@x=split\/\|\/,$1 and$x[rand@x]/ge;print;}}

2

পাইথন 2, 139 বাইট

ইনপুট স্ট্রিংয়ের আশেপাশে দুটি বাইট যুক্ত করা হয়েছে। এগুলি প্রয়োজন না হলে আমাকে জানান।

এখানে চেষ্টা করুন

import re,random
s=input()
exec"print''.join(t*(t!=''and(t[0]!='{'))or random.choice(t[1:].split('|'))for t in re.split('({.*?)}',s));"*5

1

জাভা, 243 215 242 234 বাইট

int i,k;void f(String s){String a,b[],c=s;for(;k++<5;System.out.println(c),c=s)while((i=c.indexOf("{"))>=0){a=c.substring(i,c.indexOf("}")+1);b=a.replaceAll("\\{|\\}","").split("\\|");c=c.replace(a,b[(int)(Math.random()*b.length)]);}}

ধনুর্বন্ধনী মধ্যে স্ট্রিংগুলি সন্ধান {}করে এবং পাইপ অক্ষরের দ্বারা বিভাজন দ্বারা নির্মিত স্ট্রিংগুলির অ্যারের থেকে এলোমেলো উপাদান দিয়ে তাদের প্রতিস্থাপন করে। (আমি কিছুটা দেরিতে বুঝতে পেরেছিলাম যে পাঁচটি বাক্য ছাপাতে হয়েছে: পি)


1

বাশ: 144 138 টি অক্ষর

IFS={} read -ap
w()(for o in "${p[@]}";{
[[ $o =~ \| ]]&&{
IFS=\| read -aa<<<"$o"
o=${a[RANDOM%${#a[@]}]}
}
echo -n "$o"
}
echo)
w
w
w
w
w

নমুনা রান:

bash-4.3$ bash spintax.sh <<< "Look {ma'|daddy|mr. president}! No {bin|core|doc|find|mail}utils tools nor {Awk|Sed|jq|XML Starlet}!"
Look ma'! No docutils tools nor Awk!
Look daddy! No binutils tools nor XML Starlet!
Look mr. president! No docutils tools nor XML Starlet!
Look ma'! No docutils tools nor Awk!
Look mr. president! No binutils tools nor Sed!

1
আপনি ব্যবহার করে একটি কয়েক বাইট সংরক্ষণ করতে পারবেন w()(...)পরিবর্তে w(){...}, (হোয়াইটস্পেস নিষ্কাশন করতে পারবেন) printfপরিবর্তে echo -nএবং পরিবর্তে কোঁকড়া বন্ধনী doএবং done
ডেনিস

ধন্যবাদ, ডেনিস। আবার। (দুঃখজনকভাবে আমি এই কৌশলগুলি প্রথমবার ভুলে যাইনি)) সম্পর্কিত printf, যদি আমি কিছু ভুল না বুঝি তবে "%" ধারণকারী ইনপুট স্ট্রিংয়ে এটি ব্যর্থ হয়।
manatwork

1

জাভাস্ক্রিপ্ট, 143 142 বাইট

a=prompt(b=5);for(c=[];b--;c.push(a.replace(/{(.+?)}/g,function(_,j){return (d=j.split("|"))[d.length*Math.random()|0]})));alert(c.join("\n"))

1

পাইথন 3, 97 বাইট

রেজেেক্স সাবস্টিটিউশনে ল্যাম্বদা ফাংশন ব্যবহার করা। এটি আমার স্পিনট্যাক্স মডিউল https://github.com/AceLewis/spintax এ আমি এটি কীভাবে করেছি তার সাথে কিছুটা মিল তবে এটি নেস্টেড স্পিন্ট্যাক্স বা চরিত্রগুলি থেকে বেরিয়ে আসার সাথে কাজ করে না।

import re,random
print(re.sub("{(.*?)}",lambda x:random.choice(x.group(1).split('|')),input()*5))

আপনি যদি ধরে না নেন যে ইনপুটটি একটি নতুন লাইন দিয়ে শেষ হয় তবে এটি হবে 104 বাইট।

import re,random
print(re.sub("{(.*?)}",lambda x:random.choice(x.group(1).split('|')),(input()+'\n')*5))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.