« first day (2465 days earlier)      last day (2361 days later) » 

12:49 AM
Does anyone have idea for optional syntax to shorten this:
if foo != null: f(foo)
(this is for VSL)
I was thinking like foo ?| f but that's like really esoteric
 
wait nevermind i didn't read properly haha
 
1:11 AM
@Downgoat probably some null check syntax
 
@Downgoat: foo?f(foo),0:0
 
Argh.
When I edit files in GitHub, my typing is reversed!
Why?
 
because somebody stuck a force-RTL character for you to pick up?
"Help sometimes when I run apt-get upgrade dwarf fortress starts half way through and apt-get upgrade won't finish until the game quits?" Man that was spectacular psychic debugging.
 
I loved that question
 
Not a trollish RTL.
It works just fine in Internet Explorer
But for some reason, it's backwards in Chrome
This is infuriating. !esaelP !em pleH
 
1:23 AM
vsl::lex> 1

<--- Last few GCs --->

[75037:0x103800000]     3498 ms: Mark-sweep 1052.9 (1076.0) -> 763.8 (785.8) MB, 160.7 / 0.0 ms  (+ 176.8 ms in 2 steps since start of marking, biggest step 92.7 ms) GC interrupt GC in old space requested
[75037:0x103800000]     6149 ms: Mark-sweep 1298.6 (1320.6) -> 543.7 (567.8) MB, 1409.9 / 0.0 ms  allocation failure GC in old space requested


<--- JS stacktrace --->

==== JS stack trace =========================================

Security context: 0x3460f06c0d11 <JS Object>
TIL tokenizing number 1 is very memory intensive task for node.js
 
somebody's VM host is sick
 
1:48 AM
Since people keep doing it: PLEASE don't delete vote spam. Spam flagging spam and getting community to delete it will (eventually) ban that IP
 
@ASCII-only you can ignore earlier message I made new tokenizer
 
2:32 AM
@quartata I made a meta post to hopefully make more people aware of how to properly handle spam.
 
0
Q: How do we handle spam posts?

HyperNeutrinoOccasionally, spammers show up on PPCG and post spam, including stuff like promotion of (probably fake) products, (probably fake) offers to transfer money into your account (after you give then $500 dollars), etc. Upon seeing this, it might make sense to downvote, flag, and delete. However, if e...

 
3:17 AM
Guys help with deleting a few posts? Here, here, and here; please flag them as spam/R/A or something thanks
 
3:37 AM
flagged
 
 
2 hours later…
5:35 AM
Oh neat, I got my silver code-golf badge.
 
 
2 hours later…
7:48 AM
1
Q: Type the Alphabet - as fast as you can!

Danko DurbićYour task is to make a program that measures how fast you can type the letters of the English alphabet. The program shall only accept lowercase letters a to z in alphabetical order. Each letter is echoed as typed on the same line (without new line or any other separators between letters). If ...

 
@AdmBorkBork is there a way to set up PowerShell so that it sends each character I type to a process's STDIN immediately, instead of buffering it until I send a newline?
apparently this is called raw mode on Unix
 
 
1 hour later…
9:07 AM
Should we create an "anti spam bot"? Or maybe hire one?
 
9:51 AM
@Nobody Seems that we already have one. github.com/Charcoal-SE/SmokeDetector
 
10:30 AM
any of you guys play real golf? I played a 9-hole round yesterday and all I could think about was how to hack off strokes. tried telling my friends that by resigning before we even started i will not have a score that is less than anyone else's and therefore i will be the winner
but they weren't having it
 
 
2 hours later…
12:25 PM
Any reason for those 6 stars?
Actually, even more single starred messages. This doesn't look good :/
 
@MartinEnder @Mego @Dennis Can you clean up the star abuse?
 
Was just about to ask too lol
 
Just saw a deleted spam post saying "Join the Illuminati", and was disappointed to find out that it wasn't on the "Confirm the Illuminati" question
 
I agree 100% with Hyper’s post on meta +1 / +1 from me
 
1:01 PM
@DestructibleLemon for syntax highlighting, you may customize highlighting by word, but there is a documentation window which displays a string based on what regex matches the line you are at.
 
2:00 PM
I'm trying to design my own golfing language (for shits and giggles) but I have absolutely no experience with parsers or tokenizers or any sort of language design. Most of the tutorials I find separate tokens by whitespace or some other separator, which I can't do. Does anyone know a tutorial or some other way to learn how to design these languages?
 
@TreFox That varies a lot for the type of language - for stack-based you don't need anything special, but even other types AFAIK shouldn't be too difficult.
I don't know anything about parsers/tokenizers, but somehow I made this practical-ish language which has quite advanced parsing rules
 
2:24 PM
For Pyke, I just had the parser go over every node and ask it if it could accept the string and if so return an instance of a node and the rest of the string
For the GOL language I used Python's built in tokeniser and made the rest up as I went along and ended up creating an XML grammar, in the process learning XML has it's place over json in some circumstances
 
@muddyfish that sounds way too complicated for a stack-based language. SOGLs interpreter just has a program pointer and it asks to interpret the character under it, which can modify the pointer. It's a bit more complicated for strings/loops, but that's because I was stupid and made SOGL horribly :p
 
The second one definitely is. I doubt it would even be useful for a golfing language. The first however works really nicely for me
It means my nodes have full access to the script and can change things as needed and inject new code for example. There's even restoration points for continuing code execution in places
Like save the program counter and current stack and restore it in case of an exception
 
@muddyfish I had the idea of doing something like that, but I realised that making exceptions not happen would be more useful :p
 
No exceptions makes it hard to debug stuff imo
And hard to work out when a feature breaks
 
2:40 PM
@muddyfish I've had that happen so little that adding any language debugging is useless for me :p
 
Heh. Stuff breaks often for me, though that's probably been because I've been changing the language core recently rather than the nodes themselves
 
@muddyfish SOGLs "core" is so horrible that I only touch it in emergencies :p
 
Making one byte and two byte things work at the same time was awful, especially automatically golfing code
I tried auto explanations but was confounded by the halting problem
 
@muddyfish 1) ooo auto-golfing code 2) SOGL as of recently has variable length tokens that change themselves depending on the stack at the moment
 
I'm thinking of making it so the output types of each node can be determined at compile time
So explanations work automatically
 
2:47 PM
@muddyfish that reminds me that I should work on that golfing language I've been (or,... well not been) working on with ASCII-only, for which knowing the stack item types at compile time is pretty required for better byte counts
 
Oh, also fixing time inputs and infinite generators
Something useful I've added is going from a list of node objects back to code form
*in the most compact way that complies
 
3:20 PM
@MartinEnder I'm not sure but possibly? You could try to super-ping Joey; he's actually done work on writing I/O modules for PowerShell, so he may have a better insight.
 
3:34 PM
yesterday, by user202729
@NieDzejkob I guess I understood what is A000256.
@NieDzejkob (again)
> A triangulation is simple if no three edges, not all
external, form a simple closed curve enclosing a region which is subdivided
into three or more triangles.
And the sequence is "number of simple triangulations of a triangle with n nodes. "
 
wat
For some reason, Dictionary.com lists two pronunciations of tuple: TUH-pəl, which makes sense, but it also has TYUU-pəl for some reason
I guess I can kinda see the second pronunciation
 
I pronounce it as t-eww-p-el
 
Yeah, but that would just be TUU-pəl instead of TYUU-pəl
 
3:59 PM
That's the way I've always said it TUU-pəl
I've never heard TYUU-pəl
 
huh
how is that a pronunciation of tuple
 
4:29 PM
> i claim that everybody including me is a fucking sh**p
damn
 
it was a flag
 
oh I must have missed the blue circle then
 
@ASCII-only should generic classes not be a class
because they are not really a class
more like a template
 
5:08 PM
Question: How does Jelly' Bijective Base work?
 
jelly's?
I suppose like bijective base?
not sure what you mean here
 
I don't quite understand bijective base vs. normal base
 
@HyperNeutrino bijective base uses 1 to n while normal base uses 0 to n-1
 
and like it appears that using the base->integer function, it works for both types of base conversions
@LeakyNun ohh huh makes sense
how is that useful tho? :P
 
@HyperNeutrino because both follow the notion that (ak,...,a1,a0) represents the number ak b^k + ... + a1 b^1 + a0 b^0
 
5:13 PM
ok. yeah that makes sense now
 
@LeakyNun and for 0 it returns an empty list, not [1]
 
@EriktheOutgolfer of course it wouldn't
 
So question, why is bijective base useful? I can't currently see any applications of it but there's got to be some...
 
CMC: Sign of the input, without builtins
 
an example would be integer compression
 
5:18 PM
ah ok
 
@HyperNeutrino lengths for run-length encoding is the first thing that comes to mind
 
hm so mostly just golfing uses?
 
where you convert a list [1..n] from base n to integer then compress it (ḃ250ịØJ)
 
@HyperNeutrino .. isn't that what Jelly's for?
 
@cairdcoinheringaahing Proton, untested: x=>x*((x>0)*2-1)
 
5:19 PM
the reverse being to convert to bijective base afterwards
 
@dzaima yeah but I was just wondering if it had any uses outside of golfing :P
and why is it named "bijective" base?
 
@cairdcoinheringaahing Ruby, with -p: $_=$_[0]==?-
 
@cairdcoinheringaahing SOGL, 3 bytes - input/abs(input), 0/0 errors and outputs input
 
Is the following sentence true? For any constants a and b, where a > 1 and b > 1, then eventually with large enough x, you'll have a^x > x^b?
(^ means exponents, not XOR :P)
 
wait if a^x==x^b then increasing x will make it a^x>x^b right? or am I being dumb
 
5:25 PM
Yes
 
yes
but you don't know if a^x == x^b or even a == b
 
a^x = x^b => log_x a^x = b
not sure how that helps
or if
 
@HyperNeutrino How do you solve a^x == x^b?
 
@DJMcMayhem log
 
5:26 PM
Oh Ninja'd
 
log_x a^x = b => x log_x a = b
 
@HyperNeutrino he meant how do you determine if that's true
 
a != b can be true
 
@EriktheOutgolfer No, I meant what x makes it true
 
5:26 PM
a^x == x^b does not imply a==b
 
@DJMcMayhem oh that's 0
I think
assuming a != 0 and b != 0
 
Well, yes. But there should be two x's
 
so just b = x log_x a
 
For example, if a and b are both 2, then x == {0, 2}
 
because then x ^ b = x ^ (x log_x a) = (x ^ log_x a) ^ x = a ^ x
and then we need to rearrange it for x
which is starting to look harder than I originally thought :P
 
5:29 PM
Intuitively, I'm sure that it must be true, but I don't know if it's definitely true or how to prove it
 
b = x log_x a -> x = b / log_x a
 
@HyperNeutrino Still has an x in the right hand side
 
@DJMcMayhem and no, regardless of how many thousands of plots you make that confirm your statement, who knows if there's the one plot that confirms the opposite? ;-p
(struggles of people trying to prove things ._.)
 
@EriktheOutgolfer That's why I'm asking. To verify if my intuition is correct :P
 
5:31 PM
assume that for all x, a ^ x <= x ^ b
(when you can't do it normally, do it by contrapositive :P)
oh wait actually
a^x == x^b => log_a x^b = x => b log_a x = x
still has x on both sides grr
 
@HyperNeutrino why
 
idk ¯\_(ツ)_/¯
 
you can't use unproven statements in a proof ;)
 
lol
no but you assume it's false and then draw a contradiction
so your assumption is wrong and it's true
 
but that's not how it works I think
 
5:37 PM
pretty sure it is
 
I think that proof by contradiction is that instead of assuming what you can assume you assume that what you can assume is false, and then try to prove that's false, so the original statement is true
 
> no but you assume it's false
yeah ik how proof by contradiction works :P
 
@EriktheOutgolfer I'm pretty sure that is how it works. That's how you prove the irrationally of √2
 
then I think that hyper meant something else than what I thought he means
 
You start by assuming that √2 is rational, and show that results in a contradiction
 
5:40 PM
i've done many types of proofs before :P
 
Really, this is a computer science question disguised as a math question
 
Is there any pair of algorithms, one exponential, one polynomial, where the exponential algorithm is faster than the polynomial for all inputs?
 
you mean for all or for large enough inputs?
 
Which intuitively is a resounding no.
@HyperNeutrino I think it's all.
 
5:43 PM
ok
this sounds a lot like P vs. NP :P
 
@DJMcMayhem well then be sure and ask again after that ;-p
 
also:

 Neutrino Programming Language

General discussion, feature requests, bug reports, golfing tip...
:P
 
otherwise we could be trying to prove something totally wrong and not intended to
 
@EriktheOutgolfer Inspired by, but not directly related to
 
5:48 PM
 
> you know Kubernetes works cause Google built it and it runs on etcd
heh
 
6:07 PM
@DJMcMayhem yes. to see this, note that a^(x+1)/a^x =a while the limit of (x+1)^b/x^b is 1 so at some point a^x starts growing faster than x^b, and must therefore eventually overtake it
 
@mınxomaτ reading that reminds me of why I lost interest in whole swathes of software development
 
@cairdcoinheringaahing J, 3 bytes: ]%|
 
@EricTressler Don't worry, these are the extremes you can safely ignore.
I routinely see teams shipping and getting their first customers for a CRUD app written as a single binary in an "old-school" language, while devs who chase the newest 'orchestration' framework still struggle to debug their Terraform script.
 
6:22 PM
@mınxomaτ Lately I've been trying to learn how to use JNI with a C++ library. So that's where I am :|
 
6:57 PM
@Mr.Xcoder Let me guess, ?
 
@Neil I'm not sure I understand. So, you're inferring something about the slope of the f by looking at f(x+1)/f(x)? Does that work? Because the slope is f(x+1)-f(x) so I'm not sure that works
 
@cairdcoinheringaahing no, the message was ”Jelly, “
 
Not saying you're wrong, I just don't understand how the limit((x+1)^b/x^b, x --> infinity) == 1 is meaningful
 
are you still talking about the a^x>x^b?
 
Yeah lol
 
7:07 PM
if you want to look at the slopes, take the log first
so the slope of log(a^x) is constant while the slope of log(x^b)->0 as x->Infinity
 
7:32 PM
@cairdcoinheringaahing J, 2 bytes: %| (any shorter, and it would be a built-in, no?)
 
For those in knowledgeable in PL theory, would it be possible to transpile J into javascript? If not, why not? If yes, how difficult would be?
 
PL theory -> programming language theory?
 
Mr. Xcoder: yes
 
0
A: Sandbox for Proposed Challenges

totallyhumanAre these numbers perfect for each other? code-golf number math A perfect number is a number that is the sum of its divisors. Examples of perfect numbers are: | Divisors | Divisor sum -----+-------------------------------------------+------------- 6 |...

 
7:54 PM
hello
 
hello o/
 
@Dennis there?
 
8:05 PM
@sergiol if you need him, you can always just ping him and he'll get around to it when he comes back
 
how do I ping him?
 
@sergiol Exactly how you did earlier (@Dennis)
That is called pinging.
 
ah LOL XD
OK
tks
 
@sergiol the other reason why: @pinging leaves a message in the person's inbox, and it's kinda useless to get a "are you there" message, when they're clearly not there :p
 
@Jonah ngn/apl is written in JavaScript, so I don't see why not. May not be pretty, though.
 
8:13 PM
> J
is J similar to APL?
 
@HyperNeutrino J is an APL dialect.
 
oh I'm dumb lol
 
@HyperNeutrino No, how would you know?
 
CMC: shortest way to map 1 to 0 and 0 to 1
any other inputs can do anything
it must output 1 and 0, not truthy and falsy (though string is acceptable)
 
@Riker 1-n
 
8:15 PM
@Riker APL, 1 byte: ~
 
@Adám is that just bitwise negation?
or standard not
 
@Riker Jelly, 1 byte: ¬
 
@H.PWiz ah, didn't even think of that
 
@Riker Nope, that maps 1 to 0 and 0 to 1. All other inputs cause an error.
 
huh
 
8:16 PM
Snails, 2 bytes: \0
 
huh, I thought more langs would leave as bool
shortest way I could find in python was -~- on the input
 
@Riker It penetrates arrays, though, so ~1 0 (1 1 (0 1) 0) gives 0 1 (0 0 (1 0) 1)
 
@Adám ah cool
 
@Riker Also, APL only has one numeric data type; number.
 
ah ok
 
8:21 PM
@Adám, ngn is an interpreter. theoretically speaking, if you can write an interpreter, does it mean you can write a transpiler? i suppose so, since your output could just contain the interpreter itself... but this seems like a cheat. there may or may not be a well-defined question in what i'm asking...
 
@Adám ¯\_(ツ)_/¯ idk :P
 
@Adám random side question: do you work with roger hui at dyalog?
 
@Jonah No, you're fine. If you can write a J interpreter in JS, then you can find a JS expression for every J expression.
@Jonah Yes, I do.
 
@Adám cool
 
@Jonah Yeah, my Iverson number is 2.
 
8:25 PM
@Adám do you pick his brain for iverson stories? i know i would...
 
@Jonah No need to pick, they come all by themselves…
 
@Adám that's great
@Adám out of curiosity, do you program mostly APL because of work, or do you just prefer it to J and, if so, what are your reasons?
 
@Jonah Both really. I grew up on APL, but I've been exposed to J over the years, and always found its bi-glyphs hard to read. I also dislike the inability to manipulate boxed content and have mixed data types in the same simple array. Furthermore, I find J's focus on tacit OTT: Confusing that the REPL is explicit, but functions are tacit (by default). There's probably more.
@Jonah Yeah, I find that J, in its strive for purity, is willing to sacrifice usability.
@Jonah Oh, and [: is an abomination :]
 
@Adám what do you mean by "inability to manipulate boxed content"?
 
@Jonah Compare J and APL for [1,2]+[3,4]
@Jonah Don't get me wrong though, a lot of things are obviously better in J, like rank being defined for all functions, with leading axis extension, consistency across primitives, and the broader selection of primitives. No historical syntactic anomalies , etc.
 
8:38 PM
@Adám yeah, of course you can use each but it's a valid complaint. I see no good solution though, since sometimes you do want the verb to apply to the boxes and not their content.
 
@sergiol I am now.
@Mr.Xcoder still pings.
 
@Jonah Well, "under unbox" that is. The code just ends up being littered with those. In APL, only scalar functions penetrate enclosures, structural functions work on them. In practice it usually ends up being what the user wants, in my experience. Can you give a counter-example?
 
@Dennis would you be willing to test something in the Sandbox with me?
 
If I can do it from my phone, sure. PPCG sandbox or chat sandbox?
 
Chat sandbox
 
8:45 PM
@Adám, eg, you might want to ravel , two boxed lists, rather than ravel their contents. You may be right though that the default ("each'd" vs not each'd) could depend on the verb, and therefore be more sensible for the majority of use cases.
 
@cairdcoinheringaahing Well, what is it?
 
@Dennis Could you ping me, then after 5 minutes, edit the message and ping me again?
 
@Dennis Aww sorry, forgot pinging is enabled in code snippets too! I really didn’t mean to disturb you ;-)
 
No worries.
@cairdcoinheringaahing Done and done.
 
@Dennis Thanks. I can't reply in Sandbox otherwise it'll break the test :(
 
8:54 PM
 
@Adám, is the double-dot glyph doing something like under unbox does?
 
Well, it is just plain "each". No need to unbox.
 
@Adám I feel like if you translated that example into J almost all the additional ugliness would stem from the fact that each or the literal &.> are just so long. Meaning, would your complaint be addressed if there were a 1 char builtin for &.>?
@Adám side question: is the APL comment symbol supposed to be a index finger?
 
@Jonah No, because I'd have to use each even for scalar functions.
@Jonah No, it is a lamp (filament) to enlighten you.
 
@Adám IMO, it looks like a middle finger saying, "Why do you need comments, you should be able to read APL" ¯\_(ツ)_/¯
 
9:13 PM
@cairdcoinheringaahing Could be a font issue. The is supposed to overlap the upper part of the .
 
@cairdcoinheringaahing, that is clearly the correct answer
@Adám, Try it online! It's almost identical imo, except that the final raze can't be done in J for obvious reasons
maybe i'm missing your point?
@AdámThe ∘ is supposed to overlap the upper part of the ∩. Ah...
 
A middle finger? I always thought it was a thumb.
Definitely have not seen the ring overlapping the horseshoe.
 
9:30 PM
@Dennis My intuition got me using TIO in a way it was not built to do so.
 
Oh?
 
I thought the multiple arguments' lines were to do several program calls were each one sent the arguments for each successive program call
May be TIO should have to possibility to do it?
 
Like a "generate program calls" button which generates a list of them and user then would parametrize each one
@Pavel source, please?
 
in talk.tryitonline.net, May 27 at 23:51, by Dennis
Hopefully, support for multi-part requests (test suites, polyglots, etc.) will come soon. I have to deal with the permalinks first though, as they'll only get longer with more features.
 
9:49 PM
CMP: Should I post a ;# answer to the Illuminati KC?
 
@cairdcoinheringaahing No
 
I have no idea what the Illuminati KC is.
 
34
Q: Confirm the Illuminati

Stephen LeppikThe Illuminati commands you (with their mind control) to output the following string: ^ /_\ /_|_\ /_|_|_\ /_|/o\|_\ /_|_\_/_|_\ /_|_|_|_|_|_\ /_|_|_|_|_|_|_\ /_|_|_|_|_|_|_|_\ /_|_|_|_|_|_|_|_|_\ Rules: Trailing spaces are allowed for each line. L...

 
Oh yeah, I think I saw that in the Sandbox.
Definitely a refreshing KC, simple, but with enough complexity to make it interesting.
 
@Pavel I should have waited longer for a response :/ Well, it's posted
 
9:54 PM
kek
The 15 character minimum prevents me from commenting 'y tho'
 
No brainfuck submission. Hmm...
 
Goddamn mobile chat. Impossible to reply without starring a message
 
10:53 PM
@Jonah I was just trying to answer "eg, you might want to ravel , two boxed lists, rather than ravel their contents."
 
11:21 PM
Introducing: Brainfuck Annotation Language
https://github.com/primo-ppcg/bfal
 
Remember the rule when creating Brainfuck Derivatives.
 
which rule is that?
 
Although this seems to follow it, "If it doesn't do anything unique, don't post it"
 
@Pavel It demolished 05AB1E.
 
> A friendly message from The Name of All that is Good and Holy: Hello! This is The Name of All that is Good and Holy. Before you think of making your own extension to this language, here's another idea for you to consider: Don't! For the love of me, please don't make another derivative of this language! Unless you have something truly new to contribute, it's been done a million times before and will probably make it worse than the original.
 
11:34 PM
@Adám Yeah it's not as nice, but this J version seems slightly better: 1 +L:0 (1;2 3);4 5.
 
@ATaco I don't know of any other language designed specifically to annotate brainfuck
 
The main point I had was, that was the dude's first catchy question, let him have it haha.
 
Hence I said this seems to follow the rule.
 
We should implement like... a weekly tag cap. You can't post a question in PPCG if the tag exists for more than 10 questions for that week (other than code-golf).
 
most bf code that is annotated doesn't in any way resemble runnable pseudocode
 
11:37 PM
@MagicOctopusUrn I disagree.
 
@ATaco Knowing SE it's probably not even possible >_>
 
I think you're idea of Annotated more closely resembles C-Like, rather than the particular memory and writing models of Brainfuck.
 
maybe it's just my coding style. i've found it very helpful to start with a working logical structure, and then just fill in the blanks
 
Is this your first language?
 
first i've shared with anyone
 
11:50 PM
I don't get what it is, a BF code generator or what?
The readme is hard to follow because it dives into details immediately without explaining any overarching goal.
 
maybe i should move the sample code to the top
the purpose is to annotate brainfuck:
+++>+>++[++[>+++[>+++++++>+++<<-]<-]<]>>>-
>>>---[<]+[>.+.>>>.[<]<]>[.---.>..>.>.[<]] ; what is this
 
So it's some executable brainfuck code with comments in it?
 
; byte sequence
; h l o excl
+++>+>++
[++[>+++[>+++++++>+++<<-]<-]<]
>>>->>>---[<]

n=1
+
if(n)
[
  'hi' excl
  >.+.>>>.[<]<
]>
else
[
  'hello' excl
  .---.>..>.>.[<]
]
 
Is it necessary to include BF? Does it generate BF on it's own?
 
remove the brainfuck, and it;s still valid
yes, you need to write the BF :p
 
11:56 PM
What does the Python code even do then?
If it's just a style of commenting brainfuck
 
n=1
if(n)
[
  'hi' excl
]
else
[
  'hello' excl
]
 
@Mego i think the laser eyes make it hard to be one of you lol
accidentally slices through the chat room walls with his gaze
 
this is valid code in bfal. it's an interpreter
the idea is, you create the logical structure in bfal, confirm that it works, and then add bf bit by bit
 
So, it's an interpreted language designed to act as a sort of template to write brainfuck to match..?
 
exactly, and as you add brainfuck, it remains valid in bfal
 

« first day (2465 days earlier)      last day (2361 days later) »