Thực hiện đơn giản hóa


24

Giới thiệu

Kerning có nghĩa là điều chỉnh khoảng cách giữa các chữ cái của văn bản. Ví dụ, xem xét từ Topđược viết bằng ba glyph sau:

##### ..... .....
..#.. ..... .....
..#.. ..##. .###.
..#.. .#..# .#..#
..#.. .#..# .#..#
..#.. ..##. .###.
..... ..... .#...
..... ..... .#...

Chúng ta chỉ có thể lấp đầy các khoảng trống giữa các glyph bằng các dấu chấm và được thực hiện với nó, nhưng các khoảng trống bằng cách nào đó trông quá rộng. Thay vào đó, chúng tôi trượt glyphs sang trái để chúng gần như chạm vào:

#####........
..#..........
..#..##..###.
..#.#..#.#..#
..#.#..#.#..#
..#..##..###.
.........#...
.........#...

Điều này có vẻ tốt hơn nhiều! Lưu ý cách thanh của Tnằm trên đỉnh của đường viền bên trái của o. Trong thử thách này, nhiệm vụ của bạn là thực hiện một chương trình k sâu đơn giản cho các hình tượng hình chữ nhật như vậy.

Quá trình tiên phong

Hãy xem xét hai hình chữ nhật mảng nhân vật 2D của .#hình dạng tương tự. Trong quy trình k sâu đơn giản của chúng tôi, trước tiên chúng tôi đặt các mảng cạnh nhau, với một cột .s ở giữa. Sau đó, chúng ta di chuyển từng #mảng trong mảng bên phải một bước sang trái, cho đến khi một số #s của mảng bên trái và bên phải nằm liền kề hoặc theo đường chéo. Kết quả của k sâu là bước trước khi chúng tôi giới thiệu #s liền kề . Nhiệm vụ của bạn là thực hiện quy trình này.

Hãy lấy một ví dụ:

Inputs:
..###
#....
#....
..##.

...#.
...##
..###
....#

Process:
..###....#.
#........##
#.......###
..##......#

..###...#.
#.......##
#......###
..##.....#

..###..#.
#......##
#.....###
..##....#

..###.#.
#.....##
#....###
..##...#

..####.
#....##
#...###
..##..#

Trong mảng cuối cùng, chúng ta có các cặp #s liền kề mới , vì vậy mảng thứ hai đến cuối cùng là kết quả của quá trình k sâu.

Đầu vào và đầu ra

Để đơn giản, bạn chỉ cần xử lý hai chữ glyphs. Đầu vào của bạn là hai mảng 2D hình chữ nhật, theo một trong các định dạng sau:

  • Mảng 2D của các số nguyên, với 0 đứng .và 1 cho #.
  • Chuỗi đa dòng trên .#.
  • Mảng dây trên .#.
  • Mảng 2D của các nhân vật .#.

Nếu các đầu vào được lấy dưới dạng một chuỗi, bạn có thể sử dụng bất kỳ dấu phân cách hợp lý nào. Tuy nhiên, dấu phân cách phải đi giữa hai mảng, nghĩa là bạn không được phép lấy hai đầu vào đã được ghép nối theo từng hàng.

Đầu ra của bạn là kết quả của quá trình k sâu áp dụng cho hai mảng này, đó là một mảng 2D hình chữ nhật có cùng định dạng với các đầu vào. Bạn được phép thêm hoặc xóa bất kỳ số cột dẫn hoặc dấu nào của .s, nhưng đầu ra phải là hình chữ nhật và có cùng chiều cao với đầu vào. Nó được đảm bảo rằng quá trình k sâu kết thúc trước khi cạnh trái của đầu vào thứ hai trượt qua cạnh trái của đầu vào đầu tiên.

Quy tắc và tính điểm

Số byte thấp nhất trong mỗi ngôn ngữ lập trình sẽ thắng. Tiêu chuẩn quy tắc áp dụng.

Các trường hợp thử nghiệm

Để giúp dán sao chép, các trường hợp thử nghiệm này được đưa ra dưới dạng danh sách các chuỗi.

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
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 

Trình hiển thị . Trường hợp thử nghiệm 5 dường như là sai.
dùng202729

@ user202729 Cảm ơn, giờ nó đã được sửa. Tôi đã trải qua nhiều vòng sửa chữa các trường hợp thử nghiệm trong hộp cát, và dường như đã bỏ lỡ cái đó.
Zgarb

Ngoài ra nếu hai nhân vật "rơi vào nhau" thì chương trình phải làm gì?
dùng202729

@ user202729 Bạn có thể cho rằng điều đó sẽ không xảy ra. Xem câu cuối cùng của phần "Đầu vào và đầu ra".
Zgarb

Câu trả lời:




2

Võng mạc , 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

Hãy thử trực tuyến!Liên kết bao gồm các trường hợp thử nghiệm cộng với tập lệnh tiêu đề để định dạng lại chúng thành định dạng đầu vào ưa thích của hai chuỗi được phân tách bằng dòng mới. Điều này có vẻ quá dài nhưng có lẽ có một trường hợp cạnh mà tôi đã bỏ qua, nhưng ít nhất nó đã vượt qua tất cả các trường hợp thử nghiệm bây giờ. Giải trình:

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

Nối hai mảng đầu vào với nhau bằng một chữ cái ilàm dấu phân cách. (Điều này cho phép sử dụng \W\b sau này.)

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

Thay đổi tất cả .thànhi s tại tham gia.

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

Thay đổi tất cả is dưới đây #thành@ s.

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

Thay đổi tất cả các is ở trên #thành@ s.

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

Thay đổi tất cả các @s thành .s, cộng với tất cả các is liền kề với @s hoặc #s.

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

Nếu không có #sau một i, sau đó thay đổi .trở lại liền kề thành một ilần nữa.

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

Nếu có một dòng không có is, hãy thay đổi tất cả is thành .s, vì không có gì để làm ở đây.

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

Tính số is tối thiểu trên bất kỳ dòng nào.

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

Tuyên truyền đến các dòng khác.

i

Xóa is, do đó thực hiện các k sâu yêu cầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.