ไม่มีเพื่อนบ้านที่สำคัญ


33

รับรายการของจำนวนเต็มบวกเอาท์พุทว่าทุกคู่ที่อยู่ติดกันของมันในหุ้นที่เป็นปัจจัยสำคัญ กล่าวอีกนัยหนึ่งเอาท์พุทความจริงถ้าหากไม่มีสองจำนวนเต็มเพื่อนบ้านในรายการเป็นแบบร่วม

ในอีกแง่หนึ่ง: รับรายการจำนวนเต็มบวก[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

รายการจะมีองค์ประกอบอย่างน้อยสององค์ประกอบเสมอ (n ≥ 2)

อย่างไรก็ตาม ...

ความท้าทายนี้ยังมีการ : โคเดอพ้อยท์ในคำตอบของคุณ

ตัวอย่างเช่นprint 2เป็นโปรแกรมที่ถูกต้อง ในฐานะที่เป็นรายการของ Unicode codepoints มันคือ[112 114 105 110 116 32 50]ซึ่งเป็นไปตามเงื่อนไขนี้: 112และ114แบ่งปันปัจจัยที่2 ; และ114และ105แบ่งปันปัจจัย3ฯลฯ

อย่างไรก็ตามไม่mainสามารถเกิดขึ้นได้ในโปรแกรมที่ถูกต้อง (ขออภัย!) ในขณะที่ Unicode codepoints ของmและaคือ109และ97เป็น coprime (โชคดีที่การส่งของคุณไม่จำเป็นต้องเป็นโปรแกรมเต็มรูปแบบ!)

โปรแกรมของคุณไม่ได้รับอนุญาตให้มี codepoint 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
สำหรับทุกคนที่พยายามท้าทายนี้ในการเขียนโปรแกรมภาษาปกตินี้เป็นรายการของตัวอักษรที่มี codepoints สำคัญใน ASCII %)+/5;=CGIOSYaegkmq\DELนี้:
Cristian Lupascu

@Lynn Truthys ต้องสอดคล้องกันไหม?
H.PWiz

1
@ H.PWiz Nope! -
Lynn

ที่จริงผมตั้งใจนี้จะเป็นไปได้สำหรับบางปกติ (ไม่ใช่กอล์ฟ) Langs และฉันรู้สึกมีความหวังเมื่อผมสังเกตเห็นว่าprint 2ถูกต้อง แต่);=aeเป็นที่สำคัญเป็นเรื่องที่ยากจริงๆผมไม่ได้พิจารณาว่า ... ฉันสงสัยว่าสิ่งที่ต้องการ Haskell สามารถ แข่งขัน?
Lynn

ข้อ จำกัด นี้ง่ายกว่าการย้อนกลับของคำถามนี้สมมติว่าไม่มีใครใช้ 0x02 ไบต์ คำถามนั้นได้คำตอบที่ถูกต้อง nongolf ใน Mathematica, โลโก้, Haskell, Python, Perl, TI-BASIC อันนี้มี Haskell อยู่แล้วฉันคิดว่า Mathematica เป็นไปไม่ได้ แต่โลโก้ดูเหมือนจะเป็นไปได้มากถึงแม้ว่าฉันจะยังไม่ได้สร้างวิธีแก้ปัญหา
user202729

คำตอบ:


15

MATL , 14 ไบต์

!TM1*Zdl2$Xdl-

เอาต์พุตนี้เป็นเวกเตอร์คอลัมน์ที่ไม่ว่างเปล่าของจำนวนที่ไม่ใช่ศูนย์เป็นความจริงหรือเวกเตอร์ที่มีรายการศูนย์เป็นอย่างน้อยเป็นเท็จ

  • ลองออนไลน์!

  • ตรวจสอบกรณีทดสอบทั้งหมด รหัสส่วนท้ายมีifสาขาเพื่อทดสอบความจริง / ความผิดพลาด

  • เนื่องจาก MATL ใช้ ASCII ซอร์สโค้ดจึงถูกเข้ารหัสเป็น

    [33 84 77 49 42 90 100 108 50 36 88 100 108 45]
    

    ซึ่งตอบสนองความต้องการ

คำอธิบาย

!     % 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
ขอแสดงความยินดีกับคำตอบที่ไม่เป็นไปตามข้อกำหนดที่ จำกัด - แหล่งที่มา !
Erik the Outgolfer

13

Haskell , 103 100 ไบต์

แก้ไข:

  • -3 ไบต์: ใช้ตัวd<-fzป้องกันเพื่อผสานและย่อสองบรรทัดสุดท้าย

fBoolเป็นหน้าที่หลักซึ่งจะนำรายชื่อของจำนวนเต็มและผลตอบแทนที่

โปรดทราบว่าสองคนแรกԁ(เท่านั้น) คืออักขระ Cyrillic (Komi) Unicode และมีอักขระแท็บก่อนหน้าอักขระแรก

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ด้วยและอาร์กิวเมนต์ดัมมี่ (ฟังก์ชัน Haskell idมีเพียงอักขระที่เหมาะสมเพื่อให้พอดี ที่นี่)
    • การเดินทางของตัวละครเดียวกันเพื่อให้พอดีนอกจากนี้ทั้งสอง=]เป็นไปไม่ได้กับ ASCII ธรรมดาดังนั้นอาร์กิวเมนต์เป็นชื่อที่มี 2 ไบต์อักขระ Unicode CYRILLIC SMALL LETTER KOMI DE (ԁ)ค่า codepoint ซึ่งเหมาะกับทุกคนและ 3*7*61=U+0501[
      • เนื่องจาก codepoint ไม่ได้เป็น (ตัวเลือกที่เล็กที่สุดที่เป็นตัวระบุทางกฎหมายและยังใช้สามไบต์) สิ่งนี้จำเป็นต้องใช้อักขระแท็บแทนการเว้นวรรคก่อน
      • ตัวเลือก ASCII f fz|bf<-fz=zb[bf]fzธรรมดาเจ็ดไบต์อีกต่อไปคือการเปลี่ยนชื่ออาร์กิวเมนต์:
  • zbเวลาสองขัดแย้งรายการเดี่ยวที่มีองค์ประกอบเป็นรายการที่แท้จริงของตัวเลขถูก recursed บนและอาร์กิวเมนต์หุ่นfzจำเป็นเท่านั้นที่จะได้รับzก่อนที่จะฟังก์ชั่นของ=s
    • เมื่อรายการภายในมีอย่างน้อยสององค์ประกอบฟังก์ชั่นzเรียกว่ามีสองคนแรก (ชื่อhและp) และหากผลตอบแทนที่True, zbrecurses หางp:lของรายการ
    • ถ้ารายการภายในมีน้อยกว่าสององค์ประกอบผลตอบแทนzb Trueเนื่องจาก=ความต้องการที่จะตามมาด้วยอักขระzวิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้การเรียกร้องของที่ฟังก์ชั่นที่ตัวเองเป็นที่รู้จักกันกลับมาzTrue
  • zใช้เวลาสองข้อโต้แย้งและคำนวณตัวหารร่วมที่ยิ่งใหญ่ที่สุดของพวกเขาซ้ำโดยใช้การลบ (การหารจำนวนเต็มอื่น ๆ ที่เกี่ยวข้องหรือฟังก์ชั่น gcd ไม่สามารถใช้งานได้) กลับมาTrueถ้ามันมากกว่าหนึ่ง
    • การเรียกซ้ำจะสิ้นสุดลงเมื่ออาร์กิวเมนต์แรกคืออาร์กิวเมนต์0ที่สองคือ gcd ในบรรทัดนี้อาร์กิวเมนต์ที่สองนั้นมีชื่อzเช่นกัน ตัวละคร1นั้นน่าอึดอัดใจที่นี่ดังนั้นจึงz^0ถูกใช้เพื่อให้ได้อันดับหนึ่ง
    • มิฉะนั้นถ้าอาร์กิวเมนต์แรกfมีขนาดเล็กกว่าสองอาร์กิวเมนต์จะfzถูกสลับและเรียกzซ้ำ
    • มิฉะนั้นอาร์กิวเมนต์ที่มีขนาดเล็กจะถูกหักออกจากค่าที่มีขนาดใหญ่กว่านั้นจะเรียกใช้zซ้ำอีกครั้ง (เช่นการแลกเปลี่ยนอาร์กิวเมนต์แม้ว่าจะเป็นการหลีกเลี่ยงวงเล็บ)

2
ฉันรู้ว่าต้องมีภาษาที่ไม่ใช่กอล์ฟที่สามารถดึงออกมาได้!
ลินน์

2
@Lynn มันช่วย Haskell ในความท้าทายแบบนี้จริง ๆ ว่ามันมีส่วนย่อยทางไวยากรณ์ที่แสดงออกได้อย่างชัดเจนด้วยโทเค็นอักขระเพียงตัวเดียว ซึ่งประมาณครึ่งทางกับภาษากอล์ฟฉันเดา
Ørjan Johansen

เพราะไซริลลิกนี่เป็น 100 ไบต์จริงหรือ ผู้ใช้Code Code Graduation ผู้ใช้รายงาน 102 UTF-8 ไบต์ แต่ฉันไม่รู้ว่ามันแม่นยำหรือเป็นวิธีที่ถูกต้องในการนับจำนวนไบต์ที่นี่ ไม่ว่าจะมีกี่ไบท์มันช่างน่าประทับใจจริงๆ!
มาร์คเอส

1
@MarkS TIO รายงาน 100 ไบต์ (และ 98 ตัวอักษร) ฉันสงสัยว่าคุณโดนแท็บอักขระซึ่ง SE แสดงเป็นช่องว่าง 3 ช่อง (ซึ่งจะถูกคัดลอกเช่นนั้น) ฉันคิดว่าฉันเห็นใครบางคนใช้แท็กล่วงหน้าเพื่อหลีกเลี่ยงปัญหานั้นให้ฉันลองแก้ไข
Ørjan Johansen

@MarkS เสร็จสิ้น แม้ว่าฉันสงสัยว่าอาจเพียงแค่สับสน usersScript ที่มากขึ้น
Ørjan Johansen

10

05AB1E , 8 ไบต์

รหัส

ü‚ÒüÃP≠P

ใช้การเข้ารหัส05AB1Eซึ่งให้รายการรหัสจุดต่อไปนี้แก่เรา:

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

ลองออนไลน์! หรือยืนยันซอร์สโค้ด!

คำอธิบาย

เนื่องจากโอเปอเรเตอร์ gcd ( ¿) มีจุดรหัสเฉพาะฉันจึงต้องหาวิธีอื่น ๆ ในการตรวจสอบการมีส่วนร่วม:

ü‚          # 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?
Magic Octopus Urn

10

Husk , 8 ไบต์

สำหรับอินพุต Truthy จะส่งคืนจำนวนเต็มบวกสำหรับ Falsy ที่คืนค่า 0

←▼`Ṡt(ż⌋

ลองออนไลน์! และทดสอบบน codepoints ของตัวเอง

ใช้เพจของ 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 นั่นเป็นนิยามของฟังก์ชันในไวยากรณ์ของ Haskell มันแปลอย่างคร่าวṠ(f,g,x) = f(g(x),x)ๆ เป็นภาษาหลักมากกว่า
Zgarb


แม้ว่าเมื่อพลิกแล้วมันจะกลายเป็น`Ṡ g f x = Ṡ f g x = f (g x) x
H.PWiz

1
@JanathanAllan หากคุณเข้าร่วมห้องสนทนา Huskเราสามารถพยายามอธิบายให้ดีขึ้นได้
Zgarb

5

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

ที่บันทึกไว้ 2 ไบต์ขอบคุณที่ @ โจนาธานอัลลัน

ลองออนไลน์!

เจลลี่มีหน้ารหัสของตัวเองและ codepoints ของตัวละครแต่ละตัวคือ

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

การทดสอบนี้สำหรับตัวเลขที่ไม่ใช่ coprime 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

Genius! นี่เป็นเรื่องเหลือเชื่อ: O
Mr. Xcoder

,แม้กระทั่งเพื่อให้คุณสามารถทำæln,P¥ð2\สองน้อย แก้ไข: ฉันทิ้งส่วนท้ายPให้น้อยลง: p)
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-พื้นฐานคือ tokenized เข้าไปในหนึ่งหรือสองไบต์ราชสกุลที่ระบุไว้ที่นี่

ส่วนที่ยากที่สุดของการแก้ปัญหานี้คือ:

  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

ลองที่นี่หรือตรวจสอบชุดทดสอบ

นี้เป็นความร่วมมือระหว่างเอริก Outgolferและนาย 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 ไบต์บรรลุงานเดียวกัน (-2 ขอบคุณที่FryAmTheEggman ):

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

ด้วยความอยากรู้อยากเห็นทำไมคุณถึงต้องการQs ที่สุด?
ETHproductions

@ETHproductions เนื่องจาก.bมีตัวแปรที่แตกต่างกันและการใช้อินพุตโดยนัยหมายความว่ามันจะเลือกต่ำสุด (1) แทนที่จะตั้งใจไว้แล้ว (2)
Erik the Outgolfer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.