AutoIT array missing bracket - arrays
I have this array:
Global Const $array[70][8] = [[1, ...], [2, ...], [3, ...], ... , [70, 0.48124164, 0.88451159, -8855, -612, 176, 1, 7]]
If i run the code, it says "Error: Missing right bracked ')' in expression". If i remove the last element it works. I can't get why the last element is producing this error, and i can't find any syntax error.
I also can compile or build it without any error.
Has anyone an idea what can cause this behaviour?
//EDIT
Here is the full array definition:
Global Const $array[70][8] = [[1, 0.46382308, 0.37846267223358, 3476, 20, 4, -1, 4], [2, 0.66173166, 0.35245704650879, 4268, -7333, 7, 3, 4], [3, 0.43819791, 0.73096454143524, -5063, 891, 158, 2, 4], [4, 0.49637758, 0.27708977460861, 6028, -1121, 381, 1, 4], [5, 0.60390532, 0.37993001937866, 3503, -5119, 83, 2, 4], [6, 0.43493705, 0.50274324417114, 415, 1054, 130, 3, 4], [7, 0.5436604, 0.88573443889618, -9015, -2928, 52, 1, 3], [8, 0.51811683, 0.60228180885315, -1968, -2021, 95, 1, 3], [9, 0.55463874, 0.84207928180695, -7663, -3285, 70, 1, 3], [10, 0.48325252, 0.79658991098404, -6724, -746, -272, 1, 3], [11, 0.5183885, 0.8305846452713, -7633, -1877, -272, -1, 3], [12, 0.55923116, 0.68494528532028, -3946, -3505, 36, 2, 3], [13, 0.48257315, 0.8402858376503, -7837, -644, -262, 2, 3], [14, 0.55860614, 0.70989108085632, -4713, -3447, 36, 2, 3], [15, 0.42719244, 0.61063778400421, -2193, 1338, 70, 2, 3], [16, 0.41371411, 0.57615393400192, -1314, 1882, 48, 2, 3], [17, 0.50219285, 0.79606002569199, -6684, -1330, -272, 2, 3], [18, 0.47042638, 0.43658798933029, 2099, -196, 97, 2, 4], [19, 0.42469245, 0.41934603452682, 2529, 1427, 265, 3, 4], [20, 0.43958377, 0.52923792600632, -262, 827, 92, 2, 4], [21, 0.49751889, 0.78456538915634, -6454, -1299, -268, 2, 3], [22, 0.48034489, 0.50571876764297, 363, -592, 21, 4, 3], [23, 0.39637708, 0.53408849239349, -372, 2397, 39, 3, 4], [24, 0.39023572, 0.64112710952759, -2920, 2726, 75, 2, 4], [25, 0.41588801, 0.64752662181854, -3116, 1715, 51, 2, 1], [26, 0.45412194, 0.81338351964951, -7201, 402, 24, 3, 4], [27, 0.50868737, 0.36688649654388, 3793, -1674, 248, 2, 4], [28, 0.5741769, 0.25597554445267, 6584, -4035, 661, 4, 4], [29, 0.52428531, 0.59066486358643, -1700, -2216, 97, 2, 4], [30, 0.43132287, 0.72403514385223, -5038, 1220, 51, 1, 4], [31, 0.51977443, 0.34100317955017, 4459, -2070, 1206, 2, 4], [32, 0.4120565, 0.59812414646149, -1975, 1930, 62, 3, 4], [33, 0.59803569, 0.29261976480484, 5669, -4950, 805, 3, 4], [34, 0.4343664, 0.67442893981934, -3846, 1152, 154, 5, 4], [35, 0.46480131, 0.91842484474182, -9804, -73, 67, 3, 7], [36, 0.56852471, 0.84611463546753, -7977, -3894, 9, 1, 8], [37, 0.47779053, 0.32180470228195, 4813, -401, 349, 2, 4], [38, 0.52241027, 0.30594861507416, 5344, -2175, 1278, 2, 4], [39, 0.52458423, 0.6877578496933, -4022, -2207, 94, 3, 1], [40, 0.55643224, 0.88345181941986, -8904, -3372, 16, -1, 8], [41, 0.43931204, 0.35995709896088, 3888, 772, 5, 3, 4], [42, 0.54311692, 0.80111443996429, -6882, -2920, 22, -1, 8], [43, 0.42798048, 0.70581495761871, -4682, 1328, 94, -1, 4], [44, 0.3859694, 0.54077327251434, -486, 2956, 63, -1, 4], [45, 0.47751879, 0.33729392290115, 4491, -594, 283, -1, 4], [46, 0.43974685, 0.33378851413727, 4621, 945, 53, 1, 4], [47, 0.51083415, 0.31422311067581, 5179, -1736, 1338, 3, 4], [48, 0.45425778, 0.89918559789658, -9241, 309, 262, 3, 7], [49, 0.36626821, 0.71910309791565, -4933, 3595, 10, 3, 4], [50, 0.550481, 0.33325856924057, 4563, -2943, 1062, 4, 4], [51, 0.45588821, 0.8790088891983, -8811, 306.7, 346.9, 3, 7], [52, 0.54849743, 0.403449177742, 2900, -3145, 177, 3, 4], [53, 0.59265524, 0.30664157867432, 5234, -4822, 691, 3, 4], [54, 0.42800766, 0.74604618549347, -5443, 1265, 20, 3, 4], [55, 0.4743666, 0.874076783, -8673, -364, 191, 1, 7], [56, 0.45151323, 0.957066357, -10774, 383, 25, 3, 7], [57, 0.47893184, 0.984906196, -11285, -681, 121, 4, 7], [58, 0.50632327, 0.886182785, -8951, -1578, 94, 3, 7], [59, 0.52273643, 0.937378764, -10108, -2216, 49, 4, 7], [60, 0.52306246, 0.924375951, -9920, -2244, 27, 4, 7], [61, 0.54613327, 0.291233837, 5638, -3031, 1559, 1, 4], [62, 0.54523652, 0.89673995, -9217, -3016, 20, -1, 8], [63, 0.50667655, 0.897432863, -9184, -1735, 73, 2, 7], [64, 0.53928542, 0.9322021, -10176, -2685, 5, 2, 7], [65, 0.5081439, 0.97875124, -11280, -1734, 0, 1, 7], [66, 0.45591539, 0.87778604, -8811, 315, 348, 4, 7], [67, 0.53086143, 0.92669934, -9956, -2405, 37, 2, 7], [68, 0.49053514, 0.938356995, -10244, -1009, 47, 1, 7], [69, 0.43232834, 0.950096189, -10584, 1205, 31, 1, 7], [70, 0.48124164, 0.88451159, -8855, -612, 176, 1, 7]]
The code around looks like
EndFunc
Global Const first[54][8] = ...
Global Const $second[29][8] = ...
Global Const $array[70][8] = [...] // error array
Global Const $last[30][8] = ...
Func function($first)
Look like a fat finger:
Local $arr[3][3] = [[1, 2, 3], [2, 3, 4], [3, (.00, 0.1575818700]]
==> Missing right bracket ')' in expression.:
Related
Sort odd numbers in array while keeping even numbers in place
I'm working on a coding challenge to sort the odd elements of an array while keeping all even elements in their initial position. I can sort the odd elements in groups between even elements while leaving the evens alone, but I want them to be ordered throughout the array. Here is my code: def sort_array source_array return [] if source_array.empty? a = source_array n = a.length loop do swapped = false (n - 1).times do |i| if (a[i] > a[i + 1]) && a[i].odd? && a[i + 1].odd? a[i], a[i + 1] = a[i + 1], a[i] swapped = true end end break if not swapped end a end source_array = [7, 5, 35, 8, 12, 17, 47, 47, 37, 64, 22, 55, 13] p sort_array(source_array) # => [5, 7, 35, 8, 12, 17, 37, 47, 47, 64, 22, 13, 55]
You could try this approach: Create an array with all odds (leaving source_array intact). Sort this array. Consider source_array element by element. Is the element even then leave it . If it is odd, then replace it with the first element on the sorted odds list. Remove the first element of the sorted list.
Here are a couple of ways to do that. arr = [7, 5, 35, 8, 12, 17, 47, 47, 37, 64, 22, 55, 13] Both begin with the following calculation odd, even = arr.each_with_index.partition { |n,i| n.odd? } #=> [[[7, 0], [5, 1], [35, 2], [17, 5], [47, 6], [47, 7], [37, 8], [55, 11], [13, 12]], # [[8, 3], [12, 4], [64, 9], [22, 10]]] odd #=> [[7, 0], [5, 1], [35, 2], [17, 5], [47, 6], [47, 7], [37, 8], [55, 11], [13, 12]] even #=> [[8, 3], [12, 4], [64, 9], [22, 10]] See Enumerable#each_with_index, Enumerable#partition and Integer#odd?. #1 odd_val, odd_idx = odd.transpose #=> [[7, 5, 35, 17, 47, 47, 37, 55, 13], # [0, 1, 2, 5, 6, 7, 8, 11, 12]] a = even.concat(odd_val.sort.zip(odd_idx)) #=> [[8, 3], [12, 4], [64, 9], [22, 10], [5, 0], [7, 1], [13, 2], # [17, 5], [35, 6], [37, 7], [47, 8], [47, 11], [55, 12]] h = a.map(&:reverse).to_h #=> {3=>8, 4=>12, 9=>64, 10=>22, 0=>5, 1=>7, 2=>13, 5=>17, 6=>35, 7=>37, # 8=>47, 11=>47, 12=>55} h.values_at(*0..arr.size-1) #=> [5, 7, 13, 8, 12, 17, 35, 37, 47, 64, 22, 47, 55] Note: odd_val.sort.zip(odd_idx) #=> [5, 7, 13, 17, 35, 37, 47, 47, 55].zip([0, 1, 2, 5, 6, 7, 8, 11, 12]) #=> [[5, 0], [7, 1], [13, 2], [17, 5], [35, 6], [37, 7], [47, 8], [47, 11], [55, 12]] See Array#sort, Array#zip and Hash#values_at. #2 a = odd.map(&:first).sort #=> [5, 7, 13, 17, 35, 37, 47, 47, 55] even.each { |n,i| a.insert(i,n) } a #=> [5, 7, 13, 8, 12, 17, 35, 37, 47, 64, 22, 47, 55] See Array#insert.
source_array = [7, 5, 35, 8, 12, 17, 47, 47, 37, 64, 22, 55, 13] odd_sorted = source_array.select(&:odd?).sort source_array.map {|input| input.even? ? input : odd_sorted.shift } # [5, 7, 13, 8, 12, 17, 35, 37, 47, 64, 22, 47, 55]
Getting a "NoSuchMethodError" when trying to create an array of arrays
I'm using Ruby 2.4. I'm having trouble creating an array of arrays. I have this data_cols = [[], []] lines.each do |line| parts = [0, *shared_space_indexes, line.size].each_cons(2).map { |a, b| line[a...b].strip } parts.each_with_index do |part, index| data_cols[index][data_cols[index] ? data_cols[index].size : 0] = part end end But I get a "NoMethodError: undefined method `[]=' for nil:NilClass" error on the "data_cols[index][data_cols[index] ? data_cols[index].size : 0] = part" line. What I'm trying to do is for each parts array, push each item in "parts" onto its own array correspoding to the index of that element in parts. So, for instance, if the first iteration of the loop has parts equal to [1, 5, 8, 12] I would have a data_cols array that looks like [[1], [5], [8], [12]] and if the next iteration of the loop had a parts array that looked like [19, 20, 21, 22] the data_cols array would then be changed to [[1, 19], [5, 20], [8, 21], [12, 22]]
It's hard to test without knowing what lines and shared_space_indexes look like. 2 columns → a matrix zip For the second part of your question you can use : [1, 5, 8, 12].zip([19, 20, 21, 22]) #=> [[1, 19], [5, 20], [8, 21], [12, 22]] transpose [[1, 5, 8, 12],[19, 20, 21, 22]].transpose #=> [[1, 19], [5, 20], [8, 21], [12, 22]] With transpose, both arrays need to have the same size. 3 columns → matrix array1 = [1, 5, 8, 12] array2 = [19, 20, 21, 22] array3 = [99, 88, 77, 66] p [array1, array2, array3].transpose #=> [[1, 19, 99], [5, 20, 88], [8, 21, 77], [12, 22, 66]] columns → rows If you have an array of arrays : arrays = [ [1, 5, 8, 12], [19, 20, 21, 22], [99, 88, 77, 66] ] p arrays.transpose #=> [[1, 19, 99], [5, 20, 88], [8, 21, 77], [12, 22, 66]] So in your case, I'd just concentrate on creating an array of arrays with the same length, and use transpose at the end. matrix + column → matrix As you noticed, if you have data_cols = [[1, 19], [5, 20], [8, 21], [12, 22]] arr = [99, 88, 77, 66] data_cols.zip(arr) would produce a weird half-nested array : [[[1, 19], 99], [[5, 20], 88], [[8, 21], 77], [[12, 22], 66]] You can use : p data_cols.zip(arr).map(&:flatten) #=> [[1, 19, 99], [5, 20, 88], [8, 21, 77], [12, 22, 66]]
How to change value of an element in dictionary of arrays?
I have created a dictionary like this var MyArray: [String:[String:[Int]]] = [ "xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]], "yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]]] How can I change the value 3 in "x1" in "xx" to an other number? I don't know that this is the number 3 but i know that it is in MyArray["xx"]!["x1"]![2]
// example setup var myArray: [String:[String:[Int]]] = [ "xx": ["x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9]], "yy": ["y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18]]] // value to be replaced let oldNum = 3 // value to replace old value by let newNum = 4 // extract the current value (array) for inner key 'x1' (if it exists), // and proceed if 'oldNum' is an element of this array if var innerArr = myArray["xx"]?["x1"], let idx = innerArr.index(of: oldNum) { // replace the 'oldNum' element with your new value in the copy of // the inner array innerArr[idx] = newNum // replace the inner array with the new mutated array myArray["xx"]?["x1"] = innerArr } print(myArray) /* ["yy": ["y3": [16, 17, 18], "y2": [13, 14, 15], "y1": [10, 11, 12]], "xx": ["x1": [1, 2, 4], "x3": [7, 8, 9], "x2": [4, 5, 6]]] ^ ok! */ Based on the following Q&A: Dictionary in Swift with Mutable Array as value is performing very slow? How to optimize or construct properly? A more performant approach would be actually removing the inner array (for key "x1"); mutating it; and re-adding it to the dictionary // check if 'oldNum' is a member of the inner array, and if it is: remove // the array and mutate it's 'oldNum' member to a new value, prior to // adding the array again to the dictionary if let idx = myArray["xx"]?["x1"]?.index(of: oldNum), var innerArr = myArray["xx"]?.removeValue(forKey: "x1") { innerArr[idx] = newNum myArray["xx"]?["x1"] = innerArr } print(myArray) // ["yy": ["y3": [16, 17, 18], "y2": [13, 14, 15], "y1": [10, 11, 12]], "xx": ["x1": [1, 2, 4], "x3": [7, 8, 9], "x2": [4, 5, 6]]]
If you know the index of the number you would like to change out of the three, you can change the number 3 directly using the subscripts ["xx"]?["x1"]?[2]. var myArray = [ "xx": [ "x1": [1, 2, 3], "x2": [4, 5, 6], "x3": [7, 8, 9] ], "yy": [ "y1": [10, 11, 12], "y2": [13, 14, 15], "y3": [16, 17, 18] ] ] array["xx"]?["x1"]?[2] = 4
How to sum the integer inside array of arrays?
a = [[5, 6], [6, 5], [7, 4], [1, 0, 0], [9, 9], [6, 8], [8, 6], [1, 8, 0], [9, 0]] How can I sum the integers inside the inner array and return an array of sum of the inner array? I need it to return [(5+6), (6+5), (7+4), (1+0+0), ...], thus [11, 11, 11, 1, 18, 14, 14, 9, 9]
a.map{|a| a.inject(:+)} # => [11, 11, 11, 1, 18, 14, 14, 9, 9]
Try sum_arry = a.map { |sub_arry| sub_arry.inject(&:+) } Then sum_arry should be the array you want.
Use map + reduce a.map { |a| a.reduce(:+) }
Get every n-elements of array
How to select every n-elements (e.g. six) of an array using Ruby 1.9+? Example: a = [0, 1, 2, 3, 4, ... , 33] # solution # => [[0, 1, 2, 3, 4, 5], [6, 7, 8, 9, 10, 11], ... ]
Enumerable#each_slice Iterates the given block for each slice of elements. If no block is given, returns an enumerator. e.g.: (1..10).each_slice(3) {|a| p a} # outputs below [1, 2, 3] [4, 5, 6] [7, 8, 9] [10] Use as: irb(main):002:0> a = Array(1..33) => [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] irb(main):003:0> a.each_slice(5) # no good => #<Enumerable::Enumerator:0x47ae6e8> irb(main):004:0> a.each_slice(5).to_a # good => [[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]]