Powder

From Esolang
Jump to: navigation, search
Powder
Paradigm(s) imperative, structured, functional, object-oriented
Designed by User:A
Appeared in 2019
Computational class Turing complete
Reference implementation No implementations
Influenced by JSON, Lua
File extension(s) .conf

Powder is an unefficient and lightweight esoteric programming language based on defining tables by User:A. This is created to provide an example of a lightweight and extensible general-purpose programming language. (In this case, it creates an object-oriented notation using tags.) This is partly influenced by JSON's structure.

Documentation

Operators:

{:begin a table
}:end a table
::make a tag
,:separator of table values
":tag indicator
.:index tags
':refer to value

Actual documentation:

{
	"This table enclosed by braces( {} ) is the main table. You
	cannot delete this from any Powder program." : 0,

	"That thing above enclosed by quotation marks is a tag.
	You can assign anything valid in the syntax to a tag: a table, a value, or
	a tag. You can use a colon( : ) to set a tag to a value. Note
	that a tag assignment has to end in a comma(,), except for the
	last tag in the main table, which is not mandatory. (You have
	to make sure that a tag does not contain quotation marks.)" : 0,

	"Assigning a tag to a 0 is equivalent to a multi-line comment." : 0,

	"Example:" : 1234, "This assigns the tag Example to 1234." : 0,

	"This is an example to assign a tag to a table:" : 0,

	"table_tag" :
	{
		"a" : 1,
		"b" : 3
	},

	"You can index values using dots(.) ." : 0,

	"value" : "table_tag" . "b",

	"You can even assign a tag to a tag!" : 0,

	"This is a program that will be executed : " :
	{
		"Some_tag" : 18
	},

	"And an example to execute a tag:" : "This is a program that will be executed : ",

	"Though, if you want the value of a tag, you can use another way to do that." : 0,

	"value" : 'Example',

	"This assigns value to 1234." : 0,

	"Object Orientation in Powder:" : 0,

	"Define a class called class1" : 0,

	"class1" :
	{
		"fine" :
		{
			"a" : 1
		}
	},

	"Supports identity, properties(just define a tag in a class and call it),
	and attributes." : 0,

	"class2" :
	{
		"done" :
		{
			"b" : 2
		}
	}
}

Computational Class

Powder can easily compile to Smallfuck with an extension.

> and < : these change the currently operating tag.
* : We can define a flip table in Powder to do this:
"flip" :
{
	"1" : 0,
	"0" : 1
},

[ and ] : these are quite complicated. First, we have to define an if table:
"if" :
{
	"0" : "tag_after_matching_]",
	"1" : 0
},
The 1 merely does nothing.

Then, we need to check the current cell to see if it is 0 (implementing [):

"result" : "if".&"current_cell",

Finally, we just have to implement a jump command.

"jump" : "the_matching_[",

Note that tags containing "matching" should be dynamically modified to make the jumps match.

Also, we have to grant Smallfuck an infinite tape. We will implement a command that adds a cell to the tape(&):

"cell" : 0,

Where cell is different in each cell.

Clearing a cell is simple: just set a cell to 0.

Examples

Hello, world!

{
	"output" :
	{
		"1" : 72,
		"2" : 101,
		"3" : 108,
		"4" : 108,
		"5" : 111,
		"6" : 44,
		"7" : 32,
		"8" : 119,
		"9" : 111,
		"10" : 114,
		"11" : 108,
		"12" : 100
		"13" : 33
	}
}

Cat program

{
	"input" : 12341234,
	"Put your input here." : 0,
	"output" : 'input'
}

Truth-machine

{
	"if" :
	{
		"1" : "infinite_loop",
		"0" : "halt"
	}
	"input" : 1,
	"result" : "if".'input',
	"halt" :
	{
		"output" : 0
	},
	"infinite_loop" :
	{
		"output" : 1,
		"result" : "infinite_loop"
	}
}

Deadfish non-interactive partial interpreter

This is a huge program (611 lines).

{
	"cnt" : 0,
	"ac" : 0,

	"Put your code here." : 0,
	"input" : 
	{
		"0" : 0,
		"1" : 0,
		"2" : 0,
		"3" : 0
	},

	"Note that this only implements a part of incrementing." : 0,
	"inc" :
	{
		"0" : 1,
		"1" : 2,
		"2" : 3,
		"3" : 4,
		"4" : 5,
		"5" : 6,
		"6" : 7,
		"7" : 8,
		"8" : 9,
		"9" : 10,
		"10" : 11,
		"11" : 12,
		"12" : 13,
		"13" : 14,
		"14" : 15,
		"15" : 16,
		"16" : 17,
		"17" : 18,
		"18" : 19,
		"19" : 20,
		"20" : 21,
		"21" : 22,
		"22" : 23,
		"23" : 24,
		"24" : 25,
		"25" : 26,
		"26" : 27,
		"27" : 28,
		"28" : 29,
		"29" : 30,
		"30" : 31,
		"31" : 32,
		"32" : 33,
		"33" : 34,
		"34" : 35,
		"35" : 36,
		"36" : 37,
		"37" : 38,
		"38" : 39,
		"39" : 40,
		"40" : 41,
		"41" : 42,
		"42" : 43,
		"43" : 44,
		"44" : 45,
		"45" : 46,
		"46" : 47,
		"47" : 48,
		"48" : 49,
		"49" : 50,
		"50" : 51,
		"51" : 52,
		"52" : 53,
		"53" : 54,
		"54" : 55,
		"55" : 56,
		"56" : 57,
		"57" : 58,
		"58" : 59,
		"59" : 60,
		"60" : 61,
		"61" : 62,
		"62" : 63,
		"63" : 64,
		"64" : 65,
		"65" : 66,
		"66" : 67,
		"67" : 68,
		"68" : 69,
		"69" : 70,
		"70" : 71,
		"71" : 72,
		"72" : 73,
		"73" : 74,
		"74" : 75,
		"75" : 76,
		"76" : 77,
		"77" : 78,
		"78" : 79,
		"79" : 80,
		"80" : 81,
		"81" : 82,
		"82" : 83,
		"83" : 84,
		"84" : 85,
		"85" : 86,
		"86" : 87,
		"87" : 88,
		"88" : 89,
		"89" : 90,
		"90" : 91,
		"91" : 92,
		"92" : 93,
		"93" : 94,
		"94" : 95,
		"95" : 96,
		"96" : 97,
		"97" : 98,
		"98" : 99,
		"99" : 100,
		"100" : 101,
		"101" : 102,
		"102" : 103,
		"103" : 104,
		"104" : 105,
		"105" : 106,
		"106" : 107,
		"107" : 108,
		"108" : 109,
		"109" : 110,
		"110" : 111,
		"111" : 112,
		"112" : 113,
		"113" : 114,
		"114" : 115,
		"115" : 116,
		"116" : 117,
		"117" : 118,
		"118" : 119,
		"119" : 120,
		"120" : 121,
		"121" : 122,
		"122" : 123,
		"123" : 124,
		"124" : 125,
		"125" : 126,
		"126" : 127,
		"127" : 128,
		"128" : 129,
		"129" : 130,
		"130" : 131,
		"131" : 132,
		"132" : 133,
		"133" : 134,
		"134" : 135,
		"135" : 136,
		"136" : 137,
		"137" : 138,
		"138" : 139,
		"139" : 140,
		"140" : 141,
		"141" : 142,
		"142" : 143,
		"143" : 144,
		"144" : 145,
		"145" : 146,
		"146" : 147,
		"147" : 148,
		"148" : 149,
		"149" : 150,
		"150" : 151,
		"151" : 152,
		"152" : 153,
		"153" : 154,
		"154" : 155,
		"155" : 156,
		"156" : 157,
		"157" : 158,
		"158" : 159,
		"159" : 160,
		"160" : 161,
		"161" : 162,
		"162" : 163,
		"163" : 164,
		"164" : 165,
		"165" : 166,
		"166" : 167,
		"167" : 168,
		"168" : 169,
		"169" : 170,
		"170" : 171,
		"171" : 172,
		"172" : 173,
		"173" : 174,
		"174" : 175,
		"175" : 176,
		"176" : 177,
		"177" : 178,
		"178" : 179,
		"179" : 180,
		"180" : 181,
		"181" : 182,
		"182" : 183,
		"183" : 184,
		"184" : 185,
		"185" : 186,
		"186" : 187,
		"187" : 188,
		"188" : 189,
		"189" : 190,
		"190" : 191,
		"191" : 192,
		"192" : 193,
		"193" : 194,
		"194" : 195,
		"195" : 196,
		"196" : 197,
		"197" : 198,
		"198" : 199,
		"199" : 200,
		"200" : 201,
		"201" : 202,
		"202" : 203,
		"203" : 204,
		"204" : 205,
		"205" : 206,
		"206" : 207,
		"207" : 208,
		"208" : 209,
		"209" : 210,
		"210" : 211,
		"211" : 212,
		"212" : 213,
		"213" : 214,
		"214" : 215,
		"215" : 216,
		"216" : 217,
		"217" : 218,
		"218" : 219,
		"219" : 220,
		"220" : 221,
		"221" : 222,
		"222" : 223,
		"223" : 224,
		"224" : 225,
		"225" : 226,
		"226" : 227,
		"227" : 228,
		"228" : 229,
		"229" : 230,
		"230" : 231,
		"231" : 232,
		"232" : 233,
		"233" : 234,
		"234" : 235,
		"235" : 236,
		"236" : 237,
		"237" : 238,
		"238" : 239,
		"239" : 240,
		"240" : 241,
		"241" : 242,
		"242" : 243,
		"243" : 244,
		"244" : 245,
		"245" : 246,
		"246" : 247,
		"247" : 248,
		"248" : 249,
		"249" : 250,
		"250" : 251,
		"251" : 252,
		"252" : 253,
		"253" : 254,
		"254" : 255,
		"255" : 0,
		"256" : 0,
	},

	"Here is the decrement prodecedure (partial)" : 0,
	"dec" :
	{
		"257" : 0,
		"256" : 0,
		"255" : 254,
		"254" : 253,
		"253" : 252,
		"252" : 251,
		"251" : 250,
		"250" : 249,
		"249" : 248,
		"248" : 247,
		"247" : 246,
		"246" : 245,
		"245" : 244,
		"244" : 243,
		"243" : 242,
		"242" : 241,
		"241" : 240,
		"240" : 239,
		"239" : 238,
		"238" : 237,
		"237" : 236,
		"236" : 235,
		"235" : 234,
		"234" : 233,
		"233" : 232,
		"232" : 231,
		"231" : 230,
		"230" : 229,
		"229" : 228,
		"228" : 227,
		"227" : 226,
		"226" : 225,
		"225" : 224,
		"224" : 223,
		"223" : 222,
		"222" : 221,
		"221" : 220,
		"220" : 219,
		"219" : 218,
		"218" : 217,
		"217" : 216,
		"216" : 215,
		"215" : 214,
		"214" : 213,
		"213" : 212,
		"212" : 211,
		"211" : 210,
		"210" : 209,
		"209" : 208,
		"208" : 207,
		"207" : 206,
		"206" : 205,
		"205" : 204,
		"204" : 203,
		"203" : 202,
		"202" : 201,
		"201" : 200,
		"200" : 199,
		"199" : 198,
		"198" : 197,
		"197" : 196,
		"196" : 195,
		"195" : 194,
		"194" : 193,
		"193" : 192,
		"192" : 191,
		"191" : 190,
		"190" : 189,
		"189" : 188,
		"188" : 187,
		"187" : 186,
		"186" : 185,
		"185" : 184,
		"184" : 183,
		"183" : 182,
		"182" : 181,
		"181" : 180,
		"180" : 179,
		"179" : 178,
		"178" : 177,
		"177" : 176,
		"176" : 175,
		"175" : 174,
		"174" : 173,
		"173" : 172,
		"172" : 171,
		"171" : 170,
		"170" : 169,
		"169" : 168,
		"168" : 167,
		"167" : 166,
		"166" : 165,
		"165" : 164,
		"164" : 163,
		"163" : 162,
		"162" : 161,
		"161" : 160,
		"160" : 159,
		"159" : 158,
		"158" : 157,
		"157" : 156,
		"156" : 155,
		"155" : 154,
		"154" : 153,
		"153" : 152,
		"152" : 151,
		"151" : 150,
		"150" : 149,
		"149" : 148,
		"148" : 147,
		"147" : 146,
		"146" : 145,
		"145" : 144,
		"144" : 143,
		"143" : 142,
		"142" : 141,
		"141" : 140,
		"140" : 139,
		"139" : 138,
		"138" : 137,
		"137" : 136,
		"136" : 135,
		"135" : 134,
		"134" : 133,
		"133" : 132,
		"132" : 131,
		"131" : 130,
		"130" : 129,
		"129" : 128,
		"128" : 127,
		"127" : 126,
		"126" : 125,
		"125" : 124,
		"124" : 123,
		"123" : 122,
		"122" : 121,
		"121" : 120,
		"120" : 119,
		"119" : 118,
		"118" : 117,
		"117" : 116,
		"116" : 115,
		"115" : 114,
		"114" : 113,
		"113" : 112,
		"112" : 111,
		"111" : 110,
		"110" : 109,
		"109" : 108,
		"108" : 107,
		"107" : 106,
		"106" : 105,
		"105" : 104,
		"104" : 103,
		"103" : 102,
		"102" : 101,
		"101" : 100,
		"100" : 99,
		"99" : 98,
		"98" : 97,
		"97" : 96,
		"96" : 95,
		"95" : 94,
		"94" : 93,
		"93" : 92,
		"92" : 91,
		"91" : 90,
		"90" : 89,
		"89" : 88,
		"88" : 87,
		"87" : 86,
		"86" : 85,
		"85" : 84,
		"84" : 83,
		"83" : 82,
		"82" : 81,
		"81" : 80,
		"80" : 79,
		"79" : 78,
		"78" : 77,
		"77" : 76,
		"76" : 75,
		"75" : 74,
		"74" : 73,
		"73" : 72,
		"72" : 71,
		"71" : 70,
		"70" : 69,
		"69" : 68,
		"68" : 67,
		"67" : 66,
		"66" : 65,
		"65" : 64,
		"64" : 63,
		"63" : 62,
		"62" : 61,
		"61" : 60,
		"60" : 59,
		"59" : 58,
		"58" : 57,
		"57" : 56,
		"56" : 55,
		"55" : 54,
		"54" : 53,
		"53" : 52,
		"52" : 51,
		"51" : 50,
		"50" : 49,
		"49" : 48,
		"48" : 47,
		"47" : 46,
		"46" : 45,
		"45" : 44,
		"44" : 43,
		"43" : 42,
		"42" : 41,
		"41" : 40,
		"40" : 39,
		"39" : 38,
		"38" : 37,
		"37" : 36,
		"36" : 35,
		"35" : 34,
		"34" : 33,
		"33" : 32,
		"32" : 31,
		"31" : 30,
		"30" : 29,
		"29" : 28,
		"28" : 27,
		"27" : 26,
		"26" : 25,
		"25" : 24,
		"24" : 23,
		"23" : 22,
		"22" : 21,
		"21" : 20,
		"20" : 19,
		"19" : 18,
		"18" : 17,
		"17" : 16,
		"16" : 15,
		"15" : 14,
		"14" : 13,
		"13" : 12,
		"12" : 11,
		"11" : 10,
		"10" : 9,
		"9" : 8,
		"8" : 7,
		"7" : 6,
		"6" : 5,
		"5" : 4,
		"4" : 3,
		"3" : 2,
		"2" : 1,
		"1" : 0,
		"0" : 0
	}

	"Implement a procedure to square the accumulator" : 0,
	"squ" :
	{
		"0" : 0,
		"1" : 1,
		"2" : 4,
		"3" : 9,
		"4" : 16,
		"5" : 25,
		"6" : 36,
		"7" : 49,
		"8" : 64,
		"9" : 81,
		"10" : 100,
		"11" : 121,
		"12" : 144,
		"13" : 169,
		"14" : 196,
		"15" : 225,
		"16" : 0,
	}

	"interpret the program (idso)" : 0,
	"interpret"
	{
		"105" : "increment_ac",
		"100" : "decrement_ac",
		"115" : "square_ac",
		"111" : "output_ac"
	}

	"i" : 0,
	"increment_ac" :
	{
		"ac" : "inc".'ac'
	}

	"d" : 0,
	"decrement_ac" :
	{
		"ac" : "dec".'ac'
	}

	"s" : 0,
	"square_ac" :
	{
		"ac" : "squ".'ac'
	}

	"o" : 0,
	"output_ac" :
	{
		"output" : 'ac'
	}

	"main loop " : 0,
	"forever" :
	{
		"Prompt(>> \n)" : 0,
		"output" :
		{
			"1" : 62,
			"2" : 62,
			"3" : 32,
			"4" : 10
		}

		"interpret"."input".'cnt',
		"cnt" : "inc".'cnt',
		
		"return" : "forever"
	}
}

Fibonacci sequence

This is limited in results.

{
	"fib" :
	{
		"0" : 0,
		"1" : 1,
		"2" : 1,
		"3" : 2,
		"4" : 3,
		"5" : 5,
		"6" : 8,
		"7" : 13,
		"8" : 21,
		"9" : 34,
		"10" : 55,
		"11" : 89,
		"12" : 144,
		"13" : 233,
		"14" : 377,
		"15" : 610,
		"16" : 987,
		"17" : 1597,
		"18" : 2584,
		"19" : 4181,
		"20" : 6765,
		"21" : 10946,
		"22" : 17711,
		"23" : 28657,
		"24" : 46368,
		"25" : 75025,
		"26" : 121393,
		"27" : 196418,
		"28" : 317811,
		"29" : 514229,
		"30" : 832040,
		"31" : 1346269,
		"32" : 2178309,
		"33" : 3524578,
		"34" : 5702887,
		"35" : 9227465,
		"36" : 14930352,
		"37" : 24157817,
		"38" : 39088169,
		"39" : 63245986,
		"40" : 102334155,
		"41" : 165580141,
		"42" : 267914296,
		"43" : 433494437,
		"44" : 701408733,
		"45" : 1134903170,
		"46" : 1836311903,
		"47" : 2971215073,
		"48" : 4807526976,
		"49" : 7778742049,
		"50" : 12586269025,
		"51" : 20365011074,
		"52" : 32951280099,
		"53" : 53316291173,
		"54" : 86267571272,
		"55" : 139583862445,
		"56" : 225851433717,
		"57" : 365435296162,
		"58" : 591286729879,
		"59" : 956722026041,
		"60" : 1548008755920,
		"61" : 2504730781961,
		"62" : 4052739537881,
		"63" : 6557470319842,
		"64" : 10610209857723,
		"65" : 17167680177565,
		"66" : 27777890035288,
		"67" : 44945570212853,
		"68" : 72723460248141,
		"69" : 117669030460994,
		"70" : 190392490709135,
		"71" : 308061521170129,
		"72" : 498454011879264,
		"73" : 806515533049393,
		"74" : 1304969544928657,
		"75" : 2111485077978050,
		"76" : 3416454622906707,
		"77" : 5527939700884757,
		"78" : 8944394323791464,
		"79" : 14472334024676221,
		"80" : 23416728348467685,
		"81" : 37889062373143906,
		"82" : 61305790721611591,
		"83" : 99194853094755497,
		"84" : 160500643816367088,
		"85" : 259695496911122585,
		"86" : 420196140727489673,
		"87" : 679891637638612258,
		"88" : 1100087778366101931,
		"89" : 1779979416004714189,
		"90" : 2880067194370816120,
		"91" : 4660046610375530309,
		"92" : 7540113804746346429,
		"93" : 12200160415121876738,
		"94" : 19740274219868223167,
		"95" : 31940434634990099905,
		"96" : 51680708854858323072,
		"97" : 83621143489848422977,
		"98" : 135301852344706746049,
		"99" : 218922995834555169026,
		"100" : 354224848179261915075,
		"101" : 573147844013817084101,
		"102" : 927372692193078999176,
		"103" : 1500520536206896083277,
		"104" : 2427893228399975082453,
		"105" : 3928413764606871165730,
		"106" : 6356306993006846248183,
		"107" : 10284720757613717413913,
		"108" : 16641027750620563662096,
		"109" : 26925748508234281076009,
		"110" : 43566776258854844738105,
		"111" : 70492524767089125814114,
		"112" : 114059301025943970552219,
		"113" : 184551825793033096366333,
		"114" : 298611126818977066918552,
		"115" : 483162952612010163284885,
		"116" : 781774079430987230203437,
		"117" : 1264937032042997393488322,
		"118" : 2046711111473984623691759,
		"119" : 3311648143516982017180081,
		"120" : 5358359254990966640871840,
		"121" : 8670007398507948658051921,
		"122" : 14028366653498915298923761,
		"123" : 22698374052006863956975682,
		"124" : 36726740705505779255899443,
		"125" : 59425114757512643212875125,
		"126" : 96151855463018422468774568,
		"127" : 155576970220531065681649693,
		"128" : 251728825683549488150424261,
		"129" : 407305795904080553832073954,
		"130" : 659034621587630041982498215,
		"131" : 1066340417491710595814572169,
		"132" : 1725375039079340637797070384,
		"133" : 2791715456571051233611642553,
		"134" : 4517090495650391871408712937,
		"135" : 7308805952221443105020355490,
		"136" : 11825896447871834976429068427,
		"137" : 19134702400093278081449423917,
		"138" : 30960598847965113057878492344,
		"139" : 50095301248058391139327916261,
		"140" : 81055900096023504197206408605,
		"141" : 131151201344081895336534324866,
		"142" : 212207101440105399533740733471,
		"143" : 343358302784187294870275058337,
		"144" : 555565404224292694404015791808,
		"145" : 898923707008479989274290850145,
		"146" : 1454489111232772683678306641953,
		"147" : 2353412818241252672952597492098,
		"148" : 3807901929474025356630904134051,
		"149" : 6161314747715278029583501626149,
		"150" : 9969216677189303386214405760200,
		"151" : 16130531424904581415797907386349,
		"152" : 26099748102093884802012313146549,
		"153" : 42230279526998466217810220532898,
		"154" : 68330027629092351019822533679447,
		"155" : 110560307156090817237632754212345,
		"156" : 178890334785183168257455287891792,
		"157" : 289450641941273985495088042104137,
		"158" : 468340976726457153752543329995929,
		"159" : 757791618667731139247631372100066,
		"160" : 1226132595394188293000174702095995,
		"161" : 1983924214061919432247806074196061,
		"162" : 3210056809456107725247980776292056,
		"163" : 5193981023518027157495786850488117,
		"164" : 8404037832974134882743767626780173,
		"165" : 13598018856492162040239554477268290,
		"166" : 22002056689466296922983322104048463,
		"167" : 35600075545958458963222876581316753,
		"168" : 57602132235424755886206198685365216,
		"169" : 93202207781383214849429075266681969,
		"170" : 150804340016807970735635273952047185,
		"171" : 244006547798191185585064349218729154,
		"172" : 394810887814999156320699623170776339,
		"173" : 638817435613190341905763972389505493,
		"174" : 1033628323428189498226463595560281832,
		"175" : 1672445759041379840132227567949787325,
		"176" : 2706074082469569338358691163510069157,
		"177" : 4378519841510949178490918731459856482,
		"178" : 7084593923980518516849609894969925639,
		"179" : 11463113765491467695340528626429782121,
		"180" : 18547707689471986212190138521399707760,
		"181" : 30010821454963453907530667147829489881,
		"182" : 48558529144435440119720805669229197641,
		"183" : 78569350599398894027251472817058687522,
		"184" : 127127879743834334146972278486287885163,
		"185" : 205697230343233228174223751303346572685,
		"186" : 332825110087067562321196029789634457848,
		"187" : 538522340430300790495419781092981030533,
		"188" : 871347450517368352816615810882615488381,
		"189" : 1409869790947669143312035591975596518914,
		"190" : 2281217241465037496128651402858212007295,
		"191" : 3691087032412706639440686994833808526209,
		"192" : 5972304273877744135569338397692020533504,
		"193" : 9663391306290450775010025392525829059713,
		"194" : 15635695580168194910579363790217849593217,
		"195" : 25299086886458645685589389182743678652930,
		"196" : 40934782466626840596168752972961528246147,
		"197" : 66233869353085486281758142155705206899077,
		"198" : 107168651819712326877926895128666735145224,
		"199" : 173402521172797813159685037284371942044301,
		"200" : 280571172992510140037611932413038677189525,

	},
	"input" : 5,
	"output" : "fib".'input'
}

A simple adder code snippet

In this snippet, you can only add using 0, 1, and 2. Implementing a whole adder would be impossible and tedious.

{
	"add" :
	{
		"0" :
		{
			"0" : 0
			"1" : 1
			"2" : 2
		}
		"1" :
		{
			"0" : 1
			"1" : 2
			"2" : 3
		}
		"2" :
		{
			"0" : 2
			"1" : 3
			"2" : 4
		}
	}
}

Factorial

This is a limited factorial function.

{
	"fac" :
	{
		"1" : 1,
		"2" : 2,
		"3" : 6,
		"4" : 24,
		"5" : 120,
		"6" : 720,
		"7" : 5040,
		"8" : 40320,
		"9" : 362880,
		"10" : 3628800,
		"11" : 39916800,
		"12" : 479001600,
		"13" : 6227020800,
		"14" : 87178291200,
		"15" : 1307674368000,
		"16" : 20922789888000,
		"17" : 355687428096000,
		"18" : 6402373705728000,
		"19" : 121645100408832000,
		"20" : 2432902008176640000,
		"21" : 51090942171709440000,
		"22" : 1124000727777607680000,
		"23" : 25852016738884976640000,
		"24" : 620448401733239439360000,
		"25" : 15511210043330985984000000,
		"26" : 403291461126605635584000000,
		"27" : 10888869450418352160768000000,
		"28" : 304888344611713860501504000000,
		"29" : 8841761993739701954543616000000,
		"30" : 265252859812191058636308480000000,
		"31" : 8222838654177922817725562880000000,
		"32" : 263130836933693530167218012160000000,
		"33" : 8683317618811886495518194401280000000,
		"34" : 295232799039604140847618609643520000000,
		"35" : 10333147966386144929666651337523200000000,
		"36" : 371993326789901217467999448150835200000000,
		"37" : 13763753091226345046315979581580902400000000,
		"38" : 523022617466601111760007224100074291200000000,
		"39" : 20397882081197443358640281739902897356800000000,
		"40" : 815915283247897734345611269596115894272000000000,
		"41" : 33452526613163807108170062053440751665152000000000,
		"42" : 1405006117752879898543142606244511569936384000000000,
		"43" : 60415263063373835637355132068513997507264512000000000,
		"44" : 2658271574788448768043625811014615890319638528000000000,
		"45" : 119622220865480194561963161495657715064383733760000000000,
		"46" : 5502622159812088949850305428800254892961651752960000000000,
		"47" : 258623241511168180642964355153611979969197632389120000000000,
		"48" : 12413915592536072670862289047373375038521486354677760000000000,
		"49" : 608281864034267560872252163321295376887552831379210240000000000,
		"50" : 30414093201713378043612608166064768844377641568960512000000000000,
		"51" : 1551118753287382280224243016469303211063259720016986112000000000000,
		"52" : 80658175170943878571660636856403766975289505440883277824000000000000,
		"53" : 4274883284060025564298013753389399649690343788366813724672000000000000,
		"54" : 230843697339241380472092742683027581083278564571807941132288000000000000,
		"55" : 12696403353658275925965100847566516959580321051449436762275840000000000000,
		"56" : 710998587804863451854045647463724949736497978881168458687447040000000000000,
		"57" : 40526919504877216755680601905432322134980384796226602145184481280000000000000,
		"58" : 2350561331282878571829474910515074683828862318181142924420699914240000000000000,
		"59" : 138683118545689835737939019720389406345902876772687432540821294940160000000000000,
		"60" : 8320987112741390144276341183223364380754172606361245952449277696409600000000000000,
		"61" : 507580213877224798800856812176625227226004528988036003099405939480985600000000000000,
		"62" : 31469973260387937525653122354950764088012280797258232192163168247821107200000000000000,
		"63" : 1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000,
		"64" : 126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000,
		"65" : 8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000,
		"66" : 544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000,
		"67" : 36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000,
		"68" : 2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000,
		"69" : 171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000,
		"70" : 11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000,
		"71" : 850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000,
		"72" : 61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000,
		"73" : 4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000,
		"74" : 330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000,
		"75" : 24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000,
		"76" : 1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000,
		"77" : 145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000,
		"78" : 11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000,
		"79" : 894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000,
		"80" : 71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000,
		"81" : 5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000,
		"82" : 475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000,
		"83" : 39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000,
		"84" : 3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000,
		"85" : 281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000,
		"86" : 24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000,
		"87" : 2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000,
		"88" : 185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000,
		"89" : 16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000,
		"90" : 1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000,
		"91" : 135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000,
		"92" : 12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000,
		"93" : 1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000,
		"94" : 108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000,
		"95" : 10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000,
		"96" : 991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000,
		"97" : 96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000,
		"98" : 9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000,
		"99" : 933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000,
		"100" : 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
	},
	"input" : 123,
	"output" : "fac".'input'
}