ฉันมีแฝดที่มีเศษเหลือเหรอ?


17

เรากำหนดเป็นรายการของที่เหลือของการแบ่งยุคลิดของโดย , 3 , 5และ7Rnn2357

ได้รับจำนวนเต็มn0คุณต้องคิดออกถ้ามีจำนวนเต็ม0<k<210ดังกล่าวว่าRn+kคือการเปลี่ยนแปลงของR_nRn

ตัวอย่าง

ตรงตามเกณฑ์สำหรับn=8เนื่องจาก:

  • เรามีR8=(0,2,3,1)
  • สำหรับk=44เรามีRn+k=R52=(0,1,2,3)ซึ่งเป็นการเปลี่ยนรูปของR8

ไม่เป็นไปตามเกณฑ์สำหรับn=48เนื่องจาก:

  • เรามีR48=(0,0,3,6)
  • จำนวนเต็มที่น้อยที่สุดk>0ซึ่งRn+kคือการเปลี่ยนแปลงของR48คือk=210 (นำไปสู่R258=(0,0,3,6)เช่นกัน)

กฎระเบียบ

  • คุณอาจส่งออกค่าความจริงถ้าkมีอยู่และค่าที่เป็นเท็จเป็นอย่างอื่นหรือสองค่าที่แตกต่างและสอดคล้องกันที่คุณเลือก
  • นี่คือรหัสกอล์ฟ

เปรย

คุณจำเป็นต้องคำนวณkจริง ๆหรือไม่? อาจจะ หรืออาจจะไม่

กรณีทดสอบ

ค่าบางค่าของnซึ่งkมีอยู่:

3, 4, 5, 8, 30, 100, 200, 2019

ค่าบางค่าของnซึ่งkไม่มีอยู่:

0, 1, 2, 13, 19, 48, 210, 1999

คำตอบ:


20

R , 63 59 ไบต์

s=scan()%%c(2,3,5,7);i=which(s<c(0,2,3,5));any(s[i]-s[i-1])

ลองออนไลน์!

-4 ไบต์ขอบคุณ Giuseppe

(คำอธิบายมีสปอยเลอร์เป็นวิธีการแก้ปัญหาโดยไม่ต้องคำนวณ .)k

คำอธิบาย: Let 'เป็นรายชื่อของส่วนที่เหลือ สังเกตข้อ จำกัด ที่ s [1] <2, s [2] <3, s [3] <5 และ s [4] <7 โดยทฤษฎีส่วนที่เหลือจีนมี iff อยู่มีการเปลี่ยนแปลงของแตกต่างจากsซึ่งตรวจสอบข้อ จำกัด ในทางปฏิบัติสิ่งนี้จะถูกตรวจสอบหากเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้ได้รับการยืนยัน:sk skss

  • s [2] <2 และ s [2]! = s [1]
  • s [3] <3 และ s [3]! = s [2]
  • s [4] <5 และ s [4]! = s [3]

คุณช่วยอธิบายได้หรือไม่ว่าทำไมการเรียงสับเปลี่ยนจึงจำเป็นต้องแตกต่างจาก ? s
dfeuer

1
@ pdfeuer มันเป็นผลมาจากทฤษฎีบทส่วนที่เหลือของจีน; ฉันเพิ่มลิงค์ หากสองจำนวนเต็มมีเศษโมดูโลที่เหมือนกัน 2, 3, 5 และ 7 (โดยไม่มีการเปลี่ยนแปลง) จากนั้นจำนวนเต็มสองจำนวนนั้นเท่ากับโมดูโล 2 * 3 * 5 * 7 = 210
Robin Ryder

8

Haskell , 69 ไบต์

ขึ้นอยู่กับทฤษฎีส่วนที่เหลือของจีน

m=[2,3,5,7]
f x|s<-mod x<$>m=or[m!!a>b|a<-[0..2],b<-drop a s,s!!a/=b]

ลองออนไลน์!


4
จริงๆแล้วชื่องานของฉันสำหรับความท้าทายนี้คือ"ฉันมีคู่จีนหรือไม่" :)
Arnauld



5

C # (Visual C # Interactive Compiler) , 125 42 38 36 ไบต์

n=>n%7<5&5<n%35|n%5<3&3<n%15|-~n%6>3

พอร์ตโดยตรงของคำตอบของ @ xnor ซึ่งอิงจากโซลูชันของ @ RobinRyder

บันทึกแล้ว 4 ไบต์ขอบคุณ @ Ørjan Johansen!

บันทึกอีก 2 รายการขอบคุณ @Arnauld!

ลองออนไลน์!


1
ฉันพบความหลากหลายที่เชื่อมโยงกับภาษาของ xnor เท่านั้น แต่มีประโยชน์กับสิ่งนี้: 38 ไบต์
Ørjan Johansen

1
ไม่ได้เป็น-~n%6/4>0เพียงแค่-~n%6>3?
Arnauld

BTW นี้เป็นพูดได้หลายภาษา JavaScript
Arnauld

4

Python 2 , 41 ไบต์

lambda n:n%5!=n%7<5or n%3!=n%5<3or-~n%6/4

ลองออนไลน์!

ใช้ลักษณะเดียวกับโรบินไรเดอร์ การตรวจสอบจะสั้นลงไปn%2!=n%3<2 -~n%6/4การเขียนเงื่อนไขสามข้อนั้นสั้นกว่าการเขียนเงื่อนไขทั่วไป:

46 ไบต์

lambda n:any(n%p!=n%(p+1|1)<p for p in[2,3,5])

ลองออนไลน์!




2

ภาษา Wolfram (Mathematica) , 56 ไบต์

Or@@(Min[s-#]>0&/@Rest@Permutations@Mod[#,s={2,3,5,7}])&

ลองออนไลน์!

ค้นหาพีชคณิตที่ไม่ใช่ข้อมูลเฉพาะตัวของส่วนที่เหลือของโมดูล่าอินพุต, 3, 5, 7 และตรวจสอบว่ามีสิ่งใดอยู่ด้านล่าง{2,3,5,7}ในแต่ละพิกัด โปรดทราบว่าเป็นOr@@{}False




1

PHP ,81 78 72 ไบต์

while($y<3)if($argn%($u='235'[$y])!=($b=$argn%'357'[$y++])&$b<$u)die(T);

แจ๊สใน@Robin ไรเดอร์คำตอบ การป้อนข้อมูลผ่านทางSTDINเอาท์พุทคือ'T'ถ้าความจริงและว่างเปล่า''ถ้าเป็นเท็จ

$ echo 3|php -nF euc.php
T
$ echo 5|php -nF euc.php
T
$ echo 2019|php -nF euc.php
T
$ echo 0|php -nF euc.php

$ echo 2|php -nF euc.php

$ echo 1999|php -nF euc.php

ลองออนไลน์!

หรือ 73 ไบต์ด้วย1หรือ0ตอบกลับ

while($y<3)$r|=$argn%($u='235'[$y])!=($b=$argn%'357'[$y++])&$b<$u;echo$r;

$ echo 2019|php -nF euc.php
1
$ echo 1999|php -nF euc.php
0

ลองใช้ออนไลน์ (ทุกกรณีทดสอบ)!

คำตอบเดิม 133 127 ไบต์

function($n){while(++$k<210)if(($r=function($n){foreach([2,3,5,7]as$d)$o[]=$n%$d;sort($o);return$o;})($n+$k)==$r($n))return 1;}

ลองออนไลน์!



1

05AB1E , 16 ไบต์

Ƶ.L+ε‚ε4Åp%{}Ë}à

ลองมันออนไลน์หรือตรวจสอบกรณีทดสอบทั้งหมด

คำอธิบาย:

Ƶ.L          # Create a list in the range [1,209] (which is k)
   +         # Add the (implicit) input to each (which is n+k)
    ε        # Map each value to:
            #  Pair it with the (implicit) input
      ε      #  Map both to:
       4Åp   #   Get the first 4 primes: [2,3,5,7]
          %  #   Modulo the current number by each of these four (now we have R_n and R_n+k)
           { #   Sort the list
           #  After the inner map: check if both sorted lists are equal
           # After the outer map: check if any are truthy by taking the maximum
             # (which is output implicitly as result)

ดู 05AB1E นี้เคล็ดลับของฉัน (ส่วนวิธีการบีบอัดจำนวนเต็มขนาดใหญ่? )จะเข้าใจว่าทำไมเป็นƵ.209



1

เยลลี่ 15 ไบต์

8ÆR©PḶ+%Ṣ¥€®ċḢ$

ลองออนไลน์!

ฉันแน่ใจว่ามีคำตอบนักกอล์ฟ ฉันตีความค่าความจริงว่าเป็นอะไรที่ไม่เป็นศูนย์ดังนั้นนี่คือจำนวนค่าที่เป็นไปได้ของ k ถ้ามันต้องเป็นค่าที่ต่างกันสองค่า

คำอธิบาย

8ÆR             | Primes less than 8 [2,3,5,7]
   ©            | Copy to register
    P           | Product [210]
     Ḷ          | Lowered range [0, 1, ..., 208, 209]
      +         | Add to input
         ¥€     | For each of these 210 numbers...
       %   ®    |   Modulo 2, 3, 5, 7
        Ṣ       |   And sort
            ċḢ$ | Count how many match the first (input) number’s remainders

1
ทุกอย่างเกี่ยวกับความจริงกับความเท็จ การใช้คำจำกัดความที่เห็นด้วยของ meta ของความจริงและความเท็จ (อย่างมีประสิทธิภาพ "สิ่งที่ภาษาของ if-else สร้างทำถ้ามีอย่างใดอย่างหนึ่ง) ศูนย์คือความเท็จและไม่ใช่ศูนย์มีความจริง ( ?คือ if-else สร้างใน Jelly; คำถามที่ยากขึ้น).
Jonathan Allan

โอ้และคุณสามารถรับค่าที่แตกต่างโดยไม่ต้องเสียค่าใช้จ่ายḢe$หากคุณต้องการ :)
Jonathan Allan

@Janathan ทุกคนใช่แน่นอนขอบคุณ :)
Nick Kennedy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.