태그 보관물: cryptography

cryptography

암호 생성 암호화 할 문자열 문구 n범위의 정수0 <= n

숫자와 문자열이 주어진 암호를 생성

당신의 작업은 간단합니다. 문자열 s과 숫자 0 <= n <= 9를 입력으로 받으면 문자열 n시간 의 각 문자 사이에 의사 난수 인쇄 가능 ASCII 문자를 삽입하십시오 . 의 각 문자에 대해 이러한 것을 s거기에 n그들 사이의 임의의 문자가. 공백을 제거해야합니다.

입력:

  • s암호로 암호화 할 문자열 문구
  • n범위의 정수0 <= n <= 9

예:

입력:

The treasure is here
2

산출:

T ! 0 h 32 e F4 t 0i r lk e hm a 7y s # 0 u * & r * h e ! 2 i H ^ s B, h ! @ e 0) r $ h e


이것은 이므로 가장 짧은 코드가 승리합니다! 행운을 빌고 재미있게 보내!



답변

C #, 141131 바이트

@Geobit의 Java answer 와 매우 유사하지만 현재 더 이상 있습니다 🙁

(I,n)=>{var R=new System.Random();var o="";int i,r;foreach(var c in I)if(c>32)for(i=r=0,o+=c;i++<n;){r=R.Next(33,127);o+=(char)r;}return o;};

전체 람다 물건 :

Func<string, int, string> a = (I,n) =>
{
    var R=new System.Random();
    var o="";
    int i;
    foreach(var c in I)
        if(c>32)
            for(i=0,o+=c;i++<n;o+=(char)R.Next(33,127));
    return o;
};

답변

05AB1E , 11 바이트

ð-vy²FžQ.RJ

온라인으로 사용해보십시오!

설명

ð-           # remove spaces from input string
  v          # for each char in the string
   y         # push the char
    ²F       # input-2 number of times do:
      žQ.R   # push a random ascii character
          J  # join to string

답변

자바 7 132 124 바이트

String f(int n,char[]a){String o="";int i;for(char b:a)if(b>32)for(i=0,o+=b;i++<n;o+=(char)(33+Math.random()*94));return o;}

아무것도 상상할 수 없습니다. 예상했던 것처럼 이중 루프입니다. 문자열을 반복하는 외부, 무작위를 채우기 위해 내부 :

String f(int n,char[]a){
    String o="";
    int i;
    for(char b:a)
        if(b>32)
            for(i=0,
                o+=b;
                    i++<n;
                        o+=(char)(33+Math.random()*94));
    return o;
}

답변

파이크, 12 11 9 바이트

d-FQV~KHs

여기 사용해보십시오!

d-        -  remove spaces from input
  F       - for i in ^:
   QV     -  repeat (number) times:
     ~KH  -    random_from(printable)
        s -   sum(^)

OP에 따르면 후행 임의 문자가 좋습니다.


답변

옥타브, 43 바이트

@(s,n)[s(s>32);33+94*rand(n,nnz(s>32))](:)'

이것은 문자열 s과 정수 n를 입력으로받습니다. 옥타브의 문자열은 단순히 문자 배열입니다. 공백이 아닌 문자 s>32가 포함 된 논리적 맵입니다 1. 이 코드는 33에서 126 사이의 부동 소수점 숫자를 포함하는 n행과 동일한 수의 열이 있는 행렬을 추가합니다 s(s>32). 암시 적으로 정수로 반올림되고 string과 연결될 때 ASCII 문자로 변환됩니다 s. (:)'이것을 수평 문자 배열로 직선화합니다.

여기에서 테스트하십시오!


답변

파이썬 2, 123 (122) 118 (114) 98 바이트

남자, 나는 바란다 random 그렇게 비싸지 않았 (그리고 우리는 공간을 필터링 할 필요가 없었다). 이제 우리는 끝에 암호 문자를 허용함으로써 크게 절약 할 수 있습니다 🙂 어쨌든, 여기에 있습니다.

from random import*
f=lambda s,n:s and(' '<s[0])*eval('s[0]'+'+chr(randint(32,126))'*n)+f(s[1:],n)

답변

자바 스크립트 (Firefox 30+), 96 바이트

(s,n)=>s.replace(/. */g,x=>x[0]+String.fromCharCode(...[for(_ of Array(n))Math.random()*95+32]))

Pure ES6는 2 바이트 더 깁니다.

(s,n)=>s.replace(/. */g,x=>x[0]+String.fromCharCode(...[...Array(n)].map(_=>Math.random()*95+32)))

슬프게도 26 바이트 더 긴 정말 멋진 접근법이 있습니다.

(s,n)=>String.raw({raw:s.split` `.join``},...[for(_ of s)String.fromCharCode(...[for(_ of Array(n))Math.random()*95+32])])