이상한 기능


45

여기서 당신의 임무 는 양의 정수에 대한 순열을 형성 하는 함수 1 을 구현하는 것입니다 (양의 정수에서 자신으로의 궤적). 즉, 각 양의 정수는 순열에서 정확히 한 번만 나타나야합니다. catch는 함수가 짝수보다 홀수를 출력 할 확률이 더 커야한다는 것입니다.

이제 이것은 이상하거나 불가능 해 보일 수 있습니다. 반드시 짝수만큼 홀수가 있습니까? 그리고이 직관은 유한 세트에는 정확하지만 실제로는 무한 세트에는 적용되지 않습니다. 예를 들어 다음 순열을 사용하십시오.

1 3 2 5 7 4 9 11 6 13 15 8 17 19 10 21 23 12 25 27 14 29 31 16 33 35 18 37 39 20 41 43 22 45 47 24 49 51 26 53 55 ...

크기가 보다 큰 시퀀스의 하위 섹션을 선택하면 적어도 짝수만큼 홀수를 가지므로 임의 항이 홀수 일 확률이 짝수보다 큰 것 같습니다. 또한 모든 숫자 홀수 또는 짝수는 결국 순서대로 나타나며 한 번만 나타날 수 있습니다. 따라서 시퀀스는 순열입니다.1

확률의 정의

혼동이나 모호함을 피하기 위해이 질문에서 확률이 의미하는 바를 명확하게 설명하겠습니다.

함수 가 있다고합시다 . 다수의 확률은 홀수 세트의 크기에 설정된 비율 홀수 부재의 한계로서 정의된다되는 로서 무한대에 가까워 쉽다.ff{1n}n

limn|{x:x{1n},odd(f(x))}|n

예를 들어, 전술 한 함수는 2/3 홀수 일 확률이있다 .


이것은 이므로 바이트 수가 적을수록 답이 바이트로 표시됩니다.


추가 도전

여기에 놀면서 구현하려는 재미있는 아이디어가 있습니다. 이들은 단지 재미를위한 것이며 어떤 식 으로든 점수에 영향을 미치지 않습니다. 이 중 일부는이 과제에 대한 올바른 해결책이 아니며, 과제 2 또는 3에 대한 해결책 만 포함 된 답변은 올바른 답변이 아니며 삭제 될 수 있습니다 .

  • 홀수 확률이 1 순열을 씁니다 . (이것은 가능하다)

  • 심지어 숫자 이상의 홀수 가지는 순열 쓰기 임의의 대 하지만의 홀수 갖는 확률 .f{1n}n1/2

  • 정의 된 확률이없는 순열을 작성하십시오 (즉, 제한이 없음).


1 : 여기서 기능은 프로그램 또는 기능을 의미합니다. 입력을 받고 출력을 생성하는 코드 일뿐입니다.

답변:


22

젤리 , 7 바이트

Æf^<¥4P

스왑 2 s와 3 개 입력의 소인수 분해에의. 승산의 확률은 2/3 입니다.

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

작동 원리

Æf^<¥4P  Main link. Argument: n

Æf       Compute all prime factors of n, with duplicates.
    ¥4   Combine the two links to the left into a dyadic chain and call it with
         right argument 4.
   <       Compare each prime factor with 4. Yields 1 for 2 and 3, 0 otherwise.
  ^        Bitwise XOR the results with the corresponding prime factors.
         This maps 2 to 3, 3 to 2, and all other primes to themselves.
      P  Take the product of the resulting primes.

이 답변은 매우 영리합니다. 나는 그것이 왜 효과가 있는지 이해한다고 생각하지만 처음에는 직관적이지 않다는 이유로 그것이 효과가 있다는 증거를 포함하고 싶을 수도 있습니다.
밀 마법사

6
이것이 순열임을 증명합니다 : 함수는 그 역수입니다. 비율 증명 : 출력이 홀수 일 확률은 원본에 요인 3이 없을 확률입니다. 이는 3으로 나눌 수없는 정확한 시점입니다. 그 기회는 2/3입니다.
tomsmeding

15

껍질 , 11 10 바이트

Leo 덕분에 -1 바이트, 약간 다른 기능

이 확률은 1

!uΣz:NCNİ1

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

시퀀스를 색인화합니다.

[1,2,3,5,7,9,11,4,13,15,17,19,21,23,25,27,29,6,31,33]
1 odd, 1 even, 5 odd, 1 even, 9 odd, 1 even, 13 odd...

설명

!               Index the following sequence (1-indexed)
 u              remove duplicates                     [1,2,3,5,7,9,11,4,13,15...]
  Σ              Concatenate                          [1,1,2,3,5,3,7,9,11,4,13..]
   z:            Zipwith append                       [[1,1],[2,3,5],[3,7,9,11]..
     N          Natural numbers
      CNİ1      Odd numbers cut into lists of lengths [[1],[3,5],[7,9,11]...]
                corresponding to the Natural numbers

1
기능을 설명해 주시겠습니까?
밀 마법사



8

껍질 , 8 바이트

!uΣzeİ1N

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

예제 시퀀스 ( 1,3,2,5,7,4...)를 구현합니다 .

설명

!uΣzeİ1N
   ze       zip together
     İ1       the odd numbers
       N      with the natural (positive) numbers
  Σ         flatten the resulting list
 u          remove duplicates
!           index into the obtained sequence with the input

7

모두가 도전 1을 수행하므로 다른 두 가지를 수행합시다.

Perl 6 , 26 바이트 — Challenge 2

{($_==1)+$_-(-1)**($_%%2)}

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

그것은 단지 1 3 2 5 4 7 6...짝수의 용어에서 짝수보다 항상 2 개의 홀수가 더 있습니다. 홀수로 1 개 더. 그러나 이것은 분명히 한계가 (n+2)/(2n+2) -> ½있습니다.


펄 6 , 70 바이트 — 챌린지 3

{((1,),(2,4),->@a,@ {@(map(@a[*-1]+2*(*+1),^(4*@a)))}...*).flat[$_-1]}

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

분명히, 이것은 끔찍한 골프입니다. 2⁰ 홀수, 2¹ 짝수, 2² 홀수, 2³ 짝수 등을 포함하는 시퀀스를 인덱싱합니다.

n이 홀수 인 경우, 이러한 "블록"n 이후의 확률은 (2⁰ + 2² + 2⁴ + ... + 2ⁿ⁻¹) / (2ⁿ-1)입니다. 분자의 합은 ⅓ (4 ½ (n + 1) -1) = ⅓ (2 n + 1-1 )와 같습니다. 따라서 홀수 블록 이후의 확률은 ⅔ (한계)입니다.

그러나 블록을 하나 더 추가하고 (짝수 n + 1을 치는 경우) 홀수를 추가하지 않았지만 (숫자는 동일하게 유지됨) 현재 총 (2 n + 1-1) 개의 숫자가 있습니다. . 괄호는 취소되고 ⅓의 확률을 얻습니다 (한도).

여기에는 한계가 존재하지 않도록하기 위해 ⅓ 및 ⅔의 두 개의 다른 클러스터 지점이 있어야하지만 실제로이를 증명하지는 않습니다. 이 Math.SE 답변 : https://math.stackexchange.com/a/2416990/174637 에서 견고하고 엄격한 증거를 찾으려고 시도했습니다 . 배신 실수는 환영합니다.


Perl 6 , 39 bytes — 핵심 과제입니다.

{my$l=$_ div 3;$_%3??2*($_-$l)-1!!2*$l}

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

유쾌한 작은 수학 퍼즐을 제공 한 도전 과제 2와 3으로 인해이 답변을 게시했지만 핵심 답변에 대한 솔루션을 포함 해야하는 모든 답변에 대한 엄격한 요구 사항이 있습니다. 여기 있습니다.

이것은 예제 시퀀스입니다.


2
이것은 추가적인 도전입니다. 이것이 올바른 답변이 되려면 핵심 과제에 대한 솔루션을 제공해야합니다. 도전 1에 대한 솔루션은 핵심 도전에 대한 솔루션이지만 도전 2 또는 3에 대한 솔루션은 아닙니다.
피터 테일러

1
글쎄, 추가 과제는 나 에게이 질문에서 흥미로운 것입니다. 핵심 도전은 아닙니다. 그러나 어쨌든 몇 가지 해결책을 추가했습니다.
Ramillies

: 나는 도전 3 응답이 Math.SE 질문에 제한이 없다는 증명을 요구 math.stackexchange.com/questions/2416053/...
케빈 - 분석 재개 모니카

@Kevin, 부탁해 주셔서 감사합니다. 난 당신을 혼란스럽게 생각합니다. 나는 그것이 OK라고 확신했다. 유일한 것은 마음의 평화를 위해서만 종종 나 자신을 위해 아주 엄격하게 증명한다는 것입니다. 그게 내가 말하고 싶은 전부입니다.
Ramillies

1
@Kevin — 결국, 나는 게으름을 극복하고 (영웅적인 행동!) 증거를 만들었습니다. Math.SE 질문에 대한 답변으로 게시했습니다. 잘만되면 괜찮습니다 (밤에 이런 종류의 일을하는 것은 실제로 좋은 생각이 아닙니다 :)). 처음에 생각했던 것만 큼 끔찍한 것은 아니라는 것이 밝혀졌습니다.
Ramillies

5

Brain-Flak , 120 바이트

(({})<{{({}[()]<({}(()[{}]))>)}{}({}[({})]<({}<>{}<({}())>)><>)}>)<>({}[()]){{}((<>{}<>[{}]){}[()])<>}{}{(({}){})<>{}}<>

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

다음 기능을 수행합니다.

기능

이 함수는 시퀀스를 생성합니다

2 4 1 6 3 5 7 8 9 11 13 15 17 19 21 10 23 25 27 29...

이 함수는 확률이 홀수입니다 1


4

R, 82 바이트 (추가 챌린지 1)

f<-function(n){if(sqrt(n)==floor(sqrt(n))){2*sqrt(n)}else{2*(n-floor(sqrt(n)))-1}}

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

입력 값이 완전 제곱이면 짝수를 제공합니다. 그렇지 않으면 홀수를 제공합니다. 완전 제곱의 자연 밀도는 0이며,이 시퀀스는 확률이 1 인 홀수를 나타냅니다.


TIO 링크를 추가해 주 시겠습니까?
H.PWiz





3

뇌 - 플랙 , 140 138 136 바이트

({}<(((()())()()))((<>[()])[()()])>){({}[()]<(({}(({}({}))[({}[{}])]))[({}[{}])]<>(({}(({}({}))[({}[{}])]))[({}[{}])])<>)>)}{}({}<{}{}>)

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

설명

이것은 질문에서 제안 된 것과 유사한 기능을 수행합니다.

2 3 1 4 7 5 6 11 9 8 15 13 10 17 15 ...

그것은 주로 크기 3 스택을 위해 스택을 롤링 한 스 니펫을 기반으로 작동합니다.

(({}(({}({}))[({}[{}])]))[({}[{}])])

우리는 두 개의 스택을 하나의 누산기 값 (홀수 하나의 짝수)으로 설정하고 하나는 숫자로 설정 4 4 2합니다. 반복 할 때마다 두 스택을 모두 롤링하고 왼쪽 스택의 상단을 오른쪽 스택의 상단에 추가합니다.

(({}(({}({}))[({}[{}])]))[({}[{}])]<>(({}(({}({}))[({}[{}])]))[({}[{}])])<>)

이것은 각각의 홀수를 4 씩 증가시키고 하나의 짝수를 2 씩 증가시킵니다. 따라서 입력으로 n시간을 반복 n합니다. 이것은 점근 확률이 2/3 입니다.


2

젤리 , 10 바이트

ÆE;0ṭ2/FÆẸ

승산의 확률은 2/3 입니다.

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

작동 원리

ÆE;0ṭ2/FÆẸ  Main link. Argument: n

ÆE          Compute the exponents of n's prime factorization.
  ;0        Append a 0.
     2/     Reduce all pairs by...
    ṭ         tack, appending the left argument to the right one.
            This inverts all non-overlapping pairs of exponents.
       F    Flatten the result.
        ÆẸ  Consider the result a prime factorization and compute the corresponding
            integer.


1

배치, 36 바이트

@cmd/cset/an=%1*2,(-~n*!!(n%%3)+n)/3

질문에 주어진 순서를 구현합니다.


1

자바 스크립트, 23 바이트

n=>n/2+n/2%2+(n%4&&n-1)

출력 : 1, 3, 5, 2, 7, 9, 11, 4, 13, 15, 17, 6, 19, 21, 23, 8 ...

  • 모든 n = 4k의 경우 :
    • f (n) = n / 2 = 2k
  • 모든 n = 4k + b
    • f (n) = n / 2 + b / 2 + n-1 = 3/2 * (4k + b) + 1/2 * b-1 = 6k + 2b-1

도전 2 :

n=>n^(n>1)

출력 : 1, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14


n=>n%4?1.5*n|1:n/25 바이트 더 짧습니다.
nwellnhof

1

CJam (21 바이트)

{2b_(&!\_,2*\1$~+2b?}

처음 32 개의 출력을 보여주는 온라인 데모 . 익명 블록입니다 (기능).

이것은 1에 도전하는 해결책이기도합니다. 짝수에 매핑 된 숫자는 2의 거듭 제곱이므로 첫 번째 n 출력에서 ​​짝수의 밀도는 lg (n) / n이며 0이됩니다.

해부

{         e# Declare a block; let's call the input x
  2b      e#   Convert to base 2
  _(&     e#   Copy, pull out first digit (1) and set intersection with rest
  !       e#   Boolean not, so empty set (i.e. power of 2) maps to 1 and non-empty
          e#   to 0
  \_,2*   e#   Take another copy, find its length, and double it
  \1$~+   e#   Take the original base 2 array and append ~(2L) = -2L-1
  2b      e#   Convert from base 2, to get 2x-2L-1
  ?       e#   Take the 2L if it was a power of 2, and the 2x-2L-1 otherwise
}

1

펄 40 바이트

$,=$";$i=4;{say$i-3,$i/2,($i+=4)-5;redo}

1

브레인 플루 , 88 바이트

({}<(((<>)[()])[()()])>)<>(((()())()()))<>{({})({})({})({}[()]<({}<>({})<>)>)}{}{}({}){}

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

설명

이것은 마지막 대답 과 동일한 기능을 구현 하지만 Brain-Flueue의 FIFO 모델을 사용하여 모서리를 자릅니다. 다음은 처음 생성하는 몇 가지 용어입니다.

2 3 1 4 7 5 6 11 9 8 15 13 10 17 15 ...

코드의 첫 번째 부분은 약간의 설정이므로 0,-1,-3첫 번째 스택과 2,4,4두 번째 스택에 배치합니다. 는 2,4,4내 뇌 - 플랙 대답에 그랬던 것처럼, 심지어 홀수 번호를 순환에 사용됩니다.

그런 다음 왼쪽 스택의 상단을 오른쪽 스택에 추가 할 때마다 n 번 반복합니다. Brain-Flueue는 스택과 달리 큐를 사용하기 때문에 값을 자연스럽게 롤링하면 추가 코드가 필요하지 않습니다.


Flueue와 Flak의 차이점은 무엇입니까?
FantaC

@tfbninja Flueue는 스택 대신 대기열을 사용합니다.
밀 마법사

하지만 ... bflk 인터프리터를 사용하고 있습니다 ... 어떻게 차별화합니까
FantaC

@tfbninja -lflueue인수.
밀 마법사

0

파이썬 (2) , 46 (104) 55 바이트

lambda n:2*((n-int(n**.5))+.5,n**.5-1)[n!=1>0==n**.5%1]

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

질문을 잘못 읽고 이제 시퀀스를 생성하는 함수 대신 시퀀스를 생성하는 데 사용할 수있는 함수를 올바르게 구현했습니다. 또한 0가능한 출력 세트에서 제외됩니다 .

홀수 양의 정수를 찾을 확률이 이제로 수렴됩니다 1.


내가 이해 이것은 지금까지 수 없습니다 세트 / 목록을 반환해야합니다
씨 Xcoder에게

또한을 포함하기 때문에 올바른 순열이 아닙니다 0.
Mr. Xcoder

@ Mr.Xcoder주의 해 주셔서 감사합니다.
Jonathan Frech



0

Pyth , 9 바이트

*Fmxd<d4P

여기 사용해보십시오! 또는 한 번에 더 많은 테스트를!

이 코드를 사용하여 특정 지점까지의 홀수 비율을 확인할 수 있습니다. 10000원하는 한계로 대체 하십시오 (메모리 오류로 인해 더 높게 설정하지 마십시오).

Km*Fmxk<k4PdS10000clf%T2KlK

여기에서 시도하십시오 .

위의 결과는 대략 0.667 입니다. 홀수 발생 확률은 2/3 입니다. 이 접근법은 Dennis의 답변 과 동등한 구현입니다 .


설명

*Fmxd<d4P   Full program.

        P   Prime factors.
  m         Map over ^.
   x        Bitwise XOR between:
    d          The current prime factor.
     <d4       The integer corresponding to the boolean value of current factor < 4.
*F          Product of the list.


0

루아, 67 53 바이트

내가 골프를 할 때 오는 설명 :)

이 프로그램은 명령 행 인수를 통해 정수를 입력으로 받아서 exemple 시퀀스의 n 번째 요소를 STDOUT에 인쇄합니다.

n=...print(n%3<1 and n/3*2or n+math.floor(n/3)+n%3-1)

설명

n=...                              -- shorthand for the argument
print(                             -- prints out the result of the following ternary
     n%3<1                         -- if n is divisible by 3
       and n/3*2                   -- prints out the corresponding even number
       or n+math.floor(n/3)+n%3-1) -- else prints out the odd number

이 시퀀스의 n짝수는 짝수 n이고 3 의 배수이므로 수식 n%3*2은 그것들을 생성하기에 충분합니다.

홀수의 경우 조금 더 어려워집니다. 전류에 따라 찾을 수 있다는 사실을 기반으로 n다음 표가 있습니다.

n       |  1   2   4   5   7   8   10   11  
target  |  1   3   5   7   9   11  13   15
target-n|  +0  +1  +1  +2  +2  +3  +3   +4

하자의 통화 가치는 target-n i, 우리는 때마다 볼 수있는 n%3==2, i증가합니다. 우리의 공식은 다음과 같습니다.

n+math.floor(n/3)+n%3-1

홀수는 n우리가 추가 한 것을 기준으로 합니다 i.

i오프셋으로 유클리드 디비전과 같은 비율로 3 씩 증가 하는 값 . math.floor(n/3)증가 속도를 n%3-1제공하고 오프셋을 제공하여 n%3==2대신에 발생하도록 합니다 n%3==0.


불필요한 공간 ( ...and (n/...) 을 제거하여 1 바이트를 쉽게 저장할 수 있습니다 .
Jonathan Frech

@JonathanFrech 완전히로 괄호를 제거하여이 자리에 2를 저장 할 수 있었다 and n/3*2or잘 같은 작품
Katenkyo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.