Array Bergantian
Array bolak - balik adalah daftar panjang berapa pun di mana dua (tidak harus berbeda) nilai berganti-ganti. Dengan kata lain, semua item yang diindeks sama adalah sama, dan semua item yang diindeks sama adalah sama.
Tugas Anda adalah menulis sebuah program atau fungsi yang, ketika diberi daftar bilangan bulat positif, menghasilkan / mengembalikan truthy
jika bolak-balik dan falsy
sebaliknya.
Ini adalah kode-golf , jadi kode terpendek (dalam byte) menang!
Kasus tepi:
[] -> True
[1] -> True
[1,1] -> True
[1,2,1] -> True
Kasus Uji lainnya:
[1,2,1,2] -> True
[3,4,3] -> True
[10,5,10,5,10] -> True
[10,11] -> True
[9,9,9,9,9] -> True
[5,4,3,5,4,3] -> False
[3,2,1,2,1,2] -> False
[1,2,1,2,1,1,2] -> False
[2,2,3,3] -> False
[2,3,3,2] -> False
Contoh
Berikut ini adalah contoh yang dapat Anda uji terhadap solusi Anda, yang ditulis dengan Python 3 (bukan golf):
def is_alternating(array):
for i in range(len(array)):
if array[i] != array[i%2]:
return False
return True
Jawaban:
Jelly , 4 byte
Cobalah online!
Bagaimana itu bekerja
sumber
2
nomor lain segera menggeneralisasikan tantangan!Ɲ
tidak ada saat tantangan diposting.brainfuck, 34 byte
Mengambil array sebagai nilai byte dalam sebuah string, dan output
\x00
untuk false dan\x01
true.Cobalah online.
Ini mempertahankan struktur
a b 1 c
pada kaset, di mana
c
karakter saat ini,b
adalah karakter sebelumnya, dana
merupakan karakter sebelumnya sebelumnya, selama array berganti-ganti. Jika ketidakcocokan ditemukan, pointer tersebut akan dipindahkan ke sebelah kiri sehinggaa
,b
, dan1
bendera semua menjadi nol, dan situasi ini akan berlanjut sampai semua masukan yang dikonsumsi.sumber
R,
2423 byteMembaca vektor ke dalam STDIN, mengambil dua elemen pertama dari vektor itu, dan memeriksa kesetaraan. Jika panjang
a[1:2]
dan tidak cocok, R akan mengulanga[1:2]
untuk mencocokkan panjang a. Ini akan memberi peringatan tentang hal itu, tetapi itu akan berhasil.Anehnya ini bahkan berfungsi untuk input kosong, tidak yakin mengapa, tapi saya akan menggulungnya.
Disimpan 1 byte berkat @MickyT
sumber
all((a=scan())==a[1:2])
MATL ,
76 byteUntuk array bolak-balik ini menghasilkan matriks yang tidak kosong, yang benar. Untuk array non-bolak-balik, matriks berisi setidaknya satu nol, dan karenanya palsu (lihat di sini ).
Cobalah online! Atau verifikasi semua kasus uji .
Penjelasan
Mari kita ambil
[1 2 1 2]
contoh input.sumber
JavaScript (ES6), 27 byte
Uji kasus
Tampilkan cuplikan kode
sumber
Retina , 25 byte
Cobalah online!
Alih-alih mencocokkan input dengan nilai bolak-balik (yang mengarah ke beberapa efek tepi yang mengganggu dalam regex), saya mencocokkan input yang tidak valid dan kemudian meniadakan hasilnya setelah itu.
Manfaat dari mencocokkan input yang tidak valid adalah bahwa ini adalah properti yang dapat diperiksa secara lokal, dan tidak perlu memperlakukan input kosong atau pendek secara khusus: input apa pun tidak valid jika berisi dua nilai berbeda yang terpisah satu posisi.
Jadi tahap pertama menghitung jumlah kecocokan
\b(\d+),\d+,(?!\1\b)
yang cocok dan menangkap satu nilai, kemudian cocok dengan nilai berikutnya, dan kemudian menegaskan bahwa nilai ketiga secara berurutan berbeda. Ini memberikan nol untuk input yang valid dan sesuatu yang positif untuk nilai yang tidak valid.Tahap kedua hanya menghitung jumlah pertandingan
^0
yang1
jika tahap pertama kembali0
dan1
sebaliknya.sumber
Mathematica, 29 byte
Sebuah pelabuhan dari algoritma MATL Luis Mendo. Fungsi yang tidak disebutkan namanya mengambil daftar angka (atau bahkan objek yang lebih umum) dan mengembalikan
True
atauFalse
. Menguji apakah jumlah elemen berurutan semuanya sama. SayangnyaMost
danRest
tersedak daftar kosong, sehingga harus diuji secara terpisah.Mathematica, 33 byte
Fungsi yang tidak disebutkan namanya mengambil daftar angka (atau bahkan objek yang lebih umum) dan mengembalikan
True
atauFalse
. FungsiDifferences[#,1,2]
mengambil perbedaan, bukan dari pasangan integer yang berurutan , tetapi pasangan integer pada jarak dua terpisah. Kemudian kami hanya memeriksa apakah daftar yang dihasilkan tidak memiliki apa pun selain nol di dalamnya.Sebagai bonus, untuk satu byte lagi (ubah
2
ke#2
), kita mendapatkan fungsi yang memasukkan daftar bilangan bulat dan bilangan bulat positif lainnya#2
, dan memeriksa apakah daftar input adalah hasil dari#2
urutan konstan interleaving secara berkala satu sama lain. Sebagai contoh,mengevaluasi ke
True
.sumber
Haskell,
2726 byteIni mengevaluasi ke fungsi anonim yang memecahkan tantangan. Idenya adalah untuk menjatuhkan dua angka pertama dari daftar, zip dengan daftar asli menggunakan kesetaraan, dan periksa bahwa hasilnya hanya berisi
True
s. Cobalah online!Terima kasih kepada nimi untuk 1 byte!
sumber
and.(zipWith(==)=<<drop 2)
menghemat satu byte.Retina ,
393228 byteCobalah online!
Disimpan 7 byte berkat Martin ! Menyelamatkan 3 lainnya berkat Kobi ! Dan untuk Kritixi untuk ide 1 lainnya.
Kami secara opsional mencocokkan angka yang menempati seluruh input, pasangan angka apa pun, atau pasangan angka apa pun yang diikuti oleh pasangan yang sama beberapa kali dan secara opsional tidak termasuk angka kedua di bagian paling akhir. Bisa menghemat 2 byte jika inputnya di unary.
sumber
^(\d+)?(.\d+)?(.\1\2)*(.\1)?$
29 byte alternatif. Ini tidak cocok,1,,1
.Pyth, 9 byte
Penjelasan
sumber
Q
s ke kode. Saya menambahkan mereka dalam penjelasan untuk memperjelas apa yang sedang terjadi, tetapi mereka tidak benar-benar dalam kode.Brachylog , 15 byte
Cobalah online!
Penjelasan
sumber
APL, 7 byte
Penjelasan:
2⍴⊢
: membentuk kembali array input dengan 2⍴⍴
: membentuk kembali hasil dengan ukuran asli input, elemen berulang⊢≡
: lihat apakah hasil yang sama dengan input asliKasus uji:
sumber
Java 8, 63 byte
Ini adalah ungkapan lambda untuk a
Predicate< int[ ] >
Penjelasan: inisialisasi hasil ke 0. Untuk setiap elemen, Gigit ATAU hasilnya dengan perbedaan antara elemen saat ini dan indeks elemen 2 sebelumnya. kembali
true
jika hasilnya sama dengan 0. Kalau tidak kembalifalse
sumber
Perl 6 ,
49 4342 byteCobalah
Cobalah
Cobalah
Diperluas:
sumber
$_[1]
dapat lebih pendek satu byte sebagai.[1]
. Tubuh lambda bagian dalam bisa lebih pendek satu byte{.[0]!=a||.[1]!=b}
..[1]
.!=
Tampaknya juga tidak berfungsi jika tidak diikuti oleh spasi. Saya pikir sesuatu seperti$_!=3
sedang diurai seolah-olah ditulis sebagai!( $_ = 3 )
Python 2 , 35 byte
Cobalah online!
sumber
J, 8 byte
Penjelasan
Uji kasus
sumber
{.
Take with$
Shape.Haskell ,
3332 byteCobalah online! atau Verifikasi testcases. -1 byte terima kasih kepada Zgarb.
sumber
[]
, tetapi untuk beberapa alasan ghc tidak dapat menyimpulkan tipe yang benar[]
. Ini bekerja jika diuji bersama-sama dengan test case lainnya, lihat Memverifikasi testcases.f(a:x@(_:b:_))=a==b&&f x
bash,
565438 byteSimpan ini sebagai skrip, dan berikan daftar angka sebagai argumen (untuk daftar n-elemen, Anda akan melewatkan n argumen). Outputnya adalah kode keluar: 0 (untuk true) jika daftar berganti-ganti, dan 1 (untuk false) sebaliknya.
(Mengembalikan output dalam kode keluar diperbolehkan dalam metode I / O standar PPCG.)
Ini bekerja secara rekursif:
sumber
Python 2.7, 38 byte
Kasus uji:
sumber
Pyke, 6 byte, tidak bersaing
Coba di sini!
Izinkan membentuk kembali simpul untuk mengambil daftar serta string
sumber
Shenzen IO (Assembler),
8376 byte, tidak bersaingShenzen io adalah game puzzle tempat Anda dapat membuat kode dengan kode dalam bahasa assembler-ish khusus.
Sayangnya, Anda hanya dapat menggunakan bilangan bulat antara -999 dan 999 sebagai input atau output, dan tidak ada cara untuk mengetahui apakah array telah berakhir. Jadi saya berasumsi bahwa array ditulis pada ROM yang membungkus setelah membaca sel terakhir. Ini berarti bahwa hanya array yang dapat digunakan, yang merupakan alasan untuk tidak bersaing.
Kode:
Penjelasan:
Maaf jika semua ini membingungkan, ini adalah jawaban kode-golf pertama saya.
EDIT: dihapus 7 byte dengan mengganti loop dengan kode run-once
sumber
Ruby, 23 byte
sumber
Ruby,
131119 byteLambda
a
mengharapkan arrayx
dan mengembalikan true jika ada 0 atau 1 nilai unik untuk elemen indeks aneh dan 0 atau 1 nilai unik untuk elemen diindeks bahkan dalam array.Pengaman byte yang penting
def
!arr[1]
vs.arr.length < 2
&
vs.&&
Uji kasus
sumber
Dart, 46 byte
Jalankan dengan:
sumber
C #, 54 byte
Filter array untuk menunjukkan nilai-nilai yang tidak cocok dengan nilai pertama untuk rata dan nilai 2 untuk peluang. Jika tidak ada hasil, kembalikan benar.
sumber
Japt,
76 byteCobalah atau jalankan semua test case
sumber
C #, 66 byte
Fungsi anonim yang menerima array integer dan mengembalikan 1 jika array bergantian dan 0 sebaliknya.
Program lengkap dengan fungsi dan uji kasus yang tidak dikoleksi:
sumber
Oktaf, 51 byte
Input adalah array sel bilangan bulat positif.
Cobalah online!
sumber
Clojure, 70 byte
Periksa bahwa hitungan berbeda dari setiap item ke-2 adalah 1, dan menangani koleksi kosong sebagai kasing khusus. Juga mencoba banyak pendekatan berdasarkan
reduce
dangroup-by
tetapi tidak banyak keberuntungan di sana.sumber
Pilihan lain dengan R: 36 byte.
Dan saya pikir saya telah menemukan versi yang jauh lebih pendek: 15 byte
sumber