কোন সহ-প্রধান প্রতিবেশী না


33

ধনাত্মক পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে, এতে প্রতিটি সংলগ্ন সংখ্যার জোড় কোনও প্রাইম ফ্যাক্টর ভাগ করে কিনা আউটপুট দেয়। অন্য কথায়, আউটপুট truthy যদি এবং কেবল যদি কোন তালিকায় দুই প্রতিবেশী পূর্ণসংখ্যার সহ-প্রধান হয়।

এখনও অন্য পদগুলিতে: ইতিবাচক পূর্ণসংখ্যার একটি তালিকা দেওয়া হয়েছে [a 1 a 2 … a n ] , আউটপুট কিনা

       gcd (a 1 , a 2 )> 1 &&GCD (a 2 , a 3 )> 1 &&… && gcd (a n − 1 , a n )> 1।

তালিকায় সর্বদা কমপক্ষে দুটি উপাদান থাকে (এন ≥ 2)।

যাহোক…

এই চ্যালেঞ্জটিও উত্সযুক্ত : আপনার উত্তরের কোডপয়েন্টগুলি (এটিতে যে কোনও কোডপেজই থাকুক না কেন) অবশ্যই আপনার প্রোগ্রামটি যা শর্তটি পরীক্ষা করে তা পূরণ করবে।

উদাহরণস্বরূপ, print 2একটি বৈধ প্রোগ্রাম। ইউনিকোড কোডপয়েন্টের তালিকা হিসাবে এটি [112 114 105 110 116 32 50] , যা এই শর্তটি সন্তুষ্ট করে: 112 এবং 114 2 এর একটি ফ্যাক্টর ভাগ করে ; এবং 114 এবং 105 3 এর একটি ফ্যাক্টর ভাগ করে etc.

যাইহোক, mainকরতে না একটি বৈধ প্রোগ্রাম ঘটতে (দুঃখিত!), এর ইউনিকোড codepoints যেমন mএবং a, যথা 109 এবং 97 , coprime হয়। (ধন্যবাদ, আপনার জমা দেওয়ার কোনও পূর্ণ প্রোগ্রাম হওয়ার দরকার নেই!)

আপনার প্রোগ্রামে কোডপয়েন্ট 0 ধারণ করার অনুমতি নেই।

পরীক্ষার মামলা

Truthy:

[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

Falsy:

[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 অক্ষর লেখা হয়েছে মৌলিক codepoints আছে একটি তালিকা রয়েছে: %)+/5;=CGIOSYaegkmq\DEL
ক্রিশ্চিয়ান লুপাস্কু

@ লিন কি ট্রুথিসের ধারাবাহিকতা থাকতে হবে?
এইচ.পি.উইজ

1
@ এইচপিউইজ নাহ! -
লিন

আমি আসলে এটি কিছু সাধারণ (নন-গল্ফ) ল্যাংগুজের জন্য করণীয় হওয়ার ইচ্ছা করেছিলাম, এবং আমি যখন আশা করি যে print 2এটি কার্যকর ছিল তবে আমি আশাবাদী হয়ে উঠছিলাম, তবে );=aeপ্রধান হওয়া সত্যিই শক্ত, আমি তা বিবেচনা করি নি ... আমি অবাক হয়েছি যদি হাস্কেলের মতো কিছু করতে পারে তবে প্রতিযোগিতা করা?
লিন

এই বিধিনিষেধটি এই প্রশ্নের বিপরীত থেকে সহজ , কেউ 0x02 বাইট ব্যবহার করবেন না। এই প্রশ্নটি ম্যাথমেটিকা, লোগো, হাস্কেল, পাইথন, পার্ল, টিআই-বেসিকের নঙ্গোল্ফের বৈধ উত্তর পান। এটি ইতিমধ্যে একটি হাস্কেল পেয়েছে, আমি মনে করি গণিতটি অসম্ভব, তবে লোগো সম্ভবত সম্ভাব্য বলে মনে হচ্ছে, যদিও আমি এখনও সমাধানটি তৈরির কাজটি করি নি।
ব্যবহারকারী 202729

উত্তর:


15

এমএটিএল , 14 বাইট

!TM1*Zdl2$Xdl-

এটি সত্য নয় বলে ননজারো সংখ্যার একটি খালি খালি কলাম ভেক্টর বা মিথ্যা হিসাবে কমপক্ষে শূন্য এন্ট্রিযুক্ত একটি ভেক্টরকে আউটপুট করে।

ব্যাখ্যা

!     % 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প্রধান ফাংশন, যা পূর্ণসংখ্যার একটি তালিকা নেয় এবং একটি প্রদান করে Bool

মনে রাখবেন প্রথম দুটি ԁগুলি (কেবল) হ'ল সিরিলিক (কোমি) ইউনিকোড অক্ষর এবং প্রথমটির আগে একটি ট্যাব অক্ষর রয়েছে।

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প্রধান কাজ। এটি কেবল তার যুক্তিকে ԁএকটি একক তালিকায় আবদ্ধ করা হয় (কারণ মূল ASCII মানের প্রথম )বন্ধনীগুলি বর্গক্ষেত্র বন্ধনীর চেয়ে আরও বেশি বিশ্রী করে তোলে) এবং zbসেই সাথে একটি ডামি যুক্তি (হাস্কেল ফাংশনটি idঠিক সঠিক অক্ষরের সাথে মানানসই হয়) এখানে).
    • উভয়টির পাশাপাশি একই চরিত্রের সাথে মানানসই =]প্লেইন ASCII দ্বারা অসম্ভব, সুতরাং যুক্তিটির নামকরণ করা হয়েছে 2-বাইট ইউনিকোড অক্ষর CYRILLIC SMALL LETTER KOMI DE (ԁ), কোডপয়েন্ট মান 3*7*61=U+0501, যা সমস্তটির সাথে মানিয়ে যায় [
      • কোডপয়েন্টটি যেহেতু নয় (ক্ষুদ্রতম বিকল্পটি যা আইনী শনাক্তকারী এবং এমনকি তিনটি বাইট ব্যবহার করে) তাই এটির আগে কোনও জায়গার পরিবর্তে ট্যাব অক্ষর ব্যবহার করা দরকার।
      • সাত বাইট আর প্লেইন হওয়া ASCII বিকল্প যুক্তি নামান্তর করতে হল: f fz|bf<-fz=zb[bf]fz
  • zbদুটি আর্গুমেন্ট নেয়, একটি সিঙ্গলটনের তালিকা যার উপাদানগুলির সংখ্যার আসল তালিকাটি পুনরাবৃত্তি করা হয় এবং ফাংশনের এসগুলির আগে fzএকটি পেতে একটি ডামি যুক্তি প্রয়োজন । z=
    • যখন অভ্যন্তরীণ তালিকায় কমপক্ষে দুটি উপাদান থাকে, তখন ফাংশনটি zপ্রথম দুটি (নাম hএবং p) দিয়ে ডাকা হয় , এবং যদি এটি ফিরে আসে True,zb তবে লেজের উপর পুনরাবৃত্তি হয়p:l তবে তালিকার ।
    • অভ্যন্তরীণ তালিকায় যদি দুটিরও কম উপাদান থাকে তবে zbরিটার্ন পান True। যেহেতু =চরিত্রটি অনুসরণ করা দরকার z, তাই করার সহজতম উপায় হ'ল zফাংশনটির কলটি যা নিজেই ফিরে আসে বলে পরিচিত True
  • z দুটি আর্গুমেন্ট নেয় এবং পুনরাবৃত্তভাবে বিয়োগগুলি (প্রতিটি অন্যান্য প্রাসঙ্গিক বিভাগ বা জিসিডি ফাংশন অনুপলব্ধ) ব্যবহার করে তাদের বৃহত্তম সাধারণ বিভাজকের গণনা করে True এটি যদি একের বেশি হয় তবে ফিরে আসে।
    • প্রথম আর্গুমেন্টটি যখন 0gcd হয় তখন পুনরাবৃত্তিটি শেষ হয় । এই লাইনে দ্বিতীয় যুক্তির নামও দেওয়া হয়েছে z। চরিত্র1 এখানে বিশ্রীz^0 এক নম্বর পেতে ব্যবহৃত হয়।
    • অন্যথায়, প্রথম যুক্তি fযদি দ্বিতীয়টির চেয়ে ছোট হয় fzতবে সেগুলি অদলবদল হয় এবংz পুনরাবৃত্তি হয়।
    • অন্যথায়, ছোট আর্গুমেন্টটি বৃহত্তর থেকে বিয়োগ করা হয়, তারপরে zপুনরাবৃত্তি হয় (যুক্তিগুলি অদলবদল করে, যদিও এটি কেবল বন্ধনী এড়ানোর জন্য))

2
I knew there had to be some non-golf language that could pull it off!
Lynn

2
@Lynn It really helps Haskell in this kind of challenge that it has a fairly expressive syntactic subset with just single-character tokens. Which is about halfway to a golfing language, I guess.
Ørjan Johansen

Because of the Cyrillic, is this really 100 bytes? The Code Golf Graduation userscript reports 102 UTF-8 bytes, but I don't know if it's accurate/that's the right way to count the bytes here. No matter how many bytes, it's really impressive!
Mark S.

1
@MarkS. TIO reports 100 bytes (and 98 chars). I suspect you got caught out by the tab character, which SE displays as 3 spaces (which then gets copied as such). I think I've seen someone use pre tags to avoid that, let me try to fix it.
Ørjan Johansen

@MarkS. Done. Although I suspect that might just confuse that userscript even more.
Ørjan Johansen

10

05AB1E, 8 bytes

Code

ü‚ÒüÃP≠P

Uses the 05AB1E encoding, which gives us the following list of code points:

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

Try it online! or Verify the source code!

Explanation

Since the gcd operator (¿) has a prime code point I had to look for other ways to check 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

What code points does this have in 05AB1E's code page? Can you add them into the answer?
Mr. Xcoder

@Mr.Xcoder added
Adnan

Any reason for Ò over f?
Magic Octopus Urn

10

Husk, 8 bytes

For Truthy inputs it returns a positive integer, for Falsy it returns 0

←▼`Ṡt(ż⌋

Try it online! and Tested on its own codepoints

Uses Husk's codepage

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

Explanation

          -- 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

What is the notation called you use in the explanation for ? I see it on the docs too in the "type" column on the commands page and can't get my head around it so want to look it up so I might be able to learn it.
Jonathan Allan

@JonathanAllan That's the definition of the function in Haskell's syntax. It translates roughly to Ṡ(f,g,x) = f(g(x),x) in more mainstream languages.
Zgarb


Although, when flipped, it becomes `Ṡ g f x = Ṡ f g x = f (g x) x
H.PWiz

1
@JonathanAllan If you join the Husk chatroom, we can try to explain it better there.
Zgarb

5

Japt, 8 7 bytes

äj d¹¥Z

Test it online!

Code points:

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

Explanation

 ä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

Jelly, 11 9 bytes

,Pnælð2\P

Saved 2 bytes thanks to @Jonathan Allan.

Try it online!

Jelly has its own code-page and the codepoints of each character are

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

This tests for non-coprime numbers by checking if lcm(a, b) != a*b. There might be a shorter solution as I just filtered for characters with even codepoints.

Explanation

,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

Genius! This is incredible :O
Mr. Xcoder

, is even so you can do æln,P¥ð2\ for two less. Edit: I dropped the trailing P, make that one less :p)
Jonathan Allan

Oh yeah, swap the arguments even :)
Jonathan Allan

5

TI-BASIC, 38 bytes

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

TI-BASIC is tokenized into one- or two-byte tokens, as listed here.

The trickiest parts of this solution were:

  1. The comma token is a prime number (43), forcing me to surround it with multiples of 43 (in this case the V token, which is 86).

  2. The gcd( token is a large prime number (47881), which means it couldn't be used at all.

The tokens for this program come out to:

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

Explanation

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 bytes

&F.bPiFNP.TtBQQ

Try it here or Check out Test Suite.

This is a collaborative effort between Erik the Outgolfer and Mr. Xcoder. Returns an inconsistent value (non-empty list) for truthy, and the empty list for falsy.


ASCII-values

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

Which share the following factors:

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

Explanation

&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)

Without the requirement, this would've been a 7 5-byte version accomplishing the same task (-2 thanks to FryAmTheEggman):

-1iVt

Explanation

-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)

Out of curiosity, why do you need the Qs at the end?
ETHproductions

@ETHproductions Because .b has variable arities, and using implicit input means it will pick the lowest (1) instead of then intended (2).
Erik the Outgolfer
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.