text:
Print me a scale
Oh no! I have a theory test soon and I don't remember the scales yet! Help me remember my major scales by printing the following:
7♯ - C♯ D♯ E♯ F♯ G♯ A♯ B♯ C♯
6♯ - F♯ G♯ A♯ B  C♯ D♯ E♯ F♯
5♯ - B  C♯ D♯ E  F♯ G♯ A♯ B
4♯ - E  F♯ G♯ A  B  C♯ D♯ E
3♯ - A  B  C♯ D  E  F♯ G♯ A
2♯ - D  E  F♯ G  A  B  C♯ D
1♯ - G  A  B  C  D  E  F♯ G
0  - C  D  E  F  G  A  B  C
1♭ - F  G  A  B♭ C  D  E  F
2♭ - B♭ C  D  E♭ F  G  A  B♭
3♭ - E♭ F  G  A♭ B♭ C  D  E♭
4♭ - A♭ B♭ C  D♭ E♭ F  G  A♭
5♭ - D♭ E♭ F  G♭ A♭ B♭ C  D♭
6♭ - G♭ A♭ B♭ C♭ D♭ E♭ F  G♭
7♭ - C♭ D♭ E♭ F♭ G♭ A♭ B♭ C♭

This is code-golf, so shortest code wins. You may use # and b symbols instead of ♯ and ♭ respectively.
Edit: If you are using ♯ and ♭ signs, you only have to count them as a single byte each. This is to not give an unfair disadvantage.

Is a leading newline in the output acceptable?

I can't believe there is no Fugue answer yet!

How strict is the output format? Can we ouput an an array of lines? How about a 2D-array with each element being a single note or character?

@Shaggy I don't know what the standard is for Kolmogorov complexity questions, so I'll say no.

♭: so much for monospace fonts in code elements

Charcoal, 66 65 bytes (if using # and b)
↑⮌…0¦8‖Ｏ⸿×⁷♭Ｍ→×⁷♯→⸿⸿¹⁵ＦＥ⁸﹪⊕⊗ι⁷«⸿⸿✂×³FCGDAEBι⁺¹⁵ι→⸿✂⭆♭ ♯×⁷κι⁺¹⁵ι»⟲

Try it online! Link is to verbose version of code. Explanation:
↑⮌…0¦8‖Ｏ

Print the characters 0 to 7 reversed, then reflect with overlap. Lists normally print downwards, so printing upwards actually prints rightwards; we'll rotate everything into place at the end.
⸿×⁷♭Ｍ→×⁷♯

Start a new line and print 7 flats and 7 sharps with a gap in between.
→⸿⸿¹⁵

Leave a blank line and print 15 -s.
ＦＥ⁸﹪⊕⊗ι⁷«

Take the numbers 0 to 7, double them, add 1, then reduce modulo 7. Loop over the result.
⸿⸿✂×³FCGDAEBι⁺¹⁵ι

Leave a blank line and then take a 15-character slice of the triplicated string of notes starting at the current value.
→⸿✂⭆♭ ♯×⁷κι⁺¹⁵ι

On the next line take a 15-character slice of flats, spaces and sharps, each repeated 7 times.
»⟲

After printing all the notes, rotate everything into place.

You may count the ♯ and ♭ as 1 byte each rather than 3.

This is genius, I cannot compete with this solution.

Python 3, 135 bytes
counting ♯ and ♭ as 1 byte each
thanks to Zacharý for -6 bytes.
for i in range(15):k=' ♯♭'[(i<7)-(i>7)]+' -';print(str(i-7)[-1]+k,*[v+k[a+8>i>a]for a,v in zip([1,3,5,0,2,4,6,1],('CDEFGAB'*8)[i*3:])])

Try it online!

Ruby, 113 bytes (131 126 108 105 with # and b)
-7.upto(7){|i|print i.abs," ♭♯"[i<=>0]," - ",(4..11).map{|j|("FCGDAEB"*3)[k=j*2%7-i]+"♭♯ "[~k/7]}*" ",$/}

Try it online!
Ruby, 116 bytes (108 with # and b)
Try it online!
Ruby, 126 bytes (118 with # and b)
Try it online!
Ruby, 131 bytes with # and b
Try it online!

You need to print the Unicode sharp and flat characters because Ruby supports them.

I think you should switch to the 124-byte solution. The metric here is bytes, not characters!

You may count the ♯ and ♭ as 1 byte each rather than 3.

GNU sed, 148 144 + 1 = 145 bytes
+1 byte for -r flag.
s/^/ 7# - C# D# E# F# G# A# B# \n65432101234567/
:
s/((.).(. - )((\S..){3})([^-]+)..\n)([0-7])/\1\2\7\3\6\2 \4\n/
s/ 0#/b0b/
t
s/^.//gm
s/0b/0 /

Try it online!
Explanation
First, insert a template of sorts:
 7# - C# D# E# F# G# A# B#
65432101234567

Note the leading and trailing space on the first line.
In a loop, take the first number from the last line and replace it with parts of the second-to-last line like so:
 7# - C# D# E# F# G# A# B#
│ └┬─┘└───┬───┘└───┬────┘
2  3      4        6
│  │      └────────│──┐
├──│────────────┐  │  │
│  │      ┌─────│──┘  │
│ ┌┴─┐┌───┴────┐│ ┌───┴───┐
 6# - F# G# A# B  C# D# E#

As you can see, the initial space (capture 2) is used to replace the character after the B.
When the 0 is reached, replace the initial space with b. The loop continues, but instead of replacing #s with spaces, on each subsequent line a space is replaced with a b.
Finally, do a little cleanup: Remove the leading character from each line and replace 0b with 0.

Befunge, 134 132 130 bytes
<v:,,," - ",g2+!!\`0::,+*86*-1*2`0::p00:<75
@>4*65*+81v>55+,$$\:00g0`!\9p3+7%\1-:8+#^_
 b#"A"%7:\_^#:-1,*84,g2*+1`0g00!!g9%7:\+1,+

Try it online!
Explanation

We begin with an outer loop counting down from 7 to -7. We'll call this the row number.
For each row, we start by writing out '0'+abs(row) (the scale number), and then calculate (row>0)+(row!=0) to lookup whether it's natural, sharp, or flat in the table  #b (you'll see this at the start of the third line of code).
We then calculate the scale's start note, n, as 30 + row*4. This will ultimately be mod 7, so think of it as the repeating sequence 2,5,1,4,0,3,6 (i.e. CFBEADG).
Our inner loop, i, then counts down from 8 to 1, for the eight notes in the scale, incrementing n on each iteration.
The letter of the note is simply 'A' + n%7. Whether it is sharp or flat is determined by looking up i%7 in a table. The table is initially all true, since the first scale is all sharps.
After each row is output, though, we update the table by toggling one value. On the first iteration we'll toggle the value at offset 5, but each loop the offset is adjusted by (offset+3)%7.
On the first half of the output, when the row is greater than zero, we're toggling these table values to false. On the second half of the output, when the row is less than or equal to zero, we're setting them back to true.

Only can you actually golf in Befunge.

Bubblegum, 107 bytes
Bubblegum threshold
00000000: 4dca a90d 0301 1443 41ee 2a9e f4b1 a5ec  M......CA.*.....
00000010: 8d73 f7e1 fe8b 48a0 e968 aec1 3c87 d7f0  .s....H..h..<...
00000020: 1e3e c377 b80f 8ff9 a3ce c165 74d4 31b8  .>.w.......et.1.
00000030: 8c8a da07 1751 4fdb e022 ea69 1d5c 443d  .....QO..".i.\D=
00000040: 2d83 8ba8 a71b b888 7a5a 828b 524f 6b70  -.......zZ..ROkp
00000050: 51fa 690b 2e4b 47ed c165 e9a8 23b8 2c1d  Q.i..KG..e..#.,.
00000060: 7506 97a5 a3ae e0b2 74d4 0f              u.......t..

Try it online!

C,  212   189   186  185 bytes
Thanks to @Jonathan Frech for saving a byte!
#define N n>0?35:98:32);
f(i,n){for(n=8;--n+8;puts(""))for(i=-1,printf("%d%c -",abs(n),n?N++i<8;)printf(" %c%c",(n*4+65+i)%7+65,"\377\277\273\233\231\211\10\0@Ddfv\367\377"[n+7]&1<0 ? 35 : 98 : 32);
f(i, n)
{
    for (n=8; --n+8; puts(""))
        for (i=-1, printf("%d%c -", abs(n), n?N ++i<8;)
            printf(" %c%c",
                (n*4+65+i)%7 + 65,
                "\377\277\273\233\231\211\10\0@Ddfv\367\377"[n+7] & 1<- can be +.

@JonathanFrech Thanks!

Suggest i=~!printf instead of i=-1,printf and \b instead of \10

JavaScript (ES6), 130 124 bytes
Or 128 121 bytes with a leading newline.

f=(y=14,x=8)=>x?f(y,x-1)+' '+'BCDEFGA'[(y*3+x)%7]+'# b'[(x*5%7+y)/7|0]:(y?f(y-1)+`
`:'')+`${y<7?7-y+'#':y>7?y-7+'b':'0 '} -`

O.innerText = f()

Jelly,  57 56 55  54 bytes
-1 byte thanks to EriktheOutgolfer (use 7ŒR to replace -7r7)
_Ṃị“ b#”
=”B+\Çż
×3⁵+€ịØAḣ7¤ḊḊÇ€Z
7ŒRµṠÑżAW€żÇj€”-UK€Y

A full program printing the desired output (using #, b).
Try it online!
How?
_Ṃị“ b#” - Link 1, getSharpsFlatsOrSpaces: list of integers
 Ṃ       - minimum (of the input list)
_        - subtract (from the input list) -- for our purposes this resets whatever our
         -       1st value is to 0, since our inputs are always monotonically increasing
   “ b#” - literal list of characters = [' ', 'b', '#']
  ị      - index into (1-based and modular)

=”B+\Çż - Link 2, addSharpsFlatsOrSpaces: list of characters  e.g."CFBEADGCFBEADGC"
 ”B     - literal character 'B'
=       - equals? (vectorises)                      [0,0,1,0,0,0,0,0,0,1,0,0,0,0,0]
    \   - cumulative reduce with:
   +    -   addition                                [0,0,1,1,1,1,1,1,1,2,2,2,2,2,2]
     Ç  - call the last link (1) as a monad                       "##       bbbbbb"
      ż - zip (with input) ["#C","#F"," B"," E",...," F","bB","bE","bA","bD","bG","bC"]

×3⁵+€ịØAḣ7¤ḊḊÇ€Z - link 3, getNoteLetters: list of integers          e.g. [-7,-6,...,6,7]
×3               - multiply by three       [-21,-18,-15,-12,-9,-6,-3,0,3,6,9,12,15,18,21]
  ⁵              - literal ten                                                         10
   +€            - add for €ach (in [1,10])   [[-20,...,22],[-19,...,23],...,[-11,...31]]
          ¤      - nilad followed by link(s) as a nilad:
      ØA         -   yield uppercase alphabet                "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        ḣ7       -   head to index seven                                        "ABCDEFG"
     ị           - index into ["ADGCFBEADGCFBEA","BEADGCFBEADGCFB","CFBEADGCFBEADGC",...]
           Ḋ     - dequeue    ["BEADGCFBEADGCFB","CFBEADGCFBEADGC","DGCFBEADGCFBEAD",...]
            Ḋ    - dequeue    ["CFBEADGCFBEADGC","DGCFBEADGCFBEAD","EADGCFBEADGCFBE",...]
             Ç€  - call the last link(2) as a monad for €ach
                 -    [[["#C","#F"," B"," E",...," F","bB","bE","bA","bD","bG","bC"],...]
               Z - transpose           [["#C","#D",...,"#C"],["#F",..." B",...,"#F"],...]

7ŒRµṠÑżAW€żÇj€”-UK€Y - Main link: no arguments
7ŒR                  - absolute range of seven     [-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7]
   µ                 - start a new monadic chain (call that r)
    Ṡ                - sign (of r)                 [-1,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1]
     Ñ               - call the next link (1) as a monad                "####### bbbbbbb"
       A             - absolute value (of r)              [7,6,5,4,3,2,1,0,1,2,3,4,5,6,7]
      ż              - zip                      [[7,'#'],[6,'#'],...,[0,' '],...,[7,'b']]
        W€           - wrap €ach        [[[7,'#']],[[6,'#']],...,[[0,' ']],...,[[7,'b']]]
           Ç         - call the last link (3) as a monad (with r)      see link 3 example
          ż          - zip                     [[[['#',7]],["#C","#D",...,"#C"]],
                                                [[['#',6]],["#F",...," B",..."#F"]], ...]
              ”-     - literal character '-'
            j€       - join for €ach            [[['#',7],'-',"#C","#D",..."#C"],
                                                 [['#',6],'-',"#F",...," B",..."#F"],...]
                U    - upend (reverse each)     [[[7,'#'],'-',"C#","D#",..."C#"],
                                                 [[6,'#'],'-',"F#",...,"B ",..."F#"],...]
                 K€  - join €ach with spaces            [[7+"# - C# D# ... C#"],
                                                         [6+"# - F# ... B  ... F#"], ...]
                   Y - join with newlines
                     - implicit print to STDOUT

I did have faith in Jelly for this one.

Java 8, 255 bytes
Counting ♯ and ♭ as 1 byte each.
v->{String r="",t="GABCDEF";for(int i=-8;++i<8;r+="\n"){r+=(i<0?-i+"♯":i>0?i+"♭":"0 ")+" - ";for(String c:((t=t.substring(3)+t.substring(0,3))+t.charAt(0)).split(""))r+=c+("BEADGCF".substring(i<0?7+i:i).contains(c)?i<0?"♯":" ":i>0?"♭":" ")+" ";}return r;}

Explanation:
Try it online.
v->{                   // Method with empty unused parameter and String return-type
  String r="",         //  Result-String, starting empty
         t="GABCDEF";  //  Temp-String `t`, starting at "GABCDEF"
  for(int i=-8;++i<8;  //  Loop from -7 to 7 (inclusive); range (-8;8) == [-7;7]
      r+="\n"){        //    After every iteration: append the result with a new-line
    r+=                //   Append the result-String with:
       (i<0?           //    If `i` is negative:
         -i+"♯"        //     Append the absolute value of `i` + a literal "♯"
        :i>0?          //    Else-if `i` is positive:
         i+"♭"         //     Append `i` + a literal "♭"
        :              //    Else (`i` is 0):
         "0 ")         //     Append a literal "0" + space
     +" - ";           //   And then append a literal " - "
  for(String c:((t=t.substring(3)+t.substring(0,3))
                       //  Split String `t` in the middle,
                       //  and swap the two parts (i.e. "GABCDEF" becomes "CDEFGAB")
                +t.charAt(0))
                       //  Then append the first character
                .split(""))
                       //  And loop over each character:
     r+=c+             //   Append the result-String with this character, plus:
          ("BEADGCF".substring(i<0?
                       //    If `i` is negative
            7+i        //     Take the last `-i` characters of "BEAFGCF"
           :           //    Else (`i` is 0 or positive)
            i)         //     Take the last `7-i` characters of "BEAFGCF"
          .contains(c)?//    And if these last characters contain the current character:
            i<0?       //     And `i` is negative:
             "♯"       //      Append a literal "♯"
            :          //     Else (`i` is 0 or positive)
             " "       //      Append a space
          :i>0?        //    Else-if `i` is positive
            "♭"        //     Append a literal "♭"
          :            //    Else:
           " ")        //     Append a space
      +" ";}           //   And then append a space
  return r;}           //  Return the result-String

CJam, 109 106 94  bytes
{_0={_z/}|" b#"=a}:A;15,{X7-_zs\A+" - "+o7,0+{YX+7%65+c"2461357"Y=aiX\-_7,#){;0}&AS++o}fYNo}fX

Try it online


text:
Advent Challenge 3: Time to remanufacture the presents!
<< Prev Next >>
Unfortunately, Santa was not able to catch the elves in time! He has to go back to manufacturing presents now. Since the elves are definitely not Santa's slaves, he has to figure out the expenses for how much to pay them.
Challenge
Given some information for the presents, determine the cost of manufacturing all of them.
Each present is put in a cardboard box and wrapped with wrapping paper, with a ribbon wrapped around it at the very end. The wrapping paper is magical and requires no overlap, so the amount of wrapping paper used is precisely equivalent to the surface area of the box. All presents are rectangular prisms because that way Santa can store them more compactly. The ribbon goes around in all three directions (so the length of ribbon used for wrapping is equal to the sum of the three different perimeters).
The present itself has a known cost, fortunately. Cardboard costs $1 per square meter, and wrapping paper costs $2 per square meter. (Hint: You can just multiply the surface area by 3 :P). Ribbon costs $1 per meter.
Format Specifications
The input will be given as a list of presents where each present contains the cost of the actual item and the three dimensions of the present box. Your output should be the total cost required.
To be exact, the formula for the cost of a single present with item cost c and dimensions x, y, and z is c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z).
Test Cases
[[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]] -> 11866
[[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]] -> 8854
[[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]] -> 4853
[[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]] -> 9717
[[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]] -> 9418
[[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]] -> 8178
[[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]] -> 9766
[[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]] -> 7118
[[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]] -> 8007
[[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]] -> 9331

Rules

Standard Loopholes Apply
The input and output may be given and presented in any reasonable format
You must take the input as a list of presents, not 4 lists of the attributes.
This is a code-golf, so the shortest answer in bytes wins
No answers will be accepted

Hopefully this challenge is easier than the previous ones :P
Note: I drew inspiration for this challenge series from Advent Of Code. I have no affiliation with this site
You can see a list of all challenges in the series by looking at the 'Linked' section of the first challenge here.

Have we lost the "additional 1 meter for the ribbon" in c + 6 * (x * y + y * z + z * x) + 4 * (x + y + z)

@Graham Yeah, turns out I forgot to add that in. Removing from specifications.

@cairdcoinheringaahing Sorry for the confusion. I decided to stick with the original idea and I have edited my test cases to reflect that as well. Thanks!

@dzaima Yes, the test cases were done last-minute, sorry about that :P I have fixed them.

@JonathanFrech Done, thanks. (See ^ and ^^)

I've been enjoying this series of challenges but (admittedly, after a good few beers!) this one just seems like which language can execute the closed formula in the fewest bytes without any room for creative golfing so, in this instance, no +1 from me.

@Shaggy Glad you've been enjoying it up to this point! This one was admittedly not very well thought out (given also by the fact that I made at least two internal consistency errors); it was made very last-minute. Completely understandable :) Hopefully I'll plan them out better in the future :P I should probably start writing them out the night before :P

To the extra close-voter after I clarified the existing commented points, what more should I clarify?

JavaScript (ES6), 58 bytes
a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

Test cases

let f =

a=>a.reduce((p,[c,x,y,z])=>p+c+6*(y*z+x*(y+=z))+4*(x+y),0)

console.log(f([[7, 8, 6, 7], [7, 7, 5, 5], [8, 9, 6, 7], [6, 5, 10, 10], [5, 9, 6, 7], [9, 9, 10, 6], [8, 10, 10, 6], [6, 5, 7, 9], [7, 10, 8, 8], [5, 9, 9, 10]])) // 11866
console.log(f([[5, 10, 8, 9], [8, 8, 5, 8], [8, 7, 7, 6], [5, 9, 9, 10], [9, 7, 5, 8], [9, 8, 9, 5], [7, 5, 6, 7], [5, 7, 6, 10]])) // 8854
console.log(f([[9, 8, 8, 8], [10, 9, 8, 5], [10, 7, 5, 5], [10, 10, 6, 6], [8, 5, 8, 7]])) // 4853
console.log(f([[7, 7, 8, 10], [8, 10, 7, 8], [9, 7, 7, 8], [8, 5, 10, 5], [6, 6, 6, 8], [8, 9, 7, 5], [8, 5, 6, 5], [7, 9, 8, 5], [10, 10, 10, 8]])) // 9717
console.log(f([[5, 8, 9, 7], [5, 8, 7, 10], [5, 7, 7, 6], [5, 5, 5, 6], [9, 9, 5, 7], [5, 6, 7, 8], [8, 5, 8, 7], [6, 9, 5, 5], [10, 10, 9, 10]])) // 9418
console.log(f([[9, 9, 7, 10], [5, 8, 7, 9], [5, 5, 9, 8], [10, 5, 9, 10], [8, 5, 10, 7], [8, 9, 5, 5], [5, 10, 6, 10]])) // 8178
console.log(f([[5, 9, 5, 8], [7, 8, 10, 6], [7, 10, 7, 10], [8, 9, 7, 5], [5, 7, 8, 6], [9, 9, 6, 10], [6, 5, 9, 9], [7, 9, 9, 9]])) // 9766
console.log(f([[7, 10, 5, 10], [8, 10, 8, 9], [8, 6, 7, 8], [6, 9, 8, 5], [6, 7, 10, 9], [7, 6, 5, 8]])) // 7118
console.log(f([[10, 6, 7, 5], [5, 9, 5, 9], [9, 7, 8, 5], [6, 6, 9, 9], [9, 9, 6, 9], [10, 5, 8, 9], [7, 5, 6, 10], [9, 10, 5, 5]])) // 8007
console.log(f([[8, 10, 7, 8], [9, 10, 5, 8], [6, 7, 5, 6], [10, 10, 9, 8], [7, 5, 8, 9], [10, 10, 6, 7], [10, 8, 9, 10], [5, 10, 5, 5]])) // 9331

How?
The only trick used here is to factorize (xy + xz) as x(y + z) and re-use the sum (y + z) in the last part of the formula.
a => a.reduce(                    // for each present in a:
  (s, [c, x, y, z]) =>            //   s = sum, [c, x, y, z] = present parameters
    s +                           //   add to s:
    c +                           //     c
    6 * (y * z + x * (y += z)) +  //     6(yz + x(y + z))
    4 * (x + y),                  //     4(x + (y + z))
  0                               //   initial sum = 0
)                                 // end of reduce()

Mathematica, 34 bytes
Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&

-10 bytes from @alephalpha
Try it online!

Tr[#+6#2(+##3)+6##3+4(+##2)&@@@#]&

Python 3, 56 bytes
lambda*a:sum(c+(6*x+4)*(y+z)+6*y*z+4*x for(c,x,y,z)in a)

Try it online!

-2 bytes thanks to Mr. Xcoder!
-15 bytes thanks to notjagan!
-1 byte thanks to Alix Eisenhardt!

C (gcc), 104 100 99 93 bytes

Saved four five eleven bytes thanks to PrincePolka.

t,x,y,z;f(A,a)int*A;{for(t=0;a--;)t+=*A+++6*((x=*A++)*(y=*A++)+(z=*A++)*(x+=y))+4*(x+z);t=t;}

Try it online!
Takes a list of present attributes (list length divisible by four) and an integer specifying the number of presents. Returns the cost of manufacturing all presents.

100 bytes if it's not required to work more than one you can shave of j=t=0 ,

also in the calculation you can rearrange to save one byte like so

@PrincePolka Thank you. Per consensus, a function has to work multiple times, so j=t=0 has to stay. I could not quite figure out how to rearrange the calculation to save a byte; it would help if you linked to a complete version of the code with your golf implemented.

99 bytes

@PrincePolka Thanks a lot.

93 bytes I see now that j is unnecesary, and you can just use a

@PrincePolka Thanks again; counting down the array length seems way more golfy than using an incrementing index.

Jelly, 25 bytes
Ḣɓ;1ị$$ṡ2P€S×6+⁸S×4¤+
Ç€S

Try it online!

05AB1E, 17 bytes
vyćsO4*y¦æ2ùPO6*O

Try it online!
Explanation
v                  # for each present y
 yć                # extract the head (cost)
   s               # swap the dimensions to the top
    O4*            # sum and multiply by 4
       y¦          # push y with the head (cost) removed
         æ         # compute the powerset
          2ù       # keep only elements of length 2
            PO     # product and sum
              6*   # multiply by 6
                O  # sum everything

Clean, 64 bytes
import StdEnv
f l=sum[c+6*(x*y+y*z+z*x)+4*(x+y+z)\\[c,x,y,z]<-l]

Try it online!

Excel, 60 bytes
Input taken from Columns A to D, new row per present.  Formula in any other column.
=SUMPRODUCT(A:A+6*(B:B*C:C+C:C*D:D+B:B*D:D)+4*(B:B+C:C+D:D))

You can drop 2 bytes by transferring this to Google Sheets, and dropping the terminal ))

Pyth, 39 bytes
u+G++hH*6++*@H1@H2*@H1@H3*@H2@H3*4stHQ0

Try it online!
Takes input as a string representation of a nested list and sums over the cost formula.

source: Stack Exchange

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

sort: votes


text:
Happy Birthday, Finland!
Introduction
As is known, in 2017, Finland celebrates its 100 years of independence. To mark the occasion, it is your job to produce a Finnish flag for everyone's enjoyment.
Challenge
Create a program or a function that produces the flag of Finland (the grey border is there for presentation purposes only):

Flag specifications

The ratio of the flag is 18:11, with the cross being 3 units thick, giving a horizontal ratio set of 5:3:10 and a vertical ratio set of 4:3:4.
The picture must be at least 180 x 110 pixels in size, or in case of ASCII art, 90 x 55 characters.
There is no official RGB colour for the blue, but use the closest approximation of (0, 53, 128). If your system doesn't support RGB values, use blue.
For the white colour, use RGB (255, 255, 255) or white.

Not so fast
As drawing the Finnish national flag would be simpler than last year's Icelandic challenge, we'll have to ramp up the difficulty a bit. Given that Finland's Independence Day is on 6 December, the decimal number 100 must appear somewhere on the flag when the date in Finland (UTC+02:00) is 2017-12-06 or later (your code should not assume that the machine it's running on is set to a particular timezone). Before the date, the number must not be there. The number must be printed in black (RGB (0, 0, 0) or black) but its placement and font parameters are up to you.
An example of such a render (again, ignore the border):

For testing purposes, it would be nice to include two additional versions of your solution, one with a fixed date in the past and one in the future.
Rules
Standard loopholes are forbidden, as are built-in flag images/libraries. Also, your code must not take any input.
Finns don't like small talk, and this is code-golf, so don't waste characters!

Should we just use space and # in case of ASCII art? And then insert the characters 100 somewhere?

Can we take the date in Finland as input for systems lacking an internal wall clock or not implementing the timezone? I'm occasionally posting answers in GFA-Basic (Atari ST, no timezone) or CP-1610 assembly (Intellivision, no date/time at all) and we have answers on some other old-school platforms from time to time which are usually pretty good at drawing things like that but seem to be disqualified here because of the date issue.

@Arnauld: Gosh, I never thought anyone would use such systems. I appreciate your predicament but would that leave others at a disadvantage? I think allowing the input would leave you with just a simple integer comparison. Would a non-competing entry without the time aspect be out of the question?

@Antti29 Honestly, I can't think of any good solution and it's too late to do any major update to the rules. Unless someone comes with a really satisfying suggestion, I think these systems simply cannot compete here. (I saw the challenge in the sandbox and didn't think about that. My bad.)

Is the other Finnish flag allowed?

Funny that this disqualifies PostScript... there are no dates in PostScript, so it's impossible to what you ask.

@Arnauld (cc Antti29) a compromise for languages without a built-in clock would be to give the program a time and a corresponding time zone as input. That would put those languages exactly where others are, i.e. they can get the current time, but they don't know what time zone it's in and need to convert it appropriately.

C (Windows), 361 bytes
#import<time.h>
#import<windows.h>
C(x){SetConsoleTextAttribute(GetStdHandle(-11),x);}F(I,N,l,a,n,d)time_t n;struct tm*d;{system("mode 90,65");time(&n);d=gmtime(&n);n=d->tm_year<<24|d->tm_mon<<16|d->tm_mday<<8|d->tm_hour;for(a=l=I=15;I++<70;a=l=I<35|I>49?15:9)for(N=n>1963656468&I<17?C(240),printf("100"):0;N++<90;a=N-25?a:9,a=N-40||l==9?a:15)C(a),putchar(70);}

Unrolled:
#import <time.h>
#import <windows.h>

C(x)
{
    SetConsoleTextAttribute(GetStdHandle(-11),x);
}

F(I,N,l,a,n,d) time_t n;struct tm*d;
{
    system("mode 90,65");

    time(&n);
    d = gmtime(&n);
    n = d->tm_year<<24 | d->tm_mon<<16 | d->tm_mday<<8 | d->tm_hour;

    for(a=l=I=15; I++<70; a=l=I<35|I>49?15:9)
        for(N=n>1963656468&I<17?C(240),printf("100"):0; N++<90; a=N-25?a:9,a=N-40||l==9?a:15)
            C(a), putchar(70);
}

Output:

Output when UTC time >= 2017-12-05-22-00:

Add the following in the code after d=gmtime(&n); to try it:
d->tm_year = 117;
d->tm_mon = 11;
d->tm_mday = 5;
d->tm_hour = 21;

Cute variable names!

PHP + SVG(HTML5), 147 137 123 bytes
SVG code by Neil
https://codegolf.stackexchange.com/a/149850/66061
<svg><path d=180v110 fill=#fff></path><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580></path><?=time()<1512511200?:'<text x=9 y=15>100';

Update: Thanks to Shaggy for helping me save 10 bytes.
<svg><path d=180v110 fill=#fff /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580 /><?=time()<1512511200?:'<text x=9 y=15>100';

Update 2: Smart idea by Ismael Miguel, thanks for saving 14 bytes
<svg><path d=180v110 /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580 /><?=time()<1512511200?:'<text y=19>100';

Normal

After 6th Dec +2 hours

So time() gives UTC?

When is 1512525600?

1512525600 is 2017-12-06T02:00:00+00:00 in ISO 8601 @Adám
and yes, time() is timezone independent.

Röda, 252 250 bytes
{s={|w,h|[` width="$w" height="$h" `]}r=`><rect`f=`" fill="#003580"/`
[`<svg`,s(18,11),r,s(18,11),`fill="#fff"/`,r,s(18,3),`y="4$f`,r,s(3,11),`x="5$f>`]
[`<text y="9" font-size="2">100</text>`]if{}|[[exec("date","+%s")]&"">="1512511200
"]
[`</svg>`]}

Try it online!

The audacity! You have solved a Finnish challenge with a Swedish-named language.

@Antti29 I don't know much about the language, but the git site seems to be pretty Finnish. Maybe it's a Finnish-named language after all (and it's just a coincidence that it coincides with the Swedish name for "red").

@Arthur It's named after the Swedish word, there is no such word in Finnish. The git contains Finnish because I'm Finnish-speaking.

@Arthur: I'm afraid you'll need to delve into the Finnish mindset to fully appreciate my comment :)

@fergusq Well, if it is from the man who actually named the language, then I guess there is no higher authority. However, even with the knowledge that "röda" isn't a Finnish word, I maintain that my previous comment was plausible. Language names don't have to be actual words. Also, while I may not be on the inside of it, I am well aware of the antagonism that Finns have against Swedes, with the occupation history, and Swedish being mandatory in schools as one of several constant reminders.

@fergusq Why didn't you call it "Punainen" or something?

@fergusq How does this handle the time zone offset when run somewhere else than in UTC+2?

@fergusq It looks to me like this only inserts the "100" if it is Finland's centennial, and not thereafter. Maybe = should be >=?

@Adám Should be now fixed. About naming: "Röda" is shorter and sounds more cool.

@Antti29 Isn't Swedish also an official language in Finnland?

@PaŭloEbermann: Unfortunately.

@PaŭloEbermann Some people in Finland do indeed antagonize the Swedish language, which in my opinion is pointless. It's a kind of meme to oppose Swedish and in reality most of us are very proud of the rich culture we have, including our national languages.

C#, 407 400 277 bytes
Weird how ForegroundColor =0 is allowed
Saved 1 byte thanks to TuukkaX
Saved 67 bytes thanks to Adam
()=>{for(int x=0,y;x<90;x++)for(y=0;y<55;y++){BackgroundColor=(ConsoleColor)15;if(x>24&x<41|(y>19&&y<36))BackgroundColor=(ConsoleColor)9;SetCursorPosition(x,y);Write(' ');}if(new DateTime(2017,12,5,22,0,0)<DateTime.UtcNow){SetCursorPosition(1,1);ForegroundColor=0;Write(100);}}

ungolfed for testing:
using System;
using static System.Console;
class P
{
    static void Main()
    {
        Action func = () =>
        {
            for (int x = 0,y; x < 90; x++) for (y=0; y < 55; y++)
                {
                    BackgroundColor = (ConsoleColor)15;
                    if (x > 24 & x < 41 | (y > 19 && y < 36))
                        BackgroundColor = (ConsoleColor)9;
                    SetCursorPosition(x, y);
                    Write(' ');
                }

            if (new DateTime(2017, 12, 5, 22, 0, 0) < DateTime.UtcNow)
            {
                SetCursorPosition(1, 1); ForegroundColor =0; Write(100);
            }
        };
        func();
        ReadLine();
    }
}

for testing 100:
using System;
using static System.Console;
class P
{
    static void Main()
    {
        Action func = () =>
        {
            for (int x = 0,y; x < 90; x++) for (y=0; y < 55; y++)
                {
                    BackgroundColor = (ConsoleColor)15;
                    if (x > 24 & x < 41 | (y > 19 && y < 36))
                        BackgroundColor = (ConsoleColor)9;
                    SetCursorPosition(x, y);
                    Write(' ');
                }

            if (new DateTime(2017, 12, 2, 22, 0, 0) < DateTime.UtcNow)
            {
                SetCursorPosition(1, 1); ForegroundColor =0; Write(100);
            }
        };
        func();
        ReadLine();
    }
}

ForegroundColor = 0 is allowed because the literal 0 is convertible into any enum type, as written in the C# specification.

Python 2, 247 246 230 210 189 bytes
import time
print'P3',180,110,255
w,b='255 '*3,'0 52 128 ';B=['0 '*3,w][time.gmtime()<(2017,12,5,22)]
a=w*40+b*30+w*100
x=w*10+a;y,z=w+B+w+B*3+w+B*3+a,(w+B)*5+a
print y+z+y+x*37+b*5400+x*40

Try it online!
Prints a .ppm image:
Normal flag

Flag with 100

Can datetime.utcnow()+timedelta(hours=2)<datetime(2017,12,06) be replaced with datetime.utcnow()>=datetime(2017,12,05,22,0,0) or something similar?

Use time.gmtime instead for tuple comparisons (see my answer)!

[time.time()>1512514800]

Mathematica, 129 bytes
If[AbsoluteTime@Date[]<3721507200,s="",s=100];Graphics@{s~Text~{9,9},RGBColor[0,.2,.5],{0,4}~(R=Rectangle)~{18,7},{5,0}~R~{8,11}}

before..

after..

you can always test it on Wolfram Sandbox
(paste the code and hit Shift-Enter)

When is 3721507200?

@Adám AbsolutimeTime gives the total number of seconds since the beginning of January 1, 1900

@Jenny_mathy January 1, 1900 of what timezone?

@Daffy of utc +02:00

Excel VBA, 120 118 117 Bytes
Anonymous VBE immediate window function that takes no input and outputs the the Finnish flag and if Finland is greater than 100 years old a 100 on that flag. This is done with respect to the Easter Timezone of the United States, as there is no way for Excel or Excel VBA to determine timezone without add-ins or accessing the internet.
Cells.RowHeight=48:Cells.Interior.Color=-1:[F1:H11,A5:R7].Interior.Color=8402176:If Now>=#12/5/17 19:0#Then[B2]=100

Output
If Finland is younger than 100 years old

If Finland is older than 100 years old

-2 Byte for changing If #12/5/17 19:00#<=Now Then[B2]=100 to If Now>=#12/5/17 19:0#Then[B2]=100
-1 Byte for use of Cells rather than [A1:R11]

Who'd have thought ol' VBA could do this. Excellent.

@Floris, I've come to realize that when it comes to pixel art, Excel VBA can do some amazing things. :D

I am reminded of writing something in the precursor to VBA (a crazy macro language that was written in the cells of the Excel sheet, one line per cell) that did something similar (create a 2D intensity graph of a function I was studying). That must have been 1991. Thanks for the memories.

@Floris - you mean Excel 4.0 Macros? Man I have been trying to learn how to write those for a while, but all of the guides for it seem to have dropped off the face of the earth :/

Yes that's exactly what they were... I am pretty sure I have thrown my guides away, sorry to say.

@Floris well that's a shame - but its good to know that someone else knows what they are :)

And come to think of it - there was something before 4.0... I remember being annoyed when everything broke. As I have been many times since. Masters of not-backwards-compatible.

Yes, yes they were - heaven forbid you should want to move from the 32 Bit version to the 64 Bit version

Python 3, 143 141 135 bytes
Uses ANSI escape for colors, uses five spaces or " 100 " as a colored string so that I don't need to specially print "100" somewhere on the flag. Length 5 because of width, because 90/5 == 90//5. The string being used is getting defined in row 1. Then we iterate 55 round (height), on every iteration v is set to string with color [Blue, BrightWhite] and selected index is boolean row<20 or r>34. We multiply that result by 5 again (width dimensions: 25:15:50 so total width is 90). Then we print out v + Blue + Blue + Blue + v + v + Black where v is either Blue or BrightWhite. To clarify printing: width of v is 25 chars, width of Blue (e%44*3) is 15 and width of v*2 is 50. 25+15+50 is 90 which is the width and follows the dimensions required in the task! Quite messy summary but I guess it's better than nothing.

import time;e="\033[30;%dm "+[" "*4,"100 "][time.time()>1512511200]
for r in range(55):v=e%[107,44][19<r<35]*5;print(v+e%44*3+v*2+e%40)

Welcome to the site!

Welcome to PPCG! I've added a language flag to your answer, and I would suggest that you add a basic description of how your program works - but otherwise, great first answer :)

@TaylorScott Will do! And thank you, I have been lurking here for like year or two but never submitted anything before. Just couldn't resist because of Finland turns 100 years!

Processing.org / Java 191 188 bytes
-3 bytes thanks to KevinCruijssen
import java.util.*;void setup(){size(180,110);background(-1);fill(0);if(new Date().getTime()>=15125256e6D)text("100",0,9);noStroke();scale(10);fill(#003580);rect(5,0,3,11);rect(0,4,18,3);}

>15125255999999L can be >=15125256e6

@KevinCruijssen perhaps it can be shortended but 15125256e6 is 15125255815168, which is 37 hours too late

15125256e6D works, thanks

Hmm, 15125256e6 is 15125256000000 when I test it in Java 8. But I don't know Processing.org, so perhaps it's slightly different or using a different version? Here is a TIO with some basic tests of 15125256e6 to verify it works in Java 8. But I'm glad the D after it fixes it. Glad I could help. :)

MATLAB, 133 130 123 bytes
3 10 bytes sabed thanks for @flawr!
r=1:180;r(51:80)=0;imshow(r(11:120)'*r,[0 .2 .5;1 1 1])
if datenum(datetime('now','T','UTC+2'))>=737035 text(9,9,'100'),end

This uses [0, 51, 128] for the blue color. The size of the image is 180×110 pixels.
Sample run:

Sample run with the text (changing 737035 to 0 in the code so that the text is shown on any day):

Tcl/Tk, 135 bytes
Must be run in the interactive shell
gri [can .c -bg #FFF]
lmap C {"52 2 82 112" "2 42 182 72"} {.c cr r $C -f #003580 -w 0}
if [clock se]>1512518520 {.c cr t 19 9 -te 100}

Before 2017/12/06 02:00 GMT

After 2017/12/06 02:00 GMT

JavaScript (ES5) + SVG(HTML5), 189 179 bytes

document.write('<svg><path d=M0,0h180v110H0z fill=#fff /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0Z fill=#005580 />'+(Date.now()<15125112e5?'':'<text x=0 y=30 fill=#000>100'))
<body color=grey bgcolor=silver>

(HTML to show that the colour requirements are being met.) Edit: Saved 10 bytes thanks to @Shaggy. Outputs:

<body color=grey bgcolor=silver>

<svg><path d=M0,0h180v110H0z fill=#fff /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0Z fill=#005580 />

<body color=grey bgcolor=silver>

<svg><path d=M0,0h180v110H0z fill=#fff /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0Z fill=#005580 /><text x=0 y=30 fill=#000>100

How does this handle the time zone offset when run somewhere else than in UTC+2?

@Adám Date.now() is in UTC, and I compare against the UTC value of 2017/12/06 00:00:00 UTC+2.

Is it okay to use your SVG code in my php snippet?

@th3pirat3 Sure, as long as you attribute it.

When is 15125112e5?

@Adám I already told you?

Sorry, I misunderstood.

Replace <path></path> with <path/> to save a few bytes.

Python 3 with Pillow, 213 212 211 characters (Unix) and 217 216 characters (Portable)
This is the Unix version. I realized after posting that the time returned by time() does not necessarily have its epoch on 1 Jan 1970, so it is not necessarily portable.
b=8402688;from PIL import Image,ImageDraw as d
j=Image.new('RGB',(180,110),~1);r=d.Draw(j);R=r.rectangle
R([50,0,79,109],b);R([0,40,180,69],b);import time
r.text((9,9),'100'*(time.time()>=0x5a273300),0)
j.show()

This is the portable code, 4 bytes more, it uses gmtime with tuple comparison so it should work reliably on Windows too.
import time
from PIL import Image,ImageDraw as d
b=8402688
j=Image.new('RGB',(180,110),~1)
r=d.Draw(j)
R=r.rectangle
R([50,0,79,109],b)
R([0,40,180,69],b)
r.text((9,9),'100'*(time.gmtime()>(2017,12,5,22)),0)
j.show()

The images are displayed in a window. Really difficult to make it consume less characters. Even time.time returns a float so >0x5a273299 would not be quite so correct, or >0x5a273300 would be off by a microsecond.

Java 342 368 361 321 317 (299+18) bytes
Golfed
import java.awt.*;()->new Frame(){{setBackground(Color.WHITE);setUndecorated(0<1);setSize(180,110);setVisible(0<1);}public void paint(Graphics g){g.setColor(new Color(0,53,128));g.fillRect(50,0,30,110);g.fillRect(0,40,180,30);g.setColor(Color.BLACK);if(System.currentTimeMillis()>15125112e5)g.drawString("100",9,9);}}

Ungolfed
import java.awt.*;
() -> new Frame() {
    {
        setBackground(Color.WHITE);                     //Color Objects ARE just RGB values
        setUndecorated(0 < 1);                          //Get's ride of title bar
        setSize(180, 110);
        setVisible(0 < 1);
    }
    public void paint(Graphics g) {
        g.setColor(new Color(0, 53, 128));              //The special blue color
        g.fillRect(50, 0, 30, 110);
        g.fillRect(0, 40, 180, 30);
        g.setColor(Color.BLACK);
        if (System.currentTimeMillis() > 15125112e5)    //Time Condition
            g.drawString("100", 9, 9);
    }

Result

Credits
40 bytes saved by Olivier Grégoire for using lambda.
4 bytes saved by Kevin Cruijssen for Long formatting.
2 bytes saved by user902383 for hex formatting.

Does Java not support RGB colour values?

Thanks, thats 1 byte saved. java does but the syntax is new Color(XXX,XXX,XXX) which is very verbose. Even the instantiation of 1 color object wouldn't be worth it due to the lengthy get method due to the omission of a good set method.

@jfhcs: Well, unfortunately, those were the rules. And... that's Java.

Ah I see. I will update my answer. I must have misinterpreted the rules.

You can replace the trues with 1>0, args with a, and can remove the spaces around = at P j = new... to save a few bytes.

Good thinking. I kind of hurriedly wrote this answer because I had some Differential Equation homework due in an hour. Also it's my second answer and I appreciate the positive feedback guys.

342 bytes (324 bytes + 18 bytes for import java.awt.*;), with the condition included.

Your current response has several flaws that make it invalid: 1. there is no import at all. 2. the variable names aren't shortened: args can be reduced to a. 3. there are still optional spaces that are contained in the entry. 4. there is no conditional print of "100".

That would be the solution I was looking for. Since I have no child class, setBackground(Color.WHITE) now would work. Although Color.BLACK has an rgb value of -1, it actually is longer to say new Color(-1) which makes me sad. Am I to use the solution you posted as my own?

@jfhcs I took your solution and only improved it. It's still your solution.

>1512511200000L can be >15125112e5.

i believe setColor accepts color as int, hence this new Color(0,53,128) could be replaced by this new Color(0x3580) which sould let you save couple bytes

bash, 198
p()(printf "%-$1b$3" "\e[$2m")
r()(for i in `seq $1`;{ $2;})
a()(p 31 107
p 20 44
p 56 30\;107 "${1:-   }"
p 0 0 '
')
b()(p 95 44
p 0 0 '
')
r 20 a
r 15 b
r 19 a
((`date +%s`>1512511199))&&a 100||a

bash and imagemagick, 135
((`date +%s`>1512511199))&&x=100
convert -size 150x80 xc: -background \#003580 -splice 30x30+50+40 -draw "fill black text 9,9 '$x'" x:

Better use arithmetic evaluation: ((\date +%s`>=1512511200))&&x=100. Note that I moved the single quotes inside the -draw` parameter, where they need no escaping.

vim, 147
I really like this challenge ☺. © is escape.
sy on
set ft=c
hi Normal ctermfg=4 ctermbg=7
hi Number ctermfg=0 ctermbg=7
norm 90i ©26|15r█Y40pMVr█Y14Pk
if localtime()>1512511199
norm R100

Imperative Tampio, 239 bytes (non-competing)
Kun iso sivu avautuu,se näyttää tekstin"<svg><path d=180v110 /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580 />"ja,jos nykyinen aika millisekunteina on suurempi kuin 1512511200000,niin se näyttää tekstin"<text y=19>100".

Kun iso sivu avautuu,se näyttää tekstin"<svg><path d=180v110 /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580 />"ja,jos nykyinen aika millisekunteina on suurempi kuin 1512511200000,niin se näyttää tekstin"<text y=19>100".

Online version
Translation:

When the big page opens, it will show the text "<svg><path d=180v110 /><path d=M0,40h50V0h30v40h100v30H80v40H50V70H0 fill=#005580 />" and, if the current time in milliseconds is greater than 1512511200000, it will show the text "<text y=19>100".

SVG was taken from this answer by th3pirat3 (and Neil, appearently).
This program is written in a new version of Tampio I have been working on. Those of you who know Finnish can see that it is almost readable. I marked the answer as non-competing because this language was published after this challenge.
To run this program, either go to the online version above that contains the compiled JS version of the program or download the compiler from its Github page. To compile the program, run python3 tampio.py -p program.itp >program.html.
Tampio is not a golfing language by any measure, but due to the better svg code, it actually beat Röda... I was a little surprised.

That's more like it!

HTML + Javascript, 329 bytes
I shamelessly stole the date-checking part from @jstnthms. Basically I just write crude html table with correct row/col ratios, th being the blue parts. Tested on IE and Chrome.
<body onload="h=[4,3,4];w=[5,3,10];m=50;s='<style>*{border-spacing:0;padding:0;}th{background:#003580;}</style><table>';for(y in h){s+='<tr height='+(m*h[y])+'>';for(x in w){c=(y==1||x==1)?'h':'d';s+='<t'+c+' width='+(m*w[x])+'>'+(x+y<1&&Date.now()>15125112e5?'100':'')+'</t'+c+'>';}s+='</tr>';}s+='</table>';document.write(s);">

Could be further golfed by pure javascript (paste on console)...?

Perl 5, 139 bytes
($w,$b,$r)=map"\e[${_}m","47;30",44,0;$_=$w.$"x25 .$b.$"x15 .$w.$"x50 .$r.$/;$_=$_ x12 .s/7/4/gr x9 .$_ x12;time<1512511200||s/   /100/;say

to be launched
perl -E '($w,$b,$r)=map"\e[${_}m","47;30",44,0;$_=$w.$"x25 .$b.$"x15 .$w.$"x50 .$r.$/;$_=$_ x12 .s/7/4/gr x9 .$_ x12;time<1512511200||s/   /100/;say'

ratio was changed because of character ratio height/width = 1.66  (5/3)
otherwise with original ratio :
($w,$b,$r)=map"\e[${_}m","47;30",44,0;$_=$w.$"x25 .$b.$"x15 .$w.$"x50 .$r.$/;$_=$_ x20 .s/7/4/gr x15 .$_ x20;time<1512511200||s/   /100/;say

Racket 6.10 with 2htdp/image, 202 bytes
(let*([w 180][h 110][p(λ(w h x y o)(place-image(rectangle w h'solid(color 0 53 128))x y o))][b(p w 30 90 55(p 30 h 60 55(empty-scene w h)))])(if(>(current-seconds)1512536400)(overlay(text"100"9'b)b)b))

Ungolfed:
(let* (
       [flag-width 180]
       [flag-height 110]
       [place-rect (λ (width height x-pos y-pos other-pos)
                     (place-image
                      (rectangle width height 'solid (color 0 53 128))
                      x-pos y-pos other-pos))]
       [flag (place-rect
              flag-width 30 90 55
              (place-rect
               30 flag-height 60 55
               (empty-scene flag-width flag-height)))]
       )
  (if (> (current-seconds) 1512536400)  ; If Finland is 100 years old
      (overlay (text "100" 9 'b) flag)  ; add "100" to the flag
      flag))                            ; otherwise just the flag

You're the first one to place the 100 on a blue part — almost missed it.

HTML + CSS + Javascript, 339 bytes
<style>#f{width:180px;height:110px;position:relative}.b{background-color:#003580;position:absolute}.v{left:27.78%;width:16.67%;height:100%}.h{top:36.36%;height:27.27%;width:100%}</style><div id="f"><div class="b v"></div><div class="b h"></div></div><script>if(Date.now()>1512525600000)document.getElementById('f').innerHTML+=100;</script>

Here's the same solution trimmed down to 260 bytes, which assumes your viewing port has the proper 18:11 ratio.
<style>.b{background-color:#003580;position:absolute}.v{left:27.78%;width:16.67%;height:100%}.h{top:36.36%;height:27.27%;width:100%}</style><div class="b v"></div><div class="b h"></div><script>if(Date.now()>1512525600000)document.body.innerHTML+=100;</script>

You can knock a 0 off of the timestamp in either solution to see the "100" appear.

Small Basic, 300 bytes
A Script that takes no input and outputs to the TextWindow object.
GraphicsWindow.BrushColor=0
If Clock.Year*10000+Clock.Month*100+Clock.Day>=20171206Then
GraphicsWindow.DrawText(0,0,"100")
EndIf
GraphicsWindow.Height=275
GraphicsWindow.Width=450
GraphicsWindow.BrushColor="#003580
GraphicsWindow.FillRectangle(0,100,450,75)
GraphicsWindow.FillRectangle(125,0,75,275)

Try it at SmallBasic.com! Requires IE/Silverlight
Output
Shown after the Finland's 100th independence day.

the previously made code has been golfed down to the following:
HTML, CSS and JavaScript, 1599 bytes

var d1=new Date(1917,11,6);
var d2=new Date();
var difference = d2.getFullYear()-d1.getFullYear();
if(difference===100 && d2.getDate()===d1.getDate() && d2.getMonth()===d1.getMonth()) {
 document.getElementById("bottom-right").innerHTML=d2.getFullYear()-d1.getFullYear();
}
#flag{
background-color: #FFF;
width: 540px;
height: 330px;
border: 6px solid gray;
margin: 10% auto;
}
.surround{
background-color: #003580;
width: 90px;
height: 120px;
margin: 0px 300px 0px 150px;
}
.middle{
background-color: rgb(0, 53, 128);
width: 540px;
height: 90px;
}
<head>
<title>Happy Birthday, Finland</title>
<link rel="stylesheet" type="text/css" href="decor.css">
</head>
<body>
<div id="flag"><div class="surround"></div><div class="middle"></div><div class="surround"></div></div>
<script type="text/javascript" src="date.js"></script>
</body>

Well in my defence, I'd say this is my first time. Will try to make shorter code in future.

As Stephen has already said, this is a code golf, and so your program should aim to be as short as possible. Please keep in mind that if you don't golf your program (i.e. leave it as-is), it is subject to deletion as it currently isn't a serious contender. Finally, welcome to the site!

Sure. Will definitely get it golfed asap

Edited as suggested

You can also remove indentation in all, and remove newlines in CSS and HTML. Plus you can remove spaces between symbols in JS (like === and 100).

Use short CSS color syntax, like #FFF for black. Also, if a CSS class is only used once, it'd be shorter to use inline CSS with the style attribute.

Made the suggested edits. By the way, #FFF would be white and #000 would be black.

JavaScript ES6, 532 bytes
Decided to try using a Base64 image to see how short I could get it. Not a winner, but interesting nonetheless.

document.write(`${Date.now()>1512525600000?'<i style=position:fixed>100</i>':''}<img src=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAABuAQMAAAC0pqs4AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABlBMVEX///8ANYAaS5LoAAAAAWJLR0QB/wIt3gAAAAd0SU1FB+EMBRcAAPqLykEAAAAxSURBVEjHY2AAA/v///8zYAGj4qPio+KDWfw/VvBhVHxUfEiKD7b8NSo+Kj4qTrQ4AHKtsHq12fKCAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTEyLTA1VDIzOjAwOjAwKzAxOjAwkDJOKAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0xMi0wNVQyMzowMDowMCswMTowMOFv9pQAAAAASUVORK5CYI>`)

No need for parentheses inside interpolation (${(…)} → ${…}); no need for double quotes around those HTML attribute values; although invalid, in most cases you can cut off the base64 encoded strings's padding with equal signs (Firefox has certainly no problem decoding it).

HTML + JavaScript, 247 bytes

<table cellspacing=0 cellpadding=0><tr height=40><td width=50><td width=30 bgcolor=003580><td width=100><tr height=30><td colspan=3 bgcolor=003580><tr height=40><td><td bgcolor=003580><td><script>Date.now()>15125112e5&&document.write(100)</script>

Asymptote, 68 90 bytes
Run on http://asymptote.ualberta.ca/
Asymptote 90 bytes (add the number 105, not 100 ^^)
draw((0,0)--(180,0)^^(65,-50)--(65,50),rgb(0,53,128)+30+linecap(0));label("105",(130,35));

Asymptote 68 bytes
draw((0,0)--(180,0)^^(65,-50)--(65,50),rgb(0,53,128)+30+linecap(0));

It's well past 2017 yet I don't see the 100 anywhere...?

@Antti29 Thanks! I have just added 105, because now this 2022

C (GCC), 236 bytes
i=-55;main(j,z,t){t=time(0)>1512521999;for(write(1,"P6 180 110 255 ",15);i<56;i-=~!i)for(j=-65;j<116;j-=~!j)write(1,((z=i*i+(j-22)*(j-22))<80&z>48|(z=i*i+j*j)<80&z>48|(abs(j+16)<2)&(abs(i)<9))&t?"\0\0":abs(i*i<j*j?i:j)>15?"ÿÿÿ":" 5€",3);}

Adaptation of my solution of the related  Icelandic challenge.
Set encoding to ANSI, so each character corresponds to a single byte, and replace \0 with a NUL byte. Outputs to stdout a PPM image.

220 bytes

all_licenses: 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:
Advent Challenge 4: Present Assembly Line!
<< Prev Next >>
Santa was able to remanufacture all of the presents that the elves stole overnight! Now he has to send them to the assembly line for packaging. He usually has a camera to supervise the assembly line both to make sure the elves are doing a good job and because assembly line pictures look nice on advertising posters [citation-needed]
Unfortunately, his camera broke, so he would like you to draw out a simulation of what the assembly line would look like!
In order to keep to assembly line working at maximum efficiency and to reduce the risk of error or failure, all present boxes have the same width so that they fit perfectly on the conveyor belt.
Challenge
Given a list of presents represented by their dimensions, output a conveyor belt with all of the presents.
A present is drawn like such:
  +----+
 /    /|
+----+ |
|    | +
|    |/
+----+

This present has width 1, height 2, and length 4. Note that the plus-signs don't count for the side-length, so a present with length 4 actually spans 6 positions.
All presents are drawn next to each other with one space between the closest two characters; that is, the bottom-left corners of the presents are spaced such that if a present box has length l and width w, the next present box's bottom-left corner will be exactly l + w + 4 positions right of the bottom-left corner of the previous box.
After all present boxes are drawn, the conveyor belt is drawn by replacing the space between boxes on each of the last width + 2 lines with underscores.
The final output for present boxes with (l, w, h) of [(4, 1, 2), (8, 1, 3), (1, 1, 1)] would be:
           +--------+
  +----+  /        /|
 /    /| +--------+ |   +-+
+----+ | |        | |  / /|
|    | +_|        | +_+-+ +
|    |/__|        |/__| |/
+----+___+--------+___+-+

Formatting Specifications
You can choose either to take a list of 3-tuples where one of the elements is consistent across the whole list (that would be the width), or you can take the present width and then a list of 2-tuples representing the length and height of each present. You can take the inputs in any order and in any reasonable format, but the presents must be displayed in the same order that they are given as input.
You may choose any reasonable output format for the ASCII-art (including returning from a function).
Test Cases
These test cases are given as [(l, w, h), ...] format.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:

           +--------+
  +----+  /        /|
 /    /| +--------+ |   +-+
+----+ | |        | |  / /|
|    | +_|        | +_+-+ +
|    |/__|        |/__| |/
+----+___+--------+___+-+

[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:

                               +-+
                              / /|
                             / / |
    +-----+                 / /  |
   /     /|                +-+   |
  /     / |                | |   |
 /     /  |     +--------+ | |   |
+-----+   |    /        /| | |   |
|     |   +___/        / +_| |   +
|     |  /___/        / /__| |  /
|     | /___+--------+ /___| | /
|     |/____|        |/____| |/
+-----+_____+--------+_____+-+

[(0, 0, 0)] (this is the most interesting test case ever :P)

 ++
+++
++

[(8, 3, 0), (0, 3, 8)] (more zero cases)

                   ++
                  //|
                 // |
                //  |
               ++   |
               ||   |
               ||   |
               ||   |
    +--------+ ||   |
   /        /+_||   +
  /        //__||  /
 /        //___|| /
+--------+/____||/
+--------+_____++

Rules

Standard Loopholes Apply
This is code-golf, so the shortest answer in bytes wins
No answer will be accepted

Note: I drew inspiration for this challenge series from Advent Of Code. I have no affiliation with this site
You can see a list of all challenges in the series by looking at the 'Linked' section of the first challenge here.

@AdmBorkBork all present boxes have the same width

If Charcoal doesn't wreck this, I don't know what will.

@totallyhuman actually, brainf**k will win this challenge :P

Can you make a post on meta to index all of these questions?

@RamenChef Hm good idea. I might do that :P

Charcoal, 96 81 bytes
ＮθＷＳ«→ＦυＧ↗→↙⁺²θ_≔Ｉ⪪ι υ≔⊟υπ≔§υ⁰ρ→↗Ｇ↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ ↑πＰ↗⊕θＰ←⊕ρ↓+↓πＦ²«↷⁴+ρ↷²+π↷¹+θ↶³

Try it online! Link is to verbose version of code. Input is the width on the first line, then the other dimensions on following lines, ending with a blank line. Explanation:
Ｎθ

Input the width.
ＷＳ«

Loop over the remaining lines until the blank line is reached.
→ＦυＧ↗→↙⁺²θ_

Draw the belt between presents. The u variable is predefined to an empty list, which therefore does nothing on the first pass, while later on it ends up with a single element, causing this code to run once. (Using an if would be less golfy.)
≔Ｉ⪪ι υ

Split the dimensions at the space, cast them to integer, and save them in u.
≔⊟υπ

Remove the last dimension and save it in p.
≔§υ⁰ρ

Copy the first dimension to r, but leave it in u so that the belt gets drawn on the next loop.
→↗Ｇ↑⊕π↗⊕θ→⊕ρ↓⊕π↙⊕θ

Erase the interior of the present, in case the belt overlaps it.
↑πＰ↗⊕θＰ←⊕ρ↓+↓π

Draw the interior lines of the present.
Ｆ²«↷⁴+ρ↷²+π↷¹+θ↶³

Draw halfway around the exterior of the present, then repeat for the other half.

Pip, 160 154 bytes
153 bytes of code, +1 for -l flag.
{YMX:_+B+3MUaRV$.({UwhlWg+^11{a<=h+w?J[sXa-haN[0hh+w]?'-XlWR'+sXlWR("/|"a<h)RV(("+|/"aCMw).sXw)@<MN[ah+w-awh]'_Xw-a+1|s]sXl+w+3}M,y}MUa)R`_ +`'_X#_<|:'_}

This is a function that takes a list of lists containing [width height length]. Try it online!
How?
Top-level explanation:

Define a function that returns a list of lines representing one box
Map the function to each list of dimensions given
Concatenate the resulting lists of lines item-wise
Do a little post-processing with regex replacements to get the underscores to behave properly

Leave a comment and I'll add a more detailed explanation.

Python 2, 508 bytes
def f(B):
 d=B[0][1]+2;H=max(B)[0]+d+1;W=sum(sum(b[1:])+3for b in B)+len(B);r=[[' ']*i+W*['_']for i in range(d)]+[W*[' ']for _ in' '*H];o=0
 for h,w,l in B:
	for i in range(w+2,1,-1):r[i-1][o+i-2:o+l+i]=[' ']*(l+2)+['/'];r[h+i][o+i-1]=r[h+i][o+l+i]='/'
	r[0][o:o+l+2]=r[h+1][o:o+l+2]=r[w+h+2][o+w+1:o+w+l+3]=['+']+['-']*l+['+']
	for i in range(1,h+1):m=min(i,w)-1;r[i][o:o+l+2+m]=['|']+[' ']*l+['|']+[' ']*m;r[i+w+1][o+l+w+2]='|'
	r[w+1][o+l+w+2]='+';o+=l+w+4
 for l in r[H-1::-1]:print''.join(l).rstrip('_')

Try it online!
Takes a list of lists of [height, width, length]


text:
Iterated phi sequence
Related: Iterated phi(n) function.
Your challenge is to compute the iterated phi function:
f(n) = number of iterations of φ for n to reach 1.

Where φ is Euler's totient function.
Related OEIS.
Here's the graph of it:

Rules:
Your goal is to output f(n) from n=2 to n=100.
This is code-golf, so shortest code wins.
Here's the values you can check against:
1, 2, 2, 3, 2, 3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 5, 3, 4, 4, 4, 4, 5, 4, 5, 4, 4, 4, 5, 4, 5, 5, 5, 5, 5, 4, 5, 4, 5, 5, 6, 4, 5, 5, 5, 5, 6, 5, 5, 5, 6, 5, 6, 4, 6, 5, 5, 5, 6, 5, 6, 5, 5, 6, 6, 5, 6, 6, 6, 5, 6, 5, 6, 5, 6, 5, 6, 5, 6, 6, 5, 6, 7, 5, 7, 5, 6, 6, 7, 5, 6, 6, 6, 6, 6, 6, 7, 5, 6, 6

@LuisMendo Fixed, and also added graph + values to check against. :-)

I've edited in the kolmogorov-complexity tag, as this is essentially outputting a fixed value

[tags:kolmogorov-complexity] is correct in this case, though it is (probably) much shorter to implement the function. If you ask the question backwards (given the values, write a program printing the values) there will probably be no-one figure that out.

@user202729 Oh god, that sounds very complicated. Hm...

Which "that" are you referring to?

@user202729 The reverse engineering/question backwards.

@user202729 You think nobody would look up the values in the OEIS first thing?

Hm, if f^-1(n) returns the set of values such that f(x) = n, I wonder if this set is finite for all n.

@MishaLavrov Ok, without OEIS lookup, it is hard. A3434.

@SimplyBeautifulArt First prove that there are finitely many values x such that phi(x) is a particular fixed number.

This is a nice challenge, but I think it would be better to just ask for a solution to implement f(n), rather than run it on a range of fixed numbers. This also makes a difference between languages with ability to apply functions on ranges with less bytes (partly chameleon challenge?)

@SimplyBeautifulArt According to Wikipedia, we have a lower bound on φ(n) on the order of n/log log n, so there's only a finite range in which a particular value of f can be achieved.

:P Are you implying I should change the challenge to give you an advantage? Regardless of how these rules are stated, some languages will have an advantage and some won't. @Uriel

Ah, nice find @MishaLavrov

@SimplyBeautifulArt not really, my language of choice can handle the wrapper pretty easily. But it feels like an overhead (somewhat redisual). Anyway, good challenge

Do we need to separate the numbers or is an output of 122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566 allowed?

@ovs they need to be separated somehow.

Haskell, 53 52 bytes
Thanks nimi for saving 1 byte!
f<$>[2..100]
f 1=0
f n=1+f(sum[1|1<-gcd n<$>[1..n]])

Try it online!
sum[1|1<-gcd n<$>[1..n]] gives φ(n) (Taken from flawr,  thanks!)
f is a recursive function that calculates 1+φ(n) if n is not 1, and outputs 0 if n is 1, as there are no more iterations to be taken to reach 1
Finally f<$>[2..100] creates a list of f applied to each element of [2..100]

MATL, 16 15 bytes
99:Q"@`_Zptq}x@

Try it online!
Explanation
99:       % Push [1 2 ... 99]
Q         % Add 1 element-wise: gives [2 3 ... 100]
"         % For each k in that array
  @       %   Push k
  `       %   Do...while
    _Zp   %     Euler's totient function
     tq   %     Duplicate, subtract 1. This is the loop condition
  }       %   Finally (execute on loop exit)
  x       %     Delete
  @       %     Push latest k
          %   End (implicit)
          % End (implicit)
          % Display stack (implicit)

Old version, 16 bytes
99:Qt"t_Zp]v&X<q

Try it online!
Explanation
99:       % Push [1 2 ... 99]
Q         % Add 1 element-wise: gives [1 2 ... 100]
t"        % Duplicate. For each (i.e. do the following 100 times)
  t       %   Duplicate
  _Zp     %   Euler's totient function, element-wise
]         % End
v         % Concatenate vertically. Gives a 100×100 matrix
&X<       % Row index of the first minimizing entry for each column.
          % The minimum is guaranteed to be 1, because the number of
          % iterations is more than sufficient.
q         % Subtract 1. Display stack (implicit)

The values outputted are off by one, I think Try it online! corrects that (but I've never used MATL before so...)

Check the end of my post. It provides the expected output, to which you are off by one on each.

The first 5 values outputted by your current answer are 2 3 3 4 3, when the challenge says they should be 1 2 2 3 2

@cairdcoinheringaahing and SimplyBeautifulArt Ah, I see. Thanks! Corrected now

Haskell, 70 69 68 bytes
The function (\n->sum[1|1<-gcd n<$>[1..n]]) is the totient function, which we repeatedly apply in the anonymous function. Thanks @laikoni for -1 byte!
EDIT: I just found out @xnor used this exact totient function in a previous challenge.
length.fst.span(>1).iterate(\n->sum[1|1<-gcd n<$>[1..n]])<$>[2..100]

Try it online!

This is pretty short for not having a totient builtin!

@LuisMendo H.PWiz found a solution that is even shorter!

Jelly, 12 11 10 9  8 bytes
³ḊÆṪƬ>1S

Try it online!
-1 byte thanks to HyperNeutrino!
-1 byte thanks to Mr. Xcoder!
-1 byte thanks to Dennis
How it works
³ḊÆṪƬ>1S - Main link. No arguments
³        - Yield 100
 Ḋ       - Dequeue. Creates the list [2, 3 ... 99, 100]
    Ƭ    - Until the following produces a repeated value, collecting each loop:
  ÆṪ     -   Totient of each
     >1  - Greater than one?
       S - Sum the columns

@dylnan All three answers output the list of f(n) from 2 to 100, and the question doesn't mention input, so I think this is the correct version

@dylnan The challenge asks to output f for n=2 to n=100, not just one value.

You're right, I had read the beginning of the challenge and didn't read the rules part clearly

And with regards to the code, would it be possible to use # in this case? Something like this (which clearly doesn't work but written by someone who understands the syntax clearly!)

@dylnan Possibly, but as we're generating a fixed list, to apply over each element, € is usually better than #.

@HyperNeutrino Aww, but now I have to rewrite the explanation :P Thanks

@Mr.Xcoder Do you mind if I "take" that as a golf?

@cairdcoinheringaahing That was a golfing suggestion, so go ahead and edit that in

@Dennis or anyone else: is it possible in a # loop to return a list of the truthy values found instead of the list of indices which evaluate to a truthy value?

@dylnan There is a chat room specifically about asking questions about Jelly, and another about learning Jelly, just to let you know, as you seem interested in the language.

It's not that different from your original code. ÐĿ loops until ÆṪ returns a list of 99 ones, >1 maps all non-1 values to 1, then S sums, effectively counting the number of non-1's in each column.

@Dennis Yeah, I'm starting to understand it now. Thanks!

APL (Dyalog), 50 29 25 bytes
Look 'ma, no built-in totient!
4 bytes saved thanks to @H.PWiz
{⍵=1:0⋄1+∇+/1=⍵∨⍳⍵}¨1+⍳99

Try it online!
How?
Apparently I went for the longer (and harder) totient formula first. See revisions history.
⍳⍵ - 1 to n
⍵∨ - gcd with n
1= - equal to 1?
+/ - sum 'em all
This is the totient. All the rest is wrapper for the counting (1+∇) and applying on the range 2..100 (¨1+⍳99).

Mathematica, 44 bytes
(i=-1;#+1//.x_:>EulerPhi[++i;x];i)&~Array~99

-10 bytes from @Misha Lavrov
-2 bytes from @user202729
Try it online!

Python 2, 80 bytes
n,_=r=2,0;exec'r+=r[sum(k/n*k%n>n-2for k in range(n*n))]+1,;print r[n];n+=1;'*99

Try it online!

JavaScript (ES6), 115 ... 104 99 bytes
Hard-coding might be shorter, but let's try a purely mathematical approach.

f=n=>n>97?6:(P=(n,s=0)=>k--?P(n,s+(C=(a,b)=>b?C(b,a%b):a<2)(n,k)):s>1?1+P(k=s):1)(k=n+2)+' '+f(-~n)

console.log(f())

Hard-coding is 90 bytes (pastebin link)

@HermanLauenstein Nicely done.

J REPL, 23 bytes
<:#@(5&p:^:a:)"0|2+i.99

I haven’t checked, but this probably works in regular J if you define it as a noun (I golfed this on my phone on the REPL).
Built-ins, yo.
I’d say that there are at least 2-3 bytes to shave off (off-by-one because of the way a: works, having to use | as a noop, etc.).

+/*<:5&p:^:a:2+i.99  for 19 bytes
Try it online!

For future reference, you can aso use "+ instead of "0, so it could equally become <:#@(5&p:^:a:)"+i.99

16 bytes with +/1<a:5&p:2+i.99

@ miles : Can you explain the use of a: in your code? How does it work instead of ^:?

@GalenIvanov (5&p:)^:a: m can be done as a: 5&p: m using the other definition of & when a dyad is bonded with a noun and then called dyadically.

@miles Thank you! Now I see it's explained in the vocabulary too.

Python 2, 82 bytes
l=0,1
exec"n=len(l);p=2\nwhile n%p:p+=1\nl+=l[p-1]+l[n/p]-n%4%3/2,;print l[n];"*99

Try it online!
This uses the observations that:

f(a*b) = f(a) + f(b) - 1, except the -1 is omitted if a and b are both even
f(p) = f(p-1) + 1 when p is prime, with f(2)=1

These imply that if n has prime factorization n = 2**a * 3**b * 5**c * 7**d * 11**e * ..., then f(n) = max(a,1) + b + 2*c + 2*d + 3*e + ..., where each p>2 in the factorization contributes f(p-1).
I'm not sure if these continue to hold past n=100, but if they do, they give a way to define and calculate f without using φ.

Husk, 10 17 bytes
mö←LU¡Sȯṁε⌋ḣtḣ100

Try it online!
Edit: +7 bytes for actually mapping the function over the range that was asked for, before it was only the function computing A003434.
Explanation
The following computes A003434:
←LU¡S(ṁ(ε⌋))ḣ -- takes a number as input, for example: 39
   ¡          -- iterate the following function on the input: [39,24,8,4,2,1,1,1..]
    S(     )ḣ --   with itself (x) and the range [1..x]..
      ṁ(  )   --   ..map and sum the following
        ε⌋    --     0 if gcd not 1 else 1
  U           -- longest unique prefix: [39,24,8,4,2,1]
 L            -- length: 6
←             -- decrement: 5

The m(....)ḣ100 part just map that function over the range [2..100], not sure how I missed that part before :S

Python 2, 83 bytes
n=2
exec"print len(bin(n))-3+n%2-~n%9/8-(0x951a5fddc040419d4005<<19>>n&1);n+=1;"*99

Try it online!
Combines a heuristic estimate with a hardcoded constant that corrects each estimate as either -0 or -1.

PowerShell, 110 bytes
$a=,0*101;2..100|%{$i=$_;for($z=$j=0;++$j-lt$i;$z+=$k-eq1){for($k=$j;$j%$k-or$i%$k;$k--){}};($a[$i]=$a[$z]+1)}

Try it online!
Mathematical approach.
Actually, looking through it, very similar to the C answer, but developed independently. Creates an array of 0s, loops from 2 to 100, then calculates phi using the gcd formulation. The part in parens at the end both saves the result into $a for the next go-round, and places a copy on the pipeline, which results in the implicit output.

PowerShell, 112 bytes
"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"-split'(.)'

Try it online!
Hard-coded. Ho-hum. Shorter than I could get a mathematical approach by about 10-15 bytes.

I wonder whether you actually need a separator, as all the numbers are single digits:)

Can you show us your mathematical approach? It looks much more interesting certainly :P

@ConorO'Brien Luckily enough, I was able to look at it with fresh eyes this morning and golf the mathematical approach below the hard-coded approach.

Bubblegum, 49 bytes
00000000: 5d88 0511 0020 0003 ab2c 024e ff64 e8a3  ].... ...,.N.d..
00000010: 379f 956b f05d 206c 0545 7274 743a b876  7..k.] l.Ertt:.v
00000020: 2267 27f9 9f4d 9b9d fc85 e7e6 994d 6eb0  "g'..M.......Mn.
00000030: 2b                                       +

Try it online!

05AB1E, 11 bytes
тL¦ε[DNs#sÕ

Try it online!
Explanation
тL¦           # push range [2 ... 100]
   ε          # apply to each
    [         # start a loop
     D        # duplicate the current number
      N       # push the loop iteration counter
       s      # swap one copy of the current number to the top of the stack
        #     # if true, break the loop
         s    # swap the second copy of the current number to the top of the stack
          Õ   # calculate eulers totient

C, 112 bytes
a[101];f(i,j,k,t){for(a[i=1]=0;i++<100;printf("%d ",a[i]=a[t]+1))for(t=j=0;++j<i;t+=k==1)for(k=j;j%k||i%k;k--);}

Ungolfed:
a[101];
f(i,j,k,t){
    for(a[1]=0,i=2;i<=100;i++) {   // initialize
        for(t=j=0;++j<i;t+=k==1)   // count gcd(i, j) == 1 (t = phi(i))
            for(k=j;j%k||i%k;k--); // calculate k = gcd(i, j)
        printf("%d ",a[i]=a[t]+1); // print and store results
    }
}

Try it online!

PHP, 98 bytes
1,2,<?=join(',',str_split(unpack('H*','##3444E4DEEDEEUUEEVEUVUVVFUVVUfVfVVVVVegWVgVffgV')[1]))?>,6

Try it online!
I packed all digits into a binary string.
After unpacking it, converting it to a an array and then mergin the array again, i only had to prepend the 1,2 and append the 6 as those wouldnt fit or caused a control code to appear.

Perl 6, 47 bytes
map {($_,{+grep 1==* gcd $_,^$_}...1)-1},2..200

Try it online!

Alumin, 87 bytes
hhhhhdadtqdhcpkkmzyhqkhwzydqhhwdrdhhhwrysrshhwqdrybpkshehhhwrysrarhcpkksyhaydhehycpkkmr

Try it online!
Explanation
hhhhhdadt      CONSTANT 100

RANGE FROM 100 to 0
q
  dhc
p

REMOVE 0 AND 1
kk

OVER EACH ELEMENT...
m
  zyh
  q
    kh
    wzyd
    q
      DUPLICATE TOP TWO ELEMENTS...
      hhwdrdhhhwrysrshhw
      GCD...
      qdryb
    p
    ks
    he
    hhhw
    ry
    s
    rarhc
  p
  IS IT ONE? IF SO TERMINATE (FIXPOINT)
  kksyhaydhehyc
p
kk
m
REVERSE THE VALUES
r

Pyth, 38 bytes (not competitive)
.e-+1sl+1kb_jC"Éõ4ÕYHø\\uÊáÛ÷â¿"3

Try it on the Pyth Herokuapp, because it doesn't work on TIO for whatever reason.
I have no doubt the explicit Pyth solution is smaller, but I wanted to see how small I could get the code by compressing the sequence, and learn Pyth I guess. This uses the fact that an upper bound of the sequence is log2(n)+1.
Explanation
.e-+1sl+1kb_jC"Éõ4ÕYHø\\uÊáÛ÷â¿"3
             C"Éõ4ÕYHø\\uÊáÛ÷â¿"   interpret string as base 256 integer
            j                   3  convert to array of base 3 digits
           _                       invert sequence (original had leading 0s)
.e                                 map with enumeration (k=index, b=element)
       +1k                                   k+1
     sl                            floor(log(   ))
   +1                                             +1
  -       b                                         -b

I got the compressed string via Ci_.e+1-sl+1ksb"122323333434344534444545444545555545455645555655565646555656556656665656565656656757566756666667566"3, which is just the opposite of the code above with a few type conversions.

Why noncompeting?

@SimplyBeautifulArt didn't really mean noncompeting in the formal sense; edited the title to make that more clear

Ohm v2, 41 bytes
“ ‽W3>€þΣÌιZ§Á HgüυH§u·β}Bā€ΣNπáÂUõÚ,3“8B

Try it online!
Literally completely hardcoded... I actually took the sequence above, stripped everything that wasn't a number, interpreted it as base 8, then turned it into Ohm's built-in base 255 number representation. That's what the quotes do. Then, the program simply turns that into base 8 again.