Kita semua tahu bahwa banyak latihan hanya memengaruhi setengah tubuh Anda, jadi Anda harus melakukannya dua kali, satu kali untuk setiap sisi. Latihan semacam itu memiliki dua rekan, satu untuk sisi kiri dan satu untuk sisi kanan. Namun, tidak perlu mengeksekusi kedua rekan secara berurutan, selama latihan untuk kedua belah pihak berada dalam urutan yang sama. Anda mungkin juga beralih antara sisi dalam program latihan Anda, tetapi tidak masuk akal untuk memulai beberapa latihan dengan satu sisi dan beberapa dengan yang lain.
Tantangan
Bagian latihan adalah daftar bilangan bulat bukan nol, di mana bagian kedua terdiri dari bilangan bulat dari bagian pertama yang dinegasikan dan dalam urutan yang sama, dan tanda-tanda bilangan bulat pada setiap bagian adalah sama. Tanda paruh pertama bagian latihan adalah sisi yang memimpin .
Sebuah set latihan adalah nol atau lebih bagian latihan dengan sisi terkemuka yang sama digabungkan bersama-sama.
Diberikan daftar bilangan bulat bukan nol sebagai input, tentukan apakah itu adalah set latihan. Bilangan bulat tidak selalu unik. Panjang daftar itu belum tentu genap.
Solusi Anda mungkin tidak menggunakan celah standar apa pun . Anda dapat menggunakan dua nilai konsisten berbeda untuk output. Ini adalah kode-golf , sehingga solusi terpendek menang.
Contohnya
[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]
adalah contoh dari bagian latihan. Babak pertama adalah [-5, -1, -7, -6, -5]
, dan babak terakhir adalah [5, 1, 7, 6, 5]
, yang masing-masing bilangan bulat di babak pertama dinegasikan. Selain itu, bilangan bulat paruh pertama adalah semua tanda yang sama. Sisi utama bagian latihan ini adalah -1
.
[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]
adalah contoh dari set latihan. Bagian latihan individualnya adalah [3, 6, 5, -3, -6, -5]
dan [1, 6, 4, 3, -1, -6, -4, -3]
, dan mereka berdua memiliki sisi kepemimpinan 1
.
[4, -4, -5, 5]
, meskipun hanya terdiri dari bagian latihan yang valid, bukan set latihan, karena bagian pertama [4, -4]
, memiliki sisi terdepan 1
, sedangkan bagian kedua [-5, 5]
, memiliki sisi terdepan -1
.
Uji kasus
Kasus uji yang valid:
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]
Kasus uji tidak valid:
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
sumber
Jawaban:
Python 2 ,
6967 byteCobalah online!
sumber
Jelly , 10 byte
Cobalah online!
sumber
Java 8,
186183185 byte+2 byte karena perbaikan bug untuk kasus uji ukuran 3 (hampir semua permutasi
1
dan-1
pada akhir TIO-link saya).Pasti bisa bermain golf .. Tantangannya to-the-point, tapi cukup sulit untuk diterapkan. Terutama uji kasus
[4,-4,-5,5]
itu menjengkelkan untuk memperbaikinya .. Tapi itu berfungsi sekarang. Akankah golf turun dari sini.Cobalah online.
Penjelasan:
sumber
R , 91 byte
Input vektor angka yang dipisahkan spasi. Output
FALSE
untuk valid danTRUE
tidak valid.rle
memberikan pengkodean run run, dalam hal ini urutan nilai positif dan negatif.The kasus tepi kosong benar-benar dan benar-benar tidak adil;) menambahkan kekalahan 15 byte.
Banyak byte yang dipotong oleh @Giuseppe.
Berikut adalah versi 92 byte yang dinyatakan sebagai fungsi yang lebih baik untuk pengujian:
Cobalah online!
sumber
JavaScript (ES6), 54 byte
Versi yang dioptimalkan, terinspirasi oleh jawaban Python Dennis .
Mengembalikan 0 atau 1 .
Cobalah online!
Versi asli, 74 byte
Cobalah online!
Bagaimana?
Kami menyimpan bagian pertama dari semua bagian latihan di b [0] dan bagian kedua di b [1] , beralih di antara b [0] dan b [1] setiap kali tanda berubah. Entri dikuadratkan untuk menyingkirkan tanda. Kami awali setiap entri dengan koma dan sufiks setiap bagian dengan 0 .
Ada beberapa logika tambahan untuk menangani kasus tepi 'input kosong' pada dasarnya tanpa biaya (lihat komentar di dekat akhir kode sumber).
sumber
Python 2 ,
147130113112106 byteCobalah online!
Diselamatkan:
sumber
lambda n:cmp(n,0)
bisa menjadi0 .__cmp__
.all(a==b for a,b in zip(l[::2],l[1::2]))
bisa menjadil[:-1:2]==l[1::2]
.Retina 0.8.2 , 57 byte
Cobalah online! Mengambil input yang dipisahkan koma, tetapi tautan menyertakan tajuk yang memproses kasus uji. Penjelasan:
Masukkan penanda sebelum setiap bilangan bulat positif.
Ubah koma di antara bilangan bulat dari tanda yang sama ke garis bawah.
Hapus tanda yang tersisa.
Tambahkan koma jika input tidak kosong.
Pastikan string terdiri dari pasangan run dari integer yang sama.
sumber
Python 2 , 111 byte
Cobalah online!
sumber
JavaScript (Node.js) , 155 byte
Cobalah online!
Inspirasi adalah jawaban @ KevinCruijssen
Juga terima kasih kepadanya untuk mengoreksi 2 kasus uji saya
sumber
r=0<i
menjadir=i%2
, karena kasus uji[1,-1,1]
dan[-1,1,-1]
gagal pada saat ini. Byte-count tetap sama untuk JS.Stax , 13 byte
Jalankan dan debug itu
sumber
Brachylog ,
1814 byteCobalah online!
Disimpan 4 byte berkat @ErikTheOutgolfer.
Penjelasan
sumber
APL (Dyalog Classic) , 48 byte
Cobalah online!
sumber