Diberikan string teks ASCII yang dapat dicetak (termasuk baris baru dan spasi) yang berisi setidaknya satu karakter yang bukan baris baru atau spasi, mengeluarkan nilai kebenaran jika string berbentuk persegi panjang, dan nilai falsey sebaliknya. Selain itu, kode sumber untuk solusi Anda harus empat persegi panjang .
String berbentuk persegi panjang jika memenuhi semua kondisi berikut:
- Baris pertama dan baris terakhir tidak mengandung spasi.
- Karakter pertama dan terakhir dari setiap baris bukanlah spasi.
- Semua baris memiliki jumlah karakter yang sama.
Misalnya, teks berikut berbentuk persegi panjang:
abcd
e fg
hijk
Teks ini, bagaimanapun, bukan persegi panjang (persyaratan # 3):
1234
567
8900
Uji Kasus
Benar:
sdghajksfg
asdf
jkl;
qwerty
u i op
zxcvbn
1234
5 6
7890
abcd
e fg
hijk
Falsey:
a b c
123
456
7 9
12
345
qwerty
uiop
zxcvnm
1234
567
8900
Ini adalah kode-golf , jadi solusi terpendek dalam byte menang.
Jawaban:
C (gcc) ,
127125124118 byter*=!e&(!t|t==c);
ker>>=e||t&&t-c;
. (Golf ini adalah inspirasi untuk tips C saya baru-baru ini menjawab pembaruan bendera Inverse .)*(_-2)
ke_[~1]
.*_++-10||(...)
ke*_++<11?...:0
dan memanfaatkan placeholder nol...:0
(yang tidak digunakan secara konstruktif) untuk golf ituc++
menambah . Mereka golf memungkinkan beberapa perulangan loop lebih lanjut.Cobalah online!
Tata letak sumber mencapai persegi panjang yang lebih tinggi.
Penjelasan
Berikut ini menjelaskan versi panjangnya 124 byte.
Cobalah online!
sumber
r,e,c,t
Java 10,
214176169152144139 byte-5 byte terima kasih kepada @Neil .
Gunakan
String[]a
bukanvar a
;return-r<0;
bukannyareturn r>0;
; dan menambahkan komentar//
di bagian paling akhir, jadi tidak ada spasi di baris pertama dan terakhir.Perhatikan bahwa persegi panjang ini lebih pendek dari input baris tunggal, karena
int r=1,...;
harus diganti denganint[]v{1,...};
, dan semua penggunaan bilangan bulat akan menjadiv[n]
(di mana n adalah indeks variabel dalam arrayv
).Cobalah online.
Penjelasan:
Berikut adalah program dasar yang sama dengan spasi (
128126 byte ):-2 byte terima kasih kepada @Neil .
Cobalah online.
sumber
T-SQL,
237207 byteOutput 1 untuk persegi panjang, 0 sebaliknya. Saya harus menggunakan banyak paren dan kurung tambahan untuk menghilangkan ruang, saya yakin ada ruang luas untuk perbaikan.
Penjelasan :
Per opsi I / O yang diizinkan dan klarifikasi dalam komentar pertanyaan, input diambil sebagai baris terpisah dalam tabel yang sudah ada t . Karena data dalam SQL secara inheren tidak berurutan, tabel itu mencakup bidang identitas "nomor baris" i :
Pada dasarnya SQL saya melakukan 3 subqueries, yang masing-masing mengembalikan
0
atau1
berdasarkan pada 3 kriteria kode "persegi panjang". 3 nilai tersebut dikalikan bersama, hanya mengembalikan1
kode yang memenuhi semua 3.EDIT : Gabungan kriteria 2 dan 3 ke dalam SELECT yang sama untuk menghemat ruang
The
TRIM(v)
Fungsi hanya didukung oleh SQL 2017 dan di atas. Versi sebelumnya akan perluLTRIM(RTRIM(v))
, yang akan membutuhkan penyeimbangan ulang baris.Satu catatan acak:
LEN()
fungsi dalam SQL mengabaikan spasi tambahan, jadiLEN('foo ') = 3
. Untuk mendapatkan "benar" panjang Anda harus menempelkan karakter ke akhir lalu kurangi satu: Psumber
C ++,
199183181175 bytesFungsi templat ini menerima baris sebagai kumpulan string (yang mungkin string lebar), dilewatkan sebagai sepasang iterator.
Terima kasih karena pengguna Salah karena mengingatkan saya pada
back()
anggotastd::string
dan telah menunjukkan itunpos+1
itu nol.Setara tidak disatukan
Satu-satunya golf nyata adalah menyatukan baris pertama dan terakhir sehingga kita dapat melakukan satu
find
untuk spasi di dalamnya.Program uji
sumber
.find(' ')+1==0
, dans.back()
bukannya*s.rbegin()
.JavaScript (Node.js) , 85 byte
Cobalah online!
sumber
NOR
operator Anda !Python 2 , 82 byte
Cobalah online!
Diminta sebagai
f("abcd", "e fg", "hijk")
.sumber
Haskell ,
10610298110109102 byteTerima kasih kepada @nimi dan @Laikoni untuk setiap byte!
Cobalah online!
sumber
Haskell , 79 byte
Cobalah online! Mengambil input sebagai daftar baris.
Pola
g(x:r)= ...
mengikat baris pertama kex
dan daftar (mungkin kosong) dari sisa barisr
. Kemudianall((==(0<$x)).(0<$))r
periksa apakah semua barisr
memiliki panjang yang sama denganx
(Menggunakan ujung ini ).Jika tidak, maka hubungan
&&
arus pendek dan kembaliFalse
, jika tidak sisi kanan dievaluasi. Ada string build yang terdiri darix
untuk baris pertama,last(x:r)
untuk baris terakhirr
(atau baris pertama lagi dalam kasusr
kosong) dan(head<$>r)
untuk karakter pertama dan(last<$>r)
terakhir dari setiap baris. Untuk string ini,all(>='!')
periksa apakah tidak mengandung spasi apa pun (kami tidak dapat menggunakan(>' ')
karena pembatasan kode sumber).sumber
contains at least one character that is neither a newline nor a space
, yang juga memungkinkan untuk menjatuhkan case daftar kosong.MATL , 13 byte
Input adalah larik string, dalam format
{'abc' 'de'}
.Output array yang berisi satunya, yang truthy , atau array yang mengandung setidaknya nol, yang falsey .
Cobalah online! Atau verifikasi semua kasus uji , termasuk uji kebenaran / kesalahan.
Penjelasan
sumber
cO6Lt&(32=~
Cobalah online! Hanya nulls bagian non-perbatasan, lalu periksa apakah ada spasi.cF6Lt&(32=~
. Jangan ragu untuk mengeditnya, atau jika tidak kita bisa membiarkannya di komentar.JavaScript (ES6), 88 byte
Cobalah online!
sumber
Kanvas ,
1715 byteCoba di sini!
Penjelasan (ASCII-fied untuk monospace):
sumber
Perl 5 , 70 byte
Cobalah online!
Keluaran
0
untuk kebenaran, angka lain untuk falsey.sumber
Merah ,
216191 byteCobalah online!
Saya meletakkan banyak tanda kurung yang tidak perlu di baris pertama dan terakhir.
sumber
Jelly , 17 byte
Cobalah online!
sumber
Does not seem to enforce equal line length
juga yang kukatakan." \n "
Coba online!Jelly , 15 byte
Menggunakan metode yang dikembangkan oleh Mnemonic dalam (saat ini - karena kegagalan kasus tepi) menghapus pengiriman Pyth. (jika sekarang sudah diperbaiki, beri kredit !)
Tautan monadik yang menerima daftar karakter yang mengembalikan 1 atau 0.
Cobalah online!
Bagaimana?
sumber
Japt , 22 byte
Jawaban tidak bersaing: ada bug yang dikenal di Japt , di mana rotasi array dua dimensi memotong hasilnya. Karena bug itu, kode di bawah ini hanya berfungsi pada input yang persegi. Namun, jika bug tidak ada, kode di bawah ini akan berfungsi dengan benar.
Mengambil input sebagai array string. Menggunakan tanda kurung alih-alih spasi membuat persyaratan kode persegi cukup mudah.
Coba di sini .
sumber
Ruby 2.5+, 63 byte
Mengambil input sebagai array string. Tidak ada tautan tes, karena versi pada TIO (2.4) terlalu tua untuk yang satu ini. Sebaliknya, ini versi yang sedikit lebih panjang (69 byte) untuk pengujian:
Cobalah online!
Perbedaannya adalah bahwa sejak 2.5 Ruby mendukung secara langsung melewati pola Regex ke
all?, any?, none?
metode, yang menyelamatkan kita beberapa byte. Metode itu sendiri cukup jelas - kami menguji:sumber
C (gcc) , 119 byte
Mengambil input sebagai daftar n string.
Cobalah online!
sumber
C # (.NET Core) ,
145167 byteCobalah online!
sumber
S[0].IndexOf(" ")
sedang mencari spasi di baris pertama danS[S.Count()-1].IndexOf(" ")
mencari di baris terakhir. Jika tidak ada spasi di baris pertama dan terakhir, itu -2 yang kemudian benar-2 < -1
.True
ketika diteruskan ke program Anda. Ini merupakan batasan tambahan dalam tantangan ini.