pengantar
Terkadang, kotak saya terlalu kecil untuk memuat apa pun di dalamnya. Saya ingin Anda membuat kotak expander! Jadi, apa yang membuat kotak sebuah kotak dalam tantangan ini.
OOOO
O O
O O
O O
OOOO
Sudut kotak selalu spasi. Kotak itu sendiri dapat dibuat dari karakter yang sama. Karakter itu dapat berupa karakter ASCII yang dapat dicetak , kecuali spasi. Jadi, itulah karakter-karakter ini:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
Panjang sisi kotak di atas adalah 4, 3 . Anda dapat mengasumsikan bahwa panjang sisi selalu positif . Itu berarti bahwa ini adalah kotak terkecil yang perlu Anda tangani:
#
# #
#
Untuk memperluas kotak, Anda harus menambah setiap sisi. Mari kita lalui ini, langkah demi langkah, dengan contoh di atas. Kami pertama-tama mengambil sisi atas kotak, yaitu:
OOOO
Kami memperluas ini satu per satu, jadi kami mendapatkan:
OOOOO
Ini adalah bagian atas dan bawah kotak sekarang. Setelah itu, kita melakukan hal yang sama dengan sisi-sisi di kiri dan kanan:
O
O
O
Menjadi:
O
O
O
O
Sekarang kami memasang kembali kotak, yang menghasilkan:
OOOOO
O O
O O
O O
O O
OOOOO
Tugas
Diberikan sebuah kotak, perluas dengan 1. Kotak tersebut dapat diberikan dalam beberapa baris, atau dalam sebuah array.
Uji kasus
OOOO OOOOO
O O > O O
OOOO O O
OOOOO
XXXXXX XXXXXXX
X X > X X
X X X X
XXXXXX X X
XXXXXXX
~ ~~
~ ~ > ~ ~
~ ~ ~
~~
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
Jawaban:
V ,
65 byteCobalah online!
Ini sebenarnya satu byte lebih lama dari yang seharusnya. Seharusnya:
Tetapi ini memiliki bug yang tidak dikenal. :(
Penjelasan:
sumber
ä
adalah operator duplikat (pada dasarnya "y" dan "p" bersama dalam satu byte) demikianäê
juga "kolom duplikat"Vim, 7 byte
di mana ♥ adalah Control-V.
sumber
YP
kedua kali untuk konsistensi?p
saat merekam animasi, jadi saya terjebak dengannya ketika menuliskan jawabannya. Apakah itu penting? > _>;<C-v> G
danYP
. Itu agak membuat bahasa saya terasa murahan. : /JavaScript (ES6),
575352 bytePenjelasan: Regexp pertama menduplikasi kolom kedua dan regexp kedua menduplikasi baris kedua, sehingga memperbesar kotak yang diinginkan. Sunting: Disimpan 4 byte berkat MartinEnder ♦.
sumber
Python,
4942 byteLambda anonim:
-7 dari xnor
Versi sebelumnya:
D adalah fungsi yang menduplikasi item kedua dari suatu urutan.
sumber
lambda L:[s[:2]+s[1:]for s in L[:2]+L[1:]]
.map(D,D(s))
akan memberikan 43 sebagai gantinyaRetina , 20 byte
Hitungan byte mengasumsikan penyandian ISO 8859-1.
Cobalah online! (Ada beberapa baris tambahan yang memungkinkan suite uji di mana kasus uji dipisahkan oleh dua baris baris.)
Penjelasan
1
adalah batas yang membatasi Retina untuk menerapkan substitusi hanya pada pertandingan pertama yang ditemukannya.¶
cocok dengan satu linefeed, jadi kami hanya perlu mempertimbangkan mengganti linefeed di akhir baris pertama. Itu diganti dengan¶$%'¶
, di mana$%'
memasukkan seluruh baris setelah pertandingan (elemen substitusi khusus-Retina). Karenanya, ini menggandakan baris kedua.Di sini,
%
adalah mode per-baris, sehingga setiap baris diproses secara terpisah, dan baris-baris tersebut digabungkan lagi sesudahnya.2=
juga merupakan batasan. Ini berarti "menerapkan substitusi hanya pada pertandingan kedua". Pertandingan itu sendiri sederhana satu karakter dan substitusi menggandakannya. Karenanya, tahap ini menduplikasi kolom kedua.sumber
Haskell, 24 byte
Menggunakan ide RootTwo untuk menduplikasi baris dan kolom kedua. Ini
map f
melakukan ini untuk setiap baris, danf.
kemudian melakukan ini ke baris.sumber
PowerShell v2 +,
575352 byteSedikit mirip dengan jawaban JavaScript Neil . Pengganti pertama cocok dengan awal baris dan dua karakter berikutnya, dan menggantinya dengan karakter pertama dan kedua-karakter-dua kali. Alih-alih ganti kedua, itu diganti untuk array-indexing untuk menduplikasi baris kedua. Mengambil input sebagai array string. Irisan array yang dihasilkan ditinggalkan pada pipa dan pencetakan tersirat.
Disimpan 4 byte berkat Martin.
Beberapa contoh:
sumber
Brachylog ,
2826 byte2 byte berkat Fatalize.
Cobalah online!
sumber
MATL , 12 byte
Input adalah array char 2D, dengan titik koma sebagai pemisah baris. Misalnya, kotak uji pertama memiliki input
Cobalah online! Uji kasus 1 , 2 , 3 .
Penjelasan
Kode melakukan dua hal berikut: ulangi baris kedua array dan transpos.
Untuk mengulangi baris kedua array
m
×n
, vektor[1 2 2 3 ... m]
digunakan sebagai indeks baris. Vektor ini dihasilkan sebagai berikut: rentang[1 2 3 ... m]
, lampirkan yang lain2
, urutkan.sumber
Pyth , 10 byte
Cobalah online!
sumber
SED
69 19(14 +1 untuk -r) 15sumber
/.\(.\)/\0\1;2p
?2p
, saya pikir ada cara untuk melakukannya, tetapi saya tidak dapat menemukannya. Terima kasih!\0
referensi balik , karena mereka mulai dari 1. Manual online GNU sed tidak berbicara tentang itu. Namun, penggunaannya&
menurut saya setara dan lebih pendek.\0
itu?CJam , 14 byte
Mirip dengan jawaban MATL saya , tetapi ulangi baris kedua terakhir bukan yang kedua.
Cobalah online!
Penjelasan
sumber
K, 15 byte
Mengambil input sebagai matriks karakter:
Terapkan fungsi dua kali (
2{…}/
) yang memberikan transpose (+
) dari argumen yang tepat diindeks (x@
) oleh decode run-length tambahan (&
) dari satu tambah (1+
) daftar lokasi sama dengan 1 (1=
) dalam kisaran dari 0 hingga (!
) ukuran dimensi luar dari argumen yang benar (#x
).Selangkah demi selangkah,
Coba di sini dengan OK.
sumber
APL,
1715 byteUji:
Penjelasan:
sumber
⌽⍉
atau⊖⍉
, tetapi dalam hal ini tidak masalah.ListSharp , 326 byte
Saya pasti perlu menambahkan fungsi bersarang, tetapi ini bekerja dengan sangat baik
berkomentar jika Anda ingin penjelasan
sumber
JavaScript,
160146141 bytesumber
Dyalog APL , 14 byte
Misalnya untuk
kami menemukan indeks; {1, 2, 3} untuk baris, dan {1, 2, 3, 4} untuk kolom. Sekarang kita letakkan elemen awal untuk mendapatkan {2, 3} dan {2, 3, 4}, dan kemudian tambahkan dengan {1, 2}, memberi {1, 2, 2, 3} dan {1, 2, 2, 3, 4}. Akhirnya, kami menggunakan ini untuk memilih baris dan kolom, sekaligus menggandakan baris 2 dan kolom 2.
TryAPL online!
sumber
Ruby, 46 byte
Solusi yang sangat lurus, mengambil input sebagai array garis. Saya tidak suka duplikat
insert
, jadi akan mencoba golf itu.sumber
C #,
127124 byteKompilasi ke a
Func<List<string>, List<string>>
.Versi yang diformat:
sumber