You are not logged in.
Pages: 1
Functional:
///ackermann(m,n)
//Source: https://rosettacode.org/wiki/Ackermann_function#GML
var m = argument0, n = argument1;
if(m=0) {
return (n+1)
} else if(n == 0) {
return (ackermann(m-1,1))
} else {
return (ackermann(m-1,ackermann(m,n-1)))
}
Imperative:
///ackermann(m,n)
//Source: http://stackoverflow.com/a/1095538/4538129
var m = argument0, n = argument1;
var s = ds_stack_create();
ds_stack_push(s,m);
while (ds_stack_size(s)>0) {
m = ds_stack_pop(s)
if (m == 0) {
n++
} else if (n == 0) {
ds_stack_push(s,m-1)
n=1
} else {
ds_stack_push(s,m-1)
ds_stack_push(s,m)
n--
}
}
return n
pls don't kill me xot
///quadrangle(tl_x,tl_y,tr_x,tr_y,bl_x,bl_y,br_x,br_y,mode)
//Mode 0 = Lines
//Mode 1 = Filled
//Mode 2 = X
//Mode 3 = Triangles
//Mode 4 = Triangles (Reversed)
var tl_x=argument0,tl_y=argument1,tr_x=argument2,tr_y=argument3,bl_x=argument4,bl_y=argument5,br_x=argument6,br_y=argument7,m=argument8;
if(is_string(m)){string_lower(m);switch(m){
case"line":m=0;break;
case"x":m=2;break;
case"fill":m=1;break;
}}
if(m=0){
//1---2
//| |
//4---3
draw_line(tl_x,tl_y,tr_x,tr_y) //1 to 2
draw_line(tr_x,tr_y,br_x,br_y) //2 to 3
draw_line(br_x,br_y,bl_x,bl_y) //3 to 4
draw_line(bl_x,bl_y,tl_x,tl_y) //4 to 1
}else if(m=1){
draw_triangle(tl_x,tl_y,bl_x,bl_y,br_x,br_y,false)
draw_triangle(tl_x,tl_y,tr_x,tr_y,br_x,br_y,false)
}else if(m=2){
//1-2
//|X|
//4-3
draw_line(tl_x,tl_y,tr_x,tr_y) //1 to 2
draw_line(tr_x,tr_y,br_x,br_y) //2 to 3
draw_line(br_x,br_y,bl_x,bl_y) //3 to 4
draw_line(bl_x,bl_y,tl_x,tl_y) //4 to 1
draw_line(tl_x,tl_y,br_x,br_y) //1 to 3
draw_line(tr_x,tr_y,bl_x,bl_y) //2 to 4
}else if(m=3){
//1-2
// \|
// 3
draw_triangle(tl_x,tl_y,tr_x,tr_y,br_x,br_y,true)
//1
//|\
//2-3
draw_triangle(tl_x,tl_y,bl_x,bl_y,br_x,br_y,true)
}else if(m=4){
//1-2
//|/
//3
draw_triangle(tl_x,tl_y,tr_x,tr_y,bl_x,bl_y,true)
// 1
// /|
//3-2
draw_triangle(tr_x,tr_y,br_x,br_y,bl_x,bl_y,true)
}
///leftpad(string,length,char)
var str = string(argument0), num = argument1, char = string(argument2);
var loops = num-string_length(str) //It changes in loop.
for (var i=0;i<loops;i++) {
str = string_char_at(char,(((loops-i)-1)%string_length(char))+1)+str;
}
return str
leftpad("Test",15,"ABCD") → "ABCDABCDABCTest"
///ds_list_count_value(id,value)
var a = 0, b = ds_list_size(argument0)
for (var i = 0; i < b; i++) {
if argument0[| i] = argument1 { a++ }
}
return a;
Like this?
///leftpad(string,length,char)
var str = string(argument0), num = argument1, char = string(argument2);
var loops = num-string_length(str) //It changes in loop.
for (var i=0;i<loops;i++) {
str = char+str;
}
return str
leftpad("Test",10,"p") → "ppppppTest"
It's a joke.
Alternative
///divide(a,b)
var a = argument0, b = argument1, mins = 0.00001;
if (abs(b) < mins) {
return 0
} else {
return a/b
}
But there isn't well opposite of zero? Is it infinite?
What about this?
///sign_opposite(val1,val2)
return sign(argument0) != sign(argument1);
///ds_list_get_list(id)
var list = ds_list_create();
ds_list_copy(list,argument0);
return list;
The script is for avoiding a list being affected with a variable with its list.
For example, if my code looks like this:
//Create event
list = ds_list_create();
array = 0;
//Step event
for (var i = 0; i < 4; i++) {
ds_list_add(list,"foo");
array[i] = list;
}
//Draw event
for (var i = 0; i < array_length_1d(array); i++) {
var str = "";
for (var k = 0; k < ds_list_size(array[i]); k++) {
str += ds_list_find_value(array[i],k);
}
draw_text(0,i*20,str);
}
It displays:
foofoofoofoo
foofoofoofoo
foofoofoofoo
foofoofoofoo
Instead of:
foo
foofoo
foofoofoo
foofoofoofoo
Fix step event by:
for (var i = 0; i < 4; i++) {
ds_list_add(list,"foo");
array[i] = ds_list_get_list(list);
}
Don't forget to destroy the lists.
///ds_list_count_value(id,value)
var a = 0;
for (var i = 0; i < ds_list_size(argument0); i++) {
if argument0[| i] = argument1 { a++ }
}
return a;
Simple function.
///divide(a,b)
var a = argument0, b = argument1;
var mins = 0.0001;
return (a/max(abs(b),mins))*sign(b)
If you wanna avoid divide by zero error.
Basically case-insensitive replacement.
///string_replace_all_insensitive(str,substr,newstr)
//Variable str should we use.
//Variable in is for case insensitive.
var str = argument0, substr = string_lower(argument1), newstr = argument2;
var a = 0, out = "", lowstr = string_lower(str);
for (var i = 0; i < string_length(str); i++) { //For each character in string.
if (string_char_at(lowstr,a+1) = string_char_at(substr,1)) { //If the character is same as substring.
var b = 0;
for (var j = 0; j < string_length(substr); j++) {
if (string_char_at(lowstr,a+j+1) = string_char_at(substr,j+1)) {
b++ //Add to b.
}
}
if b = string_length(substr) {
out += newstr //Add new string.
a += string_length(substr)-1
} else {
out += string_char_at(str,a+1) //Add original character.
}
} else {
out += string_char_at(str,a+1) //Add original character.
}
a++
}
return out;
string_replace_all_insensitive("Hello world. Toma Tomat tomato TOMATO-TomatoTomato Tomato tOmATo","tomato","banana")
becomes "Hello world. Toma Tomat banana banana-bananabanana banana banana"
Pages: 1