Tantangan Anda hari ini adalah mengambil string multiline, dan menampilkan kuadrat terbesar yang terkandung dalam string yang mencakup sudut kiri atas.
String persegi adalah tempat:
- Setiap baris memiliki jumlah karakter yang sama
- Jumlah karakter pada setiap baris sama dengan jumlah baris.
Pertimbangkan kemungkinan input string berikut:
abcde
fgh
asdf
foobar
Kotak terbesar yang dapat Anda ambil dari itu yang mencakup karakter pertama ( a
di sudut kiri atas) adalah ini:
abc
fgh
asd
Tidak mungkin ada persegi panjang sisi 4, karena baris kedua tidak cukup panjang. Sekarang pertimbangkan input potensial ini:
a
bcd
edf
ghi
Alun-alun terbesar di sini adalah adil a
. Kotak 3x3 yang terbentuk di bagian bawah tidak mengandung karakter pertama, dan tidak masuk hitungan.
Berikut beberapa kasus uji lagi:
a
a
abc
def
gh
ab
de
ab
cd
ab
cd
abcde
fghij
klm
no
abc
fgh
klm
a
b
a
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 semua baris tidak kosong, dan hanya berisi ASCII yang dapat dicetak, termasuk spasi dan baris baru (untuk pembatas baris) tetapi tidak tab.
Ini adalah kode-golf , byte terkecil menang!
.split('\n')
jadi saya tidak melihat mengapa beberapa harus mendapatkannya secara gratis.Jawaban:
Brachylog , 11 byte
Cobalah online!
Penjelasan
sumber
ṁ
Built-in memang sangat berguna!Sekam , 13 byte
Cobalah online!
Penjelasan
sumber
GNU sed ,
106 + 194 + 2 = 96 byte+2 byte untuk
-rz
bendera. Menggunakan karakter yang tidak patut NUL dan BEL, ditampilkan sebagai@
dan di#
sini. Lihat di bawah untuk dump xxd.Terima kasih kepada @seshoumara karena mengirim saya ke jalan menuju
-z
.Cobalah online!
Penjelasan
Ini berfungsi dengan memasukkan dua kursor ke dalam teks — satu untuk melangkahi garis dan satu untuk melangkahi kolom. Kursor diwakili oleh NUL (0x00) dan BEL (0x07), masing-masing, tetapi dalam contoh di bawah ini saya akan menggunakan
@
dan#
. Misalkan kita memiliki input ini:Kursor BEL disisipkan sebelum kolom ke-0 dan kursor BEL sebelum garis ke-0 (di sini saya telah menjaga kolom tetap selaras untuk keterbacaan; tetapi dalam kenyataannya tidak ada bantalan kiri):
Dalam satu lingkaran, kursor dipindahkan satu karakter ke kanan dan satu baris ke bawah, masing-masing:
Setelah setiap iterasi, ia memeriksa dua kondisi:
Jika salah satu kondisi salah, loop berakhir. Script selesai dengan menghapus semuanya setelahnya
@
pada setiap baris dan semua setelah#
dalam ruang pola.dump xxd
sumber
line1\nline2\nline3
di mana\n
adalah\x5C\x6E
? Yang?\n
ditafsirkan sebagai karakter baris baru (\x0A
, tidak\x5C\x6E
) dan saya tidak dapat menemukan cara untuk membuat sed mengambil input dengan karakter baris baru sebagai satu baris.-z
benderanya. Terima kasih!Python 2 , 81 byte
Cobalah online!
Metode yang menarik, tetapi 2 byte lebih lama.
Python 2 , 83 byte
Cobalah online!
sumber
input
hanya membaca satu baris?raw_input()
akan menambah lebih banyak byte.JavaScript (ES6), 77 byte
Secara rekursif menggunakan ekspresi reguler untuk mencari kotak yang lebih besar dan lebih besar sampai tidak ada yang ditemukan.
Ekspresi reguler adalah ini untuk kotak 3x3:
Input diharapkan berakhir dengan baris baru, dan output adalah daftar.
Penjelasan:
Potongan:
Tampilkan cuplikan kode
sumber
Brachylog , 16 byte
Cobalah online!
sumber
Perl 5 , 84 byte
Cobalah online!
Memenuhi
"abcde\nfghij\nklm\nno"
test case.sumber
chop
sebagai gantichomp
dan++$i<@a
bukannya$i++<$#a
R ,
84838176 byte-5 byte porting pendekatan Dennis dengan
sum
Cobalah online!
membaca dari stdin, mencetak ke stdout tanpa baris baru.
Sedikit tidak berbulu:
sumber
C (gcc) ,
162159151147144142137 bytePasti ada pukulan untuk bermain golf di sini ...
Cobalah online!
sumber
!=-1
menjadi>-1
atau tidakgetchar()
nilai output lebih kecil dari minus satu? Mungkinkah itu terjadi+1
?~
untuk mendeteksi minus satu.Jelly , 15 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Java 8, 150 byte
Penjelasan:
Coba di sini.
sumber
MATL , 33 byte
Cobalah online!
Perasaan spidey saya memberi tahu saya bahwa mungkin ada cara yang lebih pendek (saya memikirkan sesuatu dengan
Ybo
benar sejak awal) ... Membutuhkan baris baru di akhir. (Catatan: Saya sedikit over-engineered, karena ini akan menangani garis kosong juga, yang tidak diperlukan. Saya akan melihat apakah saya dapat mengurangi bytecount, karena dalam kode golf, ini bukan fitur, tetapi bug)sumber
Python 2 , 132 byte
Cobalah online!
sumber
Python 2 , 103 byte
Cobalah online!
sumber
JavaScript (ES6), 95 byte
Membutuhkan jalur baru yang tertinggal dalam input.
sumber
Bahasa Wolfram (Mathematica) , 81 byte
Cobalah online!
sumber
APL (Dyalog) , 25 byte *
Fungsi awalan Tacit. Mengembalikan matriks.
Cobalah online!
Ini benar-benar di atas dua fungsi independen, yaitu
⎕AV[3]∘≠⊆⊢
yang berkaitan dengan format input canggung dan↑↑⍨2⍴(⌊/≢,≢¨)
yang melakukan pekerjaan menarik yang sebenarnya.⎕AV[3]∘≠
perbedaan dari LF (elemen ketiga dari A tomic V ector - set karakter)⊆
partisi (substring dimulai pada nilai yang lebih besar dari pendahulunya dan turun pada 0s)⊢
argumen(
...)
terapkan fungsi diam-diam berikut:2⍴(
...)
bentuk ulang yang berikut ini untuk panjang 2:⌊/
minimum≢
jumlah string,
diikuti oleh≢¨
jumlah karakter dalam setiap string↑⍨
ambil banyak baris dan kolom dari↑
string dicampur bersama untuk membentuk matriks (padding dengan spasi)* Dalam klasik dengan
⎕ML
( M igration L Evel)3
(default pada banyak sistem) dan menggantikannya⊂
untuk⊆
dan⊃
untuk yang paling kiri↑
. Tio!sumber
⎕ML←3
sudah usang, jadi saya lebih suka menunjukkan bahasa seperti yang biasanya muncul. Faktanya, hampir semua solusi APL Dyalog saya mengasumsikan Classic hanya karena kami menghitung byte alih-alih karakter, meskipun bahkan versi Unicode memberikan arti kurang dari 256 karakter.PHP, 123 byte
membutuhkan PHP 5.4, 5.5 atau 5.6. Ganti
split
denganexplode
untuk nanti PHP.Jalankan dengan
php -nr '<code> '<string>'
atau coba online . (Pastikan Anda memilih versi PHP yang cocok!)
sumber
Haskell ,
9288 bytesCobalah online!
sumber
Perl 5, 60 +5 (-0777p) byte
Cobalah online
sumber
-0777
. Apa yang harus dilakukan-00
dan-0777
dilakukan.-0
adalah untuk menentukan pemisah rekaman dalam format oktal777
adalah nilai khusus untuk menunjukkan tidak ada pemisah sehingga seluruh file dibaca,0
adalah nilai khusus lain untuk menunjukkan "mode paragraf", pemisah lebih dari 1 baris baru berturut-turutPerl 6 ,
158140 byteCobalah online!
Hore untuk jawaban Perl 6 pertama saya. Saya akan bermain-main dengan beberapa opsi baris perintah untuk melihat apakah saya bisa bermain golf ini sedikit lebih. Semua bantuan menghemat byte diterima!
sumber
Scala , 201 byte
Cobalah online!
Pertama kali bermain golf dalam bahasa ini, jadi mungkin bukan yang terbaik.
sumber