Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // All rights reservered - NPSF3000 2011 (c)
- // NPSF3001 thisIsGarbage gmail.com
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using UnityEngine;
- public class Triangles : MonoBehaviour
- {
- /* Sample Data
- *
- * -340,495,-153,-910,835,-947
- * -175,41,-421,-714,574,-645
- * -547,712,-352,579,951,-786
- * 419,-864,-83,650,-399,171
- * -429,-89,-357,-930,296,-29
- * ...
- */
- void Update()
- {
- if (!Input.GetKeyDown(KeyCode.Return)) return;
- var sw = Stopwatch.StartNew();
- print(
- (from triangle in
- from numberQ in
- from textLine in ((TextAsset)Resources.Load("triangles")).text.Split('\n')
- select new Queue<float>(
- from t in textLine.Split(',')
- select float.Parse(t))
- select (from p in Enumerable.Range(0, numberQ.Count / 2)
- select new { x = numberQ.Dequeue(), y = numberQ.Dequeue() }).ToList()
- where triangle.Count(x => x.y > 0) % 3 != 0
- let splitVert = (from vert in triangle
- group vert by vert.y >= 0 into grp
- orderby grp.Count() ascending
- select grp.ToArray()).ToArray()
- let intersects = (from end in splitVert[1]
- let start = splitVert[0][0]
- let m = (end.y - start.y) / (end.x - start.x)
- let b = start.y - m * start.x
- select -b / m).ToArray()
- where intersects.Count(x => x > 0) == 1
- group intersects by true into grp
- select grp.Count()).Max()
- + " in " + sw.ElapsedMilliseconds + "ms"); // 60ms when compiled - 1000 triangles
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement