Deskripsi
Kami menganggap bilangan bulat dengan setidaknya 3 digit triple-balance jika, ketika dipecah menjadi tiga bagian, digit di setiap bagian dijumlahkan ke nomor yang sama. Kami membagi angka sebagai berikut:
abcdefghi - Standard case: the number of digits is divisable through 3:
abc def ghi
abcdefgh - Number % 3 == 2: The outer groups are both assigned another digit
abc de fgh (the inner group will have one digit less than both outer groups)
abcdefghij - Number % 3 == 1: The inner group is assigned the extra digit
abc defg hij (the inner group will have one digit more than the outer groups)
Tantangan
Tugas Anda adalah menulis sebuah program, yang, diberi bilangan bulat dengan setidaknya 3 digit, menentukan apakah angka yang diberikan adalah triple-balance dan menghasilkan nilai yang benar atau salah berdasarkan hasil itu.
Uji kasus
333 -> True
343 -> False
3123 -> True
34725 -> True
456456 -> False
123222321 -> True
Ini adalah kode-golf , jadi celah standar berlaku dan semoga jawaban terpendek dalam byte menang!
code-golf
number
arithmetic
decision-problem
racer290
sumber
sumber
when split in three parts,
Jawaban:
Python 2 ,
938886 byte-4 byte terima kasih kepada @LeakyNun
-2 byte terima kasih kepada @ Mr.Xcoder
Cobalah online!
sumber
Jelly , 23 byte
Cobalah online!
Pasti ada cara yang lebih pendek yang entah bagaimana terbang di atas kepalaku ...
sumber
Retina , 89 byte
Cobalah online! Tautan termasuk kasus uji. Penjelasan: Tahap pertama menambahkan baris baru di awal dan akhir input. Tahap kedua kemudian mencoba untuk memindahkan digit melintasi baris baru secara berpasangan, namun jika tidak ada cukup angka yang tersisa di tengah maka tahap ketiga dapat memindahkan mereka kembali, menyebabkan loop berhenti. Tahap keempat kemudian mengonversi setiap digit secara terpisah menjadi unary sehingga menjumlahkannya, sedangkan tahap terakhir hanya memeriksa bahwa jumlahnya sama.
sumber
Mathematica, 142 byte
sumber
Jelly , 20 byte
Cobalah online!
Bagaimana itu bekerja
sumber
MATL , 26 byte
Cobalah online! Atau verifikasi semua kasus uji .
sumber
Javascript, 178 byte
sumber
([...b],s=~b.length/3|0,f=(m,v)=>+m+ +v,y=b.splice(s).reduce(f))=>b.splice(-s).reduce(f)==y&y==b.reduce(f)
(berhati-hatilah saat menyalin dari komentar ketika Stack Exchange memasukkan karakter yang tidak terlihat).Java 8, 149 byte
Mengambil input sebagai
int[]
.Penjelasan:
Coba di sini.
Berikut ini adalah ikhtisar dari bagian-bagian 0-diindeks (eksklusif) untuk setiap panjang:
a
kami perulangan dari0
ke(length + 1) / 3)
(nilai ini sekarang disimpan dis
);b
kita loop daris
kelength / 3 * 2 +
(0
jika panjang modulo-3 adalah 0;1
jika panjang modulo-3 adalah 1 atau 2) (nilai ini sekarang disimpan dis
);c
kita loop daris
kelength
.(ketiga loop adalah 0-diindeks eksklusif)
sumber
Röda , 82 byte
Cobalah online!
Penjelasan:
sumber
JavaScript,
129, 104 byteFungsi r mengiris string berdasarkan parameter b dan e, lalu menjumlahkan digit dan mengembalikan nilainya.
Untuk memotong dalam ukuran yang benar, kami membagi panjangnya dengan 3 dan membulatkan hasilnya. Memanggil slice (0, result) memberi kita blok pertama, slice (result, -result) memberi kita blok kedua, dan slice (result) memberi kita yang terakhir. Karena cara saya memanggil slice, saya menggunakan slice (hasil, 4 * hasil) bukan yang terakhir tetapi memberikan hasil yang sama.
Akhirnya, saya bandingkan hasilnya menunjukkan nilainya sama.
Sunting: prinsip yang sama, bermain golf lebih baik
sumber
&&
ke&
dalam JavaScript? Kedua pemeriksaan bekas (&&z
dan&&y[1]==y[2]
) tampaknya tidak mengubah nilai, jadi jika memungkinkan, seharusnya tidak mempengaruhi hasil dari apa yang saya lihat.