Tantangan
Diberikan urutan angka, buat fungsi yang mengembalikan langkah urutan.
- Asumsikan urutannya akan
N >= 3
- Urutan akan mengulanginya langkah setidaknya sekali
- Urutan hanya akan berisi bilangan asli
- Fungsi atau program Anda harus mengembalikan urutan langkah sesingkat mungkin
Contoh:
Memasukkan: [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 17]
Keluaran: [1, 1, 2]
Penjelasan: Urutan awal dari 1 => 2 (1 step), 2 => 3 (1 step), 3 => 5 (2 steps)
. Lalu berulang. Outputnya adalah[1 step, 1 step, 2 steps] => [1, 1, 2]
Contoh lain:
Memasukkan: [2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]
Keluaran: [3, 1, 1, 1]
[2, 5, 6, 7, 8, 11, 12, 13, 14, 17, 18, 19, 20]
\ /\ /\ /\ /
3 1 1 1 Then it repeats...
Uji Kasus
Input: [1, 4, 8, 9, 10, 13, 17, 18, 19, 22, 26, 27, 28] => Output: [3,4,1,1]
Input: [6, 11, 13, 18, 20, 25, 27, 32, 34, 39, 41] => Output: [5,2]
Input: [2, 6, 10, 13, 17, 21, 25, 28, 32, 36, 40, 43, 47] => Output: [4,4,3,4]
Input: [5, 6, 7] => Output: [1]
Klarifikasi
- Panjang input - 1 dapat dibagi dengan panjang output
- Asumsikan urutan akan selalu meningkat
Ini adalah kode-golf , jadi jawaban tersingkat dalam byte menang.
code-golf
sequence
array-manipulation
Luis felipe De jesus Munoz
sumber
sumber
Jawaban:
Jelly ,
97 byteCobalah online!
Bagaimana itu bekerja
sumber
JavaScript (ES6), 58 byte
Menghasilkan string yang dipisahkan koma (dengan koma terkemuka).
Cobalah online!
Atau 56 byte jika kita gunakan
,-
sebagai pemisah dan kita mengasumsikan bahwa urutannya selalu meningkat secara ketat .Bagaimana?
Kami pertama-tama mengonversi array input a [] ke daftar perbedaan berurutan dengan:
Karena p awalnya diatur ke nilai non-numerik (fungsi panggilan balik peta () ), iterasi pertama menghasilkan NaN .
Contoh:
Kami kemudian memaksa hasil ke string:
Akhirnya, kita mencari pola terpendek 1 dari integer yang dipisahkan koma (
,\d+
) dimulai tepat setelah "NaN" dan diulang sampai akhir string:1: menggunakan yang tidak rakus
*?
sumber
/(,.+?)\1*$/
.Brachylog , 11 byte
Cobalah online!
Akan menjadi 5 byte jika ada built-in untuk perbedaan berurutan.
Penjelasan
sumber
Pyth, 11 byte
Coba di sini
Penjelasan
sumber
Japt ,
1412 byteCobalah
Penjelasan
Asli
Cobalah
sumber
R ,
4946 byteProgram lengkap:
Cobalah online!
R ,
725854 bytePengajuan fungsi asli dengan semua kasus uji di satu tempat:
Cobalah online!
Terima kasih kepada JayCe karena menyarankan rute program lengkap dan -4 byte pada fungsi, dan untuk Giuseppe untuk lebih lanjut -3.
sumber
a<-
sini jugaJ ,
2219 byte3 byte disimpan berkat FrownyFrog!
Cobalah online!
[Cobalah online!] [TIO-ji2uiwla]
Bagaimana?
sumber
/:
bukan#\
, Anda bisa0{"1[:~.
menghemat 1 byte."0 1
adalah"{
05AB1E , 8 byte
Disimpan 3 byte berkat Kevin Cruijssen .
Cobalah online!
05AB1E , 11 byte
Cobalah online!
13 byte
Alternatif yang lucu, IMO:
Cobalah online!
sumber
.œ
.Javascript, 49
56byteSunting 7 byte yang disimpan, terima kasih (tebak siapa?) Arnauld
Ide regex yang sama seperti Arnauld, tetapi anehnya begitu berbeda dalam implementasinya ...
Mengembalikan string dengan langkah yang dipisahkan koma (dan koma yang memimpin)
Uji
sumber
match
adalah keputusan saya yang buruk. Anda bisa mengalahkan saya lagi . :-)MATL ,
141312 byteCobalah online!
Baru saja menemukan bahwa MATL memang memiliki fungsi peredaran darah!
Penjelasan
d
- Dapatkan perbedaan antara istilah berturut-turut, sebagai sebuah arrayt5YL
- duplikat itu, lalu panggil fungsiYL
('galeri') dengan5
opsi ('edaran'). Membuat matriks dengan vektor yang diberikan sebagai baris pertama, kemudian baris berturut-turut adalah vektor yang sama bergeser secara melingkar, sampai membungkus.FTF#Xu
- Periksa baris unik dan dapatkan nomor baris mereka (tidak yakin apakah ada cara yang lebih pendek untuk melakukan ini). Ketika langkah-langkah urutan ulangi, baris yang digeser secara melingkar akan sama dengan baris pertama, dan baris berikutnya akan berulang. Jadi ini mendapatkan indeks menjalankan urutan langkah pertama sebelum mereka mulai mengulangi.)
- indeks menggunakannya ke dalam array perbedaan asli, untuk mendapatkan jawabannya.Lebih tua:
Cobalah online!
(-1 byte terima kasih kepada Giuseppe)
Penjelasan:
sumber
Python 2 , 101 byte
Cobalah online!
Pertama menghasilkan delta d , kemudian menemukan awalan p pertama dari d bahwa ketika berulang ⌊len (L) / len (p) ⌋ kali menghasilkan L , di mana L adalah daftar input.
sumber
Ruby , 62 byte
Bergantung pada logika Regex yang diadaptasi dari jawaban Arnauld .
Cobalah online!
Alternatif penentuan perbedaan langkah, juga 62 byte:
Cobalah online!
sumber
Java 10,
104100 byteRegex
( ?.+?)\1*$
untuk substring berulang terpendek dari komentar @Neil pada jawaban @ Arnauld 's JavaScript (ES6) .Cobalah online.
Penjelasan:
sumber
APL + WIN, 39 byte
Meminta input.
Cobalah online! Atas perkenan Dyalog Classic
Penjelasan:
sumber
Python 2 ,
8685 byteCobalah online!
Bangun perbedaan sebagai
d
; jikad
diulangi dengan ukuran unitn
makad[n:]==d[:-n]
; lain kambuh.sumber
Retina 0.8.2 , 42 byte
Cobalah online! Tautan termasuk kasus uji. Output termasuk koma terkemuka. Penjelasan:
Konversikan ke unary.
Hitung perbedaan forward, kecuali untuk angka pertama, yang tertinggal.
Cocokkan perbedaan yang berulang.
Konversikan ke desimal.
sumber
05AB1E ,
1413 byteCobalah secara online atau verifikasi semua kasus uji .
Saya tahu sudah ada dua jawaban 05AB1E yang lebih pendek diposting oleh @ Mr.Xcoder , tapi saya ingin mencoba pendekatan alternatif ini menggunakan rotasi dan pemeriksaan kesetaraan.
Mungkin dapat golf turun beberapa byte tanpa menjatuhkan
Á
.-1 byte setelah tip @Emigna untuk menghapus register global_variable (
©
dan 2x®
) dan menggunakan Duplicate (D
) dan Triplicate (Ð
) sebagai gantinya.Penjelasan:
sumber
Haskell, 107 byte
x adalah array input.
sumber
f x=
. Juga penggunaaninits
memerlukanimport Data.List
, karena itu bukan bagian dari Prelude: Coba online!(init x)
bisa sajax
karenazip
memotong secara otomatis jika salah satu daftar lebih panjang dari yang lain. Dan untukmap(uncurry(-))$zip
ada sebuah build-in:zipWith(-)
. Alih-alihf x=let i=...in
Anda dapat menggunakan penjaga pola:f x|i<-...=
.filter
,!!0
alih- alihhead
dancycle
alih-alihconcat$repeat
: Coba online!Stax ,
86 byteJalankan dan debug itu
Berikut adalah versi beranotasi yang belum dibongkar untuk menunjukkan cara kerjanya.
Jalankan yang ini
sumber
Perl 6 , 57 byte
Menguji
Output dipisahkan oleh ruang (
"1 1 2"
)Diperluas:
sumber
~(.skip Z-$_)
05AB1E , 9 byte
Penjelasan:
Alternatif 9-byte:
Algo yang sama, tetapi alih-alih membandingkan ke daftar delta (yang perlu disimpan / dipulihkan), ini menggunakan
.¥
(undelta) kemudian membandingkan dengan input (implisit).Cobalah online!
sumber
K4 , 30 byte
Larutan:
Contoh:
Penjelasan:
Tampaknya lumayan untuk apa yang kita coba pecahkan. Dapatkan delta input dan kemudian buat urutan dan tentukan yang terpendek yang cocok dengannya.
sumber
Bahasa Wolfram (Mathematica) , 26 byte
Cobalah online!
Mengembalikan yang
Sequence
berisi langkah-langkah.+2 byte untuk
List
output:Cobalah online!
sumber
Perl 5
-p
, 55 byteCobalah online!
Angka dimasukkan sebagai daftar yang dipisahkan oleh spasi. Output adalah format yang sama.
sumber