Befunge is een esoterische programmeertaal die in 1993 ontwikkeld werd door Chris Pressey. Het is een stackgebaseerde taal met reflectie. Een programma wordt geschreven in een rooster
van 80 kolommen en 25 rijen. Via richtinstructies wordt de richting die het programma uitgaat gedefinieerd. Op die manier kunnen ook
lussen gemaakt worden.

Geschiedenis 
Bij de ontwikkeling van Befunge probeerde Pressey een taal te creëren die zo moeilijk mogelijk is om te compileren. Desondanks is er vervolgens een aantal compilers voor geschreven. Nadien is er een aantal uitbreidingen ontwikkeld op de originele Befunge-93. Extensies op en varianten van Befunge worden fungeoids of funges genoemd. De huidige standaard is Funge-98 waar het
aantal dimensies aanpasbaar is en die multithreading ondersteunt met meerdere instructiepointers.
Als uitvoering van het programma in het 80×25-rooster aan de rand komt gaat het verder aan de overliggende zijde van het rooster. Hierdoor is de originele Befunge niet turingvolledig. Funge-98 elimineerde ook die restrictie.

Instructies 
 0: Plaats het cijfer "0" op de stack (hetzelfde met 1-9).
 +: Haal a en b van de stack en plaats hun som terug.
 -: Als +, maar dan het verschil.
 *: Als +, maar dan de vermenigvuldiging.
 /: Als +, maar dan de (afgeronde) deling. Bij nuldeling vragen aan gebruiker.
 %: Als /, maar dan de restdeling.
 !: Logische not, bij 0 plaats 1 op de stack en omgekeerd.
 `: Groter dan, Haal a en b van de stack, als b groter dan a: plaats 1 terug, anders 0.
 >: Instructie naar rechts.
 <: Instructie naar links.
 ^: Instructie naar boven.
 v: Instructie naar onder.
 ?: Instructie in willekeurige richting.
 _: Haal een waarde van de stack, indien 0 instructie naar rechts, anders links.
 |: Als _, maar dan met onder en boven.
 ": Plaats alle karakters tot de volgende " op de stack.
 :: Kopieer de eerste waarde op de stack.
 \: Verwissel de twee eerste waarden op de stack.
 $: Haal waarde van de stack.
 .: Als $, maar met vervolgens uitvoer als integer.
 ,: Als $, maar met vervolgens uitvoer als karakter.
 #: Volgende cel overslaan.
 p: Haal x, y en v van de stack en vervang positie (x,y) in het programma door v.
 g: Haal x en y van de stack en plaats het karakter op positie (x,y) in het programma terug.
 &: Vraag de invoer van een cijfer en plaats het in de stack.
 ~: Als &, maar dan met een karakter.
 @: Einde programma.

Voorbeelden

Hello World 
Het klassieke Hello World:

 >              v
 v  ,,,,,"Hello"<
 >48*,          v
 v,,,,,,"World!"<
 >25*,@

Willekeurig cijfergenerator 
Volgend voorbeeld genereert een oneindige uitvoer van willekeurige cijfers van 1
tot 9:

 vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<

Externe links 
 quadium.net - specificatie
 esolangs.org - wiki

Esoterische programmeertaal