1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | using System; using System.Text; namespace Pyramid { public class Pyramid { private readonly int rows; private readonly int[,] data; public Pyramid(int[,] data) { this.data = data; rows = data.GetLength(0); } public Pyramid(int rows) { this.rows = rows; data = new int[rows, rows]; } public int this[int row, int col] { get { return data[row, col]; } set { data[row, col] = value; } } public int Rows { get { return rows; } } public override string ToString() { var sb = new StringBuilder(); for (int row = 0; row < rows; row++) { sb.Append(new string(' ', 9 * row / 2)); for (int col = 0; col < rows - row; col++) { sb.AppendFormat("[{0:00000}] ", data[row, col]); } sb.AppendLine(); } return sb.ToString(); } } public interface IPyramidGenerator { Pyramid GeneratePyramid(); } public class RandomPyramidGenerator : IPyramidGenerator { private readonly int rows; private readonly int range; private readonly Random random; public RandomPyramidGenerator(int rows, int range) { this.rows = rows; this.range = range; random = new Random(); } public Pyramid GeneratePyramid() { var pyramid = new Pyramid(rows); for (int row = 0; row < rows; row++) { for (int col = 0; col < rows - row; col++) { pyramid[row, col] = random.Next(1, range); } } return pyramid; } } public interface IPyramidSolver { long PyramidMaximumTotal(Pyramid pyramid); } // There is something wrong here. A few things actually... public class NaivePyramidSolver : IPyramidSolver //........................... { public long PyramidMaximumTotal(Pyramid pyramid) { return GetTotalAbove(pyramid.Rows - 1, 0, pyramid); } private long GetTotalAbove(int row, int column, Pyramid pyramid) { if (row == 0) return 0; int myValue = pyramid[row, column]; long left = myValue + GetTotalAbove(row - 1, column, pyramid); long right = myValue + GetTotalAbove(row - 1, column + 1, pyramid); return Math.Max(left, right); } } public class OurProgram { private static void Main() { // this is doesn't get correct number var generator = new RandomPyramidGenerator(5, 99); Pyramid pyramid = generator.GeneratePyramid(); Console.WriteLine(pyramid); var solver = new NaivePyramidSolver(); Console.WriteLine("This result is wrong, do you know why ?"); Console.WriteLine(solver.PyramidMaximumTotal(pyramid)); Console.ReadLine(); } } } |
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dDsKCm5hbWVzcGFjZSBQeXJhbWlkCnsKICAgIHB1YmxpYyBjbGFzcyBQeXJhbWlkCiAgICB7CiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50IHJvd3M7CiAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW50WyxdIGRhdGE7CgogICAgICAgICAgICBwdWJsaWMgUHlyYW1pZChpbnRbLF0gZGF0YSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CiAgICAgICAgICAgICAgICAgICAgcm93cyA9IGRhdGEuR2V0TGVuZ3RoKDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwdWJsaWMgUHlyYW1pZChpbnQgcm93cykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IHJvd3M7CiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBpbnRbcm93cywgcm93c107CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyBpbnQgdGhpc1tpbnQgcm93LCBpbnQgY29sXQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZ2V0IHsgcmV0dXJuIGRhdGFbcm93LCBjb2xdOyB9CiAgICAgICAgICAgICAgICAgICAgc2V0IHsgZGF0YVtyb3csIGNvbF0gPSB2YWx1ZTsgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBwdWJsaWMgaW50IFJvd3MKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGdldCB7IHJldHVybiByb3dzOyB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHB1YmxpYyBvdmVycmlkZSBzdHJpbmcgVG9TdHJpbmcoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNiID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kKG5ldyBzdHJpbmcoJyAnLCA5ICogcm93IC8gMikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcm93cyAtIHJvdzsgY29sKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiLkFwcGVuZEZvcm1hdCgiW3swOjAwMDAwfV0gIiwgZGF0YVtyb3csIGNvbF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2IuQXBwZW5kTGluZSgpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNiLlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgaW50ZXJmYWNlIElQeXJhbWlkR2VuZXJhdG9yCiAgICB7CiAgICAgICAgICAgIFB5cmFtaWQgR2VuZXJhdGVQeXJhbWlkKCk7CiAgICB9CgogICAgcHVibGljIGNsYXNzIFJhbmRvbVB5cmFtaWRHZW5lcmF0b3IgOiBJUHlyYW1pZEdlbmVyYXRvcgogICAgewogICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludCByb3dzOwogICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGludCByYW5nZTsKICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBSYW5kb20gcmFuZG9tOwoKICAgICAgICAgICAgcHVibGljIFJhbmRvbVB5cmFtaWRHZW5lcmF0b3IoaW50IHJvd3MsIGludCByYW5nZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IHJvd3M7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZSA9IHJhbmdlOwogICAgICAgICAgICAgICAgICAgIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcHVibGljIFB5cmFtaWQgR2VuZXJhdGVQeXJhbWlkKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHZhciBweXJhbWlkID0gbmV3IFB5cmFtaWQocm93cyk7CiAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgcm93ID0gMDsgcm93IDwgcm93czsgcm93KyspCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgcm93cyAtIHJvdzsgY29sKyspCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5cmFtaWRbcm93LCBjb2xdID0gcmFuZG9tLk5leHQoMSwgcmFuZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHlyYW1pZDsKICAgICAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBpbnRlcmZhY2UgSVB5cmFtaWRTb2x2ZXIKICAgIHsKICAgICAgICAgICAgbG9uZyBQeXJhbWlkTWF4aW11bVRvdGFsKFB5cmFtaWQgcHlyYW1pZCk7CiAgICB9CgogICAgLy8gVGhlcmUgaXMgc29tZXRoaW5nIHdyb25nIGhlcmUuIEEgZmV3IHRoaW5ncyBhY3R1YWxseS4uLiAKICAgIHB1YmxpYyBjbGFzcyBOYWl2ZVB5cmFtaWRTb2x2ZXIgOiBJUHlyYW1pZFNvbHZlciAvLy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogICAgewogICAgICAgICAgICBwdWJsaWMgbG9uZyBQeXJhbWlkTWF4aW11bVRvdGFsKFB5cmFtaWQgcHlyYW1pZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBHZXRUb3RhbEFib3ZlKHB5cmFtaWQuUm93cyAtIDEsIDAsIHB5cmFtaWQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBwcml2YXRlIGxvbmcgR2V0VG90YWxBYm92ZShpbnQgcm93LCBpbnQgY29sdW1uLCBQeXJhbWlkIHB5cmFtaWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAocm93ID09IDApIHJldHVybiAwOwoKICAgICAgICAgICAgICAgICAgICBpbnQgbXlWYWx1ZSA9IHB5cmFtaWRbcm93LCBjb2x1bW5dOwogICAgICAgICAgICAgICAgICAgIGxvbmcgbGVmdCA9IG15VmFsdWUgKyBHZXRUb3RhbEFib3ZlKHJvdyAtIDEsIGNvbHVtbiwgcHlyYW1pZCk7CiAgICAgICAgICAgICAgICAgICAgbG9uZyByaWdodCA9IG15VmFsdWUgKyBHZXRUb3RhbEFib3ZlKHJvdyAtIDEsIGNvbHVtbiArIDEsIHB5cmFtaWQpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLk1heChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgIH0KICAgIH0KCgogICAgcHVibGljIGNsYXNzIE91clByb2dyYW0KICAgIHsKICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBNYWluKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgZG9lc24ndCBnZXQgY29ycmVjdCBudW1iZXIKICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gbmV3IFJhbmRvbVB5cmFtaWRHZW5lcmF0b3IoNSwgOTkpOwogICAgICAgICAgICAgICAgICAgIFB5cmFtaWQgcHlyYW1pZCA9IGdlbmVyYXRvci5HZW5lcmF0ZVB5cmFtaWQoKTsKICAgICAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShweXJhbWlkKTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIHNvbHZlciA9IG5ldyBOYWl2ZVB5cmFtaWRTb2x2ZXIoKTsKCiAgICAgICAgICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIlRoaXMgcmVzdWx0IGlzIHdyb25nLCBkbyB5b3Uga25vdyB3aHkgPyIpOwogICAgICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHNvbHZlci5QeXJhbWlkTWF4aW11bVRvdGFsKHB5cmFtaWQpKTsKCgogICAgICAgICAgICAgICAgICAgIENvbnNvbGUuUmVhZExpbmUoKTsKICAgICAgICAgICAgfQogICAgfQp9
-
upload with new input
-
result: Success time: 0.03s memory: 36976 kB returned value: 0
[00024] [00014] [00012] [00077] [00079] [00035] [00095] [00057] [00058] [00022] [00081] [00052] [00039] [00097] [00069] This result is wrong, do you know why ? 342


