As a child I was fascinated by detective or adventure stories in which people had to break ciphers and extract hidden messages from the most innocent-looking text or images. A decade later, a beautiful cipher and the crooked path to its decoding still make my heart pant. This was one of the reasons why I took Stanford online class "Introduction to Cryptography". The very first programming assignment (breaking a one-time pad used more than once) inspired me to create a small quest featuring several historically important ciphers - the ones which don't get used in real life any more but which are so much fun to break by hand.
Here is the actual quest. It is a so-called zip-quest, the principle is: on each level you are given a ciphertext, you have to break it, figure out the message encrypted, get a password from it and apply it to unzip the archive which contains the next level. Zero-level archive (cryptoquest.zip) has no password. In all cases the plain text message contains not only the password itself but also some English text - otherwise the cryptanalysis would be too complicated, if not impossible.
Enjoy breaking the ciphers!Continue reading →
I'm a third-generation female programmer: my grandmother was the first programmer in the family, my mother followed the example, and now I continue the tradition. My granny's career started half a century ago in the Soviet Union; and here is her story.Continue reading →
Esoteric programming languages are pretty weird domain of human knowledge. Most people who learn about them claim that they are completely useless. Well, there is a grain of truth in this - nobody uses an esoteric language for developing applications of practical value, otherwise this language would cease to be esoteric. However, there are people who can appreciate the use and the fun of such languages; furthermore, there are people who don't limit themselves to learning existing languages, but think out of the box and invent ones of their own. Meet the authors of the most famous esoteric programming languages.Continue reading →
Today we participated in a nice contest named Chaos. It required solving problems in a language announced only minutes before the start of the contest - a concept similar to Unknown Language Rounds at Codeforces. Today the language turned out to be Chef, which I know quite well, so it took only one hour to solve all 6 problems and win.
Here are the solutions to the problems.Continue reading →
A couple of days ago I gave way to New Year spirit and decided to create a geek quest. Well, here it is: http://tc-alchemy.progopedia.com/quest.zip :-)
The principle is: on each level you are given a task (a text file or an image). You have to solve it to get a password for the archive which contains the next level. Zero-level archive (quest.zip) has no password.
The tasks of the quests are related to esoteric programming languages, but they don't require deep knowledge of the domain - most of them need only a moment of enlightenment or a wild guess. Thinking outside the box is helpful too.
Since one can extract a lot of versions of hidden message from any text, let alone from an image, correct password is prefixed with "pwd:" for all levels (you have to enter the password without this prefix).
I hope you'll enjoy the quest. Happy New Year!Continue reading →
I want to carry on a tradition I started a year ago with this post, and tell about several more ways to make your "Happy Programmer's Day!" greetings look both unusual and professional at the same time. This time I'll be printing simply "congrats" - all simple ways have already been covered last year.
I know this post is a month late, but my studies, travels and studies again prevented me from publishing it earlier.Continue reading →
Esoteric programming languages are fascinating; thanks in no small part to the fact that for every occasion there is a language. Literally. A language for animal lovers and painters, for hackers and puzzle lovers, for jargonauts and poets... Here are several languages for gourmets - people who don't live by bread alone.Continue reading →
Programming languages have jokes and jokers of their own. As a matter of fact, most esoteric programming languages were designed to be a joke (unless they were a brain exercise like the infamous Brainfuck). But there is one language which really deserves to be called The First Joke. In ages past and gone, in year 1972, when all existing programming languages were entirely rational and deadly serious, two jokers pushed the limits and invented a completely new language. They called it "Compiler Language With No Pronounceable Acronym", which for obvious reasons abbreviated to INTERCAL.Continue reading →
March 14th is a worldwide Pi (π) day. Founded in 1989 and officially recognized in 2009, this day can be celebrated in multiple ways, the most popular of which are eating circular pies and discussing things related to Pi. It would be weird not to have a couple of programming languages based on Pi or at least named after it. In this article I'll talk about them - after all, one has to support good traditions :-)
Brainfuck has plenty of dialects for all occasions, including Pi day. The commands of the Pi language are the same as in Brainfuck, but written as erroneous digits of Pi number in the following way. For each command a position is chosen in which it will be hidden (the positions are ordered in the same way as in the original code). A table of commands and corresponding digits is constructed from the initial oneContinue reading →
The upcoming spring made me wonder: if programming languages were women, what kind of women would they be? A bit of googling brought up a few outdated articles which missed a lot of my favorite languages, so I decided to bring together a list of my own. Some of the most popular languages just don't feel like a female character for me, so I skipped them - you're welcome to suggest a vision of your own. No offense is meant for any language or its users, or to women, since I'm one of them :-)
Continue reading →
I've always been fascinated by programming magic - small tricks which make seemingly meaningless code do something unexpected. The most famous of such tricks are "signatures", which output a short text (usually author's name). My previous post featured several unusual ways of printing text using esoteric programming languages, and (surprisingly) it helped someone to make their new-year greetings something special. But real magic is doing such things in common everyday languages, like C++ or Java. In this writeup I will show several ways to print short text using only numeric constants as raw data.Continue reading →
- Hey, it's really Programmers' Day, - realized I about two hours prior to it coming. Then I imagined tomorrow's congratulations - boring commonplace phrases, not a bit different from things said on any other day. And I yearned for something professional, with zest in it! I got to work immediately, and here is the result. This article suggests several methods to represent any trivial greetings in a special way, with respect to our profession and this encyclopedia.Continue reading →
The task of calculating first dozen of Fibonacci numbers has lost its practical value ages ago. Nowadays it's used mostly for illustrating some basic programming techniques, recursion and iteration among them. In this writeup I will use it to show several programming languages, in which it acquires uncommon and sometimes definitely unhealthy look.
So, here goes my rating of ten most unnatural ways to calculate Fibonacci numbers of the ones
I used for Progopedia project. For a more accurate definition, let's demand that the program
outputs first 16 numbers, formatted as
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, ...
A visual programming language, in which all language elements are represented as elementary blocks. The "code" itself, called flowgram, is built from these blocks by connecting them with links. What placed this language in the rating is:
- the size of flowgrams: two dozens of blocks is a maximum that can be used within one flowgram without scrolling it or getting entangled in connections between blocks;
- the complexity of basic language constructs: each loop or conditional statement requires one or more separate flowgrams of description, and their numbers multiply endlessly;
- the fact that the program is not written but drawn, and the keyboard is used only for entering constant values, renaming elementary blocks and adding comments;
- and the way the flowgrams overall look like large bowls of spaghetti - talk about spaghetti code!
Most people who write about Turbo Pascal start with their memorials about its appearance and their experience with it. I can't pattern them, since Turbo Pascal 1.0 is exactly two years older than I am, so I used only 7.0 version, followed by Delphi.
I'll have to approach this topic from opposite direction and tell you how Turbo Pascal looks from the modern point of view, for a person who was raised on modern IDEs and turns to Turbo Pascal with purely exploratory purposes.
So, let's have a look at year 1983 and Turbo Pascal 1.0...
Turbo Pascal 1.0