text:
Big Ben goes BONG
Your task is to create a program that is to mimic Big Ben (Twitter).
Task
Whenever a new hour has begun (according to your computer's local time or UTC), you have to output BONG repeated hour times (with a space between the words). For example, when it's 3 o' clock, you have to output BONG BONG BONG. The time format follows the 12-hour time format, ie after 12 o' clock, we have 1 and not 13. The program/function must run forever.
Example:
don't output stuff inside the brackets
(start: 00:34 for example)
BONG               (01:00)
BONG BONG          (02:00)
(...)
BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG BONG (12:00)
BONG               (01:00 again)
(...)
(it continues forever)

Rules

Each series of BONGs must be separated by a newline
Leading/trailing newlines are allowed
However leading/trailing spaces are not allowed
The submission must run forever
Your output may be printed ±3 seconds from the beginning of the hour
You may not assume the program to be run at any specific hour

This is code-golf, so the program with the shortest bytecount wins!

Testing these submissions is going to be fun... :D

Can we assume starting the program exactly on midnight?

@JarkoDubbeldam No, the program can be started from any hour

@KritixiLithos Damn, that would've saved a bit.

Can you clarify "any hour"? Does that mean that the program can start at ±3 seconds from an exact hour or can be started at any time no matter whether it is a whole hour or not?

@ElPedro The program can be started at any time from 00:00 to 23:59

@ETHproductions You can use whichever you prefer

for 12/24 do we print 0 bongs or 12 bongs?

+1 for a challenge which isn't easily dominated by dedicated code-golfing languages.

How should the program behave if the system clock is wound back to before 1859?

@Maltysen You need to print out 12 BONGs for 12/24

Does it have to work across summertime changes?

@BenAston No, there is no need to worry about that.

For testing one can use LD_PRELOAD hack overriding time functions: https://github.com/vi/timeskew . TIMESKEW="60 1" makes minutes flow like seconds.

05AB1E, 43 bytes
3600žcžb60*+->Lvw}["BONG "ža<12%>×,5°36*.W]

Try it online! (lol this won't work, it will timeout in 60 seconds. Download  the 05AB1E interpreter for this)
Explanation:
3600žcžb60*+->                          # Get amount of seconds (plus one) until next hour
              Lvw}                      # Wait said amount of seconds
                  [                     # Infinite loop start
                   "BONG "ža<12%>×,     # Print "BONG " multiplied by the amount of hours (12-hour clock)
                               5°36*.W  # Wait an hour (3600000 milliseconds)
                                      ] # Infinite loop end

This took me a while to golf! I might be able to golf it a little more, but it beats *><>, so that's cool :)
Quick version:
1Uw["BONG "X<12%>×,wX>U]

Will wait one second on start, and one second between BONGs

Sorry for the delay, I finally got to running your program locally. Well done, this is particularly good for an esolang!

Bash, 71, 70, 69 bytes
EDITS:

Optimized the sleep interval computation a bit, -1 byte;
Replaced backticks with xargs, -1 byte (Thanks @jrtc27 !).

Golfed
sleep `date +3600-%s%3600|bc`;yes BONG|sed $(date +%I)q|xargs;exec $0

Explained
#Compute the number of seconds left in the current hour and wait.
sleep `date +3600-%s%3600|bc`;

#Print "hour" (1-12) worth of "BONG" strings, one per line,
#use xargs to merge them into a single space-separated string.
yes BONG|sed $(date +%I)q|xargs

#Re-execute itself (in the same process).
exec $0

Test Version
Works with minutes instead of hours
sleep `date +60-%s%60|bc`;yes BONG|sed $(date +%I)q|xargs;exec $0

@zeppeIin I joined this community with the primary goal of worshipping you. Your solution is so full of sneaky tricks I'm still reeling from the awesomeness - especially yes BONG|sed 12q

@neonzeon wow :)

You can shave 1 byte off the echo by piping to xargs, which calls echo by default. 1 for pipe + 5 for xargs - 2 for backticks - 4 for echo - 1 for space = -1 byte.

@jrtc27 That's an excellent advice! Thank you !

*><>, 48 47 44 bytes
>s?um?uhc%:?!c21.O
v$o" GNOB"oooo$1-:?!
\aofS

Try it here! (or this version which does it every minute for testing)
This outputs a number of BONGs separated by spaces based on what hour it is (and 13 is 1, etc). There are no trailing space after the final BONG, and there is a trailing newline.
Technically this doesn't run forever (but it basically does). It leaks ~28 bytes per day (ignoring interpreter overhead ...). It would take ~105062 years for it to leak 1GiB.
Approximating for interpreter overhead, the stack is just a slice of float64s on the Golang interpreter. So I simply did 28*8 to come up with 224 bytes per day. I divided this number by the number of bytes in a gibibyte (1073741824) then 365 to approximate that it would take 13132.85 years to leak 1 GiB.
Note about the interpreters
The online interpreter is in Javascript. The page must be open and visible for it to check the time it currently is and output the BONGs. The Golang interpreter has no such limitation.
Explanation
Main loop:

s?um?u          O     if seconds == 0 && minutes == 0:
      hc%               push hours % 12 (bongs) to the stack
         :?!c           if bongs is 0, push 12 to the stack
             21.        jump to "output bongs" coords (2, 1)

Output bongs:

Begins at `"` because of the jump.

   " GNOB"            push "BONG " to the stack
          oooo        output "BONG"
              $1-     subtract 1 from bongs
v                :?!  if bongs == 0, move to "newline and sleep"
 $o                   output " "

Newline and sleep:

\                     mirror the IP to the right
 ao                   output a newline
   fS                 sleep for 1.6s
\                     mirror to main loop

What is the local timezone for the language's interpreter online? Because when a new hour struck for me, it didn't output anything

@KritixiLithos, unfortunately for the online interpreter the page must be open and visible for it to work. I think this is a Javascript/browser limitation. You don't need to worry about it being online or not as the interpreter itself is in Javascript, you could download it yourself if you wanted! The Golang interpreter works regardless of anything though. Sorry for the inconvenience, I'll edit the answer to make that clear.

Congratulations on winning this challenge! This is the only golfing-lang to have completed this challenge and that's impressive :)

@KritixiLithos thanks!! This is the first challenge I've won at all :D

JavaScript (ES6), 99 93 bytes
f=_=>setTimeout('alert("BONG ".repeat(new Date/36e5%12|0||12).trim(f()))',36e5-new Date%36e5)

This uses UTC time (which lines up with the actual thing). Due to the untestable nature of the code, you can try the following which does the same thing, but every 60 seconds:

f=_=>setTimeout('alert("BONG ".repeat(new Date/36e5%12|0||12).trim(f()))',6e4-new Date%6e4)

f()

Here's a bonus 99-byte version which uses local time:
f=_=>setTimeout('alert("BONG ".repeat(new Date().getHours()%12||12).trim(f()))',36e5-new Date%36e5)

This (the snippet) alerts every minute for me (but the number of BONGs is correct), but the program is supposed to output every hour only

@KritixiLithos "Due to the untestable nature of the code, you can try the following which does the same thing, but every 60 seconds:" ;-)

JavaScript(ES6), 125 123 117 115 bytes
Thanks to @Flp.Tkc for saving 5 bytes!
Thanks to @BenAston for saving 2 more bytes!
a=eval(b=`(new Date).getHours()`);setInterval(w=>eval(b)!=a?console.log(Array(++a%12+1).join`BONG `.trim()):"",1e3)

Snack Snippet

a=eval(b=`(new Date).getHours()`);setInterval(w=>eval(b)!=a?console.log(Array(++a%12+1).join`BONG `.trim()):"",1e3)

@BenAston Thanks for noticing that :)

@BenAston It doesn't work without the first semi-colon

Batch, 142 bytes
@timeout/t>nul 1
@if not %time:~3,5%==00:00 %0
@set/ah=-%time:~0,2%%12
@set s=............
@call set s=%%s:~%h%%%
@echo %s:.=BONG %
@%0

Since the file runs as an infinite loop, I start with a 1s delay, as I need one anyway after the bongs, and this saves CPU cycles. The >nul is positioned carefully to save a byte (1>nul would cause the 1 to be eaten by the redirection). We then loop until both minutes and seconds are zero. The bongs are constructed by taking the negative hour modulo 12, and asking for the last h characters from a 12-character string. When h is zero this actually gives us the whole string, therefore 12 bongs. It then suffices to replace the characters with the word BONG. When run it looks something like this (note that the image does not loop, so you'll need to force-reload to see the animation again):

Could you provide a gif of it running and outputting?

@KritixiLithos Not sure what you're looking for here; I can take screenshots from before and after the hour and add a delay of up to 11 minutes in an animated GIF but I don't see how that proves anything.

I am asking for a gif because I can't test it on my computer (it's a mac)

@KritixiLithos Something like this OK?

Good enough, I'll take your word for it :)

Every time I see @ before every line, I feel compelled to suggest @echo off instead -- but it's shorter the way you have it. Stupid code golf. :(

@QPaysTaxes Indeed, usually I have at least one label which saves me an additional byte as it doesn't require an @. No such luck here!

Bash + Linux crontab, 90
I was hoping this would be shorter than the other shell answers.  Still, I think it's an interesting approach:
for i in {0..11};{
s+=\ BONG
echo "0 $i,$[i+12] * * * echo$s>/proc/$PPID/fd/1"
}|crontab -

The script runs once, populates the crontab, then exits.  However, the output from the cronjobs is sent to the terminal from which the script was run.  I think this satisfies the submission must run forever requirement.
Warning - this will clear out any existing crontab entries, so make sure you have existing ones backed up.
This works on Ubuntu 16.04, which is using Vixie cron by default.

I ran it and got some "mail". When I checkout out the mail, there was one more BONG than necessary.

@KritixiLithos Thats odd.  Which Linux distro are you using?  Which cron are you using?

I'm on a mac, wait, that's not Linux

@KritixiLithos Yup ;-).  This answer relies on Linux /proc/<PID>/fd/<N>.

Python 3 - 100 97 92 bytes
from time import*
while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])[:-1])

Explanation:
import time;
while 1:
 t=time;x=3600;
 t.sleep(x-t.time()%x);#sleep for the remaining seconds until the next hour
 print(('BONG '*int(t.strftime("%I")))[:-1])#strftime("%")=nr of hours (1-12). Print the bongs and remove the last char

from time import*<NL>while 1:x=3600;sleep(x-time()%x);print(('BONG '*int(strftime("%I")))[:-1])  is 93 bytes

I don't think you need the semicolon at the end of the first line.

Removed the trailing ;

92 bytes if you do from time import*, like this

Thanks for the tip, I've added it. Learning new things about Python every day :)

Ruby, 82 81 bytes
loop{l=Time.new
puts ("BONG "*(l.hour%12+1)).chop if(l+1).hour!=l.hour
sleep 1}

Every second we check whether it's last second of the hour, and BONG accordingly. Could probably be golfed further with some dirty tricks, but I don't know too many. Also it works differently than the other Ruby answer.
One byte saved thanks to courtesy of QPaysTaxes.

Need to get into Ruby. It seems a bit less verbose than Python for golfing.

Do you need the space immediately after if?

@QPaysTaxes I don't, thank you. I was so mad about space after puts I forgot about that one.

Ruby, 112  99 Bytes
loop{sleep 2;n=Time.now;if(n.min==0);puts ('BONG '*n.strftime('%I').to_i).chop;sleep 60-n.sec end}

Old Version
loop{sleep(2);n=Time.now; if(n.min.zero?) then puts ('BONG ' * n.strftime('%I').to_i).chop;sleep(60-n.sec) end}

Thanks to QPaysTaxes for the tips

@Flp.Tkc Oh yes, nice catch!
Forgot to delete the last character

I don't know ruby, but the program must output within 3 seconds of the start of the new hour. I don't think sleep(60) makes that happen

@KritixiLithos We can make the program sleep for every 3 seconds and  then do the caculation
Loop -> Wake every 3 Seconds ; Check time and do stuff ?

@JatinDhankhar Or you can make it sleep for 2 seconds (just to give some breathing space)

@KritixiLithos Yes, making the change to 2 seconds than
Thanks

This is 81 bytes. And when I ran this program, there was a leading space. Could you fix this?

Will this only print out one set of bongs per hour? It looks like it will print until the end of the minute

@muddyfish you are correct, also the code needs one space not to throw NoMethodError.

@OP if you fix this ping me and I'll change to an upvote

@muddyfish
Fixing this
Here is my algorithm now
Start Loop
Sleep for 2 seconds
Check Time, store it in a variable
If minute is zero ; BONG the time and sleep for remaining time until next minute turns up (60 - time.sec)
If time was captured at 15 sec then we do the BONG then make it sleep for (60 - 15) = 45 secs and wake it again
Is it okay ?
Updated the answer but it

@KritixiLithos I ran the program and there is no leading space. Also I used wc to calculate byte size. Can you point me where I am wrong ?

@JatinDhankhar It works now :)

Use ; in place of then, get rid of every space after a ; or close-paren, use ==0 instead of .zero?, Get rid of the spaces around *, use .hour instead of that .strftime nonsense, remove the parens around the argument to sleep (put a space before them instead).

@QPaysTaxes Thanks for the tip. I wanted to use hour but it gives output in 24 hour format but question asks for hour in 12 hour format and then I would have to use conditions and mod.

(n.hour%12+1) is shorter than n.strftime("%I").to_i. Also, you don't need the parens around the condition to if. Finally, I'm not sure that the sleep 60-n is doing anything except making your program more efficient, and this is code golf, so we don't care about that. If you can get rid of that, you can turn the condition into an inline if, which gets rid of the end.

@QPaysTaxes
(n.hour%12 + 1) is not correct. If time is 20:XX hours which is 8 PM should BONG 8 times but (20%12+1) is 9 if we remove it would for all cases except when time is 12:00 as (12%12+1) will give 1 whereas (12%12) will give 0.
You are right about sleep 60-n times but if this program runs for say infinite time but if we don't allow it to sleep it may print BONG continuously for about a minute.
If time is 20:00:00 if condition is triggerred and will BONG then will continue to do so unitl minute changes to 1.
Are there  any more approaches around it ?

Python 2, 105 106 bytes
import time
h=0
while 1:
 l=time.localtime();c=l[3]%12
 if l[4:6]==(0,0)and h!=c:print('BONG '*c)[:-1];h=c

Edit
Added one byte by changing < to != after feedback from @pinkfloydx33. Good spot.
Tested as much as possible locally but doesn't work on TIO as it (obviously) exceeds the 60 second execution limit. Please feel free to test locally :-)
btw, losing that pesky trailing space cost me 7 bytes otherwise this would have been under 100.
In the absence of TIO here is output after waiting an hour. Prog was started at 15:27 with extra debug code to show the time of the print (12 hour format).
python bigben.py
time is 4:0:0
BONG BONG BONG BONG
time is 5:0:0
BONG BONG BONG BONG BONG

Pretty straightforward but here is an explanation for anyone who is interested.
import time                 #Import the time module
h=0                         #Create a variable to store the hour that has just been printed
while 1:                    #Loop forever
 l=time.localtime()         #Get the local time from the time module
 c=l[3]%12                  #Set a variable to the current hour in 12 hour format
 if l[4:6]==(0,0)and h!=c:   #If minutes=0 and hours=0 and the last hour that was printed is not the current hour
  print "time is "+`c`+":"+`l[4]`+":"+`l[5]`    #Debug code to show hour
  print('BONG '*c)[:-1]     #Print 'BONG '*number of hours and lose the space from the end
  h=c                       #Update the last hour that was printed

You can just check if the minutes are 0: l[4]==0and h<c.

Now that I think of it, there's the small problem that it doesn't work if you start the timer on 20:00:01. Minutes will be zero, seconds not and it will print the bongs

This doesn't output anything when I ran it locally

@KritixiLithos No idea why you get no output. I'm on Ubuntu 14 and Python 2.7.9. Want to take this to chat to discuss further?

Does this work from 11h->12h. (12%12=0)? Seems that 11>0, so h>c or am I missing something?

Cheddar v1.0.5, 162 bytes
Cheddar has no built-in time reader/cmd output reader, so I had to improvise!
Golfed:
var f=->{IO.exec("time/t>c");(String::IO.read("c")).split(":")};var a=f()[0];for(;1;){var b=f();if(b[0]!=a){var c=Number::(a=b[0]);print("BONG "*c).head(5*c-1);}}

Ungolfed:
var f=->{
    IO.exec("time/t>c");
    (String::IO.read("c")).split(":")};
var a=f()[0];
for(;1;){
    var b=f();
    if(b[0]!=a){
        var c=Number::(a=b[0]);
        print("BONG "*c).head(5*c-1);
    }
}

Explanation:
Due to Cheddar's limited standard library, I had to use cmd to generate the time. I did this by saving the output of "time /t", which prints the time in 12-hour format, to a file named "c". IO.read returns a buffer which I casted to a string and split by ":" which ensured the hour is always in index zero. I saved that whole operation into a lambda expression which saved me 44 bytes. After that point it goes into the logic of "if stored hour doesn't equal current hour, set previous hour to current and print BONG n times, trim off the trailing space."
Cheddar may not be the least verbose language but it can be fun to find workarounds like this!
Sadly this is a Windows-only solution.
Edit 1: Saved two bytes by replacing "0<1" in the for-condition to "1" I didn't expect 1 to evaluate to true in this language!

sh, 66 bytes
yes 'echo `yes BONG|sed $(date +%I)q`'|sh -s|awk '$0!=a&&a;{a=$0}'

Explained
#Pipe a command into a subshell repeatedly
yes 'some command'|sh -s

#Print "hour" (1-12) worth of "BONG" strings, one per line,
#use backticks to merge them into a single space-separated string.
#(stolen from zeppelin's answer)
echo `yes BONG|sed $(date +%I)q`

#Print every time the output changes
awk '$0!=a&&a;{a=$0}

This prints immediately once the program is run, it should not do that. The program must only output when a new hour has began

The same problem still appears

@KritixiLithos My bad. I had only updated explanation and byte count, not the actual code.

Now all that is remaining is for me to test it at the hour

@KritixiLithos Replace %I with %M and it works for minutes.

C, 238 bytes
#include<time.h>
#include<unistd.h>
i,j;f(){time_t t=time(0);struct tm l=*localtime(&t);for(;;){t=time(0),l=*localtime(&t),j=l.tm_hour;sleep(1);if(!(l.tm_min+l.tm_sec)){j=j%12?j<12?j:j-12:12;for(i=0;i<=j;i++)printf("BONG%c",i^j?32:10);}}}

I'm not sure if this works correctly, and I'm mobile, and my phone doesn't have a C compiler. (Only works on UNIX-like systems)

This produced infinite output (newlines) when I tried it

@KritixiLithos yes, I forgot to remove the part that I don't use anymore. Can you test in 7 minutes? :)

f instead of main? How is this supposed to work?

@ThomasPadron-McCarthy I'm fairly sure that providing a function, as opposed to a full program, is fine.

PowerShell, 62
for(){if(0-eq(date -f mmss)){''+,'BONG'*(date -f hh)};sleep 1}

Infinite loop, gets the minutes and seconds with -format string mmss and they're cast to ints when compared with 0-eqeuals. Gets the hour in 12 hour format with -format string hh. Implicit spaces come from joining a ,'BONG' array into a string with ''+.

The loop can run several times while mmss == 0

@mazzy have you met PowerShell before? It isn't all that fast :-p    (ok, fixed!)

you can save som bytes for(){''+,'BONG'*(date -f hh)|?{!(date -f ms)};sleep 1} :)

JavaScript ES2015, 100 99 98 96 94 88 bytes
h=_=>new Date/36e5%12|0,p=h();for(;;)h()!=p&&(p=h(),alert('BONG '.repeat(p||12).trim()))

Explanation:
h is a function that gets the 12-hour-based hour of the day using the remainder operator (%12). 36e5 is the number of milliseconds in one hour using the exponential syntax to save characters. The new operator does not require that parentheses are used with functions if there are no arguments, hence new Date. JavaScript only has floating point arithmetic, the | bitwise OR operator forces the number to be an integer because JS bitwise operators work with the integer subset of the numbers represented by IEEE 754 floating point.
The comma delineates sub-expressions. p is initialized to the current hour (p=h()).
for(;;) is used to check repeatedly whether any BONGs should be alerted. Checking is performed as rapidly as the runtime will allow.
If the hour has changed (h()!=p), then we update p and then alert the BONGs. The logical AND operator is used as a guard (it short-circuits if h()===p) to determine if the BONGs are output.
String.prototype.repeat is new in ES2015 and saves some characters over using something like ES5's Array.prototype.join.
h returns zero for exact multiples of 12 (i.e. 12pm, 12am), so we change it to 12 using the logical OR p||12.
With thanks to Kritixi Lithos and ETHProductions for ideas.

I think you can remove the last semi-colon

C, 198 bytes
#import<time.h>
h,i;f(){time_t t=time(0);struct tm l=*localtime(&t);for(h=l.tm_hour;;t=time(0),l=*localtime(&t))if(h-l.tm_hour%12){h=l.tm_hour%12;for(i=h?h%12:12;--i;)printf("BONG ");puts("BONG");}}

R, 104 105 bytes
f=format;repeat{Sys.sleep(1);q=Sys.time();if(f(q,"%M%S")=="0000")print(rep("BONG",as.double(f(q,"%I"))))}

Each second, it will (should) test whether we are at the end of an hour, then print that amount of BONGs.

When will this program output when the program is run at 12:00:01?

I don't know R, but the program must output within 3 seconds of the start of the new hour. I am not really sure if Sys.sleep(60) makes that happen

You can replace while(1) by repeat.

The sleep interval must be shorter than the grace period after the hour for correctness. How about Sys.sleep(2) ?

Come to think of it, why sleep at all?

Oh, I missed the seconds requirement. I'll change the solution when I get back to my pc.

@KritixiLithos Woops, fixed now.

@newcoder Each loop it sleeps for 1 second now, because otherwise it would print BONG for 1 second, instead of just once. This is to ensure it only checks once per second.

Javascript ES6 87 bytes
Edit: Shamelessly borrowed @ETHProductions' new Date/36e5%12|0||12 code to save 6 bytes

setInterval('Date().match`:00:00`?alert("BONG ".repeat(new Date/36e5%12|0||12)):5',1e3)

Excel VBA, 97 Bytes
Code Outputs to the VBE Immediates Window
Do:DoEvents:n=Now:[A1]=(Hour(n)-1)Mod 12+1:?IIf(Minute(n),"",Trim([Rept("BONG ",A1)])+vbCr);:Loop

Fun version, 147 Bytes (Non-Competing)
While it would be rather difficult to get excel to go BONG, it is pretty straight forward to get excel to go Beep. The Beep call produces a beeping sound, and the code below uses this to produce beeps indicating the hour, on the hour, separated by 1 second pauses.
Sub b:Set a=Application:Do:n=Now

If Minute(n)=0 Then:For i=1To(Hour(n)-1)Mod 12+1:Beep:a.Wait(Now+#0:0:1#):Next:a.Wait(n+#0:1#):End If:Loop:End Sub
Ungolfed Version
Public Sub BigBen()
    Dim i As Byte
    Dim n As Date
    Dim w As Worksheet
    Dim a As Excel.Application
    Set a = Application
    Set w = a.ThisWorkbook.Sheets(1)
    Let w.Name = "Big Ben"

    Let w.[A1] = Now
    w.Columns("A:A").AutoFit

    Do
        DoEvents
        Let n = Now
        If Minute(n) = 0 Then

            ''  Print BONG
            Let s = ""
            For i = 1 To Hour(n) Mod 12 Step 1
                Let s = s & "BONG "
            Next i
            Debug.Print Trim(s)

            ''  Go Beep
            For i = 1 To Hour(n) Mod 12 Step 1
                Beep
                a.Wait (Now + #12:00:01 AM#) ''  <- #0:0:1# resolves to #12:00:01 AM#
            Next i

            ''  Keep Ticking After Going BONG
            While Now < n + #12:01:00 AM#    ''  <- #0:1# resolves to #12:01:00 AM#
                Let w.[A1] = Now
                Let a.StatusBar = IIf(Second(Now) Mod 2, "Tick", "Tock")
                DoEvents
            Wend
        End If

        ''  Tick Tock until its time to Go BONG again
        Let a.StatusBar = IIf(Second(n) Mod 2, "Tick", "Tock")
        Let w.[A1] = Now
    Loop

End Sub

Is it possible to test this on a non-Windows computer? If not, could you provide a gif of the output when a new hour begins?

To be entirely honest, I am not immediately sure. It will not be possible to test this code on a linux machine, but it should function properly on a Mac.
However, it may be that the Beep or DoEvents Calls do not function properly on mac machines.

C# 234 Bytes
I'm not planning on winning any prizes here, but a C# implementation is compulsory.
using System;
using System.Linq;namespace B{class P{static void Main(){Func<int> h=()=>DateTime.Now.Hour % 12;var p=h();while (true){var t=h();if (t!=p)Console.WriteLine(string.Concat(Enumerable.Repeat("BONG",t== 0?12:t)));p=t;}}}}

Ungolfed with comments:
using System;
using System.Linq;

namespace B
{
    class P
    {
        static void Main()
        {
            Func<int> h = () => DateTime.Now.Hour % 12; // h(): the hour in the range [0, 11], making this a lambda saves a few chars
            var p = h(); // p: Previous time
            while (true)
            {
                var t = h(); // t: Current time
                if (t != p) // If current hour is different to previous hour
                    Console.WriteLine(string.Concat(Enumerable.Repeat("BONG", t == 0 ? 12 : t))); // Print "BONG" t times (also correcting t = 0 to 12)
                p = t; // Current time is now previous time
            } // Repeat ad nauseum
        }
    }
}

Use for(;;), change h=()=>1+(DateTime.Now.Hour-1)%12; (note no whitespace either) and then Enumerable.Repeat becomes ("BONG",t) (saves you either two or three) then get rid of extra whitespace ie if(...) Also note this will print all the bongs concatenated, probably take those byte savings to turn concat into join with a space as its first argument.

Groovy, 72 bytes
{x={new Date().getHours()};y=x();while(1){if(y!=(y==x()){print "BONG "*y}}}

How?
Store a method to get current hours.
x={new Date().getHours()};

Store initial hours.
y=x();

While true, if current hour not equal previous hour, output current hour multiplied by "BONG " to output current hour of bongs.
while(1){if(y!=(y==x()){print "BONG "*y}}

+3 bytes %12 for non-military bongs.

QBIC, 82 bytes
X=$left$|(_d,2){Y=left$$|(_d,2)~Y<>X|x=!Y!%12~x=0|x=12]B=C[x|B=B+@BONG |]?_tB|]X=Y

Really need to change the token for code literals ($) and implement a substring feature (left$(x,y) can be shorter).
The inner workings:
In the first part, we want to set X$ to the hour-component
of our system's time. The DATE is implemented in QBIC, but
Substring (LEFT$, RIGHT$ and MID$ in QBasic) is not (yet).
We need to use the QBasic LEFT$ function, and QBIC can do
that using a 'code literal': everything from '$' to '|'
is not parsed by QBIC but passed on to QBasic.
X=               Set X$ to
$left$|(         the leftmost (note the '$' and '|' for the code literal)
_d,2)            2 characters of TIME$ (hh:mm format)
{                DO - infinite loop
Y=left$$|(_d,2)  Set Y$ in the same way
~Y<>X            If Y$ is not equal to X$ the hour has changed
|x=!Y!%12        THEN set x to the modulo 12 of Y$ cast to number
~x=0|x=12]       If Y% happens to be divisible by 12, set x to 12
B=C              Clear B$ (c$ never gets assiged a value)
[x|B=B+@BONG |]  For the given number of hours, add "BONG " to B$
?_tB|            Print B$, trim the trailing space
]                end if
X=Y              Update X$
<DO LOOP is implicitly closed>

Update (NC): The $ is no longer used in QBICs instruction set, so it can now be used freely as code for QBasic without the need for code literals. In this case, it saves 4 bytes, bringing QBIC to 78 bytes:
X=left$(_d,2){Y=left$(_d,2)~Y<>X|x=!Y!%12~x=0|x=12]B=C[x|B=B+@BONG `]?_tB|]X=Y

perl, 60 bytes
Update
Replaced  " " with $", removed CORE::, corrected count.
Golf
say join$",(BONG)x(time/3600%12||12)while sleep -time%3600+1

This needs to be run with perl -E.
Remarks

In perl, x while y is equivalent to while(y){x} (where x is a single statement) but does not need the brackets. sleep is executed the first time before anything is printed.
time uses UTC. The original Big Ben is on summer time (British Summer Time, BST) from the end of March until the end of October.
One second is added to the wait time in order to ensure that the program waits    for at least one second. This means that the BONGs will always be printed one   second late, which is legal according to the rules. Let's say you're standing on Westminster Bridge, ca. 300 m away from Big Ben. On the plus side, this also means that the program will print the correct amount of BONGs if it is started at exactly the beginning of an hour (instead of waiting 3600 seconds).
sleep returns the number of seconds waited. This will always be true.

2 things. 1, I'm pretty sure the -E flag is +1 byte (there's a page somewhere about measuring flags...). 2, I'm not sure how to run this as perl -E golf.pl appears to terminate immediately.

PHP, 63 bytes
I could save two more bytes with extended ASCII. But I am currently too lazy for that.
for(;;sleep(1))+date(is)?:print str_pad("
",5*date(h),"BONG ");

prints the BONGs with a leading linebreak precisely at the full hour. Run with -nr.

You have to include the flags in your bytecount

@KritixiLithos No I don´t. -n is kind of implicit (ignore php.and fall back to default config values); -r tells PHP to run code from a command line parameter instead of from a file.

Ah, my bad, I don't know PHP.

C, 152
int a=0,i,L=25;main(){char s[9];for(i=-1;++i<48;){sprintf(s,"%02i:00:00",i);if(!strcmp(s,__TIME__)&&i!=L)a=L=i,i=-1;printf(a-->0?"BONG ":"\n");}main();}

Readable:
int a=0,i,L=25;

main(){
    char s[9];
    for(i=-1;++i<48;){
        sprintf(s,"%02i:00:00",i);
        if(!strcmp(s,__TIME__)&&i!=L)
            a=L=i,i=-1;
        printf(a-->0?"BONG ":"\n");
    }
    main();
}

SmileBASIC, 74 67 bytes
WAIT 61TMREAD OUT H,M,S?("BONG"+" BONG"*((H+11)MOD 12))*!(M+S)EXEC.

Outputs large amounts of "trailing" line breaks ;)
Edit: saved 7 bytes with a better 24->12 hour algorithm.

x86-16 machine code, IBM PC DOS, 62 61 bytes
Binary:
00000000: ba0b 01b8 1c25 cd21 f4eb fdb8 092c cd21  .....%.!.....,.!
00000010: 3834 741f 8834 86ca 85d2 7517 86c5 d40c  84t..4....u.....
00000020: 7502 b00c 91b5 00ba 3401 cd21 e2fc ba3a  u.......4..!...:
00000030: 01cd 21cf 424f 4e47 2024 0d0a 24         ..!.BONG $..$

Listing:
BA 010B     MOV  DX, OFFSET INT_BONG    ; interrupt vector of bong proc
B8 251C     MOV  AX, 0251CH             ; AL = 1CH (timer tick), AH = 25H (set vector)
CD 21       INT  21H                    ; set new interrupt vector
0108    INF_LOOP:
F4          HLT                         ; wait for interrupt
EB FD       JMP  INF_LOOP               ; loop forever
        INT_BONG:                       ; interrupt handler for BONG program
B8 092C     MOV  AX, 2C09H              ; AH = get system time, AL = DOS write string
CD 21       INT  21H                    ; CH = hour, CL = min, DH = sec
38 34       CMP  BYTE PTR[SI], DH       ; compare to previous second
74 21       JZ   DONE                   ; if same second, do nothing
88 34       MOV  BYTE PTR[SI], DH       ; otherwise save new second
        DO_BONG:
86 CA       XCHG CL, DL                 ; DL = min, DH = sec
85 D2       TEST DX, DX                 ; are min and sec 0?
75 19       JNZ  DONE                   ; if so, do nothing
86 C5       XCHG AL, CH                 ; AL = hour, CH = DOS write string
D4 0C       AAM  12                     ; AL = AL % 12, ZF if 0
75 02       JNZ  NOT_MID                ; if not midnight or noon, skip
B0 0C       MOV  AL, 12                 ; if 0, set to 12
        NOT_MID:
91          XCHG AX, CX                 ; CL = hour counter, AH = DOS write string
B5 00       MOV  CH, 0                  ; clear high byte of CX
BA 0139     MOV  DX, OFFSET BONG        ; pointer to BONG string
        BONG_LOOP:
CD 21       INT  21H                    ; write BONG
E2 FC       LOOP BONG_LOOP              ; keep looping
BA 013F     MOV  DX, OFFSET CRLF        ; display CRLF
CD 21       INT  21H                    ; write to stdout
        DONE:
CF          IRET                        ; return from interrupt
        BONG:
            DB   'BONG $'
        CRLF:
            DB   0DH, 0AH,'$'

Standalone PC DOS executable COM program.  This program "hooks" the INT 1CH Timer Tick interrupt which is called every 18.2 times per second (oh really?) by the hardware timer, and then runs our new program in memory.  Typically you'd be considerate and set this back to original handler when done but since we don't really care about the system once we start the program, we're not really worrying about that.
Yes, this is more bytes than just a big loop, but hopefully a little bit more "interesting"!
Runtime:

The next day...


text:
Play some of Pachelbel's Canon
Output the following excerpt from Pachelbel's Canon in D as audio:

Rules

Any format/encoding may be used, so long as a codec existed prior to the creation of this challenge
Any instrument (a real instrument, MIDI synthesis, etc.) may be used
The tempo must be 65 BPM (as notated in the sheet music) - if you cannot get exactly 65 BPM, you may use any tempo within the (inclusive) range 64.75 - 65.25
The sheet music is in concert pitch
Equal temperament tuning must be used (specifically 12-ET with A4 = 440 Hz)

For reference, here is a Stack Snippet that will play the excerpt:

<audio controls><source src="https://a.clyp.it/h3y3isar.mp3"></audio>

Would that snippet be competitive as it downloads it from elsewhere

@muddyfish No, because fetching the output from an external source is a standard loophole.

Would outputting a midi file instead of audio be acceptable?

@DJMcMayhem Yes, MIDI files are acceptable.

I assume the final (only) chord is required in full? That effectively prohibits non-polyphonic languages / API's

@LevelRiverSt Yes. That exact excerpt is to be played.

Is it okay to output two sixteenth notes for an eighth note (and sixteen sixteenth notes for a whole note)?

@JungHwanMin If it's indistinguishable from an actual eighth note (meaning the first doesn't taper noticeably before the second begins), sure.

Would you consider the tempo 64.8649 close enough to 65?

@JungHwanMin Yeah that's fine. A 0.1401 bpm difference would take several more measures to become audible than are present in this except.

Let us continue this discussion in chat.

Is outputting an ABC-notation version OK?

@FlipTack If you can find a codec for it (or, rather, a translation program that translates ABC notation to some common audio format) that existed prior to this challenge, sure.

Just pointing out that this melody was originally in 32th notes.

@DLosc: QBasic deserves an answer here also!

Mathematica, 212 152 139 135 bytes
{#~(s=##~SoundNote~41&)~1&/@LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu",{14,18,21}~s~16}~Sound~18.5

Outputs a Sound object that plays Pachelbel's Canon in D when the Play button is pressed. The instrument is MIDI instrument #41 "Violin".
The Audio
Click me!
Explanation
LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu"

Find the letter numbers of each character in the string ("a" -> 1, "b" -> 2, and so on), wrapped with a List. (This string represents Pachelbel's Canon in D)
#~(s=##~SoundNote~41&)~1&/@...

Set s to SoundNote function whose instrument is #41. Set the duration to 1 and map that function to each element in the List (thus making SoundNote primitive objects).
{14,18,21}~s~16

Make the last triad. (The duration 16 is there to make the last note 16 times longer--a whole note is sixteen times a sixteenth note.)
... ~Sound~18.5

Make a Sound object, 18.5 seconds long (because the tempo is 65 bpm [5 measures of 4/4 with tempo 65 bpm = approximately 18.5 seconds]).
126 byte version, non-competing
Sound[{(s=SoundNote)/@LetterNumber@"uursuursuikmnprsrrnprrfgikigifgiggkiggfdfdbdfgikggkikkmnikmnprsu",{14,18,21}~s~16},240/13]

Non-competing because the output contains two sixteenth notes instead of an eighth note, and the separation is quite noticeable.

Really, Mathematica doesn't have a built-in for Pachelbel's Canon?

@StewieGriffin Only the whole thing probably, and the cost of clipping it would be too high.

@StewieGriffin Surprisingly, it doesn't.

JavaScript (ES7), 249 242 241 bytes
with(new AudioContext)for(t=i=0;n=parseInt('l43l431db98643o86ogfdbdfdgfdzbdzgigikigfdbzbdv98db9864311480'[i++],36);)with(createOscillator())frequency.value=880*2**(-~-n%20/12),connect(destination),start(t),stop(i>56?t+q*8:t+=n>20?q=6/13:q/2)

Thanks to @Neil and @PatrickRoberts for some byte savings!
Explanation
The notation is packed into the string where each character is a single note as a base-36 digit. The note values are determined by the formula (19 - pitch) * time + 1 where pitch is the number of semitones less than A5 and time is 1 for a semiquaver or 20 for a quaver. The 0 at the end stops the for loop.
The tempo is 65.22bpm Edit: exactly 65bpm now, for 2 more bytes.
This explanation/demo uses Math.pow instead of ** for browser compatibility. It also sets the gain of the oscillators to .3 so that the final chord does not make your ears bleed (default gain is 1).

with(new AudioContext)            // use HTML5 audio
  for(                            // iterate through the note pitches and lengths
    t=i=0;                        // t = current time to place the note
    n=parseInt(                   // n = note pitch/length

      // Packed notation string
      'l43l431db98643o86ogfdbdfdgfdzbdzgigikigfdbzbdv98db9864311480'

    [i++],36);
  )
    with(createOscillator())      // create the note oscillator

      // Set the note frequency (using Math.pow for the demo).
      //frequency.value=880*2**(-~-n%20/12),
      frequency.value=880*Math.pow(2,-~-n%20/12),

      // Send the note's sound through the speakers (for the demo, we'll connect it to
      // a gain node so we can reduce the volume).
      //connect(destination),
      connect((g=createGain(),g.gain.value=.3,g.connect(destination),g)),

      start(t),                     // schedule the note to sound
      stop(                         // schedule the end of the note
        i>56?                       // if we are in the final chord
          t+                        //   do not increment the time
            q*8                     //   hard-code the length to a semibreve
        :t+=n>20?q=6/13:q/2         // else update the length based on the note value
      )

You can press the button above to test it in any browser that supports the HTML5 Web Audio API.

880*2**(-~-n%20/12) should save you a few bytes.

@Neil Thanks. I suspect I can get rid of the -~- too by altering the format of my note packing (The + 1 in the formula is only there because I need 0 to stop the for loop and I was too lazy to think about it a lot before I posted).

Saw this after I posted my answer, lol

You can save another byte by replacing c=new AudioContext; with with(new AudioContext) and removing the two occurrences of c. in the program.

Thanks @PatrickRoberts. I used a previous answer of mine as a template so you saved me a byte on that as well!

Do you need to use exponentiation or can you replace *2** with <<?

@kamoroso94 No. The exponent can be a fraction, so if I used << it would cast it to an integer.

BBC BASIC, 141 ASCII characters (65.217BPM)
*TEMPO1
F.i=2TO71j=i>65SOUND1-j*(479+i/2),-9,ASCM." \\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNNVV\\",i)*2,23-j*161N.

Revised to accomodate limit on tempo. Will update explanation later.
BBC BASIC, 123 ASCII characters (noncompeting as 60BPM)
Download interpreter at http://www.bbcbasic.co.uk/bbcwin/download.html
Plays the song directly when run.
F.i=1TO67j=i>64SOUND1-j*(447+i),-9,ASCM."\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\",i)*2,5-j*75N.

Ungolfed
  FOR i = 1 TO 67
    j = i > 64: REM j=0 for the first four bars composed of 16th notes, j=-1 for the final chord (whole note)
    SOUND 1 - j * (447 + i), -9, ASC(MID$("\\VX\\VX\DHLNRVXVVNRVV>@DHD@D>@D@@HD@@>:>:6:>@DH@@HDHHLNLDHLNRVXNV\", i)) * 2, 5 - j * 75
  NEXT i

Explanation
j is a flag indicating whether we are in the first 4 bars or the final chord. TRUE is -1 in BBC BASIC.
The SOUND statement takes 4 parameters:
CHANNEL: for the first 4 bars this is channel 1. For the 3 notes of the chord in the 5th bar, the channel numbers are 201, 202 and 203 hex (513,514 and 515 decimal.) This means play on channels 1,2 and 3, the initial 2 meaning play simultaneously with 2 notes on other channels (i.e play a 3 note chord).
VOLUME: Given as a negative value because positive values represent other effects (sound envelopes.). Set at -9 (will go up to -15 which is loudest.)
PITCH: For this tune, ranges from D4=108 to A5=184. Each integer step is 1/4 of a semitone. Values are stored as ASCII codes in the range 54 to 92 and doubled to regenerate the correct value. 1/8th notes are stored as duplicate 1/16th notes. The final chord is stored as 3 separate pitches and the note length varied to whole note as below.
DURATION: in 1/20 of a second. Duration of 1/16th note is 5/20 of a second so 60 1/4 notes per minute (there is insufficient resolution to make the tempo more precise.) The whole note is 5-(-75)=80 units (4 seconds) long.

Shouldn't this be labeled non-competing, then?

@JungHwanMin To answer the original text of your comment: BPM is within 10% of 65. There is no bound on the precision in the question. OP's call.

60 bpm is audibly distinct from 65 bpm. I'll allow this to be non-competing since it's a restriction imposed by the language.

@Mego I initially thought BBC Basic counted in 100ths of a second by default, I didn`t realise it was as coarse as 20ths of a second. I have adjusted my code to 100ths, so now I can do 65.215BPM, is that OK? It took a little extra fiddling as the whole note exceeds 256/100 so I had to play it as two half notes. 50ths of a second would be shorter code but 62.5BPM is not much of an improvement.

By the way, there were some minor transcription errors in the original post. You might need to change your code a little bit. (The current code has the wrong version)

65.215 is close enough, if that's as close as you can get.

Brings back memories to my youth where I had an amstrad with basic on it. I could transform my keyboard into a music machine by using the SOUND command!

@Carra I had forgotten that the Amstrad BASIC was so similar to BBC BASIC https://en.wikipedia.org/wiki/Locomotive_BASIC. The reason for the  particular scope of SOUND commands on the BBC was that there was a third party sound chip built into it and that set the particular scope of available functionality. I had the Electron, a cut down version of the BBC, which lacked the chip and produced similar (for compataibility) but reduced functionality (i.e only one volume setting) by other means.

Bubblegum, 203 bytes
00000000: e002 2800 c35d 0026 9509 6f34 76f2 ffad  ..(..].&..o4v...
00000010: 4150 0893 a735 bd02 a1eb 1237 18fe 5498  AP...5.....7..T.
00000020: 120a 83e1 6662 8a5e 9709 fe8a 3430 0f48  ....fb.^....40.H
00000030: 5008 54af d19a b44f 2be9 fb3b bf9d 206d  P.T....O+..;.. m
00000040: abbf 12f0 2151 6dae 4712 8c18 4d8e f5cd  ....!Qm.G...M...
00000050: eb85 404c 17cd bd5c 2775 38bd eb50 ab88  ..@L...\'u8..P..
00000060: e015 fb7e 4b1e 5ddb 515b 144c fc5e c1be  ...~K.].Q[.L.^..
00000070: 3d5d 20cd e950 4a1d 256e b56e d364 188b  =] ..PJ.%n.n.d..
00000080: 6fa1 afcc 2100 0235 ada0 2f23 411d 95dd  o...!..5../#A...
00000090: 6665 3b45 041d cbe2 8e3b 2456 fb8d 4e4c  fe;E.....;$V..NL
000000a0: 1a7f b814 a6cf 850e 9b6c 9285 3a6f 1ec3  .........l..:o..
000000b0: 02ed 505c 996b eb4d 209c 2776 a8aa 8380  ..P\.k.M .'v....
000000c0: 42cc b779 218e e75e 8000 00              B..y!..^...

Try it online!
This is a hexdump (reverse with xxd -r) of the source code. The MIDI file it produces is as follows (also a hexdump):
00000000: 4d54 6864 0000 0006 0001 0002 01e0 4d54  MThd..........MT
00000010: 726b 0000 0019 00ff 5902 0200 00ff 5804  rk......Y.....X.
00000020: 0402 1808 00ff 5103 0e15 c500 ff2f 004d  ......Q....../.M
00000030: 5472 6b00 0001 f200 c000 00ff 0405 5069  Trk...........Pi
00000040: 616e 6f00 9051 5f81 5880 5100 1890 4e5f  ano..Q_.X.Q...N_
00000050: 6c80 4e00 0c90 4f5f 6c80 4f00 0c90 515f  l.N...O_l.O...Q_
00000060: 8158 8051 0018 904e 5f6c 804e 000c 904f  .X.Q...N_l.N...O
00000070: 5f6c 804f 000c 9051 5f6c 8051 000c 9045  _l.O...Q_l.Q...E
00000080: 5f6c 8045 000c 9047 5f6c 8047 000c 9049  _l.E...G_l.G...I
00000090: 5f6c 8049 000c 904a 5f6c 804a 000c 904c  _l.I...J_l.J...L
000000a0: 5f6c 804c 000c 904e 5f6c 804e 000c 904f  _l.L...N_l.N...O
000000b0: 5f6c 804f 000c 904e 5f81 5880 4e00 1890  _l.O...N_.X.N...
000000c0: 4a5f 6c80 4a00 0c90 4c5f 6c80 4c00 0c90  J_l.J...L_l.L...
000000d0: 4e5f 8158 804e 0018 9042 5f6c 8042 000c  N_.X.N...B_l.B..
000000e0: 9043 5f6c 8043 000c 9045 5f6c 8045 000c  .C_l.C...E_l.E..
000000f0: 9047 5f6c 8047 000c 9045 5f6c 8045 000c  .G_l.G...E_l.E..
00000100: 9043 5f6c 8043 000c 9045 5f6c 8045 000c  .C_l.C...E_l.E..
00000110: 9042 5f6c 8042 000c 9043 5f6c 8043 000c  .B_l.B...C_l.C..
00000120: 9045 5f6c 8045 000c 9043 5f81 5880 4300  .E_l.E...C_.X.C.
00000130: 1890 475f 6c80 4700 0c90 455f 6c80 4500  ..G_l.G...E_l.E.
00000140: 0c90 435f 8158 8043 0018 9042 5f6c 8042  ..C_.X.C...B_l.B
00000150: 000c 9040 5f6c 8040 000c 9042 5f6c 8042  ...@_l.@...B_l.B
00000160: 000c 9040 5f6c 8040 000c 903e 5f6c 803e  ...@_l.@...>_l.>
00000170: 000c 9040 5f6c 8040 000c 9042 5f6c 8042  ...@_l.@...B_l.B
00000180: 000c 9043 5f6c 8043 000c 9045 5f6c 8045  ...C_l.C...E_l.E
00000190: 000c 9047 5f6c 8047 000c 9043 5f81 5880  ...G_l.G...C_.X.
000001a0: 4300 1890 475f 6c80 4700 0c90 455f 6c80  C...G_l.G...E_l.
000001b0: 4500 0c90 475f 8158 8047 0018 9049 5f6c  E...G_.X.G...I_l
000001c0: 8049 000c 904a 5f6c 804a 000c 9045 5f6c  .I...J_l.J...E_l
000001d0: 8045 000c 9047 5f6c 8047 000c 9049 5f6c  .E...G_l.G...I_l
000001e0: 8049 000c 904a 5f6c 804a 000c 904c 5f6c  .I...J_l.J...L_l
000001f0: 804c 000c 904e 5f6c 804e 000c 904f 5f6c  .L...N_l.N...O_l
00000200: 804f 000c 9051 5f6c 8051 000c 904a 5f00  .O...Q_l.Q...J_.
00000210: 904e 5f00 9051 5f8e 4c80 4a00 0080 4e00  .N_..Q_.L.J...N.
00000220: 0080 5100 8360 ff2f 00                   ..Q..`./.

Befunge, 242 bytes
The tune is written to stdout in the format of a MIDI file. You'll need to redirect that output to a .mid file in order to play the excerpt.
<v:"MThd"0006000101"MTrk"001+"~e"0*3"UQ"30*5"-\"9
v>9#:-#,_0"QONLJIGEJIGEGCGECB@>@B@BCEGCECBECEGECBNLJNONLJIGEQONQONQ"0\:
_v#:\%+77+1,"@",\,*8*82,+3*4!*-3::\,"@",:,*:*62,1
v>"QNJQNJ"0\:
_v#:\+1,"@",\,-**82/3\*:*62:,+!\**97!-3::\
@>,\"/U"3*,,,

Try it online!, although I don't think it's currently possible to save the output in such a way that it'll retain the binary integrity of the data.
Explanation
The first line is essential just a hard coded MIDI header, which is output at the start of line two. The rest of line two encodes the sequence of notes as their MIDI values, which are conveniently ASCII. The third line writes out the MIDI commands for playing those notes, with the duration being automatically calculated (every note is a semiquaver unless i%14 == 0). The final chord is handled as a special case on lines four and five (since that requires multiple keys being pressed simultaneously), and the sixth line writes out the final MIDI end of track marker.

C, 248 228 210 198 193 191 bytes
#define y(x)cos(.346*t*exp(x/17.))
d=1846,t;main(c){for(;t++<d*80;putchar(c=((t<d*64?y(("TTQRTTQRTHJLMOQRQQMOQQEFHJHFHEFHFFJHFFECECACEFHJFFJHJJLMHJLMOQRT"[t/d]-72)):y(12)+y(9)+y(5))+3)*42));}

This produces a sequence of 8 bit unsigned samples intended to be played at 8000 samples per second. If you have an older UNIX/Linux setup, you can redirect the output to /dev/audio. On some newer Linux distros, you may have to pipe the output to the ALSA command line player aplay

so awesome. Great solution!

SmileBASIC, 115 bytes
BGMPLAY"@305T65L16[A8F+G]2A{r}F#8>F#GABAGAF#GAG8BAG8F#EF#EDEF#GABG8BAB8<C#D{r}AA1:1[R1]4F#1:2[R1]4D1{r=>AB<C#DEF#G}

Using a nice instrument was worth 4 extra bytes :)

What's instrument 305?

SmileBASIC has all the general MIDI instruments, but also has a bunch of "secret" undocumented instruments. Here's an example of a much more complicated version of Pachelbel's Canon played using that instrument: https://www.dropbox.com/s/wfhr90tdkkji6qy/305.mp3?dl=0

JavaScript (ES6) using WAV.js, 325 bytes

w=new WAV();w.addProgression(btoa`9¹9¹8¹9¹y9y¸x¸x8¸8¸888¸x¸8xùxùy9`.replace(/[CF]./g,'$&#').split(/(?=[A-G])/g).map((f=t=>n=>({note:n,time:t}))(15/65)));['D5','F5#','A5'].map(n=>w.addNote(f(48/13)(n),.3,[],1,1));new Audio(URL.createObjectURL(w.toBlob())).play()
<script src="https://cdn.rawgit.com/patrickroberts/3b065ab94ce5094baacf45ed23e2a16e/raw/9c367e292fbee8341e1019d0d5953a2234449882/wav.babel.js"></script>

source: Stack Exchange

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

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

sort: votes


text:
Activate the auto destruct sequence
This is a code golf. The smallest amount of bytes wins! :)
What you need to do
You're on Deep Space Nine, a Cardassian outpost taken over by the Federation, in the year 2374. The Borg, a superior race, have collapsed your shields and assimilated half of your crew. However, you have important classified information on your hands that you can't let anyone see at all. Activate the auto-destruct sequence.

What you're actually doing
Take as input an integer value, which will set the exact auto destruct time in seconds. Once the user has passed the value, have a countdown ensue. Countdown backwards by one second each and print each number. At the point it reaches zero, make the program crash.
Rules

You may use STDIN, a parameter, or any other standard input format.
You must put each number on a new line.
You may or may not have an extra delay of one second at the beginning and end.

I was looking at Shortest auto-destructive loop, so if you want to use something from that, feel free, but this isn't really a duplicate of that. You can also wait one sec at the start, but once again, I'd prefer if you don't do this:
Note: Everything in parentheses is ignored.
(input is 10)
(wait 1 sec)
10
(1 sec)
9
(1 sec)
8
(1 sec)
(..etc..)
0
(crash)

And you do this:
(input is 10)
10
(1 sec)
9
(1 sec)
8
(1 sec)
(..etc..)
0
(crash)

Examples
If you don't have stdin but you can have a parameter inputted:
(grab the number from the parameter)
(once the number is loaded in, 10 in this case, print it like so:)
10
(wait one second)
9
(wait one second)
8
(wait one second)
7
(wait one second)
6
(wait one second)
5
(wait one second)
4
(wait one second)
3
(wait one second)
2
(wait one second)
1
(wait one second)
0
(either wait one second then crash, or crash instantly)

If you have a form of stdin:
(allow the user to enter a number, there should be no greeting message)
(once the number is entered, 10 in this case, print it like so:)
10
(wait one second)
9
(wait one second)
8
(wait one second)
7
(wait one second)
6
(wait one second)
5
(wait one second)
4
(wait one second)
3
(wait one second)
2
(wait one second)
1
(wait one second)
0
(either wait one second then crash, or crash instantly)

Have fun!

I don't think this is sufficiently different from your air conditioner challenge.

R, 46 bytes
for(i in scan():0){cat(i,"\n");Sys.sleep(i/i)}

Crashes after printing 0 because the sleep function is called using 0/0 which returns NaN in R:
Error in Sys.sleep(time) : invalid 'time' value

Python 2, 51 bytes
import time
def f(i):print i;time.sleep(i/i);f(i-1)

Recursive function that takes in integer then counts down until the integer is 0 at which point it explodes with a DivideByZero exception.

C, 87 bytes
#import<windows.h>
main(i){for(scanf("%d",&i);i--;){printf("%d\n",i);Sleep(1000*i/i);}}

Death by division by zero.

Batch, 67 bytes
@echo off
for /l %%i in (%1,-1,0)do echo %%i&timeout/t>nul 1
if

Note: the trailing newline is significant; this causes the command processor to choke on the if statement. The odd placement of the >nul is to save a byte as 1>nul would eat the 1 parameter to timeout/t.

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


text:
Absolute Sums of Sidi Polynomial Coefficients
Background
The Sidi polynomial of degree \$n\$ – or the \$(n + 1)\$th Sidi polynomial – is defined as follows.
$$S_n(x) = \sum^n_{k=0}s_{n;k}x^n \text{ where } s_{n;k} = (-1)^k\binom n k (k+1)^n$$
The Sidi polynomials have several interesting properties, but so do their coefficients. The latter form OEIS sequence A075513.
Task
Write a full program or a function that, given a non-negative integer \$n\$, prints or returns the absolute sum of the coefficients of the Sidi polynomial of degree \$n\$, that is
$$\Sigma_n = \sum^n_{k=0}|s_{n;k}|$$
These sums form OEIS sequence A074932.
If you prefer 1-based indexing, you can take a positive integer \$n\$ instead and compute the absolute sum of the coefficients of the \$n\$th Sidi polynomial.
Because this is code-golf, you must make your code as short as possible. All standard rules apply.
Test cases (0-based)
 n           Σ

 0           1
 1           3
 2          18
 3         170
 4        2200
 5       36232
 6      725200
 7    17095248
 8   463936896
 9 14246942336

Test cases (1-based)
 n           Σ

 1           1
 2           3
 3          18
 4         170
 5        2200
 6       36232
 7      725200
 8    17095248
 9   463936896
10 14246942336

05AB1E, 10 bytes
Ý©¹c®>¹m*O

Uses the CP-1252 encoding. Try it online!

Python 2, 43 bytes
f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

Try it online!
A different approach
Ever since I posted this challenge, I tried to come up with a recursive solution to this problem. While I failed using nothing more than pen and paper, I managed to turn the formula to golf into a practical problem – at least for certain definitions of practical – which made it easier to analyze.
Imagine a game show with \$k + m\$ candidates that works as follows.
In round 1, all candidates have to accomplish a certain task as fast as they can. The \$k\$ candidates that accomplish the task the fastest win \$$1\$ each and advance to round 3.
In round 2, the \$m\$ remaining candidates get a second chance to join the other \$k\$. Each candidate is asked a question. If they answer the question correctly, they win \$$1\$ and advance to round 3. However, if they fail to answer the question, they are eliminated from the game. This means round 3 will have between \$k\$ and \$k + m\$ candidates, depending on how many can answer their questions.
Round 3 consists of \$m\$ more contests that are similar to round 1. In each contest, the participants have to accomplish a certain task. Unlike round 1, only one candidate receives a prize, but all candidates get to participate in the next contest. Each contests pay twice as much as the contest before it; the first one pays \$$2\$ and the last one \$$2^m\$.
Note that since all prizes are powers of two, knowing how much prize money a candidate earned means we know if they advanced to round 3 and which of the contests of round 3 they won.
Assume you're watching the game show and round 1 is already over, so you know which \$k\$ candidates have already reached round 3 and which \$m\$ candidates are still stuck in round 2. In how many ways can the remaining prize money be distributed?
Once we know which of the second round's \$m\$ candidates have advanced to round 3, it's easy to calculate the possible outcomes for this specific scenario. If \$j\$ candidates advance, there are \$k + j\$ total candidates in round 3, and thus \$k + j\$ possible outcomes for each contest. With \$m\$ individual contests in round 3, this makes \$(k + j)^m\$ outcomes for all \$m\$ contests.
Now, \$j\$ can take any value between \$0\$ and \$m\$, depending on which candidates answer correctly in round 2. For each fix value of \$j\$, there are \$\binom{m}{j}\$ different combinations of \$j\$ candidates that could have advanced to round 3. If we call the total number of possible outcomes for \$k\$ round 3 candidates and \$m\$ round 2 candidates \$g(m, k)\$, we get the following formula.
$$g(m,k) = \sum_{j=0}^m \binom mj (j+k)^m$$
If we fix \$k = 1\$, we get the following special case, which constitutes our new approach to solve the original problem.
$$g(m,1) = \sum_{j=0}^m \binom mj (j+1)^m = \sum_{j=0}^m |s_{m;j}| = \Sigma_m $$
A recursive formula
Now, assume that you fell asleep during the commercials after round 1, and woke up just in time to see who won the last contest of round 3 and thus the grand prize of \$2^m k$\$. You don't have any other information, not even how much prize money that candidate won in total. In how many ways can the remaining prize money be distributed?
If the winner was one of the \$m\$ candidates of round 2, we already now that they must have advanced to round \$3\$. Thus, we effectively have \$k + 1\$ candidates in round 3, but only \$m - 1\$ candidates in round 2. Since we know the winner of the last contest, there are only \$m - 1\$ contests with uncertain outcomes, so there are \$g(m - 1, k + 1)\$ possible outcomes.
If the winner is one of the \$k\$ candidates that skipped round 2, the calculation becomes slightly trickier. As before, there are only \$m - 1\$ rounds left, but now we still have \$k\$ candidates in round 3 and \$m\$ candidates in round 2. Since the number of round 2 candidates and the number of round 3 contests are different, the possible outcomes cannot be calculated with a simple invocation of \$g\$. However, after the first round 2 candidate has answered – rightly or wrongly – the number of round 2 candidates once again matches the \$m - 1\$ round 3 contests. If the candidate advances, there are \$k + 1\$ round 3 candidates and thus \$g(m - 1, k + 1)\$ possible outcomes; if the candidate is eliminated, the number of round 3 candidates remains at \$k\$ and there are \$g(m - 1, k)\$ possible outcomes. Since the candidate either advances or not, there are \$g(m - 1, k + 1) + g(m - 1, k)\$ possible outcomes combining these two cases.
Now, if we add the potential outcomes for all \$k + m\$ candidates that could have won the grand prize, the result must match \$g(m, k)\$. There are \$m\$ round 2 contestants that lead to \$g(m - 1, k + 1)\$ potential outcomes each, and \$k\$ round 3 contestants that lead to \$g(m - 1, k + 1) + g(m - 1, k)\$ ones. Summing up, we get the following identity.
\begin{align*}
g(m,k) &= m \cdot g(m-1,k+1) + k \cdot (g(m-1,k+1)+g(m-1,k)) \\
&= (m+k) \cdot g(m-1,k+1) + k \cdot g(m-1,k)
\end{align*}
Together with the base case
$$g(0,k)=1$$
these two formulae characterize the function \$g\$ completely.
A golfy implementation
While
g=lambda m,k=1:0**m or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(49 bytes, 0**m yields 1 once m drops to 0) or even
g=lambda m,k=1:m<1 or(m+k)*g(m-1,k+1)+k*g(m-1,k)

(48 bytes, returns True instead of 1) would be valid solutions, there are still bytes to be saved.
If we define a function f that takes the number n of round 1 candidates instead of the number m of round 2 candidates as first argument, i.e.,
$$f(n,k)=g(n-k,k)$$
we get the recursive formula
\begin{align*}
f(n,k) &= g(n-k,k)\\
&= ((n-k)+k) \cdot g((n-k)-1,k+1)+k\cdot g((n-k)-1,k) \\
&= n \cdot f((n-k-1)+(k+1),k+1)+k \cdot f((n-k-1)+k,k) \\
&= n \cdot f(n,k+1) + k \cdot f(n-1,k)
\end{align*}
with base case
$$f(k,k)=g(k-k,k)=g(0,k)=1$$
Finally, we have
$$f(n,1)=g(n-1,1)=\Sigma_{n-1}$$
so the Python implementation
f=lambda n,k=1:k/n or n*f(n,k+1)+k*f(n-1,k)

(k/n yields 1 once \$n = k\$) solves the task at hand with 1-based indexing.

Mathematica, 33 32 bytes
Saved one byte thanks to JungHwan Min.
Binomial[#,r=0~Range~#].(r+1)^#&

Pyth - 13 12 bytes
Just implements the formula without the (-1)^k part.
sm*.cQd^hdQh

Test Suite.

APL (Dyalog Extended), 27 16 bytes
1+(⍳!⊢)+.×⊢*⍨1+⍳

Try it online!
Formula taken from caird coinheringaahing.
-11 bytes from Bubbler (conversion to tacit form.)
Explanation
1+(⍳!⊢)+.×⊢*⍨1+⍳
             1+⍳ 1 + range 1 - n
          ⊢*⍨    to the power n
  (⍳!⊢)          binomial coefficients of n
       +.×       inner(dot) product of the two
1+               + 1

Tacit form gives 16 bytes.

It'd be nice to update the explanation to match the new version.

MATL, 12 bytes
t:XnG:QG^*sQ

Input is 0-based.
Try it online!
Explanation
Consider input 5 as an example.
t      % Take n implicitly. Duplicate
       % STACK: 5, 5
:      % Range [1 2 ...n]
       % STACK: 5, [1 2 3 4 5]
Xn     % N-choose-k, vectorized
       % STACK: [5 10 10 5 1]
G:Q    % Push [2 3 ... n+1]
       % STACK: [5 10 10 5 1], [2 3 4 5 6]
G^     % Raise to n
       % STACK: [5 10 10 5 1], [32 243 1024 3125 7776]
*      % Multiply, element-wise
       % STACK: [160 2430 10240 15625 7776]
s      % Sum of array
       % STACK: 36231
Q      % Add 1. Display implicitly
       % STACK: 36232

R, 36 bytes
sum(choose(n<-scan(),0:n)*(0:n+1)^n)

R's vectorization comes in handy here when applying the formula.

J, 19 bytes
+/@((!{:)*>:^{:)@i.

Uses one-based indexing.
Try it online!
Explanation
+/@((!{:)*>:^{:)@i.  Input: integer n
                 i.  Range [0, 1, ..., n-1]
   (           )@    Operate on that range
             {:        Get the last value, n-1
          >:           Increment, range becomes [1, 2, ..., n]
            ^          Exponentiate. [1^(n-1), 2^(n-1), ..., n^(n-1)]
    ( {:)              Get the last value, n-1
     !                 Binomial coefficient. [C(n-1, 0), C(n-1, 1), ..., C(n-1, n-1)]
         *             Multiply
+/@                  Reduce by addition

Jelly, 8 7 bytes
cŻḋŻ‘*Ɗ

Try it online!
This is a trivial modification of user80092's answer, but given that the user has deleted their account, this seems like an acceptable solution
How it works
cŻḋŻ‘*Ɗ - Main link. Argument: n (integer)        e.g.   5
 Ż      - Range from 0 to n                              [0, 1, 2, 3, 4, 5]
c       - Binomial coefficient                           [1, 5, 10, 10, 5, 1]
      Ɗ - Last three links as a monad:
   Ż    -   Generate the range from 0 to n...            [0, 1, 2, 3, 4, 5]
    ‘   -   Increment each                               [1, 2, 3, 4, 5, 6]
     *  -   Raise to the power of n                      [1, 32, 243, 1024, 3125, 7776]
  ḋ     - Dot-product                                    36232

Maxima, 39 bytes
f(n):=sum(binomial(n,k)*(k+1)^n,k,0,n);

PARI/GP, 35 bytes
n->sum(k=0,n,binomial(n,k)*(k+1)^n)

Jelly, 9 bytes
cR×R‘*ƊS‘

Try it online!
How it works
cR×R‘*ƊS‘ - Main link. Argument: n (integer)        e.g.   5
 R        - Range from 1 to n                              [1, 2, 3, 4, 5]
c         - Binomial coefficient                           [5, 10, 10, 5, 1]
      Ɗ   - Last three links as a monad:
   R      -   Link 1: Range from 1 to n                    [1, 2, 3, 4, 5]
    ‘     -   Link 2: Increment                            [2, 3, 4, 5, 6]
     *    -   Link 3: To the power of n                    [32, 243, 1024, 3125, 7776]
  ×       - Multiply, pairwise                             [160, 2430, 10240, 15625, 7776]
       S  - Sum                                            36231
        ‘ - Increment                                      36232

Axiom, 39 bytes
f(n)==sum(binomial(n,i)*(i+1)^n,i=0..n)

test code and results
(35) -> [[i,f(i)] for i in 0..9]
   (35)
   [[0,1], [1,3], [2,18], [3,170], [4,2200], [5,36232], [6,725200],
    [7,17095248], [8,463936896], [9,14246942336]]

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


text:
Calculate the prime factors
We had a prime factorization challenge a while ago, but that challenge is nearly six years old and barely meets our current requirements, so I believe it's time for a new one.
Challenge
Write a program or function that takes as input an integer greater than 1 and outputs or returns a list of its prime factors.
Rules

Input and output may be given by any standard method and in any standard format.
Duplicate factors must be included in the output.
The output may be in any order.
The input will not be less than 2 or more than 231 - 1.
Built-ins are allowed, but including a non-builtin solution is encouraged.

Test cases
2 -> 2
3 -> 3
4 -> 2, 2
6 -> 2, 3
8 -> 2, 2, 2
12 -> 2, 2, 3
255 -> 3, 5, 17
256 -> 2, 2, 2, 2, 2, 2, 2, 2
1001 -> 7, 11, 13
223092870 -> 2, 3, 5, 7, 11, 13, 17, 19, 23
2147483646 -> 2, 3, 3, 7, 11, 31, 151, 331
2147483647 -> 2147483647

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

Would've been much better if you disallowed built-ins.

@TheBitByte Challenges that disallow built-ins are generally looked down upon as Do X without Y challenges, especially since it's sometimes hard to tell whether a solution is technically a built-in.

Well then, enjoy the influx of <5 byte solutions! As I write this, Pyth already does it in 1 byte.

@TheBitByte Think of it as a language-by-language challenge, primarily. Try to beat Python's solution, or some other language without a builtin.

@isaacg Well, language-by-language is a better way of looking at it, I agree.

I can't seem to find the "standard format" meta post. Are trailing separators allowed? i.e. Input 4, Output 2,2,?

@BrianJ I don't know that we have one. I'll allow that for this challenge.

Why do you mark my question as a duplicate of yours when your question is clearly the duplicate as it has been posted later? Please rectify this decision.

@FUZxxl It's the community consensus that old questions should be closed as duplicates of newer ones if the newer one has a very clear spec. The main reasons for this are that old challenges tend not to be up-to-date with today's challenge specs, and newer languages can participate in newer challenges. However, as the output format is quite different for your challenge, I've reopened it.

@ETHproductions So is my spec not very clear? Can you explain where it is unclear? You should avoid conflicts-of-interest like these where you use your permissions to close another users question over yours.

@FUZxxl After talking with other users, I've decided that closing your question was not the action I should have taken. It would have been better to let the community decide whether your spec is clear enough, and thus whether or not to close it. I apologize for the ruckus I've caused.

Can the code exit with an error?

Python 2, 55 bytes
f=lambda n,k=2:n/k*[0]and(f(n,k+1),[k]+f(n/k,k))[n%k<1]

Try it online!

I'd bet you've had this waiting for most of an hour...

Pyth, 1 byte
P

I like Pyth's chances in this challenge.

Until the "P" language comes along and does it in 0 bytes

Python 2, 53 bytes
f=lambda n,i=2:n/i*[f]and[f(n,i+1),[i]+f(n/i)][n%i<1]

Tries each potential divisor i in turn. If i is a divisor, prepends it and restarts with n/i. Else, tries the next-highest divisor. Because divisors are checked in increasing order, only the prime ones are found.
As a program, for 55 bytes:
n=input();i=2
while~-n:
 if n%i:i+=1
 else:n/=i;print i

Mathematica, 38 30 bytes
Thanks @MartinEnder for 8 bytes!
Join@@Table@@@FactorInteger@#&

How about FactorInteger[#][[All, 1]]&?  26 bytes

@DavidG.Stork that wouldn't work because it would not repeat the prime factors if the power is greater than 1.

Haskell, 48 bytes
(2%)
n%1=[]
n%m|mod m n<1=n:n%div m n|k<-n+1=k%m

Try it online! Example usage: (2%) 1001 yields [7,11,13].

Jelly, 2 bytes
Æf

Try it online!

JavaScript (ES6), 44 bytes
f=(n,x=2)=>n-1?n%x?f(n,x+1):[x,...f(n/x)]:[]

Horribly inefficient due to the fact that it iterates from 2 up to every prime factor, including the last. You can cut the time complexity dramatically at the cost of 5 bytes:
f=(n,x=2)=>x*x>n?[n]:n%x?f(n,x+1):[x,...f(n/x,x)]

You can save a byte by outputting a string rather than an array: f=(n,i=2)=>n%i?n-1?f(n,i+1):"":i+" "+f(n/i)

@Spitemaster Another byte (use comma): f=(n,i=2)=>n%i?f(n,i+1):n-i?i+[,f(n/i)]:i

Cubix, 37 32 bytes
vs(...<..1I>(!@)s)%?w;O,s(No;^;<

Try it online! or Watch it in action.

Haskell, 47 bytes
Basically this checks all integers 2, 3, 4, 5, ... for divisors of n. If we find one, we factor that out and repeat the process until we get to 1.
f 1=[]
f n=(:)<*>f.div n$until((<1).mod n)(+1)2

Try it online!

Actually, 6 bytes
w`in`M

Try it online!
Explanation:
w`in`M
w       factor into primes and exponents
 `in`M  repeat each prime # of times equal to exponent

You can probably just use o now, right?

@Oliver Yes, but I don't usually update old answers with builtins.

J, 2 bytes
q:

Body must be at least 30 characters.

MATL, 2 bytes
Yf

Try it online!
Obligatory "boring built-in answer".

Japt, 2 bytes
Uk

A built-in k used on the input U. Also refers to a country.
Test it online!

Vyxal, 1 byte
ǐ

Try it Online!
Just the built-in. But that's boring, so
Vyxal, 16 8 bytes
K~æ~Ǒ$ẋf

Try it Online!
Explained
ʀ~æ~Ǒ$ẋf
ʀ~æ      # From the all numbers in the range [0, input], keep only those that are prime
   ~Ǒ    # Without popping anything, get the multiplicity of each prime divisor - this leaves the stack as [divisors, multiplicities]
     $ẋ  # Swap the two items and repeat each divisor multiplicity times
       f # Flatten and output that

I think you should keep the 16 byte version too, since that doesn't even use any built-ins for enumerating divisors. (Though maybe there's something between 8 and 16 bytes that also fits that criterion.)

@Deadcode I'll be honest, i only removed it because I didn't think it would work anymore - it was written a very long time ago and many things have changed since. But turns out it still works in older versions, so I'll put it back a little later.

tone-deaf, 3 bytes
This language is quite young and not really ready for anything major yet, but it can do prime factorization:
A/D

This will wait for user input, and then output the list of prime factors.

MATLAB, 6 bytes
I think this does not require any explanation.
factor

Batch, 96 bytes
@set/an=%1,f=2,r=0
:l
@set/af+=!!r,r=n%%f
@if %r%==0 echo %f%&set/an/=f
@if %n% gtr 1 goto l

R, 53 52 bytes
p=function(n,i=2)if(n>1)c(i[m<-!n%%i],p(n/i^m,i+!m))

Try it online!
Recursive function: overflows the stack limit and errors on TIO for the last test case.

R, 59 58 bytes
function(n,i=2)while(n>1)if(n%%i)i=i+1 else{show(i);n=n/i}

Try it online!
Non-recursive function: does not error for large primes, but will still take a very long time to run (and so times-out without erroring on TIO for the last test case anyway).

CellTail, 166 bytes
N,(u,u,_),N:1,(u,1),(0,2);(0,2),N,N:1,N,N;N,(u,v,0),N:1,(v,1),(u/v,2,(u/v)%2);N,(u,v,w),N:1,(u,v+1,u%(v+1)),N;a&(_,_,_),N,N:1,a,N;_,(v,1),_:1,v,N;N,u,N:1,(u,2,u%2),N;

Try the demo
Explanation:
Base case, when we reach the end switch to a recursion resistant tuple and pass a message right to break it. Then the message right sends a 1 to prevent recursion when the tuple has broken.
N,(u,u,_),N:1,(u,1),(0,2);(0,2),N,N:1,N,N;

We have found a factor, try again in the cell to the right with (u/v)
N,(u,v,0),N:1,(v,1),(u/v,2,(u/v)%2);

We have not found a factor, try another.
N,(u,v,w),N:1,(u,v+1,u%(v+1)),N;

Copy 3-tuples from left to current
a&(_,_,_),N,N:1,a,N;

Break recursion resistant tuples. Hopefully the next step the value from the right will throw a 1 to break the recursion.
_,(v,1),_:1,v,N;

Base case, start with trying 2 as a factor.
N,u,N:1,(u,2,u%2),N;

Bash + coreutils, 19 bytes
factor|sed s/.*:.//

Try it online!

You can shave off a byte if whitespace doesn't matter in the output using factor|sed s/.*://. Also factor|cut -d: -f2 (or factor|cut -d\  -f2 to match your current output) is the same byte length but is going to run faster and use less memory overhead.

I'll ask the OP about whitespace. Sadly, I'd need factor|cut -d\ -f2- to eliminate the leading space, which is one byte longer.

Pyke, 1 byte
P

Try it here!
Prime factors builtin.

Hexagony, 58 bytes
Not done golfing yet, but @MartinEnder should be able to destroy this anyway
Prints out factors space-separated, with a trailing space
Golfed:
2}\..}$?i6;>(<...=.\'/})."@...>%<..'':\}$"!>~\{=\)=\}&<.\\

Laid-out:
     2 } \ . .
    } $ ? i 6 ;
   > ( < . . . =
  . \ ' / } ) . "
 @ . . . > % < . .
  ' ' : \ } $ " !
   > ~ \ { = \ )
    = \ } & < .
     \ \ . . .

Explanation coming later.

05AB1E, 1 byte
Ò

Try it online!

I wonder how many people will outgolf Dennis...

CJam, 2 bytes
mf

cjam.aditsu.net/...
This is a function. Martin, it seems I was sleepy.

C, 92 bytes
int p(int n){for(int i=2;i<n;i++)if(n%i==0)return printf("%d, ",i)+p(n/i);printf("%d\n",n);}

Ungolfed version:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int prime(int number) {
    for (int i = 2; i < number; i++) {
        if (number % i == 0) {
            printf("%d, ", i);
            return prime(number / i); //you can golf away a few bytes by returning the sum of your recursive function and the return of printf, which is an int
        }                             //this allow you to golf a few more bytes thanks to inline calls
    }
    printf("%d\n", number);
}

int main(int argc, char **argv) {
    prime(atoi(argv[1]));
}

Japt, 1 byte
k

Try it online!

Java (OpenJDK), 259 bytes
import java.util.*;interface g{static void main(String[]z){int a=new Scanner(System.in).nextInt();int b=0;int[]l={};for(int i=2;i<=a;i++){for(;a%i<1;l[b-1]=i){l=Arrays.copyOf(l,b=l.length+1);a/=i;}}for(int i=0;i<b;i++)System.out.print(l[i]+(i<b-1?", ":""));}}

Try it online!

Refer to this gist to see how this submission can be golfed further: https://gist.github.com/kritixilithos/fde37dc5a8ae54852aa134a6e70ea495. If you need to clarify something, feel free to ping me at the 19th byte :)

PHP, 51 bytes
for($i=2;1<$a=&$argn;)$a%$i?$i++:$a/=$i*print"$i ";

Try it online!

Ruby, 48 45 bytes
->x{r,*c=2;0while x%r>0?x>=r+=1:c<<r&&x/=r;c}

Try it online!

C (gcc), 51 bytes
i;f(n){for(i=2;i<=n;)n%i?i++:printf("%d ",i,n/=i);}

Try it online!

Pyt, 1 byte
ḋ

Boring built-in answer
Try it online!

Unfortunately, the non-built-in solution doesn't work on any number containing a duplicate factor (e.g. 8)

Yep, you're right. Lemme delete it.

Gol><>, 19 bytes
IT1WP2K%ZB|:N,:M?t;

Try it online!
Explanation
IT                  < [n]     read input to n then mark cell (T)
  1WP     |         < [n m=2] from 2 onwards (m=1;while m:m++;)
     2K%ZB          < [n m+1] copy two elements, mod, break if n%m==0
           :N       < [n m] (< where n%m==0) print m with newline
             ,:M?t; < [n/m] (< new n)        divide, if not 1 redo from T else exit

APL(NARS), 1 char, 2 bytes
π

That is...

... rather short?

@JonathanFrech yes it is short... Less than a character should be impossible...

Haskell, 47 bytes
f 1=[]
f n=[k:f a|k<-[2..],a<-[1..n],a*k==n]!!0

Try it online!
f 1=[]
f n=[k:f(div n k)|k<-[2..],mod n k<1]!!0

Try it online!

Regex (ECMAScript or better), 28 bytes
(?=(xx+?)\1*$)(x+)\2*(?=\2$)

Takes its input in unary, as a string of x characters whose length represents the number. Returns its output as the list of matches' \1 captures, whose lengths represent the prime factors.
Try it online! - ECMAScript
Try it online! - Perl
Try it online! - PCRE1
Try it online! - PCRE2
Try it online! - Java
Try it online! - Boost
Try it online! - Python
Try it online! - Python (import regex)
Try it online! - Ruby
Try it online! - .NET
(?=(xx+?)\1*$)  # Assert tail ≥ 2; \1 = the smallest prime factor of tail
(x+)\2*(?=\2$)  # tail = \2 = the largest proper divisor of tail

Regex (.NET), 31 bytes
((?=(xx+?)\2*$)(x+)\3*(?=\3$))*

Returns its output as the list of captures on the Balancing Group 2 stack, whose lengths represent the prime factors.
Try it online!
(
    (?=(xx+?)\2*$)  # Push the smallest prime factor of tail onto the Group 2
                    # capture stack.
    (x+)\3*(?=\3$)  # tail = \3 = the largest proper divisor of tail
)*                  # Loop the above as many times as possible, minimum zero.

This regex naturally handles an input of 1 correctly, returning an empty list.
Regex (Perl / PCRE / Boost / Ruby), 41 bytes
(?=(xx+?)\1*$)(?=(x+)\2+$).*?\K\1(?=\2?$)

Returns its output as the list of matches, whose lengths represent the prime factors.
Try it online! - Perl
Try it online! - PCRE
Try it online! - Boost
Try it online! - Ruby
This requires Perl/PCRE/Boost/Ruby due to the use of the \K (set start of match) function. Other than that, no features more advanced than those available in ECMAScript/Python are used.
(?=(xx+?)\1*$)   # \1 = smallest prime factor of tail
(?=(x+  )\2+$)   # \2 = largest proper divisor of tail
.*?\K\1(?=\2?$)  # Manipulate the match to be \1 exactly, using "\K" to start
                 # the match before it;
                 # if tail was prime, tail = 0, else tail = \2

Rockstar, 659 characters
Not really my code, but quite fun, source quoted at bottom:
Depression takes your hope and your light
While your hope is as high as your light
Put your hope without your light into your hope

If your hope is gone
Give back yes

Give back lies

Listen to your heart
My world is selflessness
Your faith is forgiveness
While your heart is bigger than your faith and depression taking your heart, my world
Whisper my world
Put your heart over my world into your heart

Build my world up
While your heart is bigger than your faith
While your heart is bigger than your faith and depression taking your heart, my world
Scream my world
Put your heart over my world into your heart

Build my world up, up

Source: https://github.com/RockstarLang/rockstar/blob/main/examples/factorization.rock
Rockstar language:
https://codewithrockstar.com/

Is all the white-space necessary?

Welcome to Code Golf! :)

I don't think all the white space is necessary

Thunno 2, 1 byte
f

Try it online!
Built-in for "prime factors".
Thunno 2, 11 bytes
(ḅ}ÐRḣœḊhß÷

Try it online!
No factor built-ins.
Explanation
(ḅ}ÐRḣœḊhß÷  # Implicit input
(            # While loop:
 ḅ}          #   (condition)  not equal to 1
   Ð         #   (body)  triplicate the current number
    Rḣ       #           pop one copy and push [2..n]
      œḊh    #           first number it's divisible by
         ß   #           print this without popping
          ÷  #           and divide the number by this

ForWhile, 30 bytes
{1;[1+;[;;%!:[.';/;;1=!]):)..}
Takes integer on stack as input, pushes prime factors on the stack
online interpreter
Explanation
{    }   \ anonymous procedure taking value n on stack as input
 1       \ push 1
  ;[     \ repeat n times
    1+   \ increase the counter by 1
      ;[ \ repeat up to n times

 ;;%!             \ check if n is divisible by the counter
     :[.        ] \ if yes
        ';/;;1=!  \ divide n by the counter and check if n is not equal to 1

   )     \ break the loop if the top stack value is zero
    :)   \ continue at the start of the loop
      .. \ cleanup stack
```

Perl 6,  77  64 bytes
{my$a=$_;.is-prime??$_!!map ->\f{|({$a%f||($a/=f)&&f}...^*!= f)},(2... *>$a)}

Try it
{my$a=$_;map ->\f{|({$a%f||($a div=f)&&f}...^ f>*)},(2... *>$a)}

Try it ( Note: it doesn't have enough time allotted to finish )

A much more performant version is slightly longer at 100 bytes.
{my$a=$_;map ->\f{|({$a.is-prime??($/=$a)&&($a=0)||$/!!($a%f||($a div=f)&&f)}...^ f>*)},(2... *>$a)}

Try it

Expanded: (64 byte version)
{
  my $a = $_;  # the input ｢$_｣ is read-only by default
  map
    -> \f {
      |(              # slip ( flattens into outer list )

        # generate sequence of 0 or more ｢f｣s
        {
          $a % f      # is it not evenly divisible

          ||          # if it is evenly divisible
          ($a div=f)  # divide it
          &&          # and
          f           # return ｢f｣
        }
        ...^   # keep doing that until
        f > *  # ｢f｣ is bigger
      )

    },

    # do that over the following list

    (2 ... * > $a) # generate a sequence from 2
                   # up to whatever the value of $a
                   # is at the time of the check
}

VB.NET, 86 bytes
Had this sitting around from some Project Euler programs. Removed the optimizations in the interest of shortness, and this is the result.  Naturally, VB is very verbose, so it's fairly long. I'm not counting the leading whitespace. It can be omitted, but is easier to read with it.
This takes an integer as a parameter, and prints the prime factors with a comma after. There is a trailing comma at the end.
Sub A(a)
    For i=2To a ' VB re-evaluates a each time, so the /= at the end of the loop shortens this
        While a Mod i=0 ' this is a factor. We've grabbed primes before this, so this must be a prime factor
            Console.Write(i &",") ' output
            a/=i ' "mark" the prime as "used"
        End While
    Next
End Sub

Perl 6, 51 bytes
A recursive solution:
sub f(\n,\d=2){n-1??n%d??f n,d+1!!(d,|f n/d,d)!!()}

Ruby, 61 bytes
require'prime';->x{x.prime_division.flat_map{|x|[x[0]]*x[1]}}

Shortest builtin-version I could think of.

Python 2, 55 bytes
n=input();i=1
while~-n:
 i+=1
 while n%i<1:print i;n/=i

Try it online!

Scala 3, 83 bytes
def f(n:Int,k:Int=2):Seq[Int]=if(n<k)Seq();else if(n%k==0)k+:f(n/k,k);else f(n,k+1)

Attempt This Online!

Nibbles, 10.5  bytes (21 nibbles)
!;`.$/$=2|,$~%@$>>@/

Attempt This Online!
  `.                        # iterate while unique
    $                       # starting with input:
     /$                     #   itself divided by
       =2|,$~%@$            #   its first divisor;
 ;                          # now, remember this list
!                           # and zip it with
                  >>@       # itself without its first element
                     /      # by division