시계의 반은 얼마입니까?


25

내 방에는이 괴짜 시계가 있습니다 (전체 크기를 보려면 클릭하십시오).

여기에 이미지 설명을 입력하십시오

이들 중 대부분은 파악하기 어렵지 않지만 4시 방향에 대한 것은 특히 까다 롭습니다.

2의 음의 거듭 제곱 1 모듈로 7

일반적으로 1/2와 같은 분수는 정수만 포함되므로 모듈 식 산술에서는 의미가 없습니다. 올바른 방법이, 그리고,로를 확인하는 (2)의, 또는 다른 말로하면, 2의 음의 거듭 제곱그 개수 엑스곳이 x는 1과 2 배. 이런 식으로, 순간의 생각은 그것을 드러 낼 것 x는 4와 같습니다입니다 2 x는 2 곱하기 4는 8과 같습니다. 이는 하나의 모듈로 7과 같습니다..

그러나 단순히 곱셈의 역함수 를 찾는 것은 쉽지 않은 일입니다. 따라서 지수의 어려움, 즉 다시 말해 2의 모듈 형 로그 또는 이산 대수를 찾는 데 어려움을 겪어 봅시다.이 경우 3은 7에 대한 2의 모듈 형 로그입니다. 배경, 이것은 2 모듈로의 곱셈 차수를 계산하는 것을 의미한다.

도전

1보다 큰 양의 홀수 정수가 주어지면 n가장 작은 양의 정수 xwhere를 출력하십시오 여기에 이미지 설명을 입력하십시오.

n x
3 2 
5 4 
7 3 
9 6 
11 10 
13 12 
15 4 
17 8 
19 18 
21 6 
23 11 
25 20 
27 18 
29 28 
31 5 
33 10 
35 12 
37 36 
39 12 
41 20 
43 14 
45 12 
47 23 
49 21 
51 8 
53 52 
55 20 
57 18 
59 58 
61 60 
63 6 
65 12 
67 66 
69 22 
71 35 
73 9 
75 20 
77 30 
79 39 
81 54 
83 82 
85 8 
87 28 
89 11 
91 12 
93 10 
95 36 
97 48 
99 30 
101 100 
103 51 
105 12 
107 106 
109 36 
111 36 
113 28 
115 44 
117 12 
119 24 
121 110 
123 20 
125 100 
127 7 
129 14 
131 130 
133 18 
135 36 
137 68 
139 138 
141 46 
143 60 
145 28 
147 42 
149 148 
151 15 
153 24 
155 20 
157 52 
159 52 
161 33 
163 162 
165 20 
167 83 
169 156 
171 18 
173 172 
175 60 
177 58 
179 178 
181 180 
183 60 
185 36 
187 40 
189 18 
191 95 
193 96 
195 12 
197 196 
199 99 
201 66 

3
@ CᴏɴᴏʀO'Bʀɪᴇɴ : 그건 이진입니다.
El'endia Starman

2
그래픽 입력!
Conor O'Brien

6
x^-1xx의 곱셈 역수 , 즉 xy = 1 이 되는 숫자 y를 의미 합니다. 실수 필드에서 2 ^ -1 = 0.5 입니다. 정수 7 의 고리 에서 2 ^ -1 = 4 입니다.
Dennis

4
모듈 식 산술이 이상합니다.
SuperJedi224

3
@ SuperJedi224 모듈 식 산술 이상하지만, 적어도 하루에 한 번은 깨닫지 못하고 할 것입니다. 12 시간을 사용하고 누군가 2 시간 내에 전화를 요청하고 11:00이고 1시에 전화하기로 결정한 경우 모듈 식 산술을 수행 한 것입니다. 이 시계의 숫자 중 하나가 "시계 산술"이라고도하는 방식으로 표현 된 것을 알 수 있습니다.
Todd Wilcox

답변:


17

젤리 , 6 바이트

R2*%i1

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

작동 원리

R2*%i1  Input: n

R       Range; yield [1, ..., n].
 2*     Compute [2**1, ..., 2**n].
   %    Hook; take all powers modulo n.
    i1  Get the index of the first 1.
        Indices are 1-based, so index k corresponds to the natural number k.

13

Pyth- 9 8 바이트

f!t.^2TQ

테스트 스위트 .

f2를 입력하고 입력이 1과 같은 모듈 식 지수가되도록 x를 찾을 때까지 디폴트 값 1을 무시합니다.


11

파이썬, 32 바이트

f=lambda n,t=2:t<2or-~f(n,2*t%n)

2로 시작하여 결과가 1이 될 때까지 모듈로 n을 두 배로 늘리고 매번 재귀 적으로 증가하며 초기 값 2에 대해 카운트 1로 끝납니다.


8

Mathematica, 24 바이트

2~MultiplicativeOrder~#&

방금 내장 기능을 사용했습니다.


20
물론 티카는 내장이에 대한 있습니다. : P
El'endia Starman

7
의 El'endiaStarman @ 물론 티카는 ungolfable 내장이에 대한 있습니다. :-{D
wizzwizz4

7

APL, 8 바이트

1⍳⍨⊢|2*⍳

이것은 오른쪽의 정수를 받아들이고 정수를 반환하는 모나 딕 함수 트레인입니다. 호출하려면 변수에 지정하십시오.

설명 (입력 호출 x) :

      2*⍳    ⍝ Compute 2^i for each i from 1 to x
   ⊢|        ⍝ Get each element of the resulting array modulo x
1⍳⍨          ⍝ Find the index of the first 1 in this array

지수가 반올림되므로 큰 입력에 대해서는 결과가 올바르지 않을 수 있습니다.


1
또한 8 : ⍴∘∪⊢|2*⍳.
lirtosiast

6

Pyth, 14 바이트

VQIq%^2hNQ1hNB

설명:

VQIq%^2hNQ1hNB

                # Implicit, Q = input
VQ              # For N in range(0, Q)
  Iq      1     # If equals 1
    %^2hNQ      # 2^(N + 1) % Q
           hN   # Print (N + 1)
             B  # Break

여기 사용해보십시오


66\n132\n198의 입력을 얻 습니다 201.
El'endia Starman

@ El'endiaStarman 죄송합니다, 잘못된 링크 : P
Adnan

오, 하하 지금은 좋아 :)
El'endia Starman

5

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

f=(n,t=2)=>t<2||-~f(n,2*t%n)

@xnor의 뛰어난 재귀 접근 방식을 기반으로합니다.


이것을 테스트 할 수있는 링크가 있습니까? Chrome 콘솔에서 작동하지 않는 것 같습니다. (때문에 구문 에러는 =>, 나는 생각합니다.)
El'endia Starman

@ El'endiaStarman 여기 있습니다. .
Conor O'Brien

@ CᴏɴᴏʀO'Bʀɪᴇɴ : 테스트 방법을 알 수 없습니다.
El'endia Starman

@ El'endiaStarman이 코드는처럼 호출 될 수있는 함수를 정의했습니다 f(3). 어리석은 이유로, 웹 사이트는 let또는로 선언하지 않는 한이 기능을 사용할 수 없습니다 var. 이 시도.
ETHproductions

1
@Pavlo 람다가 허용된다는 것을 알고 있지만이 함수는 자체 호출 할 수 있도록 이름을 지정해야합니다. 컴퓨터로 돌아 오면 테스트 스위트 링크를 추가하겠습니다.
ETHproductions

5

05AB1E , 11 바이트

암호:

DUG2NmX%iNq

설명:

DUG2NmX%iNq

D            # Duplicates the stack, or input when empty
 U           # Assign X to last item of the stack
  G          # For N in range(1, input)
   2Nm       # Calculates 2 ** N
      X      # Pushes X
       %     # Calculates the modulo of the last two items in the stack
        i    # If equals 1 or true, do { Nq }
         N   # Pushes N on top of the stack
          q  # Terminates the program
             # Implicit, nothing has printed, so we print the last item in the stack

5

줄리아, 25 24 바이트

n->endof(1∪2.^(1:n)%n)

이것은 간단합니다- 2.^(1:n)%n집합 내에서 2의 거듭 제곱을 찾고 is union이지만 unique각 고유 한 힘 중 하나만 제공 하고 반환합니다 (중위 연산자이기 때문에 1과 결합하여 바이트를 절약 할 수 있습니다 ∪(2.^(1:n)%n)). 그런 다음 endof고유 파워의 수를 계산합니다. 1에 도달하면 기존 파워를 반복하기 때문에 1을 생성하는 파워만큼 고유 한 값이 있기 때문입니다.


5

진심으로, 14 바이트

1,;╗R`╙╜@%`Míu

육각 덤프 :

312c3bbb5260d3bd4025604da175

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

설명:

 ,;╗           Make 2 copies of input, put 1 in reg0
    R          push [0,1,...,n-1]
     `    `M   map the quoted function over the range
      ╙        do 2^n
       ╜@%     modulo the value in reg0
1           íu Find the 1-index of 1 in the list.

4

하스켈, 30 바이트

n%1=1
n%t=1+n%(2*t`mod`n)
(%2)

도우미 인수 tn1과 같을 때까지 각 단계마다 모듈러스가 두 배가 됩니다.


이것을 어떻게 테스트 할 수 있습니까?
El'endia Starman

참조 여기에

@Mauris : 감사합니다!
El'endia Starman

2

apt, 17 바이트

1oU f@2pX %U¥1} g

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

Japt에 "이 조건과 일치하는 첫 번째 항목을 찾으십시오"기능이있는 경우 이는 3 바이트 더 짧습니다. 하나에 대한 작업을 시작합니다

작동 원리

1oU f@2pX %U¥1} g   // Implicit: U = input number
1oU                 // Generate a range of numbers from 1 to U.
                    // "Uo" is one byte shorter, but the result would always be 0.
    f@        }     // Filter: keep only the items X that satisfy this condition:
      2pX %U¥1      //  2 to the power of X, mod U, is equal to 1.
                g   // Get the first item in the resulting list.
                    // Implicit: output last expression


2

줄리아, 33 26 바이트

n->findfirst(2.^(1:n)%n,1)

정수를 받아들이고 정수를 반환하는 람다 함수입니다. 호출하려면 변수에 지정하십시오.

우리는 1에서 1까지 각 정수 거듭 제곱으로 2를 올린 배열을 구성한 n다음이 배열에서 첫 번째 1의 인덱스를 찾습니다.

Glen O 덕분에 7 바이트를 절약했습니다!


map 명령이 필요하지 않습니다 2.^(1:n)%n.
Glen O

@GlenO 고마워요!
Alex A.


2

MATL , 13 바이트

it:Hw^w\1=f1)

컴파일러 의 현재 GitHub 커밋 으로 Octave에서 실행됩니다 .

51( double데이터 유형의 제한으로 인해) 입력에 작동합니다 .

>> matl it:Hw^w\1=f1)
> 17
8

설명

i             % input, "N"
t:            % vector from 1 to N
Hw^           % 2 raised to that vector, element-wise
w\            % modulo N
1=            % true if it equals 1, element-wise
f1)           % index of first "true" value

2

유니콘 , 1307 1062 976 바이트

( ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ( 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 2 ) 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨ 2 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ( 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 2 ✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 ) ) ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) )

나는 유니콘을 심각한 골프 언어로 만들려고 노력하고 있지만 조금 어렵습니다 ...

하면서 다행스럽게도 필자는 언어의 "유니콘 다움"을 유지하는 방법을 찾을 수 있습니다 훨씬 적은 바이트를


그림:

여기에 이미지 설명을 입력하십시오

사용자 정의 인코딩을 사용합니다 .

이 답변은이 언어 이후에 만들어진 유니콘 버전을 사용하기 때문에 경쟁이 아닙니다.


3
무지개와 유니콘은 이것으로 강력합니다 ...
Mama Fun Roll

누군가 UnicornRLE
Sebi

((2)2(2))(())@Downgoat의 인터프리터로 코드 에서 나가는 유일한 사람 입니까?
Rɪᴋᴇʀ

2

𝔼𝕊𝕄𝕚𝕟, 11 자 / 22 바이트

↻2ⁿḁ%ï>1)⧺ḁ

Try it here (Firefox only).

while 루프를 사용합니다. 이것은 while 루프가 범위에 대한 매핑보다 낫습니다.

설명

          // implicit: ï = input, ḁ = 1
↻2ⁿḁ%ï>1) // while 2 to the power of ḁ mod input is greater than 1
  ⧺ḁ      // increment ḁ
          // implicit output

1

CJam, 15 바이트

2qi,:)f#_,f%1#)

피터 테일러는 바이트를 저장했습니다. 산뜻한!


보다는 1fe|당신이 수 :))을 수행 한 후 #.
피터 테일러

2qi,:)f#_,f%1#)
피터 테일러

물론 이죠 고맙습니다.
Lynn

0

프롤로그, 55 바이트

암호:

N*X:-powm(2,X,N)=:=1,write(X);Z is X+1,N*Z.
p(N):-N*1.

설명 :

N*X:-powm(2,X,N)=:=1, % IF 2^X mod N == 1
     write(X)         % Print X
     ;Z is X+1,       % ELSE increase exponent X
     N*Z.             % Recurse
p(N):-N*1.            % Start testing with 2^1

예:

p(195).
12

여기에서 온라인으로 사용해보십시오

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