Terapkan kerning yang disederhanakan


24

pengantar

Kerning berarti menyesuaikan jarak antara huruf-huruf teks. Sebagai contoh, perhatikan kata yang Topditulis 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 Tdi 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 berlaku.

Uji kasus

Untuk membantu dengan copy-paste, test case ini diberikan sebagai daftar string.

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
code-golf  grid  code-challenge  atomic-code-golf  code-golf  combinatorics  probability-theory  card-games  code-golf  number  geometry  code-golf  decision-problem  chess  code-golf  math  number  sequence  code-golf  string  regular-expression  code-golf  arithmetic  integer  code-golf  math  array-manipulation  code-golf  number  decision-problem  integer  code-golf  string  ascii-art  kolmogorov-complexity  code-golf  decision-problem  graph-theory  binary-matrix  code-golf  string  parsing  code-golf  string  code-golf  morse  code-golf  code-golf  string  code-golf  ascii-art  cellular-automata  code-golf  binary  base-conversion  code-golf  arithmetic  decision-problem  integer  checksum  code-golf  matrix  linear-algebra  code-golf  code-golf  game  code-golf  sequence  binary  code-golf  combinatorics  optimization  code-golf  decision-problem  quine  code-golf  rational-numbers  bitwise  code-golf  string  permutations  code-golf  kolmogorov-complexity  unicode  code-golf  ascii-art  number  code-golf  number  integer  binary  base-conversion  code-golf  array-manipulation  code-golf  chemistry  code-golf  number  sequence  fibonacci  code-golf  matrix  optimization  code-golf  number  code-golf  math  number  sequence  code-golf  math  array-manipulation  matrix  linear-algebra  code-golf  kolmogorov-complexity  cops-and-robbers  cops-and-robbers  code-golf  tips  basic  code-golf  decision-problem  binary  tiling  game  king-of-the-hill  python  code-golf  c  code-golf  ascii-art  code-golf  string  kolmogorov-complexity  alphabet  code-golf  number  code-golf  string  code-golf  number  sequence  integer  code-golf  number  permutations  restricted-complexity  restricted-time 

Visualizer . Test case 5 tampaknya salah.
user202729

@ user202729 Terima kasih, sudah diperbaiki sekarang. Saya telah melalui beberapa putaran memperbaiki kasus uji di kotak pasir, dan tampaknya melewatkan yang itu.
Zgarb

Juga jika dua karakter "jatuh melalui" satu sama lain apa yang harus dilakukan program?
user202729

@ user202729 Anda dapat menganggap itu tidak akan terjadi. Lihat kalimat terakhir dari bagian "Input dan output".
Zgarb

Jawaban:



2

Python 3 , 154 byte

lambda a,b,p=".":[c.rstrip(p)+d.lstrip(p).rjust(max(len((d+c).strip(p))for(c,d)in zip((a*3)[1:],b[:-1]+b+b[1:]))+1-len(c.rstrip(p)),p)for(c,d)in zip(a,b)]

Cobalah online!


2

Retina , 223 byte

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4
T`.`i`\.*i\.*
+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@
+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3
T`i@`.`i*[#@]+i
mT`.`i`\.+i+$
msT`i`.`.*^\W+$.*
+`(\b(i+)\W+\2i*)i
$1.
+s`\bi((i+).+\b\2\b)
.$1
i

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:

+`(.+)¶(¶(.+¶)*)(\W+(¶|$))
$2$1i$4

Gabungkan dua array input bersama-sama menggunakan huruf isebagai pemisah. (Ini memungkinkan penggunaan \Wdan \bnanti.)

T`.`i`\.*i\.*

Ubah semua .s ke is saat bergabung.

+`(¶(.)*#.*i.*¶(?<-2>.)*)i
$1@

Ubah semua is di bawah ini #menjadi @s.

+`(¶(.)*)i(.*¶(?<-2>.)*(?(2)(?!))#.*i)
$1@$3

Ubah semua is di atas #menjadi @s.

T`i@`.`i*[#@]+i

Ubah semua @s ke .s, ditambah semua is yang berdekatan dengan @s atau #s.

mT`.`i`\.+i+$

Jika tidak ada #setelah i, maka ubah .kembali berdekatan ke ilagi.

msT`i`.`.*^\W+$.*

Jika ada garis tanpa is, ubah semua is menjadi ., karena tidak ada yang dilakukan di sini.

+`(\b(i+)\W+\2i*)i
$1.

Hitung jumlah minimum is pada baris apa pun.

+s`\bi((i+).+\b\2\b)
.$1

Sebarkan ke jalur lain.

i

Hapus is, sehingga melakukan kerning yang diperlukan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.