Collection of freaky sources written on C# (mostly quines in different forms).
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
AsciimationStatistics
CSharp-Minifier @ 95e94a3
FreakySources.Code
FreakySources.GUI
FreakySources.Tests
FreakySources
Patterns and Data
.gitattributes
.gitignore
.gitmodules
FreakySources.sln
LICENSE
README.md

README.md

Freaky-Sources

Collection of freaky sources written on C# (mostly quines in different forms).

More detail description is available on Russian:

Sources

Single Line Comment Palindrome Quine.

Multi Line Comment Palindrome Quine.

Asciimation Quine

Used data from http://asciimation.co.nz/ by Simon Jansen © 1997 - 2011. One compilation per one frame.

Star wars in source code

Quine Clock.

One compilation per one second.

Quine Clock

Quine Snake.

Use arrow keys to change direction and move snake. Game can be either completed or failed :)

Quine Snake

Polyglot Quine.

The quine that compilied both in C# and Java.

Palindrome Polyglot Quine

The quine that compilied both in C# and Java and have a palindromic format (PalindromePolyglotQuine.cs.java):

/**///\u000A\u002F\u002A
using System;//\u002A\u002F
class Program{public static void//\u000A\u002F\u002A
Main//\u002A\u002Fmain
(String[]z){String s="`**?`@#_^using System;?_#^class Program{public static void?@#_^Main?_#main^(String[]z){String s=!$!,t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{!&!!,!&n!,!&&!,!&@!,!&#!,!&_!,!`!,!?!,s};for(i=0;i<9;i++)t=t.?@#_^Replace?_#replace^(!!+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t?@#_^[i];Console.Write?_#.charAt(i);System.out.printf^(t);}}/",t=s;int i;int[]a=new int[]{33,94,38,64,35,95,96,63,36};String[]b=new String[]{"\"","\n","\\","\\u000A","\\u002F","\\u002A","/","//",s};for(i=0;i<9;i++)t=t.//\u000A\u002F\u002A
Replace//\u002A\u002Freplace
(""+(char)a[i],b[i]);t+='*';for(i=872;i>=0;i--)t=t+t//\u000A\u002F\u002A
[i];Console.Write//\u002A\u002F.charAt(i);System.out.printf
(t);}}/*/}};)t(
ftnirp.tuo.metsyS;)i(tArahc.F200u\A200u\//etirW.elosnoC;]i[
A200u\F200u\A000u\//t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+""(
ecalperF200u\A200u\//ecalpeR
A200u\F200u\A000u\//.t=t)++i;9<i;0=i(rof;}s,"//","/","A200u\\","F200u\\","A000u\\","\\","n\",""\"{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,"/}};)t(^ftnirp.tuo.metsyS;)i(tArahc.#_?etirW.elosnoC;]i[^_#@?t+t=t)--i;0=>i;278=i(rof;'*'=+t;)]i[b,]i[a)rahc(+!!(^ecalper#_?ecalpeR^_#@?.t=t)++i;9<i;0=i(rof;}s,!?!,!`!,!_&!,!#&!,!@&!,!&&!,!n&!,!!&!{][gnirtS wen=b][gnirtS;}63,36,69,59,53,46,83,49,33{][tni wen=a][tni;i tni;s=t,!$!=s gnirtS{)z][gnirtS(^niam#_?niaM^_#@?diov citats cilbup{margorP ssalc^#_?;metsyS gnisu^_#@`?**`"=s gnirtS{)z][gnirtS(
niamF200u\A200u\//niaM
A200u\F200u\A000u\//diov citats cilbup{margorP ssalc
F200u\A200u\//;metsyS gnisu
A200u\F200u\A000u\///**/

Implemention detail

Quine generation consists of several steps:

  • Code generation
  • Data generation
  • Code minification
  • Code formatting
  • Quine genration

At first next quine template is used:

using System;
using System.Text;
using System.Collections.Generic;

namespace Asciimation_1_3
{
    class Program
    {
        /*#Asciimation_1_3*/
        /*Asciimation_1_3#*/

        /*#HuffmanTree*/
        /*HuffmanTree#*/

        /*#HuffmanRleDecode2*/
        /*HuffmanRleDecode2#*/

        /*#Enums*/
        /*Enums#*/

        /*#Utils*/
        /*Utils#*/

        static string Data = /*%Data_1_3*/""/*Data_1_3%*/;
        static int CurrentFrame = /*$CurrentFrame*/0/*CurrentFrame$*/;

        static void Main()
        {
            var output = Decompress_v_1_3(Data, CurrentFrame++);
            if (CurrentFrame == 3591)
                CurrentFrame = 3590;
            /*@*/
        }
    }
}
/*$Output_1_3$*/

Comments with special char combinations named as "markers". Marker is used for code extraction or generation from different sources. Marker can have one of the following types:

  • Code copying from files for code blocks marked as /*#...*/… /*...#*/.
  • Data generation for data blocks marked /*%...*/… /*...%*/.
  • Quine parameters (introns) marked as /*$...*/… /*...$*/.
  • Place, where quine should be printed marked as /*@*/.

Compilation

One can generate quine via developed GUI. But prepared asciimation code is available here: AsciimationQuine_1_3.7z. It's possible to compile one frame or entire animation with the following scripts:

Windows command line (bat):

echo off

:LOOP
    "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "Asciimation_1_3.cs"
    "Asciimation_1_3.exe" > "Asciimation_1_3.cs"
    type "Asciimation_1_3.cs"
goto LOOP

:END

Powershell:

while ($true) {
    &"C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" "Asciimation_1_3.cs"
    ./"Asciimation_1_3.exe" > "Asciimation_1_3.cs"
    type "Asciimation_1_3.cs"
}

Linux with mono

while :
do
    mcs "Asciimation_1_3.cs"
    mono "Asciimation_1_3.exe" > "Asciimation_1_3.cs"
    cat "Asciimation_1_3.cs"
done

Tests

Quines, Palidrome, Polyglot and other program tests available in FreakySource.Tests project. Polyglot quine tests require installed Java.

Licence

  • Code for code, data, quine generation under the Apache 2.0 License.
  • Generated source codes under the MIT License.

Enjoy!

     ___     _____   _____   ^   ^   _    _     ___    _____   ^   _____   __  _ 
    / _ \   |  ___| |  ___| | | | | | \  / |   / _ \  |_   _| | | |  _  | |  \| |
   / /_\ \  |___  | | |___  | | | | |  \/  |  / /_\ \   | |   | | | |_| | | |\  |
  /_______\ |_____| |_____| |_| |_| |_|\/|_| /_______\  |_|   |_| |_____| |_| \_|
                                                                        
   _____    _   _   ^   __  _   _____                                
  |  _  |  | | | | | | |  \| | |  ___|                               
  | |_| |  | |_| | | | | |\  | |  __|              
  |_____ \ |_____| |_| |_| \_| |_____|                               
        \/