공동 프라임 이웃 없음


33

양의 정수 목록이 주어지면 인접한 모든 정수 쌍이 소수를 공유하는지 여부를 출력합니다. 즉, 출력 truthy 경우에만 경우 에는 목록에서 인접한 두 정수가 공동 프라임 없습니다.

또 다른 관점에서 : 양의 정수리스트로부터 [A 1 2 ... N ] , 출력 여부를

       gcd (a 1 , a 2 )> 1 && gcd (a 2 , a 3 )> 1 &&… && gcd (a n-1 , a n )> 1

목록에는 항상 두 개 이상의 요소가 포함됩니다 (n ≥ 2).

하나…

이 과제는 또한 되어 있습니다. 응답 의 코드 포인트 (코드 코드 가 무엇이든간에)는 프로그램이 확인하는 조건을 충족해야합니다.

예를 들어, print 2유효한 프로그램입니다. 유니 코드 코드 포인트의리스트로서, [ 1121141051101163250 ] 이며,이 조건을 만족시킨다 : 1121142 의 인자를 공유하고 ; 및 (114)(105) 의 주 인자 A를 3

그러나 및 의 유니 코드 코드 포인트 ( 즉, 10997 )가 공동 프라임이므로 유효한 프로그램 (죄송합니다!)에서 발생할 main없습니다 . (다행스럽게도 제출물이 전체 프로그램 일 필요는 없습니다!)ma

귀하의 프로그램은 코드 포인트 0을 포함 할 수 없습니다.

테스트 사례

진실한 :

[6 21] -> 1
[502 230 524 618 996] -> 1
[314 112 938 792 309] -> 1
[666 642 658 642 849 675 910 328 320] -> 1
[922 614 530 660 438 854 861 357 477] -> 1

거짓 :

[6 7] -> 0
[629 474 502 133 138] -> 0
[420 679 719 475 624] -> 0
[515 850 726 324 764 555 752 888 467] -> 0
[946 423 427 507 899 812 786 576 844] -> 0

이것은 : 바이트 단위의 가장 짧은 코드가 이깁니다.


8
일반 프로그래밍 언어로이 문제를 시도하는 사람은 ASCII로 주요 코드 포인트가있는 문자 목록입니다 %)+/5;=CGIOSYaegkmq\DEL.
Cristian Lupascu

@Lynn Truthys는 일관성이 있어야합니까?
H.PWiz

1
@ H.PWiz 아니! —
Lynn

실제로이에 대한 행할 의도 일부 일반 (비 골프) 랭 가문, 나는 것으로 나타났습니다 때 나는 희망을 느끼고 있었다 print 2유효하지만, );=ae인 프라임 나는 그것을 고려하지 않은, 정말 힘든 ... 궁금 하스켈과 같이 할 수있는 경우 경쟁?
Lynn

이 제한은 이 질문 의 반대보다 쉽습니다. 아무도 0x02 바이트를 사용하지 않는다고 가정하십시오. 이 질문은 Mathematica, Logo, Haskell, Python, Perl, TI-BASIC에서 골프가 아닌 유효한 답변을 얻습니다. 이것은 이미 Haskell을 가지고 있습니다 .Mathematica는 불가능하다고 생각하지만 아직 솔루션 구성을 완료하지는 않았지만 로고는 가능할 것 같습니다.
user202729

답변:


15

MATL , 14 바이트

!TM1*Zdl2$Xdl-

이것은 0이 아닌 숫자로 구성된 비어 있지 않은 열 벡터를 진실로 출력하거나 적어도 0의 항목을 거짓으로 포함하는 벡터를 출력합니다.

설명

!     % Implicit input. Transpose
TM    % Push input to latest function again
1*    % Multiply by 1 (does nothing, but matches factors)
Zd    % Compute gcd with broadcast: matrix of gcd of all pairs
l     % Push 1
2$    % The next function will use 2 inputs
Xd    % Extract diagonal 1 (i.e. that below the main diagonal) from the matrix
l-    % Subtract 1 from each entry. Implicitly display

4
답변 축하 않는 만족 제한 소스 요구 사항을!
아웃 골퍼 에릭

13

하스켈 , (103) 100 바이트

편집하다:

  • -3 바이트 : d<-fz가드를 사용 하여 마지막 두 줄을 병합하고 줄입니다.

f는 정수 목록을 가져와 a를 반환하는 주 함수 Bool입니다.

처음 두 개는 ԁ s (만)는 키릴 문자 (Komi) 유니 코드 문자이며 첫 문자 앞에 탭 문자가 있습니다.

f	ԁ=zb[ԁ]id
zb[h:p:l]fz=z h p&&zb[p:l]fz
zb l fz=z 0 2
z 0z=z>z^0
z f fz|f<fz=z fz f|d<-fz=z d$f-d

온라인으로 사용해보십시오! 또는 자체적으로 테스트하십시오.

작동 원리

  • f주요 기능입니다. 모든 것은 괄호보다 괄호를 사용하기에 괄호를 사용하는 것이 훨씬 어색하기 ԁ때문에 인수 를 단일 톤 목록으로 감싸고 )호출하는 것입니다.zb 그와 더미 인수가 (하스켈 함수가 id적합에 딱 맞는 캐릭터가하는 일 이리).
    • =]일반 ASCII 에서는 동일한 문자를 둘 다에 맞추는 것이 불가능하므로 인수는 2 바이트 유니 코드 문자 CYRILLIC SMALL LETTER KOMI DE (ԁ)(코드 포인트 값 )로 이름이 지정됩니다.3*7*61=U+0501 로 지정 [됩니다.
      • 코드 포인트가 고르지 않기 때문에 (적절한 식별자이며 3 바이트를 사용하는 가장 작은 옵션), 공백 앞에 탭 문자를 사용해야합니다.
      • 7 바이트 길이의 일반 ASCII 옵션은 인수의 이름을 바꾸는 것 f fz|bf<-fz=zb[bf]fz입니다.
  • zb두 개의 인수, 즉 요소가 재귀되는 실제 숫자 목록 인 싱글 톤 목록과 더미 인수 fzz 함수의 =s 이전 .
    • 내부 목록에 두 개 이상의 요소 z가 있으면 함수 는 첫 번째 두 개 (named hp) 와 함께 호출되며 True,zb 되며이p:l 목록 의 꼬리 부분 반복됩니다 .
    • 내부 목록에 요소가 두 개 미만인 경우을 zb반환합니다 True. =문자 다음에 문자가 와야하기 때문에 z이를 수행하는 가장 간단한 방법 z은 반환 된 것으로 알려진 함수 의 호출을 사용하는 것입니다 True.
  • z 두 개의 인수를 취하고 빼기를 사용하여 최대 공약수를 재귀 적으로 계산합니다 (다른 모든 관련 정수 나누기 또는 gcd 함수를 사용할 수 없음). True . 1보다 크면 합니다.
    • 재귀는 첫 번째 인수가이고 0두 번째 인수는 gcd 인 경우 종료됩니다 . 이 줄에서 두 번째 인수는 또한 이름이 지정 z됩니다. 캐릭터1 는 여기에서 어색하므로 z^0숫자 1을 얻는 데 사용됩니다.
    • 그렇지 않으면 첫 번째 인수 f가 두 번째 인수 보다 작 으면 fz스왑되고z 재귀됩니다.
    • 그렇지 않으면 작은 인수가 큰 인수에서 뺀 다음 z재귀합니다 (또한 인수를 바꾸는 것은 괄호를 피하기위한 것이지만).

2
나는 그것을 풀 수있는 비 골프 언어가 있어야 한다는 것을 알았 습니다!
Lynn

2
@Lynn Haskell이 단일 문자 토큰만으로 상당히 표현적인 구문 하위 집합을 갖는 것은 이런 종류의 도전에서 실제로 도움이됩니다. 골프 언어의 중간 정도 인 것 같아요.
Ørjan Johansen

키릴 문자로 인해 실제로 100 바이트입니까? 코드 골프 졸업 userscript는 102 UTF-8 바이트를보고하지만 계산하는 올바른 방법입니다 그것의 정확한 / 여기 바이트 나도 몰라. 바이트 수에 관계없이 정말 인상적입니다!
Mark S.

1
@점수. TIO는 100 바이트 (및 98 자)를보고합니다. SE가 3 개의 공백으로 표시되는 탭 문자에 걸린 것으로 의심됩니다 (그런 다음 복사됩니다). 나는 누군가가 사전 태그를 사용하여 그것을 피하기 위해 보았다고 생각합니다.
Ørjan Johansen

@점수. 끝난. 나는 그 사용자 스크립트를 더 혼란스럽게 할 수도 있다고 생각합니다.
Ørjan Johansen

10

05AB1E , 8 바이트

암호

ü‚ÒüÃP≠P

05AB1E encoding을 사용하여 다음 코드 포인트 목록을 제공합니다.

hex: [0xFC, 0x82, 0xD2, 0xFC, 0xC3, 0x50, 0x16, 0x50]
dec: [252,  130,  210,  252,  195,  80,   22,   80]

온라인으로 사용해보십시오! 또는 소스 코드를 확인하십시오!

설명

gcd 연산자 ( ¿)에는 주요 코드 포인트가 있으므로 coprimality를 확인하는 다른 방법을 찾아야했습니다.

ü‚          # Get an array of adjacent pairs of the input
  Ò         # Factorize both elements of each pair in the array
   üà       # For each pair, get the intersection of both prime factorization lists
     P      # Product of each intersection (this leaves 1 when there is no intersection)
      ≠     # Check for each element whether it does not equal 1
       P    # Product of the booleans

05AB1E의 코드 페이지에 어떤 코드 포인트가 있습니까? 답변에 추가 할 수 있습니까?
Mr. Xcoder

@ Mr.Xcoder 추가
Adnan

Ò오버 이유가 f있습니까?
매직 문어 Urn

10

껍질 , 8 바이트

Truthy 입력의 경우 양의 정수를 반환하고 Falsy의 경우 0을 반환합니다

←▼`Ṡt(ż⌋

온라인으로 사용해보십시오! 자신의 코드 지점에서 테스트

Husk의 코드 페이지를 사용합니다

Source -- [ ←  , ▼  , `  , Ṡ  , t  , (  , ż  , ⌋  ]
Hex    -- [0x06,0xbd,0x60,0xd0,0x74,0x28,0xeb,0x8d]
Dec    -- [6   ,189 ,96  ,208 ,116 ,40  ,235 ,141]

설명

          -- implicit input, e.g                                  [63,36,18,3]
  `       -- flip the args of the next function
   Ṡ      -- some combinator (Ṡ f g x = f (g x) x)
    t     -- tail                                                 [36,18,3]
      ż   -- zipWith (note, keeps trailing elems of longer list)  [(63,36),(36,18),(18,3),(3)]
       ⌋  -- gcd                                                  [9,9,3,3]
     (    -- used just to match restricted source criteria
 ▼        -- minimum of the list                                    3
←         -- minus 1                                                2

설명에 사용하는 표기법은 무엇입니까 ? 문서의 명령 페이지의 "유형"열에서도 문서를 볼 수 있으며 머리를 숙일 수 없으므로 그것을 찾아보고 싶습니다.
Jonathan Allan

@JonathanAllan 하스켈 구문에서 함수의 정의입니다 . Ṡ(f,g,x) = f(g(x),x)더 많은 주류 언어로 번역 됩니다.
Zgarb


뒤집어 졌을 때`Ṡ g f x = Ṡ f g x = f (g x) x
H.PWiz

1
@JonathanAllan Husk 대화방에 참여하면 더 잘 설명 할 수 있습니다.
Zgarb

5

apt , 8 7 바이트

äj d¹¥Z

온라인으로 테스트하십시오!

코드 포인트 :

Char    ä   j       d   ¹   ¥   Z
Hex    e4  6a  20  64  b9  a5  5a
Dec   228 106  32 100 185 165  90

설명

 äj d¹ ¥ Z
Uäj d) ==Z
             Implicit: U = input array, Z = 0
Uä           For each pair of items in the array:
  j            Return whether the two items are coprime.
    d)       Return true if any items are truthy, false otherwise.
       ==Z   Return whether this is equal to 0 (false -> true, true -> false).
             Implicit: output result of last expression

5

젤리 , 11 9 바이트

,Pnælð2\P

@ Jonathan Allan 덕분에 2 바이트를 절약했습니다 .

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

젤리는 자체 코드 페이지를 가지고 있으며 각 문자의 코드 포인트는

Chr Hex Dec
,   2c   44
P   50   80
n   6e  110
æ   16   22
l   6c  108
ð   18   24
2   32   50
\   5c   92
P   50   80

이것은를 확인하여 비코 프라임 숫자를 테스트합니다 lcm(a, b) != a*b. 코드 포인트가 고르지 않은 문자를 필터링했을 때 더 짧은 솔루션이있을 수 있습니다.

설명

,Pnælð2\P  Input: array A
      2\   For each overlapping sublist of size 2
     ð       Reduce it using this dyad
,              Pair
 P             Product
  n            Not equals, 1 if true else 0
   æl          LCM
        P  Product

천재!
굉장합니다

,심지어 æln,P¥ð2\두 가지 적은 할 수 있습니다 . 편집 : 나는 후행을 삭제, P하나 덜 : p)
Jonathan Allan

오, 그래, 인수를 교환 :)
Jonathan Allan

5

TI-BASIC, 38 바이트

Input L1:ΔList(cumSum(L1:augment(Ans+V,V+{0:2>sum(AnsL1=lcm(Ans+V,V+L1

TI-BASIC은 여기에 표시된대로 1 바이트 또는 2 바이트 토큰으로 토큰 화됩니다 .

이 솔루션의 가장 까다로운 부분은 다음과 같습니다.

  1. 쉼표 토큰은 소수 (43)이므로 43의 배수로 둘러싸 야합니다 (이 경우 V 토큰, 86).

  2. gcd (토큰은 큰 소수 (47881)이므로 전혀 사용할 수 없습니다.

이 프로그램의 토큰은 다음과 같습니다.

token     hex     dec
Input     0xDC    220
L1        0x5D00  23808
:         0x3E    62
ΔList(    0xBB2C  47916
cumSum(   0xBB29  47913
L1        0x5D00  23808
:         0x3E    62
augment(  0x14    20
Ans       0x72    114
+         0x70    112
V         0x56    86
,         0x2B    43
V         0x56    86
+         0x70    112
{         0x08    8
0         0x30    48
:         0x3E    62
2         0x32    50
>         0x6C    106
sum(      0xB6    182
Ans       0x72    114
L1        0x5D00  23808
=         0x6A    106
lcm(      0xBB08  47880
Ans       0x72    114
+         0x70    112
V         0x56    86
,         0x2B    43
V         0x56    86
+         0x70    112
L1        0x5D00  23808

설명

Input L1:                   Prompt the user to input L1.

ΔList(cumSum(L1:            Take the differences of the prefix sum of L1,
                            which in effect removes the first element (result in Ans).

augment(Ans+V,V+{0:         Append a 0 to the end of Ans.
                            V defaults to 0, so adding it is a no-op.
                            Ans now holds L1 shifted to the left by one element,
                            with a 0 shifted in.

      AnsL1=lcm(Ans+V,V+L1  Take the least common multiple of each corresponding element
                            of Ans and L1, and check if each is equal to their product.
                            This returns a list of booleans, each 1 corresponding to
                            a co-prime pair. The last element (having been paired with 0)
                            will always be 1.

2>sum(                      Returns 1 if there is at most one 1 in the list, else 0.
                            Since the last element is always 1, this means
                            we return 1 only if there are no co-prime pairs.

3

Pyth , 15 바이트

&F.bPiFNP.TtBQQ

여기에서 시도 하거나 Test Suite를 확인하십시오.

이것은 Outgolfer ErikMr. Xcoder 사이의 공동 노력 입니다. 진실에 대해서는 일치하지 않는 값 (빈 목록이 아님)을, 거짓에 대해서는 빈 목록을 반환합니다.


ASCII 값

[38, 70, 46, 98, 80, 105, 70, 78, 80, 46, 84, 116, 66, 81, 81]

다음 요소를 공유하는 요소 :

[2, 2, 2, 2, 5, 35, 2, 2, 2, 2, 4, 2, 3, 81]

설명

&F.bPiFNP.TtBQQ
           tBQ   Return [Q, Q[1:]] (Q = eval first line of input)
         .T      Transpose ^ without cropping absences
        P        Remove last element of ^
  .b          Q  Map in parallel on ^ (N) and Q (Y, ignored)
     iFN           GCD of N
    P              Prime factors of ^ (P(1) = [])
&F               Left fold (reduce) the result of the map with Logical AND (short-circuiting)

요구 사항이 없으면 동일한 작업을 수행 하는 7 5 바이트 버전이됩니다 ( FryAmTheEggman 덕분에 -2 ).

-1iVt

설명

-1iVtQQ  Implicit QQ at the end
    tQ   Return Q[1:]
  iV  Q  Vectorized GCD on ^ and Q
-1       Remove every element of ^ from [1] (implicit singleton)

호기심 때문에 왜 Q마지막에 s 가 필요 합니까?
ETHproductions

@ETHproductions .b다양한 arities를 가지고 있고 암시 적 입력을 사용한다는 것은 의도 된 것 (2) 대신 가장 낮은 것 (1)을 선택한다는 의미입니다.
아웃 골퍼 Erik
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.