text:
Olympic Games Logo - Free Style Edition
In a similar spirit as this question, your mission is to create the best-looking logo in at most 1K of code.
Rules:

At most 1K of code (inclusive), no external data.
The answer with the most upvotes wins.

Have fun!

Well, he did state directly "in a similar spirit as this question", so he practically said "hey, I know this is a duplicate" :D

Different winning criteria. So it is a similar question, but is not a duplicate.

I'm actually glad someone else created a [tag:popularity-contest] version of my question with less criteria, as I was torn on which way to go when I wrote it.

@AdamMaras Glad to hear that :)

I started a reopen discussion on Meta, as this question shouldn't have been close-voted.

not a duplicate

Here's one using LaTeX/TikZ.  (Posting as a comment because I didn't create it!)

SVG
1kB? Luxury. I can even pretty-print the output rather than removing all unnecessary whitespace. (The indentation does, of course, use tabs, which Markdown converts to spaces, so that's why the char count might seem higher than the actual 977. Removing unnecessary whitespace drops it to 861).
The overlaps are handled correctly by drawing the rings in one direction, then applying a clip and drawing them in the other direction. The colours and ratios are extracted from an official document which for some reason uses Bézier curves rather than circles.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="504" height="228">
    <defs>
        <clipPath id="t">
            <rect width="504" height="114" />
        </clipPath>
    </defs>
    <g fill="none" stroke-width="12">
        <g id="u" transform="translate(82,82)" stroke="#0b8ed8">
            <g id="O">
                <circle r="72" stroke="#fff" stroke-width="20" />
                <circle r="72" />
            </g>
        </g>
        <g id="y" transform="translate(167,146)" stroke="#f9a91f">
            <use xlink:href="#O" />
        </g>
        <g id="k" transform="translate(252,82)" stroke="#231f20">
            <use xlink:href="#O" />
        </g>
        <g id="g" transform="translate(337,146)" stroke="#009e59">
            <use xlink:href="#O" />
        </g>
        <g transform="translate(422,82)" stroke="#ee2049">
            <use xlink:href="#O" />
        </g>
        <g clip-path="url(#t)">
            <use xlink:href="#g" />
            <use xlink:href="#k" />
            <use xlink:href="#y" />
            <use xlink:href="#u" />
        </g>
    </g>
</svg>

PS If anyone wants to argue that SVG isn't a programming language (and I'd be very inclined to agree), consider this a PHP program in the style of many PHP submissions to this site which just echo literal text.

omg it looks amazing though. SVG is niceee

Javascript (core) – 1000 on the dot. – WebKit (Chrome)
Playing with canvas.
Not sure if it is 1024 or 1000 the K is for, but managed to get it down to 1000 982 940 :D
Only suitable for WebKit browsers. Chrome OK. Firefox a mess. Might look into making it cross browser.

Code:
var w=window;w.onload=function(){function e(e,t){return r()*(t-e+1)+e}function d(e,t){function r(e,t,r,i){c.beginPath();c[u]="xor";c.strokeStyle="#"+e;c.arc(t,r,66,n*i[0],n*i[1]);c.stroke();c[u]="destination-atop";c.arc(t,r,66,n*i[1],n*i[0]);c.stroke()}var i=79+e,s=66+t,o=158,a=[2,1.2],f=[1.8,.8];c.lineWidth=13;r("007a9c",e,t,f);r("ffa100",i,s,a);r("000",e+=o,t,f);r("009b3a",i+=o,s,a);r("e10e49",e+=o,t,f)}var t=Math,n=t.PI,r=t.random,i,s,o=0,u="globalCompositeOperation",a=document.getElementById("c"),f=w.innerWidth,l=w.innerHeight,c=a.getContext("2d"),h=9,p=[];a.width=f;a.height=l;for(i=0;i<l;++i){p.push({x:r()*f,y:r()*l,r:e(1,3),d:e(1,l)})}setInterval(function(){c.clearRect(0,0,f,l-h);d(f/2-200,l-200);c[u]="xor";c.fillStyle="#fff";c.beginPath();o+=e(0,7)?.01:-.01;for(i=0;i<l-h;++i){s=p[i];c.moveTo(s.x,s.y);c.arc(s.x,s.y,s.r,0,n*2);s.y+=t.cos(o+s.d)+1+s.r/9;s.x+=(i%2?1:-1)*t.sin(o)*.4;if(s.x>f+7||s.x<-7||s.y>l-(h-1.2)){p[i]={x:r()*f,y:-9,r:s.r,d:s.d}}}c.fill();if(h<l/1.7)h+=l/9e3},32)}

940: Dropped wrapping it in onload and rely on script being inserted at end of body tag + alignment bug and Firefox fix.
function e(e,t){return r()*(t-e+1)+e}function d(e,t){function r(e,t,r,i){c.beginPath();c[u]="xor";c.strokeStyle="#"+e;c.arc(t,r,66,n*i[0],n*i[1]);c.stroke();c[u]="destination-over";c.arc(t,r,66,n*i[1],n*i[0]);c.stroke()}var i=79+e,s=66+t,o=158,a=[2,1.2],f=[1.8,.8];c.lineWidth=13;r("007a9c",e,t,f);r("ffa100",i,s,a);r("000",e+=o,t,f);r("009b3a",i+=o,s,a);r("e10e49",e+=o,t,f)}var w=window,t=Math,n=t.PI,r=t.random,i,s,o=0,u="globalCompositeOperation",a=document.getElementById("c"),f=w.innerWidth,l=w.innerHeight,c=a.getContext("2d"),h=9,p=[];a.width=f;a.height=l;for(i=0;i<l;++i,p.push({x:r()*f,y:r()*l,r:e(1,3),d:e(1,l)}));setInterval(function(){c.clearRect(0,0,f,l-h);d(f/2-158,l-200);c[u]="xor";c.fillStyle="#fff";c.beginPath();o+=e(0,7)?.01:-.01;for(i=0;i<l-h;++i){s=p[i];c.moveTo(s.x,s.y);c.arc(s.x+=(i%2?.4:-.4)*t.sin(o),s.y+=t.cos(o+s.d)+1+s.r/9,s.r,0,n*2);if(s.y>l-(h-1.2)){p[i].x=r()*f;p[i].y=-9}}c.fill();if(h<l/1.7)h+=l/9e3},32)

Fiddle:
http://jsfiddle.net/Ifnak/XSBLg/embedded/result/
http://jsfiddle.net/Ifnak/4fSWm/5/embedded/result/
Loads in Firefox as well as Chrome, but is rather heavy on resources in FF. Using requestAnimationFrame() helped a bit, but not enough.
Note that snow lays on bottom, thus scroll down to see the slow growth. Initially had some overpainting on the ground, but could not make it fit into 1024 chr.
Result (low quality GIF'ed screencast):

Nice! It also works in IE11.

Works absolutely fine on Firefox 27.0.1.

Mathematica
From my answer in the Mathematica.SE Q&A:
ring[x_, y_, v_, t_] :=
  Table[
    {1.2 y, -v x, 0} + {Cos@i, Sin@i}.{{0, -1, 0}, {1, 0, 1/4 - v/2}},
    {i, 0, 2 π, π/200}
  ] ~Tube~ t

Graphics3D[
  Riffle[
    {Cyan, Yellow, Darker @ Gray, Green, Red},
    Array[ring[Sqrt@3/2, #, # ~Mod~ 2, 0.17] &, 5, 0] ],
  Boxed -> False,
  ViewPoint -> {0, 0, ∞}
]

Edit: In version 10 the default lighting style changed; to render the graphic above one will need to add the Option Lighting -> "Classic" to Graphics3D.
Further playing with lighting to produce a flat two-dimensional affect:
Graphics3D[
  Riffle[
    Glow /@ {Hue[.59], Hue[.13], Black, Hue[.3, 1, .7], Hue[0, 1, .85]},
    Array[ring[Sqrt@3/2, #, # ~Mod~ 2, 0.13] &, 5, 0] ],
  Boxed -> False,
  ViewPoint -> {0, 0, ∞},
  Lighting -> None
]

For Oliver who said my first result was "too 3D-ish" here is an actual 2D rendering via jVincent's code with my refactoring, also from the linked thread:
ringSegment[mid_, deg_, color_] := {CapForm["Butt"],
  Thickness[0.042], White,                   Circle[mid, 1, deg],
  Thickness[0.03],  RGBColor @@ (color/255), Circle[mid, 1, deg + {-0.1, 0.1}]}

blue   = {  0, 129, 188};
yellow = {255, 177,  49};
black  = { 35,  34,  35};
green  = {  0, 157,  87};
red    = {238,  50,  78};

Graphics @ GraphicsComplex[
  {{2.5, 0}, {1.3, -1}, {0, 0}, {5, 0}, {3.8, -1}},
  ringSegment @@@
   {{1, {0, 5/4 π},      black},
    {2, {0, π},          yellow},
    {3, {0, 2 π},        blue},
    {2, {-π 9/8, 1/4 π}, yellow},
    {4, {0, 5/4 π},      red},
    {5, {0, 7/8 π},      green},
    {1, {5/4 π, 5/2 π},  black},
    {5, {7/8 π, 2 π},    green},
    {4, {-3/4 π, 1/4 π}, red}}
 ]

@Oliver Updated just for you.

Wow! Can you tell me where you can download Mathmatica?

@Oliver It is commercial product, and rather expensive even for individual, noncommerical use, but if you are still interested you can get a 15-day trial version from: http://www.wolfram.com/mathematica/trial/

@Oliver you can now get a free version of Mathematica if you have a raspberry pi

@trichoplax Now Open Cloud lets one freely run modest programs in a browser interface: https://develop.open.wolframcloud.com/app/view/newNotebook

Ruby, 321
Sadly, a certain head of state seems to be the headline subject of most Olympic news so far. Thus, here is my freestyle logo (mascot?) for the 2014 Games.
w=?$;"UW[NASY_LAQVgKAPSlKAOKGLnHAOIHMnHAOHILpHANHJLqFAOFLKAVMAVMAWKAWLAWKAMIHFGK
NFMLAMGOFFGAGJPGFIAHGFFOWPPAIGFFKQFOKMJHAIJJQGNLGFMAJIJNFIGHFHSGASMMFHHASHGGPK
MFJHTKARJSKAMGFOPJAPPOJAPRKLAQRJLAQTHLAR^LFARaARaAR]HFASZAS[FFRGAT_QGAUZGFFG
U]AQGITAPHKPANKKSALMNSGGAJPOP".codepoints{|r|r-=69;$><<(r<0??\n:(w=w==?$?' ':?$)*r)}

Output:  (Back up and squint. Sorry for the primitive rendering but he deserves no better.)

$$$, sad but true :D

Bash + ImageMagick
convert \
  -size 330x150 xc:white -strokewidth 10 -fill none \
  -stroke \#0885c2 -draw 'arc 100,100 10,10 0,360' \
  -stroke black -draw 'arc 210,100 120,10 0,360' \
  -stroke \#ed334e -draw 'arc 320,100 230,10 0,360' \
  -stroke \#fbb132 -draw 'arc 155,140 65,50 0,360' \
  -stroke \#1c8b3c -draw 'arc 265,140 175,50 0,360' \
  -stroke \#0885c2 -draw 'arc 100,100 10,10 -20,10' \
  -stroke black -draw 'arc 210,100 120,10 -20,10' -draw 'arc 210,100 120,10 90,120' \
  -stroke \#ed334e -draw 'arc 320,100 230,10 90,120' \
  x:

Sample output:

FreePascal
Winter Olympics? How about some fractal snowflakes instead of regular rings.
The recursion for the centre branch is pretty obvious: (dx,dy)= 0.5(dx,dy). Left and right branches are based on rotation by matrix multiplication:
x= x cos(a) - y sin(a)
y= x sin(a) + y cos(a)
1/4 = 0.5 cos(60) and 7/16 is a good approximation of 0.5 sin(60).
uses graph;
var gd, gm : integer;
var n:integer;

Procedure tree(x,y,dx,dy: integer);
begin
  if dx*dx+dy*dy>0 then begin
    line(x, y, x+dx, y+dy);
    tree(x+dx, y+dy, dx div 2, dy div 2);
    tree(x+dx, y+dy, dx div 4 + dy*7 div 16, dy div 4 - dx*7 div 16);
    tree(x+dx, y+dy, dx div 4 - dy*7 div 16, dy div 4 + dx*7 div 16);
  end;
end;

begin
  gd := D4bit;
  gm := m640x480;
  initgraph(gd,gm,'');
  setbkcolor(white); clearviewport;
  setbkcolor(black); setlinestyle(0,0,3);

  For n:=-1 to 1  do  begin
    setColor(yellow);
    tree(215,240-120*n,0,120*n);
    setColor(lightgreen);
    tree(425,240-120*n,0,120*n);
    setColor(black);
    tree(320,120-120*n,0,120*n);
    setColor(lightred);
    tree(530,120-120*n,0,120*n);
    setColor(lightblue);
    tree(110,120-120*n,0,120*n);
  end;
  readln;
  closegraph;
end.

.
.

Nice. If you can add a good amount of randomness to the algorithm, you may reuse it in Let's simulate a random snowflake.

Commodore 64 BASIC
Again, a C64 answer, but this time I'm allowed to use sprites! Yay!
I remember if you wanted to use sprites, you'd begin your program with a lots of boring DATA statements. To define a "high resolution" (24x21 pixels) monochromatic sprite pattern you need 63 bytes. There's actually an online sprite editor that calculates the DATA for you, so:
10 DATA 0,254,0,3,255,128,7,255,192,15,131,224,30,0,240,60,0,120,56,0,56,120,0
20 DATA 60,112,0,28,112,0,28,112,0,28,112,0,28,112,0,28,120,0,60,56,0,56,60,0
30 DATA 120,30,0,240,15,131,224,7,255,192,3,255,128,0,254,0

I'll also need some more DATA for the colours and positions. I just copied that from my answer to the original Olympic Games Logo question:
40 DATA 6,0,0,0,2,0,2,4,0,7,1,1,5,3,1

Then, you'd usually set V=53248. This 53248 must be an important number, because I still remember it 25 years later :) It turns out it is the base address of VIC-II (Video Interface Controller):
50 V=53248

Then I read the sprite pattern into the memory starting at the address 832. It feels weird to just write to a memory location, no allocating, no new, nothing like that :) The start address needs to be a multiple of 64.
60 FOR I=0 TO 62
70 READ D:POKE 832+I,D
80 NEXT I

I'll be using the same pattern for all the sprites.
90 FOR I=0 TO 4
100 READ C,X,Y

C is the colour code, X and Y are horizontal and vertical positions of the circles.
A few more POKEs are needed:
110 POKE V+I*2,150+X*11
120 POKE V+I*2+1,130+Y*10

V+0, V+2, V+4, etc... are the horizontal locations of each sprite, while V+1, V+3, V+5... are vertical. The sprite colours start at the register V+39:
130 POKE V+39+I,C

The sprite data pointers start at 2040, and since the data starts at 832, we get 832/64=13, so:
140 POKE 2040+I,13
150 NEXT I

To turn on the sprites I set bits 0-4 of the register V+21. I also changed the background to white, so we can see the blue circle.
160 POKE 53281,1
170 POKE V+21,31

That's it!

Great! Don't know if I remember correctly, but maybe you can double (in hardware) the x/y size of the sprites. I'm sure you could do this on a C128.

Yup, you can set bits of V+23 for double height, and V+29 for double width. (bit #x for sprite #x).

See it online here https://stigc.dk/c64/basic/?s=1jVBBisMwDLzrFTonOmhkO3EWeghNFsLCZimhtP__SOWs03Zvi8AaJM1oZChP4zayiqUoKsFzEliW_hcNJvAUIGZRgvqMRZWuAJhK6mR_ClayKudtwMps_h8o7CJ6yBV9ClWtdJ-b39y8LL5s10MoHk5E99gXSTmxF3gk54ApKV9PKVjM1Cl_rhdeTsrbyp1Rr3yZx4mnj5_1a-YcrF1koqz8Pd82Xmj4w4gErYyz3OROgPLOvLZLU75R21sDkJ_zVm_dTdD23kDJwdEJgy87E2KtmEb1CgK5zmEAXe36Bdl1CP1TwCABDw

Java
Similar to my SVG answer, but

Uses two clips, to avoid slight discrepancies due to double-drawing with anti-alias.
Because Java has actual loops, the structure is a bit nicer.

Note that I've not tried to golf it, despite the possibility of some interesting tricks (like -57*~dir instead of 57*(1+dir). It's at 923 chars, but golfs down to 624 quite easily.
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class Rings {
    public static void main(String[] args) throws Exception {
        int[] pal = new int[] {0x0b8ed8, 0xf9a91f, 0x231f20, 0x009e59, 0xee2049};
        BufferedImage img = new BufferedImage(505, 229, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = img.createGraphics();
        g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        for (int dir = -1; dir < 2; dir += 2) {
            g.setClip(0, 57 * (1 + dir), 520, 114);
            for (int ring = 2 - 2 * dir; ring != 2 + 3 * dir; ring += dir) {
                for (int subring = 0; subring < 2; subring++) {
                    g.setColor(new Color(pal[ring] | (subring - 1)));
                    g.setStroke(new BasicStroke(20 - 8 * subring));
                    g.drawOval(10 + 85 * ring, 10 + 64 * (ring & 1), 144, 144);
                }
            }
        }
        ImageIO.write(img, "PNG", new File("rings.png"));
    }
}

LaTeX/TikZ
Size: 876 bytes (12 lines, line with 72 characters and end of line)
\documentclass{standalone}\usepackage{tikz}\def\W{3.762bp}\def\R{71.682
bp}\def\D{12.9041bp}\usetikzlibrary{calc,hobby}\def\Y{-71.7013bp}\def\X
{169.5538bp}\begin{document}\tikz[use Hobby shortcut,every path/.style=
{line width=\W,double distance=\D, white}]{\def\Z{coordinate}\path(0,0)
\Z(A)++(\X,0)\Z(C)++(\X,0)\Z(E)($(A)!.5!(C)$)++(0,\Y)\Z(B)++(\X,0)\Z(D)
;\def~#1#2{\definecolor{#1}{cmyk}{#2}} ~A{1,.25,0,0}~B{0,.342,.91,0}~C{
0,0,0,1}~D{1,0,.91,.06}~E{0,.94,.65,0}\def~#1#2#3#4{\draw[save Hobby p%
ath={#1},double=#1,overlay](#1)+([closed] 225:\R)..+([#2]315:\R)..+([#3
]45:\R)..+([#4]135:\R); \path let\n!={\R+\D/2}in(#1)+(-\n!,0)+(\n!,0)+(
0,-\n!)+(0,\n!);}\def\0#1{\draw[double=#1,restore and use Hobby path={%
#1}{disjoint,invert soft blanks}];}~A{}{blank=soft}{}~B{}{}{blank=soft}
~C{}{blank=soft}{}\0B\0A~E{blank=soft}{}{}~D{}{}{}\0C\0E}\end{document}

Size: 817 bytes in one line and with two optimizations:

Option tikz of class standalone, see comment of Wheat Wizard.
The multiple uses of soft=blank can be shortened by defining a style b.

\documentclass[tikz]{standalone}\def\W{3.762bp}\def\R{71.682bp}\def\D{12.9041bp}\usetikzlibrary{calc,hobby}\def\Y{-71.7013bp}\def\X{169.5538bp}\begin{document}\tikz[use Hobby shortcut,every path/.style={line width=\W,double distance=\D,white},b/.style={blank=soft}]{\def\Z{coordinate}\path(0,0)\Z(A)++(\X,0)\Z(C)++(\X,0)\Z(E)($(A)!.5!(C)$)++(0,\Y)\Z(B)++(\X,0)\Z(D);\def~#1#2{\definecolor{#1}{cmyk}{#2}} ~A{1,.25,0,0}~B{0,.342,.91,0}~C{0,0,0,1}~D{1,0,.91,.06}~E{0,.94,.65,0}\def~#1#2#3#4{\draw[save Hobby path={#1},double=#1,overlay](#1)+([closed]225:\R)..+([#2]315:\R)..+([#3]45:\R)..+([#4]135:\R); \path let\n!={\R+\D/2}in(#1)+(-\n!,0)+(\n!,0)+(0,-\n!)+(0,\n!);}\def\0#1{\draw[double=#1,restore and use Hobby path={#1}{disjoint,invert soft blanks}];}~A{}b{}~B{}{}b~C{}b{}\0B\0A~E b{}{}~D{}{}{}\0C\0E}\end{document}

LaTeX/TikZ (readable version)
The following longer version is probably easier to understand.

The overlapping of the rings is handled by drawing the rings
with blank segments first. Then at a later stage, the rings
are drawn again, but this time the blank segments are filled
and the other already drawn segments of the rings remain untouched.
Therefore clipping is not used at all.
The ring with the white margins is drawn by circle with a double line. The
area between the lines is filled with the color of the ring and the thinner double lines form the outer and inner white margin.
The colors and dimensions are taken from the PDF page description of page 5 of the official document (see the answer of Peter Tayler).

\nofiles % .aux file is not needed
\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\usetikzlibrary{hobby}

\newcommand*{\xshift}{169.5538bp}
\newcommand*{\yshift}{-71.7013bp}
\newcommand*{\radius}{71.6821bp}
\newcommand*{\whitelinewidth}{3.762bp}
\newcommand*{\colorlinewidth}{12.9041bp}

\definecolor{color@A}{cmyk}{1, .25, 0, 0}
\definecolor{color@B}{cmyk}{0, .342, .91, 0}
\definecolor{color@C}{cmyk}{0, 0, 0, 1}
\definecolor{color@D}{cmyk}{1, 0, .91, .06}
\definecolor{color@E}{cmyk}{0, .94, .65, 0}

\begin{document}
  \begin{tikzpicture}[
    use Hobby shortcut,
    every path/.style = {
      line width      = \whitelinewidth,
      double distance = \colorlinewidth,
      white,
    },
  ]
    % define center coordinates for the five rings
    \path
      (0,0) coordinate (center@A)
      ++(\xshift, 0) coordinate (center@C)
      ++(\xshift, 0) coordinate (center@E)
      ($(center@A)!.5!(center@C)$) ++(0, \yshift) coordinate (center@B)
      ++(\xshift, 0) coordinate (center@D)
    ;
    % \drawring draws the first part of the ring with blank parts
    \newcommand*{\drawring}[4]{%
      \draw[
        save Hobby path = {path@#1},
        double          = {color@#1},
        overlay,
      ]
        (center@#1)
        +([closed] 225:\radius) .. +([#2] 315:\radius) ..
        +([#3] 45:\radius) .. +([#4] 135:\radius)
      ;
    }
    % \finishring draws the blank parts of the rings
    \newcommand*{\finishring}[1]{%
      \draw[
        double                     = {color@#1},
        restore and use Hobby path = {path@#1}{
          disjoint,
          invert soft blanks
        },
      ];
    }
    \drawring{A}{}{blank=soft}{}
    \drawring{B}{}{}{blank=soft}
    \drawring{C}{}{blank=soft}{}
    \finishring{B}
    \finishring{A}
    \drawring{E}{blank=soft}{}{}
    \drawring{D}{}{}{}
    \finishring{C}
    \finishring{E}
    % set calculated bounding box
    \useasboundingbox
      let \n{r} = {\radius + \colorlinewidth/2}
      in
        (center@A) +(-\n{r}, \n{r}) % upper left corner
        (center@B -| center@E) +(\n{r}, -\n{r}) % lower right corner
    ;
  \end{tikzpicture}
\end{document}

To save a couple of bytes you can use \documentclass[tikz]{standalone} thanks to this tip.

@WheatWizard Thanks, answer is updated and further shortened by defining style b to avoid the lengthy blank=soft that is used four times.

R, 70 characters
Using CRAN-R statistics.
l=c(1,9);plot(3:7,c(6,4,6,4,6),col=c(4,7,1,3,2),cex=10,ylim=l,xlim=l)

C++ 1024 bytes
Updated: Now with antialiasing. Code has been somewhat de-golfed while still fitting in (exactly) 1K.
Doesn't use any library functions except ostream functions to write output file.
#include <fstream>

namespace {
typedef double d;

int w=512;
d a=1./6,g=1./w,h=1./72,j=h+g,k=h-g,r=5./36;

struct p{d x,y;}ps[]={{5*a,a},{4*a,2*a},{3*a,a},{2*a,2*a},{a,a}};
struct c{unsigned char r,g,b;}cs[]={{237,51,78},{28,139,60},{0,0,0},{251,177,50},{8,133,194}};

d abs(d x) {return x<0?-x:x;}

d sqrt(d x) {
    d e=1e-6,y=1;
    for(;abs(y*y-x)>e;y=.5*(y+x/y));
    return y;
}

d dist(p c,p z) {
    d u=z.x-c.x,v=z.y-c.y;
    return abs(r-sqrt(u*u+v*v));
}

c lerp(c a,c b,d t) {
    auto l=[=](d a,d b){return a+(b-a)*t;};
    return {l(a.r,b.r),l(a.g,b.g),l(a.b,b.b)};
}

d smoothstep(d z) {
    z=(z-j)/(k-j);
    z=z<0?0:z>1?1:z;
    return z*z*(3-2*z);
}

c color(p z) {
    c o{255,255,255};
    for(int i=0,j;i<5;++i){
        j=z.y<.25?i:4-i;
        o=lerp(o,cs[j],smoothstep(dist(ps[j],z)));
    }
    return o;
}
}

int main() {
    std::ofstream o("r.ppm",std::ofstream::binary);
    o<<"P6 "<<w<<" "<<w/2<<" 255\n";
    for(int y=0;y<w/2;++y)
        for(int x=0;x<w;++x)
            o.write((char*)&color(p{x*g,y*g}),3);;
}

Outputs a .ppm file:

This isn't [tag:code-golf]: you can feel free to make your code legible, provide it fits in 1kB.

+1 for not even including

GLSL
I feel like I'm a little late to the party, but maybe I can make up for that with the first GLSL submission on this site. It is meant to be used as the fragment shader for a screen-filling primitive, and expects the viewport resolution in the iResolution uniform.
Colors and positions are "borrowed" from Peter Taylor's submission. I had to shorten some variable names to get below 1024 characters, but I hope it's still readable.
See it at Shadertoy (if your browser supports WebGL).
uniform vec3 iResolution;

float circle(vec2 pos, float r) {
    return clamp(r - distance(gl_FragCoord.xy, pos), 0., 1.);
}

float ring(vec2 pos, float r, float d) {
    return circle(pos, r + d) * (1. - circle(pos, r - d));
}

void paint(vec3 color, float a) {
    gl_FragColor.rgb = mix(gl_FragColor.rgb, color, a);
}

void main() {
    struct r_t {
        vec2 pos;
        vec3 col;
    } rs[5];
    rs[0] = r_t(vec2( 82, 146), vec3(.04, .56, .85));
    rs[1] = r_t(vec2(167,  82), vec3(.98, .66, .12));
    rs[2] = r_t(vec2(252, 146), vec3(.14, .12, .13));
    rs[3] = r_t(vec2(337,  82), vec3(.00, .62, .35));
    rs[4] = r_t(vec2(422, 146), vec3(.93, .13, .29));

    float s = min(iResolution.x / 504., iResolution.y / 228.);
    vec2 b = (iResolution.xy - vec2(504, 228) * s) * .5;
    bool rev = gl_FragCoord.y > iResolution.y * .5;

    gl_FragColor.rgb = vec3(1);

    for (int i = 0; i < 5; ++i) {
        r_t r = rev ? rs[4 - i] : rs[i];
        paint(vec3(1), ring(r.pos * s + b, 72. * s, 11. * s));
        paint(r.col,   ring(r.pos * s + b, 72. * s,  6. * s));
    }
}

Mathematica
I've replaced my original answer with one that draws on regions and their intersections.  The code size is 973 bytes, ungolfed.
Regions 1-5 are the rings.  The rings have an inner radius of 2.5 units; the outer radius is 3 units.  The ratio of inner to outer ratio, and the general logic of the approach are to be found here.
i = Implicit Region;
R1 = i[6.25 <= (x + 6.4)^2 + y^2 <= 9 , {x, y}];
R2 = i[6.25 <= x^2 + y^2 <= 9 , {x, y}];
R3 = i[6.25 <= (x - 6.4)^2 + y^2 <= 9 , {x, y}];
R4 = i[6.25 <= (x + 3.2)^2 + (y + 3)^2 <= 9 , {x, y}];
R5 = i[6.25 <= (x - 3.2)^2 + (y + 3)^2 <= 9 , {x, y}];

Why we cannot simply print out the 5 rings without taking layers into account.
If we plot these rings straightaway, they do not interlock. Notice that the yellow ring lies atop the blue and black rings; the green ring lies atop both the black and red rings.
Show[{RegionPlot[R1, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R2, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R3, PlotStyle -> Red, BoundaryStyle -> Red],
  RegionPlot[R4, PlotStyle -> Yellow, BoundaryStyle -> Yellow],
  RegionPlot[R5, PlotStyle -> Green, BoundaryStyle -> Green]
  }, PlotRange -> All, PerformanceGoal -> "Quality",
 ImageSize -> Large, AspectRatio -> 1/2,
 Frame -> False]

Flipping colors at 4 intersections of rings.
Regions 6, 8, 10 and 12 are rectangles that serve to specify which intersection of two rings to focus on.
Regions 7, 9, 11, and 13 are the "ring overlaps" where the ring on the bottom should be on top.
R6 = Rectangle[{-5, -1}, {-2, 1}];
R7 = RegionIntersection[R1, R4, R6];
R8 = Rectangle[{2, -1}, {4, 1}];
R9 = RegionIntersection[R2, R5, R8];
R10 = Rectangle[{-2, -3}, {2, -2}];
R11 = RegionIntersection[R2, R4, R10];
R12 = Rectangle[{5, -3}, {7, -2}];
R13 = RegionIntersection[R3, R5, R12];

Show[{RegionPlot[R1, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R2, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R3, PlotStyle -> Red, BoundaryStyle -> Red],
  RegionPlot[R4, PlotStyle -> Yellow, BoundaryStyle -> Yellow],
  RegionPlot[R5, PlotStyle -> Green, BoundaryStyle -> Green],
  RegionPlot[R7, PlotStyle -> Blue, BoundaryStyle -> Blue],
  RegionPlot[R9, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R11, PlotStyle -> Black, BoundaryStyle -> Black],
  RegionPlot[R13, PlotStyle -> Red, BoundaryStyle -> Red]},
PlotRange -> All, PerformanceGoal -> "Quality",
 ImageSize -> Large, AspectRatio -> 1/2,
 Frame -> False]

Which intersections had their colours flipped?
The following highlights the intersection regions where colours were "flipped".
This was accomplished by changing the BoundaryStyle of regions 7, 9, 11, and 13 to White.

Can't you do something aesthetically better in 1k? those intersections are ugly!

@friol, I improved the intersections by using regions.

It took a year and a half, but you've finally found how to make pretty intersections :D

Yesterday I saw some Olympic rings and realised that I could use regions to solve the intersection issue. The prior ones were too ugly to leave as they were.

Javascript (three.js) - 910 bytes
Given an html element, this function will create the rings as 3D objects and then render a still image to the element. Works in browsers that support WebGL. FIDDLE
function Logo(l){
    var s, c, r;
    s = new THREE.Scene();
    c = new THREE.PerspectiveCamera(45, 4/3, 1, 500);
    c.position.set(75,0,300);
    c.lookAt(new THREE.Vector3(0,0,0));
    var rings = [
        new THREE.Mesh(ring(), mat(0x0885c2)),
        new THREE.Mesh(ring(), mat(0xfbb132)),
        new THREE.Mesh(ring(), mat(0x000000)),
        new THREE.Mesh(ring(), mat(0x1c8b3c)),
        new THREE.Mesh(ring(), mat(0xed334e))
    ];
    for(var i = 0; i < rings.length; i++){
        s.add(rings[i]);
        rings[i].position.set(i*55-125,-(i%2)*50,0);
        rings[i].rotation.set(0,(i%2*2-1)*.18,0,'xyz');
    }
    r = new THREE.WebGLRenderer();
    r.setSize(400, 300);
    l.appendChild(r.domElement);
    r.render(s, c);
}
function ring(){ return new THREE.TorusGeometry(50, 8, 16, 32); }
function mat(color){ return new THREE.MeshBasicMaterial({color: color}); }

C++ w/SFML (1003 incl. whitespace)
Not small by any stretch of the imagination, but kept as terse-yet-readable as possible and still under 1k.
#include <SFML/Graphics.hpp>

using namespace sf;

int main() {
    CircleShape circles[5];
    Color backcolor(255,255,255);
    Color colors[5] = {
        Color(0x0b,0x8e,0xd8),
        Color(0xf9,0xa9,0x1f),
        Color(0x23,0x1f,0x20),
        Color(0x00,0x9e,0x59),
        Color(0xee,0x20,0x49),
    };

    for (int i = 0; i < 5; i++) {
        circles[i] = CircleShape(144, 60);
        circles[i].setPosition(15+160*i, 46+160*(i&1));
        circles[i].setFillColor(Color::Transparent);
        circles[i].setOutlineColor(colors[i]);
        circles[i].setOutlineThickness(-16);
    }

    RenderWindow window(VideoMode(960, 540), L"Olympic Logo", Style::Close);

    while (window.isOpen()) {
        Event event;

        while (window.pollEvent(event))
            if (event.type == Event::Closed)
                window.close();

        window.clear(backcolor);

        for (int i = 0; i < 5; i++)
            window.draw(circles[i]);

        window.display();
    }

    return 0;
}

Edit: Updated colors based on @Peter Taylor's SVG submission.

cat (10 bytes)
It was so short that the website refused to upload it until I added this description. The logo represents Olympic Games.
$ $ $
 $ $

Basically a tweak of Darren's answer to the other question

Delphi
  Canvas.Pen.Width := 10;
  Canvas.Brush.Style:=bsClear;//To prevent solid background
  Canvas.Pen.Color:=clBlue; Canvas.Ellipse(20,30,220,230);
  Canvas.Pen.Color:=clBlack; Canvas.Ellipse(240,30,440,230);
  Canvas.Pen.Color:=clRed; Canvas.Ellipse(460,30,660,230);
  Canvas.Pen.Color:=clYellow; Canvas.Ellipse(130,130,330,330);
  Canvas.Pen.Color:=clGreen; Canvas.Ellipse(350,130,550,330);

Result

SpecBAS
Each ring is made up of an inner/outer circle, then flood-filled.
Had to find the intersections manually and fill those individually (so you can still see some of the lines between them).
1 INK 0: PAPER 15: CLS: LET r=50
2 FOR x=1 TO 3
3 CIRCLE x*100,100,r: CIRCLE x*100,100,r-10
4 IF x<3 THEN CIRCLE (x*100)+50,150,r: CIRCLE (x*100)+50,150,r-10
5 NEXT x
6 INK 0: FILL 165,130: FILL 195,145: FILL 200,55: FILL 215,145: FILL 245,105
7 INK 9: FILL 100,55: FILL 130,130: FILL 145,105
8 INK 10: FILL 270,135: FILL 295,145: FILL 300,55
9 INK 12: FILL 205,145: FILL 215,120: FILL 250,195: FILL 255,105: FILL 280,120
10 INK 14: FILL 105,145: FILL 110,125: FILL 150,195: FILL 155,105: FILL 190,130

made a solution based on a Java Swing GUI
UltraGolfed edition  (696 charas)
import java.awt.Color;import java.awt.Graphics;import javax.swing.JFrame;import javax.swing.JPanel;class A extends JFrame{public A(){JPanel j=new JPanel(){protected void paintComponent(Graphics g){;((java.awt.Graphics2D)g).setStroke(new java.awt.BasicStroke(3));g.setColor(new Color(0xb,0x8e,0xd8));g.drawOval(10, 10, 80, 80);g.setColor(new Color(0xf9,0xa9,0x1f));g.drawOval(50,40,80,80);g.setColor(new Color(0x23,0x1f,0x20));g.drawOval(90, 10, 80, 80);g.setColor(new Color(0,0x9e,0x59));g.drawOval(130,40,80,80);g.setColor(new Color(0xee,0x20,0x49));g.drawOval(170, 10, 80, 80);}};j.setBounds(0,0,600,400);setSize(600,400);add(j);}public static void main(String[]a){new A().setVisible(true);}}

Semiuncompressed one: (971)
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
class A extends JFrame
{
    public A()
    {
        JPanel j = new JPanel(){
        protected void paintComponent(Graphics g)
        {;
            ((java.awt.Graphics2D)g).setStroke(new  java.awt.BasicStroke(3));
            g.setColor(new Color(0xb,0x8e,0xd8));
            g.drawOval(10, 10, 80, 80);
            g.setColor(new Color(0xf9,0xa9,0x1f));
            g.drawOval(50,40,80,80);
            g.setColor(new Color(0x23,0x1f,0x20));
            g.drawOval(90, 10, 80, 80);
            g.setColor(new Color(0,0x9e,0x59));
            g.drawOval(130,40,80,80);
            g.setColor(new Color(0xee,0x20,0x49));
            g.drawOval(170, 10, 80, 80);}};
        j.setBounds(0,0,600,400);
        setSize(600,400);
        add(j);
    }
    public static void main(String[]a)
    {
        new A().setVisible(true);
    }
}

Could you add a screenshot?

POWERSHELL , 869
code and output in screenshot


text:
Display Sentence in Alphabetical Order
Write a program that takes a string and outputs all the characters in alphabetical order.
Spaces and symbols can be ignored or deleted, but the upper- and lowercase letters must remain the same case.
Sample input:
Johnny walked the dog to the park.

Sample output
aaddeeeghhhJklnnoooprtttwy

Rules:
• Any language
• Shortest code wins.

How to sort upper/lower case letters? Upper before lower, vice versa or stable with the input?

Does it need to handle any letters outside of the basic Latin alphabet ("English alphabet")?

From the title, I was hoping I could get away with displaying "Sentence in Alphabetical Order". Or "ceeennst". (OK, "Sceeennt", if you insist on correct capitalization and ASCII order.)

When you Spaces and symbols can be ignored or deleted, does that mean must be ignored; or is output such as  ,     .aaddeeeff allowed?

Whichever makes your code more golfed.

Should there not be 2 ks in the output?

MathGolf, 2 bytes
áδ

Try it online!
Example output
      .aaddeeeghhhJkklnnoooprtttwy

Removing non-alphabetical characters
To remove all non-alphabetical characters, this solution works:
áδgÆ∞_δ¡

It is the same as the code above, followed by a filtering where each character is first doubled, and then compared its own capitalization. For example, the string "a" is converted to "aa" and then capitalized to "Aa", which is not equal to "aa". The same way, the string "B" is converted to "BB" and capitalized to "Bb", which is not equal to "BB". However, "." is converted to ".." and is unchanged when capitalized, so it will become filtered out.
Explanation
I really need more string handling in MathGolf... Right now there isn't even an operator to convert to lowercase/uppercase. The only thing I could use was the capitalization operator, which works like an uppercase operator for strings of length 1. This solution also sorts non-alphabetical characters, but those could be ignored. The alphabetical characters preserves their case and are output in the correct order.
á    sort by comparator
 δ   capitalize string

GolfScript, 24 / 6 characters
{26,{65+.32+}%?)},{31&}$

Example:
> Johnny walked the dog to the park.
aaddeeeghhhJkklnnoooprtttwy

If the input is restricted to printable ascii the code can be shortened by three characters using {95&.64>\91<&}, as filter.
Can be tested here.
The can-be-ignored version is even shorter (6 chars):
{31&}$

and yields output
> Johnny walked the dog to the park.
      aaddeeeghhhJkkl.nnoooprtttwy

and if "alphabetize" could be construed to mean "ASCII order okay, it could just be reduced to {}$

@McKay The question explicitely states differently. And {}$ would be equivalent to $.

Oh, yeah. Thanks, I'm trying to learn golfscript

GNU core utils - 25 characters (29 dropping symbols)
fold -1|sort -f|tr -d \\n

Example (from GNU bash 3):
$ echo "Johnny walked the dog to the park."|fold -1|sort -f|tr -d \\n
      .aaddeeeghhhJkklnnoooprtttwy   <<no trailing newline>>

From the question:

Spaces and symbols can be ignored or deleted

I chose to leave them in!  To retain only alphabetic characters, replace fold -1 with grep -o \\w for +4 characters.
grep -o \\w|sort -f|tr -d \\n

Thanks to Firefly for recommending grep -o over sed, and Wumpus for fold -1.  ;-)

This is not alphabetical order, the uppercase J should still be alphabetically sorted with the other lowercase letters.

Oh good point aks.  I must add -f (fold) to sort to ignore case.

C, 121
This is quite long compared to other entries, but it does not rely on any built-in sorting or ToLower functions:
j;main(k){char s[99],*p=s;gets(s);while(*p){j=p-s-1;k=*p++;while(j>=0&&(s[j]|32)>(k|32))s[j+1]=s[j--];s[j+1]=k;}puts(s);}

More readable version:
j; main(k) {
    char s[99], *p=s;
    gets(s);
    while(*p) {
        j = p-s-1;
        k = *p++;
        while(j >= 0 && (s[j]|32) > (k|32))
            s[j+1] = s[j--];
        s[j+1] = k;
    }
    puts(s);
}

This is an implementation of insertion sort with a case-insensitive comparison between elements (using the |32 bitwise operation). This is because in ASCII encoding uppercase letters and lowercase letters only differ by the 25 bit.

PowerShell : 39
$([string[]][char[]](Read-Host)|sort)" #With spaces and symbols

Result
  .aaddeeeghhhJkklnnoooprtttwy

C# : 100
Console.Write(new string(input.ToCharArray().OrderBy(a=>char.ToLower(a)).ToArray()).Trim('.',' '));

Result
aaddeeeghhhJkklnnoooprtttwy

That's not a program as required by the question.

You don't need ToCharArray; String implements IEnumerable<char>

@howard so do scripts count as a program?

Written in a scripting language - yes. If the question specifies program usually it is required to give the complete source code (which seems quite unfair for languages like C# or java but that's a different story).

I'll try to rewrite to a scrip language

Instead of using ToLower() on the string, I suggest using a=>Char.ToLower(a) in the OrderBy to resolve your "one fault"

You can replace Sort-Object with sort and you can use sal to set a one char alias for Read-Host and use that instead.

@KrisHarper Great! Will look into sal

Your symbol-excluding solutions only work for the sample input. That input was only a sample (real input can also include other symbols).

@Sander true, I should learn how to read better ;) Will look into

@RalfdeKleine Sorry, I misspoke about sal, I don't think you can use that. But, you can get rid of the variable assignment with "$([string[]][char[]](Read-Host)|sort)".

Ruby - 33 Chars
$><<gets.chars.sort(&:casecmp)*''

Where is the output code?

You can spare 2 characters by using *"" instead of .join.

You could use p, but that's questionable, so just use puts. Also, $< is a shortcut for ARGF

@manatwork edited...

You can spare 1 character by using $><< instead of puts as the separating space can be removed.

shelvacu and @manatwork thats a gud one

Perl6: 26 characters
Sorts output uppercase first, then lowercase, deletes symbols/whitespace
say [~] sort comb /\w/,get

If whitespace/symbols in output may be ignored too, this is only 21 characters.
say [~] get.comb.sort

This sorts case-insensitively, keeps symbols (26 chars)
say [~] get.comb.sort: &lc

It has to sort case-insensitively but it can ignore whitespace and symbols if preferred.

APL 16
      ⍞←A[⍋48|⎕av⍳A←⍞]
Johnny walked the dog to the park.
      aaddeeeghhhJkklnnoooprtttwy.

This doesn't meet the requirements, because J doesn't come before a, d, e, etc.

Great job there +1

Perl 34
Now takes input from STDIN.
print sort{lc$a cmp lc$b}<>=~/\w/g

Perl 18
If output including capitals first and symbols included is acceptable:
print sort<>=~/./g

I suspect you can shorten it further by taking the string from input (as per the description) instead of getting it from the cmdline.

Oooh right you are!

Python 3: 45
print(''.join(sorted(input(),key=str.lower)))

I'm not into Python but does your code remove the spaces en the period?

No, but "Spaces and symbols can be ignored or deleted", so I just ignore them!

Ah reading is difficult ;)

Using lambda saves some bytes: Try it Online

Haskell, 88
import Data.List
import Data.Char
import Data.Ord
main=interact$sortBy$comparing toLower

(38 without imports from standard lib)

F# (68 56)
I'm learning F# so I'm sure this could be shorter:
let f s=s|>Seq.sortBy Char.ToLower|>Seq.iter(printf"%c")

Output:
> f "Johnny walked the dog to the park."
        .aaddeeeghhhJkklnnoooprtttwy

You could just return the value without printing it, so 29 bytes will suffice. However, admittedly I can't find a way to golf Seq.iter(printf"%c")...

k (10 9)
Reads from stdin
x@<_x:0:0

Example
x@<_x:0:0
Johhny walked the dog to the park.
"      .aaddeeeghhhhJkklnoooprtttwy"

C#: 83
Console.Write(new string(Console.ReadLine().OrderBy(i=>i+"".ToLower()).ToArray()));

Update: 65
Executable in LinQPad
new string(Console.ReadLine().OrderBy(i=>i+"").ToArray()).Dump();

You can remove the Dump and state it runs in LinqPad's Expression Mode :)

J, 12 characters
(/:32|a.i.])

Ignores any non-alpha characters.

This task asks for a program. I can see no I/O here. If you are using any interpreter flags, you have to state them - and count them into the character count.

@JanDvorak Okay, would a function count - f=., or do you want me to add the 1!:1[1?

1!:1[1 and echo please

@JanDvorak Why would you want echo?

Does the J interpreter automatically output the result of the last expression when running a script file? Or, how do you run it?

@JanDvorak I always run it at the command line.

Javascript - 74
Unfortunately, due to the way JS sorts characters, we cannot use standard sorting function:
prompt().split("").sort(function(a,b){return a.localeCompare(b)}).join("")

Actually this can be shortened to:
prompt().split("").sort((a,b)=>a.localeCompare(b)).join("")

PHP, 50 bytes
$a=str_split($argn);natcasesort($a);echo join($a);

does not remove non-letters, takes input from STDIN; run with -R.

Java 10, 72 bytes (as lambda function)
s->{for(int i=64;++i<91;)for(var c:s)if((c&~32)==i)System.out.print(c);}

Try it online.
But since it's an old challenge stating full program:
Java 10, 126 bytes (as full program)
interface M{static void main(String[]a){for(int i=64;++i<91;)for(var c:a[0].toCharArray())if((c&~32)==i)System.out.print(c);}}

Try it online.
Explanation:
interface M{                        // Class
  static void main(String[]a){      //  Mandatory main method
    for(int i=64;++i<91;)           //   Loop over the uppercase alphabet
      for(var c:a[0].toCharArray()) //    Inner loop over the characters of the input
        if((c&~32)                  //     If the current character converted to uppercase,
                  ==i)              //     equals the current letter of the alphabet
          System.out.print(c);}}    //      Print the character of the input-loop

R, 48 characters
cat(sort(unlist(strsplit(scan(,""),""))),sep="")

Example usage:
> cat(sort(unlist(strsplit(scan(,""),""))),sep="")
1: Johnny walked the dog to the park.
8:
Read 7 items
.aaddeeeghhhJkklnnoooprtttwy

q/k4 (3? 5? 8?)
if it's sufficient to enter the code and the input directly into the REPL, it's just asc:
q)asc"Johnny walked the dog to the park."
`s#"      .Jaaddeeeghhhkklnnoooprtttwy"

the `s# is bit of q notation that indicates that the string is in sorted order (can be binary searched, etc.). if it has to go, that costs two characters, making five:
q)`#asc"Johnny walked the dog to the park."
"      .Jaaddeeeghhhkklnnoooprtttwy"

if you want it provided on stdin, it's time to switch to k4 (and we get rid of the `s# for free), and it's an eight-character solution:
  x@<x:0:0
Johnny walked the dog to the park.
"      .Jaaddeeeghhhkklnnoooprtttwy"

that one, btw, will work as a code file exactly as is (still eight characters, since q is fine with not having the final newline in a code file). normally there would be issues with a welcome banner and with the REPL staying open, but if you pass the input as a herestring, all that goes away:
$ cat asc.k
x@<x:0:0
$ q asc.k<<<'Johnny walked the dog to the park.'
"\n      .Jaaddeeeghhhkklnnoooprtttwy"
$

not actually sure where that extra newline in the output is coming from....

Jelly, 3 bytes
ŒlÞ

My first Jelly solution on this site! Thanks to @LeakyNun and @ErikTheOutgolfer for teaching me how to use Jelly and @Dennis for making it! :D
Explanation
ŒlÞ
  Þ Sort using the function to its left
Œl  Converts to lowercase (because it's sort alphabetically, not by codepoint)

Alternatively, ŒuÞ does the exact same thing except converting to uppercase instead.

Powershell, 36 bytes
-join($args-split'\W|(.)'-ne''|sort)

Test script:
$f = {

-join($args-split'\W|(.)'-ne''|sort)

}

@(
    ,("Johnny walked the dog to the park.", "aaddeeeghhhJkklnnoooprtttwy")
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$("$result"-eq"$expected"): $result"
}

Output:
True: aaddeeeghhhJkklnnoooprtttwy

05AB1E, 3 2 bytes
Σl

Ignores non-letter characters, so some are leading and some are trailing.
Try it online.
A version which removes non-letter characters is 3 bytes instead:
áΣl

Try it online.
Explanation:
á    # Optional: only leave the letters ([a-zA-Z]) of the (implicit) input-string
 Σ   # Sort the characters in the string by (sorted by their ASCII unicode value):
  l  #  Their lowercase equivalent (in case of the letters)
     # (And output the result implicitly)

Julia 1.0, 34 bytes
s->join(sort([s...],by=lowercase))

Try it online!

Arturo, 20 bytes
$=>[arrange&=>lower]

Try it

J, 9 bytes
/:tolower

Modernized J solution that uses a monadic hook.
Attempt This Online!

Japt, 2 bytes
Simply sorts by lowercase
ñv

Try it

Java (JDK), 90 bytes
Not the best Java answer, but i tried to use only inline Stream.

Since the rules aren't clear regarding special characters, here are multiple solutions:
s->s.chars().boxed().sorted((a,b)->a%32-b%32).map(e->""+(char)(e*1)).reduce("",(a,b)->a+b)

returns the correct order for letters, but with special characters mixed in between:
      aaddeeeghhhJkklnn.oooprtttwy

Try it online!

Another solution (98 bytes)
s->s.chars().mapToObj(e->""+(char)e).sorted((a,b)->a.compareToIgnoreCase(b)).reduce("",(a,b)->a+b)

returns the correct order for letters, with special characters separated from the letters:
      .aaddeeeghhhJkklnnoooprtttwy

And a third solution (122 bytes)
s->s.chars().filter(e->e>64&e<91|e>96&e<123).boxed().sorted((a,b)->a%32-b%32).map(e->""+(char)(e*1)).reduce("",(a,b)->a+b)

returns only the letters, in correct order:
aaddeeeghhhJkklnnoooprtttwy

source: Stack Exchange

license: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/4.0/

sort: votes


text:
Display number of occurrences for every character in an input string
The code should take a string as input from keyboard:
The definition of insanity is quoting the same phrase again and again and not expect despair.

The output should be like this(not sorted in any particular order):
  :  15
. :  1
T :  1
a :  10
c :  1
e :  8
d :  4
g :  3
f :  2
i :  10
h :  3
m :  1
o :  4
n :  10
q :  1
p :  3
s :  5
r :  2
u :  1
t :  6
y :  1
x :  1

All ASCII characters count unicode is not a requirement, spaces, quotes,etc and input should come from keyboard / not constants, attributes, output should be printed with new line after each character like in the above example, it should not be returned as string or dumped as hashmap/dictionary etc, so x :  1 and x: 1 are ok, but  {'x':1,... and x:1 are not.
Q: Function or complete program taking stdin and writing stdout?
A: Code needs to be a program taking input using standard in and display the result via standard out.
Scoreboard:
Shortest overall: 5 bytes
Shortest overall: 7 bytes

All ascii characters as input? Or just printable? Or up to unicode? Will there be newlines?

Can I create a function, or is a whole program necessary? Can I output all the ascii characters and print 0 as the number of occurrences?

Is the output format strict, or it suffices to preserve the meaning?

Your edit did not address my question.

You didn't say if the output needs to be sorted alphabetically. You didn't say if the separator needs to be " :  " (note the two spaces after the :) or if other(shorter) seperators are fine. You didn't address the unicode/encoding issue.

what kind of sort order is that?

@Spongman The missing one type

Function or complete program taking stdin and writing stdout?

The "shortest overall" does not follow the required output.  Is that okay?

@microbian I see that as a soft requirement :)

@Eduard Florinescu, yeah, but the trouble is that your output IS sorted - losely as if it were read from a binary heap. yet you do not specify if that is a requirement. you say "The output should be" which implies that the order should be maintained.

@Spongman I used a dictionary for that, that's why, I will edit the question.

@EduardFlorinescu What about JavaScript? There is no standard input. You could say that the console is standard output.

@toothbrush prompt()? readline for nodejs

@toothbrush nodejs: http://stackoverflow.com/questions/5006821/nodejs-how-to-read-keystrokes-from-stdin

@EduardFlorinescu OK, thank you. I was thinking about in the browser. Is it OK to pass the string in a variable, then?

APL (Dyalog Unicode), 5 bytesSBCS
Full program body. Prompts for a string from STDIN and prints newline separated table to STDOUT. Leftmost column is the input characters, and counts are right-aligned with the largest number separated from its character by a single space.
,∘≢⌸⍞

Try it online!
⍞ prompt for text input from STDIN
⌸ create a keys' table consisting of
 , the unique element followed
 ∘ by
 ≢ the tally of the indices of its occurrence (i.e how many times it occurs)

Looks like the : is unfortunately required in the output (you can't delete this answer).

@EriktheOutgolfer How do you deduce that? Clearly OP found this answer acceptable, in accordance with an old comment.

Another reason for spec to be in the question itself...

PHP - 68 (or 39) bytes
<?foreach(count_chars(fgets(STDIN),1)as$k=>$v)echo chr($k)." : $v
";

Output for the example text:
  : 15
. : 1
T : 1
a : 10
c : 1
d : 4
e : 8
f : 2
g : 3
h : 3
i : 10
m : 1
n : 10
o : 4
p : 3
q : 1
r : 2
s : 5
t : 6
u : 1
x : 1
y : 1

If the exact output is not required, this would work for 39 bytes:
<?print_r(count_chars(fgets(STDIN),1));

Sample output:
Array
(
    [32] => 15
    [46] => 1
    [84] => 1
    [97] => 10
    [99] => 1
    [100] => 4
    [101] => 8
    [102] => 2
    [103] => 3
    [104] => 3
    [105] => 10
    [109] => 1
    [110] => 10
    [111] => 4
    [112] => 3
    [113] => 1
    [114] => 2
    [115] => 5
    [116] => 6
    [117] => 1
    [120] => 1
    [121] => 1
)

where each numerical index refers the ordinal value of the character it represents.
I suspect very strongly that using an in-built function that does exactly what the problem states will soon be disallowed.

$argv[1] instead of fgets(STDIN) saves 4 bytes.

k (8 7)
#:'=0:0

Example
k)#:'=:0:0
The definition of insanity is quoting the same phrase again and again and not expect despair.
T| 1
h| 3
e| 8
 | 15
d| 4
f| 2
i| 10
n| 10
t| 6
o| 4
s| 5
a| 10
y| 1
q| 1
u| 1
g| 3
m| 1
p| 3
r| 2
x| 1
c| 1
.| 1

edit: Down to seven, H/T Aaron Davies
Explanation
Take a String from keyboard :
k)0:0
text
"text"

Group the distinct elements and return a map containing key as distinct characters and values are the indices where the distinct elements occur.
k)=0:0
text
t| 0 3
e| ,1
x| ,2

Now count values of each entry in the map.
k)#:'=0:0
text
t| 2
e| 1
x| 1

Pretty incredible.

the : in =: is superfluous; k)#:'=0:0 works fine (7 chars). (bonus for knowing about 0:0, i had no idea!)

A detailed explanation would be really cool :)

q translation is easier to understand - count each group read0 0

GNU core utils - 29 22 20 chars (53 with formatting)
Wumpus's improvement (20 chars):
fold -1|sort|uniq -c

Firefly's improvement (22 chars):
grep -o .|sort|uniq -c

joeytwiddle's original (29 chars):
sed 's+.+\0\n+g'|sort|uniq -c

Originally I used sed to simply add a newline after each character.  Firefly improved on that with grep -o ., since -o displays every matched pattern on its own line.  Wumpus pointed out a further improvement using fold -1 instead.  Nice work!
uniq does the real work, although it only applies to sorted lists.
Note that the output format does not exactly match the example in the question.  That requires a final run through sed to swap the arguments.  (Waiting on an answer to Jan Dvorak's question to see if this is required...)
Reformatting with sed is "only" another 33 characters!  (Total 53)
|sed 's/ *\(.*\) \(.\)/\2 :  \1/'

Awk can almost do the job whilst adding only 25 chars, but it hides the first space.  Silly awk!
|awk '{print $2" :  "$1}'

I wonder if improvements can be made in the reformatting stage...

For sed you can use & for "whole match" instead of \0, though grep -o . is slightly shorter yet. It's worth mentioning that the output of uniq -c differs slightly from the one given in the question.

Oh thanks you!  Updated.  I should not forget grep -o; it is a useful one.

fold -1 does the same thing as grep -o .

Awesome :)  Learning new tricks!

ptx -S. does the same trick.

I like it!  However, it doesn't comply with the "output should be printed with new line after each character" requirement.

actually, I just misread the rule. :-)

Python 3: 76 characters
76
import collections as c
for x,y in c.Counter(input()).items():print(x,':',y)

44
(print same characters many times, see Wasi's answer for a valid version)
a=input()
for x in a:print(x,':',a.count(x))

The 45 char version prints characters more than once.

@evuez I just fixed your 45 char version. But, you removed it so I have submitted it once again. Have a look

Ruby 1.9.3: 53 characters
(Based on @shiva's and @daneiro's comments.)
gets.split("").uniq.map{|x|puts x+" : #{$_.count x}"}

Sample run:
bash-4.1$ ruby -e 'a=gets;a.split("").uniq.map{|x|puts"#{x} : #{a.count x}"}' <<< 'Hello world'
H : 1
e : 1
l : 3
o : 2
  : 1
w : 1
r : 1
d : 1

 : 1

Ruby: 44 characters
Not respecting the output format:
s=Hash.new 0;gets.chars{|c|s[c]+=1};pp s

Sample run:
bash-4.1$ ruby -rpp -e 's=Hash.new 0;gets.chars{|c|s[c]+=1};pp s' <<< 'Hello, world!'
{"H"=>1,
 "e"=>1,
 "l"=>3,
 "o"=>2,
 ","=>1,
 " "=>1,
 "w"=>1,
 "r"=>1,
 "d"=>1,
 "!"=>1,
 "\n"=>1}

63 chars a=gets.strip;a.split('').uniq.each{|x|puts"#{x} : #{a.count(x)}"}

Why to strip()? The question says, “all characters count”.

Well, gets will return \n even if you dont intend to

Nope. Only returns \n if it was really passed. Passing it is a side-effect of using here-string. http://pastebin.com/gCrgk9m1

Then it becomes 57 chars

57 -> 49 characters: puts gets.chars.uniq.map{|c|c+" :  #{$_.count c}"} if you don't mind newline being counted

@daniero, is that ruby 2++? “NoMethodError: undefined method `uniq' for #<Enumerator: "\n":chars>”

Oh, probably ;)

Using $_ and ditching a is still sound though. And c+"... instead of "#{c}...

Looking at 2.1.0 documentation, neither Enumerator nor Enumerable has such method…

Yes, but chars now returns an array.

Oh. Seems I really have to read a good amount of changelogs. Thank you, @daniero.

why require pp? Couldn't you use p and save a character?

@shelvacu, I tried to keep at least partially the vertical listing format. Most of the other answers are doing something similar.

Perl 6: 21 chars
.say for get.comb.Bag

(REPL)
> .say for get.comb.Bag
The definition of insanity is quoting the same phrase again and again and not expect despair.
"T" => 1
"h" => 3
"e" => 8
" " => 15
"d" => 4
"f" => 2
"i" => 10
"n" => 10
"t" => 6
"o" => 4
"s" => 5
"a" => 10
"y" => 1
"q" => 1
"u" => 1
"g" => 3
"m" => 1
"p" => 3
"r" => 2
"x" => 1
"c" => 1
"." => 1

APL (15)
M,⍪+⌿Z∘.=M←∪Z←⍞

If you really need the :, it's 19 (but there's others who aren't including it):
M,':',⍪+⌿Z∘.=M←∪Z←⍞

Output:
      M,⍪+⌿Z∘.=M←∪Z←⍞
The definition of insanity is quoting the same phrase again and again and not expect despair.
T  1
h  3
e  8
  16
d  4
f  2
i 10
n 10
t  6
o  4
s  5
a 10
y  1
q  1
u  1
g  3
m  1
p  3
r  2
x  1
c  1
.  1

Semi-serious question -- what's it like maintaining legacy APL code?

@MichaelStern: No idea, I've never had to do that. But I'd guess it's no worse than maintaining other legacy code. APL is actually quite easy to read once you're used to it.

R, 30 characters
table(strsplit(readline(),""))

Example usage:
> table(strsplit(readline(),""))
The definition of insanity is quoting the same phrase again and again and not expect despair.

    .  a  c  d  e  f  g  h  i  m  n  o  p  q  r  s  t  T  u  x  y
15  1 10  1  4  8  2  3  3 10  1 10  4  3  1  2  5  6  1  1  1  1

Good idea! But the question says the code must print the result. Your code just returns the result. I suppose you need cat.

@SvenHohenstein well it wasn't specified when i answered (i answered before revision 4 of the question)... but as a matter of fact cat will only return the values not the value names (i. e. the characters). So it would need a more complex solution.

Perl 5, 54 characters
map{$h{$_}++}split//,<>;print"$_ : $h{$_}\n"for keys%h

Very nice solution, easy to read. That would need to be sort keys%h, though.

Hey @protist, looks good! I agree with @primo though! You can however save two chars using $_=<>;s/./$h{$_}++/eg; or map{$h{$_}++}<>=~/./g; instead of map{$h{$_}++}split//,<>;

@DomHastings or $h{$_}++for<>=~/./g, which I think might be optimal. Literal newline instead of \n as well.

Ah nice, even better! Yes, I forgot to mention the literal newline, that's become my new favourite -1 byte!

JavaScript

66 53 bytes:
prompt(a={}).replace(/./g,function(c){a[c]=-~a[c]}),a

69 56 bytes:
b=prompt(a={});for(i=b.length;i--;){a[b[i]]=-~a[b[i]]};a

78 65 bytes:
prompt().split('').reduce(function(a,b){return a[b]=-~a[b],a},{})

N.B.: In all cases deleted number of bytes refer to extra console.log() call which is pointless if run in the console. Big thanks to @imma for the great catch with -~a[b] and prompt(a={}). This definitely saved some more bytes.

map instead of a loop help a little
also (a[b[i]]||0)+1 can be reduced to -~a[b[i]] & console.log can probably go, just returning the last value, giving prompt(a={}).split("").map(function(c){a[c]=-~a[c]});a

you can change for into for in - testing in empty tab produces the same results. Also, the last ; is not needed, thus: b=prompt(a={});for(i in b){a[b[i]]=-~a[b[i]]}a

nice :-)  stick the b=... into the for & swop the for{}'s for a ; for another 2 bytes off : for(i in b=prompt(a={}))a[b[i]]=-~a[b[i]];a

although they may want exact text output :-/ which puts it/me back up by 36 (to 79) bytes : for(i in b=prompt(a={}))a[b[i]]=-~a[b[i]];for(n in a)console.log(n+" :  "+a[n])

@imma for .. in is not the best choice for arrays and strings: it will grab own properties of the objects behind them. Normal loop is the way to go here IMO.

@VisioN only if the primitives are overloaded - for in indeed gives you functions in SO, but not in empty tab ;)

Python 2, correctly (58)
s=raw_input()
for l in set(s):print l+" : "+str(s.count(l))

Output:
python count.py
The definition of insanity is quoting the same phrase again and again and not expect despair.
  : 15
. : 1
T : 1
a : 10
c : 1
e : 8
d : 4
g : 3
f : 2
i : 10
h : 3
m : 1
o : 4
n : 10
q : 1
p : 3
s : 5
r : 2
u : 1
t : 6
y : 1
x : 1

Python 2, cheetah style (41)
s=input()
print {l:s.count(l) for l in s}

Output:
python count.py
"The definition of insanity is quoting the same phrase again and again and not expect despair."
{' ': 15, '.': 1, 'T': 1, 'a': 10, 'c': 1, 'e': 8, 'd': 4, 'g': 3, 'f': 2, 'i': 10, 'h': 3, 'm': 1, 'o': 4, 'n': 10, 'q': 1, 'p': 3, 's': 5, 'r': 2, 'u': 1, 't': 6, 'y': 1, 'x': 1}

Forgot to remove the brackets after print in the second one, that makes it 41

You can go down to 52 chars with your first version: for l in set(s):print l,":",s.count(l). For the second one, removing unnecessary spaces makes you win 2 chars: print{l:s.count(l)for l in s}

Mathematica, 61 bytes
Map[{#[[1]], Length@#} &, Gather@Characters[Input[]]] // TableForm

It then pops up this dialog box,

and for the sample sentence, produces as output

python 3, 49
Stealing idea from evuez
t=input()
for i in set(t):print(i,':',t.count(i))

input:
The definition of insanity is quoting the same phrase again and again and not expect despair.

output:
  :  15
. :  1
T :  1
a :  10
c :  1
e :  8
d :  4
g :  3
f :  2
i :  10
h :  3
m :  1
o :  4
n :  10
q :  1
p :  3
s :  5
r :  2
u :  1
t :  6
y :  1
x :  1

nice improvement! why don't you remove the sorted()?

right! anyway, if you don't use a list comprehension, it's 1 char less: for i in sorted(set(t)):print(i,':',t.count(i))

@evuez Thanks, I was supposed to add it as a comment in your code. If you like you can add it again in your solution(I will happily delete this one) :D

Wouldn't be fair, I hadn't thought about set()! ;)

JavaScript (69 68 characters):
Expects s to hold the string.
_={};for(x in s)_[a=s[x]]=-~_[a];for(x in _)console.log(x+': '+_[x])

This follows the new rules perfectly.
Note: This presumes a clean environment, with no custom properties on any standard object prototypes.
Edit: 1 character less!
Console output:
T: 1
h: 3
e: 8
 : 15
d: 4
f: 2
i: 10
n: 10
t: 6
o: 4
s: 5
a: 10
y: 1
q: 1
u: 1
g: 3
m: 1
p: 3
r: 2
x: 1
c: 1
.: 1

Old answer (44 characters):
r={};[].map.call(s,function(e){r[e]=-~r[e]})

This was valid before the rules changed.
r contains the output.

F# (66  59 49, 72 with prescribed formattting)
let f s=s|>Seq.countBy(id)|>Seq.iter(printfn"%A")

Output:
> f The definition of insanity is quoting the same phrase again and again and not expect despair.
(' ', 15)
('.', 1)
('T', 1)
('a', 10)
('c', 1)
('d', 4)
('e', 8)
('f', 2)
('g', 3)
('h', 3)
('i', 10)
('m', 1)
('n', 10)
('o', 4)
('p', 3)
('q', 1)
('r', 2)
('s', 5)
('t', 6)
('u', 1)
('x', 1)
('y', 1)

With the prescribed formatting, it becomes:
let f s=s|>Seq.countBy(id)|>Seq.iter(fun(a,b)->printfn"\"%c\" :  %d"a b)

You can drop a character by switching away from the piped syntax for a few of the function calls: let f s=Seq.countBy id (Seq.sort s)|>Seq.iter(printfn"%A")

In fact, why even sort in the first place? let f s=Seq.countBy id s|>Seq.iter(printfn"%A")

Haskell, 93
import Data.List
main=getLine>>=mapM(\s->putStrLn$[head s]++" : "++show(length s)).group.sort

PowerShell (49)
[char[]](read-host)|group|%{$_.Name+":"+$_.Count}

Bash (20 15 characters)
 ptx -S.|uniq -c
 10                                        a
  1                                        c
  4                                        d
  8                                        e
  2                                        f
  3                                        g
  3                                        h
 10                                        i
  1                                        m
 10                                        n
  4                                        o
  3                                        p
  1                                        q
  2                                        r
  5                                        s
  6                                        t
  1                                        T
  1                                        u
  1                                        x
  1                                        y

ASCII encoding now supported
Bash (23 characters):
xxd -p -c1|sort|uniq -c

  1 0a
 15 20
  1 2e
  1 54
 10 61
  1 63
  4 64
  8 65
  2 66
  3 67
  3 68
 10 69
  1 6d
 10 6e
  4 6f
  3 70
  1 71
  2 72
  5 73
  6 74
  1 75
  1 78
  1 79

ASCII formatting not supported

just out of curiosity, do you really need |sort| here, AFAIK ptx will already produce a sorted list of chars which you can feed directly to "uniq -c"

@zeppelin a little googling confimrs what you've said

Your ptx -S. solution doesn't work on my machine or TIO. However this works, for 20 bytes: fold -1|sort|uniq -c

C# (178 220 chars)
Based on @Spongeman's comment I changed it up a bit:
using C=System.Console;using System.Linq;class P{static void Main()
{C.WriteLine(string.Join("\n",C.ReadLine().GroupBy(x=>x)
.OrderBy(x=>x.Key).Select(g=>g.Key+":"+g.Count())));}}

Line breaks added for readability, my first feeble attempt at code golf! :)

class P {static void Main(){var d=new Dictionary<char,int>();
Console.ReadLine().ToList().ForEach(x=>{ if(d.ContainsKey(x))
{d[x]++;}else{d.Add(x,1);}});Console.WriteLine(string
.Join("\n",d.Keys.Select(x=>x+":" +d[x])));}}

doesn't compile. this one does: 178 chars.
using System.Linq;using C=System.Console;class F{static void Main(){C.WriteLine(string.Join("\n",C.ReadLine().GroupBy(c=>c).Select(g=>g.Key+" :  "+g.Count()).OrderBy(s=>s)));}}

168: using C=System.Console;using System.Linq;class F{static void Main(){foreach(var g in C.ReadLine().GroupBy(c=>c).OrderBy(g=>g.Key))C.WriteLine(g.Key+" :  "+g.Count());}}

apparently sorting is unneccesary, 150: using C=System.Console;using System.Linq;class F{static void Main(){foreach(var g in C.ReadLine().GroupBy(c=>c))C.WriteLine(g.Key+" : "+g.Count());}}

Wow. Quick or coincidence ? You replied just a second after I updated my answer :D Just noticed that sorting wasn't explicitly mentioned!

148: namespace System{using Linq;class F{static void Main(){foreach(var g in Console.ReadLine().GroupBy(c=>c))Console.WriteLine(g.Key+" : "+g.Count());}}

wow @Timwi that was neat!

Sclipting, 19 characters
梴要⓶銻꾠⓷❸虛變梴❶⓺減負겠⓸⓸終丟

Output
T:1
h:3
e:8
 :15
d:4
f:2
i:10
n:10
t:6
o:4
s:5
a:10
y:1
q:1
u:1
g:3
m:1
p:3
r:2
x:1
c:1
.:1

If you want the spaces around the :, change 꾠 to 긃똠, making it 20 characters.
Explanation
Get length of input string.
梴
Stack is now [ input, length ]
While {
要
    Get first character of string and push ":"
    ⓶銻꾠
    Stack is now [ length, input, firstchar, ":" ]
    Replace all occurrences of that character with empty string
    ⓷❸虛變
    Stack is now [ length, firstchar, ":", reducedinput ]
    Get the length of that, calculate difference to previous length, push "\n"
    梴❶⓺減負겠
    Stack is now [ firstchar, ":", reducedinput, newlength, diff, "\n" ]
    Move the input string and length back up, leaving output below it
    ⓸⓸
    Stack is now [ firstchar, ":", diff, "\n", reducedinput, newlength ]
                   `------------------------'                `-------'
                   Every iteration of the               The length provides
                   While loop generates                 the While loop's
                   a bit like this                      terminating condition
} End While
終
Discard the length which is now 0
丟

Mathematica, 34 29 bytes
Not sure why the other Mathematica answer is so complicated... ;)
Grid@Tally@Characters@Input[]

Java 8, 273 253 249 246 239 200 bytes
interface I{static void main(String[]a){int m[]=new int[999],i=0;for(int c:new java.util.Scanner(System.in).nextLine().getBytes())m[c]++;for(;++i<999;)if(m[i]>0)System.out.printf("%c: %d%n",i,m[i]);}}

-24 bytes thanks to @Poke.
-7 bytes thanks to @OlivierGrégoire.
Explanation:
Try it here.
interface I{                        // Class
  static void main(String[]a){      //  Mandatory main-method
    int m[]=new int[999],           //  Integer-array to count the occurrences
        i=0;                        //  Index-integer, starting at 0
    for(int c:new java.util.Scanner(System.in).nextLine().getBytes())
                                    //   Loop over the input as bytes:
      m[c]++;                       //    Increase the occurrence-counter of the char by 1
    for(;++i<999;)                  //   Loop over the array:
      if(m[i]>0)                    //    If the current character occurred at least once:
        System.out.print("%c: %d%n",//     Print with proper formatting:
         i,                         //      The character
         m[i]);}}                   //      and the occurrence-count

249 bytes import java.util.*;class I{public static void main(String[]a){Map m=new HashMap();for(char c:new Scanner(System.in).nextLine().toCharArray()){m.put(c,m.get(c)!=null?(int)m.get(c)+1:1);}for(Object e:m.keySet()){System.out.println(e+": "+m.get(e));}}}

m.compute(c,(k,v)->v!=null?(int)v+1:1); instead of m.put(c,m.get(c)!=null?(int)m.get(c)+1:1); to save 3 bytes.

JavaScript, 44 37 bytes
s=>[...s].map(x=>o[x]=-~o[x],o={})&&o

Try it

o.innerText=JSON.stringify((f=
s=>[...s].map(x=>o[x]=-~o[x],o={})&&o
)(i.value="The definition of insanity is quoting the same phrase again and again and not expect despair."));oninput=_=>o.innerText=JSON.stringify(f(i.value))
<input id=i><pre id=o></pre>

Befunge 98 - 31 to 42 chars
This does not print the spaces, and only prints for characters in the string (once for each character, even duplicates). So an input of aa will produce an output of:
a:2
a:2

31 chars
~::1g1+\1p;,a.- 'g1,:',:@j`0:;#

The following seems to match almost exactly. It outputs only one time for each character, in the order they appear in the string. An input of Bbaa gives an output of
B:1
b:1
a:2

38 chars
~:1g' `j::1g1+\1p;,a.- 'g1,:',:@j`0:;#

The following prints the spaces exactly as in the output example. It also outputs every single ascii character's count, which, since it is not clearly specified, I'll say is valid.
42 chars
~:1g1+\1p;,a+1.- 'g1:,,:,," : ",:@j!`~':;#

Powershell, 63
$a=@{};[char[]](read-host)|%{$a[$_]++};$a.Keys|%{"$_ :"+$a[$_]}

Each key in a hash can be accessed as a property on that hash, so you can shave off two characters by replacing each instance of $a[$_] with $a.$_ . See help about_hash_tables

Windows Command Script - 72 Bytes
set/p.=
:a
set/a\%.:~,1%=\%.:~,1%+1
set.=%.:~1%
%.%goto:b
goto:a
:b
set\

Outputs:
\=15 (space)
\.=1
\a=10
\c=1
\d=4
\e=8
\f=2
\g=3
\h=3
\i=10
\m=1
\n=10
\o=4
\p=3
\q=1
\r=2
\s=5
\T=7
\u=1
\x=1
\y=1

Nice!  It does fold case though, but it's always amazing to see actual cleverness in batch file programming.

J, 23 chars
(~.;"0+/@|:@=)/:~1!:1]1

Slightly different output format (line 2 is stdin):
   (~.;"0+/@|:@=)/:~1!:1]1
Mississippi
┌─┬─┐
│M│1│
├─┼─┤
│i│4│
├─┼─┤
│p│2│
├─┼─┤
│s│4│
└─┴─┘

C#
string str = Console.ReadLine(); // Get Input From User Here
char chr;
for (int i = 0; i < 256; i++)
{
    chr = (char)i; // Use The Integer Index As ASCII Char Value --> Convert To Char
    if (str.IndexOf(chr) != -1) // If The Current Char Exists In The Input String
    {
        Console.WriteLine(chr + " : " + str.Count(x => x == chr)); // Count And Display
    }
}
Console.ReadLine(); // Hold The Program Open.

In Our Case, If The Input Will Be "The definition of insanity is quoting the same phrase again and again and not expect despair."
The Output Will Be:
  : 15
. : 1
T : 1
a : 10
c : 1
d : 4
e : 8
f : 2
g : 3
h : 3
i : 10
m : 1
n : 10
o : 4
p : 3
q : 1
r : 2
s : 5
t : 6
u : 1
x : 1
y : 1

The question asks for input from the keyboard, so the first line should be string str = Console.ReadLine();. But this is [tag:code-golf] so it should actually be var str=Console.ReadLine();. The other comments I would like to make have to be put on hold until OP improves the question.

You're right, I edited my answer.

J, 22 characters
(~.;"0+/@(=/~.))1!:1]1

Example:
   (~.;"0+/@(=/~.))1!:1]1
The definition of insanity is quoting the same phrase again and again and not expect despair.
+-+--+
|T|1 |
+-+--+
|h|3 |
+-+--+
|e|8 |
+-+--+
| |15|
+-+--+
|d|4 |
+-+--+
|f|2 |
+-+--+
|i|10|
+-+--+
|n|10|
+-+--+
|t|6 |
+-+--+
|o|4 |
+-+--+
|s|5 |
+-+--+
|a|10|
+-+--+
|y|1 |
+-+--+
|q|1 |
+-+--+
|u|1 |
+-+--+
|g|3 |
+-+--+
|m|1 |
+-+--+
|p|3 |
+-+--+
|r|2 |
+-+--+
|x|1 |
+-+--+
|c|1 |
+-+--+
|.|1 |
+-+--+

C#: 129
This is Avivs answer but shorter:
var s=Console.ReadLine();for(int i=0;i<256;i++){var ch=(char)i;Console.Write(s.Contains(ch)?ch+":"+s.Count(c=>c==ch)+"\r\n":"");}

This is mine:
C#: 103
foreach(var g in Console.ReadLine().OrderBy(o=>o).GroupBy(c=>c))Console.WriteLine(g.Key+":"+g.Count());

Won't compile, need to add about 50 chars for usings/namespace/class/method definitions.

Oh, didn't know that was mandatory, I'm sorry.

Python 2 (90 chars)
import collections as c;print"\n".join("%s %s"%i for i in c.Counter(raw_input()).items())

Output when run on its own source:
  8
" 4
% 3
) 4
( 4
. 3
; 1
C 1
\ 1
_ 1
a 2
c 4
e 3
f 1
i 9
j 1
m 2
l 2
o 6
n 7
p 3
s 5
r 5
u 2
t 6
w 1

GolfScript 30 27
:x.|{.{=}+x\,,`': '\n]''+}/

Explanation:
:x #Assign the input string to a variable x
.| #Copy the input string, and then OR it with itself to get the unique characters

Now, for each distinct character, we will perform the {.{=}+x\,,``': '\n]''+} block.  For example, for the first iteration, the character will be 'T'.
.{=}+ #Generate the equality checking block.  {'T'=} is left on the stack
x #Put the input string on the stack.
\ #Flip the top elements  So the stack is now the input strick followed by the equality checking block.
, #Filter the input string by the equality checking block.
, #Count the number of equal characters.
`': '\n #Format the string and add a newline character
] #Collect the elements into an array
''+ #Convert the array into a string

How do I put a single grave accent ` in a code block?

newLISP - 76 characters
(bayes-train(explode(read-line))'D)(map(fn(f)(println(f 0) ": "(f 1 0)))(D))

Reads from keyboard, builds a Bayes-trained context namespace, then outputs entries. It's hard to golf with the handicap of readable function names... :)

Scala, 64 chars
readLine.groupBy(y=>y).foreach(g=>println(g._1+" : "+g._2.size))

J, 17 bytes
(Outputs the result exactly in the expected format.)
({.,': ',".@#)/.~

Example:
      (({.,': ',":@#)/.~) 'The definition of insanity is quoting the same phrase again and again and not expect despair.'
T: 1
h: 3
e: 8
...

Shorter alternatives:
9 bytes:
  ({.;#)/.~

  (({.;#)/.~) 'The definition of insanity is quoting the same phrase again and again and not expect despair.'
┌─┬──┐
│T│1 │
├─┼──┤
│h│3 │
├─┼──┤
│e│8 │
...

7 bytes:
      ~.;#/.~

      (~.;#/.~)'The definition of insanity is quoting the same phrase again and again and not expect despair.'
┌──────────────────────┬───────────────────────────────────────────────┐
│The dfintosayqugmprxc.│1 3 8 15 4 2 10 10 6 4 5 10 1 1 1 3 1 3 2 1 1 1│
└──────────────────────┴───────────────────────────────────────────────┘

Here the output is a list of characters (i.e. string) and a list of occurrences of the corresponding characters.

You could try to laminate maybe.

@FUZxxl Where? I have different types so I would have to format the numbers first.

Indeed. Doesn't make it any shorter. I thought about something along the lines of ~.,&<"0#/.~ but that's too long.

Pascal (FPC), 145 bytes
var c:char;a:array[0..255]of word;i:word;begin repeat read(c);Inc(a[ord(c)])until eof;for i:=0to 255do if a[i]>0then writeln(chr(i),':',a[i])end.

Try it online!

It should be mentioned that a needs to be initialized with zeros. By definition variables of “unmanaged” data types are uninitialized. You make use of the zero-initialization as common in modern multi-user operating systems, which prevents data leaks between users/processes.

This is code golf, where the normal rules of programming go out the window, in the quest to find the golfiest solution. Compiler warnings and whatnot do not matter :)

SuperMarioLang, 449 bytes
     >++++)
    >^====+  (+++<
>,[!^= (< +======"          *-<
"==#=  =" +      )      ======"
   >%+>[!%+      )         >&[!
   "====# +            )   "==#=====================
!        <>+++(-[!))+(%> [!!
#================#====="==##
                          >          (((++*)+*)&+)[!
                          "========================#
                       !)*-&)*-&)*-&)*-&.(((:)).(.(<
                       #==========================="

Try it online!

Stax, 5 bytes
═#8¼K

Run and debug it

Python, 46 bytes
s=input()
for c in{*s}:print(c,":",s.count(c))

Attempt it Online!

Hi there, welcome to code golf! I've just added a link to ATO, a site where you can run programs from the browser. Nice first answer!

Pip -S, 16 bytes
{[a':aNy]}MUQ Yq

Attempt This Online!
Explanation
{[a':aNy]}MUQ Yq
               q  ; Read a line of stdin
              Y   ; Yank it into the global variable y
           UQ     ; Remove duplicates
{        }M       ; Map this function to each character:
 [      ]         ;  Return a list containing:
  a               ;   The character
   ':             ;   A colon
     aNy          ;   The number of times the character appears in y
                  ; The result is a list of lists; the -S flag joins each sublist
                  ; on spaces and then joins the whole thing on newlines before
                  ; printing it

With looser I/O requirements, this could be 12 bytes:
_AE(_Na)MUQa

Attempt This Online!

JavaScript, 80
  // 80
  t=prompt(n={});for(i=0;c=t[i++];)n[c]=-~n[c];for(k in n)console.log(k+': '+n[k])

  // 47 - wrong format, no prompt
  for(i in a=t.split('').sort())console.log(a[i])

Smalltalk, 71
Stdin nextLine asBag valuesAndCountsDo:[:c :n|(c,' : ')print.n printNL]

Swift 3: 122 120 118 chars
_=readLine()!.characters.reduce([Character:Int]()){var r=$0;r[$1]=($0[$1] ?? 0)+1;return r}.map{print("\($0): \($1)")}

After running, it waits for user input.
Input

The definition of insanity is quoting the same phrase again and again and not expect despair.

Result
p: 3
n: 10
.: 1
f: 2
o: 4
u: 1
q: 1
d: 4
t: 6
x: 1
a: 10
i: 10
T: 1
m: 1
r: 2
c: 1
s: 5
e: 8
 : 15
g: 3
y: 1
h: 3

Explanation

_= is necessary otherwise you'll get a warning: result of call to 'map' is unused
removing whitespace from ($0[$1] ?? 0) will result in an error, because swift recognizes ? as an optional chaining operator.

Thanks to @ais523 for pointing out that there are too many whitespace characters left

I don't know the language, but are all those spaces in the source necessary? In most languages, it's possible to get some easy improvements to your score by removing whitespace (and when it isn't, it can help to give an explanation of why it's necessary).

whoops, in my previous edit I removed 2 bytes from the score but somehow i did not remove them from my code. thanks for pointing out

Tcl, 77 bytes
lmap c [split [gets stdin] ""] {dict inc D $c}
dict ma k\ v $D {puts $k:\ $v}

Try it online!

C (gcc), 115 109 bytes
-6 bytes from @ceilingcat
a[256];main(c,v)char**v;{for(;--c;)for(;*v[c];)a[*v[c]++]++;for(;c<256;)a[++c]&&printf("%c :  %d\n",c,a[c]);}

Try it online!
Takes input as command line argument.

Japt, 12 bytes
q
â ®+S+Uè¥Z

Try it online!
Explanation:
q
â ®+S+Uè¥Z
            | Set U to:
q           |   Input, split into an array of chars
â           | Return all unique items in U
  ®         | Map through the items; Z = iterative item
   +S+      |   Z + " " +
      Uè¥Z  |   Number of times where Z appears in U

10 bytes

Python 3, 46 bytes
i=input()
for c in{*i}:print(c,':',i.count(c))

Try it online!

Add++, 35 bytes
D,g,@@#,€=b+": "$J
D,f,@,qdA€gBcBJn

Try it online!
Defines a function f, which takes the input as an argument, and returns the complete formatted string.
Explanation
D,g,		; Define a helper function, g
	@@#,	;   that takes 2 arguments		Stack: ['l' 'Hello World']
	€=	; Compare each letter to argument	Stack: [[0 0 1 1 0 0 0 0 0 1 0]]
	b+	; Sum					Stack: [3]
	": "$	; Prepend ': '				Stack: [': ' 3]
	J	; Join together				Stack: [': 3']
		; Return: ': 3'

D,f,		; Define a main function, f
	@,	;   that takes 1 argument		Stack: ['Hello World']
	qd	; Push two copies of unique letters	Stack: [['H' 'e' 'l' 'o' ' ' 'W' 'r' 'd'] ['H' 'e' 'l' 'o' ' ' 'W' 'r' 'd']]
	A	; Push the argument			Stack: [['H' 'e' 'l' 'o' ' ' 'W' 'r' 'd'] ['H' 'e' 'l' 'o' ' ' 'W' 'r' 'd'] 'Hello World']
	€g	; Apply g to each unique letter		Stack: [['H' 'e' 'l' 'o' ' ' 'W' 'r' 'd'] [': 1' ': 1' ': 3' ': 2' ': 1' ': 1' ': 1' ': 1']]
	Bc	; Zip together				Stack: [['H' ': 1'] ['e' ': 1'] ['l' ': 3'] ['o' ': 2'] [' ' ': 1'] ['W' ': 1'] ['r' ': 1'] ['d' ': 1']]
	BJn	; Join all togther, then with newlines
		; Return the full string

Oracle SQL, 103 bytes
select substr(x,level,1),count(*)from t connect by level<=length(x)group by substr(x,level,1)order by 1

Test in SQL*PLus
SQL> set pages 100
SQL> set heading off
SQL> with t(x) as (select 'The definition of insanity is quoting the same phrase again and again and not expect despair.' from dual)
  2  select substr(x,level,1),count(*)from t connect by level<=length(x)group by substr(x,level,1)order by 1
  3  /

              15
    .          1
    T          1
    a         10
    c          1
    d          4
    e          8
    f          2
    g          3
    h          3
    i         10
    m          1
    n         10
    o          4
    p          3
    q          1
    r          2
    s          5
    t          6
    u          1
    x          1
    y          1

    22 rows selected.

Pip, 48 bytes
a:qFi32,128{b:0Fj,#a{a@jQ Ci?++bx}b?P Ci.":".bx}

I assume you meant printable ascii
Try it online!

Julia 1.0, 53 bytes
s=readline()
Set(s).|>c->println(c,": ",sum(==(c),s))

Try it online!

Stax (31 bytes)
âpWhuÉñ♫∩Ω╝YT>ⁿë╘Æ↨»╧óPÜ≤♪Ñû1♫à

Try it online here:
https://staxlang.xyz/#p=837057687590a40eefeabc59543efc89d49217afcfa2509af30da596310e85&a=1
It has some limitations.  No uppercase letters, and it shows all letters, even if they have zero occurences
Unpacked version:
0]6{c+}*,""/{|3b@^&FVw""/{[cp':p|3@PF
^a      ^b  ^c      ^d

Section A prepares a list to put the values in.  Section B Gets user input.
Section C counts letters, and section D outputs the result

Welcome! This does not meet the challenge's specifications. You need to support uppercase and symbols, and you should not show all characters. Your solution must work as shown in the example. It also gives the wrong answer, because it shows w:15, but the sample input has no w.

JavaScript (Node.js), 64 bytes
e=>(d={},e.replace(/\S/g,e=>d[e]=d[e]+1||1),[Object.entries(d)])

Try it online!
JavaScript (Node.js), 59 bytes
e=>(d={},[...e].map(e=>d[e]=d[e]+1||1),[Object.entries(d)])

Try it online!

Hello, and welcome to PPCG! You seem to be used to our things :) Even though, don't hesitate to keep only one answer, or to tell us why you are keeping both. Happy golfing!

Japt -R, 9 bytes
ü ®Î+S+Zl

Try it

Vyxal, 11 bytes
Ċ⟑`%: %`$%,

Try it Online!

Excel, 78 bytes
=LET(c,CHAR(ROW(1:255)),q,LEN(A1)-LEN(SUBSTITUTE(A1,c,)),FILTER(c&": "&q,q>0))

Input is in cell A1. Output is wherever the formula is.

LET(~) stores values as variables that can be referenced later. The last term is the output.
c,CHAR(ROW(1:255)) stores the extended ASCII table as c.
q,LEN(A1)-LEN(SUBSTITUTE(A1,c,)) stores a list q of how much shorter the input would be if you removed each ASCII character in turn.
FILTER(c&": "&q,q>0) combines c and q into the desired output format and then filters the list to just show those that actually appear in the input.

PowerShell Core, 42 bytes
$input|% t*y|group|%{$_.Name+":"+$_.Count}

Try it online!
Converts the input into an array of characters
Group them and builds a string like <char>:<count> for each of them

Arturo, 41 bytes
loop tally input""[x,y]->print~"|x|: |y|"

JavaScript (Node.js), 50 bytes
Heavily inspired by @Shaggy 's work.

Would be 34 bytes if it were acceptable to have an unwanted string [Function: g] contained in the output ( by having &&g at the end instead of &&Object.entries(g) ).
s=>[...s].map(g=c=>g[c]=-~g[c])&&Object.entries(g)

Try it online!

05AB1E, 10 bytes
ÙvyD¹s¢‚})

Try it online!

The definition of insanity is quoting the same phrase again and again
and not expect despair.

[['T', 1], ['h', 3], ['e', 8], [' ', 15], ['d', 4], ['f', 2], ['i', 10], ['n', 10], ['t', 6], ['o', 4], ['s', 5], ['a', 10], ['y', 1], ['q', 1], ['u', 1], ['g', 3], ['m', 1], ['p', 3], ['r', 2], ['x', 1], ['c', 1], ['.', 1]]

7 bytes: SÙDŠ¢‚ø
12 bytes: SÙDŠ¢‚ø„: ý» (provided that the result needs to be displayed according to the challenge specifications)

@Kaldo 80% sure this answer was before we had zip even hah! Will update.

Factor, 47 bytes
readln histogram [ "%c %d\n"printf ] assoc-each

Try it online!

Pascal, 208 B
See also Free Pascal.
This is a complete program according to ISO standard 10206 “Extended Pascal” though.
Note, this program does not count newlines.
The variable input possesses the built-in data type text, which automatically converts any newline indicator (sometimes it’s CR, sometimes LF, sometimes CR+LF, other times something completely differently) into a single space character (' ').
In order to distinguish between a space character as part/payload of a line vs. a space character terminating a line you’ll have to query EOLn.
program p(input,output);var c:char;s:array[char]of integer value[otherwise 0];begin while not EOF do begin read(c);s[c]:=s[c]+ord(not EOLn)end;for c:=chr(0)to maxChar do if 0<s[c]then writeLn(c:2,s[c]:9)end.

Ungolfed and annotated version:
program characterCount(input, output);
    var
        c: char;
        spreadsheet: array[char] of integer value [otherwise 0];
    begin
        { `EOF` is shorthand for `EOF(input)`. }
        while not EOF do
        begin
            { `read(c)` is shorthand for `read(input, c)`. }
            read(c);
            { If we are `read`ing from a `text` file like `input`,
              newlines are converted to a single space character.
              This is avoiding the drama of LF vs. CR vs. CR+LF.
              Therefore we’ll need to check `EOLn` so we aren’t
              counting line-terminating spaces (the value of `c`). }
            spreadsheet[c] := spreadsheet[c] + ord(not EOLn)
        end;

        { Note, in Pascal `for`-loop limits are inclusive.
          The constant `maxChar` is introduced in Extended Pascal. }
        for c := chr(0) to maxChar do
        begin
            if 0 < spreadsheet[c] then
            begin
                writeLn(c:2, spreadsheet[c]:9)
            end
        end
    end.

See also RosettaCode’s Letter frequency task.

147 bytes: var c:char;s:array[char]of word;begin fillChar(s,512,0);repeat read(c);inc(s[c]);until EOF;for c:=#0to #255do if 0<s[c]then writeLn(c:2,s[c]:9)end.

@tsh I think you meant to post this to the linked FreePascal answer. My answer concerns Pascal as defined by ISO standards.

I'm not sure what ISO standard mean. I believe it also works with Turbo Pascal although I didn't test it...

Thunno 2 N, 4 bytes
ƈıðj

Attempt This Online!
Uses   as the separator, like a lot of the other answers.
Thunno 2 N, 6 bytes
ƈı`: j

Attempt This Online!
Uses :  as the separator, like the challenge asks.
Explanation
ƈıðj  # Implicit input
ƈ     # Produce a list of [item, count] pairs for
      # each unique character in the input string
 ı    # Map over this list of pairs:
  ðj  #  Join the pair by a space
      # Implicit output, joined by newlines

ƈı`: j  # Implicit input
ƈı      # As above
  `: j  #  Join the pair by ": "
        # Implicit output, joined by newlines

Vyxal j, 20 bitsv1, 2.5 bytes
ĊvṄ

Try it Online!
Given that any character can be used, I figured I'd add an answer that doesn't have strict IO.
Explained
ĊvṄ
Ċ   # Counts of characters
 vṄ # each joined on spaces

Clojure, 54 bytes
(doseq[[k v](frequencies(read-line))](println k": "v))

Try it online!

all_licenses: Creative Commons - Attribution Share-Alike - https://creativecommons.org/licenses/by-sa/3.0/


text:
Fibonacci distribution validator

Related: Hello world!!! Fibonacci distribution

Create a program that returns True if a given input meets the following specifications, and False otherwise:

The count of numeric characters (0-9) in the input matches a Fibonacci number.
The count of non-numeric characters !(0-9) in the input matches the Fibonacci number immediately preceding the count of numeric characters.

Additional Rules:

Your program must use the proper Fibonacci sequence, per OEIS - that is, the Fibonacci sequence must start with 0, 1, 1, 2, ...
If the numerics or non-numerics count is 1, the following must occur:

Numerics 1: Non-numeric count of 0 or 1 should be handled as True - all others False.
Non-Numerics 1: Numerics count of 1 or 2 should be handled as True - all others False.

Input may be taken however you like, but the program must be capable of handling any arbitrary text.
True/False are not case-sensitive, and can be substituted with 1/0 or T/F.
You may only hard-code up to two Fibonacci numbers.
Output may only be True/False or 1/0 or T/F. Any additional text or visible errors generated is unacceptable.

give some example IO

@Subhanker See the linked question for some example True cases.

Relevant wikipedia article: http://en.wikipedia.org/wiki/Fibonacci_number#Recognizing_Fibonacci_numbers

is T/F or T/nil acceptable as well?

Am I right that we can either output or return?

@Quincunx I interpret it as "output". I believe a return value is acceptable.

@JanDvorak I'm honestly not sure which language to use right now, so I'd like to keep my options open. I interpret the same as you.

@Quincrux Output preferably, but since there's already some answers I won't modify the challenge.

@JanDvorak T/F is okay, but I wouldn't be too keen to accept T/nil.

@Iszi T/nil is the standard representation of booleans in Lisp. That's why I'm asking.

"You may only hard-code up to two Fibonacci numbers." - you're changing this rule too often (even one invalidating change counts as too often). Why not drop it entirely?

@JanDvorak That seems to be a rather unique case I'd rather not mess with re-writing a rule (again) for. Sorry. As it is, I've added a fair bit since the start of this challenge already. I'd rather not edit it any more if I can get away with it. I thought this was going to be relatively simple, but perhaps it could have used some time in the Sandbox (AKA: Black Hole of My Ideas).

@JanDvorak The original rule was to not hard-code Fibonacci numbers at all, which is a rather general statement of the rule's intent. However, some people (yourself included) took it a bit too literally and started writing disclaimers like "well, I had to hard-code a couple..." into their answers. I modified it to allow for the first two, because those are the bare essentials needed to start generation of the sequence. Then someone (oh, that was you again) requested a generalization of the rule to allow for the second and third numbers instead...

...I'm done editing that rule. It's now strict enough to serve its purpose while still being just permissive enough to allow programs to be functional - which is how I like my rules to be in general anyway.

You've still invalidated the first revision of my javascript solution. You might just say "you may not hard code the entire fibonacci sequence", but that's hardly beneficial because such sequence would be longer than the generator.

@JanDvorak Your current revision is shorter, and fits the current version of the anti-hard-coding rule. I fail to understand why you would complain about that particular rule at this point.

Ugh, you changed the challenge. Now you say that the fibonacci sequence starts at 0 and give specific cases for 0. The other question that you linked to forbids 0, so I assumed the same.

Javascript, 92 88 86 characters
t=prompt()
for(b=c=1;c<t[l='length'];c=a+b)a=b,b=c
alert(c==t[l]&b==t.match(/\d/g)[l])

I hope you don't mind I've hard-coded the the first three Fibonacci numbers.

Does it handle multiple lines of text?

@Quincunx Chrome lets you copy/paste but not type newlines into the prompt input; haven't tested firefox.

Guess I learn something new every day.

According to OEIS, the first three Fibonacci numbers are 0, 1, 1. In any case, you should only need to hard-code the first two - why did you do three?

@Iszi you are right - a didn't need initialisation. As for why do I start at 1,2,3 - the poster of the initial challenge didn't accept 1 as immediately preceding 1.

@JanDvorak Ah. Well, while the two are related this is indeed a separate challenge. I prefer to go by more proper definitions when dealing with a defined number series.

@Iszi do you mind if I hard-code the second and third fibonacci number instead?

So long as your program can also answer True for the case where the input is a single digit... which brings me to an interesting case I forgot to consider. If your numerics count is 1, then I suppose the program should output True if you have zero non-numerics or 1 non-numeric in the input.

@Iszi but, what about the case I have 1 non-numeric (-1st fibonacci number), 0 numeric (0th fibonacci number) and 1 total (1st fibonacci number) characters?

@JanDvorak Total characters is not a consideration for this program. Only the counts for numeric and non-numeric characters are of any concern. I'll clarify the ones situation in an edit shortly.

Golfscript, 36
:?1 2{.@+.?,<}do?,=@{.48<\58<^},,@=*

Explanation:

:? stores the input into ?.
1 2{.@+.?,<}do computes the last two fibonacci numbers until it hits the input length. The block reads: "duplicate the top, rotate the third value to the top, add them, duplicate the top, get the input, get its length, compare".
?,= compares the last computed fibonacci number to the input length.
@ brings the input to the top
{.48<\58<^}, filters out only digits. The block reads "is the ASCII value below 48 XOR below 58?"
,@= compares the filtered string length to the lower fibonacci number (count of digits)
* merges the two comparisons to provide a single boolean value.

Live demo: http://golfscript.apphb.com/?c=OyIvMDU5OiIKOj8xIDJ7LkArLj8sPH1kbz8sPUB7LjQ4PFw1ODxefSwsQD0q

Python - 128 125
import re
def v(s):
 l=len(re.sub("\d","",s));L=len(s)-l;a,b=1,2
 while a<L:
    if a==l and b==L:
     print 1;return
    b,a=a+b,b
 print 0

Really hope there is no problem with hardcoding the first few fibonacci numbers

Isn't there... too much whitespace?

@JanDvorak those four spaces were all tabs, so they were counted as 1 char per four spaces. I could alternate tabs and spaces, doing that now.

Looks like I should have been a bit more clear about hard-coding the numbers. Of course you'll need to prime the sequence, but you should only need the first two to do it.

Python 3, 105 characters
Script file name is passed to the program through the command line
import sys
a=[0]*2
for b in open(sys.argv[1]).read():a['/'<b<':']+=1
a,b=a
while a>0:a,b=b-a,a
print(b==1)

87 characters
Script must be written in file with name s
a=[0]*2
for b in open('s').read():a['/'<b<':']+=1
a,b=a
while a>0:a,b=b-a,a
print(b==1)

Jelly, 15 14 bytes
ḟ,fɗØDẈẇ⁸LŻÆḞ¤

Try it online!
How it works
ḟ,fɗØDẈẇ⁸LŻÆḞ¤ - Main link. Takes a string S on the left
    ØD         - Yield "0123456789"; D
   ɗ           - Group the previous three atoms together as a dyad, f(S, D):
ḟ              -   Remove digits from S
  f            -   Remove non-digits from S
 ,             -   Pair these two
      Ẉ        - Lengths of each in the pair; [a, b]
             ¤ - Create a nilad:
        ⁸      -   Yield S
         L     -   Take its length, L
          Ż    -   [0, 1, 2, ..., L]
           ÆḞ  -   nth Fibonacci number for each
       ẇ       - Sublist exists?
                 This returns 1 if the left argument ([a, b]) is a contiguous sublist
                 of the right argument (the list of Fib numbers), i.e.
                 a and b are both Fibonacci numbers, and a immediately precedes b

It's funny how I've saved a byte by changing the first portion of my program to what you had in your first iteration, yet you saved a byte by changing the first portion of your program to what I had in my first iteration. xD

@KevinCruijssen Well, different builtins are shorter/better in different languages :P

Ik, ik. It's just funny how we've basically swapped the implementation of our first parts to both save a byte in our languages. ;)

Perl, 92
$_=join"",<>;@_=1;$d=s/\d//g;push@_,$t=$_[-1]+$_[-2]while$t<$d;print$t==$d&$_[-2]==y///c?1:0

Usage:
cat fib-test
print "Hello world%s"%("!"*int(3.141592653589793238462643383279502884197169399375105820))

perl -e '$_=join"",<>;@_=1;$d=s/\d//g;push@_,$t=$_[-1]+$_[-2]while$t<$d;print$t==$d&$_[-2]==y///c?1:0' fib-test
1

Java - 147 145
boolean v(String s){int l=s.replaceAll("\\d","").length(),L=s.length()-l,a=1,b=2,c;while(a<L){if(a==l&&b==L)return 0<1;c=b;b+=a;a=c;}return 0>1;}

I'd say this is not bad for Java.
Edit: Thanks to Chris Hayes for suggesting 0>1 for false and 0<1 for true.

As long as we're using 1==0 to save on characters, you could use 0<1 in place of true, and 0>1 for false.

05AB1E, 15 12 11 bytes
d1Ý¢¤ÅFs.kd

-3 bytes by taking inspiration from @cairdCoinheringaahing's initial Jelly program
-1 byte thanks to @ovs
Input as a list of characters.
Try it online or verify a few more test cases.
Explanation:
d            # Check for each character in the (implicit) input-list if it's a
             # non-negative (>=0) integer (1 if truthy; 0 if falsey)
 1Ý          # Push the list [0,1]
   ¢         # Count them in the list of truthy/falsey results
    ¤        # Push the last count, without popping the pair itself
     ÅF      # Pop and push a list of Fibonacci numbers <= this count
       s     # Swap so the pair is at the top of the stack
        .k   # Get the index of the pair (as sublist) in the Fibonacci list
             # (or -1 if this pair isn't a sublist)
          d  # Check that this index is non-negative (>=0), thus that it was found
             # (after which the result is output implicitly)

Unfortunately the Fibonacci sequence contains two 1s, otherwise we could have saved two bytes by changing s.kd to sÅ¿ (check whether it ends with the pair), which fails for single-digit inputs.

You've still got the 15-byter as your code underneath the header. Also, very nice! 05AB1E's ÅF for sure gives it an advantage over Jelly here

@cairdcoinheringaahing Woops, forgot to replace the code indeed. Thanks for noticing.

You can replace ü2 with Œ (sublists) for -1. And i think d1Ý¢¤ÅFs.kd works as a more efficient 11-byter.

@ovs Ah, the ü2 to Œ is indeed an obvious one. As for the second, I didn't even knew the .k worked that way. I thought it was to get the index of a list in a list of lists, but apparently it also works to get the index of a list (as sublist) in a flattened list. TIL, and thanks for the -1.

APL, 34 chars/bytes*
{n←+/⍵∘.=⍞∊⎕D⋄n≡+\∘⌽⍣{≥/+/⊃⍺n}⍵}⍳2

Expects the input string on standard input and prints either 0 or 1 as required. ⎕IO must be set to 0 (the default is implementation-dependent.)
Ungolfed
s←⍞                ⍝ read input string
d←s∊⎕D             ⍝ vector with 1 for each digit, 0 for each non-digit in s
n←+/0 1∘.=d        ⍝ 2-vector with number of non-digits and number of digits in s
f←+\∘⌽             ⍝ a function that computes a fibonacci step (f 2 3 → 3 5)
t←f⍣{≥/+/⊃⍺n}0 1   ⍝ apply f repeatedly, starting with 0 1, until we get two fibonacci
                   ⍝   terms whose sum is ≥ the length of the input string (sum of n)
n≡t                ⍝ return 1 if the fibonacci terms match the no. of digits and non-digits

Examples
      {n←+/⍵∘.=⍞∊⎕D⋄n≡+\∘⌽⍣{≥/+/⊃⍺n}⍵}⍳2
%~n01234
1
      {n←+/⍵∘.=⍞∊⎕D⋄n≡+\∘⌽⍣{≥/+/⊃⍺n}⍵}⍳2
x'48656C6C6F20776F726C642121'||'!'
1
      {n←+/⍵∘.=⍞∊⎕D⋄n≡+\∘⌽⍣{≥/+/⊃⍺n}⍵}⍳2
[72 101 108 108 111 32 119 111 114 108 100 33 {.}2*]''+
1
      {n←+/⍵∘.=⍞∊⎕D⋄n≡+\∘⌽⍣{≥/+/⊃⍺n}⍵}⍳2
What?12345
0

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL can be written in its own (legacy) single-byte charset that maps APL symbols to the upper 128 byte values. Therefore, for the purpose of scoring, a program of N chars that only uses ASCII characters and APL symbols can be considered to be N bytes long.

Husk, 23 21 19 18 16 bytes
Edit: -1 byte, then -2 more bytes, thanks to Razetime
€↑→L¹İfe#€ṁsŀ9¹L

Try it online!
€↑→L¹İfe#€ṁsŀ9¹L
€                       # index of argument in list, if found, otherwise 0,
 ↑                      # list: the first n elements
  →L¹                   # n = length of input +1
     İf                 # of the list of fibonacci numbers
       e                # argument: 2-element list
        #               # 1. number of elements in input that are
         €    ¹         # present in list of
          ṁsŀ9          # string from 0 to 9
               L        # 2. length of input

-1 byte by changing '0'9

Great!  Thanks!  '0'9 did seem very clunky!

Does removing the compositions work correctly? Try it online!

@Razetime Indeed, it seems to work fine.  Thanks!  I'm surprised it works, but I guess that (by luck in this case) the argument types don't allow ambiguous interpretation...

K (ngn/k), 46 40 38 32 bytes

-12 bytes from golfing, -2 from @ngn's improvements

{~^(|+\)\[#x;|!2]?+/'~:\~"0:"'x}

Try it online!

~"0:"'x determine which characters in the input are digits
+/'~:\ count the number of digits and non-digits
~^(...)[...]? determine if the above is in...

(|+\)\[#x;|!2] the pairs of fibonacci numbers

Ruby, 85
d=-(n=(i=$<.read).gsub(/\d/,'').size)+i.size
a=b=1;while b<d;b=a+a=b end;p b==d&&a==n

Takes input either on STDIN or as a filename argument.
Output is either "true" or "false".

Japt v2.0a0, 20 bytes
Êô@MgXÃã de[\D\d]£èX

Try it (Test cases appropriated from caird)