Saturday, August 20, 2016

Books for Programmers (From Quora)



Books to be Read by Programmers
  1. Gödel Escher Bach by Douglas Hofstadter (cognitive scientist)
  2. The Metamagical Themas by Douglas Hofstadter
  3. The Art of Computer Programming by Donald Knuth
  4. Causality: Models, Reasoning and Inference by Judea Pearl
  5. Concepts, Techniques, and Models of Computer Programming by Peter Van Roy
  6. Purely Functional Data Structures by Okasaki
  7. The Art of Meta Object Protocol by Gregor Kiczales
  8. To Mock a Mockingbird by Raymond Smullyan

Friday, March 11, 2016

UltraEdit Compile And Execute Batch Files

Compile Batch File

@echo off

set FULL_FILENAME=%~1
set FILENAME=%~n1
set DIRNAME=%~dp1
set FILE_EXT=%~x1

echo Full File Name: %FULL_FILENAME%
echo File Name: %FILENAME%
echo File Directory: %DIRNAME%
echo File Extension: %FILE_EXT%

set CC_BIN=gcc
set CPP_BIN=g++
set GHC_BIN=ghc
set SCALA_BIN=scalac.bat

set CC_EXT=.c
set CPP_EXT=.c++
set GHC_EXT=.hs
set SCALA_EXT=.scala

REM set CPP_OPTIONS=-std=c++11
set CPP_OPTIONS=

IF /I %FILE_EXT% == %CPP_EXT% GOTO __CPPCOMPILE
IF /I %FILE_EXT% == %CC_EXT%  GOTO __CCOMPILE
IF /I %FILE_EXT% == %GHC_EXT% GOTO __HSKCOMPILE
IF /I %FILE_EXT% == %SCALA_EXT% GOTO __SCALACOMPILE
GOTO END

:__CCOMPILE
echo --- Compiling C Program ... ---
call %CC_BIN% %FULL_FILENAME%  -o %FILENAME%.exe & IF ERRORLEVEL 1 (echo. && echo "ERROR - Compilation Error - Please Fix !!!" ) ELSE echo "Compilation success !!!"
GOTO END

:__CPPCOMPILE
echo --- Compiling C++ Program ... ---
call %CPP_BIN% %FULL_FILENAME%  -o %FILENAME%.exe %CPP_OPTIONS% & IF ERRORLEVEL 1 (echo. && echo "ERROR - Compilation Error - Please Fix !!!" ) ELSE echo "Compilation success !!!"
GOTO END

:__HSKCOMPILE
echo --- Compiling Haskell Program ... ---
call %GHC_BIN% --make %FULL_FILENAME%  -o %FILENAME%.exe & IF ERRORLEVEL 1 (echo. && echo "ERROR - Compilation Error - Please Fix !!!" ) ELSE echo "Compilation success !!!"
GOTO END

:__SCALACOMPILE
echo --- Compiling Scala Program ... ---
call %SCALA_BIN% %FULL_FILENAME%  & IF ERRORLEVEL 1 (echo. && echo "ERROR - Compilation Error - Please Fix !!!" ) ELSE echo "Compilation success !!!"
GOTO END

:END

Execute Batch File

@echo off

set FULL_FILENAME=%~1
set FILENAME=%~n1
set DIRNAME=%~dp1
set FILE_EXT=%~x1

echo ++++++++++++++++++++++++++++++++++++++++
echo Executing  %FULL_FILENAME%  ...
echo ++++++++++++++++++++++++++++++++++++++++

set CC_BIN=gcc
set CPP_BIN=g++
set GHC_BIN=ghc
set RUBY_BIN=C:\Ruby21\bin\ruby.exe
set PYTHON_BIN=C:\Python27\python.exe
set SCALA_BIN=scala.bat


set CC_EXT=.c
set CPP_EXT=.c++
set GHC_EXT=.hs
set PY_EXT=.py
set RUBY_EXT=.rb
set SCALA_EXT=.scala

IF /I %FILE_EXT% == %CPP_EXT% GOTO __CPPEXEC
IF /I %FILE_EXT% == %CC_EXT%  GOTO __CEXEC
IF /I %FILE_EXT% == %GHC_EXT% GOTO __HSKEXEC
IF /I %FILE_EXT% == %PY_EXT% GOTO __PYTHONEXEC
IF /I %FILE_EXT% == %RUBY_EXT% GOTO __RUBYEXEC
IF /I %FILE_EXT% == %SCALA_EXT% GOTO __SCALAEXEC
GOTO END

:__CEXEC
call %FILENAME%.exe
GOTO END

:__CPPEXEC
call %FILENAME%.exe
GOTO END

:__HSKEXEC
call %FILENAME%.exe
GOTO END

:__PYTHONEXEC
call %PYTHON_BIN% %FULL_FILENAME%
GOTO END

:__RUBYEXEC
call %RUBY_BIN% %FULL_FILENAME%
GOTO END

:__SCALAEXEC
call %SCALA_BIN% %FILENAME%
GOTO END

:END
echo ++++++++++++++++++++++++++++++++++++++++
echo Execution - Completed !!!
pause

Sunday, September 13, 2015

C++11 Thread Example

[thread1.c++]

#include <iostream>
#include <thread>
#include <chrono>

using namespace std;

void funThread1() {
    for (int i = 0; i < 10; ++i) {
        this_thread::sleep_for(chrono::seconds(1));
        cout<<"Thread-1"<<endl;
    }
}

void funThread2() {
    for (int i = 0; i < 10; ++i) {
        this_thread::sleep_for(chrono::seconds(1));
        cout<<"Thread-2"<<endl;
    }
}

void funThread3() {
    for (int i = 0; i < 10; ++i) {
        this_thread::sleep_for(chrono::seconds(1));
        cout<<"Thread-3"<<endl;
    }
}

int main() {
  thread t1(funThread1);
  thread t2(funThread2);
  thread t3(funThread3);

  cout<<"Main Function - wait for Threads to complete ..."<<endl;

  t1.join();
  t2.join();
  t3.join();

  return 0;
}

Compilation:
g++ -o thread1 thread1.c++ -std=c++11 -lpthread

Monday, June 8, 2015

QSort in Haskell

qsort [] = []
qsort (lst) = ((qsort lesser) ++ mid ++ (qsort greater))
                  where p = head lst
                        lesser  = [z | z<-lst, z<p]
                        greater = [z | z<-lst, z>p]
                        mid = [z | z<-lst, z==p]

main :: IO()
main = do
    putStrLn $ show (qsort [2,7,3,5,1])

QSort in Python


#! /usr/bin/python

def myqsort(lst):
    if len(lst) <= 1:
        return lst
    p = lst[0]
    return myqsort([x for x in lst if x<p]) + [x for x in lst if x==p] + myqsort([x for x in lst if x>p])


lst = myqsort([1,4,3,4,6,3,2,6,8,3,2,6,9,7])
print lst
 

Sunday, June 7, 2015

My .vimrc file

[reemuskumar@reemuskumar-vm ~]$ cat .vimrc

set nu
set ai
set ts=4
set expandtab

highlight Type ctermfg=darkblue
highlight Statement ctermfg=darkred
highlight Function ctermfg=DarkMagenta


 [reemuskumar@reemuskumar-vm ~]$

Saturday, June 6, 2015

BFS and DFS with MultiMap in C++


#include <iostream>
#include <stack>
#include <queue>
#include <map>
#include <string>

using namespace std;

template <typename type>
class graph {
    private:
        multimap<type, type> adj;
        
    public:
        void insert(type, type);
        void DFS(type);
        void BFS(type);
        void display();
};

template <typename type>
void graph<type>::insert(type e1, type e2) {
    adj.insert(make_pair(e1,e2));
    // for un-directed graphs
    adj.insert(make_pair(e2,e1));
    
}
template <typename type>
void graph<type>::display() {
    typename multimap<type, type>::iterator i;

    for(i = adj.begin(); i != adj.end();i = adj.upper_bound(i->first)) { 
        cout<<i->first;
        pair<typename multimap<type, type>::iterator, typename multimap<type, type>::iterator> val;
        val = adj.equal_range(i->first);
        typename multimap<type, type>::iterator j;
        for(j = val.first; j != val.second; j++) {
            cout<<"->"<<j->second;
        }
        cout<<endl;
    }
}

template <typename type>
void graph<type>::DFS(type dd) {
    map<type, bool> visited;
    typename multimap<type, type>::iterator i;
    stack<type> ss;
    type v;
    
    for (i = adj.begin(); i != adj.end();i = adj.upper_bound(i->first)) {
        visited[i->first] = false;
    }
    cout<<"DFS : ";
    ss.push(dd);
    while (!ss.empty()) {
        v = ss.top();
        ss.pop();
        if (visited[v]) continue;
        cout<<v<<"->";
        visited[v] = true;
        pair<typename multimap<type, type>::iterator, typename multimap<type, type>::iterator> val;
        val = adj.equal_range(v);
        for(i = val.first; i != val.second; i++) {
            ss.push(i->second);
        }
    }
    cout<<"NULL"<<endl;
}

template <typename type>
void graph<type>::BFS(type dd) {
    map<type, bool> visited;
    typename multimap<type, type>::iterator i;
    queue<type> qq;
    type v;
    
    for (i = adj.begin(); i != adj.end();i = adj.upper_bound(i->first)) {
        visited[i->first] = false;
    }
    cout<<"BFS : ";
    qq.push(dd);
    cout<<dd<<"->";
    visited[dd] = true;
    while (!qq.empty()) {
        v = qq.front();
        qq.pop();
        pair<typename multimap<type, type>::iterator, typename multimap<type, type>::iterator> val;
        val = adj.equal_range(v);
        for(i = val.first; i != val.second; i++) {
            if (visited[i->second]) continue;
            qq.push(i->second);
            cout<<i->second<<"->";
            visited[i->second] = true;
        }
    }
    cout<<"NULL"<<endl;
}


int main() {
    graph<int> g;
    
    g.insert(1,2); g.insert(1,7); g.insert(1,8);
    g.insert(2,3); g.insert(2,6);
    g.insert(3,4); g.insert(3,5);
    g.insert(8,9); g.insert(8,12);
    g.insert(9,10); g.insert(9,11);
    g.display();
    g.DFS(1);
    g.BFS(1);
    return 0;
}

-----


++++ Output ++++
1->2->7->8
2->1->3->6
3->2->4->5
4->3
5->3
6->2
7->1
8->1->9->12
9->8->10->11
10->9
11->9
12->8
DFS : 1->8->12->9->11->10->7->2->6->3->5->4->NULL
BFS : 1->2->7->8->3->6->9->12->4->5->10->11->NULL

--------------------------------
Process exited after 0.02219 seconds with return value 0
Press any key to continue . . .