암호 생성


15

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

당신의 작업은 간단합니다. 문자열 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


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


3
임의의 인쇄 가능한 ASCII 문자 여기에서 임의의 의미 를 정의해야합니다 . 인쇄 가능한 모든 ASCII 문자의 확률이 동일합니까? 통계적으로 독립적이어야합니까? 이와 관련하여 어떤 유연성이 있습니까?
Luis Mendo

3
@jacksonecac 동의하지 않습니다. 무작위 로 말하는 것만으로 는 충분하지 않습니다. 예를 들어 ASCII 코드로 된 임의의 문자 만 선택하면 여전히 무작위이지만 허용되지 않을 것입니다 (또는 그렇지 않습니까?) 각 일련의 n문자 n가 동일한 임의 문자 의 사본으로 구성되어 있으면 여전히 임의이지만 통계적으로 독립적이지 않습니다. 등등
Luis Mendo

5
@jacksonecac "무작위"는 매우 광범위한 용어입니다. 정규 분포를 가진 문자를 선택하여 주위 문자 O가 공백보다 많거나 ~? 그것이 균일해야한다면, 그렇게 명시 적으로 말해야합니다. 그리고 그것이 균일하지 않아도된다면, 적어도 각 캐릭터가 0이 아닌 확률을 가져야하는 것과 같은 것을 언급해야합니다. 또한 이전의 의견에서 각 캐릭터 독립적 인 분포를 가져야한다고 언급 했으므로 이것이 중요하다면 도전에서 언급해야합니다. 이 매우 난수의 폭 넓은 스펙트럼.
Martin Ender

3
이것은 실제로 암호가 아닙니다. 아마도 스테 가노 그래피 일 것입니다.
Greg Martin

2
@MartinEnder의 유효 지점에 대한 적절한 응답이 아닙니다. 해결책은 문자가 균일하고 통계적으로 서로 독립적이어야하며 주석이 중지되도록 명시 적으로 지정하는 것입니다. 대안 (그러나 더 남용하기 쉬운) 사양은 왜곡 된 분포 또는 모든 문자가 0이 아닌 가능성이있는 한 문자가 서로 의존하는 분포는 괜찮다는 것입니다. 코드 골프 사양에서는 공정성이 중요합니다. 다른 좋은 도전에 대해이 유효한 의견을 다루고 싶지 않은 것 같습니다.
Level River St

답변:


7

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;
};

R=...직접 new System.Random().Next(...)생각할 수있는 이유
Roman Gräf

2
@ RomanGräf msdn.microsoft.com/en-us/library/h343ddh9(v=vs.110).aspx 시드가없는 C #의 Random 클래스는 시스템 시계를 사용하므로 빠른 연속 (예 : . 루프가)는, 대부분의 값은 대부분의 경우 작업 날 믿어 :(하지 것이다, 나는 항상 노력하고 그 기억, 동일 끝나게
요들

7

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

닫기! 공간을 다듬어 라! :)
jacksonecac

@jacksonecac : 미안한 부분을 놓쳤다. 지금 수정 :)
Emigna

좋은 작업! 작동합니다!
jacksonecac

1
@carusocomputing : 마지막 글자 뒤에 임의의 문자를 추가합니다. 글자 사이 만이 아닙니다.
Emigna

1
이 잘 :) 것으로 보인다 질문에서 최근 코멘트 후 @Emigna
geisterfurz007

6

자바 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;
}

필요 없음 k: String f(int n,char[]a){String o="";for(char b:a)if(b>32){o+=b;for(int i=0;i++<n;o+=(char)(33+Math.random()*94));}return o;}(125 바이트)
Olivier Grégoire

아 맞다. 다른 방법으로 사용하고있었습니다. 내가 char캐스트 와 함께 갈 때 그것을 꺼내는 것에 대해 생각하지 않았다 . 감사!
Geobits

내 잘못이야. 내가 잘못 계산, 내 제안 124 바이트 : 나는 길이 대신 열을 확인;)
Olivier Grégoire

네, 두 가지를 비교할 때 :)
Geobits

5

파이크, 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에 따르면 후행 임의 문자가 좋습니다.


5

옥타브, 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. (:)'이것을 수평 문자 배열로 직선화합니다.

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


1
암시 적 반올림! 니스
Luis Mendo

4

파이썬 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)

4

자바 스크립트 (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])])

엄격하게 말하면 /. *(?=.)/공백에서 시작하거나 끝나는 문자열에는 효과가 없으며 다른 사람이 신경 쓰지 않습니다. (지금은 임의의 문자 뒤에 오는 것도 허용됩니다.)
Neil

@Nail Trailing 임의의 문자가 허용됩니까? (?=.)문자열 끝에 공백을 처리 하는 것을 제거 할 수 있다고 생각 합니다.
ETHproductions

사양은 명확하지 않지만 공백 94+33대신 공백을 삽입하지 않는 것이 좋습니다.95+32
edc65


3

CJam , 21 18 바이트

lS-(ol~f{{95mrSc+\}*}

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

n임의의 후행 문자를 인쇄 합니다.

설명

lS-        e# Read line and remove spaces.
l~         e# Read and evaluate another line.
f{         e# For each character (passing in N)...
  {        e#   Do this N times...
    95mr   e#     Push random integer in [0, 95).
    Sc+    e#     Add to space character, giving a random printable ASCII character.
  }*
}
           e# All characters remaining on the stack are printed implicitly
           e# at the end of the program.

3

배쉬, 124 바이트

순수 bash + coreutils , 제어 흐름 구조 없음, 하위 언어 없음, "평가"없음

골프

E() { N=${1// /};paste <(fold -1<<<$N) <(tr -cd "\\40-\\176"<\/dev\/urandom|head -c$(($2*${#N}-$2))|fold -$2)|tr -d '\t\n';}

테스트

>E "The treasure is here" 2
TkZhf(e&Rt@FrS,edha+-sJTuh.rX@eVKi+3s<7hftey8r*/e

3

Q / KDB +, 39 36 34 바이트

raze{""sv(raze x;`char$40+n?87)}prior s
(,/)({""sv((,/)x;`char$40+n?87)}':)s

(,/)({""sv((,/)x;10h$40+n?87)}':)s

사용중인 변수 :

s:"The treasure is here"
n:2

이전 부사를 사용하여 각 항목의 오른쪽과 이전 항목 사이의 왼쪽에 기능을 적용합니다. 기본적으로 오른쪽의 각 문자 사이에서 왼쪽에 기능을 적용합니다.

40에서 126 사이의 n 개의 난수를 생성 한 다음이를 문자 등가로 변환하십시오.

`char$40+n?87

//Possible characters.
()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~

출력 예 :

TVghrveVp Rpti+r0sea3a9nsIjuRXrAReJ; +di=ys`{ ikhKTe4trTZesz

편집 :
k 표기법을 사용하여 q의 raze를 (, /)로 변환하여 3 바이트를 절약하고`전에 이전과 비슷하게 변경했습니다.


1
10h$
skeevey 다음

2

자바 8, 114 바이트

골프

(n,s)->s.chars().forEach((c)->{if(c>32)for(int i=0;i<=n;)System.out.print((char)(++i==1?c:33+Math.random()*94));})

정수와 문자열을 허용하는 Lambda. Java 7 답변에서 영감을 얻은 일부 Java 8 스트림 구문 ( String.chars)을 사용하는 이중 루프 는 몇 바이트를 절약합니다.

입력

3, "Hello world!"

산출

HfKIedb3l<-Ul%}vod"Bw\"|oa`%rH-}l/-{dMS;!B#X

2

스칼라, 95 94 바이트

def c(s:String,i:Int)=s.filter(_>32).mkString(scala.util.Random.alphanumeric.take(i).mkString)

String에서 mkString을 사용하는 것 외에 지나치게 멋진 것은 없습니다. 문자열을 문자 목록으로 취급하고 그 사이에 구분 기호를 삽입 할 수 있습니다. 내 구분 기호는 임의로 생성 된 임의의 영숫자 문자입니다.


질문에 대한 답이 아닙니다. Random.alphanumeric의지 의 특성은 각 청크가 동일하게하므로 불완전한 암호입니다 ...이 예를보십시오 :scala> c("Hello", 1) res0: String = Hbeblblbo
Jacob

BTW를 제거 할 수 있습니다 filter. mkString문자열을 호출하면 문자열을 문자 컬렉션으로 취급합니다.
Jacob

@Jacob 필터는 공백을 제거하는 가장 효율적인 방법입니다. 충분한 것처럼 보였으므로 임의의 문자를 그대로 두었지만 시간이 있으면 적절한 임의의 텍스트를 위해 별도의 기능을 추가합니다.
Ethan

2

> <> (생선) 107 106 103 바이트

<v}:{r&" "
1xv+
2<v+
v}<
<~v!?=&:&:
6.>ol2-?!;a
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o-+
^3<v ~}}r]~<
.40<

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

그것은 슈퍼 무작위가 아니지만 무작위입니다. 문자열과 정수를 스택에 놓기 만하면됩니다 (예 : "Hello world!", 5).

Input: "Hello world!", 5
Output: H^\^]^eceeedldcdeclgfffhowhhfggojkkkkrdccedl]]\]\d

전체 설명

설명을 업데이트 할 때까지 약간 오래된 버전의 코드입니다. 대부분 동일하며 읽기가 더 쉽습니다.

< v}:{r&" "
+1xv
+2<v
   }
:&:<~ v!?=&
?!;a6.>ol2-
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<

문자열 매개 변수는 is s이고 정수 매개 변수는 i입니다.

< v}:{r&" "

<주위를 감싸고 왼쪽으로 바로 이동하는 물고기, 알 " "스택에 characted 공간을 추가합니다. 그런 다음 물고기가 위로 이동 &하여 레지스터에 공간을 추가합니다. r스택을 {:}뒤집고 스택을 왼쪽으로 이동 (스택 i끝에 놓음 )하고 스택 끝에 값을 복사 한 다음 오른쪽으로 이동합니다. v물고기가 아래쪽으로 움직이기 시작합니다.

+1xv
+2<v
   }

x물고기에게 임의의 방향으로 움직이게하여 결국에는 물고기가 똑바로 가고 아래쪽으로 계속되거나 지나치 1+거나 2+미리 지나갑니다 . 스택 끝에있는 숫자에 각각 1 또는 2를 더합니다. 물고기가 위로 이동하면 v다시 쳐서 다시 내려갑니다. }스택을 오른쪽으로 이동 한 다음 스택의 i위치 1에 있고이 새 변수는 위치 0에 있습니다 (이것을 호출합니다 m).

:&:<~ v!?=&

이 부분은 함수 입니다. whitespaceTrimmer 라고하겠습니다 . 어디에서 시작됩니다 <. 공백이 아닌 문자가 될 때까지 스택의 끝 부분 (문자열의 시작 부분)에있는 공백을 제거합니다.

따라서 물고기는 즉시 수영 <을하며 왼쪽으로 이동해야합니다. 그런 다음:&:& 스택 끝의 값을 복사하고 레지스터에서 스택 끝까지의 공간을 배치 한 다음 복사 한 다음 다시 레지스터에 배치합니다.

그리고 물고기 히트 =?!v ~더 구체적으로, 또는은 =, 스택의 오프 마지막 두 값을 (두 우리가 방금 만든) 팝업을 비교, 스택의 끝 부분에 1을 배치하는 경우들이있는 거와 동일하고, 0에 스택의 끝이 다른 경우 은 ?그것이 0이 다음 명령이 경우에는 인이 실행되지 않는 경우, 적층 체의 단부로부터 떨어져서 새로운 값을 팝 !, 그 대신에 실행하는 v물고기가 하향 이동 명령 (함수 종료 참조).

그러나 1이면 공간을 찾았으므로 !어느 것이 트램폴린인지 실행하고 그로 인해 다음 명령 인을 건너 뛰어 v물고기는 계속됩니다. 물고기 앞에는 ~스택에서 마지막 값을 띄우도록 지시합니다 (공백으로 확인 됨). 물고기는 계속되고 기능을 다시 실행합니다.

?!;a6.>ol2-

물고기는 바로 오른쪽으로 수영을하라고 >한 후 출력하여 스택의 마지막 문자 o(의 첫 번째 문자 인이 처음 실행, s). 스택의 길이를에서 가져오고 스택 의 끝에 la 2를 배치 한 다음에서 -2를 뺍니다 l. 그것은 ?!;무엇을 기억하고 , 스택이 비었 ?을 때 물고기가 건너 뛰도록 하고 프로그램을 끝내는 !착륙 ;합니다.

스택에 여전히 문자가있는 경우 다음을 실행 !하여 물고기가 바운스 ;및 실행 a6.하고 a(AKA 10) 를 저장 6하고 스택의 끝에서 x, y좌표를 계산 .하여 끝에서 튀어 나옵니다. 스택 한 다음 물고기를로 순간 이동시키고 10, 6해당 위치 오른쪽에있는 명령을 실행합니다 (물고기가 올바르게 수영 할 때).

y위치 6이이 라인 아래에 있다는 것을 알면 들리는 것보다 덜 복잡합니다 . x그러면 위치 10이 v이고 오른쪽이 이며 이는 no-op입니다. 이것은 물고기가 계속 수영을하고 실제로 줄의 시작 부분에서 실행을 시작합니다 ...

:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<

문자 사이에 임의의 텍스트를 추가하는 기능입니다. 그것은 약간 한 입이지만, 그것은 조금 더 무작위로 만들려고했기 때문입니다. 이 genRandomChars 라고합시다 .

:{{:}l1-[rv실제 함수에 대한 설정 및 실제 함수 자체의 일부 덜 수 있도록한다. 물고기는 먼저 수영 :{{하여 스택 끝에있는 값을 복사 한 다음 왼쪽으로 두 번 이동합니다. i스택의 1 번 위치에 있다는 것을 기억한다면 , i이제 스택의 끝에 있다는 것을 알게 될 것 입니다.

그런 다음 물고기는 :}어떤 복사본 을 헤엄 쳐 다니면서 i스택 i의 시작과 끝에 스택을 오른쪽으로 이동시킵니다 . l1-[물고기가 스택의 끝에 길이를두고 스택에서 1을 뺀 다음 [새 스택 을 만들고 l-1(스택 길이-1) 값을 새 스택으로 옮깁니다 ( i오래된 스택을 그대로 둡니다 ). 그런 다음 물고기가 단순히 rv스택을 다시 뒤집습니다 (새 스택을 만들면 어떤 이유로 되돌릴 수 있다고 생각 <합니다). 아래 에서 기능을 시작하여 물고기가 한 번 더 아래쪽으로 수영하도록 명령합니다 .

그래서 현재 스택의 끝이 m우리의 일시적 i우리가 전화 할게있는 ti. 물고기는 즉시 수영하여 1-}1을 빼고 ti스택의 시작 부분으로 옮깁니다. 그런 다음 :}단순히 복사 m하여 스택의 시작 부분으로 옮깁니다.ti 스택 위치 1에 ).

우리가이 작은 일에 부딪쳤을 때입니다.

v2<
<1x|!
^3<

이것은 실제로 간단합니다. 이로 !인해 물고기가 건너 뛰어 |실행 x됩니다. 무엇을 기억하는지 x, 우리는 이것이 물고기를 4 방향으로 움직인다는 것을 기억합니다. |단순히 거울이며 물고기가x 합니다. 따라서 기본적으로 물고기는 스택의 끝에 1, 2 또는 3을 배치하고 계속 왼쪽으로 이동하면서 줄 바꿈합니다.

그런 다음 피쉬가 실행 *+o되어 스택의 마지막 두 값이 튀어 나와 곱한 다음 결과가 다시 푸시되고 추가와 동일한 결과가 나오고 최종 값이 스택에서 튀어 나와로 출력됩니다 o. 우리의 스택이 지금 막 들어 다시 비교적 정상이다 m, ti, s].

:}}:스택의 끝에있는 값 (기본적으로 s위치 0)을 복사 한 다음 스택을 오른쪽으로 두 번 이동 한 다음 ( ti앞면을 다시 배치 ) ti복사합니다. ?!v이해하기 쉬워야합니다. 기본적으로 ti0이면을 사용하여 함수를 종료하고 v그렇지 않으면 실행 !하고 건너 뜁니다.v (다른 루프 수행).

경우 ti약간 임의의 문자를 출력 0이고 우리가 완료, 우리는 실행 v및 참조 :

   v ~}}r]~<
.43<

여기서 너무 멋진 것은 없습니다. ti를 통해 스택에서 제거 합니다 ~. 그런 다음 ]새로운 것입니다. 스택에서 모든 값을 가져 와서 오래된 스택에 놓습니다! 우리가 역 반전 문제 때문에 r, 다음에 바로 두 번 스택을 이동 }}~우리를주고, 오른쪽으로 스택을 shufting, [ m, i, s]는이 ~중복 추가 제거하는 s[0]경우에 우리가 필요할 것 같은 기능의 대비를 우리는 루프를하고있었습니다 (그러나 우리는하지 않습니다, 우리는 종료됩니다).v아래 수영으로하는 물고기를 알려줍니다 >34.단순히 왼쪽 수영과에 물고기를 알려줍니다 (실행 순서를 보여 반전) 3, 4합니다 (때문에. 점프 !). 3, 4실제로 시작의 오른쪽에 있습니다whitespaceTrimmer우리가 왼쪽으로 여행하고 있기 때문에 완벽합니다.

이 모든 논리에 따라 스택이 완전히 비워지고 프로그램 whitespaceTrimmer이 실행 된 직후에 프로그램이 종료 될 때까지 피쉬를 따라갈 수 있습니다 .


흠 나는 캐릭터가 인쇄 가능한 것을 보지 못했다. 이것은 약간의 수정이 필요하므로 덜 무작위적이고 작게 만들 수 있습니다.
redstarcoder

실제로 훨씬 덜 무작위로 보이지는 않습니다. 나는 그것이 대부분의 경우 작동해야한다고 생각하지만 아직 실패하지 않았습니다. 대문자 또는 소문자 및 일부 기호와 함께 작동합니다. 이것이 도전 과제의 요구 사항을 충족한다고 확신합니다.
redstarcoder

2

펄 5, 81 바이트

($_,$n)=<>;chomp;y/ //d;$\=chop;print map{$_,map{chr 33+int rand 94}1..$n}split//

다음은 원 라이너의 기능을 이해하는 데 도움이되기를 바랍니다.

($_, $n) = <STDIN>;  # Reads in the string into $_,
                     # and the number into $n, from standard input.
                     # (<STDIN> works slightly different from <>.)
chomp($_);           # Removes the newline from the string.
$_ =~ tr/ //d;       # `Tr/`ansliterates ASCII space characters
                     # into nothing, effectively `/d`eleting them.
$\ = chop($_);       # Chop()s off the last character out of $_ and
                     # appends it to the output when print()ing.
                     # (Perl always prints $\ after you call print().)
print( map {         # Each element of [List 1] will be mapped to:
    $_,              #   -- Itself, and
                     # (When mapping, each element is available as $_.)
    map {            # (`map` resembles `foreach` but returns a list.)
        chr(         #   -- A random ASCII character, in the range
          33 + int(rand(94)) ) # from 33 (!, hex 21) to 126 (~, hex 7E)
    } 1..$n          # ...$n times! (Over the range 1 to $n, actually.)
} split(//, $_) );   # [List 1] is $_, split() into characters.

1

Clojure에서, 126 123 118 122 117 바이트

(defn c[m n](apply str(remove #(=\space %)(mapcat #(apply str %(for [_(range n)](char(rand-nth(range 32 127)))))m))))

메시지를 매핑하고 임의의 문자를 삽입 한 다음 결과를 연결합니다.

이 지침에서는 모든 문자열을 결과 문자열에서 제거해야한다고 제안합니다. 원본 메시지의 공백 만 제거해야한다면 변경할 수 있습니다.

언 골프 드 :

(defn cipher [message n]
  (apply str
    (remove #(= \space %)
        (mapcat #(apply str %
                     (for [_ (range n)]
                       (char (rand-nth (range 32 127)))))
                message))))

1

파이썬 3, 127 바이트

import random
a,b=input(),input()
print(''.join([x+''.join([chr(random.randint(33,126))for c in range(int(b))]) for x in a]))

아마 필요 이상으로 길지만, 이것은 지금까지 내 골프였습니다.


1
첫 번째 문자 앞에 임의의 문자가 추가되고 공백이 잘리지 않습니다. 나는이 두 가지가 규칙을 어 기고 있다고 생각합니다.
Stewie Griffin


1

파이썬 3, 133 바이트

from random import *
c=int(input())
print(''.join([i+''.join([chr(randint(33,126))for i in range(c)])for i in input().strip(' ')])[:-c])

1

Node.js, 88 바이트

(s,n)=>s.replace(/./g,c=>c!=" "?c+crypto.randomBytes(n).toString`base64`.substr(0,n):"")

출력 예 :

f("The treasure is here", 2)
// THphdwekAtMArbSeU1aDTsZWuqnr2yek1iyUsKshqXewvrVCeTi

f("The treasure is here", 2)
// TYshlcep6t4Iru7e29aQ1sl/uvQrlzeSJihysDhhOLe1urpte1m

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


1

C, 102100 바이트

-2 건너 뛰는 바이트 continue.

i;f(char*s,int n){do{while(*s==32)++s;putchar(*s);i=n;while(i--)putchar(32+rand()%95);}while(*s++);}

언 골프 드 :

i;
f(char*s,int n){
 do{
  while(*s==32)++s;
  putchar(*s);
  i=n;
  while(i--)
    putchar(32+rand()%95);
 }while(*s++);
}

용법:

main(){
  char a[]="A   A A";
  f(a,3);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.