Went into the University for the first time

I went into the university for the first time today. It is less than a kilometer from the apartment. I had to go there to finalize certain documents regarding my accomodation. I arrived at the university during the lunch time and hence I had to wait for a couple of hours for the office staffs to return. During the time, I roamed around the campus. The place is aesthetically pleasing, however, it is pretty small, especially since where I did my bachelor's, IIT Patna, had a campus spread across over 500 acres. I also went to the nearby Lidl to get a few frozen pizzas. I had that for lunch, evening snack and dinner. I had thought about cooking something for dinner, but I felt a bit lazy to do the same. However, I did modify the last frozen pizza by adding some mushrooms, pizza sauce and pepper. I think this could be a good trick moving forward - buy a few frozen pizzas and chopped vegetables from Lidl and fuse them. I think this would make the pizzas a bit more healthier and the effor

My attempt to create a Quine in MATLAB

A few weeks ago, I watched a video on YouTube which talked about quine. A quine is a program that outputs it's own code. For instance, in JavaScript, the following code would output itself.

!function $(){console.log('!'+$+'()')}()

As I watched the video, I was sure that creating a quine is not very easy. But, I found it interesting to attempt to write one on my own, maybe in MATLAB.

During the initial five minutes, I sat on my easy chair and started thinking about how to approach it. I drank a cup of coffee and opened up MATLAB Online and started trying out random things, hoping that I would eventually get some idea. I did not want to cheat by using operations to read from the currently opened file. That can be easily achieved by using the 'type' function or 'fileread' function.

As I was not able to get any idea by just thinking, I decided to have a look at different quines written by people in other languages. I thought perhaps something from JavaScript, Python or C++ would inspire me. I read through the Wikipedia page talking about quine, which has some examples.

After trying and trying for about an hour, I arrived at the following, which is not quite what we need yet,

function y=quine();y='function y=quine();y=REP;y=strrep(y,"REE",y);';y=strrep(y,"REP",['''' y '''']);

If you run the above, the following output would be produced,

function y=quine();y='function y=quine();y=REP;y=strrep(y,"REE",y);';y=strrep(y,"REE",y);

You should be able to see a few issues here. The first and foremost issue is with the inverted commas. That one is really hard to tackle. If I try to add an escape character and attempt to print it at one place, then I would have to do it twice at the other end, which would require me to add two more at the original place, and so on and so forth. The other issue is with 'strrep' trying to replace all occurances of "REP" rather than just the first. To showcase it here, I had changed "REP" to "REE" at one place to avoid multiple replacement.

Now that we know that the issue in this approach is to be able to replace just one "REP" and add an inverted comma effectively, it seems logical to attempt to use 'fprintf' function. However, my attempt was to create a function that would output itself as a function output, rather than simply displaying it. Therefore, I can't use that.

But then, I found a function very similar to 'fprintf', but can store the value to a variable. It's called 'sprintf'. Initially I arrived at the following.

function y=quine();y='function y=quine();y=%s;y=sprintf(y,y);';y=sprintf(y,y);

This one produced the following output:

function y=quine();y=function y=quine();y=%s;y=sprintf(y,y);;y=sprintf(y,y);

It appears to be almost right. Except for the inverted comma to show that 'y' is a string, everything is find here. The only option that I could think of was to use the character code of the inverted comma. The following MATLAB command helped be to get that.

>> char(39)

Intergrating that with the quine code, I got the following.

function y=quine();y='function y=quine();y=%s;y=sprintf(y,[char(39) y char(39)]);';y=sprintf(y,[char(39) y char(39)]);

And yes, that is a quine.


Popular posts from this blog

Regarding a Covid-19 related project that I worked on a few months ago

A decade of BuddyGo.net

A look into Hire the Author