Submission details
Task:Monikulmio
Sender:rottis
Submission time:2025-10-27 14:01:02 +0200
Language:Ruby
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttimescore
#1ACCEPTED0.08 s10details
#2ACCEPTED0.09 s10details
#3ACCEPTED0.09 s10details
#4ACCEPTED0.09 s10details
#5ACCEPTED0.09 s10details
#6ACCEPTED0.08 s10details
#7ACCEPTED0.12 s10details
#8ACCEPTED0.12 s10details
#9ACCEPTED0.16 s10details
#10ACCEPTED0.23 s10details

Code

# TODO oudot muodot joissa kaks parallel viivaa
#
# FIX: jos sisällä, niin viiva collision määriä vas. puolella PARITON
# jos ei, parillinen

def get_line_dir(vertex1, vertex2)
  return [
    vertex2[0] <=> vertex1[0],
    vertex2[1] <=> vertex1[1]
  ]
end

def get_line_char(dir)
  #* tarkoittaa monikulmion kärkipistettä.
  #Merkit =, |, / ja \ ilmaisevat monikulmion janat.
  #Merkki # tarkoittaa monikulmion sisäpuolista aluetta.
  #Merkki . ulkona

  if dir[1] == 0
    return "="
  elsif dir[0] == 0
    return "|"
  elsif dir[0] == dir[1]
    return "\\"
  else
    return "/"
  end
end


input = gets.chomp.split(" ").map(&:to_i)

n = input[0]
m = input[1]
k = input[2]

vertices = []

k.times do
  input = gets.chomp.split(" ").map(&:to_i)

  vertices.append([input[1] * 3 - 2, input[0] * 3 - 2])
end

board = []

(n * 3).times do
  board.append("#" * (m * 3))
end

idx = 0
vertices.each do |vertex1|
  idx += 1
  vertex2 = vertices[(idx) % vertices.length]

  line_dir = get_line_dir(vertex1, vertex2)

  line_char = get_line_char(line_dir)

  board[vertex1[1]][vertex1[0]] = "*"
  while vertex1 != vertex2
    vertex1 = [vertex1[0] + line_dir[0], vertex1[1] + line_dir[1]]
    board[vertex1[1]][vertex1[0]] = line_char
  end
end

board[vertices[0][1]][vertices[0][0]] = "*"

deltas = [
  [-1, 0],
  [1, 0],
  [0, -1],
  [0, 1]
]

propagate_positions = [0, 0]

while propagate_positions.length > 0
  pos = propagate_positions.pop()
  
  if pos[0] < 0 || pos[1] < 0 || pos[0] >= (m * 3) || pos[1] >= (n * 3)
    next
  end
  
  if board[pos[1]][pos[0]] != "#"
    next
  end
  
  board[pos[1]][pos[0]] = "."

  deltas.each do |delta|
    propagate_positions.append([pos[0] + delta[0], pos[1] + delta[1]])
  end
end

board.each_with_index do |row, idx|
  if idx % 3 != 1
    next
  end
  row.chars.each_with_index do |char, chidx|
    if chidx % 3 != 1
      next
    end
    print(char)
  end
  puts
end

Test details

Test 1 (public)

Verdict: ACCEPTED

input
8 9 5
5 2
2 5
5 8
7 8
...

correct output
.........
....*....
.../#\...
../###\..
.*#####*.
...

user output
.........
....*....
.../#\...
../###\..
.*#####*.
...

Test 2 (public)

Verdict: ACCEPTED

input
20 40 4
5 10
5 30
15 30
15 10

correct output
.................................

user output
.................................

Test 3 (public)

Verdict: ACCEPTED

input
20 40 29
8 7
13 2
14 2
9 7
...

correct output
.................................

user output
.................................

Test 4 (public)

Verdict: ACCEPTED

input
20 40 14
5 12
5 25
8 28
13 28
...

correct output
.................................

user output
.................................

Test 5 (public)

Verdict: ACCEPTED

input
20 40 12
3 20
7 16
7 9
11 13
...

correct output
.................................

user output
.................................

Test 6 (public)

Verdict: ACCEPTED

input
9 35 33
2 3
2 8
4 8
4 5
...

correct output
.................................

user output
.................................

Test 7 (public)

Verdict: ACCEPTED

input
30 100 69
6 10
6 14
7 14
7 18
...

correct output
.................................

user output
.................................

Test 8 (public)

Verdict: ACCEPTED

input
40 60 192
11 3
11 5
10 6
11 7
...

correct output
.................................

user output
.................................

Test 9 (public)

Verdict: ACCEPTED

input
50 100 142
1 1
1 7
1 11
1 14
...

correct output
*=====*===*==*...................

user output
*=====*===*==*...................

Test 10 (public)

Verdict: ACCEPTED

input
100 100 1000
10 1
4 7
1 4
1 9
...

correct output
...*====*........................

user output
...*====*........................