이 고양이는 버그가 있습니까? 정말?


11

도전:

ASCII 범위 내에서 입력을 읽고 약간 수정하여 출력합니다.

  1. 입력의 각 10 자 세트에서 무작위로 (50/50) :
    • 하나 개의 문자를 대체 * (가시 ASCII 범위 내에서 임의의 ** 하나) (예. lumberjack이됩니다 lumbeZjack)
    • 또는 하나 개의 문자를 제거 (예.이 lumberjack됩니다 lmberjack)

* 세트가 10 자 미만인 경우 수정할 필요는 없지만 변경할 수는 있습니다.
** 문자는 여전히 임의의 입력 인 한 입력과 동일 할 수 있습니다.

예:

입력 : Go home cat! You're drunk!
출력 : Go hom cat! YouLre drunk!
(예를 들어, 출력이 무작위 일 수 있으므로 테스트 사례로 사용하지 마십시오)

규칙 :


5
@ n4melyh4xor 또는 샌드 박스 에 향후 과제를 게시 할 수도 있습니다 . 거기서 당신은 당신의 도전에 대한 의견을 얻을 것입니다.
Rod

1
교체 문자가 교체 할 문자와 동일한 경우 어떻게합니까?
Brad Gilbert b2gills

@ BradGilbertb2gills, 나는 까다 롭지 않다. 괜찮아.
n4melyh4xor 2017


교체 할 캐릭터의 인덱스가 무작위 여야합니까?
Yytsi

답변:


4

Pyth, 27 25 바이트

VczTpXNOT?<JOr\ \ÞKC127JK

여기에서 테스트 스위트를 사용할 수 있습니다.

2 바이트를 면도 해 준 Maltysen 에게 감사 합니다.

설명

VczTpXNOT?<JOr\ \ÞKC127JK    z autoinitalizes to input, T autoinitializes to 10 
 czT                         chop input into strings of length 10, returned as list of strings
V                            for each string N in this list:
            Or\ \Þ            randomly pick a char between ' ' (32) and 'Þ' (222)
           J                  and assign it to variable J
                  KC127       assign the DEL char to variable K
         ?<J      K           if J < K:
     XNOT              J       replace a random character in N with J
         ?<J      K           else:
     XNOT               K      replace a random character in N with K
    p                         print this string with no trailing newline

종종 그렇듯이, 나는 이것이 약간 순진한 방법이며 개선 될 수 있다고 생각합니다. 일반적으로 설명을 입력하는 동안 분명한 것이 있지만 이번에는 아무것도 나지 않았습니다.


1
삭제 문자를 잘 사용합니다! 하나의 팁은 범위가 문자열도 운영하고 있다는 것입니다
Maltysen

@Maltysen 감사합니다! 나는 당신의 의견에 대해 생각했지만 공간을 절약하기 위해 그것을 사용할 수있는 곳을 완전히 확신하지 못합니다. OC\¾은 바이트 수와 동일 O190하며 삭제 문자에 K를 할당해도 공간이 절약되지 않습니다.
Mike Bufardeci

@ Maltysen 그래서 조금 걸렸지 만 당신이 의미하는 것을 깨달았고 2 바이트를 깎았습니다. 다시 감사합니다!
Mike Bufardeci

3

*> <> , 44 46 52 50 바이트

rl5(?voooo/!|Ou+1Ox:@=?~o~oooo!
ol5(?v" ":/
o;!?l<

여기 사용해보십시오!

이것은 임의의 문자에 대해 공간 근처 / 위의 모든 ASCII 문자를 사용합니다. 문자열의 끝이 아니고 문자열 길이가 10의 배수가 아닌 한, 항상 6 번째 문자를 편집합니다. 6 번째 문자를 편집하는 대신 7 번째 문자를 제거 할 확률이 50 %입니다.

입력

부동 소수점 산술에 대한 IEEE 표준 (IEEE 754)은 1985 년 IEEE (Institute of Electrical and Electronics Engineers)에 의해 설정된 부동 소수점 계산에 대한 기술 표준입니다. 이 표준은 다양한 부동 소수점 구현에서 발견 된 많은 문제를 해결하여 안정적으로 휴대하기가 어려웠습니다. 많은 하드웨어 부동 소수점 장치가 이제 IEEE 754 표준을 사용합니다.

산출

Float $ ng-Point 산술에 대한 IEE 표준 (EEE 754) 및 기술 표준! 1985 년 전기 및 전기 공학 협회 (IEE %)의 연구소에 의해 설립 된 플로팅 포인트! st! ndard add! essed 남자! 그는 다이버에서 발견! 플로팅 된 연고 임플란트 "는 화를 내기 어렵고 포트 번호도 다릅니다. 많은 하드웨어를 지원하는 장치가 IEEE IEEE 754"표준을 사용합니다.

편집 : 이 답변은 항상 보이는 아스키 범위에 있지는 않습니다 .

Edit2 : 캐릭터를 제거하고 다시 편집 할 수있는 50/50의 기회가 필요하다는 것을 보지 못했습니다 ... 나는 모든 것이 지금 순서대로 있다고 생각합니다 :).


한 가지 더, 누군가 무작위 문자를 제안했기 때문에 이제 무작위입니다.
n4melyh4xor

@ n4melyh4xor, 그게 나야! 무작위입니다 :).
redstarcoder

2

펄 6 ,  78  67 바이트

{[~] map {~S/.**{(^.chars).pick}<(./{(' '..'~').pick x Bool.pick}/},.comb(10)}
{[~] .comb(10)».&{~S/.**{10.rand}<(./{(' '..'~').pick x 2.rand}/}}

시도 해봐

설명:

{
  [~]                  # reduce with string concatenation operator

  .comb(10)\           # take input and break it into chunks of up-to 10 chars

  ».\                 # on each of them call the following

  &{
    ~                  # Stringify the following

    S/                 # substituted
      .                # any char
        **             # repeated
           { 10.rand } # a random number of times

      <(               # ignore all of that

      .                # the char to be removed/replaced
    /{

      ( ' ' .. '~' ).pick  # choose a character
      x                    # string repeated
      2.rand               # zero or one times

    }/

  }
}


2

파이썬 3 , 75 바이트

75 바이트는 각 그룹의 첫 번째 문자에 변환을 적용 하고 젤리 응답 (OP 허용) 과 같이 2 개의 임의 문자 만 선택합니다 .

from random import*
f=lambda s:s and choice(['','a','b'])+s[1:10]+f(s[10:])

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

이 함수는 모든 반복에서 아무것도 'a', 또는 앞에 붙지 않고 'b'처음 10자를 잘라서 호출 하는 재귀 함수입니다 . s and무한 반복을 피하면서 (빈 문자열이 거짓 인) 최종 반복 단락 .

모든 개별 호출의 결과는 연결되고 함수를 호출 한 컨텍스트로 리턴됩니다.

120 바이트

물론, 그것은 속임수처럼 느껴지므로 여기에 완전히 무작위 인 것이 있습니다 :

from random import*;r=randint
def f(S):a=S[:10];R=r(0,len(a)-1);print(end=a[:R]+chr(r(32,126))*r(0,1)+a[R+1:]);f(S[10:])

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


OP는 대체 문자의 색인이 0 일 수 있다고 언급 한 곳은 어디입니까?
Yytsi

@ TuukkaX는 의견을 어지럽히 지 않기 위해 제거되었지만 젤리 답변 이 그랬습니다. OP는 괜찮 았습니다 .
FlipTack

1

젤리 , 15 14  13 바이트 13 자

2X
s⁵µ¢1¦ṫ¢µ€

TryItOnline!

이러한 청크가있는 경우 마지막 1-9의 문자를 포함하여 10 개의 문자 중 첫 번째 문자를 바꾸거나 제거합니다. 문자의 작은 부분 집합 중에서 선택합니다 : 1; 2.

어떻게?

2X         - Link 1, flip a coin: no arguments
 X         - random choice from
2          - 2 (treated as the integers [1,2])

s⁵µ¢1¦ṫ¢µ€ - Main link: string of printable ASCII
s⁵         - split (s) into chunks of size ten (⁵)
  µ     µ  - monadic chain separation 
         € - for each chunk
   ¢       -     last link as a nilad
    1¦     -     apply to index 1 (replace 1st of the 10 char chunk with the chosen integer)
       ¢   -     last link as a nilad
      ṫ    - tail - if it was 1 this has no effect (50%)
                  - if it was 2 this discards the replaced character (50%)
           - implicit print

인쇄 가능한 ASCII의 모든 아니라 단지에 비해 선택할 수있는 12(아직 교체 또는 각 청크의 첫 번째 문자 제거) 21 바이트를 :

s⁵µ32r126¤ỌX¤1¦ṫ2X¤µ€

A의 완전 임의 버전 I 30 바이트 (아마도 최적이 아닌)가 (50/50 제거는 /, 균일 한 랜덤 인쇄 가능한 ASCII, 및 각 청크 내에서 균일하게 임의의 문자 위치를 대체)

95R+31ỌX;

s⁵µṙ⁵X¤©Ṗ2X¤Ŀṙ®C¤µ€

이렇게하면 각 청크가 임의의 양만큼 왼쪽으로 회전하고 마지막 문자가 튀어 나온 다음 처음 두 링크 중 하나가 비어 있고 다른 하나는 인쇄 가능한 임의의 ASCII 문자와 연결됩니다. 그런 다음 청크를 다시 회전시킵니다.


이것은 실제로 게시물의 정신에
위배됩니다

@ Maltysen-OP는이 모든 것이 괜찮다고 말했습니다.
Jonathan Allan

어디? 의견이나 OP에 아무것도 표시되지 않습니다.
Maltysen

@ Maltysen 그들은 지워졌습니다.
Jonathan Allan

1
우리가 2 자 중에서 선택할 수 있고 질문 본문에 넣기를 원하지 않는다는 의견이 명시 적으로있었습니다.
Jonathan Allan

1

Python3, 188 개 186 184 114 문자

from random import*
s=input()
for c in[s[i:i+10]for i in range(0,len(s),10)]:print(end=choice(["","x","y"])+c[1:])

너무 긴 것 같습니다. 람다로 많이 단축 될 수 있습니다.

분명히 OP는 두 문자 목록에서 임의의 문자를 선택할 수있게했으며 교체 할 문자의 색인은 상수 일 수 있습니다. 수정 후 내 대답은 @FlipTacks Python 제출 과 정확히 동일하게 보였으 므로 이것이 내가 머무르는 형식입니다.

@FlipTack이 5 바이트를 절약했습니다!


0

Clojure의, 135 139 바이트

편집 : partition-all대신 사용 하는 것을 잊었습니다 partition.

(fn[i](apply str(flatten(map #(let[r rand-int [b e](split-at(r 9)%)][b(if(<(rand)0.5)""(char(+(r 25)97)))(rest e)])(partition-all 10 i)))))

언 골프 드 :

(def f (fn[i]
         (->> i
              (partition-all 10)
              (map #(let [[begin end] (split-at (rand-int 9) %)]
                      [begin (if (< 0.5 (rand)) "" (char (+(rand-int 25)97))) (rest end)]))
              flatten
              (apply str))))

함수 이름은 길다. 어쨌든, 입력을 10 문자의 파티션으로 나누고, 임의의 지점에서 두 개의 반쪽으로 나누고, 빈 문자열이나 무작위 문자를 무작위로 삽입하고 후반의 첫 번째 문자를 버립니다.


0

Mathematica 133 바이트 (129 자)

StringReplacePart[#,Table[If[(r=RandomInteger)[]<1,"",FromCharacterCode@r@128],c=⌊StringLength@#/10⌋],Array[{g=10#-9+r@9,g}&,c]]&

8 개의 기능 이름을 쓸 수있는 76 자 : /

은 Using ⌊..⌋대신하여 Floor[]5 자, 1 바이트를 저장합니다.


0

파이썬 3, 129 바이트

def f(s):f=id(s)%9+1;print(''.join(j[0:f-1]+chr(33+id(s)%94)*(id(s)//10%2)+j[f:]for j in [s[i:i+10]for i in range(0,len(s),10)]))

파이썬의 임의 모듈을 가져 오는 대신 바이트를 절약하기 위해 문자열 ID에 대해 모듈로 연산을 수행했습니다. 매번 달라야합니다. 예를 들어 프로그램은 문자를 제거할지 또는 id(string)//10짝수 인지에 따라 문자를 바꿀지 여부를 결정합니다 (마지막 숫자는 항상 10이므로 정수를 10으로 나눕니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.