Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import std.stdio;
- import std.math;
- class tarray
- {
- private size_t arr_size;
- private size_t arr0_size;
- private size_t arr1_size;
- private size_t arr2_size;
- private size_t[] arr;
- this(size_t size)
- {
- arr_size = size;
- arr0_size = size - 1;
- arr1_size = size - 2;
- arr2_size = size / 2;
- arr.length = (size * size) / 2;
- }
- bool safe(size_t x, size_t y)
- {
- if (x != y && x > y)
- if (x < arr_size)
- if (y < arr_size)
- return true;
- return false;
- }
- size_t get_index(size_t x, size_t y)
- {
- if (y >= arr2_size)
- return (arr_size * (arr1_size - y)) + (arr0_size - x);
- return (arr_size * y) + x;
- }
- bool get_index_xy(size_t index, ref size_t x, ref size_t y)
- {
- if (index >= arr.length)
- return false;
- y = index / arr_size;
- x = index % arr_size;
- if(x < y || x == y)
- {
- x = arr0_size - x;
- y = arr1_size - y;
- }
- return true;
- }
- auto insert(size_t x, size_t y, size_t value)
- {
- if (!safe(x, y))
- return size_t.max;
- auto index = get_index(x, y);
- debug writeln("index for(", x, ", ", y, ") = ", index);
- arr[index] = value;
- return index;
- }
- auto get(size_t x, size_t y)
- {
- if (!safe(x, y))
- return size_t.max;
- return arr[get_index(x, y)];
- }
- auto get(size_t index)
- {
- if (index >= arr.length)
- return size_t.max;
- return arr[index];
- }
- void print()
- {
- for (size_t y = 0; y < arr2_size; ++y)
- {
- auto start = arr_size * y;
- auto end = arr_size * (y + 1);
- writeln(arr[start .. end]);
- }
- }
- }
- void main()
- {
- size_t size = 7;
- tarray ta = new tarray(size);
- auto sx = 0;
- auto k = 1;
- for (size_t y = 0; y < size; ++y)
- {
- for (size_t x = sx; x < size; ++x)
- {
- if (ta.insert(x, y, k))
- k++;
- }
- sx++;
- }
- ta.print();
- //test 1
- size_t tx = 2;
- size_t ty = 0;
- size_t rx, ry;
- auto index = ta.get_index(tx, ty);
- ta.get_index_xy(index, rx, ry);
- if(rx != tx || ry != ty)
- {
- writeln("WTF!? (index=",index,") x=",rx," y=", ry);
- }
- //test 2
- tx = 4;
- ty = 3;
- index = ta.get_index(tx, ty);
- ta.get_index_xy(index, rx, ry);
- if(rx != tx || ry != ty)
- {
- writeln("WTF!? (index=",index,") x=",rx," y=", ry);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement