1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | Array.prototype.swap=function(a, b) { var tmp=this[a]; this[a]=this[b]; this[b]=tmp; } function partition(array, begin, end, pivot) { var piv=array[pivot]; array.swap(pivot, end-1); var store=begin; var ix; for(ix=begin; ix<end-1; ++ix) { if(array[ix]<=piv) { array.swap(store, ix); ++store; } } array.swap(end-1, store); return store; } function qsort(array, begin, end) { if(end-1>begin) { var pivot=begin+Math.floor(Math.random()*(end-begin)); pivot=partition(array, begin, end, pivot); qsort(array, begin, pivot); qsort(array, pivot+1, end); } } function quick_sort(array) { qsort(array, 0, array.length); } function shuffle(array) { var len = array.length; var i = len; while (i--) { var p = parseInt(Math.random() * len); var t = array[i]; array[i] = array[p]; array[p] = t; } } function Item(param1, param2, param3, value) { this.param1 = param1; this.param2 = param2; this.param3 = param3; this.value = value; this.key = [param1, param2, param3].toString(); this.toString = function() { return this.key; } } function populateTestData() { var res = []; var guid = ['6aa20b7a-da8a-466d-8f0e-92e49ca62759', 'e2cd3214-1097-46fc-931c-03d5becc3318', 'a9d71320-aeed-445f-9741-bf61d45a565a']; for (var p1 = 0; p1 < guid.length; p1++) { for (var p2 = 0; p2 < 17; p2++) { for (var p3 = 0; p3 < 9; p3++) { var item = new Item(guid[p1], 'parameter' + p2, p3, [p1, p2, p3].toString()); res.push(item); } } } return res; } function listToMap(lst) { var map = {}; for (var i = 0; i < lst.length; i++) { var item = lst[i]; if (item.value != null) { var key = [item.param1, item.param2, item.param3]; map[key] = item.value; } } return map; } function arrayTranspose_(data) { if (data.length == 0 || data[0].length == 0) { return null; } var ret = []; var retLen = data[0].length; for (var i = 0; i < retLen; ++i) { ret.push([]); } for (var i = 0; i < data.length; ++i) { for (var j = 0; j < retLen; ++j) { ret[j][i] = data[i][j]; } } return ret; } function adjustData_(inData) { var colData = inData.slice(); // var tz = Session.getTimeZone(); for (var c = 0; c < colData.length; c++) { var column = colData[c]; var colLen = column.length; if (colLen > 0 && column[0].length > 0 && column[0][0] instanceof Date) { for (var i = 0; i < colLen; i++) { var value = column[i][0]; if (value instanceof Date) { // column[i][0] = Utilities.formatDate(value, tz, 'yyyy-MM-dd HH:mm'); column[i][0] = value.getFullYear() + '-' + (value.getMonth() + 1) + '-' + value.getDate() + ' ' + value.getHours() + ':' + value.getMinutes(); } } } } var res = []; var rowData = arrayTranspose_(colData); for (var i = 0; i < rowData.length; i++) { var row = rowData[i]; var rowCorrect = []; for (var j = 0; j < row.length; j++) { var rr = row[j]; var r = ''; if (rr != undefined) { r = rr[0]; } rowCorrect.push(r); } res.push(rowCorrect); } return res; } function populateTestData01() { var count = 127; var now = new Date().valueOf(); var lstDate = []; var lstValue01 = []; var lstValue02 = []; for (var i = 0; i < count; i++) { var dateValue = new Date(now + i * 60000); lstDate.push([dateValue]); lstValue01.push([Math.random()]); lstValue02.push([Math.random()]); } return [lstDate, lstValue01, lstValue02]; } function test() { var count = 11; var lstData = populateTestData(); shuffle(lstData); var start = new Date(); var lstPreventOptimize = []; for (var i = 0; i < count; i++) { var mapData = listToMap(lstData); lstPreventOptimize.push(mapData); } var timeLstToMap = new Date() - start; var lstCopy00 = lstData.slice(); var start = new Date(); quick_sort(lstCopy00); var timeQuickSort = new Date() - start; var lstCopy01 = lstData.slice(); var start = new Date(); lstCopy01.sort(); var timeSort = new Date() - start; var lstData01 = populateTestData01(); var start = new Date(); for (var i = 0; i < count; i++) { var adjustedData = adjustData_(lstData01); lstPreventOptimize.push(adjustedData); } var timeAdjust = new Date() - start; return { timeLstToMap: timeLstToMap, timeQuickSort: timeQuickSort, timeSort : timeSort, timeAdjust: timeAdjust, dummy: lstPreventOptimize }; } function runTest() { var start = new Date(); var res = test(); var timeTotal = new Date() - start; var resStr = 'Complete Time: ' + timeTotal + 'ms, List To Map Time: ' + res.timeLstToMap + 'ms, Adjust Time: ' + res.timeAdjust + 'ms, QuickSort Time: ' + res.timeQuickSort + 'ms, Sort Time: ' + res.timeSort + 'ms'; return resStr; } print(runTest()); |
QXJyYXkucHJvdG90eXBlLnN3YXA9ZnVuY3Rpb24oYSwgYikKewoJdmFyIHRtcD10aGlzW2FdOwoJdGhpc1thXT10aGlzW2JdOwoJdGhpc1tiXT10bXA7Cn0KICAKZnVuY3Rpb24gcGFydGl0aW9uKGFycmF5LCBiZWdpbiwgZW5kLCBwaXZvdCkKewoJdmFyIHBpdj1hcnJheVtwaXZvdF07CglhcnJheS5zd2FwKHBpdm90LCBlbmQtMSk7Cgl2YXIgc3RvcmU9YmVnaW47Cgl2YXIgaXg7Cglmb3IoaXg9YmVnaW47IGl4PGVuZC0xOyArK2l4KSB7CgkJaWYoYXJyYXlbaXhdPD1waXYpIHsKCQkJYXJyYXkuc3dhcChzdG9yZSwgaXgpOwoJCQkrK3N0b3JlOwoJCX0KCX0KCWFycmF5LnN3YXAoZW5kLTEsIHN0b3JlKTsKCglyZXR1cm4gc3RvcmU7Cn0gIAogIApmdW5jdGlvbiBxc29ydChhcnJheSwgYmVnaW4sIGVuZCkKewoJaWYoZW5kLTE+YmVnaW4pIHsKCQl2YXIgcGl2b3Q9YmVnaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihlbmQtYmVnaW4pKTsKCgkJcGl2b3Q9cGFydGl0aW9uKGFycmF5LCBiZWdpbiwgZW5kLCBwaXZvdCk7CgoJCXFzb3J0KGFycmF5LCBiZWdpbiwgcGl2b3QpOwoJCXFzb3J0KGFycmF5LCBwaXZvdCsxLCBlbmQpOwoJfQp9CgpmdW5jdGlvbiBxdWlja19zb3J0KGFycmF5KSB7Cglxc29ydChhcnJheSwgMCwgYXJyYXkubGVuZ3RoKTsKfQoKZnVuY3Rpb24gc2h1ZmZsZShhcnJheSkgewogIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7CiAgdmFyIGkgPSBsZW47CiAgd2hpbGUgKGktLSkgewogICAgdmFyIHAgPSBwYXJzZUludChNYXRoLnJhbmRvbSgpICogbGVuKTsKICAgIHZhciB0ID0gYXJyYXlbaV07CiAgICBhcnJheVtpXSA9IGFycmF5W3BdOwogICAgYXJyYXlbcF0gPSB0OwogIH0KfQogCmZ1bmN0aW9uIEl0ZW0ocGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgdmFsdWUpIHsKICB0aGlzLnBhcmFtMSA9IHBhcmFtMTsKICB0aGlzLnBhcmFtMiA9IHBhcmFtMjsKICB0aGlzLnBhcmFtMyA9IHBhcmFtMzsKICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgdGhpcy5rZXkgPSBbcGFyYW0xLCBwYXJhbTIsIHBhcmFtM10udG9TdHJpbmcoKTsKICB0aGlzLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpcy5rZXk7CiAgfQp9CiAgCmZ1bmN0aW9uIHBvcHVsYXRlVGVzdERhdGEoKSB7CiAgdmFyIHJlcyA9IFtdOwogIHZhciBndWlkID0gWyc2YWEyMGI3YS1kYThhLTQ2NmQtOGYwZS05MmU0OWNhNjI3NTknLCAnZTJjZDMyMTQtMTA5Ny00NmZjLTkzMWMtMDNkNWJlY2MzMzE4JywgJ2E5ZDcxMzIwLWFlZWQtNDQ1Zi05NzQxLWJmNjFkNDVhNTY1YSddOwogIGZvciAodmFyIHAxID0gMDsgcDEgPCBndWlkLmxlbmd0aDsgcDErKykgewogICAgZm9yICh2YXIgcDIgPSAwOyBwMiA8IDE3OyBwMisrKSB7CiAgICAgIGZvciAodmFyIHAzID0gMDsgcDMgPCA5OyBwMysrKSB7CiAgICAgICAgdmFyIGl0ZW0gPSBuZXcgSXRlbShndWlkW3AxXSwgJ3BhcmFtZXRlcicgKyBwMiwgcDMsIFtwMSwgcDIsIHAzXS50b1N0cmluZygpKTsKICAgICAgICByZXMucHVzaChpdGVtKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gcmVzOwp9CiAKZnVuY3Rpb24gbGlzdFRvTWFwKGxzdCkgewogIHZhciBtYXAgPSB7fTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxzdC5sZW5ndGg7IGkrKykgewogICAgdmFyIGl0ZW0gPSBsc3RbaV07CiAgICBpZiAoaXRlbS52YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhciBrZXkgPSBbaXRlbS5wYXJhbTEsIGl0ZW0ucGFyYW0yLCBpdGVtLnBhcmFtM107CiAgICAgIG1hcFtrZXldID0gaXRlbS52YWx1ZTsKICAgIH0KICB9CiAgcmV0dXJuIG1hcDsKfQogIApmdW5jdGlvbiBhcnJheVRyYW5zcG9zZV8oZGF0YSkgewogIGlmIChkYXRhLmxlbmd0aCA9PSAwIHx8IGRhdGFbMF0ubGVuZ3RoID09IDApIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdmFyIHJldCA9IFtdOwogIHZhciByZXRMZW4gPSBkYXRhWzBdLmxlbmd0aDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHJldExlbjsgKytpKSB7CiAgICByZXQucHVzaChbXSk7CiAgfQoKICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmV0TGVuOyArK2opIHsKICAgICAgcmV0W2pdW2ldID0gZGF0YVtpXVtqXTsKICAgIH0KICB9CgogIHJldHVybiByZXQ7Cn0KICAKZnVuY3Rpb24gYWRqdXN0RGF0YV8oaW5EYXRhKSB7CiAgdmFyIGNvbERhdGEgPSBpbkRhdGEuc2xpY2UoKTsKLy8gIHZhciB0eiA9IFNlc3Npb24uZ2V0VGltZVpvbmUoKTsKICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbERhdGEubGVuZ3RoOyBjKyspIHsKICAgIHZhciBjb2x1bW4gPSBjb2xEYXRhW2NdOwogICAgdmFyIGNvbExlbiA9IGNvbHVtbi5sZW5ndGg7CiAgICBpZiAoY29sTGVuID4gMCAmJiBjb2x1bW5bMF0ubGVuZ3RoID4gMCAmJiBjb2x1bW5bMF1bMF0gaW5zdGFuY2VvZiBEYXRlKSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sTGVuOyBpKyspIHsKICAgICAgICB2YXIgdmFsdWUgPSBjb2x1bW5baV1bMF07CiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgewovLyAgICAgICAgICBjb2x1bW5baV1bMF0gPSBVdGlsaXRpZXMuZm9ybWF0RGF0ZSh2YWx1ZSwgdHosICd5eXl5LU1NLWRkIEhIOm1tJyk7CiAgICAgICAgICBjb2x1bW5baV1bMF0gPSB2YWx1ZS5nZXRGdWxsWWVhcigpICsgJy0nICsgKHZhbHVlLmdldE1vbnRoKCkgKyAxKSArICctJyArIHZhbHVlLmdldERhdGUoKSArICcgJyArIHZhbHVlLmdldEhvdXJzKCkgKyAnOicgKyB2YWx1ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHZhciByZXMgPSBbXTsKICB2YXIgcm93RGF0YSA9IGFycmF5VHJhbnNwb3NlXyhjb2xEYXRhKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd0RhdGEubGVuZ3RoOyBpKyspIHsKICAgIHZhciByb3cgPSByb3dEYXRhW2ldOwogICAgdmFyIHJvd0NvcnJlY3QgPSBbXTsKICAgIGZvciAodmFyIGogPSAwOyBqIDwgcm93Lmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciByciA9IHJvd1tqXTsKICAgICAgdmFyIHIgPSAnJzsKICAgICAgaWYgKHJyICE9IHVuZGVmaW5lZCkgewogICAgICAgIHIgPSByclswXTsKICAgICAgfQogICAgICByb3dDb3JyZWN0LnB1c2gocik7CiAgICB9CiAgICByZXMucHVzaChyb3dDb3JyZWN0KTsKICB9CiAgcmV0dXJuIHJlczsKfQogIApmdW5jdGlvbiBwb3B1bGF0ZVRlc3REYXRhMDEoKSB7CiAgdmFyIGNvdW50ID0gMTI3OwogIHZhciBub3cgPSBuZXcgRGF0ZSgpLnZhbHVlT2YoKTsKICB2YXIgbHN0RGF0ZSA9IFtdOwogIHZhciBsc3RWYWx1ZTAxID0gW107CiAgdmFyIGxzdFZhbHVlMDIgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgIHZhciBkYXRlVmFsdWUgPSBuZXcgRGF0ZShub3cgKyBpICogNjAwMDApOwogICAgbHN0RGF0ZS5wdXNoKFtkYXRlVmFsdWVdKTsKICAgIGxzdFZhbHVlMDEucHVzaChbTWF0aC5yYW5kb20oKV0pOwogICAgbHN0VmFsdWUwMi5wdXNoKFtNYXRoLnJhbmRvbSgpXSk7CiAgfQogIHJldHVybiBbbHN0RGF0ZSwgbHN0VmFsdWUwMSwgbHN0VmFsdWUwMl07Cn0KICAKZnVuY3Rpb24gdGVzdCgpIHsKICB2YXIgY291bnQgPSAxMTsKICB2YXIgbHN0RGF0YSA9IHBvcHVsYXRlVGVzdERhdGEoKTsKICBzaHVmZmxlKGxzdERhdGEpOwogIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7CiAgdmFyIGxzdFByZXZlbnRPcHRpbWl6ZSA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgdmFyIG1hcERhdGEgPSBsaXN0VG9NYXAobHN0RGF0YSk7CiAgICBsc3RQcmV2ZW50T3B0aW1pemUucHVzaChtYXBEYXRhKTsKICB9CiAgdmFyIHRpbWVMc3RUb01hcCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKICB2YXIgbHN0Q29weTAwID0gbHN0RGF0YS5zbGljZSgpOwogIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7CiAgcXVpY2tfc29ydChsc3RDb3B5MDApOwogIHZhciB0aW1lUXVpY2tTb3J0ID0gbmV3IERhdGUoKSAtIHN0YXJ0OwogIHZhciBsc3RDb3B5MDEgPSBsc3REYXRhLnNsaWNlKCk7CiAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKICBsc3RDb3B5MDEuc29ydCgpOwogIHZhciB0aW1lU29ydCA9IG5ldyBEYXRlKCkgLSBzdGFydDsKICB2YXIgbHN0RGF0YTAxID0gcG9wdWxhdGVUZXN0RGF0YTAxKCk7CiAgdmFyIHN0YXJ0ID0gbmV3IERhdGUoKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgIHZhciBhZGp1c3RlZERhdGEgPSBhZGp1c3REYXRhXyhsc3REYXRhMDEpOwogICAgbHN0UHJldmVudE9wdGltaXplLnB1c2goYWRqdXN0ZWREYXRhKTsKICB9CiAgdmFyIHRpbWVBZGp1c3QgPSBuZXcgRGF0ZSgpIC0gc3RhcnQ7CiAgcmV0dXJuIHsgdGltZUxzdFRvTWFwOiB0aW1lTHN0VG9NYXAsIHRpbWVRdWlja1NvcnQ6IHRpbWVRdWlja1NvcnQsIHRpbWVTb3J0IDogdGltZVNvcnQsIHRpbWVBZGp1c3Q6IHRpbWVBZGp1c3QsIGR1bW15OiBsc3RQcmV2ZW50T3B0aW1pemUgfTsKfQogIApmdW5jdGlvbiBydW5UZXN0KCkgewogIHZhciBzdGFydCA9IG5ldyBEYXRlKCk7CiAgdmFyIHJlcyA9IHRlc3QoKTsKICB2YXIgdGltZVRvdGFsID0gbmV3IERhdGUoKSAtIHN0YXJ0OwogIHZhciByZXNTdHIgPSAnQ29tcGxldGUgVGltZTogJyArIHRpbWVUb3RhbCArICdtcywgTGlzdCBUbyBNYXAgVGltZTogJyArIHJlcy50aW1lTHN0VG9NYXAgKyAnbXMsIEFkanVzdCBUaW1lOiAnICsgcmVzLnRpbWVBZGp1c3QgKyAnbXMsIFF1aWNrU29ydCBUaW1lOiAnICsgcmVzLnRpbWVRdWlja1NvcnQgKyAnbXMsIFNvcnQgVGltZTogJyArIHJlcy50aW1lU29ydCArICdtcyc7CiAgcmV0dXJuIHJlc1N0cjsKfQoKcHJpbnQocnVuVGVzdCgpKTsK
-
upload with new input
-
result: Success time: 0.67s memory: 214976 kB returned value: 0
Complete Time: 346ms, List To Map Time: 67ms, Adjust Time: 44ms, QuickSort Time: 31ms, Sort Time: 9ms


