Formatting text (from array) on prompt window - google-apps-script

I have a very simple prompt that outputs elements from an array:
const arr = [1, 2, 3, 4, 5, 6];
function alertMessage() {
SpreadsheetApp.getUi().alert(`List of numbers: ${arr}`);
}
alertMessage();
The message currently reads like this:
List of numbers: 1,2,3,4,5,6
However, I would like it to create a new line after each element (with no commas), so it would look like the below example. What would be the best way to do this?
List of numbers:
1
2
3
4
5
6

It seems that in your script, arr is an array. So, how about the following modification?
From:
SpreadsheetApp.getUi().alert(`List of numbers: ${arr}`);
To:
SpreadsheetApp.getUi().alert(`List of numbers: \n${arr.join("\n")}`);
If you want the double line breaks, please modify to SpreadsheetApp.getUi().alert(List of numbers: \n${arr.join("\n\n")});
Reference:
join()

Related

Use of function / return

I had the task to code the following:
Take a list of integers and returns the value of these numbers added up, but only if they are odd.
Example input: [1,5,3,2]
Output: 9
I did the code below and it worked perfectly.
numbers = [1,5,3,2]
print(numbers)
add_up_the_odds = []
for number in numbers:
if number % 2 == 1:
add_up_the_odds.append(number)
print(add_up_the_odds)
print(sum(add_up_the_odds))
Then I tried to re-code it using function definition / return:
def add_up_the_odds(numbers):
odds = []
for number in range(1,len(numbers)):
if number % 2 == 1:
odds.append(number)
return odds
numbers = [1,5,3,2]
print (sum(odds))
But I couldn’t make it working, anybody can help with that?
Note: I'm going to assume Python 3.x
It looks like you're defining your function, but never calling it.
When the interpreter finishes going through your function definition, the function is now there for you to use - but it never actually executes until you tell it to.
Between the last two lines in your code, you need to call add_up_the_odds() on your numbers array, and assign the result to the odds variable.
i.e. odds = add_up_the_odds(numbers)

can anyone explain to me why the following two arrow functions are equivalent? [duplicate]

This question already has answers here:
What do curly braces inside of function parameter lists do in es6?
(3 answers)
Closed 5 years ago.
I am pretty new to javascript. saw this on MDN regarding arrow functions.
Can anyone explain to me how does the 2nd one work? I understand the first one.
Not quite sure why we put length in an object, and then return the length???
Case 1 (which i understand from how it transformed from ES5):
materials.map((material) => {
return material.length;
}); // [8, 6, 7, 9]
Case 2 (not getting what {length} is doing here and also why do we return length:
materials.map(({length}) => length); // [8, 6, 7, 9]
Thank you so much!
Update:
So reading from the answer from Jeff B. It appears that the 2nd one is doing the following with destructuring:
materials.map(({length}) => length)
in which {length} will set a variable var length to equal to materials.length; and that's why we can simply return length. That makes sense. Thanks Jeff
This uses a destructuring assignment to get at the length property without saving the whole object. Specifically, this is a case of "object destructuring".
For instance:
let yourObject = {foo: 1, bar: 2}
let {bar} = yourObject;
// bar now equals 2
With this in mind, you can see how ({length}) => length sets the name length to the length property of the first parameter and then immediately returns it—making the two expressions equivalent.

How to Convert Base 10 to Base 36

I have two columns in my Google Sheets: one column for base 10 and one column for base 36. I have filled out my Base 10 column to go from 1 to 5,000. I would like to create a function in my script that will allow me to take in the value of the Base 10 number and return a value of base 36. (0123456789abcdefghijklmnopqrstuvwxyz) I want to keep the letter lower case so that I won't confuse the number 0 with the letter O.
This is what I have tried so far in my script:
function toBase36(decNumb) {
var base36 = parseInt(decNumb, 36);
return parseInt(base36);
}
The code above produces the following result:
How can I edit my code that that I will add the lower case letters?
It would be much simpler to use the toString() method.
Instead of var base36 = parseInt(decNumb, 36);
use var base36 = decNumb.toString(36);

python 3 recursive function that prints in order

I want to print my list in order, but it keeps printing the first value
def print_order(s):
if not s:
return
print(s[0])
print_order(s[:-1])
for example I have a list [1, 2, 3, 4, 5, 6, 7] I want it to be
printed out as
1
2
3
4
5
6
7
You are taking the last element off instead of the first. Try changing the recursive call's argument to s[1:].
The slice s[:-1] is all elements except the last.
You want s[1:], which is all elements except the first.

Mathematica - CSV to Multidimensional Charts

I have a CSV file with 5 columns and about 2*104 rows that I need to visualise.
I've imported the file like so:
data = Import["res.csv", "CSV"];`
Now, I'm going to want to generate a lot of visuals from this - all 5 dimensions on a single plot as well as various cross sections.
My questions:
If I want to select, say columns 1, 4 and 5 from my data and feed them to ListPlot3D how would I do that?
And, values in columns can be grouped. So if I wanted to ListPlot3D colums 1, 2, 4 and 5, but I want to group columns 1 and 2 on the same axis, how would I tell Mathematica to do that?
Thanks.
I hate to disagree with a fellow poster especially after it has been accepted, but the Transpose is unnecessary. Almost everything you're asking for can be done within the context of Part:
ListPlot3D[ data[[All, {1, 4, 5}]] ]
Since matrices are stored row-wise within Mathematica, [[All, {1, 4, 5}]] can be read [[rows, columns]]. More specifically, All indicates here that you want all rows, but you can specify specific rows as well. Another construct that may be of interest is Span which is used to specify groups of indices, and if your CSV file contains a header row, you can strip it from your data using
ListPlot3D[ data[[ 2 ;; , {1, 4, 5}]] ]
As to your second requirement, to use both columns 1 and 2 as the x coordinate, then it is simply
ListPlot3D[ {data[[All, {2, 4, 5}]], data[[All, {1, 4, 5}]]} ]
and you change All to 2;; if you wish to strip off the header row.
If I understand you correctly that would be
ListPlot3D[Transpose[{data[[All, 1]], data[[All, 4]], data[[All, 5]]}]]
and for the multiple sets:
ListPlot3D[
{
Transpose[{data[[All, 1]], data[[All, 3]], data[[All, 4]]}],
Transpose[{data[[All, 2]], data[[All, 3]], data[[All, 5]]}]
}
]