เรียงตามลำดับ


24

บางครั้งจะผล็อยหลับไปผมจะนับให้สูงที่สุดเท่าที่จะทำได้ในขณะที่กระโดดข้ามตัวเลขที่ไม่ได้ตารางฟรี ฉันรู้สึกตื่นเต้นเล็กน้อยเมื่อฉันข้ามตัวเลขหลาย ๆ ตัวในแถว - ตัวอย่างเช่น48,49,50ทั้งหมดไม่ได้เป็นรูปสี่เหลี่ยมจัตุรัส (48 หารด้วย 2 ^ 2, 49 โดย 7 ^ 2 และ 50 โดย 5 ^ 2)

สิ่งนี้ทำให้ฉันสงสัยเกี่ยวกับตัวอย่างแรกสุดของตัวเลขที่อยู่ติดกันหารด้วยตัวหารบางส่วนตามอำเภอใจ

อินพุต

การป้อนข้อมูลเป็นรายการสั่งซื้อa = [a_0, a_1, ...]ของจำนวนเต็มบวกอย่างเคร่งครัดที่มีองค์ประกอบอย่างน้อย 1

เอาท์พุต

เอาท์พุทเป็นจำนวนเต็มบวกที่เล็กที่สุดnกับทรัพย์สินที่a_0แบ่งn, a_1แบ่งn+1และอื่น ๆ โดยทั่วไปแบ่งa_k n+kหากไม่มีnอยู่พฤติกรรมของฟังก์ชัน / โปรแกรมจะไม่ถูกกำหนด

กรณีทดสอบ

[15] -> 15
[3,4,5] -> 3
[5,4,3] -> 55
[2,3,5,7] -> 158
[4,9,25,49] -> 29348
[11,7,5,3,2] -> 1518

เกณฑ์การให้คะแนน

นี่คือ ; ผลลัพธ์ที่สั้นที่สุด (ต่อภาษา) จะได้รับสิทธิ์ในการคุยโม้ ช่องโหว่ปกติไม่รวมอยู่


ที่เกี่ยวข้อง
alephalpha

คำตอบ:




5

MATL 11 ไบต์

`Gf@q+G\a}@

ลองออนไลน์!

`           % Do ....
 Gf         %   Convert input to [1,2,...,]
   @q+      %   Add current iteration index minus one, to get [n, n+1, ....]
      G\    %   Elementwise mod([n,n+1,...],[a_0,a_1,...])
        a   % ...while any of the modular remainders is nonzero.
         }  % Finally:
          @ %   Output the iteration index.

ไม่ได้รับการปรับให้เหมาะสมกับความเร็วอย่างแน่นอน ... ผู้ทดสอบที่ใหญ่ที่สุดใช้เวลาเต็มนาทีโดยใช้ MATL และประมาณ 0.03s บน MATLAB MATLAB มีความเป็นไปได้เล็กน้อยที่มีค่าใช้จ่ายมากกว่า


อาฉันมีn:q`QtG\a]1)12 ไบต์ แต่n:เห็นได้ชัดว่าเหมือนกันfที่นี่ ฉันมักจะลืมไปเสมอดังนั้นคุณสามารถเพิ่มมันเป็นทางเลือก 11 byter
Giuseppe

1
@Giuseppe แย่มากfq`QtG\a}@ส่งคืนสำเนาของข้อมูลที่ไม่เกี่ยวข้อง
Sanchises

5

JavaScript, 42 40 ไบต์

จะโยนข้อผิดพลาดการเรียกซ้ำหากไม่มีวิธีแก้ปัญหา (หรือวิธีแก้ปัญหาใหญ่เกินไป)

a=>(g=y=>a.some(x=>y++%x)?g(++n):n)(n=1)

บันทึก 2 ไบต์ด้วยตัวชี้จากRick Hitchcock


ลองมัน

ป้อนรายการตัวเลขคั่นด้วยเครื่องหมายจุลภาค

o.innerText=(f=
a=>(g=y=>a.some(x=>y++%x)?g(++n):n)(n=1)
)(i.value=[5,4,3]);oninput=_=>o.innerText=f(i.value.split`,`.map(eval))
<input id=i><pre id=o>


วิธีการที่ดี แต่ล้มเหลวโดยเกินขีด จำกัด [4,9,25,49]ของการเรียกซ้ำด้วยเช่น
Chas Brown

1
@ChasBrown เพื่อจุดประสงค์ในการเล่นโค๊ดกอล์ฟเราอาจถือว่ามีหน่วยความจำไม่สิ้นสุด
Shaggy

ฉันคิดว่าสิ่งนี้จะทำงานได้ 38 ไบต์: (a,y=n=0)=>a.some(x=>y++%x)?f(a,++n):n
Rick Hitchcock

Oo เป็นคนดี @RickHitchcock - ขอบคุณ อย่าลืมf=นะ
ขนดก

อ่าแน่นอน ขนาด 40 ไบต์
Rick Hitchcock




3

ทำความสะอาด 61 ไบต์

import StdEnv
$l=hd[n\\n<-[1..]|and[i/e*e==i\\i<-[n..]&e<-l]]

ลองออนไลน์!


2
ฉันคิดว่าคุณต้องการ[1..]แทนที่จะ[0..]หลีกเลี่ยงการแสดง0ผลเป็นจำนวนเต็มบวกสำหรับรายการเดี่ยว
Laikoni

@Laikoni ขอบคุณคงที่
Οurous

3

Pyth , 11 ไบต์

f!s.e%+kTbQ 

ลองออนไลน์!


f!s.e%+kTbQ         Full program - inputs list from stdin and outputs to stdout
f                   First number T such that
   .e     Q         The enumerated mapping over the Input Q
      +kT           by the function (elem_value+T)
     %   b          mod (elem_index)
 !s                 has a false sum, i.e. has all elements 0

คุณต้องการ2ที่สิ้นสุดหรือไม่ ฉันแน่ใจว่าจะมีการบันทึกเพิ่มเติมที่นี่ แต่ฉันไม่รู้จัก Pyth
ขนปุย

@Shaggy และ @Giuseppe คุณทั้งคู่ถูกต้องและการยุติการ2แก้ไขช่วยแก้ปัญหาได้
Dave

2

J , 23 ไบต์

[:I.0=]+/@:|"1#]\[:i.*/

ลองออนไลน์!


ดี ข้อเท็จจริงทางคณิตศาสตร์ที่ช่วยให้คุณสามารถตรวจสอบได้ถึงผลิตภัณฑ์ของปัจจัยการผลิตเท่านั้นคืออะไร เราจะรู้ได้อย่างไรว่าไม่มีวิธีแก้ปัญหานั้น นอกจากนี้เราI.จะทราบได้อย่างไรว่าจะให้ผลลัพธ์ 1 รายการเท่านั้น เป็นไปได้ไหมที่มีหลายอย่าง?
Jonah

1
@Jonah - ฉันไม่รู้ว่ามันใช้งานได้เสมอหรือเปล่า การทดสอบทั้งหมดที่ฉันทำอยู่ในขีด จำกัด เหล่านี้
Galen Ivanov

2

R , 51 ไบต์

function(l){while(any((F+1:sum(l|1))%%l))F=F+1
F+1}

ลองออนไลน์!

การใช้anyพ่นkคำเตือนเกี่ยวกับการแปลงส่อไปlogicalซึ่งkเป็นค่าตอบแทน



@plannapus ฉันคิดว่ามันน่าเสียดาย แต่มันล้มเหลวl=c(15)เพราะseq(l)==1:lในกรณีนั้น seqน่ารำคาญแบบนั้น!
จูเซปเป้

แน่นอนแล้วการบังคับseq_alongใช้นานเกินไป
plannapus

ดังนั้น แต่ใช้sumแทนการanyกำจัดคำเตือนเหล่านั้น FYI
plannapus


2

APL (Dyalog Unicode) , 24 23 22 ไบต์

{∨/×⍺|⍵+⍳⍴⍺:⍺∇⍵+1⋄⍵}∘1

ลองออนไลน์!

ในทางเทคนิคนี่เป็นฟังก์ชั่นโดยปริยาย ฉันต้องทำอย่างนั้นเนื่องจากอินพุตที่อนุญาตเท่านั้นคือรายการของจำนวนเต็ม ใช้⎕IO←0(การจัดทำดัชนี 0)

เป็นที่น่าสังเกตว่าฟังก์ชั่นจะหมดเวลาหากnไม่มี

ขอบคุณ @ngn และ @ H.PWiz ละ 1 ไบต์

อย่างไร?

{∨/×⍺|⍵+⍳≢⍺:⍺∇⍵+1⋄⍵}∘1  Main function. ⍺=input; ⍵=1.
{                   }∘1  Using 1 as right argument and input as left argument:
           :             If
        ⍳≢⍺              The range [0..length(⍺)]
      ⍵+                 +⍵ (this generates the vector ⍵+0, ⍵+1,..., ⍵+length(⍺))
    ⍺|                   Modulo 
   ×                     Signum; returns 1 for positive integers, ¯1 for negative and 0 for 0.
 ∨/                      Logical OR reduction. Yields falsy iff the elements of the previous vector are all falsy.
            ⍺∇⍵+1        Call the function recursively with ⍵+1.
                 ⋄⍵      Else return ⍵.


1

Japt, 10 ไบต์

จะส่งออกในที่สุด undefinedหากไม่มีวิธีแก้ไขหากไม่ทำให้เบราว์เซอร์ของคุณเสียหายก่อน

@e_X°vZÃ}a

ลองมัน


คำอธิบาย

               :Implicit input of array U
@       }a     :Loop and output the first integer X that returns true.
 e_    Ã       :For every element Z in U
   X°          :X, postfix increcemnted
     vZ        :Is it divisible by Z?



1

ML มาตรฐาน (MLton) , 96 ไบต์

open List;fun$n% =if all hd(tabulate(length%,fn i=>[1>(n+i)mod nth(%,i)]))then n else$(n+1)%;$1;

ลองออนไลน์!

Ungolfed:

open List
fun f n l = 
    if all (fn x=>x)
           (tabulate ( length l
                     , fn i => (n+i) mod nth(l,i) = 0))
    then n 
    else f (n+1) l
val g = f 1

ลองออนไลน์! เริ่มต้นด้วยn=1การfเพิ่มฟังก์ชั่นnจนกว่าallจะมีการปฏิบัติตามเงื่อนไขในกรณีที่nจะถูกส่งกลับ

tabulate(m,g)กับจำนวนเต็มบางmและฟังก์ชั่นสร้างรายการg [g 0, g 1, ..., g m]ในสภาพที่เราtabulateเรียกว่ามีความยาวของรายการการป้อนข้อมูลlและการทำงานที่ตรวจสอบไม่ว่าจะเป็นiองค์ประกอบของ TH แบ่งl n+iนี่เป็นรายการของ booleans ดังนั้นallด้วยฟังก์ชันเอกลักษณ์fn x=>xจะตรวจสอบว่าองค์ประกอบทั้งหมดเป็นจริงหรือไม่

ผมพบว่าเคล็ดลับการเล่นกอล์ฟที่ดีที่จะลดการทำงานของตัวตนในกรณีนี้โดยสี่ไบต์: แทนที่จะแลมบ์ดา(fn x=>x)ที่สร้างในฟังก์ชั่นhdถูกนำมาใช้ซึ่งจะส่งกลับองค์ประกอบแรกของรายการและ bools ผลในการtabulateถูกห่อใน[และ]เพื่อ สร้างรายการเดี่ยว


1

PowerShell , 65 62 ไบต์

for(){$o=1;$i=++$j;$args[0]|%{$o*=!($i++%$_)};if($o){$j;exit}}

ลองออนไลน์!

PowerShell ไม่มีสิ่งใดเทียบเท่าanyหรือsomeคล้ายคลึงกันดังนั้นเราจึงต้องการแนวทางที่แตกต่างออกไปเล็กน้อย

สิ่งนี้จะรับอินพุต$args[0]เป็นอาร์เรย์จากนั้นเข้าสู่forวงวนไม่สิ้นสุด ย้ำเราแต่ละชุด$oจะเป็น1(อธิบายในภายหลัง) และตั้งให้เป็น$i ++$jการเพิ่มขึ้น$jจะเก็บแท็บว่าหมายเลขแรกของโซลูชันที่เสนอคืออะไรในขณะที่จำนวน$iนั้นจะเพิ่มขึ้นตลอดเวลาที่เหลือของโซลูชันที่เสนอ

จากนั้นเราจะส่งแต่ละองค์ประกอบของอินพุต$args[0]ไปยังForEach-Objectลูป ภายในวงด้านในเราบูลีน - คูณ$oกับผลลัพธ์ของการคำนวณ ซึ่งก็จะทำให้เพื่อที่ว่าถ้าคำนวณล้มเหลวสำหรับค่าที่จะหันไป$o 0การคำนวณคือ!($i++%$_)หรือบูลีน - ไม่ใช่ของการดำเนินการแบบโมดูโล เนื่องจากค่าใด ๆ ที่ไม่ใช่ศูนย์มีความจริงใน PowerShell สิ่งนี้จะเปลี่ยนค่าส่วนที่เหลือให้เป็นค่าที่ไม่ถูกต้อง$o0เข้า

นอกวงชั้นในif $oเป็นเลขที่เราได้พบวิธีการแก้ปัญหาที่เพิ่มขึ้นว่าการงานดังนั้นเราจึงเอาท์พุทและ$jexit


1

tinylisp , 108 ไบต์

(load library
(d ?(q((L N)(i L(i(mod N(h L))0(?(t L)(inc N)))1
(d S(q((L N)(i(? L N)N(S L(inc N
(q((L)(S L 1

บรรทัดสุดท้ายคือฟังก์ชันแลมบ์ดาที่ไม่มีชื่อที่รับรายการและส่งกลับจำนวนเต็ม ลองออนไลน์!

Ungolfed

(load library)

(comment Function to check a candidate n)
(def sequentially-divisible?
 (lambda (divisors start-num)
  (if divisors
   (if (divides? (head divisors) start-num)
    (sequentially-divisible? (tail divisors) (inc start-num))
    0)
   1)))

(comment Function to check successive candidates for n until one works)
(def search
 (lambda (divisors start-num)
  (if (sequentially-divisible? divisors start-num)
   start-num
   (search divisors (inc start-num)))))

(comment Solution function: search for candidates for n starting from 1)
(def f
 (lambda (divisors)
  (search divisors 1)))


1

Python 2, 78 ไบต์

def f(a,c=0):
 while [j for i,j in enumerate(a) if(c+i)%j<1]!=a:c+=1
 return c

แก้ไข: -26 ขอบคุณ @Chas Brown


ดี! ผมหันสภาพ loop ทางออกของคุณไปรอบ ๆ และความคิดของคุณจะดีขึ้นเมื่อจะได้รับ78 ไบต์
Chas Brown

@ChasBrown ขอบคุณฉันไม่คิดว่าจะทำอย่างนั้น เปลี่ยนแปลง!
sonrad10


0

APL NARS 140 ไบต์ 70 ตัวอักษร

r←f w;i;k
i←r←1⊃,w⋄k←¯1+⍴w⋄→0×⍳k=0
A:→0×⍳0=+/(1↓w)∣(k⍴r)+⍳k⋄r+←i⋄→A

ทดสอบ

  f 15
15
  f 3 4 5
3
  f 5 4 3
55
  f 2 3 5 7
158
  f 4 9 25 49
29348
  f 11 7 5 3 2 
1518

0

Java 8, 82 75 ไบต์

a->{for(int r=1,i,f;;r++){i=f=0;for(int b:a)f+=(r+i++)%b;if(f<1)return r;}}

คำอธิบาย:

ลองออนไลน์

a->{                 // Method with integer-array parameter and integer return-type
  for(int r=1,       //  Return-integer, starting at 1
          i,         //  Index-integer
          f;         //  Flag-integer
      ;r++){         //  Loop indefinitely, increasing `r` by 1 after every iteration
    i=f=0;           //   Reset both `i` and `f` to 0
    for(int b:a)     //   Inner loop over the input-array
      f+=(r+i++)%b;  //    Increase the flag-integer by `r+i` modulo the current item
    if(f<1)          //   If the flag-integer is still 0 at the end of the inner loop
      return r;}}    //    Return `r` as result

0

Ruby , 47 46 43 42 ไบต์

->a{(1..).find{|i|a.all?{|v|i%v<1&&i+=1}}}

ลองออนไลน์!

หมายเหตุ: (1..)ไวยากรณ์ได้รับการสนับสนุนใน ruby ​​2.6 เท่านั้นในขณะที่ TIO รองรับ 2.5 เท่านั้นดังนั้นลิงก์จะเป็นรุ่นเก่ากว่า (43 ไบต์)

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