String dianggap persegi jika kondisi berikut dipenuhi:
- Setiap baris memiliki jumlah karakter yang sama
- Jumlah karakter pada setiap baris sama dengan jumlah baris.
Tugas Anda adalah menulis program atau fungsi yang menentukan apakah string input yang diberikan adalah kuadrat atau tidak.
Anda mungkin memerlukan input untuk dibatasi oleh LF, CR, atau CRLF pilihan Anda.
Karakter baris baru tidak dianggap sebagai bagian dari panjang garis.
Anda mungkin memerlukan ada atau tidak menjadi baris baru di input, yang tidak dihitung sebagai baris tambahan.
Input adalah string atau array char 1D; ini bukan daftar string.
Anda dapat menganggap input tidak kosong dan hanya berisi ASCII yang dapat dicetak, termasuk spasi.
Anda harus menampilkan nilai kebenaran untuk string kuadrat dan yang salah untuk string lainnya.
Kasus uji kebenaran:
foo bar baz
.
.s. .ss .s. (s mewakili spasi)
ss ss (s mewakili spasi)
aaaaa aaaaa aaaaa aaaaa aaaaa
Kasus uji palsu:
.. .
.
.
.... ....
4444 333 22
333 333
abc.def.ghi
Perhatikan baris kosong ekstra dalam beberapa kasus palsu.
Ini adalah kode-golf - byte terkecil menang!
Jawaban:
Brachylog (2), 3 byte
Cobalah online!
Program lengkap. Keluaran
true.
untuk kebenaran,false.
untuk falsey.Penjelasan
Saya agak skeptis tentang kegunaan
ṁ
builtin ketika ditambahkan, tetapi saya tidak dapat benar-benar menyangkal bahwa ini sangat membantu di sini ...Brachylog (2), 7 byte
Cobalah online!
Solusi non-builtin.
Masih mengalahkan semua entri lainnya, pada saat penulisan.EDIT: Tidak cukup, entri Jelly dengan panjang yang sama masuk saat saya menulis ini, dan mengalahkannya melalui tiebreak timestamp.Penjelasan
sumber
ṁ
= "Tegaskan bahwa hasilnya kuadrat" :(.\l~l
tegas (itu akan menjadi sesuatu seperti pada saat itu, kecuali bahwa perintah backslash, yang antara lain menyatakan bahwa inputnya adalah persegi panjang , telah rusak; perhatikan bahwa meskipun kita gantiṁ
dengan.\l~l
, ini masih merupakan program terpendek di sini; kalau dipikir-pikir, saya akan menambahkannya ke posting). Perintah backslash diperbaiki, tetapi penulis bahasa memutuskan untuk menambahkan kotak-tegas pada saat yang sama. Saya berpikir "pasti itu tidak akan pernah muncul lagi". Ternyata saya salah.Python 2 , 52 byte
Cobalah online! atau Coba semua test case
sumber
'\n'
, biarkan saja kosong (karena tidak ada spasi dan tab di input).JavaScript (ES6),
4645 bytePenjelasan
true
kuadrat danfalse
untuk tidak.Cobalah
sumber
s=>!(s=s.split`\n`).some(x=>x.length-s.length)
!some
saja, hanya karena panjangnya samaevery
.05AB1E ,
108 byteCobalah online!
-2 Berkat Riley, ini pada dasarnya jawabannya ._.
sumber
s
. Seperti ini¶¡€gDgQP
Jelly ,
75 byteCobalah online!
Terima kasih kepada FryAmTheEggman untuk -2
sumber
Haskell,
3834 byteCobalah online!
Versi pointfree
f s = all ((==length (lines s)).length) (lines s)
, yaitu membagi input menjadi beberapa baris dan memeriksa apakah panjang setiap baris sama dengan jumlah baris.Sunting: Terima kasih kepada @xnor selama 4 byte.
sumber
all
untukmap
memotongand.
.Jelly , 7 byte
Cobalah online!
Penjelasan
sumber
Japt , 9 byte
Uji secara online!
Penjelasan
Menggunakan beberapa fitur yang diimplementasikan tidak lama setelah tantangan ini diposting, ini bisa 6 byte:
Uji secara online!
Penjelasan
sumber
y
adalah solusinya tetapi milik saya datang dengan beberapa byte lagi.Retina ,
3331 byteCobalah online! Penjelasan: Tahap pertama hanya mengubah semua ASCII yang dapat dicetak menjadi karakter yang sama agar lebih mudah dicocokkan. (Bisa dilakukan tanpa, tapi ini golf kode, bukan tantangan kode.) Tahap kedua cocok dengan setidaknya satu karakter di baris pertama. Namun, untuk setiap karakter tambahan di baris pertama, maka secara opsional cocok dengan baris baru diikuti oleh salinan dari baris pertama. Bagian terakhir dari ekspresi menyebabkan kecocokan gagal jika ada lebih banyak kolom daripada baris.
sumber
\S\n;
bukannya baris pertama menghemat satu byte.
dengan.
menghemat dua, tapi terima kasih.Sekam , 6 byte
Mengambil string dan mencetak salah satu
1
atau0
. Cobalah online! Baris pertama beralih pada kasus uji; hapus jika Anda ingin menguji pada satu nilai.Penjelasan
Husk adalah bahasa golf fungsional baru yang dibuat oleh saya dan Leo . Ini kehilangan banyak fitur dan pengembangan sedang berlangsung. Fitur utamanya adalah sistem tipe kaku yang memungkinkan kita untuk membebani fungsi tingkat tinggi.
Pada tingkat tinggi, program ini bekerja seperti ini:
Fungsi
≡
sebenarnya memeriksa apakah dua array memiliki bentuk yang sama dan distribusi elemen kebenaran yang sama. Dalam Sekam, semua karakter kecuali byte nol adalah benar, dan itu tidak akan terjadi pada input kami. Juga,S
adalah S-combinator , fungsi yang mengambil sebagai masukan dua fungsi, di sini≡
danT'a
, dan kembali fungsi baru yang petax
untuk≡(x)(T'a x)
. HasilS
disusun dengan¶
, dan fungsi itu diterapkan pada input secara implisit.Bagaimana Husk tahu bahwa itu harus berlaku
S
untuk fungsi berikutnya, tetapi¶
harus disusun dengan fungsi di sebelah kirinya? Sederhana: itu hanya mencoba setiap interpretasi dan memilih satu di mana jenisnya masuk akal. Ini dijelaskan lebih detail dalam dokumentasi Husk .sumber
Bash murni (tanpa utilitas), 55
mapfile
membaca input ke dalam arraya
Rasa kebalikan dari ini dikembalikan sebagai kode pengembalian shell (periksa dengan
echo $?
) - kuadrat sempurna adalah 1, yang lainnya adalah 0.Cobalah online (benar) .
Cobalah secara online (falsy) .
Jawaban sebelumnya menggunakan eval-escape-expansion hell, 78:
Cobalah online (benar) .
Cobalah secara online (falsy) .
sumber
Perl 6 , 27 byte
Menguji apakah jumlah baris dalam string input sama dengan jumlah karakter pada setiap baris.
sumber
.lines
metode.Pyth, 7 byte
Coba di sini
Tidak memerlukan trailing newline. Mengganti input dengan array 2D 1s di mana 1 mewakili karakter apa pun di input asli. Kemudian kami memeriksa apakah array itu tidak berubah setelah mentransposnya (mengganti kolom dengan baris). Hanya persegi yang akan mengembalikan true dalam situasi seperti itu.
sumber
Java (OpenJDK 8) ,
96919087 byte-5 byte berkat @KevinCruijssen
-1 byte terima kasih ke @TheLethalCoder
-2 byte terima kasih kepada @ OlivierGrégoire
Cobalah online!
sumber
String[]s
dan Anda dapat menghapus,0
di.split("\\n");
untuk -3 byte. Dan titik koma /;
di akhir Anda tidak perlu menghitung, sehingga -1 lain. Oh, dan Anda harus memasukkanjava.util.
di depanArrays
saya takut. Impor / usings juga merupakan bagian dari byte-count.java.util.
, hanya untuk-loop biasa seperti inifor(String x:s)if(x.length()!=s.length)return 0>1;return 1>0;
tampaknya lebih pendek darireturn java.util.Arrays.stream(s).anyMatch(l->l.length()!=s.length);
.\n
?a.split("\n")
sebenarnya lebih pendek!a->java.util.Arrays.stream(a.split("\n")).allMatch(x->x.length()==a.split("\n").length)
leng
danth()
. Jadi ternyata, mereka muncul pertama kali setelah karakter ke-60 lalu setiap 20 karakter.05AB1E , 7 byte
Cobalah online!
sumber
n
input bukannya 1 dan mengapa jawaban asli saya tidak berhasil.|
berarti "ambil sisa input dan bagi dengan baris baru" yang sama sekali tidak mengambil banyak input. Anda hanya perlu memperlakukan STDIN sebagai satu input.R , 57 byte
Fungsi anonim; Membagi baris baru, menghitung panjang setiap baris, dan memeriksa apakah semua sama dengan jumlah baris.
Cobalah online!
sumber
MATL ,
1412 byteString input didefinisikan menggunakan string concatenation (
[...]
) dan dengan titik kode10
untuk mewakili LF. Sebagai contoh,['aaa' 10 'bb']
ditafsirkan dalam MATL sebagai string yang disatukan'aaa'
dengan karakter dengan titik kode yang10
disatukan dengan string'bb'
.Output adalah vektor numerik yang tidak kosong, yang truthy jika dan hanya jika semua entri yang non-nol.
Cobalah online!
Penjelasan
Pertimbangkan input
['4444' 10 '333' 10 '22']
.sumber
R, 35 byte
Mengambil input dari stdin. Periksa bahwa jumlah karakter di setiap baris sama dengan jumlah total baris. Pengembalian
TRUE
atau yangFALSE
sesuai.sumber
JavaScript (ES6), 48 byte
sumber
CJam, 11 byte
Cobalah online!
sumber
OCaml , 56 byte
Cobalah online!
sumber
Pyth,
1210 byteDisimpan 2 byte berkat @FryAmTheEggman.
Cobalah online
Penjelasan
sumber
QBIC , 43 byte
Saya, saya senang dengan betapa singkatnya turunan QBasic untuk menghadapi tantangan ini.
Penjelasan:
sumber
Pyth, 7 byte
Demonstrasi
Transposkan input dengan pemotongan dua kali, lalu periksa apakah hasilnya sama dengan aslinya.
sumber
Ruby, 50 byte
Cobalah online!
Penjelasan
sumber
.split($/,-1);
->.split $/,-1;
lines
alih-alihread
kemudiansplit
(tetapi kemudian Anda harus menambahkan 1size
karena baris-baris menyertakan baris baru)Cheddar , 39 byte
Cobalah online!
sumber
Clojure, 58 byte
Membutuhkan baris baru, menantikan untuk melihat sesuatu yang lebih ajaib.
sumber
APL (Dyalog) , 17 byte
Membutuhkan
⎕ML←3
yang default pada banyak sistem. Menggunakan CR.Cobalah online!
↓∘⎕FMT
[adalah] split-ke-garis F atau m a t ted-ke-a-persegi argumen≡
sama dengan⎕TC[2]∘≠
karakter -kelompok-ke-non-baris-baru *⊂
dipartisi⊢
argumen?* Elemen kedua dari daftar T erminal C ontrol karakter.
Dalam versi 16.0, satu dapat menulis
↓∘⎕FMT≡⎕TC[3]∘≠⊆⊢
dengan⎕ML←1
.sumber
⎕ML
?⎕ML
, sementara orang yang memulai dengan APL lain cenderung menjalankan dengan rendah⎕ML
.PowerShell, 64 byte
Pendekatan yang sama (split, panjang garis, jumlah baris) seperti jawaban bahasa non-golf lainnya, tetapi tidak ada peta yang bagus () yang setara, jadi ini adalah array panjang garis dengan jumlah garis yang ditandai di bagian akhir, lalu array itu dikelompokkan. Kotak keluar seperti
3,3,3,3 -> 1 group, all line lengths and line count were equal
dan non-kotak keluar seperti3,2,1 -> 3 groups
, ada sesuatu yang tidak sama di alun-alun:Membutuhkan ujung gaya Linux baris baru, tanpa garis akhir baris baru. misalnya
(Dan Anda dapat melakukan hal yang sama untuk tes palsu, tapi saya tidak akan menaruhnya di sini karena ada lebih banyak dari mereka) Pasangan
@
simbol diperlukan ketika input adalah tunggal'.'
jika tidak membaginya tidak membuat array dari satu string, itu hanya membuat satu string, dan kemudian array array tidak menghasilkan1,1
output2
.Saya berharap mungkin lebih pendek untuk mengganti semua karakter dengan 'a', dan kemudian brute force dari 1 ke Input Length semua kotak 'a' dan lihat apakah ada yang cocok dengan input. Setelah saya melewati param () dan .Length dan -join dan -replace berakhir lebih lama lagi pada 81 byte:
sumber
Grime , 11 byte
Mencetak
1
untuk kotak dan0
untuk non-kotak. Cobalah online!Penjelasan
Penjelasan terperinci dapat ditemukan di halaman tutorial Grime , yang kebetulan berisi program yang tepat ini sebagai contoh.
sumber