ใช้การจัดช่องไฟแบบง่าย


24

บทนำ

การจัดช่องไฟหมายถึงการปรับระยะห่างระหว่างตัวอักษรของข้อความ ยกตัวอย่างพิจารณาคำที่Topเขียนด้วยร่ายมนตร์ต่อไปนี้สามอัน:

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

เราสามารถเติมช่องว่างระหว่างร่ายมนตร์ด้วยจุดแล้วเติมลงไปได้ แต่ช่องว่างก็ดูกว้างเกินไป แต่เราเลื่อนร่ายมนตร์ไปทางซ้ายเพื่อให้พวกมันสัมผัสเกือบ:

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

มันดูดีขึ้นมาก! หมายเหตุวิธีบาร์ของด้านบนของเส้นขอบด้านซ้ายของT oในการท้าทายนี้งานของคุณคือการใช้โปรแกรมการจัดช่องไฟอย่างง่ายสำหรับร่ายมนตร์รูปสี่เหลี่ยมผืนผ้าดังกล่าว

กระบวนการจัดช่องไฟ

พิจารณาสองสี่เหลี่ยม 2D อาร์เรย์ของตัวอักษร.และ#รูปทรงเดียวกัน ในขั้นตอนการจัดช่องไฟอย่างง่ายของเราอันดับแรกเราวางอาร์เรย์แบบเรียงต่อกันโดยมีคอลัมน์หนึ่งคอลัมน์.อยู่ระหว่างกัน จากนั้นเราย้ายแต่ละรายการ#ในอาเรย์ขวาหนึ่งก้าวไปทางซ้ายจนกระทั่ง#อาเรย์ซ้ายและขวาบางอันอยู่ติดกันแบบมุมฉากหรือแนวทแยงมุม ผลลัพธ์ของการจัดช่องไฟเป็นขั้นตอนก่อนที่เราจะแนะนำ#s ที่อยู่ติดกัน งานของคุณคือการใช้กระบวนการนี้

ลองมาตัวอย่าง:

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

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

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

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

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

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

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

ในอาร์เรย์สุดท้ายเรามีคู่ของ#s ที่อยู่ติดกันใหม่ดังนั้นอาร์เรย์ที่สองถึงสุดท้ายคือผลลัพธ์ของกระบวนการ kerning

อินพุตและเอาต์พุต

เพื่อความเรียบง่ายคุณจะต้องจัดการการจัดช่องไฟของร่ายมนตร์สองอัน อินพุตของคุณเป็นอาร์เรย์ 2D แบบสี่เหลี่ยมผืนผ้าสองรูปแบบในรูปแบบใดรูปแบบหนึ่งต่อไปนี้:

  • อาร์เรย์ 2 มิติของจำนวนเต็มด้วย 0 ยืน.และ 1 #สำหรับ
  • .#หลายสายมากกว่า
  • .#อาร์เรย์ของสตริงมากกว่า
  • อาร์เรย์ 2 .#มิติของตัวละคร

หากอินพุตถูกใช้เป็นสตริงเดี่ยวคุณสามารถใช้ตัวคั่นที่เหมาะสมใด ๆ อย่างไรก็ตามตัวคั่นควรอยู่ระหว่างสองอาร์เรย์ซึ่งหมายความว่าคุณไม่ได้รับอนุญาตให้รับอินพุตทั้งสองที่จับคู่กันแล้วต่อแถว

ผลลัพธ์ของคุณเป็นผลมาจากกระบวนการการจัดช่องไฟที่ใช้กับสองอาร์เรย์ซึ่งเป็นอาร์เรย์ 2D แบบสี่เหลี่ยมในรูปแบบเดียวกับอินพุต คุณได้รับอนุญาตให้เพิ่มหรือลบจำนวนคอลัมน์นำหน้าหรือต่อท้ายของ.s ใด ๆ แต่ผลลัพธ์จะต้องเป็นรูปสี่เหลี่ยมผืนผ้าและมีความสูงเท่ากับอินพุต มีการรับประกันว่ากระบวนการการจัดช่องไฟจะจบลงก่อนที่ขอบด้านซ้ายของภาพนิ่งที่สองที่ป้อนเข้าที่ขอบด้านซ้ายของอินพุตแรก

กฎและการให้คะแนน

จำนวนไบต์ต่ำสุดในแต่ละภาษาการเขียนโปรแกรมชนะ ใช้กฎมาตรฐานของ

กรณีทดสอบ

เพื่อช่วยในการคัดลอกวางกรณีทดสอบเหล่านี้จะได้รับเป็นรายการของสตริง

["#"] ["#"] -> ["#.#"]
["#.","..",".#"] ["##","..","##"] -> ["#..##",".....",".#.##"]
["..#","#..","#.."] ["...","..#","###"] -> ["..#..","#...#","#.###"]
["###.","##..","#...","...."] ["....","...#","..#.",".#.."] -> ["###..","##..#","#..#.","..#.."]
["..##...","#......","#......"] [".....##",".....##",".#...#."] -> ["..##..##","#.....##","#.#...#."]
["...#.",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["...#..",".....#",".#....","......","....#."]
["..#..",".....",".....",".....","....#"] [".....","....#","#....",".....","....."] -> ["..#..","....#","#....",".....","....#"]
["######","#.....","#.....","#.....","######"] ["......",".....#",".#...#",".....#","......"] -> ["######..","#......#","#..#...#","#......#","######.."]
["######","#.....","#.....","#.....","######"] ["......","......",".#....","......","......"] -> ["######","#.....","#.#...","#.....","######"]
["#...#","#..#.","#.#..","##...","#.#..","#..#.","#...#"] ["...#.","..#..",".#...",".#...",".#...","..#..","...#."] -> ["#...#..#","#..#..#.","#.#..#..","##...#..","#.#..#..","#..#..#.","#...#..#"]
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 กรณีทดสอบ 5 ดูเหมือนจะผิด
user202729

@ user202729 ขอบคุณมันได้รับการแก้ไขแล้ว ฉันผ่านหลายรอบของการแก้ไขกรณีทดสอบใน sandbox และเห็นได้ชัดว่าพลาด
Zgarb

นอกจากนี้หากตัวละครทั้งสอง "ตกผ่าน" กันโปรแกรมควรทำอย่างไร
user202729

@ user202729 คุณสามารถสันนิษฐานได้ว่าจะไม่เกิดขึ้น ดูประโยคสุดท้ายของส่วน "อินพุตและเอาต์พุต"
Zgarb

คำตอบ:




2

เรติน่า 223 ไบต์

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

ลองออนไลน์! การเชื่อมโยงรวมถึงกรณีทดสอบรวมถึงสคริปต์ส่วนหัวเพื่อจัดรูปแบบใหม่ให้เป็นรูปแบบอินพุตที่ต้องการของสองสตริงที่คั่นด้วยบรรทัดใหม่ นี่ดูเหมือนจะนานเกินไป แต่อาจมีกรณีขอบที่ฉันมองข้าม แต่อย่างน้อยก็ผ่านกรณีทดสอบทั้งหมดตอนนี้ คำอธิบาย:

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

เข้าร่วมทั้งสองอาร์เรย์เข้าด้วยกันโดยใช้ตัวอักษรiเป็นตัวคั่น (สิ่งนี้อนุญาตการใช้งาน\Wและ\bหลังจากนั้น)

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

เปลี่ยน.s ทั้งหมดเป็นis ที่เข้าร่วม

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

เปลี่ยนทุกis ด้านล่าง#เพื่อ@s

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

เปลี่ยนทั้งหมดiข้างต้น#s เป็น@s

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

เปลี่ยน@s ทั้งหมดเป็น.s รวมทั้งis ทั้งหมดที่อยู่ติดกับ@s หรือ#s

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

หากไม่มี#หลังจากiนั้นเปลี่ยนที่อยู่ติดกัน.กลับไปที่iอีกครั้ง

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

หากมีบรรทัดที่ไม่มีis เปลี่ยนis ทั้งหมดเป็น.s เนื่องจากไม่มีอะไรให้ทำที่นี่

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

คำนวณจำนวนขั้นต่ำของiบรรทัดใด ๆ

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

เผยแพร่ไปยังสายอื่น ๆ

i

ลบis ดังนั้นการดำเนินการจัดช่องไฟที่จำเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.