Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@ormaaj
Last active April 9, 2021 10:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ormaaj/4a1b756e54dbed2e6fd7e1262c332519 to your computer and use it in GitHub Desktop.
Save ormaaj/4a1b756e54dbed2e6fd7e1262c332519 to your computer and use it in GitHub Desktop.
C# plinq factorial
1
1
2
6
24
120
720
5040
40320
362880
3628800
39916800
479001600
6227020800
87178291200
1307674368000
20922789888000
355687428096000
6402373705728000
121645100408832000
2432902008176640000
51090942171709440000
1124000727777607680000
25852016738884976640000
620448401733239439360000
15511210043330985984000000
403291461126605635584000000
10888869450418352160768000000
304888344611713860501504000000
8841761993739701954543616000000
265252859812191058636308480000000
8222838654177922817725562880000000
263130836933693530167218012160000000
8683317618811886495518194401280000000
295232799039604140847618609643520000000
10333147966386144929666651337523200000000
371993326789901217467999448150835200000000
13763753091226345046315979581580902400000000
523022617466601111760007224100074291200000000
20397882081197443358640281739902897356800000000
815915283247897734345611269596115894272000000000
33452526613163807108170062053440751665152000000000
1405006117752879898543142606244511569936384000000000
60415263063373835637355132068513997507264512000000000
2658271574788448768043625811014615890319638528000000000
119622220865480194561963161495657715064383733760000000000
5502622159812088949850305428800254892961651752960000000000
258623241511168180642964355153611979969197632389120000000000
12413915592536072670862289047373375038521486354677760000000000
608281864034267560872252163321295376887552831379210240000000000
30414093201713378043612608166064768844377641568960512000000000000
1551118753287382280224243016469303211063259720016986112000000000000
80658175170943878571660636856403766975289505440883277824000000000000
4274883284060025564298013753389399649690343788366813724672000000000000
230843697339241380472092742683027581083278564571807941132288000000000000
12696403353658275925965100847566516959580321051449436762275840000000000000
710998587804863451854045647463724949736497978881168458687447040000000000000
40526919504877216755680601905432322134980384796226602145184481280000000000000
2350561331282878571829474910515074683828862318181142924420699914240000000000000
138683118545689835737939019720389406345902876772687432540821294940160000000000000
8320987112741390144276341183223364380754172606361245952449277696409600000000000000
507580213877224798800856812176625227226004528988036003099405939480985600000000000000
31469973260387937525653122354950764088012280797258232192163168247821107200000000000000
1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000
126886932185884164103433389335161480802865516174545192198801894375214704230400000000000000
8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000
544344939077443064003729240247842752644293064388798874532860126869671081148416000000000000000
36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000
2480035542436830599600990418569171581047399201355367672371710738018221445712183296000000000000000
171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000
11978571669969891796072783721689098736458938142546425857555362864628009582789845319680000000000000000
850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000
61234458376886086861524070385274672740778091784697328983823014963978384987221689274204160000000000000000
4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000
330788544151938641225953028221253782145683251820934971170611926835411235700971565459250872320000000000000000
24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000
1885494701666050254987932260861146558230394535379329335672487982961844043495537923117729972224000000000000000000
145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000
11324281178206297831457521158732046228731749579488251990048962825668835325234200766245086213177344000000000000000000
894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000
71569457046263802294811533723186532165584657342365752577109445058227039255480148842668944867280814080000000000000000000
5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000
475364333701284174842138206989404946643813294067993328617160934076743994734899148613007131808479167119360000000000000000000
39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000
3314240134565353266999387579130131288000666286242049487118846032383059131291716864129885722968716753156177920000000000000000000
281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000
24227095383672732381765523203441259715284870552429381750838764496720162249742450276789464634901319465571660595200000000000000000000
2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000
185482642257398439114796845645546284380220968949399346684421580986889562184028199319100141244804501828416633516851200000000000000000000
16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000
1485715964481761497309522733620825737885569961284688766942216863704985393094065876545992131370884059645617234469978112000000000000000000000
135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000
12438414054641307255475324325873553077577991715875414356840239582938137710983519518443046123837041347353107486982656753664000000000000000000000
1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000
108736615665674308027365285256786601004186803580182872307497374434045199869417927630229109214583415458560865651202385340530688000000000000000000000
10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000
991677934870949689209571401541893801158183648651267795444376054838492222809091499987689476037000748982075094738965754305639874560000000000000000000000
96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000
9426890448883247745626185743057242473809693764078951663494238777294707070023223798882976159207729119823605850588608460429412647567360000000000000000000000
933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Concurrent;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Numerics;
namespace curry {
a public static class Y {
public delegate T2 Rec<T1, T2>(Rec<T1, T2> f, T1 x);
public delegate Func<T1, T2> Rec2<T1, T2>(Rec2<T1, T2> f);
public static Func<T, T> Fix<T>(this Rec<T, T> f) {
return x => f(f, x);
}
public static Func<T1, T2> Fix<T1, T2>(this Rec<T1, T2> f) {
return x => f(f, x);
}
public static Func<T, T> Fix<T>(Func<Func<T, T>, Func<T, T>> f) {
return ((Rec2<T, T>)(g => g(g)))(h => x => f(h(h))(x));
}
public static Func<T1, T2> Fix<T1, T2>(Func<Func<T1, T2>, Func<T1, T2>> f) {
return ((Rec2<T1, T2>)(g => g(g)))(h => x => f(h(h))(x));
}
public static Func<T2> Partial<T1, T2>(this Func<T1, T2> f, T1 arg) {
return () => f(arg);
}
public static Func<T2, T3> Partial<T1, T2, T3>(this Func<T1, T2, T3> f, T1 arg) {
return x => f.Partial(arg)(x);
}
//public static Func<T2, T3> Partial<T1, T2, T3>(this Func<T1, T2, T3> f, T1 arg) {
// return
//return ((Func<T1, Func<T2, T3>>)(x => (Func<T2, T3>)(y => f(x, y))))(arg);
//}
//public static Func<T2, T3, T4> Partial<T1, T2, T3, T4>(this Func<T1, T2, T3, T4> f, T1 arg) {
// return x => f.Partial<T2, T3, T4>(x);
//}
}
public class NodeThing<T> {
public T Value;
public NodeThing() { }
public NodeThing(T value) {
Value = value;
}
public static implicit operator NodeThing<T>(T x) {
return new NodeThing<T>(x);
}
public static explicit operator T(NodeThing<T> x) {
return x.Value;
}
}
class Test1 {
public void Run(int max) {
ParallelEnumerable.Range(1, max)
.AsOrdered()
.SelectMany(
x => Enumerable.Range(1, max),
(x, y) => x * y
)
.Select((x, count) => string.Concat(x, count < Math.Pow(max, 2) - 1 ? ", " : string.Empty))
.ForAll(Console.Write);
}
}
class Test2 {
public void Run() {
Console.WriteLine(string.Join(" ", Environment.GetEnvironmentVariables()
.Cast<DictionaryEntry>()
.SelectMany(x => new[] { "setenv", x.Key, x.Value, ";" })
));
class Test3 {
public void Run() {
var myRandom = new Random();
var myQueue = new ConcurrentQueue<string>(
ParallelEnumerable.Range(0, 100)
.AsOrdered()
.Select(x => {
Thread.Sleep(myRandom.Next(5));
return Y.Fix<BigInteger>(
f => n => n == 0 ? 1 : n * f(n - 1)
)((BigInteger)x).ToString();
}));
myQueue.AsParallel().AsOrdered().ForAll(Console.WriteLine);
//Console.WriteLine(String.Join("\n", myQueue));
}
}
class Test4 {
public void Run() {
Console.WriteLine(string.Join(", ", testFun(new List<NodeThing<int>> { 1, 2, 3, 4, 5 })));
}
IEnumerable<int> testFun(IList<NodeThing<int>> x) {
return x.Select((n, idx) => idx < x.Count - 1 ? x[idx + 1].Value = n.Value * 2 : n.Value);
}
}
class Program {
static void Main() {
new Test3().Run();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment