এলোমেলোভাবে একটি শব্দ বানান


16

এই সিআর প্রশ্নের দ্বারা অনুপ্রাণিত (দয়া করে সিআর ব্রাউজ করার জন্য আমাকে হত্যা করবেন না)

ফটকা খেলা

একটি শব্দের ভুল বানান করার সম্ভাবনাগুলি হ'ল:

  • 1/3 সময় আউটপুট পরিবর্তন করবেন না
  • 1/3 সময় একটি এলোমেলো অক্ষর মুছে ফেলুন
  • 1/3 সময়ের একটি এলোমেলো চরিত্রের সদৃশ করুন

ইনপুটটিতে প্রদত্ত অক্ষরটিকে সরিয়ে / নকল করার সুযোগ সমস্ত অক্ষরের জন্য একই হওয়া উচিত be

যদি পর পরের দুটি অক্ষর একই হয় (কেস-সংবেদনশীল) তবে তাদের মধ্যে একটিরও পরিবর্তিত হওয়ার সম্ভাবনা একই রকম হওয়া উচিত যেন তারা একটি চরিত্র। অর্থাত জন্য আউটপুট AA(যা হয় AAবা Aবা AAA) সব একই সম্ভাবনা থাকা উচিত।


ইনপুটটিতে কেবল সরলতার জন্য অক্ষর থাকবে।

উদাহরণ

প্রথম লাইনটি ইনপুট, নিম্নলিখিত লাইনগুলি হ'ল সম্ভাব্য ভুল বানান। প্রতিটি লাইনের আউটপুট হওয়ার একই সম্ভাবনা থাকা উচিত, উদাহরণগুলিতে ইনপুট বাদ দেওয়া হয় তবে এটির আউটপুট হওয়ার 1/3 সম্ভাবনা থাকা উচিত।

foo

fo
oo
ffoo
fooo
PPCG

PPC
PPG
PCG
PPPCG
PPCCG
PPCGG

এটি একটি দুর্দান্ত চ্যালেঞ্জ, তবে প্রতিটি লাইনে যদি আউটপুট হওয়ার একই সম্ভাবনা থাকে তবে এর অর্থ এই নয় যে এটি শব্দটি একই থাকায় এটি 1/3 সুযোগ নয়?
মান কালি

@ ভালিউইঙ্ক ঠিক আছে উদাহরণগুলির সাথে এটি একটি ত্রুটি। আমাকে ঠিক করতে দিন
ডাউনগোট

3
অপেক্ষা করুন, যদি প্রতিটি লাইনের আউটপুট হওয়ার একই সম্ভাবনা থাকে, তবে অক্ষরের বিতরণটি অভিন্ন হবে না? এর মতো, এর সাথে foo: আপনি যদি একটি চরিত্র সরিয়ে ফেলেন তবে এটি (-f) oo, f (-o) o, এবং ফো (-o) হয়ে যেতে পারে। সুতরাং foহিসাবে দ্বিগুণ সম্ভবত হওয়া উচিত oo, কিন্তু আপনি বলছেন যে প্রতিটি লাইনের সমান সম্ভাবনা রয়েছে।
দেউসোভি 30'16

2
@ দেউসোভি এখানে একটি সম্পূর্ণ অনুচ্ছেদ বর্ণনা করছে, আমি ঠিক এখানে কপি করবIf two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
edc65

1
@ ডিজেএমসিএমহেম না, একাধিক অক্ষর সাধারণত ভুল বানান হয়; _;
ডাউনগোট

উত্তর:


5

পিপ , 38 27 বাইট

a@:`(.)\1*`YRR#aa@y@0X:RR3a

এটি মজাদার ছিল - পাইপের রেজেজেক্স এবং পরিবর্তনীয় স্ট্রিং ক্ষমতাগুলি ব্যবহার করতে পেরেছিলাম, যা আমি কিছুক্ষণের মধ্যে টানতে পারি নি। কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেয়।

ব্যাখ্যা:

a@:`(.)\1*`                  Split a into runs of identical chars using regex match
           YRR#a             Yank randrange(len(a)) into y (randomly choosing one such run)
                a@y@0        Take the first character of that run
                     X:RR3   Modify in place, string-multiplying by randrange(3):
                               If RR3 is 0, character is deleted
                               If RR3 is 1, no change
                               If RR3 is 2, character is duplicated
                          a  Output the modified a

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


1
বাহ, শুধুমাত্র ASCII- এর সাথে
টর্স

3

রুবি, 64 55 + 1 ( pপতাকা) = 56 বাইট

ইনপুটটি স্ট্রিডিনের একটি লাইন যা লাইনটি নতুন লাইন ছাড়াই পাইপযুক্ত।

a=[]
gsub(/(.)\1*/){a<<$&}
a.sample[-1]*=rand 3
$_=a*''

2

সিজেএম (21 বাইট)

re`_,mr_2$=3mr(a.+te~

অনলাইন ডেমো

ব্যবচ্ছেদ

r     e# Read a line of input from stdin
e`    e# Run-length encode it
_,mr  e# Select a random index in the RLE array
_     e# Hang on to a copy of that index
2$=   e# Copy the [run-length char] pair from that index
3mr(  e# Select a uniformly random integer from {-1, 0, 1}
a.+   e# Add it to the run-length
t     e# Replace the pair at that index
e~    e# Run-length decode

2

জাভাস্ক্রিপ্ট (ES6), 107

w=>(r=x=>Math.random()*x|0,a=w.match(/(.)\1*/g),a[p=r(a.length)]=[b=a[p],b+b[0],b.slice(1)][r(3)],a.join``)

কম গল্ফড

w=>(
  a = w.match(/(.)\1*/g),
  r = x => Math.random()*x | 0,
  p = r(a.length),
  b = a[p],
  a[p] = [b, b+b[0], b.slice(1)][r(3)],
  a.join``
)

পরীক্ষা

f=w=>(r=x=>Math.random()*x|0,a=w.match(/(.)\1*/g),a[p=r(a.length)]=[b=a[p],b+b[0],b.slice(1)][r(3)],a.join``)

function update() { 
  O.innerHTML = Array(99)
  .fill(I.value)
  .map(x=>(
    r=f(x),
    r==x?r:r.length<x.length?'<b>'+r+'</b>':'<i>'+r+'</i>'
  
    )
  ).join` `
}

update()
#O { width:90%; overflow: auto; white-space: pre-wrap}
<input id=I oninput='update()' value='trolley'><pre id=O></pre>


2

জাভা 7, 189 180 178 বাইট

import java.util.*;String c(String i){Random r=new Random();int x=r.nextInt(2),j=r.nextInt(i.length());return x<1?i:i.substring(0,j-(x%2^1))+(x<2?i.charAt(j):"")+i.substring(j);}

অবহেলিত ও পরীক্ষার কেস:

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

import java.util.*;
class M{
  static String c(String i){
    Random r = new Random();
    int x = r.nextInt(2),
        j = r.nextInt(i.length());
    return x < 1
            ? i
            : i.substring(0, j - (x%2 ^ 1)) + (x<2?i.charAt(j):"") + i.substring(j);
  }

  public static void main(String[] a){
    for(int i = 0; i < 5; i++){
      System.out.println(c("foo"));
    }
    System.out.println();
    for(int i = 0; i < 5; i++){
      System.out.println(c("PPCG"));
    }
  }
}

সম্ভাব্য আউটপুট:

foo
fooo
foo
foo
ffoo

PPCCG
PPCG
PPCCG
PPPCG
PPCG


1

পাইথ - 17 বাইট

এটি আসলে ক্রমাগত চরের সাথে বিশেষ কেসগুলি সঠিকভাবে পরিচালনা করে।

 XZOKrz8Or_1 2r9K

টেস্ট স্যুট


এটি কি 16 বাইট? নেতৃস্থানীয় স্থান সঠিক? যদি এটি 15 বাইট না?
ডাউনগোট

@ ডাউনগোট নং, শীর্ষস্থানীয় স্থানটি সঠিক is আমি নিশ্চিত যে এর 17 বাইট
মাল্টেসেন

1

এপিএল, 21

{⍵/⍨3|1+(?3)×(⍳=?)⍴⍵}

এটি এলোমেলো অবস্থানে 1 দিয়ে জিরোসের ভেক্টর তৈরি করে শুরু হয়। তারপরে এটিকে 1 এবং 3 এর মধ্যে একটি এলোমেলো সংখ্যা দ্বারা গুণিত করে +1 1 এবং মোড 3 সমস্ত 1 এস এবং 0,1 বা 2 অবস্থিত একটি এলোমেলো অবস্থান সহ একটি ভেক্টর প্রাপ্ত করে।

পরিশেষে, ⍵ / ⍨ বলেছে যে প্রতিটি অক্ষর n বার লিখতে হবে, যেখানে এন ভেক্টরের সংখ্যা।

এটি ব্যবহার করে দেখুন tryapl.org



0

জাভাস্ক্রিপ্ট (ES6), 103

w=>{w=w.split(''),r=Math.random,x=r(),i=r()*w.length|0;w.splice(i,x<.6,x>.3?w[i]:'');alert(w.join(''))}

0

এপিএল, 27 বাইট

{⍵/⍨(?3)⌷1⍪2 0∘.|1+(⍳=?)⍴⍵}

ব্যাখ্যা:

                        ⍴⍵  ⍝ length of ⍵
                   (⍳=?)    ⍝ bit vector with one random bit on 
                 1+         ⍝ add one to each value (duplicate one character)
           2 0∘.|           ⍝ mod by 2 and 0 (remove instead of duplicate)
         1⍪                 ⍝ add a line of just ones (do nothing)
    (?3)⌷                   ⍝ select a random line from that matrix
 ⍵/⍨                        ⍝ replicate characters in ⍵

টেস্ট:

      {⍵/⍨(?3)⌷1⍪2 0∘.|1+(⍳=?)⍴⍵} ¨ 10/⊂'foo'
 fooo  foo  oo  foo  fo  fo  oo  fo  oo  fooo 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.