Quick actions

cmd+k|ctrl+k

Navigation

Languages

Utils

Snippet info

Language

C

Visibility

public

Author

mrsimb

Created

2017-03-15T21:04:29Z

Updated

2017-05-31T11:09:37Z

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <limits.h>
#include <math.h>


double random_double() {
    static int initialized = 0;
    
    if (!initialized) {
        srand(time(0));
        initialized = 1;
    }
    
    return (double) rand() / RAND_MAX;
}


int random_int(int min, int max) {
    return floor(min + (max - min + 1) * random_double());
}


int num_length(int number) {
    char sign = number < 0;
    number = abs(number);
    
    if (number >= 1000000000) return sign + 10;
    if (number >= 100000000) return sign + 9;
    if (number >= 10000000) return sign + 8;
    if (number >= 1000000) return sign + 7;
    if (number >= 100000) return sign + 6;
    if (number >= 10000) return sign + 5;
    if (number >= 1000) return sign + 4;
    if (number >= 100) return sign + 3;
    if (number >= 10) return sign + 2;
    return sign + 1;
}


void print_array(int* array, int length) {
    for (int i = 0; i < length; i++) {
        printf("%d, ", array[i]);
    }
}


char* to_string(int* array, int length) {
    size_t size = 0;
    
    for (int i = 0; i < length; i++) {
        size += (num_length(array[i]) + (i < length - 1 ? 2 : 1)) * sizeof(char);
    }
    
    char* string = malloc(size);
    char* ptr = string;
    
    for (int i = 0; i < length; i++) {
        sprintf(ptr, "%i%s", array[i], i < length - 1 ? ", " : "");
        ptr += num_length(array[i]) + (i < length - 1 ? 2 : 1);
    }
    
    return string;
}


double* random_double_array(int length) {
    double* array = malloc(length * sizeof(double));
    
    for (int i = 0; i < length; ++i) {
        array[i] = random_double();
    }
    
    return array;
}

int* random_int_array(int length, int min, int max) {
    int* array = malloc(length * sizeof(int));
    
    for (int i = 0; i < length; ++i) {
        array[i] = random_int(min, max);
    }
    
    return array;
}

int main(void) {
    const int size = 5;
    int* array = random_int_array(size, -10, 10);
    
    char* stringifyed = to_string(array, size);
    
    printf("%s\n", to_string(array, size));
    
    free(stringifyed);
    
    return 0;
}
INFO