text:
Sort a concatenated sequence
Consider a sequence based on recurrence relations, f(n) = f(n-1)+f(n-2), starting with f(1) = x1, f(2) = x2. For x1 = 2, x2 = 1, the sequence begins like this:
2  1  3  4  7  11  18  29  47  76  123  199  322  521  843

Concatenating this into a string will give:
213471118294776123199322521843

Now, divide this list into the smallest possible numbers that gives y(n) > y(n-1). Start with the first number, then the second etc. The first output number should always be a single digit. Pad the last number with the required number of zeros.
2 13 47 111 829 4776 12319 93225 218430

You will get two numbers, (x1, x2) as input, on any convenient format, and the challenge is to output the sorted list.
Rules:

Function and programs are OK
The initial sequence shall have exactly 15 numbers (The last number is f(15)).
x1 and x2 are non-negative (zero is possible).
The output can be on any convenient format
The output vector y must be created so that y2 > y1.

First the smallest possible y1, then the smallest possible y2, then y3 and so on.

If x1 = x2 = 0 then output 15 zeros (on the same format as other output, i.e. not 000000000000000).

Examples:
Input: 1 1
Output: 1  12  35  81  321  345  589  1442  3337 7610

Input: 3 2
Output: 3  25  71  219  315  0811 3121  23435 55898 145300
                             |
                             Optional leading zero
Input: 0 0
Output: 0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

The shortest code in bytes wins. Please include a link to an online interpreter if possible.

What exactly do you mean by "smallest possible numbers"? Smallest average? Smallest maximum? Something else?

@isaacg So as the nth number is greater than (n-1)th.

The smallest individual numbers. I.e. you can't take the trivial solution with only two numbers: (2,  13471118294776123199322521843). I'll explain it better.

To clarify my question, what would the proper division of 5467 be? 54 67? 5 46 70?

Related but slightly different

@Sp3000, I haven't seen that one. Yes, that's definitely related.

@isaacg, if those are the only numbers in the sequence: 5 46 70.

How are those the smallest numbers? 67<70. The other question asked for the most separate output numbers, for comparison.

@isaacg, I've clarified it a bit in the challenge. Find the smallest possible y1, then the smallest possible y2, then the smallest y3 that makes y1 < y2 < y3. Does it make sense or is it still unclear?

@nicael, you're right. Fixed!

Is it fine if my function produces more numbers than shown in your example?

So the only case when y1 <= y2 <= y3 is when x1 == x2 == 0?

@edc65, yes it is.

The 0 thing seems like a rather annoying and unnecessary exception.

@StewieGriffin That's much better, thank you.

Pyth, 56 bytes
LsgM.:sMb2?sQsM.WyHX_1Z`0u?yGX_1GHaGHjkhM.u,eNsN14QYmZ15

Test suite
Explanation:
First, we check whether the input is precisely 0, 0. If so, print 15 zeros.
Otherwise, we produce the sequence, with jkhM.u,eNsN14Q. This is similar to the standard Pyth algorithm for the Fibonacci sequence.
Next, we reduce over this string. The accumulator is a list of strings, representing each number in the divided sequence. At each reduction step, we take the next character, and check whether the accumulator is in order, using the helper function y, defined with LsgM.:sMb2, which is truthy iff the input is out of order. If it is in order, we append the next character to the list as its own number. If not, we add the next character to the end of last string. This is accomplished with u?yGX_1GHaGH ... Y.
Next, we perform a functional while loop. The loop continues until the running list is in order, reusing the helper function. At each step, a 0 is added to the end of the last string in the list. This is accomplished with .WyHX_1Z`0.
Finally, the strings are converted to integers, with sM, and printed.

Pyth, 51 bytes
LsgM.:sMb2?sQsM.WyHX_1Z`0hf!yT_./jkhM.u,eNsN14QmZ15

I believe this works, but it is far too slow to test - it's a brute force solution for dividing the string.

I will be making some improvements to the X function, but the above code works in the version of Pyth that was most recent when the question was posted.

JavaScript ES6, 127 135
(a,b)=>eval("for(n=r=[],v=13,o=a+n+b;v--;a=b,b=t)o+=t=b+a;for(d of o+'0'.repeat(99))(n+=d)>+v&&(r.push(v=n),n='');+v?r:[...o]")

Test

F=(a,b)=>eval("for(n=r=[],v=13,o=a+n+b;v--;a=b,b=t)o+=t=b+a;for(d of o+'0'.repeat(99))(n+=d)>+v&&(r.push(v=n),n='');+v?r:[...o]")

// less golfed

U=(a,b)=>{
  for(n=r=[], o=a+n+b, v=13; v--; a=b, b=t)
    o+= t= b+a;
  for(d of o+'0'.repeat(99))
    if ((n+=d) > +v)
      r.push(v=n), n='';
  return +v ? r : [...o]
}

function test(){
  var i = I.value.match(/\d+/g)
  O.textContent = i.length > 1 ? F(+i[0],+i[1]) : ''
}
test()
A,B : <input id=I value='0 1' oninput='test()'>

There is an error for x1=0, x2>0, e.g. input "0 1".

@flornquake fixed. The byte count remains the same, having reduced a little the zero filling code

JavaScript ES6, 187 180 187 184 182 179 175 172 165 160 155 154 bytes
(a,b)=>eval('d=""+a+b;for(i=-12,j=1;++i<99;)i<2?(c=b,d+=b=a+b,a=c,r=a?[d[0]]:"0,".repeat(15)):(f=+d.slice(j,i))>r[r.length-1]?(r.push(f),j=++i-1):d+=0;r')

I get similar results when run it for 1,1 and 3,2 test cases. 0,0 has taken an excess 26 bytes...
De-golf + converted to ES5 + demo:

function s(a, b) {
  d = "" + a + b;
  for (i = -12, j = 1; ++i < 99;)
    i < 2 ?
      (c = b, d += b = a + b, a = c, r = a ? [d[0]] : "0,".repeat(15))
    : (f = +d.slice(j, i)) > r[r.length - 1] ?
      (r.push(f), j = ++i - 1)
      : d += 0;
  return r
}
document.write(
   s(1,1)+"
"+
   s(3,2)+"
"+
   s(0,0)
)

Why does it produce more numbers? And shouldn't it be easy to fix? The requirement is n <= 15.

@Stewie But hey, the first produces 12 and the second 11. That's smaller than 15.

The initial sequence f(n) = f(n-1)+f(n-2) has a max value of exactly 15. The number of output values are determined based on the algorithm, nothing else.

@Stewie ok, so it must be exactly 15, right? Then, by n<=15 you mean that the input numbers are less than 15?

The number of values in the initial sequence is 15. The starting values f(1)=x1 and f(2)=x2 can be higher than 15. The number of output values is determined based on the input values. For 3 2 it will be 10.

@nimi that was actually a test condition, trying to figure out what I was going to put there.

@nimi for now replacing it with 99, because can't find any problem with the algorithm.

JavaScript (ES6), 162 bytes
(a,b)=>(k=[...Array(15).keys(y="")],p=-1,z=k.map(_=>0),a|b?[...k.map(f=n=>n--?n?f(n)+f(n-1):b:a).join``,...z].map(d=>+(y+=d)>p?(p=y,y=" ",p):"").join``:z.join` `)

Explanation
(a,b)=>(
  k=[...Array(15).keys(y="")],     // k = array of numbers 0 to 14, initialise y
  p=-1,                            // initialise p to -1 so that 0 is greater than p
  z=k.map(_=>0),                   // z = array of 15 zeroes
  a|b?[                            // if a and b are not 0
      ...k.map                     // for range 0 to 14
      (f=n=>n--?n?f(n)+f(n-1):b:a) // recursive sequence function (0 indexed)
      .join``,                     // join result of f(0) to f(14) as a string
      ...z                         // append zeroes for padding
    ].map(d=>                      // for each digit of concatenated result
      +(y+=d)                      // append the digit to the current number y
      >p?(                         // if the current number is greater than the previous p
        p=y,                       // set previous to the current number
        y=" ",                     // reset y (with space as a separator)
        p                          // output the current number (with space at the start)
      ):""                         // else add nothing to the output
    )
    .join``                        // return the output as a string
  :z.join` `                       // return a bunch of zeroes if a and b are 0
)

Test

var solution = (a,b)=>(k=[...Array(15).keys(y="")],p=-1,z=k.map(_=>0),a|b?[...k.map(f=n=>n--?n?f(n)+f(n-1):b:a).join``,...z].map(d=>+(y+=d)>p?(p=y,y=" ",p):"").join``:z.join` `)
x1 = <input type="number" id="x1" value="3" />

x2 = <input type="number" id="x2" value="2" />

<button onclick="result.textContent=solution(+x1.value,+x2.value)">Go</button>

Haskell, 165 159 152 142 141 bytes
w=take 15
x#y=x:scanl(+)y(x#y)
0%0=w[0,0..]
x%y=g(-1)(w(x#y)++0%0>>=show)(-1)
g _""_=[]
g b l@(h:t)a|b>a=b:g 0l b|1<2=g(max 0b*10+read[h])t a

Usage example: 3 % 2 -> [3,25,71,219,315,811,3121,23435,55898,145300].
Online demo (with a main wrapper).
How it works:
w=take 15
x#y=x:scanl(+)y(x#y)              -- fibonacci sequence generator for x and y

0%0=w[0,0..]                      -- special case 0%0
x%y=g(-1)(w(x#y)++0%0>>=show)(-1) -- calculate fib sequence, add some extra 0 and
                                  -- flatten all digits into a single string.
                                  -- start calculating the resulting sequence

g _""_=[]                         -- if we don't have digits left, stop.
                                  -- the final 0 in the second parameter is ignored.
g b l@(h:t)a
  |b>a=b:g 0l b                   -- if the current number is greater than the
                                  -- previous one, take it and start over.
  |1<2=g(max 0b*10+read[h])t a    -- otherwise add the next digit and retry.
                                  -- The "max" fixes the initial call with -1.

Mathematica, 192 bytes
f[{0,0}]:=0~Table~15
f@l_:=(t=0;q={};If[#>0,q~Join~{10^⌈Log10[t/#]⌉#},q]&[Last@#]&@FoldList[If[#>t,AppendTo[q,t=#];0,#]&[10#+#2]&,0,Flatten@IntegerDigits@SequenceFoldList[#+#2&,l,Range@13]])

Test cases:
f[{2, 1}]
(* {2, 13, 47, 111, 829, 4776, 12319, 93225, 218430} *)
f[{3, 2}]
(* {3, 25, 71, 219, 315, 811, 3121, 23435, 55898, 145300} *)
f[{0, 0}]
(* {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} *)

The lengths of the function names are killing me.

K (ngn/k), 61 bytes
(|/<':){@[x;t-1;(0^x t)+10*]_t:1+*&~0>':x}/.',/$13{x,+/-2#x}/

Try it online!

.',/$13{x,+/-2#x}/ builds the sequence, converting it into a list of (integer) digits
(|/<':) is used as the while condition, causing iteration to continue so long as there is any number in the list smaller than its predecessor
t:1+*&~0>':x identifies the index immediately after the first value less than or equal to its predecessor
@[x;t-1;(0^x t)+10*] is used to merge numbers in the list together; e.g. 1 2 becomes 12 2. Since indexing a list out of bounds returns a null, we zero-fill with 0^. This handles the last iteration, where we may need to append additional 0's
@[...]_t removes the "leftover" value at index t from the left-hand-side list (e.g. 12 2 becomes 12)

PowerShell, 167 166 bytes
param($x,$w)if($w-lt($x-eq0)){"0`n"*15;exit}[char[]]("$x"+-join(0..13|%{$w;$w=$x+($x=$w)}))|%{$z+="$_";if(+$z-gt$y){($y=$z);$z=""}};if($z){while(+$z-lt$y){$z+="0"}$z}

Saved a byte by eliminating the $s variable and just feeding the output loop directly.
Ungolfed and commented:
param($x,$w)           # Take input parameters as x and w
if($w-lt($x-eq0)){     # If x=0, ($x-eq0)=1, so $w-lt1 implies w=0 as well
  "0`n"*15             # Print out 15 0's separated by newlines
  exit                 # And exit program
}                      # otherwise ...
[char[]](              # Construct the sequence string as a char-array
"$x"+-join(            # Starting with x and concatenated with a joined array
  0..13|%{             # Loop
    $w                 # Add on w
    $w=$x+($x=$w)      # Recalculate for next loop iteration
  }
))|%{                  # Feed our sequence as a char-array into a loop
  $z+="$_"             # z is our output number, starts with the first digit
  if(+$z-gt$y){        # If z is bigger than y (initialized to 0)
    ($y=$z)            # Set y equal to z and print it
    $z=""              # Reset z to nothing to start building the next number
  }
}
if($z){                # If there is remaining digits, we need to pad zeroes
  while(+$z-lt$y){     # Until z is bigger than y
    $z+="0"            # Tack on a zero
  }
  $z                   # Print the final number
}

Perl 6, 107 bytes
{$_=@=(|@_,*+*...*)[^15].join.comb;.sum??[.shift,{last if !@$_;until (my$a~=.shift//0)>$^b {};$a}...*]!!$_} # 107

Usage:
# give it a lexical name for ease of use
my &code = {...}

# use ｢eager｣ because the anonymous block returns a lazy array
# and ｢say｣ doesn't ask it to generate the values
say eager code 2, 1;
# [2 13 47 111 829 4776 12319 93225 218430]
say eager code 1, 1;
# [1 12 35 81 321 345 589 1442 3337 7610]
say eager code 3, 2;
# [3 25 71 219 315 0811 3121 23435 55898 145300]
say eager code 0, 0;
# [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
say eager code 0, 1;
# [0 1 12 35 81 321 345 589 1442 3337 7000]

Explanation
creates a Fibonacci like sequence, starting with the arguments (@_) slipped (|) in
|@_,*+*...*

takes the first 15 elements of that sequence
(…)[^15]

combines that into a single string (.join), splits it into a sequence of individual characters (.comb) and stores that in the "default" scalar ($_) after coercing the sequence into a mutable array, by first storing it in an anonymous array (@)
$_=@=(…)[^15].join.comb;

it finds the sum of the values in the default scalar, and if that is zero returns the default scalar, which will contain an array of 15 zeros
.sum?? … !!$_

if the sum isn't zero, it creates a list by first shifting off the first element in the default scalar
.shift, …

followed by generating the rest of the values, checking it against the previous one ($^b)
if the default scalar runs out of values, use 0 instead (//0)
…,{ … ;until (my$a~=.shift//0)>$^b {};$a}...*

stopping when there is no elements left in the default scalar
…,{last if !@$_; … }...*

why must there be a space in until (my$a...? Is ( not a special delimiter?

@cat that would be a call to the subroutine named until, which does not exist.

Jelly, 39 bytes
-.ị
ÇSṭƊ13¡DFŒṖḌ<ƝṖẠƊƇḢṪ×⁵ṭƲÇ>/$¿µṁS?15

Try it online!
This is unbelievably inefficient, both time-wise and memory-wise. You can see it in action for up to \$f(11)\$ on TIO,  but it times out if you include up to \$f(15)\$.  Luckily, the run time does not heavily depend on the input, so is generally constant. However, Python will usually error due to memory restrictions
How it works
This works by generating all partitions of the digits of the sequence and keeping those which are strictly ascending, ignoring the last element. Due to the way Jelly generates the partitions of a list, this yields the intended array as the first such partition.
-.ị - Helper link. Takes an array, A, on the left
-.  - Yield -0.5
  ị - Take the -0.5th element of A, which returns the last 2 elements

ÇSṭƊ13¡DFŒṖḌ<ƝṖẠƊƇḢṪ×⁵ṭƲÇ>/$¿µṁS?15 - Main link. Takes [a,b] on the left
                                ?   - If statement:
                               S    -   Condition: sum (i.e. a ≠ 0, b ≠ 0)
                             µ      -   If:
   Ɗ                                -     Define a monad f(A):
Ç                                   -       Take the last two elements of A
 S                                  -       Take their sum
  ṭ                                 -       Tack the sum to the end of A
    13¡                             -     Repeat f(A) 13 times, starting with A = [a, b]
       D                            -     Convert to digits
        F                           -     Flatten into an array, D
         ŒṖ                         -     Yield all partitions of D
           Ḍ                        -     Convert arrays back to decimals
                Ɗ                   -     Define a monad g(A):
             Ɲ                      -       Over overlapping pairs of A:
            <                       -         Is less than?
              Ṗ                     -       Remove the last
               Ạ                    -       All true?
                 Ƈ                  -     Keep the partitions which are true under g(A)
                  Ḣ                 -     Take the first one, P
                            ¿       -     While loop:
                           $        -       Condition:
                        Ç           -         Last 2 elements of P
                         >/         -         First is greater than the second
                       Ʋ            -       Body:
                   Ṫ                -         Last element of P
                    ×⁵              -         Times 10
                      ṭ             -         Tack to the end of P
                              ṁ  15 -   Else: Repeat to length 15

Stax, 53 52 bytes
Ü⌐↓├¶cRU!>πf_╙ⁿεd╔╘≥↔IQ┘┼▐↓▒Φ╙ε☺ÉL╚Jö┤Å☺╠╓§j╨áuf░╢A╬

Run and debug it
Not too well optimized, can probably be shortened a lot.
However, pretty proud that I managed to make it work for all the testcases.
It uses the X and Y registers to store previous values while comparing them in the loop, then pushes X to stack when the Y is greater than it.


text:
Make a Frogger Solver

You must make the shortest program to always find the optimal solution to a simplified Frogger game on a 9x9 grid.
Course Elements:

L - Log (Length: 3-4). When you hop on a log, it carries you with it.
V - Vehicle (Length: 1-2)
Speed (1-2): On the left hand side of the row will be the speed that elements in the row move.
Spaces: There will always be at least two spaces between elements.
Direction: In both the Vehicle and the Log sections, the direction of movement in each lane alternates between left and right.

Course Structure:

If it's capital, it goes right; if it's lowercase, it goes left. All elements in a row go the same direction. As soon as part of an element goes off the screen, it will appear on the opposite side of the screen.
The first row is a safe zone. The frog starts at F, which is always the same spot.
The next 3 rows are roads with Vehicles.
The next row is a safe zone.
The next 3 rows are water (touching water == death) with Logs.
Once you reach the W lane you win.
If the frog dies it goes back to F

Player Controls:

L - Left
R - Right
U - Up
D - Down
W - Wait

After you move, another frame passes. (Note that the frame passes after your move, not at the same time as your move.) Your program must give the optimal solution as a sequence of characters such as URWUUL. If a course has no solution, your program should output N.
Examples: (Since I did these by hand I don't know if they are optimal solutions.)
0WWWWWWWWW
1  lll
2  LLLL
2  llll
0
1  vv  vv
1  V  V
1   vv
0    F
Solution: WUWUUURWUULWUU
0WWWWWWWWW
2   lll
1   LLLL
1   lll
0
2   vv
1  VV
2   vv
0    F
Solution: WUWUWUUWUUWWUU
0WWWWWWWWW
2   llll
2   LLL
1   llll
0
2  v   vv
1  VV  VV
1  v  v
0    F
Solution: WWUUUURURRWWUUU
0WWWWWWWWW
2  llll
2   LLL
1   lll
0
1   vv  v
2 V  V  V
2 v  v  v
0    F
Solution: N (No way to get past first row.)
Test these in the snippet by pasting the course into the textbox and pushing "Load Course". Then paste the solution into "Input" and push submit.
Snippet: It's hard to make test cases, so I made this snippet which lets you see if your program can solve randomly-generated courses. For testing purposes, all you need to do is input your program's solution (e.g. LRUWL...) into the "Input" section and push submit. To reset the course back to it's original state push "Reset". Let me know if you find any bugs.

var timer;
var f_x, f_y;
var replaced;
var copy;
document.body.onkeyup = function(e) {
  var a = document.activeElement;
  if (a !== controls && a !== data) hop(e.keyCode);
};

function setup() {
  stop();
  var rows = game.children;
  rows[0].innerHTML = "0WWWWWWWWW";
  load(logs, "L");
  rows[2].innerHTML = "0         ";
  load(cars, "V");
  rows[4].innerHTML = "0    F    ";
  copy = game.innerHTML;
  save();

  f_x = 5;
  f_y = 9;
  replaced = " ";
}

function save() {
  data.value = "";
  for (var i = 1; i <= 9; i++) {
    data.value += getRow(i).textContent;
    if (i < 9) data.value += "\n";
  }
}

function extLoad() {
  stop();
  var rows = data.value.split("\n");
  replaced = " ";
  for (var i = 0; i < rows.length; i++) {
    var r = getRow(i + 1);
    r.innerHTML = rows[i].replace(/ /g, " ");
    if (rows[i].indexOf("V") !== -1 || rows[i].indexOf("L") !== -1) r.className = "right";
    else if (rows[i].indexOf("v") !== -1 || rows[i].indexOf("l") !== -1) r.className = "left";
    var f = rows[i].indexOf("F");
    if (f !== -1) {
      f_y = i + 1;
      f_x = f;
    }
  }
  copy = game.innerHTML;
}

function reset() {
  stop();
  game.innerHTML = copy;
  f_x = 5;
  f_y = 9;
  replaced = " ";
}

function play() {
  if (!timer) {
    timer = setInterval(next, 1500);
  }
}

function stop() {
  if (timer) {
    clearInterval(timer);
    timer = null;
  }
}

function input(i) {
  var s = controls.value;
  if (i === 0) {
    stop();
    sub.disabled = true;
  }
  if (s[i] === "L") hop(65);
  else if (s[i] === "U") hop(87);
  else if (s[i] === "R") hop(68);
  else if (s[i] === "D") hop(83);
  next();
  if (i < s.length - 1) setTimeout(function() {
    input(i + 1);
  }, 750);
  else sub.disabled = false;
}

function load(part, code) {
  for (var r = 0; r < 3; r++) {
    var row = part.children[r];
    var s = "";
    var dir = r % 2;
    row.className = dir === 1 ? "right" : "left";
    s += Math.floor(Math.random() * 2) + 1;
    var end = 0;
    for (var c = 0; c < 9-end;) {
      var spaces = Math.min(9 - end - c , Math.floor(Math.random() * 2) + 2);
      if(c === 0 && end===0) {
        spaces = Math.floor(Math.random()*4);
        end = Math.max(0,2-spaces);
      }
      s += " ".repeat(spaces);
      c += spaces;
      var type = "";
      var len = 0;
      var rand = Math.floor(Math.random() * 2);
      if (code === "L") {
        type = dir === 1 ? "L" : "l";
        len = rand + 3;
      } else {
        type = dir === 1 ? "V" : "v";
        len = rand + 1;
      }
      if (c + len > 9-end) continue;
      s += type.repeat(len);
      c += len;

    }
    row.innerHTML = s + " ".repeat(end);
  }
}

function next() {
  move(logs);
  move(cars);
}

function move(part) {
  var rows = part.children;
  for (var i = 0; i < rows.length; i++) {
    var s = rows[i].textContent;
    var f = s.indexOf("F") !== -1;
    if (f) {
      replace(f_y, f_x, false);
      s = rows[i].textContent;
    }
    var speed = s[0];
    var stuff = s.substring(1);
    var v = vel(speed, rows[i].className);
    rows[i].textContent = s[0] + shift(stuff, speed, rows[i].className);
    if (f) {
      if (part === logs) {
        f_x += v;
        if (f_x < 1 || f_x > 9) {
          go(5 - f_x, f_y - 9);
          return;
        }
      }
      replace(f_y, f_x, true);
      s = rows[i].textContent.substring(1);
      var c = f_x + v;
      var t = "";
      if (c > 9) t = s.substring(f_x) + s.substring(0, c - 9);
      else if (c < 0) t = s.substring(0, f_x) + s.substring(9 + c);
      else t = v > 0 ? s.substring(f_x, c) : s.substring(c, f_x);
      if (t.indexOf("V") !== -1 || t.indexOf("v") !== -1) {
        go(5 - f_x, f_y - 9);
      }

    }

  }
}

function vel(mag, dir) {
  var d = dir === "right" ? 1 : -1;
  var m = parseInt(mag);
  return d * m;
}

function shift(s, n, d) {
  n = parseInt(n);
  for (var i = 0; i < n; i++) {
    if (d === "left") {
      s = s.substring(1) + s.substring(0, 1);
    } else {
      s = s.substring(s.length - 1) + s.substring(0, s.length - 1);
    }
  }
  return s;
}

function hop(k) {
  if (k === 65) go(-1, 0);
  else if (k === 87) go(0, 1);
  else if (k === 68) go(1, 0);
  else if (k === 83) go(0, -1);
}

function go(x, y) {

  replace(f_y, f_x, false);
  f_y -= y;
  f_x += x;
  replace(f_y, f_x, true);
  if (f_x < 1 || f_x > 9 || f_y > 9) {
    go(5 - f_x, f_y - 9);
    return;
  }

  if (f_y == 1) {
    alert("win!");
    go(5 - f_x, f_y - 9);
  }

}

function replace(y, x, f) {

  var row = getRow(y);
  if (!row) return false;

  var s = row.textContent;
  if (x < 1 || x >= s.length) return false;
  if (f) {
    replaced = s[x];
    if (replaced === "V" || replaced === "v" || (replaced.charCodeAt(0) === 160 && y < 5)) {
      go(5 - f_x, f_y - 9);

    } else {
      row.textContent = s.substring(0, x) + "F" + s.substring(x + 1);
    }
  } else {
    row.textContent = s.substring(0, x) + replaced + s.substring(x + 1);
  }

}

function getRow(y) {
  if (y < 1 || y > 9) return false;
  if (y === 1) return game.firstChild;
  if (y === 9) return game.lastChild;
  if (y > 5) return cars.children[y - 6];
  if (y < 5) return logs.children[y - 2];
  return game.children[2];
}

  <input type="button" value="Step" onclick="next()" />
  <input type="button" value="Pause" onclick="stop()" />
  <input type="button" value="Play" onclick="play()" />
  <input type="button" value="Reset" onclick="reset()" />
  <input type="button" value="New Course" onclick="setup()" />

Controls: WASD

Input:
    <input type="text" id="controls" />
    <input type="submit" onclick="input(0)" id="sub" />

    <textarea id="data" rows=9 cols=12></textarea>
    <input type="button" onclick="extLoad()" value="Load Course" />
    <input type="button" onclick="save()" value="Save Course" />

Where to Start:

A*
Dijkstra's Algorithm

Related:

Frogger Champion
Frogger-ish game

See also:

Play Frogger

For those who can't see them, the first two characters of the post are Unicode U+1F438 : Frog Face

Solution: WWUUUURURRWWUUU -> Chewie playing frogger.

@DigitalTrauma "Let the Wookie win" - C3PO, to an arcade machine.

Also what happens if the frog hits the edge of the screen?

@user8 you die and reset. You can try it on the snippet.

@user81655 Ok, I made a new unbeatable course that ensures that there are always at least two spaces between vehicles. Thanks for noticing that.

@user81655 Thank you for your comment! It has led to a significantly improved course generator (although they will be harder now :p).

Are the odd rows (counting from frog's row = 0) left-moving or right-moving?

@quintopia Lowercase is left, so they go left.

Javascript, 854 bytes
function f(w){h=[];z=[];for(y=0;y<9;y++){l=w.split('\n')[y];r={s:parseInt(l[0]),d:1,e:[]};for(x=0;x<9;x++){c=l[1+x];if(c=='v'||c=='l')r.d=-1;r.e.push(c);}z.push(r);}h.push(z);h.push(z);for(g=2;g<40;g++){z=JSON.parse(JSON.stringify(z));for(y=0;y<9;y++){r=z[y];if(r.s>0&&(g%2==0||r.s==2)){i=0;t=0;if(r.d==-1){t=r.e[0];for(i=0;i<8;i++)r.e[i]=r.e[i+1];r.e[i]=t;}else{t=r.e[8];for(i=8;i>0;i--)r.e[i]=r.e[i-1];r.e[i]=t;}}}h.push(z);}j=15;k="";m(0,4,8,"","");return k==""?"N":k;function m(s,a,b,u,v){if(s<j){q={'U':[0,-1],'D':[0,1],'L':[-1,0],'R':[1,0]}[u];if(q)a+=q[0],b+=q[1];v+=u;if(!b){j=s;k=v;return;}if(s>0){for(i=0;i<3;i++){z=h[s*2+i-2];r=z[b];if(i&&(i==1||r.s==2)&&r.e[a].toUpperCase()=='L')a+=r.d;if(a<0||a>8||b>8)return;z=h[s*2+i-1];e=z[b].e;if(e[a].toUpperCase()=='V'||(b<4&&e[a].toUpperCase()!='L'))return;}}t="UWRLD";for(x in t)m(s+1,a,b,t[x],v);}}}

Ungolfed
function solve(input) {
    var grids = [];
    var maxgrid = 40;
    // load input
    var grid = [];
    var lines = input.split('\n');
    for (var y = 0; y < 9; y++) {
        var line = lines[y];
        var row = {
            speed: parseInt(line[0]),
            direction: 1,
            cells: []
        }
        for (var x = 0; x < 9; x++) {
            var c = line[1 + x];
            if (c == 'v' || c == 'l')
                row.direction = -1;
            row.cells.push(c);
        }
        grid.push(row);
    }
    grids.push(grid);
    grids.push(grid);
    // animate grids
    for (var g = 2; g < maxgrid; g++) {
        grid = JSON.parse(JSON.stringify(grid));
        for (var y = 0; y < 9; y++) {
            var row = grid[y];
            if (row.speed > 0 && (g % 2 == 0 || row.speed == 2)) {
                if (row.direction == -1) {
                    var i, temp = row.cells[0];
                    for (i = 0; i < 8; i++)
                        row.cells[i] = row.cells[i + 1];
                    row.cells[i] = temp;
                }
                else {
                    var i, temp = row.cells[8];
                    for (i = 8; i > 0; i--)
                        row.cells[i] = row.cells[i - 1];
                    row.cells[i] = temp;
                }
            }
        }
        grids.push(grid);
    }
    var best = 15;
    var best_moves = "";
    var forceExit = false;

    move(0, 4, 8, "", "");
    return best_moves == "" ? "N" : best_moves;

    function move(step, fx, fy, dir, moves) {
        if (step >= best)
            return "die";
        switch (dir) {
            case 'U':
                fy--;
                break;
            case 'D':
                fy++;
                break;
            case 'L':
                fx--;
                break;
            case 'R':
                fx++;
                break;
        }
        if (dir != '')
            moves += dir;
        if (fy == 0) {
            best = step;
            best_moves = moves;
            return "win";
        }
        if (step > 0) {
            for (var i = 0; i < 3; i++) {
                var grid = grids[step * 2 + i - 2];
                if (i > 0 && (i == 1 || row.speed == 2)) {
                    var row = grid[fy];
                    if (row.cells[fx].toUpperCase() == 'L')
                        fx += row.direction;
                }
                if (fx < 0 || fx > 8 || fy > 8)
                    return "die";
                var grid = grids[step * 2 + i - 1];
                var cells = grid[fy].cells;
                if (cells[fx].toUpperCase() == 'V')
                    return "die";
                if (fy < 4 && cells[fx].toUpperCase() != 'L')
                    return "die";
            }
        }
        move(step+1, fx, fy, 'U', moves);
        move(step+1, fx, fy, 'W', moves);
        move(step+1, fx, fy, 'R', moves)
        move(step+1, fx, fy, 'L', moves);
        move(step+1, fx, fy, 'D', moves)
    }
}

I'm only testing for Up, Wait and Right in the example to speed things up:
JSFiddle

Awesome that someone finally did this!

805 bytes

source: Stack Exchange

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

sort: votes


text:
Create an ASCII-to-hex table for Mark Watney
Inspired by this SciFi.SE question.

Background (with minor spoiler):

 In the movie The Martian, protagonist Mark Watney uses an ASCII table to look up hexadecimal values of ASCII characters so he can attempt to communicate back to Earth.*

Challenge
With no input, output the following ASCII table exactly like this:
Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

The final newline is optional.  With the newline, the md5 of the output is 58824a1dd7264c0410eb4d727aec54e1.  Without, it is 41b6ecde6a3a1324be4836871d8354fe.
In case it helps, this is the output from the ascii Linux command with the usage info at the top chopped off.  You can recreate this on Ubuntu as follows:
sudo apt-get install ascii
ascii | tail -n+7

You may not use the ascii utility (or similar) in your answers.
Because ASCII characters are small Enough with this silly meme already!

I am aware this is similar to Print the ASCII table, but I believe the formatting of the output in this question is significantly more complex and warrants a different question.

*Note, I have not yet seen this movie.

So the program can be hard-coded??

@TanMath Are you referring to use of the ascii utility in answers - if so, see my edit - its not allowed.

Is using something like this ok?

@FryAmTheEggman Yes, I'll allow that.

+1 for the silly meme ... but why another challenge with no input?

There's no restriction on answers??

@msh210 The [tag:code-golf] tag implies shortest code in bytes if not otherwise stated.  I'm trying to apply the DRY principle ;-).  Similarly, unless otherwise stated, entries may be programs or functions.

Must traling whitespace be exactly as shown? (i.e.2 spaces on the first line, none on the others)

@steveverrill yes, exactly as shown - this is how ascii does its output and I'm sticking with that :)

Do you have a link to an online MD5 accepting multiline input?

@edc65 This one seems to give the right answer.

But the silly meme has to be continued :c

Movie? Movie?! That was absolutely horrible when compared to the original book. :P

@Doorknob clearly I haven't read the book either :(

But here the meme actually makes sense due to the bandwidth restrictions involved!  (Before setting up the ACII system, mission control was sending one bit at a time.)

JavaScript (ES6), 323 332 353
Edit I managed to shorten this a bit
Step 1, believe it or not, using an array of 16 chars is shorter than toString + toUpperCase
Step 2, fiddling around to use .map instead of for, so that I can transform it all to a single expression function, avoding console.log and/or return.
Edit 2 Moved DEL at place 0, idea borrowed from Cole Cameron
H=x=>(x=[...'0123456789ABCDEF']).map((d,r)=>x[S='slice'](0,8).map(c=>(o+=`   ${w=c*16+r} ${c+d} `[S](-z)+("DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr((w+1&127)*3,3)||String.fromCharCode(w)),z=c<5?8:9,'Dec Hex   '[S](0,c<2?z+2:z)),o+=`
`,z=7).join` `,o='')[0]+o

MD5: 41B6ECDE6A3A1324BE4836871D8354FE
Pixel perfect, I'd say
LESS GOLFED
H=x=>(
  x=[...'0123456789ABCDEF'],
  a="DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ",
  o='', // the string o will contain the body (16 rows)
  x.map((d,r)=> ( // main loop, r is thr row number, d is the second hex digit to print
    o+=`\n`, z=7,
    x.slice(0,8).map(c=> // loop on 8 columns, c is both column number and digit to print
      (
        // append the column to o
        o += `   ${w=c*16+r} ${c+d} `.slice(-z) + (a.substr((w+1&127)*3,3)||String.fromCharCode(w)),
        z=c<5?8:9, // adjust the column size
        'Dec Hex   '.slice(0,c<2?z+2:z) // column head, right size
      ) // the .map result is the 8 columns heading
    ).join` ` // join the heading in a single string
  ))[0] // any element of the result map is the heading
  + o // concatenate the body
)

Test

H=x=>(x=[...'0123456789ABCDEF']).map((d,r)=>x[S='slice'](0,8).map(c=>(o+=`   ${w=c*16+r} ${c+d} `[S](-z)+("DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr((w+1&127)*3,3)||String.fromCharCode(w)),z=c<5?8:9,'Dec Hex   '[S](0,c<2?z+2:z)),o+=`
`,z=7).join` `,o='')[0]+o

/* TEST */
console.log=x=>O.textContent=x

console.log(H())

C, 307 310 308 307 305 bytes
Finally working 100%.
i,j,z=127;main(){for(;j++<8;)printf("Dec Hex%*s",j<3?4:j<6||j>7?2:3,"");for(;i<143&&putchar(!i|i>z?10:32);i+=16)i=i>z?i%z:i,printf("%*d %02X ",i>95?4:3,i,i),i%z>31?putchar(i):printf("%.3s","DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US "+(i+1)%128*3);}

Output:
$ ./a.out
Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL$ ./a.out > file.txt
$ md5sum file.txt
41b6ecde6a3a1324be4836871d8354fe  file.txt

Ungolfed:
/* some variables for the trip */
i,j,z=127;

main()
{
    /* print header row */
    for(;j++<8;)
            printf("Dec Hex%*s", j<3?4:j<6||j>7?2:3, "");

    /* Iterate through ASCII values, print a space after every column, newline after every 8th value */
    for(;i<143 && putchar(!i|i>z ? 10 : 32); i+=16)
    {
            /* print dec/hex value */
            printf("%*d %02X ", i>95?4:3, i, i=i>z?i%z:i);

            /* print character or friendly name for non-printable characters */
            i%z>31
                    ? putchar(i)
                    : printf("%.3s", "DELNULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US "+(i+1)%128*3);
    }
}

Try it on Ideone.
Edit: 2 more bytes. Many thanks to Dan Allen and Digital Trauma.

Also, you don't need the #include <stdio.h>

@DigitalTrauma: You can in GCC. You can't in C.

@DevSolar It's not a GCC thing. In K&R C, the compiler, not having the declaration of printf and putchar, will guess, and guess right. On the other hand, it's undefined behaviour in standard C99, but who cares - it works as expected in all compilers that I know

305 if you change the first line to x,y,z=127; and replace the 4 occurences of 127 with z. Adds 6 characters but takes 8 away.

Clever trick, putting the DEL at first place. I'll borrow this idea. I would upvote now just for this one, but I already upvoted yesterday :)

Bubblegum, 535 bytes
0000000: e0 05 2f 02 0f 5d 00 22 19 48 62 01 d3 1f 78 e2  ../..].".Hb...x.
0000010: 9a a0 8e 4e 5d d1 b4 c1 77 aa 32 58 ca 97 55 7e  ...N]...w.2X..U~
0000020: a8 01 87 7d db e4 00 55 8f c0 49 67 b6 56 02 5e  ...}...U..Ig.V.^
0000030: ae b2 4d e2 a9 f4 7f 99 a8 56 9e b7 4c 60 a4 79  ..M......V..L`.y
0000040: 6a 76 54 11 90 72 d6 b7 19 df 2f 57 39 2d 21 c0  jvT..r..../W9-!.
0000050: d1 4c 5e d6 21 29 c8 ed 7c a9 7b 8c 85 dc 62 a1  .L^.!)..|.{...b.
0000060: 65 98 e1 0b a7 36 83 c8 ca 88 0c 57 22 f6 56 1e  e....6.....W".V.
0000070: 45 03 b6 74 21 a8 39 52 e9 71 b4 98 ed 71 38 9f  E..t!.9R.q...q8.
0000080: 2d dc 21 d7 bf 60 41 cc bb bd a7 cb 0b 17 8d 65  -.!..`A........e
0000090: 05 13 04 0f 6c bb 67 62 aa c7 ad 6b be 9e 46 77  ....l.gb...k..Fw
00000a0: 35 b9 91 85 f5 47 31 2f c7 ec da c0 00 0e a6 48  5....G1/.......H
00000b0: 01 ba 8b cd b0 34 81 c4 74 9f 4e 3b c3 d0 f7 10  .....4..t.N;....
00000c0: 46 a0 55 8d 49 5d b7 b0 c9 79 ac e5 5f ef 49 f2  F.U.I]...y.._.I.
00000d0: b0 1b 71 3a e1 30 7a fc ce a7 a8 d5 c3 9a 35 1a  ..q:.0z.......5.
00000e0: 4e 27 92 40 4b b5 9b c4 0d 5c e8 cd 71 00 bd c1  N'.@K....\..q...
00000f0: ca aa d2 05 dc e1 0f d9 19 1d 6f 14 87 b3 e4 e8  ..........o.....
0000100: 9e 82 64 d8 e4 76 e7 24 0a 0e 88 72 a1 12 44 95  ..d..v.$...r..D.
0000110: d4 78 82 bd da 71 f3 fb 03 00 d1 4b c8 80 cb 49  .x...q.....K...I
0000120: 0b 98 be 26 ba 3e e8 82 e2 14 9b ba 1a cf bf bc  ...&.>..........
0000130: 30 4e c4 e8 7e b4 d5 46 e6 bc 73 97 c5 ed a6 e2  0N..~..F..s.....
0000140: 06 02 e7 1b 74 4d da 73 fb 15 68 50 c0 ed 32 9b  ....tM.s..hP..2.
0000150: 0d d7 49 d5 c1 a2 e9 07 2c 77 81 6c d3 8d 59 26  ..I.....,w.l..Y&
0000160: 1c 35 ec 2b 7e cb 3a f1 cc 45 a9 e5 6d 3e 33 ca  .5.+~.:..E..m>3.
0000170: 56 3c 8a 8d f6 13 e9 59 d4 52 07 44 ab 5e bc f4  V<.....Y.R.D.^..
0000180: 1f ed f8 9c 8b 48 e1 c4 6c fd 47 d5 04 cc 6e aa  .....H..l.G...n.
0000190: 3f 54 b8 cc cd 09 01 6d 20 3c 42 c9 44 da b1 c1  ?T.....m <B.D...
00001a0: 69 80 12 26 6b 65 e1 4d 1c c3 48 36 2b 14 00 61  i..&ke.M..H6+..a
00001b0: 04 6b 9a 59 2a 53 e3 64 a7 4f dd cc be 2c 20 5e  .k.Y*S.d.O..., ^
00001c0: f7 c7 64 34 e6 12 a6 44 c1 69 35 76 05 db 13 ab  ..d4...D.i5v....
00001d0: 52 10 b5 8e da 8e c5 3c 4c d0 69 0b 19 18 67 ef  R......<L.i...g.
00001e0: 44 1c 7b 70 63 98 95 40 28 6e 3d e7 44 cb 24 83  D.{pc..@(n=.D.$.
00001f0: 88 62 63 3c 02 1c e7 db db 02 56 ae cd 9c e0 9c  .bc<......V.....
0000200: 1c a1 c1 ae d1 dd 7b b7 e6 bd 5b 38 ee 75 c5 6c  ......{...[8.u.l
0000210: 06 16 6c b2 fb 00 00                             ..l....

This above program uses LZMA compression. Try it online!

I think you can do better than that... ;-)

Not in Bubblegum...

How many bytes would you need to print the entire novel The Martian?

@DigitalTrauma It's easy... You only have to execute a prefix attack on SHA-256...

Python 2.7, 389 Bytes
Probably not going to try and trim this down anymore, but it was fun to get it this far.
r=range
c='NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US '
h=''
p=['']*16
o=[11,11,9,9,9,10,10,9]
e=['%3s '%str(i)+('%02X ')%(i)+('DEL',c[i*3:i*3+3].strip() if i<32 else chr(i))[i<127] for i in r(128)]
for i in r(8):
    l=e[i*16:(i+1)*16]
    h+='Dec Hex'.ljust(o[i])
    p=[p[j]+l[j].ljust((0,o[i])[i<7]) for j in r(16)]
print h+'\n'+'\n'.join(p)

Golfscript, 225 bytes
"\x04\x04\x02\x02\x02\x03\x03\x02"{"Dec Hex"" ":s@*}%n[128,{3s*\+-4>s+.~.96<@>\256+16base{10,"ABCDEF"1/+=}%1>{+}/}%"\x1f\xbb\x89\xbc\xaf\x82=F\xd7U%\x80\x8a\xf6\xc7U\xa6al)A\xf6\x19\xfe\x03\x83\xef-\x9f\xe7m\xeb\x82h\xf3\xbfEm6V\x1fD\x8c\xd7~\xcb\x95&(\x1e/:\x8e\xc5\xb0\x0b\xd6\xd4\xd09\xdd""\xff\x1e"{base}/{90,65>1342s++1/=}%3/32/"\x7f"{,32>}%1/*]zip{s*}%16/zip{s*n}%

JavaScript ES6 432 405 398 385
o="Dec Hex  "
o=`${o}  ${o}  ${o+o+o+o} ${o} ${o}\n`
for(i=0;i<16;i++){for(j=0;j<8;j++){k=i+j*16
o+=k>9&&k<16?' ':k<96||k>99?'  ':'   '
o+=k+" "+(k<16?0:'')+k.toString(16).toUpperCase()+" "
o+=k>31?String.fromCharCode(k):"NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".substr(k*3,3)
}o+="\n"}
console.log(o.substr(0,o.length-2)+'DEL')

ES5 I take it? ES6 you could do things like ${o}  ${o}  ${o+o+o+o} ${o} ${o}.

@Neil Thanks!  I added the change and the trailing space is taken care of.

Actually you can go one step further since literal newlines are legal inside backticks (not sure how to demonstrate that in a comment).

C, 385 384 358 bytes
i,n,j;char a[100]="NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US DEL";z(o){printf("%3d %02X %.*s ",j,j,3,a+o);}main(){for(;i<8;i++){printf("%3s %3s   ","Dec","HEX ");}printf("\n");for(;n<16;n++){for(j=n;j<=n+112;j+=16){if(j==127)z(96);else j<32?z(j*3):printf("%3d %02X %c   ",j,j,j);}printf("\n");}return 0;}

The guy above beat me to the punch but I still wanted to submit because I enjoyed this one.
De-golfed:
#include<stdio.h>
i,n,j;
char a[100] = "NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US DEL";
z(o){printf("%3d %02X %.*s ",j,j,3,a+o);}
main(){
   for(;i<8;i++){printf("%3s %3s   ","Dec","HEX ");}printf("\n");
   for(;n<16;n++){
      for(j=n;j<=n+112;j+=16){
         if(j==127)z(96);
         else j<32?z(j*3):printf("%3d %02X %c   ",j,j,j);
      }
      printf("\n");
   }
   return 0;
}

UPDATE : replaced a var with j. Saved a byte ;)
UPDATE2: Trimmed a few extra thingys and functionized a print thingy to save some bytes.

Similar to many answers, you don't have the correct spacing between columns.  Also s/HEX/Hex/.

I must have missed the chapter explaining the thingy [tag:C] keyword ;-P

Python 3.4, 216 Bytes
Also valid Python 2.7. Used FryAmTheEggman's idea/suggestion about curses.ascii.controlnames, which saves almost 100 bytes.
import curses.ascii as a
o=''
w=4,4,2,2,2,3,3,1
for x in w:o+='Dec Hex'+' '*x
o+=' '
for n in range(16):
 o+='\n'
 for x in w:o+='%3d %02X %-*s'%(n,n,x,n>31and[chr(n),'DEL'][n>126]or a.controlnames[n]);n+=16
print(o)

$ python ascii.py | md5
58824a1dd7264c0410eb4d727aec54e1

Ruby (2.2.2p95), 277 295 306 331 364
a='Dec Hex  ';puts"#{a}  "*2+a*4+" #{a}"*2,16.times.map{|i|8.times.map{|j|(k=i+j*16;k==127?'  127 7F DEL':"#{k} #{'%.2X'%k} #{'NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US  '[k*3..k*3+2]||k.chr}").rjust(j<2?10+j :9+j/6)}.join}

ungolfed
s = "Dec Hex    " * 2 + "Dec Hex  " * 4 + " Dec Hex  " * 2
a = 127.times.map { |i|
  "#{i} #{'%.2X'%i} #{'NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US  '[i*3..i*3+2]||i.chr}"
}
a << '  127 7F DEL'
x = 16.times.map { |i|
  8.times.map { |j|
    a[i + j * 16].rjust(j < 2 ? 10 + j : 9 + j / 6)
  }.join
}.join "\n"
puts s, x

The control name array really kills me here. Still hoping to find something similar to Python's curses.ascii for Ruby...

Microscript II, 1314 bytes
Probably far from optimal.
"Dec Hex    "pp"Dec Hex  "ppps"Dec Hex   "ppoP"  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p\n  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q\n  2 02 STX  18 12 DC2  34 22 \"  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r\n  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s\n  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t\n  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u\n  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v\n  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w\n  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x\n  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y\n 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z\n 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {\n 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \\  108 6C l  124 7C |\n 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }\n 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~\n 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL"

How do I test this?

@DigitalTrauma I'll add a link to the github repo to the answer. Run the interpreter with the program as the first line of the input.

Congrats. You made the most boring answer on this contest. ò_ó +1

@zyabin101 Well, it is about 30 bytes shorter than simply printing the string all at once would likely be.

JavaScript, 415 413 4231 411 406 402 4142 412 bytes
x=>eval('a=`${d="Dec Hex  "}  `[r="repeat"](2)+d[r](3)+`${d} `[r](2)+d+`
`;z="NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".match(/.{3}/g);z[127]="DEL";for(j=i=0;i<128;i++){a+=("  "+((b=i%8*16)+j)).slice(-3)+" "+(0+(c=b+j).toString(16).toUpperCase()).slice(-2)+" "+(c<32||i==127?z[c]:String.fromCharCode(c))+(b==112?`
`:(b < 80 ? " " : "  "));if(b==112)j++}a')

I couldn't figure out how to print the chars prior to char code 32, so just listed them as a string.
The hash I've got seems to match (41b6ecde6a3a1324be4836871d8354fe).
Demo + Ungolfed:

function t() {
  a = `${d="Dec Hex  "}  `.repeat(2) + d.repeat(3) + `${d} `.repeat(2) + d + "\n";
  z = "NULSOHSTXETXEOTENQACKBELBS HT LF VT FF CR SO SI DLEDC1DC2DC3DC4NAKSYNETBCANEM SUBESCFS GS RS US ".match(/.{3}/g);
  z[127] = "DEL";
  for (j = i = 0; i < 128; i++) {
    a += ("  " + ((b = i % 8 * 16) + j)).slice(-3) + " " + (0 + (c = b + j).toString(16).toUpperCase()).slice(-2) + " " + (c < 32 || i == 127 ? z[c] : String.fromCharCode(c)) + (b==112?"\n":(b < 80 ? " " : "  "));
    if(b==112)j++;
  }
  return a
}
document.write("
" + t() + "
")

1 - fixed spacing
2 - again fixed spacing

Huh, in mobile Chrome  doesn't monospace, though it should.

I don't think that's qute the spacing the question's asking for.

@Dig oy wtf. I see this 0.0

@Digital I've fixed the spacing.

@Digital You after the last column? Ok, but that doesn't even affect the appearance...

Why are you using
 for line breaks in a
 when you can use \n?

@Neil Thanks, didn't notice that.

@Digital Hash matches now.

@nicael Yup.  +1.  Thanks for sticking with it!

Actually you can go one step further since literal newlines are legal inside backticks (not sure how to demonstrate that in a comment).

@Neil thanks, forgot about it.

Note that 4 can't be struck out. :-P

MATLAB, 363 bytes
Not as small as C but comparable...
h='';s=@sprintf;for i=[4 4 2 2 2 3 3 2]h=s([h 'Dec Hex%*s'],i,'');end
h=[h 10];a='NULDLESOHDC1STXDC2ETXDC3EOTDC4ENQNAKACKSYNBELETBBS CANHT EM LF SUBVT ESCFF FS CR GS SO RS SI US ';for i=0:15for j=0:7k=i+16*j;if j<2b=1+6*i+3*j;h=[h s('%3d %02X %-3s ',k,k,a(b:b+2))];else
h=[h s('%*d %02X %c ',3+(j>5),k,k,k)];end
end
h=[h(1:end-1) 10];end
disp([h(1:end-2) 'DEL']);

Do I have to download the free trial, or is there some other way I can test your answer?  Or can you claim the md5 of the output is correct?

You can run it in GNU Octave, but I already did and this version lacks the additional padding between columns 6, 7 and 8. Apart from that, it's correct.

Yes, you are right. Corrected the code. This happens, if you have the golfed and ungolfed variant side by side. Corrected some typos. Interestingly I get a different ascii|tail -n=+7 (first row last two spaces are missing) (Ubuntu 15.10). I never noticed, that in matlab variables named d and e behave differently. (for i=1:2d=10;end; % Syntax error) (for i=1:2k=10;end; % Just fine)

///, 998 bytes
//\/\////  /Dec Hex/ 0/ 1/ 2/ 3/ 4/ 5/ 6	/ 7/ 8/ 9/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /A /B /C /D /E /F /
 /  NUL 6DL280 4@ 0P6` 12	pSOH 7DC3! 91 51Q7a 13	qSTX 8DC4" 02 62R8b 14	rETX 9DC5# 13 73S9c 15	sEOT 0DC6$ 24 84T 00d 16	tENQ 1NAK 7% 35 95U 01e 17	uACK 2SYN 8& 46 	06V 02f 18	v	BEL 3ET9' 57	 	1G 7W 03g 19	wBS4CAN 0( 68 	2H 8X 04h 20	xHT5EM1) 79 	3I 9Y 05i 21	y
0L 6SU2* 8: 	4J 0Z 06j 22	z
1VT7ES3+ 9; 	5K 1[ 07k 23	{
2F 8FS4, 0< 	6L 2\\ 08l 24	|
3CR9GS5- 1= 	7M 3] 09m 25	}
4SO0RS6. 2> 	8N 4^ 10n 26	~
5SI1US7\/ 3? 	9O 5_ 11o 27	DEL

Try it online!

PHP, 330 321 bytes
$a=[NUL,SOH,STX,ETX,EOT,ENQ,ACK,BEL,BS,HT,LF,VT,FF,CR,SO,SI,DLE,DC1,DC2,DC3,DC4,NAK,SYN,ETB,CAN,EM,SUB,ESC,FS,GS,RS,US,127=>DEL];foreach($t=[3,3,1,1,1,2,2,0]as$i)echo'Dec Hex ',str_repeat(' ',$i);echo"
";for($x=0;$x<16;)for($y=$x++;$y<128;$y+=16)printf("% 3d %1$02X % -".$t[$y/16].s.($y<112?' ':"
"),$y,$a[$y]?:chr($y));

Try it online!
Less golfy:
$a=[NUL,SOH,STX,ETX,EOT,ENQ,ACK,BEL,BS,HT,LF,VT,FF,CR,SO,SI,DLE,
DC1,DC2,DC3,DC4,NAK,SYN,ETB,CAN,EM,SUB,ESC,FS,GS,RS,US,127=>DEL];

$t=[3,3,1,1,1,2,2,0];

foreach( $t as $i )
    echo 'Dec Hex ', str_repeat( ' ', $i );

echo" \n";

for( $x=0; $x<16; ) {
    for( $y=$x++; $y<128; $y+=16 ) {
        printf( "% 3d %1$02X % -" . $t[$y/16] . 's' . ( $y<112 ?' ' : "\n" ),
            $y, $a[$y] ?: chr($y) );
    }
}

Common Lisp (SBCL), 309
(progn(format t"~{~v,0TDec Hex  ~}"#1='(0 11 22 31 40 49 59 69))(dotimes(y 16)(fresh-line)(loop for x from 0 for k in #1#for i =(+(* 16 x)y)do(format t"~v,0T~3d ~2,'0x ~a"k i i(if(graphic-char-p #2=(code-char i))#2#(case i(8"BS")(9"HT")(10"LF")(12"FF")(13"CR")(127"DEL")(t(string-upcase(char-name #2#)))))))))

A script to be run which outputs the following to standard output, ie. the version without a final newline (md5: 41b6ecde6a3a1324be4836871d8354fe).
Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex
  0 00 NUL  16 10 DLE  32 20    48 30 0  64 40 @  80 50 P   96 60 `  112 70 p
  1 01 SOH  17 11 DC1  33 21 !  49 31 1  65 41 A  81 51 Q   97 61 a  113 71 q
  2 02 STX  18 12 DC2  34 22 "  50 32 2  66 42 B  82 52 R   98 62 b  114 72 r
  3 03 ETX  19 13 DC3  35 23 #  51 33 3  67 43 C  83 53 S   99 63 c  115 73 s
  4 04 EOT  20 14 DC4  36 24 $  52 34 4  68 44 D  84 54 T  100 64 d  116 74 t
  5 05 ENQ  21 15 NAK  37 25 %  53 35 5  69 45 E  85 55 U  101 65 e  117 75 u
  6 06 ACK  22 16 SYN  38 26 &  54 36 6  70 46 F  86 56 V  102 66 f  118 76 v
  7 07 BEL  23 17 ETB  39 27 '  55 37 7  71 47 G  87 57 W  103 67 g  119 77 w
  8 08 BS   24 18 CAN  40 28 (  56 38 8  72 48 H  88 58 X  104 68 h  120 78 x
  9 09 HT   25 19 EM   41 29 )  57 39 9  73 49 I  89 59 Y  105 69 i  121 79 y
 10 0A LF   26 1A SUB  42 2A *  58 3A :  74 4A J  90 5A Z  106 6A j  122 7A z
 11 0B VT   27 1B ESC  43 2B +  59 3B ;  75 4B K  91 5B [  107 6B k  123 7B {
 12 0C FF   28 1C FS   44 2C ,  60 3C <  76 4C L  92 5C \  108 6C l  124 7C |
 13 0D CR   29 1D GS   45 2D -  61 3D =  77 4D M  93 5D ]  109 6D m  125 7D }
 14 0E SO   30 1E RS   46 2E .  62 3E >  78 4E N  94 5E ^  110 6E n  126 7E ~
 15 0F SI   31 1F US   47 2F /  63 3F ?  79 4F O  95 5F _  111 6F o  127 7F DEL

Details

(0 11 22 31 40 49 59 69) contains the position of each column in a line, as obtained by inspecting the desired output. There were many corner cases that are simply better handled by hard-coding the exact position for each column and letting the ~T format directive tabulate as needed.
Since names of characters are implementation-dependent, this code targets only the SBCL interpreter (I tested with CCL, which uses other names). I rely on char-name for most non-graphic characters, but some of them have explicit mappings to the expected output.

Ungolfed
(progn
  (format t"~{~v,0TDec Hex  ~}" '(0 11 22 31 40 49 59 69))
  (dotimes(y 16)
    (fresh-line)
    (loop for x from 0
          for k in '(0 11 22 31 40 49 59 69)
          for i = (+ (* 16 x) y)
          for c = (code-char i)
          do (format t
                     "~v,0T~3d ~2,'0x ~a"
                     k
                     i
                     i
                     (if (graphic-char-p c)
                         c
                         (case i
                           (8"BS")
                           (9"HT")
                           (10"LF")
                           (12"FF")
                           (13"CR")
                           (127"DEL")
                           (t (string-upcase (char-name c)))))))))

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/


text:
Draw my bar graph
You have been chosen to make a program that creates some pretty ASCII bar charts. Here is the input format:
[List of words (they can have spaces)] [an integer >= 0]
Bar 3
This is so cool 4
IDK-Why 6

The input will have multiple lines in this format, each one representing one bar in the graph. The output format of a graph will be like this:
 _ _ _ _
|_|_|_|_|
 | | | |
 | | | + [name of 4th bar]
 | | + [name of 3rd bar]
 | + [name of 2nd bar]
 + [name of 1st bar]

Here are some examples:
In:
Cool 4
Kool 6

Out:
   _
  | |
 _| |
| | |
| | |
| | |
|_|_|
 | |
 | + Kool
 + Cool

In:
Graph 5
Bar 3

Out:
 _
| |
| |_
| | |
| | |
|_|_|
 | |
 | + Bar
 + Graph

In:
Very 4
Large 5
Bar 3
Graph 5

Out:
   _   _
 _| | | |
| | |_| |
| | | | |
| | | | |
|_|_|_|_|
 | | | |
 | | | + Graph
 | | + Bar
 | + Large
 + Very

In:
Bars can be 0 0
Large-bars_are$nice2 6
average)(@#$ 3
neato 5

Out:
   _
  | |  _
  | | | |
  | |_| |
  | | | |
  | | | |
 _|_|_|_|
 | | | |
 | | | + neato
 | | + average)(@#$
 | + Large-bars_are$nice2
 + Bars can be 0

Functions or full programs are allowed.

Is the integer a single digit or can it be > 9?

9 is allowed, I just didn't put it as an example because it would be so big.

Can there be trailing spaces on each line? I.e. make the output rectangular?

Yes, trailing spaces are allowed

Where's the justification of why it has to be small code? Usually there's at least like "Because your bar graphs will be presented to aliens living on pluto, we want to minimize the necessary data transfer to get your program there and thus the code must be as small as possible" - as if, you know, they already have CJAM interpreters on pluto or something...

Look in the history, @Doorknob removed it, not sure why...

sh + awk + tac, 173
Mostly an awk script that prints the graph bottom up which is then reversed by tac.
awk '{n[NR]=$NF;$NF="";$0=p" + "$0;p=" |"p}1;END{for(print p;p~/\|/;print p (k>($0=0)?"|":""))for(i=k=p="";i<NR;p=p (j>0||k>0?"|":" ")(!k||$0?"_":" ")){j=k;k=n[++i]--}}'|tac

Description
awk, first part, executed for each input line
{
  n[NR]=$NF;         # store the value, here n[1]=0, n[2]=6, n[3]=3, n[4]=5
  $NF="";            # remove the value from the label
  $0=p" + "$0;       # add a prefix (initially empty) and a " + " in the front
  p=" |"p            # grow the prefix for the next string
}1;                  # implicitly print $0

Output
 + Bars can be 0
 | + Large-bars_are$nice2
 | | + average)(@#$
 | | | + neato

awk, second part, executed once in the end
END{
  for(print p;p~/\|/;print p (k>($0=0)?"|":""))
    for(i=k=p="";i<NR;p=p (j>0||k>0?"|":" ")(!k||$0?"_":" "))
      {j=k;k=n[++i]--}}

ungolfed:
END{
  print p;           # print the prefix again
  for(;p~/\|/;)      # for each line, bottom up. no more "|" -> we're done
  {
    p="";            # string to be built
    i=k=0;           # i: bar index, k: heigth of the previous bar
    for(;i<NR;)      # for each bar, left to right
    {
      j=k;           # store the previous bars heigth in j
      k=n[++i]--;    # get the current bars remaining height and decrement it
      p=p (j>0||k>0?"|":" ")(!k||$0?"_":" ");
                     # if the bar to the left or this one have some height
                       remaining, draw a border in between them, else a space
                     # if this bars remaining heigth is exactly 0, draw a top
                     # if $0 is set, draw the bottom
    }
    print p (k>0?"|":"");
                     # draw (or not) the rightmost border, finally print
    $0=0;            # unset $0, only to detect first run
  }
}

Output
 | | | |             # the prefix
 _|_|_|_|            # the strings built by the nested loops
  | | | |            |
  | | | |            v
  | |_| |
  | | | |
  | |  _
   _                 # no more "|" in the string, we're done

tac reverses the lines
   _
  | |  _
  | | | |
  | |_| |
  | | | |
  | | | |
 _|_|_|_|
 | | | |
 | | | + neato
 | | + average)(@#$
 | + Large-bars_are$nice2
 + Bars can be 0

JavaScript (ES6), 270 262 270 287
Bug fix added a missing row of '|' under the bars
l=>{t=p=o='';l=l.split`
`.map(r=>([,b,c]=r.match(/(.*) (\d+)/),[' + '+b,+c>t?t=c:c]));for(++t;t--;o+=`
`)l.map(x=>o+=x[1]<t?'y y':x[1]>t?t?'x x':'x_x':'y_y');return o.replace(/(yx)|(xy)|(xx?)/g,'|').replace(/y+/g,' ')+[...l,' '].map(x=>p+x[p+=' |',0]).reverse().join`
`}

Test Test in Firefox, as Chrome does not support ES6 Destructuring assignment

F=l=>{
  t=p=o='';l=l.split`\n`.map(r=>([,b,c]=r.match(/(.*) (\d+)/),[' + '+b,+c>t?t=c:c]));
  for(++t;t--;o+=`\n`)l.map(x=>o+=x[1]<t?'y y':x[1]>t?t?'x x':'x_x':'y_y');
  return o.replace(/(yx)|(xy)|(xx?)/g,'|').replace(/y+/g,' ')
  +[...l,' '].map(x=>p+x[p+=' |',0]).reverse().join`\n`
}

function test()
{
  var i=I.value
  O.textContent=F(i)
}

test()
textarea { display:block; width:50%; height:5em}
Input
<textarea id=I>Bars can be 0 0
Large-bars_are$nice2 6
average)(@#$ 3
neato 5</textarea>
<button onclick='test()'>go</button>

Output

In my Jolf answer I'm working on, I used i.match(/.+ |./g). Perhaps that could be of use?

'Uncaught ReferenceError: Invalid left-hand side in assignment', followed by a few 'Uncaught ReferenceError: test is not defined' because the first error prevented declaration of test()

@ThisNameBetterBeAvailable Using what browser? ES6 is not fully supported in Chrome and totally unsopported in most versions of MSIE

@ThisNameBetterBeAvailable in this case, problem is Chrome not supporting destructuring assignment: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment. Try a better browser like Firefox

421 bytes - Python 2
import sys
l=sys.stdin.read().split('\n')
b=[(' '.join(x[:-1]),int(x[-1])) for x in map(str.split,l[:-1])]
a=len(b)
e=enumerate
m=[' '*(a+1)+'|'*x[1] for i,x in e(b)]+[' '*(len(b)+1)+'|'*b[-1][1]]
h=[' '*i+'+'+'|'*(a-i)+'_'+' '*(x[1]-1)+'_' for i,x in e(b)]
c=m+h
c[::2]=m
c[1::2]=h
c=[''.join(' ' if not x else x for x in l) for l in map(None,*c)]
for i,(n,_) in e(b):
 c[a-i-1]+='\b'*i*2+n
c='\n'.join(c[::-1])
print(c)

Tests
a 1
b 2
c 3
     _
   _| |
 _| | |
|_|_|_|
 | | |
 | | + c
 | + b
 + a

For me, it doesn't give the right output for zero heights  (e.g. a 0    b 3)  and descending bars (e.g. a  5    b 3    c 0). My Python version is Python 2.7.10.

PowerShell, 208 194 190 168 167 164 bytes
(($h=$args|%{$t,$n=$_-split'(?=\d+$)';$r=,"$c + $t"+$r;$c+=' |';$n})|sort)[-1]..0|%{$i=$_
&{-join($h|%{($p,($p=' |'[$i-lt$_])|sort)[-1];' _'[$i-in0,$_]})+$p}}
$c
$r

Try it online!
Unrolled:
# parse input
$heights = $args|%{
    $title,$number=$_-split'(?=\d+$)'   # the title contains a trailing space. It's allowed by the author
    $rows=,"$columns + $title"+$rows
    $columns+=' |'
    Write-Output $number
}

# draw bars
($heights|sort)[-1]..0|%{   # max($heights)..0
    $lineNum=$_
    &{                      # execute the scriptblock to reset inner variables
        -join(
            $heights|%{
                $currLeftBorder = ' |'[$lineNum -lt $_]
                Write-Output ($prev,$currLeftBorder|sort)[-1]   # max
                Write-Output ' _'[$lineNum -in 0,$_]
                $prev=$currLeftBorder
            }
        )+$prev
    }
}

# draw bottom columns and titles
Write-Output $columns
Write-Output $rows

Not bad, wouldn't have thought to try it in PS.

Java, 613 for the printing function
It may be possible to save a few bytes by the "usual" transformations of for(i=0;i<n;i++) to for(;i++<n;), simplifying the ternary conditionals, or with more elegant computations of the "labels" and "heights", but it's a start.
package stackoverflow.codegolf.barchart;

import static java.util.stream.Stream.of;

import java.util.stream.IntStream;

public class BarChartTest
{
    public static void main(String[] args)
    {
        String input0[] = {
            "Cool 4",
            "Kool 6",
        };
        String input1[] = {
            "Graph 5",
            "Bar 3",
        };
        String input2[] = {
            "Very 4",
            "Large 5",
            "Bar 3",
            "Graph 5",
        };
        String input3[] = {
            "Bars can be 0 0",
            "Large-bars_are$nice2 6",
            "average)(@#$ 3",
            "neato 5",
        };
        runTest(input0);
        runTest(input1);
        runTest(input2);
        runTest(input3);
    }

    private static void runTest(String input[])
    {
        System.out.println("In:");
        for (String string : input)
        {
            System.out.println(string);
        }
        System.out.println("Out:");
        BarChartTest b = new BarChartTest();
        b.print(input);
    }

    void p(String a[]){int h[]=of(a).map(this::s).mapToInt(Integer::parseInt).toArray(),M=IntStream.of(h).max().getAsInt(),C=a.length,r,c,y;Object t[]=of(a).map(this::p).toArray();String s="",p=" + ",w="";char n=10,v='|',i=32,u=95,e;for(r=0;r<=M;r++){e=r==M?'_':' ';y=M-r;for(c=0; c<C; c++){s+=h[c]>y?v:c>0?h[c-1]>y?v:e:r==0?e:i;s+=h[c]==y?u:e;}s+=h[C-1]>y?v:e;s+=n;}for(r=0;r<C;r++){for(c=0;c<C-r;c++){s+=" |";}s+=r>0?p+t[C-r]:w;s+=n;}s+=p+t[0];System.out.println(s);}int b(String s){return s.lastIndexOf(" ");}String p(String s){return s.substring(0,b(s));}String s(String s){return s.substring(b(s)+1,s.length());}
}

Haskell, 323 bytes
f x|(p,q)<-unzip$map((\l->(unwords$init l,(read$last l))).words)$lines x=unlines(reverse$init.(zip((zipWith max=<<tail)$0:q++[0])(q++[0])>>=).(!)<$>[0..maximum q])++v p++'\n':(0#p)
v=(>>" |")
_#[]=""
l#(h:t)=(l+1)#t++v[1..l]++" + "++h++"\n"
0!(0,_)=" _"
0!_="|_"
i!(j,k)|i<j=(i==k)?'|'|1<2=(i==k)?' '
i?c|i=c:"_"|1<2=c:" "

Usage example:
*Main> putStr $ f "Bars can be 0 0\nLarge-bars_are$nice2 6\naverage)(@#$ 3\nneato 5"
   _
  | |  _
  | | | |
  | |_| |
  | | | |
  | | | |
 _|_|_|_|
 | | | |
 | | | + neato
 | | + average)(@#$
 | + Large-bars_are$nice2
 + Bars can be 0

How it works (rough overview, details maybe later):
(p,q)<-unzip$map((\l->(unwords$init l,(read$last l))).words)$lines x
           -- breaks the input into a list of labels (-> p), e.g.
           -- ["Bars can be 0","Lagerge-basr_asr$niche",...] and a list of heights
           -- (-> q), e.g. [0,6,3,5]

unlines(reverse$init.(zip((zipWith max=<<tail)$0:q++[0])(q++[0])>>=).(!)<$>[0..maximum q])
           -- builds the bars
v p++"\n"
           -- builds the first row of "|" underneath the zero line
(0#p)
           -- build the label section

The parsing part ((p,q)<-unlines...) takes a lot of bytes, maybe I can it golf further down.

Python 2, 345 bytes
B,H=zip(*[(a,int(b))for a,b in[x.rsplit(' ',1)for x in input().split('\n')]])
h=max(H)
L=len(B)
b=['|'*H[0]]*(L*2+1)
for i in range(L):b[2+i*2]='|'*max(H[i],H[min(i+1,L-1)]);b[1+i*2]=('_'+' '*(H[i]-1)+'_')[:H[i]+1]
b=[x.ljust(h+1)for x in b]
for l in zip(*b)[::-1]:print ''.join(l)
print' |'*L
for i in range(-1,-L-1,-1):print' |'*(L+i),'+',B[i]

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


text:
Make the pattern from composition notebooks
This challenge was xnor's idea, taken from Digital Trauma's challenge donation thread.

Your challenge is to write a program that, as xnor put it, "procedurally generate[s] the splotchy black-and-white marbled pattern on the covers of composition notebooks":

Your program can either display it on the screen or save it in a file. The image should be at least 300 pixels in each dimension, and it should be different between runs of the program. Your program should not just load an external image and use that as its output; the image should be generated by your program.
This is a popularity-contest, and it will use xnor's criteria for voting:

Similarity to the reference texture above.
Simplicity of generation method.

I don't think it's a good idea to post another user's challenge straight out of the sandbox, although it has a highly voted critical comment. At the very least, you should repost it in the sandbox, addressing those concerns and getting some up-to-date feedback. I do think this is way too broad to work well as a pop-con and it's also too similar to http://codegolf.stackexchange.com/q/43274/8478.

Lastly, I don't understand how it's possible to generate such an image without some form of noise. Whether I use a pre-made function to generate the noise, or port some Perlin noise code from elsewhere into my program doesn't really make a difference for a popcon since there is no incentive to keep the code short.

@MartinBüttner I understand your points, but I think this is different from that other challenge. This image is simpler than the pictures of the wall, and I think it's clearer what exactly the output should look like. I removed the part about external noise generators, because I agree with you and I think it was unclear.

For me there's 3 kinds of popcon. The worst is "do x in the most wacky way possible" which this clearly isn't  Then there's pure art, which we decided is off topic (though there's many old challenges of this type.) Finally there's the best type of popcon: image processing, which is always highly voted. The great thing is you often don't know how good an algorithm will look till you see the result. This for me is a mediocre example of the best type of popcon. It's v similar to linked challenge. But the image to emulate is clear - I don't see ambiguity in requirements as an issue. +1 (only just)

@MartinBüttner your first comment could give the impression KSFT stole this challenge from Xnor. But on investigation I understand Xnor gave it away.

@steveverrill that's not what I meant to imply. I'm saying even you post another user's challenge with their permission, you shouldn't just copy it straight from the sandbox to main. Usually there's a very good reason why the original author didn't do just that.

I don't understand how this could be both possibly too similar to another contest that isn't closed and too broad.

Mathematica
Blur[Binarize[Blur[RandomImage[1, {1000, 1000}, ImageSize -> Large], 6], .52]]

Quite simple. Creates a random grayscale image, blurs it, takes the pixels above a threshold, and blurs it again. It uses a couple of hand-tweaked values. The result:

This is really good! On first glance I thought you reposted the reference image.

@xnor I myself was surprised what a small amount of hand-tweaking could do.


text:
Implement Multiplicative Fuzzy Logic
Inspired by this excellent challenge (from which the bulk of this text is blatantly duct-taped) – and my highschool philosophy project...
I define the following operators:
Fuzzy Conjunction a ×F b is a × b
Fuzzy Division a ÷F b is a ÷ b
Fuzzy Negation –F b is 1 – b
Fuzzy Disjunction a +F b is –F ((–F a) ×S (–F b) which is equivalent to 1 – (1 – a) × (1 – b)
With all this in mind, create an interpreter that will evaluate infix expressions that use the following operators (i.e., a + b, not a b + or + a b). Alternatively, extend the language of your choice to include the notation.
×    Multiplication
÷    Division
–    Subtraction
+    Addition
×F   Fuzzy Conjunction
÷F   Fuzzy Division
–F   Fuzzy Negation
+F   Fuzzy Disjunction

Notice that a -F b is not defined. You may leave it undefined, or define it as you see fit.
You may substitute * for × and/or - for – and/or / for ÷, (or use whatever single symbols your language uses for the four basic arithmetic operations) as long as you stay consistent: You may not use * and ×F together.
You may choose to require or prohibit spacing around tokens.
You may choose any of the following rules for order of precedence:

As normal mathematics, and each Fuzzy operator has a higher order precedence than their normal counterpart.

As normal mathematics, and each Fuzzy operator has a lower order precedence than their normal counterpart.

As normal mathematics, and the Fuzzy operators all have higher order precedence than all the normal operators.

As normal mathematics, and the Fuzzy operators all have lower order precedence than all the normal operators.

Strict left-to-right.

Strict right-to-left.

Normal and Fuzzy operators have the same precedence and are evaluated left-to-right.

Normal and Fuzzy operators have the same precedence and are evaluated right-to-left.

Leave a comment if you desire another precedence rule.
Test cases using precedence rule 6:
> 5 +F 10 + 3
-47     // 1 - (1 - 5) × (1 - 13)
> 10 × 2
20      // 2 × 10
> 10 ×F 1
10      // 1 × 10
> 23 × 3
69      // 23 × 3
> 123 ×F 2 × 3
738     // 123 × 2 × 3
> 5 + 3 +F 2
4       // 5 + 1 - (1 - 3) × (1 - 2)
> 150 ÷F 3
50      // 150 ÷ 3
> 150 ÷ 53
2.83    // 150 ÷ 53
> -F -F -F 0
1       // 1 - (1 - (1 - 0))
> -500
-500    // - 500
> -F 6 - 1
-4      // 1 - 5
> 12 +F 633 ×F 3
-20877  // 1 - (1 - 12) × (1- 633 × 3)

This is a code-golf, so the shortest program in bytes wins.

I'm trying this in Dyalog APL, and something feels wrong about using APL with regex.

Does -M nest arbitrarily? That is, should our code handle -M -M -M 3 and the like?

Also, maybe allow / for ÷?

Could the operators have the same precedence level as their normal counterparts?

@ThomasKwa Yes, you could translate Mauris' answer, but much more fun to define an APL operator to do the work.

@Mauris Yes. I had that in mind, but forgot to write it somehow. Fixed. Also, I messed up F/M. You may use either, but I've edited to F only. M is for Manhattan math!

@BradGilbertb2gills Yes, I'll add those to the list.

Can I define the monadic uses of +F, ×F, and ÷F along with the dyadic use of -F?

@JeffZeitlin Yes, as long as the 8 required operations work, all other behaviour is acceptable.

Jelly, 20 bytes
⁾-Cyœṣ⁾+Fj“+_×ɗ”ḟ”FV

Try it online!
To quote myself:

Well, it's disgustingly hacked together, but it works :D

Well, it's much more elegantly hacked together.
Haha, beating QuadR!
Jelly doesn't like strings. For a more elegant solution that exploits Jelly natural infix notation, see below. Takes input from ARGV. The Footer in the link takes a multiline string, splits it on newlines, runs each line and returns a list of results.
This uses precedence rule 5, which is consistent (I believe) with Jelly's parsing rules in this case, and we use _ for regular subtraction and for regular negation.
How it works
⁾-Cyœṣ⁾+Fj“+_×ɗ”ḟ”FV - Main link. Takes an expression E on the left
⁾-C                  - Yield ["-", "C"]
   y                 - Replace all occurrences of "-" with "C"
      ⁾+F            - Yield ["+", "F"]
    œṣ               - Split on "+F"
          “+_×ɗ”     - Yield "+_×ɗ"
         j           - Join on "+_×ɗ"
                ḟ”F  - Remove any leftover "F"s
                   V - Execute as Jelly code

Why C and +_×ɗ?
First, C. C is Jelly's builtin for \$1 - x\$
Now, +_×ɗ. The ɗ at the end tells Jelly to consider the previous 3 atoms as a single link, acting similarly to (...) in other languages. The three atoms implement the formula
$$\begin{align}
1 - (1-a)(1-b) & = 1 - (1-a-b+ab) \\
& = (a+b)-(a\times b)
\end{align}$$
+_× - Takes a on the left and b on the right
+   - a+b
  × - a×b
_   - a+b - a×b

Jelly, 9 + 8 = 17 bytes
×
÷
C
+_×

Try it online! or Try it online!
Slightly convoluted here, but bear with me. This uses the

Alternatively, extend the language of your choice to include the notation.

rule to avoid any parsing or complicated stuff that Jelly isn't too good at. Instead we define 4 functions 1ŀ, 2ŀ, 3Ŀ and 4ŀ (Conjuction, Division, Negation and Disjuction respecitively), which "extends" Jelly to include the fuzzy operations by including the above 9 bytes before any code. I'm counting my byte count here as 9 bytes for the code above plus 8 bytes for the names of the functions.
This uses precedence rule 5, which is consistent (I believe) with Jelly's parsing rules in this case, and we use _ for regular subtraction.
In the test suite above, we include our 4 functions in the header, then execute the lines of test cases with the Footer.
How it works
The names of the functions are fairly easy to understand. Jelly allows you to call each line as a function using the Ŀ (call as monad) or the ŀ (call as dyad) quicks, which is what we use here.
1ŀ and 2ŀ are obvious how they work. 3Ŀ simply takes advantage of Jelly's builtin for \$1 - x\$: C. 4ŀ works the same way as specified above, but doesn't need the ɗ for grouping

CJam, 45 bytes
q"-F"/"1 -"*"+F"/"1Y$-*+"*'F-S/)d\2/'\f*W%S*~

Uses precedence rule 6: strictly right-to-left. It expects ASCII input.
Take it for a spin!
Explanation
Read input, and perform the following transformations in order:
"-F"   to   "1 -"
"+F"   to   "1Y$-*+"
 "F"   to   ""

Then split over spaces (S/). Extract the rightmost element and convert it to a double ()d). Then take pairs from the rest of the list (\2/), join them all by \ ('\f*) and evaluate the resulting strings as CJam code in reverse order (W%S*~).
For example, it converts 5 +F 10 + 3

to 5 1Y$-*+ 10 + 3 in the first step,
then to 3 [["10" "+"] ["5" "1Y$-*+"]],
then to 3 ["10\+" "5\1Y$-*+"],
then to 3 10\+ 5\1Y$-*+, which is CJam code that computes the right answer, -47.

QuadR, 21 bytes
⍎⍵
\+F
-F
F
(+-×)
1-

Try it online! or a version that accepts newline-separated test cases.
QuadR port of Razetime's APL answer, as it happens to be a set of ⎕R substitution followed by post-processing code. I moved ⍵~'F' part into the regex substitution 'F' → '', which saves a byte. It has no problem running multiple test cases separated by ⋄, but it does have some problem with newlines (which can be fixed by changing the first line to ⍎⍤1⎕FMT⍵).

APL (Dyalog Unicode), 38 37 35 30 bytes
⍎'F'~⍨'\+F' '-F'⎕R'(+-×)' '1-'

Try it online!
A tacit function which accepts a string.
Evaluation is done as per Rule 6: strict right to left, as per APL's evaluation.
-1 byte from Adám.
-2 more from Adám.
-5 bytes from Bubbler.
Explanation
⍎'F'~⍨'\+F' '-F'⎕R'(+-×)' '1-'
            '-F'⎕R        '1-'  regex replace '-F' with '1-'
      '\+F'     ⎕R'(+-×)'       regex replace '+F' with function to perform 1-((1-x)×(1-y))
 'F'~⍨                          remove any other Fs
⍎                               execute as APL code

Finally! Thank you.

I saw this challenge and knew you had to have already implemented it.

Do you know ⎕R can take multiple regexes and transformation patterns at once?

@Adám forgot about that, -1

But now you can make the whole thing a tacit function: ⍎r ⎕R t

A bit of math: {1-×/1-⍺⍵} → (+-×) (TIO)

APL (Dyalog Unicode), 27 24 bytes
Saved 3 bytes thanks to @Adám!
F←{⍺←1⋄⍺(×-⍣(2=⍺⍺2)⍺⍺)⍵}

Try it online!
Extends the language with a monadic operator F. Uses rule 6 (strict right-to-left). This fixes the issues Adám pointed out in the original answer.
⍺⍺ is the input function (+, -, ×, or ÷), ⍺ is the left argument (⍺←1 gives it a default value of 1), and ⍵ is the right argument. ×-⍣(2=⍺⍺2)⍺⍺, which Adám came up with, is applied to ⍺ and ⍵. It's equivalent to (⍺×⍵) -⍣(2=⍺⍺2) (⍺ ⍺⍺ ⍵). If ⍺⍺ is +, then 2=⍺⍺2 (2 = +2) is true. If so, ⍣ subtracts its right argument ⍺+⍵ from its left argument ⍺×⍵ (this is equivalent to 1-(1-⍺)×(1-⍵). Otherwise, we just return what's on the right side. If it's multiplication or division, it's the same as normal × or ÷. If it's fuzzy negation, then ⍺ is 1, so it'll be 1-⍵.

Issues

F←{⍺←1⋄⍺(×-⍣(2=⍺⍺2)⍺⍺)⍵}

It is simply applying - 0 or 1 times.

Let us continue this discussion in chat.

Nim, 106 bytes
type f=float
func`*~`(a,b:f):f=a*b
func`/~`(a,b:f):f=a/b
func`-~`(b:f):f=1-b
func`+~`(a,b:f):f=1- -~a* -~b

Try it online!
Adds the four operators to Nim. Since operator names can't contain letters, it uses a tilde ~ instead, which I consider a very fuzzy character. Precedence is the same as the corresponding normal operators.


text:
A 4x4 Challenge
There exists a brain game called Enumerate (which I made, based on Takuzu). Your challenge is to play this game.

Task
Solve a game of 4x4 Enumerate/Takuzu.

Receive a starting grid via STDIN or command line.
Output the solved grid via STDOUT or writing to file.

Rules
A game is characterized by a 4x4 board, made up of red and purple cells.

There must be the same number of red and purple cells in each row and column (2 red and 2 purple in each).
There must be no identical rows or columns.

Input
The starting grid will be given as a 16 character/byte string consisting of only 0, 1, and 2. Here is an example:
0001100002001200

1 represents a red cell and 2 represents a purple cell. All input boards will be solvable.

Note: If your language does not support string literal input, you may take input as an array of integers. Please state in your answer that this is the case. So there is no confusion, this is what said array should look like:
[0, 0, 0, 1, 1, 0, 0, 0, 0, 2, 0, 0, 1, 2, 0, 0]

No nested arrays are allowed.

Output
The solved board should be output in the same format as above; a 16 character/byte string, consisting of only 1 and 2. Here is the solution for the input above:
2121112222111212

Again, 1 represents a red cell and 2 represents a purple cell.

Bonuses
A -25 byte bonus is offered for any answer that outputs the solved board as an ASCII grid. Here is an example of the previously mentioned board.
2|1|2|1
-+-+-+-
1|1|2|2
-+-+-+-
2|2|1|1
-+-+-+-
1|2|1|2

A -50 bytes bonus is offered for any answer that outputs the solved board in color. This can be output as an image or colored text.
If colored text is chosen, the output should look like this:
2121
1122
2211
1212

However, if an image is the chosen output method, the resulting file should be 20x20 pixels, where each cell is a colored 5x5 pixel block. Here is an example:

Here are the color codes:
Red      -   #a73cba   OR   (167,  60, 186)
Purple   -   #f94a32   OR   (249,  74,  50)

Samples
In:  0020010100000100
Out: 1221212112122112

In:  0010000200121000
Out: 2211112221121221

In:  1000100102000000
Out: 1122122122112112

This puzzle is known as Takuzu, incidentally.

Thanks! I didn't know there was a formal name for it. Added that to the intro :) @Doorknob

Can we take the input as an array of 0, 1, and 2? What about a two-dimensional array?

Only if your language doesn't support string literal input (if there are any). I'll add that to the question. @ThomasKwa

Huh. I thought this game was called Unruly

@quintopia So did you also think Solo wasn't Sudoku, and Keen wasn't KenKen? :P

@Doorknob Solo is just an abbreviation of Sudoku, and I thought Keen was Kakuro or something like that. I thought Unruly was original to the puzzle pack, unlike those, but like several others. (I think Unruly is a better implementation though.)

All input boards will be solvable. Just 1 solution or could be more than 1? (Input 0000000000000001)

You can assume that there will be enough cells provided in each input to yield a single solution. @edc65

If the language supports strings, is it mandatory to use string input, or can numeric input be chosen?

String input is mandatory if the language supports it. @LuisMendo

For the -25% bonus, does the ASCII grid need to be output with the +-1 symbols? Or can it be just the 4x4 grid of numbers?

Has to include the symbols @LuisMendo

This is just begging for a Piet solution!

CJam (score 13)
With coloured text bonus, only printable characters: 64 chars - 50 = 14
l:~:L,Eb2*e!4m*_:z&{_M*L1$.e|.=1-!*_&,4=},~{27c'[@_4*27+'m@}f%N*

This can be improved by one char using a non-printable character: 27c'[@ becomes "^["\ where ^ represents character 27, giving a score of 13. xxd version:
0000000: 6c3a 7e3a 4c2c 4562 322a 6521 346d 2a5f  l:~:L,Eb2*e!4m*_
0000010: 3a7a 267b 5f4d 2a4c 3124 2e65 7c2e 3d31  :z&{_M*L1$.e|.=1
0000020: 2d21 2a5f 262c 343d 7d2c 7e7b 221b 5b22  -!*_&,4=},~{".["
0000030: 5c5f 342a 3237 2b27 6d40 7d66 254e 2a    \_4*27+'m@}f%N*

Straight solution with no bonus: 42 chars
l:~:L,Eb2*e!4m*_:z&{_M*L1$.e|.=1-!*_&,4=},

Online demo

With grid bonus: 59 chars - 25 = 34
l:~:L,Eb2*e!4m*_:z&{_M*L1$.e|.=1-!*_&,4=},~'|f*2N*'-4*'+***

Online demo

With image output, 83 chars - 50 = 33. Output is in netpbm format.
'P3NKSKS255Nl:~:L,Eb2*e!4m*_:z&{_M*L1$.e|.=1-!*_&,4=},~4f*M*:("§<ºùJ2":i3/f=4f*M*S*

Online demo

Shouldn't it be score 14?

@Cyoce, the version with only printable characters scores 14, but the version with an unprintable character scores 13.

okay. I didn't see that one.

CJam, 74-50=24 bytes (color output)
l:~:L;5ZbGm*{_L.-L.*:|!\[4/_z]_:::+e_6-!\__.&=**},s4/{"["\_~4*27+'m@}f%N*

I don't think this is very well-golfed, but it works! Try it here. Warning: slow.
l:~:L; reads a line of input into L. Then, 5Zb is [1 2], and we take the 16th Cartesian power (Gm*) of this list, to get all possible solutions [[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2] ...]. The filter {   }, contains the Takuzu logic.
I added a ANSI code color output bonus:

This doesn't work on the website, of course. There is an unprintable ESC byte in the string "[".

C, Score 278 257
(328 307 bytes - 50 bytes for coloured output, or 291 bytes without colour bonus)
t,b,c,u,r,p;v(g){for(b=0,u=59799;b<16;b+=4)u&(c=1<<(g>>b&15))?b=u:0,u|=c;return b>16;}main(i,a)char**a;{for(char*A=a[1];*A;p=p*2|*A++>49)r=r*2|*A==49;for(;++i<6e4;t=0){for(b=16;b--;)t|=(i>>b&1)<<b%4*4+b/4;if(!(p&i^p|r&~i^r|v(i)|v(t))){for(b=16;b--;)printf("\x1b[3%s%s",i&1<<b?"5m2":"1m1",b&3?"":"\n");break;}}}

This is a brute-force method which prints the first matching grid. It actually works on a 180-degree rotated grid to simplify some loops, and uses a lookup table (59799) to figure out which rows are valid. Internally all grids are just 16-bit numbers. It takes a single string input from its arguments.
Due to the escape codes used for colouring, you might want to reset your terminal styling after running this (execute printf "\x1b[0m")
Breakdown:
// Globals initialise to 0
t, // Transpose of current guess
b, // Bit counter for loops
c, // Current row value when validating
u, // Invalid row mask when validating
r, // Red squares mask (1s in input)
p; // Purple squares mask (2s in input)

// Validation function for rows (returns 0 if valid, shell-style)
v(g){
    for(b=0,u=59799;b<16;b+=4) // "magic" value 59799 is a map of invalid rows
        // For each row:
        u&(c=1<<(g>>b&15))?b=u:0,  // Check if row is valid
        u|=c;                      // Add row to mask (rows cannot be duplicates)
    return b>16; // b = <some massive number> + 4 if a check failed
}

main(i,a)char**a;{ // K&R style function declaration to save 2 bytes
    // Read input (in reverse to save some bytes when reading & printing)
    for(char*A=a[1];*A;
        p=p*2|*A++>49) // Find 2s (input is strictly 012) and go to next
        r=r*2|*A==49;  // Find 1s
    for(;++i<6e4;t=0){ // Brute-force grids (<3 and >=60000 are invalid anyway)
        for(b=16;b--;)t|=(i>>b&1)<<b%4*4+b/4; // Calculate transpose
        if(!(                           // Check...
            p&i^p|                      //  Matches input purples
            r&~i^r|                     //  Matches input reds
            v(i)|                       //  Rows are valid
            v(t)                        //  Columns are valid
        )){
            // Display grid (use ANSI escape codes for colour)
            for(;b--;) // b starts at 16 from last v() call
//              printf(b&3?"%c":"%c\n",(i>>b&1)+49); // no colour variant
                printf("\x1b[3%s%s",i&1<g{[o=?1,p=?2].repeated_permutation(16).find{|x|a=x.each_slice(4).to_a
t=a.transpose
a.uniq.size==4&&t.uniq.size==4&&(a+t).all?{|y|y.count(o)==2}&&x.zip(g.chars).none?{|y|y==[o,p]||y==[p,o]}}*''}

repeated_permutation, why must your name be so long? -_-
This simply goes through all possible solutions until one of them matches the input pattern.

C (function) (with gcc builtins), 283
This seemed like an interesting challenge to tackle in C.  Pretty sure it can be golfed more, but here's a start:
#define m(a,b)for(j=0;j<4;j++){l[j]=i&a<<j*b;if(__builtin_popcount(l[j])-2)goto l;for(k=0;k<j;k++)if(l[j]==l[k])goto l;}
i,j,k,l[4];f(char*s){for(i=0;i<65536;i++){m(15,4)m(4369,1)for(j=0;j<16;j++)if((!(i&1<<j)==s[j]-49)&&(s[j]!=48))goto l;for(j=0;j<16;j++)putchar(50-!(i&1<<j));l:;}}

Input passed as string to function f().  Output to STDOUT.
Try it online.

JavaScript (ES6), 263 300
g=>{[...g].map(c=>(t+=t+(c>1),u+=u+(c&1)),u=t=0);for(m=15,n=4369,i=0;i++<6e4;){for(x=y=i,s=new Set;x;x>>=4,y>>=1)[3,5,6,9,10,12,17,257,272,4097,4112,4352].map(v=>(x&m)==v|(y&n)==v&&s.add(v));if(s.size>7&!(i&u)&!(~i&t))return g.replace(/./g,c=>1+(i>>--p&1),p=16)}}

Given the constraints, the number of possible solution seems surprisingly small: 72
The whole board can be seen as a 16 bit number.
Allowed values for rows (masking 1111): 0011, 0101, 0110 and the inverted values 1100, 1010, 1001
Same for for columns, just with different masking and intermixed bits (masking 1000100010001): 0...0...1...1, 0...1...0...1, 0...1...1...0 and the inverted values
Note that rows and columns bit arrangements are different, so to check for uiniqueness you can add both rows and columns to a set and verify that the set size is == 8.
Code to enumerate all possible solutions in a grid 4x4
for(m=0xf,n=0x1111,t=i=0;i<0x10000;i++)
{
  // loop condition: row != 0, as valid values have 2 bits set in each row
  for(x=y=i,s=new Set; x; x>>=4, y>>=1)
    [3,5,6,9,10,12,17,257,272,4097,4112,4352].map(v=>((x&m)==v||(y&n)==v)&&s.add(v))
  if (s.size==8)
    console.log(++t,i.toString(2))
}

Test

F=g=>{ // input as a string
  [...g].map(c=>(t+=t+(c>1),u+=u+(c&1)),u=t=0);
  for(m=15,n=4369,i=0;i++<6e4;) // max valid is 51862
  {
    for(x=y=i,s=new Set;x;x>>=4,y>>=1)
      [3,5,6,9,10,12,17,257,272,4097,4112,4352].map(v=>(x&m)==v|(y&n)==v&&s.add(v));
    if(s.size>7&!(i&u)&!(~i&t))
      return g.replace(/./g,c=>1+(i>>--p&1),p=16)
  }
}

// Basic test

console.log=x=>O.textContent+=x+'\n'

;[
['0020010100000100','1221212112122112'],
['0010000200121000','2211112221121221'],
['1000100102000000','1122122122112112']
].forEach(t=>{
  var i = t[0], x=t[1], r=F(i);
  console.log(i+' -> '+r+(r==x?' OK':' Fail (Expected '+x+')'))
})

0x10000 can be replaced with 65536.

For me, only the first test works.

For me it works with Firefox. @zyabin101

@edc65 I have Firefox, too.

??? Can't explain ... @zyabin101