« first day (1724 days earlier)      last day (3120 days later) » 

12:00 AM
Ah, the only voter I see
 
ahem Misread.
 
@VTCAKAVSMoACE I don't understand.
 
I had misread the post. Apologies.
 
I'm not sure how complicated the task should be.
I want it to demonstrate programming capability somewhat, but not be too tedious in a very low-level tarpit type of language.
Maybe I'll remove length restrictions for the solution program.
 
btw is anyone else confused why the sys recursion one is apparently valid? I thought of that but it always errored out immediately for me, and I assumed that wasn't allowed since it never got to the following code...
 
12:06 AM
@Sp3000 Seems invalid to me.
 
Anonymous
It was within the (albeit ill-defined) rules of the contest, as far as I could tell. It literally made it unusable.
 
I don't see how that's any different from the invalid loop rule, or even just calling exit() on the first line o_O (the fact that jimmy said it was valid confuses me the most)
 
Never mind, it actually does seem valid.
I can reach statements after setting the limit.
In Python 2, I can even print something.
It behaved differently in teh REPL.
 
Ah... I was trying in REPL :/
 
I can also do math and print the result. I guess function calls for those are optimized out of the bytecode.
 
12:13 AM
Hmm weird, mine still errors
 
Anonymous
It errors in REPL or with -c for me in Python 3, didn't try with 2
 
Had to command line it for it to work
In 2 that is
 
You need to make a program in an actual file.
 
Well this is weird. I can actually set the recursion limit back to some high number o_O
 
yep me too, guess it's invalid then, lol
 
12:27 AM
It even works on ideone - would you like to post a comment feersum?
 
Anonymous
I think it works on ideone because it doesn't actually let you do most of the sys stuff
 
Why me? You found it.
 
Anonymous
We're a bit past that point, the question has been closed
 
k, then - just thought it'd be faster cos phone
You can set recursionlimit on ideone btw
 
Anonymous
I'd like to see someone try to beat Dennis's CJam answer on my question - 59 bytes doesn't seem like it's the shortest possible answer
 
12:34 AM
@PhiNotPi Oooh...intriguing...
 
If it's Dennis getting 59 on CJam, Pyth is probably the only choice left
btw anyone tried breaking muddyfish's Python one in a more standard way? I'm trying to build strings but I'm missing a few letters
I have aefilnorstuFLNT0123456789{}[](),:\."'
 
In Java, "*" is referring to the literal *, not regex, right?
 
Anonymous
@VTCAKAVSMoACE ?
 
Anonymous
@Sp3000 Link for the lazy?
 
@Sp3000 Why would it matter what letters you use?
 
12:44 AM
So, say I did case "*":, would that accept the regex * or would it be the literal *?
 
4
A: Make your language unusable

muddyfishPython 2 import types def function(): #INSERT CODE HERE pass c = function.__code__ code = types.CodeType(0, c.co_nlocals, c.co_stacksize, c.co_flags, c.co_code, (None,)*len(c.co...

 
Have you guys played Human Resource Machine?
 
Because I wanted to try exec - seems like I can do a few things there I can't do outside the exec scope
 
@Sp3000 I still don't understand. What does it do that would depend on specific characters?
 
Anonymous
@VTCAKAVSMoACE Literal *
 
12:46 AM
Alright, good. Would've been bad otherwise.
 
@El'endiaStarman Nothing really came from it, though.
 
Almost everything else, eg strings, are replaced with None and builtins are gone
But you can still use some things like keywords and dict/list literals
 
Anonymous
The builtin len(iterable) is gone, but what about iterable.__len__()?
 
You say you have backslash and digits. That's all you need to write all strings.
 
You can't dot syntax outside exec, but it seems you can inside, which is what i wanted to try
Oh, that's a nice idea...
 
Anonymous
12:50 AM
And since exec is a statement, you can't break it by disabling builtins
 
Which is the nice part :)
 
Anonymous
@feersum str is a builtin, and so would be disabled
 
Don't need it though :)
 
That didn't make sense anyway, lol.
I called str on a string.
 
Anonymous
Are backticks (shorthand for repr) disabled?
 
12:53 AM
Nope
That's how I'm getting strings
 
Anonymous
Then you could do \btlambda n:n\bt for a few more chars
 
Anonymous
\bt meaning backtick, I don't know how to escape them in code blocks
 
I'll try feersum's thing in a bit
 
Anonymous
<function <lambda> at 0xffe195dc>
 
Anonymous
Which puts you up to abcdefilmnorstuxFLNT0123456789{}[](),:\."<>'
 
12:59 AM
Lambda doesn't work for some reason. Ditto generators
 
Anonymous
You should also be able to use the same trick on a nested named function for even more characters
 
1:12 AM
@feersum The backslashes are literal backslashes, and I can't evaluate them to get octal code points :/
And yeah def/lambda seem to hang things...
 
why does every programming game make you implement a sort
i know how to do it it's just tedious
 
@Sp3000 Can you call member functions of strings?
 
Only in exec, I think
Also do you reckon file output is okay? That seems to still work despite Maltysen's update
 
It was closed as unclear for a reason, lol
 
Anonymous
The obstacle to overcome is constructing a string from what we have to worth with that does something useful in exec
 
1:20 AM
True :P
Well let's just keep in mind that input/open seem to still work where print doesn't, in case it ever gets reopened
But yeah all the good ideas I have for exec I'm missing a letter or two
 
Anonymous
What are you missing?
 
Can you assign a variable inside exec?
 
Yes I can, with [x for x in [...]] (thank god Python 2 is broken)
I have no = or ; though
 
Anonymous
@feersum If he had a way to get a = he could
 
It shouldn't be that hard then, if we can call string functions and then assign strings.
Then exec a second time.
 
1:23 AM
The problem is that variables I define with exec don't seem to be usable outside, and I don't have an x/c to do exec inside :/
 
Anonymous
Can you call str.__doc__() on one of your literal strings?
 
Oh, I thought you could use the variable outside.
 
Dot syntax errors out
 
Anonymous
Oh right, crap
 
I should stop being so lazy and set this up myself, wow
 
Anonymous
1:24 AM
Variables in exec only update outside variables, they can't create new ones
 
In the REPL, you can create new vars with exec
 
I can't seem to update outside variables either :/
 
This is a good programming puzzle.
 
Anonymous
The evil that was done to wipe the builtins may be messing with that
 
Yeah, I was up all night trying to get letters :P
But the nice thing is I can exec, say, ''.title and it doesn't error. I can't actually tell what happens though because I can't print it, but lack of error is a good sign
 
1:27 AM
I don't get why print 3 prints None, but print 3>2 prints True.
 
Anonymous
Can you import anything inside of the exec?
 
Oh, it prints False, derp.
 
Yeah False makes more sense :P
Can't import, no __import__
 
Anonymous
Oh wait, you don't have the letters for it
 
That too :P
 
Anonymous
1:28 AM
Phooey
 
The other confusing part is I don't seem to be able to use outside vars from the inside
But building them again shouldn't be too hard
 
Anonymous
Hmm... I guess builtin classes are wiped, too
 
If only I had _ - it's basically the one char I really need :P
 
I found a good test harness is to give the function an argument and pass in a string. Then I don't have to bother with actually constructing what I want to exec.
 
Anonymous
Wait, what happens if you try to exec syntactially-invalid code?
 
1:31 AM
You get the appropriate syntax error
@feersum I should... really do that :P
 
Anonymous
So it raises SyntaxException
 
Anonymous
Wrap it in a try/catch
 
Yeah, but you can't catch it cos Exceptions are gone
 
All you need to do is change the first arg of CodeType to 1.
 
What does that do?
 
1:32 AM
Also you need to declare your function with 1 argument.
It's the number of arguments.
 
Ah
 
Good news: lambdas work fine inside exec.
And you have all the chars.
 
I'm missing m and b I believe
 
Oops, accidentally copied Mego's string.
 
Anonymous
1:40 AM
Yeah, that was when I thought lambdas would work
 
If you guys can come up with ways to get any char not in the list, I'd be interested to know :P
 
Anonymous
What about repr values of binary/hex int literals?
 
Literals are replaced with None.
 
^^ that
 
my battery life doesn't make any sense
 
1:41 AM
Don't worry Phi, at least it's honest
 
Anonymous
asjhksahfkjhf
 
Anonymous
If we could just import sys, all our problems would go away
 
@Sp3000 how do you get curly braces?
 
Anonymous
...wait, dot syntax doesn't work. sys.something would error out
 
Anonymous
@feersum dict/set comprehension I believe
 
1:44 AM
Dict and list literals still work it seems
Tuples don't though
 
I'm trying to figure out how to break Perl. (Un)fortunately there's the CORE:: namespace.
 
Or at least pure tuples with immutable contents
 
([],) works
 
Anonymous
@PhiNotPi exec 'rm -rf /'
 
;)
I tried for a long time trying to get a complex number for parens, but Python 2 didn't let me do (-1)**.5 :/ (Python 3 does)
 
Anonymous
1:46 AM
In Python 2, complex numbers are hidden away in the cmath module
 
sigh I need to learn Python...
3
Seriously though. I tire quickly of using Java for interpreting.
 
@Sp3000 You don't seem to have - on your list.
 
Hmm -+ should be on there oops
 
How do you make +?
 
1e+100
 
1:49 AM
oh e+
 
:)
 
Anonymous
aefilnorstuFLNT0123456789{}[](),:\."'+-
 
Anonymous
You know, I don't think Brainfuck or Whitespace could be broken in that challenge
 
I still don't see how to break the sandbox, but I think we can be Turing-complete at least.
We can make an infinite loop by using for on a list and then extending the list indefinitely.
 
Yeah we're probably Turing complete and can take "some" form of input (see comments), but I was wondering if builtins was recoverable
 
Anonymous
2:00 AM
If we could get <> we could build a brainfuck interpreter
 
We could do CaneCode instead I guess :P
 
Anonymous
Perfect
 
Anonymous
The only issue is input/output for the ,. commands
 
Well that doesn't really affect TC so that's fine
 
Hmm... My code is returning only zero for sine and I have no clue why... ;-;
 
Anonymous
2:04 AM
@VTCAKAVSMoACE sin(x) where x = a*pi, a in ints?
 
No... But I figured out what it was...
 
I have an idea for how to communicate variables between inside and outside of exec
Make a list outside, and then modify the contents inside.
 
Oh?
 
We should be able to get some more letters from inside of exec somehow.
Not working somehow.
 
:(
 
2:09 AM
It seems exec can't read the variable from outside.
In a normal function it works to go [x for x in [1]];exec'print x' but not in here.
 
Yeah... damn :/
 
0
Q: Anagram Bubble Sorter

user3502615The Challenge A bubble sort takes a list of non-repeating integers and sorts them in ascending order, with only the use of one operation: switching two numbers which are next to eachother. However for this puzzle, you must take in two strings, which are both anagrams, and bubble sort the letter...

 
Anonymous
I think the issue is the fact that everything gets set to None, and None is a value-type, not a reference-type
 
The frustrating part is that if we just had, say, c/d/v/mb we might have a chance
But we're slightly off in each case
 
3:12 AM
Welp. My brain officially hurts.
Holy hell, it's 4AM. >.> Did not see that coming.
 
3:23 AM
LOL.
 
PPCG Level: Literally Monday
 
3:45 AM
@feersum I can get variables out of exec, and I think I've got more chars!
 
@Sp3000 how to got variables?
 
exec ... in {}
 
Very nice.
 
4:02 AM
Almost there :)
 
@PhiNotPi 10 minutes into monday
 
4:49 AM
holy crap what is that O_o
 
5:01 AM
@DankMemes He rebuilt a few select lines of code and evaluated them. Starting from None as the only value available.
> code = lb+a+a+sp+f+o+r+sp+a+a+sp+i+n+sp+lb+qu+qu+dot+t+i+t+l+e+rb+rb
== code = [aa for aa in ["".title]]
It's insane and incredible.
2
 
^^ that. Technically I get dicts, sets and lists as well, but tuples, strings, ints, bools get turned into None. Keywords still work though, which is good for exec
I'm trying to see how much cleaner I can get the code, since I probably did more than necessary :P
 
I had an idea for a metagolf challenge
where the goal is to minify CSS
 
Dang, if only that "Make your language unusable" question was a cops n robbers
waste of a really good idea on a closed question
well, "on hold" but effectively closed
 
I don't think it'll necessarily stay closed
 
@Sp3000 If I understand correctly, after the last line of code before pass, you've executed code that loads built-ins, right? So strings, ints, etc should work after that point?
 
5:15 AM
If you have an idea, you could post it with an exec in your language as the "interpreter" for my version, hehe
There has to be a solution though.
 
I think it works inside the exec, but I'm not sure about outside
It wouldn't be like loading __builtins__ makes ints work after that point though, since the literals are actually replaced before running the function (I think that's how that works?)
 
hmm
But the int function itself ought to work, yes?
 
I don't think the builtins thing is really important. What matters is to get the whole alphabet available for use in exec.
Then it's easy to use builtins or do whatever.
 
^^ that
 
 
1 hour later…
6:37 AM
@feersum import string; string.letters
If you have those letters, you can get all of them.
 
I'm not sure whether import is working, but anyway there was no m before the full jailbreak.
 
Apart from the m thing, I think import needs __import__ from builtins
 
6:52 AM
How do I set permissions of a directory so that I don't need sudo/root privileges to write in it?
 
@Sp3000 Don't you have built-ins? You'd have to call it differently, but still...
 
0
A: Sandbox for Proposed Challenges

randomraPermute into No Double Letters You should write a program or function which receives a string of letters as input and outputs or returns a permuted version of this string where no adjacent letters are the same. If the goal is not possible you should remove the minimum number of characters from ...

 
@El'endiaStarman I think what feersum means is that by the time you get builtins it doesn't really matter any more, since you can do whatever
import string could be one way to get the remaining chars, chr could be another yeah
 
0
Q: Make my pseudocode real

phaseI've got some Java pseudocode that uses whitespace instead of curly braces, and I want you to convert it. I/O Your program should take an input file along with a number designating how many spaces are used to indent a block. Here's an example: $ convert.lang input.p 4 // Convert using 4 space...

 
7:17 AM
@NewMainPosts ...so...the task is to take Python and turn it into Java... :P
 
@orlp Here
 
hey
did you just think of the 42 by chance?
I just chose it as a 'fun' constant
 
I originally had it as 2, but the performance on repeats was not too good
Since you get 2 => 4+ 1 => 5
So if you have to repeat three times, one is a duplicate of a previous run
 
also, did you read my comment in my linked code?
it's a pretty cool observation that I haven't seen elsewhere
 
About the modular multiplication?
 
7:22 AM
yes, that you never have to convert to montgomery form
 
Yeah, I read that in one other place, I think it might have been Hacker's Delight
 
fairly sure it's not in hacker's delight
but it might be an one-off note
 
I remember that (wherever it was) it was mentioned offhand while they were talking about operations on Montgomery forms (addition and subtraction)
 
I've also tinkered a lot with the RNG for the pollard-brent
in the end I just settled for +1
because I didn't find measurable improvements even with CSPRNGs
 
Yeah, I found that even on the largest numbers I only got ~1% failures, so anything affecting the repeats has a tiny effect on performance
Since none of the test cases failed, I didn't have to worry about it =)
 
7:26 AM
my is_prime code is different than yours though
I use strong (lucas) probable prime tests
@2012rcampion you could save a handful of cycles in the trial division btw
 
I saw that that one depended on knowing the factorization of n-1 and passed over it
 
hrm?
not that I'm aware of
it's a general method
 
Ah, on Wikipedia it says: "In computational number theory, the Lucas test is a primality test for a natural number n; it requires that the prime factors of n − 1 be already known."
 
"The Baillie-PSW test is a combination of a strong Fermat probable prime test to base 2 and a strong Lucas probable prime test."
that's what I do
it has no known counterexamples
 
I'll have to give that one a look
 
7:32 AM
the divisibility trick is mentioned in hacker's delight btw, but I don't think it contains a general method as I linked above
 
Yeah, it looks like the fast division would save me around 250 cycles on average.
 
@2012rcampion in the context of the challenge, catpiss
but when using as a general method, the vast majority of numbers will be composite, and the vast majority of numbers will be small
 
Very true
 
just a small trial 'division' table of 168 elements will completely factorize any number smaller than 1 mil
 
If I were planning to actually use this code I would definitely work on optimizations like that, but as it stands I'm ahead of the second-place by something like 100 times, so I think I've leave the code as-is for now
 
7:39 AM
@2012rcampion yeah, this is more out of interest than necessity :)
either way, I enjoy your answer, and I hope you enjoyed the GOLF (and didn't curse it every second while enduring it)
 
I actually quite like GOLF, partly because it's a nice change-of-pace from my usual, but also because it's pretty different from most architectures I know of
10 cycle division but no add-with-carry means you make a lot of interesting choices
I'm planning on writing my own assembler that will let me do macros and such, but I have to learn how to write an assembler first =)
 
@2012rcampion it's an architecture I designed to teach the basics and ballpark estimate costs of CPU instruction sets without complicating the architecture with tons of instructions or the mess that is memory (caching, load ordering, threading, etc)
it's a mix of realism and simplicity - not going to either extreme
 
Just got my ticket for Star Wars 7, WOOOOO
 
I would say it goes towards the extreme end of simplicity... I really miss that status register
 
hi guys
 
7:44 AM
and we get to see it 2 days before muricans here in France, suck it
 
@2012rcampion it definitely leans more on simplicity, yes
@2012rcampion the main thing that sets it apart from other architectures from what I'm aware is the call/return mechanic
 
What I got from the spec was that there's no access to the call stack?
 
@2012rcampion not entirely
you are free to maintain your own call stack
it's just that the CPU itself has an internal stack to maintain the stack of register files
@2012rcampion the z register holds the ztack pointer, you should use that if you want to store stuff on the stack
 
Yeah, I saw that as the intended use
You don't have access to the return address though either.
 
nope
 
7:51 AM
go there
type something
 
I kind of missed that, since there's one point where I use call to access a subroutine, but then jmp out of it, meaning that if I call ret again I pop back to the original call location
call/ret is super-convenient as a way to store data though
 
@2012rcampion yeah, jmp wasn't really intended to be used across basic blocks
or well
it doesn't mix/match well with call/ret
 
Being able to access to 25 quadwords in one cycle is a nice feature, and I didn't want to give that up to have nicer code flow
 
@2012rcampion but if you are interested in interesting architectures you should definitely take a look at the Mill CPU
the talks are long, but man are they worth it: millcomputing.com/docs
(except maybe #1, unless you are interested in instruction encoding/bandwidth stuff)
 
Looks pretty interesting, I'll take a look later
Right now it's about 3am here and I need to get up for class tomorrow
So I'm signing off
Thanks for the challenge =)
 
 
2 hours later…
10:08 AM
Updated jail code to look a lot neater if anyone's interested in an explanation
 
 
2 hours later…
11:40 AM
0
Q: Array Output Problems

egomarI need the user input to be saved into my array and then output the array before the user inputs the next time. I have moving things around different ways but cannot seem to get them to perform properly. I tried to cut down the code to the two functions I am having issues with. void PlayGame() ...

2
Q: Program the Cup-Stacking Robot

Martin BüttnerI'm sure everyone has seen before that cups can be stacked into pyramids (and other shapes): A A A A A A A A A A A A A A A A A Yes, A is definitely an adequate character to represent a cup. New cups could be added either on the ground, to the right of the stru...

 
12:12 PM
@MartinBüttner Have you seen this 2-operand cup-stack building somewhere or is it your original idea? It is nice, that you can make any legal configuration.
 
@randomra I don't know if this has been studied before. I came up with it when trying to design an esolang where the memory model works like such a stack of cups.
in Esoteric Programming Languages, Oct 15 at 7:33, by Martin Büttner
@Sp3000 what's the simplest set of operations that can build any shape of cup pyramid? I've been considering "add a cup on the ground to the right", "stack a cup on the left-most adjacent pair of cups" and "remove the left most cup with no other cup on top", but I don't think it's sufficient
in Esoteric Programming Languages, Oct 15 at 7:41, by Martin Büttner
Maybe, if I change "left-most" to "first in reading order"
 
nice, I immediately tried to imagine an esolang with only these 2 operands
and now I learned about the Esolangs room :)
 
12:42 PM
Issue #25274: sys.setrecursionlimit() now raises a RecursionError if the new
recursion limit is too low depending at the current recursion depth.(https://hg.python.org/cpython/file/default/Misc/NEWS). Now we have an excuse to not upvote if another one of these gets posted for a popcon :P
 
Anonymous
@Sp3000 You are either a Python god or a raving lunatic. Nice job on cracking it
 
Probably the latter :P
(but yeah, if they repost in Python 3 then we're pretty much screwed)
 
1
Q: *Overwrit*labels

Sp3000If you've ever tried adding labels to a really dense plot, then you'll realise that sometimes labels will overlap one another, making them hard to read. We're going to do something similar but in 1D. Input will be a sequence of (label, x-coordinate) pairs, and output will be the result of drawin...

 
Anonymous
Well, first the question will have to be reopened
 
Anonymous
I wonder just how many bugs on interpreter issue trackers are from PCCG users finding extreme edge cases in languages
 
12:54 PM
Ahaha maybe a few, but I don't think that many :P
It's probably more likely that someone on PPCG saw something in an issue tracker then used it in an answer
 
:( I was going to solve this in (.NET-flavoured) regex, but I think I found a bug in Regex.Replace which I can't work around... do I have two problems now? — Martin Büttner ♦ Apr 20 '14 at 12:18
 
Anonymous
Lol Martin
 
I actually reported that, but I can't seem to find the bug report any more...
 
@Calvin'sHobbies Do you have proof? All I can find is that they are "related" and share the same grandmother. They could be brothers.
 
Anonymous
 
Anonymous
They're cousins
 
@Dennis I've got 23 for Overwrit.
 
@Mego Refresh the page. It clearly says brothers.
 
I started with the same approach as yours (but I used null bytes instead of empty arrays). It turns out to be a byte shorter if you don't use .e| but do it manually.
@Rainbolt You go really far to prove your point. ;)
 
I was really just disproving his
 
Anonymous
1:12 PM
Tricksy hobbitses
 
@Calvin'sHobbies Maybe something like *zT and Al*? shrugs
 
Anonymous
fooooood
 
Hmm. Even for Java, 242 seems pretty bad for Overwrit. Must rethink this.
 
@Dennis If you want to include this approach in your post as well (or if you're able to golf it to 22: Q~{~S*'*+\+}%:.{_S&@@?}
Using your input format, that's Lr{iS*'*r++.{_S&@@?}r}h (still 23)
 
1:44 PM
@MartinBüttner Thanks! If only CJam had a stack-based ternary (<select if true><select if false><Boolean>)...
 
0
Q: Check if a given 8-bit Number is sparse

DPFThe task is the following: Program a fully functional program that checks, if an 8-bit value contains a sequence of 2 or more ones in its binary form. If this is the case, the output shall be 1, if not: 1. Examples: Input: 1 Output: 1 Input: 3 Output: 0 Input: 72 Output: 1 Input: 73 Output...

 
@Dennis yeah :/
 
I've been thinking about your cup code. If I understand it correctly, it stores the the state as lines. I've had two ideas so far, but no time to implement them.
 
(Not sure how good they are. Fastest code isn't really my thing...)
 
1:46 PM
@Dennis yes it does
 
Man, I left two comments and missed the fact that it had no winning criteria
 
@Sp3000 haha, I didn't notice either of the things you commented on
 
:(
class S{public static void main(String[]a){System.out.print(Integer.valueOf(a[0]).toString(2).contains("11")?0:1);}}
Assuming the 73 test case is wrong, of course ;)
 
0
Q: Does PPCG fulfil a role as a catalogue for golfed solution of standard programming exercises?

Martin BüttnerRosetta Code collects solutions to standard programming exercises in hundreds of programming languages. However, it focuses on "good" or idiomatic solutions in those languages. I'm not aware of a similar catalogue from a golfing perspective. Is PPCG capable of fulfilling that role? Do we have cha...

 
1:52 PM
@MartinBüttner One is to store the state in a 1-dimensional reading order array, using three separate symbols for cups, empty slots and available cup positions. Each command now boils down to a #, a t and two conditional ts to change available positions. Indexing and modifying large arrays seems very fast in the Java interpreter, but I'll have to try online.
 
ah
22
Q: Find the next 1-sparse binary number

articunoA positive integer N is K-sparse if there are at least K 0s between any two consecutive 1s in its binary representation. So, the number 1010101 is 1-sparse whereas 101101 is not. Your task is to find the next 1-sparse number for the given input number. For example, if the input is 12 (0b1100) o...

 
That answers that then?
 
@MartinBüttner The other is to store the state as two arrays of coordinates: one of cups, another one of available locations. It might require less memory, but searching for the first cup/slot would be more expensive.
 
If enough people say welcome to PPCG maybe he won't be sore about his closed question
Lol Geobits I was just doing that
 
:D
 

« first day (1724 days earlier)      last day (3120 days later) »