Dibagi secara Berurutan

24

Kadang-kadang untuk tertidur, saya akan menghitung setinggi yang saya bisa, sementara melewatkan angka yang tidak bebas persegi . Saya mendapatkan sedikit sensasi ketika saya bisa melompati beberapa angka berturut-turut - misalnya, 48,49,50semua TIDAK bebas persegi (48 dapat dibagi dengan 2 ^ 2, 49 oleh 7 ^ 2, dan 50 dengan 5 ^ 2).

Hal ini membuat saya bertanya-tanya tentang contoh paling awal dari angka-angka yang berdekatan yang dapat dibagi oleh beberapa urutan pembagi yang berubah-ubah.

Memasukkan

Input adalah daftar terurut a = [a_0, a_1, ...]dari bilangan bulat positif yang mengandung setidaknya 1 elemen.

Keluaran

Output adalah bilangan bulat positif terkecil ndengan properti yang a_0membagi n, a_1membagi n+1, dan secara umum a_kmembagi n+k. Jika tidak nada yang seperti itu, perilaku fungsi / program tidak ditentukan.

Uji Kasus

[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

Mencetak gol

Ini adalah ; hasil terpendek (per bahasa) memenangkan hak membual. Celah yang biasa dikecualikan.

Chas Brown
sumber
Terkait .
alephalpha

Jawaban:

6

Sekam , 7 byte

VδΛ¦⁰ṫN

Cobalah online!

Penjelasan

VδΛ¦⁰ṫN  Input is a list x.
      N  The list [1,2,3...
     ṫ   Tails: [[1,2,3...],[2,3,4...],[3,4,5...]...
V        Index of first tail y satisfying this:
  Λ       Every element
    ⁰     of x
   ¦      divides
 δ        the corresponding element of y.
Zgarb
sumber
5

MATL , 11 byte

`Gf@q+G\a}@

Cobalah online!

`           % 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.

Tidak sepenuhnya dioptimalkan untuk kecepatan ... testcase terbesar membutuhkan satu menit penuh menggunakan MATL, dan sekitar 0,03 detik pada MATLAB. Ada kemungkinan kecil MATL memiliki overhead yang lebih sedikit.

Sanchises
sumber
ah, saya punya n:q`QtG\a]1)untuk 12 byte tetapi n:jelas sama dengan di fsini. Saya selalu lupa tentang itu, sehingga Anda dapat menambahkannya sebagai byter alternatif 11.
Giuseppe
1
@ Giuseppe Terlalu buruk fq`QtG\a}@mengembalikan salinan input yang tidak tersedia.
Sanchises
5

JavaScript, 42 40 byte

Akan menimbulkan kesalahan rekursi jika tidak ada solusi (atau solusinya terlalu besar).

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

Disimpan 2 byte dengan pointer dari Rick Hitchcock


Cobalah

Masukkan daftar angka yang dipisahkan koma.

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>

Shaggy
sumber
Pendekatan yang bagus, tetapi gagal dengan melampaui batas rekursi dengan, misalnya [4,9,25,49],.
Chas Brown
1
@ChasBrown, untuk keperluan kode golf, kami dapat mengasumsikan memori tak terbatas.
Shaggy
Saya pikir ini akan bekerja selama 38 byte: (a,y=n=0)=>a.some(x=>y++%x)?f(a,++n):n
Rick Hitchcock
Oo, bagus, @RickHitchcock - terima kasih. Tapi jangan lupa f=.
Shaggy
Ah, tentu saja. Ini 40 byte.
Rick Hitchcock
3

05AB1E , 9 byte

Xµā<N+sÖP

Cobalah online!

Penjelasan

Xµ          # loop until counter equals 1
  ā         # push range [1 ... len(input)]
   <        # decrement
    N+      # add current iteration index N (starts at 1)
      sÖ    # elementwise evenly divisible by
        P   # product
            # if true, increase counter
            # output N
Emigna
sumber
Menghancurkan jawaban 17 byte saya, aduh.
Magic Gurita Guci
3

Haskell , 45 44 byte

f a=[n|n<-[1..],1>sum(zipWith mod[n..]a)]!!0

Cobalah online!

Sunting: -1 byte berkat nimi!

Laikoni
sumber
1
sum(zipWith mod[n..]a)<1.
nimi
3

Bersih , 61 byte

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

Cobalah online!

Suram
sumber
2
Saya pikir Anda perlu [1..]bukannya [0..]menghindari keluaran 0, bilangan bulat non-positif, untuk daftar tunggal.
Laikoni
@Laikoni terima kasih, sudah diperbaiki.
Kamis
3

Pyth , 11 byte

f!s.e%+kTbQ 

Cobalah online!


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
Dave
sumber
Apakah Anda memerlukannya 2di akhir? Saya yakin ada lagi yang bisa diselamatkan di sini tapi saya tidak tahu Pyth.
Shaggy
@Shaggy dan @Giuseppe, Anda berdua benar, dan menjatuhkan akhir 2memperbaiki masalah
Dave
2

J , 23 byte

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

Cobalah online!

Galen Ivanov
sumber
Bagus. Apa fakta matematika yang memungkinkan Anda hanya memeriksa produk dari input? Bagaimana kita tahu tidak ada solusi di luar itu? Juga, bagaimana kita tahu I.hanya akan mengembalikan 1 hasil? Apakah tidak mungkin ada banyak?
Jonah
1
@Jonah - Saya tidak tahu apakah itu selalu berhasil; semua tes yang saya lakukan ada dalam batasan ini.
Galen Ivanov
2

R , 51 byte

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

Cobalah online!

Penggunaan anymelempar kperingatan tentang konversi implisit ke logical, di manak nilai kembali.

Giuseppe
sumber
47 byte !
plannapus
@plannapus saya menganggap itu tetapi sayangnya gagal l=c(15), karena seq(l)==1:ldalam kasus itu. seqmenjengkelkan seperti itu!
Giuseppe
ARF memang dan kemudian memaksa seq_alongterlalu lama.
plannapus
Jadi, tetapi menggunakan sumbukannya anymenyingkirkan peringatan itu, FYI.
plannapus
2

APL (Dyalog Unicode) , 24 23 22 byte

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

Cobalah online!

Secara teknis, ini adalah fungsi diam-diam. Saya harus membuatnya karena satu-satunya input yang diizinkan adalah daftar bilangan bulat. Penggunaan⎕IO←0 (pengindeksan 0)

Perlu dicatat bahwa fungsi ini akan habis jika n tidak ada.

Terima kasih kepada @ngn dan @ H.PWiz untuk masing-masing 1 byte.

Bagaimana?

{∨/×⍺|⍵+⍳≢⍺:⍺∇⍵+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 ⍵.
J. Sallé
sumber
1

Perl 5 , 49 + 2 ( -pa) = 51 byte

$i=!++$\;($\+$i)%$_&&last,$i++for@F;$i<@F&&redo}{

Cobalah online!

Xcali
sumber
1

Japt, 10 byte

Pada akhirnya akan muncul undefinedjika tidak ada solusi, jika tidak merusak browser Anda terlebih dahulu.

@e_X°vZÃ}a

Cobalah


Penjelasan

               :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?
Shaggy
sumber
1

Ruby , 48 byte

->l{1+(1..1/0.0).find{|x|l.all?{|y|(x+=1)%y<1}}}

Cobalah online!

GB
sumber
1

ML Standar (MLton) , 96 byte

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

Cobalah online!

Tidak Disatukan:

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

Cobalah online! Dimulai dengan n=1, fkenaikan fungsi nsampai all-kondisi terpenuhi, dalam hal inin ini dikembalikan.

tabulate(m,g)dengan beberapa bilangan bulat mdan fungsi gmembangun daftar [g 0, g 1, ..., g m]. Dalam kondisi kami tabulatedipanggil dengan panjang daftar input ldan fungsi yang memeriksa apakah ielemen th lmembagi n+i. Ini menghasilkan daftar boolean, jadi alldengan fungsi identitas fn x=>xmemeriksa apakah semua elemen benar.

Saya menemukan golf trik bagus untuk memperpendek fungsi identitas dalam hal ini oleh empat byte: Alih-alih lambda (fn x=>x), build-in fungsi hdyang digunakan, yang mengembalikan elemen pertama dari daftar, dan bools yang dihasilkan dalam tabulatedibungkus [dan ]untuk buat daftar singleton.

Laikoni
sumber
1

PowerShell , 65 62 byte

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

Cobalah online!

PowerShell tidak memiliki yang setara dengan anyatau someatau sejenisnya, jadi kami membutuhkan pendekatan yang sedikit berbeda.

Ini mengambil input $args[0]sebagai array, kemudian memasuki forloop tak terbatas . Setiap iterasi yang kami tetapkan $oakan 1(dijelaskan nanti), dan ditetapkan $imenjadi ++$j. Peningkatan $jterus mengawasi apa nomor pertama dari solusi yang diusulkan, sedangkan$i akan meningkatkan atas sisa solusi yang diusulkan.

Kami kemudian mengirim setiap elemen input $args[0]ke dalam satu ForEach-Objectlingkaran. Di dalam lingkaran dalam, kita Boolean-gandakan ke $odalam hasil perhitungan. Ini akan membuatnya sehingga jika perhitungan gagal untuk suatu nilai, maka $oakan beralih ke 0. Perhitungannya adalah !($i++%$_), atau Boolean-bukan dari operasi modulo. Karena nilai bukan nol adalah benar di PowerShell, ini mengubah sisa apa pun menjadi nilai palsu, sehingga berubah $omenjadi 0.

Di luar lingkaran dalam, if $obukan nol, kami telah menemukan solusi tambahan yang berfungsi, jadi kami keluaran $jdan exit.

AdmBorkBork
sumber
1

tinylisp , 108 byte

(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

Baris terakhir adalah fungsi lambda tanpa nama yang mengambil daftar dan mengembalikan integer. Cobalah online!

Tidak disatukan

(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)))
DLosc
sumber
1

Julia 0,6 , 79 byte

f(s,l=length(s),n=s[])=(while !all(mod.(collect(0:l-1).+n,s).==0);n+=s[];end;n)

Cobalah online!

Input tanpa solutiosn yang valid akan menyebabkan perulangan tak terbatas ... :)

niczky12
sumber
1

Python 2, 78 byte

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

EDIT: -26 terima kasih kepada @Chas Brown

sonrad10
sumber
Bagus! Saya membalikkan kondisi keluar loop Anda, dan ide Anda dapat ditingkatkan untuk mendapatkan 78 byte .
Chas Brown
@ ChasBrown terima kasih, saya tidak berpikir untuk melakukannya seperti itu. Berubah!
sonrad10
0

APL NARS, 140 byte, 70 karakter

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

uji

  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
RosLuP
sumber
0

Java 8, 82 75 byte

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

Penjelasan:

Cobalah online.

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
Kevin Cruijssen
sumber
0

Ruby , 47 46 43 42 byte

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

Cobalah online!

NB: (1..)sintaks hanya didukung di ruby ​​2.6, untuk saat ini TIO hanya mendukung 2.5 sehingga tautannya ke versi yang lebih lama (43 byte).

Asone Tuhid
sumber