Tantangan
Tugasnya sederhana. Diberikan array dan nilai pertama dan terakhir: Kembalikan yang pertama dari yang terakhir setelah yang pertama, dan yang terakhir dari yang pertama sebelum yang terakhir.
Atau sederhananya: Diberikan array, var1, var2.
Contoh Array:
[var2,, var1,, var2,, var2, var1, var2,]
Kembali:
- Indeks var2 pertama di sisi kanan var1 pertama yang muncul dalam array.
[var2,, var1 pertama ,, var2 pertama ,, var2 kedua, var1, var2 ketiga,]
- Indeks var1 pertama di sisi kiri var2 terakhir yang muncul dalam array.
[var2,, var1 kedua,, var2,, var2, var1 pertama , var2 terakhir ,]
Memasukkan
Dua bilangan bulat positif yang berbeda
Array bilangan bulat positif
Keluaran
Indeks jawaban, secara berurutan
Aturan
Array akan mengandung setidaknya satu dari setiap variabel (ukuran minimum 2)
Asumsikan input berfungsi
Contoh:
0, 1 [1, 0]
atau yang serupa akan gagal
Contohnya
Input
First = 2; Last = 4; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
2, 9
Input
First = 4; Last = 2; [0, 2, 4, 2, 3, 1, 4, 0, 1, 2, 4, 9]
Output
3, 6
Input
First = 0; Last = 1; [0, 1]
Output
1, 0
code-golf
array-manipulation
CelakaLout
sumber
sumber
var1
sama denganvar2
?9, 2
,6, 3
dan0, 1
masing - masing (atau ditambah satu jika output diindeks 1).Jawaban:
Jelly , 17 byte
Cobalah online!
sumber
Python 2 , 72 byte
Cobalah online!
sumber
APL (Dyalog Classic) ,
2927 byteCobalah online!
meminta array dan kemudian untuk var1, var2
sumber
JavaScript (ES6), 63 byte
Cobalah online!
Berkomentar
Versi alternatif
Menggunakan JS built-in, jawaban yang lebih mudah adalah 79 byte:
yang dapat sedikit dikompresi hingga 75 byte:
Cobalah online!
Sunting : @Neil berhasil menguranginya menjadi 67-byte yang sangat bagus :
Cobalah online!
sumber
lastIndexOf
membutuhkan dua parameter, sehingga mengurangi jawaban langsung menjadi 70 byte, dan saya dapat menghasilkan versi 67-byte berikut:(x,y,a,f=s=>a[z=y,y=x,x=z,s+=`ndexOf`](x,a[s](y)))=>[f`i`,f`lastI`]
Python 3 ,
9793 byte-4 bytes terima kasih kepada ovs
Cobalah online!
sumber
a-1-b == a + (-b-1) == a + ~b
dapat digunakan untuk -1 byte, menugaskanindex
fungsi untuk nama membuat ini menjadi 93 byteJapt ,
272524 byteTerinspirasi dalam jawaban @Arnauld
Terima kasih @Shaggy -2 bytes dan @ETHproductions -1 byte
Saya baru saja mulai dengan japt jadi pasti cara yang lebih baik. \
Cobalah online!
sumber
)
untuk pemula untuk menghemat 2 byte.X=WbU)...+X
: Coba online! Saya juga berjuang untuk menemukan metode yang lebih pendek ...APL (Dyalog Unicode) , 42 byte SBCS
Fungsi infiks diam-diam anonim. Mengambil var1, var2 sebagai argumen kiri dan array sebagai argumen kanan.
Cobalah online!
sumber
R , 81 byte
Cobalah online!
(1-diindeks)
sumber
MATL , 27 byte
Cobalah online!
Alternatif untuk bytecount yang sama:
27 byte
Cobalah online!
Yang kedua lebih mudah untuk dijelaskan:
Bagian kedua dari kode melakukan hal yang sama, kecuali untuk perubahan ini:
2G
untuk input kedua (var1) dan3G
input ke-3 pertama (var2) bukan input implisit ataui
, karena sudah dikonsumsiPY>P
(flip array kiri-ke-kanan, dapatkan kumulatif maksimum, balik kembali) alih-alihY>
, untuk mendapatkan 1s sebelum kejadian terakhir alih-alih setelah kejadian pertamaf0)
untuk mendapatkan tempat terakhir di mana kedua kondisi itu benar, alih-alih tempat pertama (berfungsi karena MATL menggunakan pengindeksan modular, jadi 0 diambil untuk merujuk ke indeks terakhir array)sumber
MATLAB (80 byte)
Input adalah
x
,y
, dana
. Karena MATLAB diindeks 1, Anda harus menambahkan 1 untuk menguji kasus.Kasus cobaan:
sumber
Java 8, 114 byte
Seorang lambda mengambil a
java.util.List<Integer>
dan duaint
s (var1, var2) dan mengembalikan pasangan yang dipisahkan koma.Cobalah secara Online
sumber
Kotlin , 132 byte
Cobalah online!
sumber
Julia ,
7164 byteberkat Sundar dan nya
find(A.==x)[]
bukanfindfirst(A,x))
..
sumber
find(A.==x)[]
alih-alihfindfirst(A,x)
.