배열을 통해 실행


13

우리는 종종 "배열을 걷다"라는 관용구를 듣고 "다음 배열에 함수를 매핑합니다"를 의미합니다. 그러나, 나는 그것을 할 필요가 (지금!), 당신이 할 수 있도록 실행 배열을.

달리는 방법

당신 뒤에 늑대 의 야생 팩이 있다고 상상해보십시오

배열을 통해 실행하는 것은 요소를 건너 뛸 수 있다는 점을 제외하고는 하나를 걷는 것과 같습니다. 예, 때로는 지저분하지만 (일반적으로) 작동합니다. "어떤 요소를 건너 뛰었습니까?"라고 물을 수 있습니다. 글쎄, 이것은 무작위로 이루어집니다. 배열을 통해 실행을 봅시다!

  1. 하자 e현재 요소 수.
  2. 하자 random에서 임의의 플로트를 생성합니다 [0,1). 인 경우 random() < 0.5다음 요소로 이동 한 다음 1 단계로 넘어갑니다. (이상적으로 건너 뛰고 남을 가능성이 동일한 경우 다른 방법으로 숫자를 생성 할 수 있습니다. 예를 들어, 두 멤버를 설정하고 결과에 따라 작업을 수행합니다.)
  3. 그렇지 않으면에 기능 f을 수행합니다 e.

객관적인

A및 number와 같은 배열 / 목록 / 문자열이 주어지면 액세스 한 각 멤버에 K추가하여 배열을 실행하십시오 K. 이 배열을 출력 / 반환합니다. A음수가 아닌 정수만 포함하고 K음이 아닌 정수만됩니다. 이것은 이므로 바이트 단위의 가장 짧은 프로그램이 승리합니다.

테스트 사례 (예)

K, A => possible K'
[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 5]
[0, 0, 0, 0], 2 => [2, 0, 0, 2]

[0,1)오식? 2 개 더 갈 것
대머리 Bantha

5
무작위 선택은 float 비교로 결정해야합니까, 아니면 무작위로 선택할 수 있습니까?
Alex A.

프로그램을 게시 할 수 있습니까 아니면 기능 일 수 있습니까? 그것은 자바에서 매우 구별 할 수있는 차이점을 만듭니다.
Bálint

1
@epicTCK 이것은 반 개방 간격, 즉 실수 x와 같은 실수를 의미 0 ≤ x < 1합니다.
Martin Ender

1
@ Bálint 두 표기법이 있습니다.
Martin Ender

답변:


3

피 이스, 7

m+*O2vz

여기 사용해보십시오

부동 소수점 비교 대신 무작위 선택을 사용하지만 구분할 수 없어야합니다.

확장:

m+*O2vz     ## implicitly, a d and Q are added to the end of the program
m+*O2vzdQ   ## Q = eval(input()), z= input()
m           ## map over each element d of Q
 +     d    ## add to d
  *O2vz     ## the product of eval(z) and a random number chosen from [0, 1]

부동 소수점 사용하기 :

m+*<.5O0vz

여기 사용해보십시오


2
부동 소수점이 부동 소수점입니다.> :(
Leaky Nun

1
@ KennyLau 변경은 사소한, 이것은 단지 골퍼였습니다. 나는 그것이 필요하다는 의미는 아니라 행동이 동일하다는 것을 생각하지 않았다. fp가 포함 된 버전을 추가하고 영업팀에 문의합니다.
FryAmTheEggman

@KennyLau 부동 소수점이없는 언어는 어떻습니까?
Ven

@FryAmTheEggman 예, 단지 예일뿐입니다. 동일한 확률이 좋습니다.
Conor O'Brien

@KennyLau OP는 부동 소수점이 필요하지 않음을 확인했습니다.
Alex A.

5

클로저, 41 37 바이트

(fn[a k](map #(+(*(rand-int 2)k)%)a))

0 또는 1을 곱하고 "if"를 삭제하여 몇 바이트를 중단했습니다. 대부분의 다른 제출자에게 크레딧!


이 경우 익명 함수로 충분하지만 좋은 대답입니다. PPCG에 오신 것을 환영합니다!
고양이

많은 시간 for보다 짧은 map, 또한 내부 익명의 기능을 갖는 그래서 대신하여 코드를 시작 피한다 : 참조를 위해 내 대답을 참조 (fn[a k]사용할 수 있습니다 #(.
NikoNyrh

4

젤리, 9 8 7 바이트

에서 87덕분에 @FryAmTheEggman .

+2X’¤¡€

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

설명

+2X’¤¡€
      €   Map over each argument...
 2X           Choose a random number from {1,2}
   ’          Minus 1
    ¤                (grammar stuff)
     ¡        Repeat that number of times...
+                 Add the second input (to the argument being mapped over).

he-double-L에서이 언어로 어떻게 키보드를 성공적으로 사용하십니까?!
MonkeyZeus

@MonkeyZeus Dennis는 리눅스에서 일반 키보드를 사용하여 입력 할 수 있다고 말했다.
Bálint

@Balint 줄거리가 두꺼워집니다. Dennis는 누구입니까? lol
MonkeyZeus

13
@MonkeyZeus Ahem.
데니스

1
@Dennis 예언이 성취되었습니다 ┗ (⊙ .⊙) ┛
MonkeyZeus

3

MATL , 11 바이트

tZy1$rEki*+

부동 소수점 난수를 사용합니다.

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

설명

t      % implicit input (array). Duplicate
Zy     % size (array specifying number of rows and columns)
1$r    % random vector between 0 and 1 with that size
Ek     % duplicate, round down: gives 0 or 1 with the same probability
i      % input (number K to be added)
*      % multiply: gives either 0 or K for each element
+      % add element-wise

1
전화에서 입력했습니다. 나중에 설명
Luis Mendo

@CatsAreFluffy :-) 완료!
Luis Mendo

3

apt, 6 바이트

®+V*Mq

그것을 테스트


설명

어레이의 묵시적 입력 U정수 V. (MAP ®의 각 요소에 추가 어레이 위에)와 V승산 Mq랜덤하게 생성하는, 0또는 1. 결과 배열의 암시 적 출력.



2

줄리아, 33 29 27 바이트

x->k->x+rand(0:1,endof(x))k

이것은 정수를 허용하고 배열을 반환하는 내부 익명 함수로 배열을 허용하는 익명 함수입니다. 호출하려면 변수에 지정하고을 호출하십시오 f(x)(k).

0과 같은 확률로 무작위로 선택된 1로 구성된 입력 배열과 길이가 같은 배열을 생성합니다. 이 값에 입력 정수를 곱하여 입력 배열에 추가합니다.

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

Dennis 덕분에 2 바이트를 절약했습니다!


2

파이썬 2, 60 58 바이트

from random import*
lambda a,k:[e+choice([0,k])for e in a]

이 프로그램은 정말 간단합니다. 명백한 " from module import*"를 제외 하고는 일반적인 기능 대신 공백을 사용하지 않고 람다를 사용하는 골프 트릭은 많지 않습니다 . 그 외에는 실제로 관용적입니다. 내가 이것을 실제로 쓰고 있다면 아마도 비슷한 방식으로 할 것입니다.

import random
def running_addition(seq, k):
    return [e + random.choice([0, k]) for e in seq]

아니면 더 멋진 것 :

import random
import operator
import functools

def run_through(seq, func):
    def random_func(arg):
        if random.randint(0, 1):
            return func(arg)
        return arg

    return [random_func(e) for e in seq]

def running_addition(seq, k):
    return run_through(seq, functools.partial(operator.add, k))

그러나 그것은 충분히 과시합니다 :)

이것은 임의성을 위해 float를 사용할 때의 오래된 60 바이트 버전입니다.

from random import*
lambda a,k:[e+k*(random()<.5)for e in a]

목록의 각 요소에 대해을 추가하십시오 k*(random()<.5). 파이썬 부울은 0과 1로 평가되므로 조건에 맞지 않는 요소에 0을 더합니다.

파이썬의 random.random()리턴은에 뜬다 [0, 1). 그래서 나는 그것에 대해 걱정할 필요가 없었다.


1
@FryAmTheEggman 부동 소수점 요구 사항이 떨어지면 알아낼 수있는 최선의 방법은 곱셈을 완전히 잊어 버리는 것입니다.e+choice([0,k])
undergroundmonorail

아 맞다, 곱셈을 피하는 좋은 방법. 그것은 부동 소수점 요구 사항이 제거되어 대신 답변을 변경할 수 있다고 말했습니다.
FryAmTheEggman

@FryAmTheEggman 오 하하, 나는 몰랐다. 감사합니다 :)
undergroundmonorail

1

자바 스크립트 (ES6), 38 바이트

solution=

a=>k=>a.map(n=>Math.random()<.5?n:n+k)

document.write("<pre>"+
[ [[1,2,3,4], 0], [[1,2,3,4], 1], [[0,0,0,0], 2], [[4,22,65,32,91,46,18], 42] ]
.map(c=>"["+c[0]+"],"+c[1]+": "+solution(c[0])(c[1])).join`\n`)


도전에 참여하고 싶습니다 ... 자바 스크립트가 작성됩니다. 진지하게, 나는 단항을 배울 것이다.
Bálint

@ Bálint 나는 단항이 임의의 수레를 생성 할 수 없다고 확신한다
undergroundmonorail

@undergroundmonorail 나는 아무도 그것을 사용하지 않기 때문에 그것을 말했다 (명확한 이유로, 그것이 너무 길어 여기에 게시 할 수없는 것처럼)
Bálint

1

PowerShell v2 +, 34 바이트

param($a,$k)$a|%{$_+$k*(random 2)}

input $a$k, 배열과 int를 각각 취합니다 . 그런 다음 배열을 반복하고 각 루프 반복은 현재 요소와 실행할 $k시간 (예 : a 또는 a )을 출력합니다. 이들은 모두 파이프 라인에 남아 있으며 배열이 암시 적으로 출력됩니다.(random 2)Get-Random -Maximum 201



1

PHP 71 바이트

function f($s,$k){foreach($s as $v){$v+=rand(0,2)==0?k:0;echo $v.",";}}

1

k (12 바이트)

{x+y*(#x)?2}

예 :

k){x+y*(#x)?2}[0 0 0 0;2]
2 2 2 0

더 일반적으로, f16 자에 대한 인수로 전달 될 수있는 위치

{@[x;&(#x)?2;y]}

예 :

k){@[x;&(#x)?2;y]}[0 0 0 0;2+]
0 0 2 0

일반 버전을 포함하여 좋습니다!
코너 O'Brien

1

파이썬 3 152 110 98 바이트

이것은 첫 번째 코드 골프 솔루션이므로 어떤 트릭도 모릅니다. 테스트 케이스와 함께 주요 기능을 사용하여 이것을 테스트했습니다. 파일 크기는이 기능뿐입니다.

from random import*
def a(x,y):
 p=0
 for z in x:
  if random()>.5:x[p]=z+y
  p+=1
 print(x)

공백 제거에 대한 조언을 주신 @ Cᴏɴᴏʀ O'Bʀɪᴇɴ에게 감사합니다. 12 바이트를 절약 한 조언에 대해 @undergroundmonorail에 대한 추가 칭찬.


1
145 바이트를 셉니다. 같은 사이 등의 불필요한 공백을 제거하여 할 수 있습니다 골프를 import *, a(x, y), x[ptr]=z+y, 등 또한 하나의 공백으로 4 공백을 대체 할 수
코너 오브라이언

3 바이트의 공백을 저장 x[ptr]=z+y하는 것과 같은 줄에 넣을 수 있습니다 if random()>0.5. 파이썬 2에서는 바이트를 절약하기 위해 0.5작성할 수 .5있지만 파이썬 3에서는 이것이 사실인지 모르겠습니다. 이름 ptr을 바꾸면 p6 바이트가 모두 절약됩니다. 또한 Windows를 사용하고 있습니까? Windows는 줄 바꿈을 2 바이트로 저장하지만 파이썬은 줄 바꿈이 1 바이트인지 2 바이트인지 신경 쓰지 않기 때문에 1로 계산하여 현재 솔루션을 103 바이트 만 만들 수 있습니다. 그건 그렇고, PPCG에 오신 것을 환영합니다 :)
undergroundmonorail

1

클로저, 32 바이트

#(for[i %](+(*(rand-int 2)%2)i))

접근 방식 rand-int보다 분명히 짧은 아이디어에 대해 David에게 감사드립니다 if(>(rand)0.5). 여기 for이길map .




0

자바, 84 바이트

int[]r(int[]A,int K){for(int i=0;i<A.length;A[i++]+=Math.random()>.5?0:K);return A;}

언 골프

int[] r(int[] A, int K) {
    for (int i = 0; 
         i < A.length; 
         A[i++] += Math.random() > .5 ? 0 : K);
    return A;
}

노트

  • 루프의 추후는 또한 신체 일 수 있으며 크기에는 차이가 없습니다.
  • 입력 배열이 수정되었지만 명령문에이 문제와 관련된 제한이 없습니다. 수정 된 배열을 "출력 / 반환"형식으로 계산할 경우을 제거하여 다른 9 바이트를 제거 할 수 return A;있습니다. 반환 유형을에서로 변경해야 int[]합니다 void. 그러나 void와 사이에 추가 공간이 필요하므로 추가 바이트를 절약하지 못합니다 r.

더 짧은 버전 (참고에 언급 된 바와 같이), 75 바이트

void r(int[]A,int K){for(int i=0;i<A.length;)A[i++]+=Math.random()>.5?0:K;}

산출

[1, 2, 3, 4], 0 => [1, 2, 3, 4]
[1, 2, 3, 4], 1 => [1, 3, 3, 4]
[1, 2, 3, 4], 2 => [3, 2, 3, 4]
[1, 2, 3, 4], 3 => [4, 5, 3, 7]
[1, 2, 3, 4], 4 => [5, 2, 3, 8]
[1, 2, 3, 4], 5 => [6, 2, 8, 9]

두 번째 버전은 유효하지 않으며 출력되거나 아무것도 반환하지 않습니다.
Bálint

1
내 게시물을 읽어주십시오 ...
Marv


0

자바 (108) 107 85 82 바이트

void f(int[]s,int k){for(int i:s)System.out.print((i+=Math.random()<.5?k:0)+";");}

@TimmyD 덕분에 14 바이트 절약


@TimmyD 규칙에 따라 출력해야합니다. 그리고 그 규칙은 내가 답을 쓸 때와 같지 않았습니다
Bálint

난 당신이 후 공간을 제거 할 수 있다고 생각 main, String[], int[], 또 다른 몇 바이트 저장 변경 nextFloat()>0.5next(1)==0.
기금 모니카의 소송

@QPaysTaxes 훨씬 짧아서 이미로 변경 new java.util.Random().nextFloat()되었습니다 Math.random().
Bálint

@TimmyD 그것을 보지 못했습니다, 감사
Bálint

현재 상태에서는 작동하지 않습니다. 메소드를 수정하지 않고 메소드 s에만 i리턴 유형이 void있지만 리턴하려고합니다 int[]. 또한 뒤에 세미콜론이 없습니다 return s.
Marv

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