Differentiating Output Script (scriptPubKey) Types I am working on a little script to breakdown the data inside coinbase transactions. This is largely to improve my understanding of legacy and SegWit transactions (Given coinbase transactions have less data than for example a multisig TX, it is easier for me to work through).

One thing I've noticed about these transactions is differences in the output scripts. The Bitcoin RPC API works pretty well in decoding them, though I would like to know how to do it without an external tool. 
I am aware that there are different types such as P2PKH, P2SH, and P2PK. However, what I do not know is how to differentiate them only given the raw hexadecimal representation.

For example this transaction has two output scripts:

76A91494155788E7233D7BEA9AA29FEB2ED37BC878C40B88AC


and

6A24AA21A9ED7387872912D999B657F4146043675D84B9BBCF66AD5DEC8BCC14117E4FB6999E


The RPC API tells me the first one has the type pubkeyhash with a P2SH value of 3EstC3Hhe8zvNGP73oX9oDvo36sNCygjJi

The second output script appears to be random data which cannot be decoded. (I've also seen many coinbase transactions have one readable output and one or more output that cannot be decoded).

Another example, The genesis block coinbase transaction decoded by the RPC API has the type pubkey with this script:

4104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac


Question: How can I take this output script and determine the type of transaction and the assembly (OP script code) of it without external APIs?

Thank you!
thx for linking one of my older pics from 2016 :-) meanwhile things had changed, especially the multisig was not clear enough. I attach an updated version here. I didn't have the time to put newest SegWit related things into the pic though...
Still happy to see other opinions ...