2017-09-28 1 views
-4

- 문자를 삽입하여 문자열을 스푸핑하고 싶습니다. 나는 수업했습니다 :임의의 개체에서 더 많은 고유 번호를 얻는 방법

static class Spoofer { 
    private static char spoofChar = '-'; 
    private static Random rnd = new Random(); 
    public static double SpoofPercentage = 0.3; 

    public static string Spoof(string input) { 
     if (input.Length == 0) 
      return ""; 

     StringBuilder sb = new StringBuilder(); 

     for (int i = 0; i < input.Length; i++) { 
      while (rnd.NextDouble() <= SpoofPercentage) { 
       sb.Append(spoofChar); 
      } 
      sb.Append(input[i]); 
     } 

     return sb.ToString(); 
    } 
} 

그리고 이것은 내가 스푸핑을 사용하는 방법입니다 :

의 모습 스푸핑 된 메시지입니다
string messageToSpoof = "This is my example message"; 
string spoofedMessage = Spoofer.Spoof(messageToSpoof); 

같은 : 당신이 -이 볼 수 있듯이 그래서

-Th-is is my- e--x-am--p--l-e messa-g-e 
--T-his is --my --exampl--e me--s-sage 
This --is my exam--p-le mes-sage 
This- -i-s m-y-- example-- ---mess---a---ge 
Th-is is my example -message 
Th-i----s is m-y- exam-p-le -message 
This is-- -my examp--l--e me-ssa-g-e 
This -is --my- e-xa--mple m----ess-age 
T-his -is--- my- exa-m-ple me---s-s-ag-e 

무작위로 삽입 된 것은 아닙니다. 패턴을 관찰하는 것은 쉽습니다. 대부분의 경우 -은 몇 번 배치됩니다. 어떻게 피할 수 있습니까? 문제가 있다고 생각하면 Random 개체가 비슷한 값을 생성합니다.

+6

어떤 패턴을 관찰하고 있습니까? – SLaks

+0

알고리즘이 주어진 문자열에서 상당히 제한된 수의 대시를 생성하므로 패턴이 너무 많다고 생각하지 않습니다. '랜덤 '은 문제가 있지만, 지금은 당신이 그걸 때리는 것 같지 않습니다. – BradleyDotNET

+0

'-'은 그룹으로되어 있습니다. 그것의 무작위 삽입 아닙니다. –

답변

0

그들은 나에게 꽤 무작위로 보인다.

Apple이 이전에 노래 셔플 기능으로 한 동일한 문제에 직면 한 것 같습니다. 사람들이 임의의 정보 클러스터를 볼 때 자연스럽게 패턴을 겹쳐 씁니다 (반드시 존재하지는 않습니다). 이것은 우리가 혼란에 질서의 상태를 투사하는 것입니다.

어떤 반복 문자열이 -이 아닌 경우. while 대신 Spoofer 클래스의 수표를 if에 추가하십시오. 그러나 이것은 본질적으로 덜 무작위적일 것이다.

0

난수 생성기 (모든 결함에 대해)는 0과 1 사이의 값을 반환합니다. 대시를 얻는 데 필요한 상한값은 0.3이므로 대시를 얻으려면 3 번의 기회가 있습니다. 어떤 경우에는 10 자의 범위에 대해 3 미만을 얻는 지점과 그 이상의 지점이있는 지점을 볼 수 있습니다. 그것은 난수 생성을 위해 예상됩니다. (탁상용 게임에서 주사위를 굴린 적이 있습니까?)

너무 많아지면 천장이 낮아집니다. 또는 임의의 숫자를 생성하는 다른 방법을 찾으십시오.

난수 생성기는 난수를 생성하지 않습니다. 기껏해야 의사 랜덤입니다.

관련 문제