require 'pp'
def check_letter(position)
%w(a b c d e f g h i j).include?(position[0])
end
def check_number(position)
%w(1 2 3 4 5 6 7 8 9 10).include?(position[1..-1]) #pull the first character of a string
end
def check_is_ship_behind(position)
#TODO realization
end
board = {
a: [false, false, false, false, false, false, false, false, false, false],
b: [false, false, false, false, false, false, false, false, false, false],
c: [false, false, false, false, false, false, false, false, false, false],
d: [false, false, false, false, false, false, false, false, false, false],
e: [false, false, false, false, false, false, false, false, false, false],
f: [false, false, false, false, false, false, false, false, false, false],
g: [false, false, false, false, false, false, false, false, false, false],
h: [false, false, false, false, false, false, false, false, false, false],
i: [false, false, false, false, false, false, false, false, false, false],
j: [false, false, false, false, false, false, false, false, false, false]
}
puts ' 1 2 3 4 5 6 7 8 9 10'
board.each do |key, row|
string = ''
row.each do |v|
if v
string += ' S'
else
string += ' .'
end
end
puts key.to_s + ' ' + string
end
ships = {
s1: 4,
s2: 3,
s3: 2,
s4: 1
}
loop do
puts 'Select ship type[s1, s2, s3, s4]:'
puts 'Remaining ships:'
pp ships
ship_type = gets.chop
if %w(s1 s2 s3 s4).include?(ship_type)
if ships[ship_type.to_sym] > 0
ships[ship_type.to_sym] -= 1
current_ship = ship_type
break;
else
puts "Don't have more ships of this type."
end
else
puts 'Incorrect ship type.'
end
end
loop do
puts 'Enter first position of ship[a1, a2, b4, etc.]:'
first_pos = gets.chop
if check_letter(first_pos) && check_number(first_pos)
#TODO: Check that the cell is not occupied, check that next to the cell is not necessary to ship
if in_not_ship_behind(position)
puts 'yeah'
else
puts 'nope'
end
break;
else
puts 'Incorrect position.'
end
end
loop do
if ship_type.to_sym = 1
to_next_ship #Сheck that the deck of the ship has 1 space
else
gets second_pos
break;
end
end
loop do
puts 'Enter second position of ship[a1, a2, b4, etc.]:'
second_pos = gets.chop
#TODO: Check that first position located near second position
#TODO: Check the validations like in first position
#TODO: Check that the ship cannot be bend (must be in one row horizontally or vertically)
#TODO: Check whether the cells did not end while building the chip type and gets the following cell
break;
end
def test(postition)
letter = position[0]
# 1 2 3
# A O . .
# B x . .
# C . . .
keys = board.keys
index = keys.find_index(letter)
prev_key = keys[index - 1] #up-down
unless prev_key.nil?
is_ship_placed = board[prev_key][postition[1]] #left-right
end
# 1 2 3
# A O . .
# B . . .
# C . . .
end
cmVxdWlyZSAncHAnCgpkZWYgY2hlY2tfbGV0dGVyKHBvc2l0aW9uKQoJJXcoYSBiIGMgZCBlIGYgZyBoIGkgaikuaW5jbHVkZT8ocG9zaXRpb25bMF0pCmVuZAoKZGVmIGNoZWNrX251bWJlcihwb3NpdGlvbikKCSV3KDEgMiAzIDQgNSA2IDcgOCA5IDEwKS5pbmNsdWRlPyhwb3NpdGlvblsxLi4tMV0pICNwdWxsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcKZW5kCgpkZWYgY2hlY2tfaXNfc2hpcF9iZWhpbmQocG9zaXRpb24pCgkjVE9ETyByZWFsaXphdGlvbgplbmQKCgpib2FyZCA9IHsKCWE6IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sCgliOiBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLAoJYzogW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwKCWQ6IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sCgllOiBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLAoJZjogW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwKCWc6IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sCgloOiBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLAoJaTogW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwKCWo6IFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0KfQoKcHV0cyAnICAgMSAyIDMgNCA1IDYgNyA4IDkgMTAnCgpib2FyZC5lYWNoIGRvIHxrZXksIHJvd3wKCXN0cmluZyA9ICcnCglyb3cuZWFjaCBkbyB8dnwKCQlpZiB2CgkJCXN0cmluZyArPSAnIFMnCgkJZWxzZQoJCQlzdHJpbmcgKz0gJyAuJwoJCWVuZAoJZW5kCgoJcHV0cyBrZXkudG9fcyArICcgJyArIHN0cmluZwplbmQKCnNoaXBzID0gewoJczE6IDQsCglzMjogMywKCXMzOiAyLAoJczQ6IDEKfQoKbG9vcCBkbwoJcHV0cyAnU2VsZWN0IHNoaXAgdHlwZVtzMSwgczIsIHMzLCBzNF06JwoJcHV0cyAnUmVtYWluaW5nIHNoaXBzOicKCXBwIHNoaXBzCglzaGlwX3R5cGUgPSBnZXRzLmNob3AKCglpZiAldyhzMSBzMiBzMyBzNCkuaW5jbHVkZT8oc2hpcF90eXBlKQoJCWlmIHNoaXBzW3NoaXBfdHlwZS50b19zeW1dID4gMAoJCQlzaGlwc1tzaGlwX3R5cGUudG9fc3ltXSAtPSAxCgkJCWN1cnJlbnRfc2hpcCA9IHNoaXBfdHlwZQoJCQlicmVhazsKCQllbHNlCgkJCXB1dHMgIkRvbid0IGhhdmUgbW9yZSBzaGlwcyBvZiB0aGlzIHR5cGUuIgoJCWVuZAoJZWxzZQoJCXB1dHMgJ0luY29ycmVjdCBzaGlwIHR5cGUuJwoJZW5kCmVuZAoKbG9vcCBkbwoJcHV0cyAnRW50ZXIgZmlyc3QgcG9zaXRpb24gb2Ygc2hpcFthMSwgYTIsIGI0LCBldGMuXTonCglmaXJzdF9wb3MgPSBnZXRzLmNob3AKCglpZiBjaGVja19sZXR0ZXIoZmlyc3RfcG9zKSAmJiBjaGVja19udW1iZXIoZmlyc3RfcG9zKQoJCSNUT0RPOiBDaGVjayB0aGF0IHRoZSBjZWxsIGlzIG5vdCBvY2N1cGllZCwgY2hlY2sgdGhhdCBuZXh0IHRvIHRoZSBjZWxsIGlzIG5vdCBuZWNlc3NhcnkgdG8gc2hpcAoJCWlmIGluX25vdF9zaGlwX2JlaGluZChwb3NpdGlvbikKCQkJcHV0cyAneWVhaCcKCQllbHNlCgkJCXB1dHMgJ25vcGUnCgkJZW5kCgkJYnJlYWs7CgllbHNlIAoJCXB1dHMgJ0luY29ycmVjdCBwb3NpdGlvbi4nCgllbmQKZW5kCgoKbG9vcCBkbyAKCWlmIHNoaXBfdHlwZS50b19zeW0gPSAxCgkJdG9fbmV4dF9zaGlwICAgICAgICAgICAj0KFoZWNrIHRoYXQgdGhlIGRlY2sgb2YgdGhlIHNoaXAgaGFzIDEgc3BhY2UKCWVsc2UKCQlnZXRzIHNlY29uZF9wb3MKCQlicmVhazsKCWVuZAplbmQKCgpsb29wIGRvCglwdXRzICdFbnRlciBzZWNvbmQgcG9zaXRpb24gb2Ygc2hpcFthMSwgYTIsIGI0LCBldGMuXTonCglzZWNvbmRfcG9zID0gZ2V0cy5jaG9wCgoJI1RPRE86IENoZWNrIHRoYXQgZmlyc3QgcG9zaXRpb24gbG9jYXRlZCBuZWFyIHNlY29uZCBwb3NpdGlvbgoJI1RPRE86IENoZWNrIHRoZSB2YWxpZGF0aW9ucyBsaWtlIGluIGZpcnN0IHBvc2l0aW9uCgkjVE9ETzogQ2hlY2sgdGhhdCB0aGUgc2hpcCBjYW5ub3QgYmUgYmVuZCAobXVzdCBiZSBpbiBvbmUgcm93IGhvcml6b250YWxseSBvciB2ZXJ0aWNhbGx5KQoJI1RPRE86IENoZWNrIHdoZXRoZXIgdGhlIGNlbGxzIGRpZCBub3QgZW5kIHdoaWxlIGJ1aWxkaW5nIHRoZSBjaGlwIHR5cGUgYW5kIGdldHMgdGhlIGZvbGxvd2luZyBjZWxsCglicmVhazsKCmVuZAoKZGVmIHRlc3QocG9zdGl0aW9uKQoJbGV0dGVyID0gcG9zaXRpb25bMF0KCgkjICAgMSAyIDMKCSMgQSBPIC4gLgoJIyBCIHggLiAuCgkjIEMgLiAuIC4KCglrZXlzID0gYm9hcmQua2V5cwoJaW5kZXggPSBrZXlzLmZpbmRfaW5kZXgobGV0dGVyKQoJcHJldl9rZXkgPSBrZXlzW2luZGV4IC0gMV0gI3VwLWRvd24KCXVubGVzcyBwcmV2X2tleS5uaWw/CgkJaXNfc2hpcF9wbGFjZWQgPSBib2FyZFtwcmV2X2tleV1bcG9zdGl0aW9uWzFdXSAjbGVmdC1yaWdodAoJZW5kCgoJIyAgIDEgMiAzCgkjIEEgTyAuIC4KCSMgQiAuIC4gLgoJIyBDIC4gLiAuCgplbmQ=