daily pastebin goal
29%
SHARE
TWEET

Untitled

a guest Mar 19th, 2019 54 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import std.stdio;
  2. import std.math;
  3.  
  4. class tarray
  5. {
  6.     private size_t arr_size;
  7.     private size_t arr0_size;
  8.     private size_t arr1_size;
  9.     private size_t arr2_size;
  10.     private size_t index_max;
  11.        
  12.     private size_t[] arr;
  13.  
  14.     this(size_t size)
  15.     {
  16.         arr_size = size;
  17.         arr0_size = size - 1;
  18.         arr1_size = size - 2;
  19.         arr2_size = size / 2;
  20.         arr.length = index_max = (size * size) / 2;
  21.        
  22.     }
  23.  
  24.     bool safe(size_t x, size_t y)
  25.     {
  26.         if (x > y)
  27.             if (x < arr_size)
  28.                 if (y < arr_size)
  29.                     return true;
  30.         return false;
  31.     }
  32.  
  33.     size_t get_index(size_t x, size_t y)
  34.     {
  35.         if (y >= arr2_size)
  36.             return (arr_size * (arr1_size - y)) + (arr0_size - x);
  37.         return (arr_size * y) + x;
  38.     }
  39.  
  40.     bool get_index_xy(size_t index, ref size_t x, ref size_t y)
  41.     {
  42.         if (index >= index_max)
  43.             return false;
  44.  
  45.         y = index / arr_size;
  46.         x = index % arr_size;
  47.         if(x < y || x == y)
  48.         {
  49.             x = arr0_size - x;
  50.             y = arr1_size - y;
  51.         }
  52.         return true;
  53.     }
  54.  
  55.     auto insert(size_t x, size_t y, size_t value)
  56.     {
  57.         if (!safe(x, y))
  58.             return size_t.max; 
  59.  
  60.         auto index = get_index(x, y);
  61.         debug writeln("index for(", x, ", ", y, ") = ", index);
  62.         arr[index] = value;
  63.         return index;
  64.     }
  65.  
  66.     auto get(size_t x, size_t y)
  67.     {
  68.         if (!safe(x, y))
  69.             return size_t.max;
  70.            
  71.         return arr[get_index(x, y)];   
  72.     }
  73.  
  74.     auto get(size_t index)
  75.     {
  76.         if (index >= arr.length)
  77.             return size_t.max;
  78.  
  79.         return arr[index];
  80.     }
  81.  
  82.     void print()
  83.     {
  84.         for (size_t y = 0; y < arr2_size; ++y)
  85.         {
  86.             auto start = arr_size * y;
  87.             auto end = arr_size * (y + 1);
  88.             writeln(arr[start .. end]);
  89.         }
  90.     }
  91. }
  92.  
  93. void main()
  94. {
  95.     size_t size = 70;
  96.     tarray ta = new tarray(size);
  97.  
  98.     auto sx = 1;
  99.     auto k = 1;
  100.     for (size_t y = 0; y < size; ++y)
  101.     {
  102.         for (size_t x = sx; x < size; ++x)
  103.         {
  104.             if (ta.insert(x, y, k))
  105.                 k++;
  106.         }
  107.         sx++;
  108.     }
  109.  
  110.     ta.print();
  111.  
  112.     //test 1
  113.     size_t tx = 2;
  114.     size_t ty = 0;
  115.     size_t rx, ry;
  116.     auto index = ta.get_index(tx, ty);
  117.     ta.get_index_xy(index, rx, ry);
  118.     if(rx != tx || ry != ty)
  119.     {
  120.         writeln("WTF!? (index=",index,") x=",rx," y=", ry);
  121.     }
  122.  
  123.     //test 2
  124.     tx = 4;
  125.     ty = 3;
  126.     index = ta.get_index(tx, ty);
  127.     ta.get_index_xy(index, rx, ry);
  128.     if(rx != tx || ry != ty)
  129.     {
  130.         writeln("WTF!? (index=",index,") x=",rx," y=", ry);
  131.     }
  132. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top