Skip to content

Instantly share code, notes, and snippets.

@jamie
Created June 18, 2015 19:50
Show Gist options
  • Save jamie/6d0a7b9a390678639501 to your computer and use it in GitHub Desktop.
Save jamie/6d0a7b9a390678639501 to your computer and use it in GitHub Desktop.
Easy custom problem specification for bonus campaign
-- The function get_name() should return a single string that is the name of the puzzle.
--
function get_name()
return "EVEN / ODD"
end
-- The function get_description() should return an array of strings, where each string is
-- a line of description for the puzzle. The text you return from get_description() will
-- be automatically formatted and wrapped to fit inside the puzzle information box.
--
function get_description()
return { "READ A NUMBER FROM IN.A", "IF THE NUMBER IS EVEN, WRITE IT TO OUT.A", "IF THE NUMBER IS ODD, WRITE IT TO OUT.B" }
end
-- The function get_streams() should return an array of streams. Each stream is described
-- by an array with exactly four values: a STREAM_* value, a name, a position, and an array
-- of integer values between -999 and 999 inclusive.
--
-- STREAM_INPUT: An input stream containing up to 39 numerical values.
-- STREAM_OUTPUT: An output stream containing up to 39 numerical values.
-- STREAM_IMAGE: An image output stream, containing exactly 30*18 numerical values between 0
-- and 4, representing the full set of "pixels" for the target image.
--
-- NOTE: Arrays in Lua are implemented as tables (dictionaries) with integer keys that start
-- at 1 by convention. The sample code below creates an input array of 39 random values
-- and an output array that doubles all of the input values.
--
-- NOTE: To generate random values you should use math.random(). However, you SHOULD NOT seed
-- the random number generator with a new seed value, as that is how TIS-100 ensures that
-- the first test run is consistent for all users, and thus something that allows for the
-- comparison of cycle scores.
--
-- NOTE: Position values for streams should be between 0 and 3, which correspond to the far
-- left and far right of the TIS-100 segment grid. Input streams will be automatically
-- placed on the top, while output and image streams will be placed on the bottom.
--
function get_streams()
input = {}
evens = {}
odds = {}
for i = 1,10 do
input[i] = math.random(10, 99)
if input[i] % 2 == 0 then
table.insert(evens, input[i])
else
table.insert(odds, input[i])
end
end
for i = 11,29 do
input[i] = math.random(-99, 99)
if input[i] % 2 == 0 then
table.insert(evens, input[i])
else
table.insert(odds, input[i])
end
end
input[30] = 0
table.insert(evens, 0)
for i = 31,39 do
input[i] = 800 + math.random(-199, 199)
if input[i] % 2 == 0 then
table.insert(evens, input[i])
else
table.insert(odds, input[i])
end
end
return {
{ STREAM_INPUT, "IN.A", 1, input },
{ STREAM_OUTPUT, "OUT.A", 1, evens },
{ STREAM_OUTPUT, "OUT.B", 2, odds },
}
end
-- The function get_layout() should return an array of exactly 12 TILE_* values, which
-- describe the layout and type of tiles found in the puzzle.
--
-- TILE_COMPUTE: A basic execution node (node type T21).
-- TILE_MEMORY: A stack memory node (node type T30).
-- TILE_DAMAGED: A damaged execution node, which acts as an obstacle.
--
function get_layout()
return {
TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE,
TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE,
TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE, TILE_COMPUTE,
}
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment