고양이는 다시 입력을 먹었다!


30

입력을 받아서 인쇄하는 프로그램 인 고양이 프로그램을 만듭니다.

... 단, 프로그램은 입력에서 임의로 문자를 가져 와서 대신 인쇄합니다.

입력의 각 문자는 일반적으로 프로그램과 함께 제거 될 확률이 같아야하지만 각 문자의 확률은 최대 10 %까지 달라질 수 있습니다.

프로그램은 입력을받은 다음 입력에서 문자를 무작위로 제거한 다음 해당 버전을 다시 인쇄해야합니다. 언어에서 줄 바꿈을 인쇄해야 할 경우 후행 줄 바꿈 또는 다른 문자로 인쇄 할 수 있습니다.

입력이 BOOOWL인 경우 모든 기회를 동일한 확률로 모든 Os를 제거해서는 안됩니다. 각 문자 (고유하지 않음)를 고려해야하므로 모든 O가 1/5 확률 (예 :)을 갖는 대신 각 O는 1을 가져야합니다 / 5 기회, 그래서 대신에 거기의 1/5 기회 BWL의 1/5 기회가 있어야한다, BOWL, BOOWL.

입력이 STDIN 또는 가장 근접한 것으로 제한됩니다.

각 캐릭터 최소 10 %, 최대 30 %의 확률로 제거해야합니다.

각 캐릭터의 확률은 개별적으로 계산되어야합니다.

임의의 동작을 지원하는 언어의 모든 구성 요소를 사용할 수 있습니다 (기능 또는 다른 것).

출력은 STDOUT 또는 가장 가까운 값을 통해 이루어져야합니다. 언어에 STDOUT이 있으면 다른 방법으로 출력하지 마십시오. 언어에서 문자열을 텍스트로 출력 할 수없는 경우 가장 가까운 것을 사용하십시오 (여기서 C의 문자 배열 출력은 OK 임).

이것은 코드 골프입니다. 최단 프로그램이 이깁니다.


4
특정 캐릭터가 제거 될 확률은 항상 10 %에서 30 % 사이 여야합니까? 아니면 예제의 목적으로 만 사용됩니까?
attinat

2
"한 캐릭터 세트"란 무엇을 의미합니까? 입력이 BOWL OF SOUP모두 O한 번에 삭제 될 수 있습니까?
roblogic

1
지금까지 모든 답변은 캐릭터가 제거 될 확률이 20 %입니다. 질문의 의도가 모든 문자가 같은 확률을 갖는지 확실하지 않습니다.
Nzall

3
Output must be through STDOUT, as a text. Do not output a character array.<-문자 배열을 출력 할 수있는 언어가 있습니다 (출력 전에 평평하게됩니다). 허용되지 않습니까? 문자열이 기본적으로 문자 배열 인 C와 같은 언어는 어떻습니까?
이스마엘 미겔

1
가장 가까운 것을 사용하십시오. C의 문자 배열 문자열은 텍스트와 가장 유사하므로 괜찮습니다.
앤드류

답변:


10

Japt -f , 2 바이트

-f플래그 "는 truthy 값을 반환 것들의 배열을 출력하는 제 입력의 각 요소에 프로그램을 실행합니다." 0 (포함)과 5 (제외) 사이의 난수를 반환합니다. JavaScript와 마찬가지로 Japt에서는 0이 잘못되었습니다.

시도 해봐


2
나는 시간을 거슬러 올라가서 o가이 도전에 해당하는 언어를 만든 다음 돌아가서 내 대답을 제출하거나 빈 문자열을 만들 수 있습니다. : p
Andrew

명령 줄 플래그가 바이트 수로 계산되지 않습니까?
Daniel Vestøl

1
@ DanielVestøl -f제목 에서을 클릭하십시오 .
이스마엘 미겔


1
농담이지만 ​​괜찮
앤드류

8

파이썬 3 , 63 바이트

from random import*
for c in input():print(end=c[random()<.2:])

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

파이썬 2 , 67 65 바이트

from random import*
print''.join(c for c in input()if.8>random())

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

각 캐릭터는 20 % 확률로 꿀벌을 떨어 뜨립니다.

다른 접근 방식, 동일한 길이 :

from random import*
print''.join(c[random()<.2:]for c in input())

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


기능이있는 파이썬 2에서 63 바이트
attinat

규칙은 전체 프로그램 작성을 명시 적으로 명시합니다.Create a cat program, a.k.a a program that takes an input and prints it.
movatica

입력의 첫 줄만 읽습니다.
AKX

여러 줄을 읽어야한다고 문제가 없습니다.
movatica

8

, 4 바이트

ΦS‽⁵

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명:

 S      Input a string
Φ       Filter where nonzero
  ‽⁵    Random number 0..4
        Implicitly print

당신은에서 어떤 번호를 사용할 수 있습니다 410의 기회를 얻을 수 25%10%각각있다.


7

Befunge-98 (PyFunge) , 11 바이트

>#@~3j4???,

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

각 캐릭터는 25 % 확률로 제거됩니다. 이 결정은 세 가지 ?지침 에서 이루어집니다 .

?프로그램 카운터를 동일한 확률로 네 방향 중 하나로 설정합니다. 이 경우 위와 아래로 같은 명령으로 다시 돌아가므로 옵션으로 무시할 수 있습니다.

?s 의 숲 에는 오른쪽 (출력)과 왼쪽 (출력 없음)의 두 가지 방법이 있습니다 . 이러한 상황 때문에, 중간에서 시작하는 경우, 대칭 ?하는가 2=1/2 출력 기회. 오른쪽부터 출력하는 경우의 확률 ?이고 =1/21+1/22=/4 . 따라서 문자를 읽은 후 가장 오른쪽으로 ?이동하여 출력 여부를 결정합니다.


5

옥타브 , 23 바이트

입력과 같은 크기의 배열을 생성하고 (옥타브의 문자열은 문자 배열 임) 각 난수보다 큰지 여부를 0.2확인한 다음 논리 색인을 사용하여 해당 위치에서 문자를 추출합니다.

@(s)s(rand(size(s))>.2)

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


5

젤리 , 9 5 바이트

5X’µƇ

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

젤리 문자열을 인수로 받아서 처리 된 젤리 문자열을 반환하는 모나드. 전체 프로그램으로 사용될 경우 출력을 내재적으로 인쇄합니다. 각 캐릭터는 20 % 확률로 제거됩니다.

설명

   µƇ | Filter using the following as a monad for each character:
5X    | - Random number between 1 and 5
  ’   | - Decreased by 1

5

Japt , 3 바이트

각 캐릭터는 5 분의 1의 확률로 제거됩니다. 는 5사이에 아무것도 변경 될 수 있습니다 49, 포함, 또는 A에 대한 10확률을 변경합니다.

Æ5ö

시도 해봐

Æ5ö     :Implicit input of string
Æ       :Filter by
 5ö     :  Random integer in the range [0,5), with 0 being falsey


5

05AB1E , 5 4 바이트

ʒ₄Ω≠

@Grimy 덕분에 -1 바이트 .

온라인으로 시도 하거나 동일한 프로그램을 10 회 실행하십시오 .

각 캐릭터는 25 % 감소합니다.

설명:

ʒ     # Filter the characters of the (implicit) input-string by:
     #  Push 1000
  Ω   #  Pop and push a random digit from it
     #  And check that it's NOT 1 (!=1)
      # (after which the result is output implicitly)

_( ==0) 일 수도 있습니다 .


2
5L-1 일 수 있습니다 (기회를 20 %에서 25 %로 변경하며 여전히 허용됩니다).
그리미

@ 그림 같은 좋은 하나, 감사합니다! :)
Kevin Cruijssen

4

MATL , 9 바이트

t&n&r.2>)

설명 :

t         implicitly take input and duplicate it
 &n       compute the size of the input and...
   &r     generate a random array of that size
     .2>  check which entries of that array are greater than 0.2
        ) and use the result using logical indices to extract certain characters of the input

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


4

Pyth , 8 5 바이트

sfO4Q

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

sfO4Q   Implicit: Q=eval(input())
 f  Q   Filter characters of Q where the following is truthy:
  O4      Random number in the range [0-4)
          Any non-zero value is truthy, so this will drop characters 25% of the time
s       Concatenate into string, implicit print

이전 버전, 8 바이트 :

s*Vm!!O4

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

s*Vm!!O4QQ   Implicit: Q=eval(input())
             Trailing QQ inferred
   m    Q    Map each character in Q using:
      O4       Choose random integer in [0-4)
    !!         Logical NOT twice - maps 0 to 0, anything else to 1
             The result is a list of 0s and 1s, with 0 having 25% chance to appear
 *V      Q   Vectorised multiplication of the above with Q
s            Concatenate into string, implicit print

Q입력이 python-esque가 아닌 경우 오류가 발생합니다. 예를 들어 [1또는 에서 발생한 오류 a/b. Q, wz단일 라인 입력 만 작업하기 때문에 최선의 선택은 아마도 것 것j.z
ar4093

4

Cubix , 20 바이트

u$w\A|UDw@?;...>o._U

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

제거 할 수없는 수많은 노프가 있었기 때문에 기대했던 것보다 길었습니다. 캐릭터를 떨어 뜨릴 확률은 25 %입니다. 나는 이것이 괜찮다고 가정합니다.

    u $
    w \
A | U D w @ ? ;
. . . > o . _ U
    . .
    . .

달려 봐

간단한 설명 :

  • A|A 스택을 초기화합니다. 모두 입력, 다시 반영, 모두 입력 (EOI -1)
  • ;? 스택으로 팝하고 EOI를 테스트합니다 (-1).
  • _?@ 음수 인 경우 테스트에 다시 반영하고 중단
  • $D\임의 방향 설정기로 옮깁니다.
    • 방향 설정 기에서 3 방향은 ofor 출력 으로 이어지고 다시 루프로 들어 o갑니다. 경로에서 누락 되고 루프로 곧장갑니다.

3

APL (dzaima / APL) , 10 9 바이트 SBCS

익명의 암묵적 접두사 기능. 각 캐릭터는 정확히 20 %의 확률로 제거됩니다.

⊢⌿⍨4≥∘?5¨

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

 각 문자마다 0

? 각 문자에 대해 임의의 정수 범위 1–5

4≥ 4 이하의 정수에 대한 부울 마스크

⊢⌿⍨ 해당 마스크를 사용하여 인수를 필터링


3

망막 , 15 바이트

/./_?(`.







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

/./_

각 캐릭터를 개별적으로 처리하십시오.

?(`

무작위로 대체를 수행하십시오. 첫 번째 대체 문자는 문자를 삭제하고 다른 세 문자는 변경하지 않고 25%문자를 삭제할 수 있습니다. 줄 바꿈을 추가하여 필요에 따라 줄일 수 있습니다.


3

R , 32 23 바이트

function(x)x[rt(x,3)<1]

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

문자형 벡터를 입력으로 받아서 처리 된 문자형 벡터를 반환하는 함수입니다. 각 캐릭터는 20 % 확률로 제거됩니다.

7 바이트를 절약하는 데 도움을 준 @Roland와 @Giueseppe에게 감사 드리며, @JDL에 2 개 더 감사합니다!


1
function(x)x[!rbinom(x,1,0.2)]
롤랜드

@Roland와 같은 줄을 따라 function(x)x[rf(x,1,1)>1]; df(1,1,1)에 관한 0.16트릭을 수행한다.
주세페

또는 rt(x,3)>1(약 20 % 확률)
JDL

2
@ JDL <1이지만 감사합니다! 다른 2 명이 저장되었습니다.
Nick Kennedy

3

T-SQL 2012, 83 바이트

0에서 1 문자를 제거하여 오른쪽에서 왼쪽으로 입력을 반복합니다.

각 캐릭터가 제거 될 확률 25 %

DECLARE @i varchar(max)='The cat ate my homework'

DECLARE @ int=len(@i)WHILE @>0SELECT
@i=stuff(@i,@,str(rand()*2)/2,''),@-=1PRINT @i

설명:

rand()*2stuff명령 에서 사용할 수없는 float를 반환합니다 .

str가장 가까운 정수로 반올림 한 후 VARCHAR로 변환합니다. float는 varchar ( stuff둘 중 세 번째 매개 변수로 허용되지 않음)로 변환됩니다 .

이 varchar는 25 % 확률로 '2', 50 % 확률로 '1', 25 % 확률로 '0'입니다. 2로 나누면 25 %의 확률로 결과는 1입니다.이 나누기는 varchar를 정수로 변환합니다.

정수는 stuff함수 에서 예상되는 세 번째 매개 변수입니다 .

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


와 함께 아주 좋은 트릭 STR, 나는 그것을 기억해야합니다. DECLARE(계산 된) 코드에서 (계산되지 않은) 피기 백을하는 것이 불공평 합니다. 그러나이를 변경하면 1 바이트 만 필요합니다.SETDECLARE @ INT=len(@i)
BradC

@BradC 나는 동의한다. 그리고 나는 미래에 피기 백하지 않기 위해 노력할 것이다
t-clausen.dk

2

J , 10 바이트

#~5>6?@$~#

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

Adam의 APL 답변과 비슷하지만 실제로는 그의 답변을보기 전에 썼습니다.

  • 6.. $~ #입력의 길이를 가지고 #와 모양 $~이 긴리스트로 숫자 6을.
  • ?@이 목록에있는 각 6 개를 주사위로 취급하고 굴 ?립니다.
  • >5다이가 5보다 작습니까 (가능한 값은 0.5입니다)? 이 부울 결과를 사용하여 비트 마스크를 만듭니다.
  • #~ 해당 마스크로 입력을 필터링하십시오.


2

자바 스크립트,  46   44  51 바이트

i=>alert([...i].filter(c=>Math.random()>.2).join``)

추가 된 STDOUT 요구 사항으로 인해 +7 바이트

Birjolaxew에게 -2 바이트 감사합니다


원래 답변 : STDOUT 요구 사항이없는 44 바이트

i=>[...i].filter(c=>Math.random()>.2).join``

함수 이름을 사용하지 않기 때문에 함수 자체 만 제공하면됩니다 . 제거 f=하면 44 바이트까지 줄어 듭니다. 또한 배열로 입력 / 출력 할 수 있으므로 상당히 절약 할 수 있습니다.
Birjolaxew

@Birjolaxew 확실하지 않지만, 이해할 수 있듯이 질문에 언어에 문자열이 있으면 char 배열을 사용할 수 없습니다
jonatjano

예, Andrew는 내 의견에 이어 추가 요구 사항으로 질문을 편집했습니다. 이것은 이전에 유효했던 답변을 무효화하기 때문에 일반적으로 눈살을 찌푸립니다 (이 경우 초기 답변이 "STDOUT을 통해 출력되어야 함"요구 사항에 맞는지 여부도 논란의 여지가 있습니다).
Birjolaxew

무슨 join``뜻입니까? (난 정말 그것이 무엇인지 알 수없는 원인) 사양에서 찾을 수 없습니다
닉 zoum

1
es6의 @nickzoum은 다음과 같습니다.join("") mdn revelent page
jonatjano

2

스칼라 , 51 46 30 바이트

s=>s.flatMap(x=>if(math.random>.2)Some(x)else None)

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

추신. 다른 많은 솔루션과 마찬가지로 숯을 떨어 뜨릴 확률은 20 %입니다.

최신 정보:

flatMap에서 Option [String] 대신 String을 사용하여 -5 바이트

s=>s.flatMap(x=>if(math.random>.2)x+""else "")

필터를 사용하여 30 바이트

s=>s.filter(x=>math.random>.2)

1
및 로 변경 scala.math.random하여 7 바이트를 줄일 수 있습니다 . ^를 사용하는 좋은 트릭. math.random0.2.2
Kjetil S.

@KjetilS, 감사합니다. 또한 솔루션 정의 기능 정의 대신 함수 리터럴을 게시했습니다. :이 이에 따라 수용 codegolf.stackexchange.com/questions/3885/...
박사 Y 윗

2

C # (Visual C # 대화식 컴파일러) , 71 바이트

var y=new Random();foreach(var k in ReadLine())if(y.Next(5)<4)Write(k);

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


<1이 너무 많이 먹고 있다고 생각합니다. <3 또는 <4는 문제의 매개 변수와 일치 할 수 있습니다. 어쨌든 이것은 코드 길이를 변경하지 않습니다.
루카

한동안 C #으로 프로그래밍하지 않았지만 왜 new Random().Next(5)직접 할 수 없습니까?
Kevin Cruijssen

1
@KevinCruijssen 따라서 각 번호에 동일한 시드가 사용되므로 각 번호는 동일합니다. 그냥 시도해보십시오 new Random().Next(5). 전체 입력 또는 아무것도 아닙니다.
무지의 구현

1
@KevinCruijssen 사용시 new Random()기본 시드 값은 Environment.TickCount이며 밀리 초마다 증가합니다. 모두 동일한 밀리 초 눈금으로 생성되면 모두 동일한 시드를 갖습니다. 대답은 Random의 단일 인스턴스 만 사용하고 호출 될 때 내부 시드 값을 업데이트하므로 Next ()가 호출 될 때마다 다른 출력 값이 생성됩니다. 닷넷 코어 그러나 그것은이 문제가되지 않도록, 씨앗을 생성하기 위해 싱글 RNG를 사용
자크 Faragher

1
@BenjaminUrquhart 고정되었지만 26 바이트가 추가되었습니다. 또한 입력은 from이어야한다고 말하지는 STDIN않지만 restricted to STDIN or closest equivalent함수 인수는 가장 비슷할 수도 있지만 그렇게하지는 않을 것입니다.
무지의 구현


1

C (gcc) , 50 바이트

이 프로그램은 20 %의 확률로 편지를 떨어 뜨립니다. 불행히도 난수 생성기는 시드되지 않으므로 각 실행에서 동일한 시퀀스를 얻습니다. 기본적으로 유일한 트릭은 입력 문자를 뒤집어 EOF의 루프를 정지시키는 것입니다.

main(c){for(;c=~getchar();rand()%5&&putchar(~c));}

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

C (gcc) , 64 59 바이트

-5 바이트에 대한 ceilingcat 덕분입니다.

각 실행에 RNG를 시드하려면.

main(c){for(srand(&c);c=~getchar();rand()%5&&putchar(~c));}

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


main()Code Golf 제출에는 사용할 필요가 없으며 필요한 기능을 수행하는 임의의 함수를 정의 할 수도 있습니다. 그래서 당신은 쓸 수 있습니다 f(c){...}.
G. Sliepen


1

자바

비 종료 : 82 바이트

v->{for(int i;;i=System.in.read(),System.out.print(Math.random()<.2?"":(char)i));}

종료 (TIO) : 105 바이트

v->{var n=System.in;for(int i;n.available()>0;i=n.read(),System.out.print(Math.random()<.2?"":(char)i));}

표준 출력을 다루는 것이 정말로 필요한가? 다른 답변은 문자열을 변환하는 함수 만 만듭니다. Java에 불공평 한 것 같습니다. 경우 이 C #을 솔루션이 유효하고 s->s.filter(c->Math.random()<.2)도있다.
Holger

@Holger Input is restricted to STDIN or closest equivalent.그리고 Output must be through STDOUT or the closest equivalent. If your language does have STDOUT, do not output in any other way.아니오, 그 대답은 유효하지 않습니다
Benjamin Urquhart

1

Zsh , 53 41 바이트

GammaFunction 덕분에 -12

41 바이트 : 온라인으로 사용해보십시오!

입력을 문자 배열로 변환 한 다음 c, ((RANDOM%4))평가에서 false로 먹지 않는 한 각 요소를 인쇄하려고 시도합니다 !

for c (${(s::)1})((RANDOM%4))&&echo $c\\c

53 바이트 : 온라인으로 사용해보십시오!

문자열 길이보다 더 간단하지만 자세한 반복입니다.

for ((;i<$#1;i++)){((RANDOM%4>0))&&echo "${1[i]}\c";}

1
의 똑똑한 사용 \c, 나는 그것을 기억하지 못했을 것입니다! 아직 몇 가지 최적화가 이루어지고 있습니다 .
GammaFunction

RANDOM
훌륭하고

1

Zsh , 50 바이트

for c (${(s::)"$(<&0)"})
((RANDOM%5))&&echo -nE $c

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

RobLogic의 답변과 비슷하지만 입력 요구 사항을 더 가깝게 따르고 백 슬래시가있는 입력에 작동합니다.

"$(<&0)"대신 "<&0"또는 $(<&0)첫 번째는 대체에서 작동하지 않으며 두 번째는 개행을 먹는다. -nE플래그는 이스케이프 시퀀스로서 해석되는 백 슬래시 방지하고, 개행 문자가 삽입되는 것을 방지 할 필요가있다.

echo -nE


1

MathGolf , 5 바이트

æƒ√∞*

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

설명

æ       foreach character...
 ƒ      random float in range [0,1)
  √     take square root (making P(x < 0.5) = 0.25)
   ∞    pop a, push 2*a
    *   repeat character int(x) times

임의의 값에 따라 각 문자는 0 번 또는 1 번 반복됩니다. 제곱근 이후의 예상 값이 이동하므로 각 문자가 제거 될 확률은 25 %입니다.

대체 5 바이트

gÉ;4w

[0, 4]에서 임의의 숫자로 문자를 필터링하십시오. 필터링 작동 방식으로 인해 필터 루프 내에서 실제 문자를 버려야하므로 1 바이트가 추가됩니다.


0

GFortran , 120 바이트

우리 RAN()의사 난수 인 더 이상 사용되지 않는 함수를 사용하면 나쁘지 않습니다 . 즉 매번 같은 시퀀스를 얻습니다. GFortran에서 난수를 생성하는 적절한 방법은 함께 CALL RANDOM_SEED()하고 CALL RANDOM_NUMBER(R)있지만 바이트의 많은입니다!

character(99)S;read(*,'(A)')S;do i=1,len_trim(S)
if(ran(0)*5.gt.1)then;write(*,'(A)',advance="no")S(i:i)
endif;enddo;end

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


1
임의 동작을 취해야하는 가장 가까운 방법 인 경우 의사 임의성이 허용됩니다.
앤드류

0

Oracle SQL, 133 바이트

select listagg(decode(sign(dbms_random.value-0.2),1,substr(x,level,1)))within group(order by level)from t connect by level<=length(x)

입력 데이터가 테이블 t (x)에 저장되어 있다고 가정합니다.

with t(x) as (select 'The cat ate my homework' from dual)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.