Find the first occurence of number in the sorted array

Given an array of numbers, search for the first occurrence of the number

This is relatively easy algorithm. But a bit tricky at the same time.
It can be done with log(n) with almost o(1) space complexity


#include 

/*
 * Find the first occurrence of the given number in index.
 * @author https://gullele.com
 */
void main()
{
    int nums[] = {1,1,3,5,8,8,8,10,12,23,23,55};
    int len = sizeof(nums)/sizeof(int);
    int start = 0, end = len-1, search = 8;
    int found_right = -1;
    while ((end - start) > 1)
    {
        if (found_right != -1)
        {
            if (nums[end] != search)
            {
                break;
            }
            found_right = end;
            end -= 1;
            continue;
        }
        int mid = (end + start)/2;
        int val = nums[mid];
        if (val == search)
        {
            end = mid-1;
            found_right = mid;
        }
        else if(val < search)
        {
            start = mid;
        }
        else
        {
            end = mid;
        }
    }
    if (found_right != -1)
    {
        printf("found at %d", found_right);
    }
    else
    {
        printf("found No where");
    }
}

undefined variable error javascript with php

you want to do something simple like passing variable like this

<?php 
 $variable_name = "some value";
var some_var = <?=$variable_name" ?>;

but it didn’t work
Here is the solved version…
Very simple than you thought

<pre>
 $variable_name = "some value";
var some_var = "<?=$variable_name" ?>";
</pre>

yup, just quote it from left and right so that it wont be considered as string not JS variable. If the value in variable is number, there would not be any problem

Changing decimal number to its binary equivalent

Here is bit level solution to change binary equivalent

#include 

/*
 * Printing binary version representation of number
 *
 * Kaleb Woldeareagy <contactkaleb@gmail.com>
 */

void to_binary(unsigned int x);

void main()
{
    unsigned int y=17;
    to_binary(y);
}

void to_binary(unsigned int x)
{
    if (!x|00)
    {
        printf("0");
    }
    else
    {
        int i=0;
        int store[8]; //stack could be used here best
        while (x!=0)
        {
            store[i++]=x&01;
            x>>=1;
        }

        while (i>0)
        {
            printf("%i", store[--i]);
        }
    }
}

Array reversal in Recurrsion

This problem can be performed in o(n) with normal iterative approach.
Here is vanilla flavor of its implementation in recursion

#include 

/**
 * Recursion version of array swap
 *
 * Kaleb Woldearegay
 */

void reverse(int*arr, int i, int size);
void print(int*arr, int size);

void main()
{
    int nums[] = {4,5,2,13,0}, i=0, size=5;
    i = 0;
    print(nums, 5);
    reverse(nums, i, size-1);
    print(nums, 5);
}
void reverse(int*stk, int i, int size)
{
    if (i>=size)
    {
        return;
    }
    else
    {
        int tmp = stk[i];
        reverse(stk, i+1, size-1);
        stk[i] = stk[size];
        stk[size] = tmp;
    }
}

void print(int*nums, int size)
{
    int i=0;
    while (i<size)
    {
        printf("%in", nums[i]);
        i++;
    }
}

Implementing tokenizer and adding tokens to the linked list

Here we go

#include 
#include 
#include 
struct Node
{
    char * value;
    struct Node *next;
};
struct Node *head = NULL;
struct Node *last = NULL;
char* substr(char*str, int start, int length)
{
    const char* from = str;
    char *to = (char*) malloc(sizeof(str)/sizeof(char));
    strncpy(to, from+start, length);
    return to;
}

void addToLinkedList(char* value)
{
    struct Node *curr_node = malloc(sizeof(struct Node));
    char * newtemp = malloc(strlen(value));
    strncpy(newtemp, value, strlen(value));
    curr_node->value = newtemp;
    curr_node->next = NULL;
    if (head == NULL)
    {
        head = curr_node;
        last = head;
    }
    else
    {
        last->next = curr_node;
        last = curr_node;
    }

}

void printLinkedList()
{
    struct Node * curr_node = head;
    while (curr_node !=NULL)
    {
        printf("%sn", curr_node->value);
        curr_node = curr_node->next;
    }
}
void main()
{
    int delimiter_size = 3, i=0, j=0;
    char* delimit = "abc";
    char* text = "someabccodingabctoabcparseab";
    int length = strlen(text);
    char* temp = (char*)malloc(length);
    while(i < length)
    {
        if (text[i] == delimit[0]) //check if the begin
        {
            //check if the 
            if (strcmp(substr(text, i, delimiter_size), delimit) == 0)
            {
                addToLinkedList(temp);
                i+=delimiter_size;
                j=0;
                memset(temp, '', strlen(temp));
                continue;
            }
        }
        temp[j] = text[i];
        i++;
        j++;
    }
    if (strlen(temp))
    {
        addToLinkedList(temp);
    }
    printLinkedList();
}

Kadane’s algorithm in C – Dynamic Programming

How do we find a keys that hold maximum consecutive values in sum from the given array?
The usual approach could be O(n^2).

But Kadanes algorithm can perform this same problem in a linear time.
here is the implementation using C

#include <stdio.h>

/*
 * @author https://gullele.com
 * 
 */
void main()
{
        printf("Kadane's Algorithmn");
        int nums[] = {-1,2,3,-9,8,7,2};
        int start_index;
        int end_index;
        int sum = maximum_consequential_sum(nums, &start_index, &end_index);
        printf("maximum sum is %d n",sum );
        printf("maximum index starts at %d n", start_index);
        printf("maximum index ends at %d n", end_index);
}
/*
 * Get the maximum subsequent sum from the given array
 * function performing kadane's Algorithm 
 */
int maximum_consequential_sum(int* nums, int*start_index, int*end_index)
{
        int max_start_index = 0, max_end_index = 0;
        int max_sum = 0;
        int cur_index, cur_max_sum = 0;
        for(cur_index = 0; cur_index <= max_sum ; cur_index++)
        {
                cur_max_sum += nums[cur_index];
                if (cur_max_sum > max_sum)
                {
                        max_sum = cur_max_sum;
                        max_end_index = cur_index;
                }
                if (cur_max_sum < 0)
                {
                        cur_max_sum = 0 ;
                        max_start_index = cur_index + 1;
                }
        }
        *start_index = max_start_index;
        *end_index = max_end_index;
        return max_sum;
}

The above code is, of course, just for illustration purpose. Make sure to check
for empty array and possible division by zero stuff..

To run this on Linux

1. Save the above file as kadanes.c
2. go to terminal and locate to the file
3. gcc kadanes.c -o kadane
4 run as ./kadane

** you can use this code as you like. As the same time, I am not responsible for anything, in case if you use it.
Thanks

Click here to see more algorithm solutions

Remove clean outgoing change from mercurial hg

How to clear outgoing change from repository that are listed when you do hg o or hg outgoing

In this case using the hg strip will be the solution.

To use hg strip you need to install the extension mq, to install that:

Assuming you are on ubuntu/linux desto

1. go to /home/USER/

2. open .hgrc

3. under the [extensions] add mq =

Say you have two outgoing changes with revison rev1 and rev2.

If you want to get rid of rev2 then being on the repository do:


hg strip rev2

That would remove the outgoing revision from the repository and you can push only the desired revision change

The RSA host key differs from the key for the IP Address warning

IP Address and RSA host key are different error

SSH would allow you to log into your remote server/computer from anywhere and it is very important tool.

Fix password less entry from ubuntu to mac

There are two major ways that you can log into server:

  • Using username and password
  • Using password less approach using ssh keys

How to use ssh

When you are using ssh without password, you might get the warning The RSA host key differs from the key for the IP Address warning

The RSA host key differs from the key for the IP Address warning would occur when you try to ssh to the server.

This a typical error of known_hosts when the remote server is changed or the ip match is no longer valid.

Solution

Being on the client do

cd ~/.ssh
>known_hosts

The above will clear the known_hosts file. But this would clear all the contents in the known hosts.

If you know the offending row you can clear that only