Jika Anda menyatakan bilangan bulat positif dalam biner tanpa nol di depan dan ganti setiap 1
dengan a (
dan setiap 0
dengan a )
, maka apakah semua tanda kurung akan cocok?
Dalam kebanyakan kasus mereka tidak mau. Misalnya, 9 1001
dalam biner, yang menjadi ())(
, di mana hanya dua kurung pertama yang cocok.
Namun terkadang mereka akan cocok. Sebagai contoh, 44 berada 101100
dalam biner, yang menjadi ()(())
, di mana semua tanda kurung kiri memiliki tanda kurung yang cocok.
Tulis program atau fungsi yang menggunakan bilangan bulat sepuluh basis positif dan cetak atau kembalikan nilai kebenaran jika versi tanda kurung biner memiliki semua tanda kurung yang cocok. Jika tidak, mencetak atau mengembalikan falsy nilai.
Kode terpendek dalam byte menang.
Contoh kebenaran di bawah 100:
2, 10, 12, 42, 44, 50, 52, 56
Contoh-contoh palsu di bawah 100:
1, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 43, 45, 46, 47, 48, 49, 51, 53, 54, 55, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
Jawaban:
TeaScript , 9 byte
16 18 20 22 24Disimpan 2 byte berkat produk @ETH
Wow. Itu pendek. Menggunakan pendekatan xnor. Ini akan menggunakan fungsi ganti rekursif (
W
) yang akan menggantikan semua10
sama()
dengan apa-apa. Jika string kosong, itu seimbang.Menggunakan versi TeaScript yang dibuat setelah tantangan ini diposting ini bisa menjadi 7 byte:
Tidak disatukan
Penjelasan
sumber
~--c
itu salah dalam skenario yang sama persis denganc--
.Pyth, 10 byte
Coba suite tes ini di Pyth Compiler.
Bagaimana itu bekerja
sumber
!u:G`Tk.BQ
. Boleh dibilang lebih mudah dimengerti.Python2, 87 byte
Implementasi yang mengerikan yang menyalahgunakan kesalahan sintaksis.
sumber
JavaScript (ES6),
555451 byteBytes yang disimpan berkat @ Vɪʜᴀɴ dan @xsot !
Penjelasan
sumber
f=
. Anda juga bisa menggunakan use+c
bukanc|0
case ke integer. Anda juga dapat menggunakan(+c?d++:d--)
mana yang lebih pendekf=
? Karena banyak jawaban JavaScript lain di situs nama fungsinya.11
, kembalitrue
ketika itu harus kembalifalse
n=>![...n.toString(d=2)].some(c=>(d+=c*2-1)<2)*d==2
Python 2, 45 byte
Fungsi rekursif. Membaca angka biner
n
dari akhir, menjaga hitungani
level sarang saat ini dari parens. Jika jatuh di bawah0
, tolak. Ketika kami mencapai awal, periksa apakah hitungannya0
.Sebenarnya, kami mulai menghitung
i=1
untuk memudahkan memeriksa apakah sudah jatuh0
. Satu-satunya kasus keberhasilan terminal adalahn==0
dani==1
, diperiksan<i<2
. Kami memaksakan pemeriksaan ini terjadi jikan==0
, atau jikai
jatuh0
, dalam hal ini secara otomatis gagal.feersum menyelamatkan dua byte dengan merestrukturisasi kasus-kasus non-rekursif dengan ketidaksetaraan pada hubungan pendek.
sumber
f=lambda n,i=1:n>0<i*f(n/2,i+(-1)**n) or n<i<2
, setidaknya, menghemat 1.CJam, 11 byte
Ini sedikit haram: Untuk angka yang dapat di-parentifikan, ia akan mencetak satu atau lebih blok. Untuk nomor yang tidak dapat di-parent-kan, ia akan mogok tanpa mencetak apa pun ke STDOUT. Jika Anda mencoba ini secara online dalam juru bahasa CJam , perlu diingat bahwa itu tidak membedakan antara STDOUT dan STDERR.
Karena string non-kosong / kosong adalah true / falsy dalam CJam dan hasil cetak selalu berupa string, ini bisa dibilang mematuhi aturan. Dengan biaya tambahan 3 byte lebih, untuk total 14 byte , kita dapat meninggalkan string benar atau salah pada tumpukan yang akan dicetak:
Ini masih macet untuk nomor yang tidak dapat di-parent-kan, yang diizinkan secara default .
Tes berjalan
Bagaimana itu bekerja
CJam, 15 byte
Coba biola ini dalam juru bahasa CJam atau verifikasi semua kasus uji sekaligus .
Bagaimana itu bekerja
sumber
Python, 51 byte
Fungsi anonim. Mengevaluasi ekspresi yang terlihat seperti
Setiap penggantian menghapus semua
10
, yang sesuai dengan()
. Setelah semua penggantian dilakukan, fungsi mengembalikan apakah yang tersisa hanyalah awalan biner0b
. Lebih dari cukup untuk melakukann
penggantian, karena angkak
-digit mengambil paling banyakk/2
langkah, dan nilainya paling banyak2**k
.sumber
Ruby, 40
Manipulasi string sederhana. Teteskan '10' sampai tidak ada yang tersisa.
sumber
Serius , 17 byte
Output
0
untuk false dan1
true. Cobalah online .Penjelasan:
sumber
Japt, 23 byte
Japt adalah versi singkat dari Ja vaScri pt . Penerjemah
Ini mengingatkan saya seberapa jauh Japt belum pergi dibandingkan dengan TeaScript. Setelah mengubah penerjemah dalam beberapa hari ke depan, saya ingin menambahkan karakter "pintas" seperti Vɪʜᴀɴ.
Bagaimana itu bekerja
Tak lama setelah tantangan ini, @ Vɪʜᴀɴ (sekarang dikenal sebagai @Downgoat) membantu saya menerapkan fitur rekursif-ganti, seperti
W
pada jawaban TeaScript. Ini berarti bahwa tantangan ini sekarang dapat dilakukan hanya dalam 5 byte:Uji secara online!
sumber
Mathematica, 49 byte
sumber
1,0
dari daftar, dan uji apakah hasilnya daftar kosong.Oktaf, 48 byte
sumber
C ++,
10494 byteJalankan dengan kompiler ini , harus menentukan input standar sebelum menjalankan.
Penjelasan
n>>=1
.c+=n&1?-1:1
terus menghitung kurung buka)
.n&c>=0
berhenti ketika hanya 0 yang tersisa atau kurung tutup lebih dari yang dibuka.sumber
Haskell,
4946 byteContoh penggunaan:
f 13
->False
.Saya melacak tingkat bersarang
l
seperti banyak jawaban lainnya. Namun, kasus "seimbang" diwakili oleh1
, jadi kasus "lebih-)
-tan-(
" adalah0
.PS: menemukan penyesuaian level bersarang
l+(-1)^n
dalam jawaban xnor .sumber
signum
tampaknya terlalu rumit, bagaimana hanya_#0=1<0
?l>0
bukanl==1
?l==1
seimbang. Jikal>1
, tanda kurung tidak seimbang.Python 2,
6057565553525049 byteTerima kasih kepada xnor karena telah menghemat dua byte dan feersum untuk menjadikan jumlah byte terakhir menjadi 49!
Penjelasan
Nomor input,,
n
diproses dari bit terkecilnya.i
adalah penghitung yang melacak jumlah 0 dan 1. Perhatikan bahwa ia diinisialisasi1
untuk menyimpan byte. Pengulangan akan dibatalkan sebelumn
mencapai 0 jika angka 1 melebihi angka 0 (i<=0
).Agar tanda kurung seimbang, dua syarat diperlukan:
i==1
)n==0
). Sunting: Saya menyadari bahwa kondisi ini tidak perlu karenai
harus non-positif jikan!=0
kondisi sebelumnya cukup.sumber
i
dann
tidak negatif makai==n==0
itui+n==0
.i
bisa negatif jika loop dibatalkan sebelum waktunya.i|n==0
harus selalu bekerja.while i*n
harus bekerjaJavaScript ES5,
11887858277 byteTeknik menarik menurut saya. Kurang banyak sih, terima kasih kepada @ETHproductions, dan @NotthatCharles
JavaScript ES6,
77575654 byte-21 byte ke produk ETH.
sumber
function p(x){x=x.toString(2);r=/10/;while(x.search(r)>=0){x=x.replace(r,"")}return!x}
x=>([...x=x.toString(2)].map(_=>x=x.replace(/10/,"")),!x)
adalah untuk memindahkan loop sementara ke dalam.map
, karena tidak pernah ada lebih banyak '10 dalam input daripada panjangnya.map
.x=>[...x=x.toString(2)].map(_=>x=x.replace(/10/,""))&&!x
IDK jika itu bisa menjadi lebih pendek.D,
209170 byteIni melakukan persis apa yang seharusnya dilakukan tanpa tambahan atau manfaat.
sumber
C, 67 byte
Cukup banyak port pengiriman python saya.
sumber
Prolog, 147 byte
Bagaimana itu bekerja
Mengonversi angka desimal N ke representasi biner sebagai daftar (terbalik). Berarti:
Kemudian:
Berulang dari daftar [H | T] meningkat N jika elemen head adalah 0 sebaliknya menguranginya.
Jika N pada titik mana pun menjadi negatif atau jika N pada akhirnya bukan 0 menghasilkan false, yang lain benar.
Pemotongan
Apakah ada untuk mencegah backtracking dan menemukan solusi non-biner ke b (N, [N])
Pengujian
Coba online di sini
Jalankan dengan kueri seperti:
sumber
PowerShell, 106 Bytes
Tidak akan memenangkan kompetisi terpendek, itu sudah pasti. Tapi hei, setidaknya itu mengalahkan Jawa?
Menggunakan panggilan .NET yang sangat panjang
[convert]::ToString($a,2)
untuk mengonversi nomor input kami menjadi string yang mewakili digit biner. Kami kemudian untuk loop melalui string itu dengan1..$b.length|%{..}
. Setiap loop, jika digit kami adalah1
(dievaluasi dengan%2
daripada-eq1
menyimpan beberapa byte), kami menambah penghitung kami; selain itu, kami menurunkannya. Jika kita mencapai negatif, itu berarti ada lebih)
dari yang(
ditemui sejauh ini, jadi kita output0
danexit
. Setelah kita melalui loop,$c
adalah salah satu0
atau beberapa angka>0
, jadi kita ambil yang logis-bukan!
dari itu, yang mendapat output.Ini memiliki kekhasan keluaran
0
jika orangtua tidak cocok karena kita memiliki lebih banyak)
, tetapi mengeluarkanFalse
jika orangtua tidak cocok karena kita memiliki lebih banyak(
. Pada dasarnya pernyataan falsy yang secara fungsional setara, hanya menarik. Jika parens semua cocok, keluaranTrue
.sumber
GNU Sed (dengan ekstensi eval), 27
Sed tidak benar-benar memiliki gagasan yang jelas tentang kebenaran dan falsey, jadi di sini saya mengklaim bahwa string kosong berarti benar dan semua string lainnya berarti falsey.
Jika ini tidak dapat diterima, maka kita dapat melakukan hal berikut:
GNU Sed (dengan ekstensi eval), 44
Ini menghasilkan 1 untuk kebenaran dan 0 sebaliknya.
sumber
𝔼𝕊𝕄𝕚𝕟 (ESMin), 21 karakter / 43 byte
Try it here (Firefox only).
Perhatikan bahwa ini menggunakan variabel yang ditentukan sebelumnya ke angka (khususnya 2 dan 0). Ada variabel angka yang telah ditetapkan dari 0 hingga 256.
19 karakter / 40 byte, tidak kompetitif
Try it here (Firefox only).
Memutuskan untuk mengimplementasikan output implisit ... Namun, form output sebelumnya masih didukung, sehingga Anda mendapatkan beberapa opsi output!
sumber
Java,
129131 byteMungkin bisa dipersingkat. Penjelasan yang akan datang. Terima kasih untuk Geobits selama 4 byte!
sumber
int k=0;
denganint j=0;
?int k=0,j=0;for(...
Kemudian Anda bisa meletakkanchar[]
deklarasi di dalam penginisialisasi loop untuk menyimpan tanda titik koma juga.C ++, 61 byte
Saya pikir jawaban C ++ saat ini salah: ia mengembalikan nilai kebenaran untuk semua bilangan genap, misalnya 4. Penafian: Saya tidak dapat menggunakan kompiler yang disebutkan, jadi saya menggunakan g ++ 4.8.4. Masalahnya terletak pada penggunaan biner DAN operator dan bukan logika AND yang digunakan untuk memutuskan lebih awal ketika jumlah kurung tutup melebihi jumlah kurung pembuka. Pendekatan ini bisa berfungsi jika
true
direpresentasikan sebagai kata dengan pola bit yang benar. Pada sistem saya, dan mungkin sebagian besar sistem lain,true
setara dengan1
; hanya sedikit yang benar. Juga,n/=2
lebih pendek darin>>=1
. Ini adalah versi yang disempurnakan sebagai fungsi:sumber
𝔼𝕊𝕄𝕚𝕟 (sangat tidak kompetitif), 6 karakter / 8 byte
Try it here (Firefox only).
Saya telah memutuskan untuk meninjau kembali tantangan ini setelah waktu yang sangat, sangat lama. 𝔼𝕊𝕄𝕚𝕟 menjadi jauh lebih baik.
Alasan mengapa ini adalah jawaban yang terpisah adalah karena kedua versi tersebut hampir sepenuhnya berbeda.
Penjelasan
Mengonversi input ke biner, secara rekursif menggantikan instance 10, lalu memeriksa apakah hasilnya adalah string kosong.
sumber
C # 98 byte
terbuka untuk saran. Saya suka tantangan ini bahkan itu sudah tua
sumber