C#413
完全なプログラム。コマンドラインでファイル名を渡すと、出力はファイル「o」と同じ形式で保存されます。
SelectManyやEnumerable.Rangeなど、linqのいくつかの優れた機能を使用しない。
using System.Collections.Generic;using System.Linq;using System.Drawing;
class P{
static void Main(string[]a){
var d=new Dictionary<Color,int>();var b=new Bitmap(a[0]);
int n,x,y,w=b.Width,h=b.Height;
for (x=w;x-->0;)for(y=h;y-->0;){var p=b.GetPixel(x,y);d[p]=d.ContainsKey(p)?d[p]+1:1;}
y=h;foreach(var q in d.OrderBy(v=>v.Value)){for(n=q.Value;n-->0;){
if(x<=0){x=w;--y;}b.SetPixel(--x, y, q.Key);}}b.Save("o");
}}
読み取り可能 VS2010の書式設定礼儀
using System.Collections.Generic;
using System.Linq;
using System.Drawing;
class P
{
static void Main(string[] a)
{
var d = new Dictionary<Color, int>();
var b = new Bitmap(a[0]);
int n,x,y,w = b.Width, h=b.Height;
for (x = w; x-- > 0;)
for (y = h; y-- > 0;)
{
var p = b.GetPixel(x, y);
d[p] = d.ContainsKey(p) ? d[p]+1 : 1;
}
y = h;
foreach (var q in d.OrderBy(v => v.Value))
{
for (n = q.Value; n-- > 0; )
{
if (x <= 0)
{
x = w;
--y;
}
b.SetPixel(--x, y, q.Key);
}
}
b.Save(a[0]+".");
}
}