using System.Collections;
using System.Collections.Immutable;
public static void Main()
var input = "2333133121414131402";
.Select(x => Convert.ToChar(x.ToString()))
,int.Parse(input[i].ToString());
return new string('.', int.Parse(input[i].ToString();
.Aggregate((sum, s) => sum + s);
var freeBlockSpaceIndices = new Queue(map
.Select((x, i) => x == '.' ? i : -1)
.Where(index => index >= 0).ToList());
var mapArray = map.ToList();
for (var j = map.Length-1; j >= 0; j--)
var space = int.Parse(freeBlockSpaceIndices.Dequeue().ToString());
mapArray[space] = mapArray[j];
Console.WriteLine(string.Join("", mapArray));
if (mapArray.Skip(mapArray.IndexOf('.')).All(c => c == '.'))
Console.WriteLine(string.Join("", mapArray));
var checksum = mapArray.Where(c => c != '.').Sum(c => int.Parse(c.ToString()) * i++);
Console.WriteLine(checksum);