ไม่มีเพื่อนบ้านที่อยู่ร่วมนายกรัฐมนตรี

Lynn 08/14/2017. 7 answers, 603 views
restricted-source code-golf array-manipulation decision-problem primes

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

ในอีกแง่หนึ่ง: ได้รับรายชื่อของจำนวนเต็มบวก [a1 a2 … an] , ส่งออกว่า

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

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

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

ความท้าทายนี้ยัง : codepoints ในคำตอบของคุณ (โค้ดใด ๆ ที่อาจมีอยู่ใน) ต้องเป็นไปตามเงื่อนไขที่โปรแกรมของคุณตรวจสอบ

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

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

โปรแกรมของคุณไม่ได้รับอนุญาตให้มี 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 

นี่เป็น : รหัสที่สั้นที่สุดในไบต์จะชนะ

5 Comments
4 w0lf 08/13/2017
นี่คือรายการอักขระที่มี codepoints ที่สำคัญใน ASCII: %)+/5;=CGIOSYaegkmq\DEL สำหรับทุกคนที่พยายามใช้ความท้าทายนี้ในภาษาการเขียนโปรแกรมปกติ
Mr. Xcoder 08/13/2017
ดีหลามจะออก input() , sys , def และ lambda เป็นสิ่งต้องห้าม
2 Luis Mendo 08/13/2017
@Lynn สำหรับฉันความต้องการแหล่งที่มาที่ จำกัด ควรอยู่ในคำอธิบายคำท้าทายในตอนต้นไม่ใช่ส่วน Rules ฉันอ่านส่วนนี้ว่า "รายละเอียดเพิ่มเติม" (ซึ่งจำเป็นต้องได้รับการพิจารณา แต่อย่างใดซึ่งฉันไม่คาดหวังว่าจะเปลี่ยนแปลงความท้าทายทั้งหมด) ความท้าทายที่ยิ่งใหญ่โดยทาง
1 Lynn 08/13/2017
@ H.PWiz ไม่! -
1 miles 08/13/2017
เรายกเว้นอักขระที่มี codepoint เป็น 0 เนื่องจากอินพุตเป็นจำนวนเต็มบวกเพียงอย่างเดียวหรือไม่?

7 Answers


Luis Mendo 08/13/2017.

MATL , 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 
1 comments
3 Erik the Outgolfer 08/13/2017
ขอแสดงความยินดีกับคำตอบที่ตอบสนองความต้องการของ แหล่งที่มาที่ จำกัด !

Adnan 08/13/2017.

05AB1E , 8 ไบต์

รหัส

ü‚ÒüÃP≠P 

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

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 
2 comments
Mr. Xcoder 08/13/2017
รหัสจุดนี้มีอะไรในหน้าโค้ดของ 05AB1E? คุณสามารถเพิ่มลงในคำตอบได้หรือไม่?
Adnan 08/13/2017
@ Mr.Xcoder เพิ่ม

H.PWiz 08/13/2017.

มูล สัตว์ 8 ไบต์

สำหรับอินพุต Truthy จะให้ค่าเป็นจำนวนเต็มบวกสำหรับ False จะส่งกลับค่าเป็น 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 
5 comments
Jonathan Allan 08/13/2017
สัญกรณ์ที่เรียกว่าคุณใช้ในคำอธิบายสำหรับ คืออะไร? ฉันเห็นมันในเอกสารมากเกินไปใน "ประเภท" คอลัมน์ในหน้าคำสั่งและไม่สามารถรับหัวของฉันรอบเพื่อต้องการดูมันขึ้นดังนั้นฉันอาจจะสามารถเรียนรู้ได้
Zgarb 08/13/2017
@ JonathanAllan นั่นคือนิยามของฟังก์ชัน ในไวยากรณ์ของ Haskell มันแปลไปประมาณ Ṡ(f,g,x) = f(g(x),x) ในภาษาหลักมากขึ้น
H.PWiz 08/13/2017
แม้ว่าเมื่อพลิกมันกลายเป็น `Ṡ g f x = Ṡ f g x = f (g x) x
1 Zgarb 08/13/2017
@JonathanAllan ถ้าคุณเข้าร่วม ห้องสนทนาของ Husk เราสามารถลองอธิบายได้ดีขึ้นที่นั่น

miles 08/13/2017.

วุ้น 11 9 ไบต์

,Pnælð2\P 

บันทึก 2 ไบต์ไว้ @ Jonathan Allan

ทดลองใช้แบบออนไลน์!

เยลลี่มี โค้ดเพจ ของตัวเองและ 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 อาจมีวิธีแก้ปัญหาที่สั้นกว่าเนื่องจากฉันเพิ่งกรองตัวอักษรที่มี codepoints

คำอธิบาย

,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 
3 comments
Mr. Xcoder 08/13/2017
Genius! นี้เป็นที่น่าทึ่ง: O
Jonathan Allan 08/13/2017
, แม้กระทั่งคุณสามารถทำ æln,P¥ð2\ for two less. แก้ไข: ฉันลดลง P , ให้ที่หนึ่งน้อย: p)
Jonathan Allan 08/13/2017
Oh yeah, แลกเปลี่ยนข้อโต้แย้งได้ :)

Ørjan Johansen 08/14/2017.

Haskell , 103 ไบต์

f คือฟังก์ชันหลักซึ่งใช้เวลาจำนวนเต็มและส่งกลับค่า Bool

โปรดทราบว่าสองตัวแรกคืออักขระ Unicode โคริลลิก (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 

ทดลองใช้แบบออนไลน์! หรือ ทดสอบด้วยตัวเอง

มันทำงานอย่างไร

  • f คือฟังก์ชันหลัก (เนื่องจากค่า ASCII สำคัญของ ) ทำให้วงเล็บมากขึ้นอึดอัดใจในการใช้วงเล็บกว่า) และโทร zb กับที่และอาร์กิวเมนต์ dummy (Haskell id ฟังก์ชันเกิดขึ้นมีเพียง ขวาเพื่อให้พอดีกับที่นี่)
    • อักขระ ASCII แบบธรรมดาจะไม่สามารถใช้ร่วมกับ ASCII ได้ดังนั้นอาร์กิวเมนต์จะมีชื่อเป็นอักขระแบบ Unicode ขนาด 2 ไบต์ CYRILLIC SMALL LETTER KOMI DE (ԁ) , codepoint value 3*7*61=U+0501 , ซึ่งเหมาะกับทุกคนและ [
      • เนื่องจาก codepoint ไม่เป็นไปได้ (ตัวเลือกที่เล็กที่สุดที่เป็นตัวระบุตามกฎหมายและยังใช้ไบต์สามตัว) จำเป็นต้องใช้อักขระแท็บแทนการเว้นวรรคก่อนหน้านี้
      • ตัวเลือก ASCII แบบธรรมดาอีกเจ็ดไบต์คือการเปลี่ยนชื่ออาร์กิวเมนต์: f fz|bf<-fz=zb[bf]fz
  • zb ใช้เวลาสองอาร์กิวเมนต์รายการ singleton ที่มี element เป็นรายการที่แท้จริงของตัวเลขที่ถูก recursed และ argument fmy dummy ที่ต้องการเพียงเพื่อให้ได้ z ก่อนฟังก์ชัน = s
    • เมื่อรายการด้านในมีอย่างน้อยสององค์ประกอบฟังก์ชัน z เรียกด้วยสองตัวแรก (ชื่อ h และ p ) และถ้าค่านี้ส่งค่า True ค่า zb คำนวณค่าใหม่ในส่วนหาง p:l ของรายการ
    • ถ้ารายการด้านในมีน้อยกว่าสององค์ประกอบ zb กลับค่า True เนื่องจาก = จำเป็นต้องตามด้วยอักขระ z วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้การเรียกฟังก์ชัน z ที่ตัวเองเป็นที่รู้จักกลับ True
  • z ใช้เวลาสองอาร์กิวเมนต์และ recursively คำนวณหารร่วมกันมากที่สุดของพวกเขาโดยใช้การลบ (ทุกส่วนที่เกี่ยวข้องอื่น ๆ จำนวนเต็มหรือฟังก์ชัน gcd ไม่สามารถใช้งานได้) กลับ True ถ้ามากกว่าหนึ่ง
    • การทับทิมสิ้นสุดลงเมื่ออาร์กิวเมนต์แรกเป็น 0 โดยมีอาร์กิวเมนต์ที่สองเป็น gcd ในบรรทัดนี้อาร์กิวเมนต์ที่สองมีชื่อว่า z ตัวอักษร 1 แย่มากที่นี่ดังนั้น z^0 จะถูกใช้เพื่อให้ได้หมายเลขหนึ่ง
    • มิฉะนั้นถ้าอาร์กิวเมนต์แรก f มีขนาดเล็กกว่า fz ที่สองจะถูกเปลี่ยนและ z recurses
    • มิฉะนั้นอาร์กิวเมนต์ที่มีขนาดเล็กจะถูกลบออกจากขนาดใหญ่จากนั้น z recurses (เช่นการสลับอาร์กิวเมนต์แม้ว่าจะเป็นการหลีกเลี่ยงวงเล็บ)
1 comments
1 Lynn 08/14/2017
ฉัน knew ต้องมีบางภาษาที่ไม่ใช่กอล์ฟที่สามารถดึงมันออก!

ETHproductions 08/13/2017.

Japt , 8 7 bytes

ä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 

Erik the Outgolfer 08/14/2017.

Pyth , 15 bytes

&F.bPiFNP.TtBQQ 

Try it here หรือ Try the Test Suite.

นี่คือความร่วมมือระหว่าง Erik Outgolfer และ Mr. 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) 
1 comments
FryAmTheEggman 08/13/2017
ถ้ามันช่วยให้คุณได้ใกล้ชิดมากขึ้นโปรแกรมที่สั้นที่สุดที่ฉันสามารถมากับที่ไม่ได้รวมข้อ จำกัด คือ -1iVt

Related questions

Hot questions

Language

Popular Tags