pengantar
Kerning berarti menyesuaikan jarak antara huruf-huruf teks. Sebagai contoh, perhatikan kata yang Top
ditulis dengan tiga mesin terbang berikut:
##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...
Kita bisa mengisi celah di antara mesin terbang dengan titik-titik dan diselesaikan dengan itu, tetapi celah itu entah bagaimana terlihat terlalu lebar. Sebaliknya, kami menggeser mesin terbang ke kiri sehingga hampir menyentuh:
#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...
Ini terlihat jauh lebih baik! Perhatikan bagaimana bilah T
di atas batas kiri o
. Dalam tantangan ini, tugas Anda adalah mengimplementasikan program kerning sederhana untuk mesin terbang persegi panjang tersebut.
Proses kerning
Pertimbangkan dua array karakter 2D persegi panjang .
dan #
dari bentuk yang sama. Dalam proses kerning sederhana kami, pertama-tama kami menempatkan array berdampingan, dengan satu kolom .
s di antaranya. Kemudian, kita memindahkan masing-masing #
dalam larik kanan satu langkah ke kiri, sampai beberapa #
s larik kiri dan kanan berdekatan secara ortogonal atau diagonal. Hasil dari kerning adalah langkah sebelumnya kami memperkenalkan #
s yang berdekatan . Tugas Anda adalah mengimplementasikan proses ini.
Mari kita ambil contoh:
Inputs:
..###
#....
#....
..##.
...#.
...##
..###
....#
Process:
..###....#.
#........##
#.......###
..##......#
..###...#.
#.......##
#......###
..##.....#
..###..#.
#......##
#.....###
..##....#
..###.#.
#.....##
#....###
..##...#
..####.
#....##
#...###
..##..#
Dalam array terakhir, kami memiliki pasangan #
s yang berdekatan , sehingga array kedua-ke-terakhir adalah hasil dari proses kerning.
Masukan dan keluaran
Untuk mempermudah, Anda hanya perlu menangani kerning dua mesin terbang. Input Anda adalah dua array 2D persegi panjang, dalam salah satu format berikut:
- 2D array integer, dengan 0 berdiri untuk
.
dan 1 untuk#
. - String multiline berakhir
.#
. - Array string berakhir
.#
. - 2D array karakter
.#
.
Jika input diambil sebagai string tunggal, Anda dapat menggunakan pembatas yang masuk akal. Namun, pembatas harus berada di antara dua array, artinya Anda tidak diperbolehkan untuk mengambil dua input yang sudah dipasangkan baris-demi-baris.
Output Anda adalah hasil dari proses kerning yang diterapkan pada dua array ini, yang merupakan array 2D persegi panjang dalam format yang sama dengan input. Anda diizinkan untuk menambah atau menghapus sejumlah kolom .
s terkemuka atau tertinggal , tetapi hasilnya harus persegi panjang dan memiliki ketinggian yang sama dengan input. Dijamin bahwa proses kerning berakhir sebelum tepi kiri input kedua meluncur di atas tepi kiri input pertama.
Aturan dan penilaian
Hitungan byte terendah dalam setiap bahasa pemrograman menang. Aturan standar kode-golf berlaku.
Uji kasus
Untuk membantu dengan copy-paste, test case ini diberikan sebagai daftar string.
["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
sumber
Jawaban:
APL (Dyalog Classic) ,
4039 byte-1 terima kasih kepada Erik the Outgolfer
Cobalah online!
sumber
Python 3 , 154 byte
Cobalah online!
sumber
Retina , 223 byte
Cobalah online! Tautan mencakup kotak uji dan skrip tajuk untuk memformatnya kembali ke format input pilihan dua string yang dibatasi-baris baru. Ini tampaknya terlalu lama namun mungkin ada kasus tepi yang saya abaikan, tetapi setidaknya melewati semua kasus uji sekarang. Penjelasan:
Gabungkan dua array input bersama-sama menggunakan huruf
i
sebagai pemisah. (Ini memungkinkan penggunaan\W
dan\b
nanti.)Ubah semua
.
s kei
s saat bergabung.Ubah semua
i
s di bawah ini#
menjadi@
s.Ubah semua
i
s di atas#
menjadi@
s.Ubah semua
@
s ke.
s, ditambah semuai
s yang berdekatan dengan@
s atau#
s.Jika tidak ada
#
setelahi
, maka ubah.
kembali berdekatan kei
lagi.Jika ada garis tanpa
i
s, ubah semuai
s menjadi.
, karena tidak ada yang dilakukan di sini.Hitung jumlah minimum
i
s pada baris apa pun.Sebarkan ke jalur lain.
Hapus
i
s, sehingga melakukan kerning yang diperlukan.sumber