Basitleştirilmiş karakter aralığı uygulayın


24

Giriş

Karakter aralığı, bir metnin harfleri arasındaki boşluğu ayarlamak anlamına gelir. Örnek olarak, Topaşağıdaki üç glifle yazılmış kelimeyi düşünün :

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

Glifler arasındaki boşlukları noktalarla doldurabilir ve bununla yapılabilir, ancak boşluklar bir şekilde çok geniş görünür. Bunun yerine, glifleri sola doğru kaydırıyoruz, böylece neredeyse dokunuyorlar:

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

Bu çok daha iyi görünüyor! Çubuğunun Tsol kenarlığın üstünde olduğuna dikkat edin o. Bu zorlu görevde, göreviniz böyle dikdörtgen glifler için basit bir karakter aralığı programı uygulamaktır.

Karakter aralığı

İki dikdörtgen 2D karakter dizileri düşünün .ve #aynı şekil. Basit karakter aralığı sürecimizde ilk önce dizileri yan yana, aralarında bir sütun olacak şekilde yerleştiriyoruz .. Sonra, #sağdaki dizinin her birini bir adım sola, #sola ve sağ dizinin bir kısmı ortogonal veya çapraz olarak bitişik olana kadar hareket ettiririz. Karakter aralığı sonuç adımıdır önce biz bitişik tanıtmak #s. Görevin bu süreci uygulamak.

Bir örnek alalım:

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

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

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

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

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

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

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

Son dizide yeni bitişik #s çiftlerine sahibiz , bu yüzden ikinci-son dizi karakter aralığı işleminin sonucudur.

Giriş ve çıkış

Basit olması için, sadece iki glifin karakter aralığını kullanmanız gerekir . Girişleriniz, aşağıdaki biçimlerden birinde iki dikdörtgen 2D dizidir:

  • Tamsayıların 2 dizisi, 0 .ve 1 için olanlar #.
  • Multiline dizeleri bitti .#.
  • Dizelerin dizileri bitti .#.
  • Karakterlerin 2B dizileri .#.

Girişler tek bir dize olarak alınırsa, makul sınırlayıcıları kullanabilirsiniz. Bununla birlikte, sınırlayıcı iki dizi arasında ilerlemelidir; bu, daha önce satırlar eşleştirilmiş iki girişi almanıza izin verilmeyeceği anlamına gelir.

Çıktınız, girişlerle aynı biçimde dikdörtgen bir 2D dizi olan bu iki diziye uygulanan karakter aralığı işleminin sonucudur. S'nin herhangi bir sayıda satır veya son sütununu eklemenize veya kaldırmanıza izin verilir ., ancak çıktının dikdörtgen olması ve girişlerle aynı yüksekliğe sahip olması gerekir . Karakter aralığı işleminin, ikinci girişin sol kenarı, ilk girişin sol kenarı üzerinde kaymadan önce sona ermesi garanti edilir.

Kurallar ve puanlama

Her programlama dilinde en düşük bayt sayısı kazanır. Standart kuralları geçerlidir.

Test durumları

Kopya yapıştırmaya yardımcı olmak için, bu test durumları dizelerin listesi olarak verilmiştir.

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
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 durumu 5 yanlış görünüyor.
user202729 20:17

@ user202729 Teşekkürler, şimdi düzeltildi. Test kutularını kum havuzunda sabitlemek için birkaç tur atladım ve görünüşe göre bunu kaçırdım.
Zgarb

Ayrıca eğer iki karakter birbirinin içine girerse program ne yapmalı?
user202729 20:17

@ user202729 Bunun olmayacağını varsayabilirsiniz. "Giriş ve çıkış" bölümünün son cümlesine bakınız.
Zgarb

Yanıtlar:




2

Retina , 223 bayt

+`(.+)¶(¶(.+¶)*)(\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

Çevrimiçi deneyin! Link, iki yeni satır sınırlı dizgelerin tercih edilen girdi biçiminde biçimlendirmek için test senaryoları ve başlık betiğini içerir. Bu aşırı uzun gözüküyor, ancak muhtemelen göz ardı ettiğim son bir vaka var, ancak en azından şimdi tüm test durumlarını geçiyor. Açıklama:

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

iAyırıcı olarak bir harf kullanarak iki giriş dizisini bir araya getirin . (Bu kullanılmasına izin verir \Wve \bdaha sonra.)

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

Birleşmedeki bütün .s yi değiştir i.

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

iS altındaki #s'nin hepsini s olarak değiştirin @.

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

iS üzerindeki #s'nin hepsini s ile değiştirin @.

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

Tüm @s'leri .s, artı s veya s'ye ibitişik tüm s'leri değiştirin .@#

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

A'dan #sonra yoksa, ibitişiği .tekrar itekrar değiştirin.

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

Hiçbir olan bir çizgi varsa is, tüm değiştirmek iiçin s .burada yapacak bir şey olmadığı için, s.

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

iHerhangi bir satırdaki minimum s sayısını hesaplayın .

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

Diğer çizgilere yay.

i

S'yi silin i, böylece istenen karakter aralığı gerçekleştirilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.