using System;
public class Test
{
public static void Main()
{
var hp = new HP(34, 58);
Console.WriteLine(string.Format("{0}", hp));
Console.WriteLine(string.Format("{0:P}", hp));
}
}
class HP : IFormattable
{
private int _maxHp;
private int _hp;
public HP (int hp, int maxHp)
{
_hp = hp;
_maxHp = maxHp;
}
public override String ToString() { return ToString(null, null); }
public string ToString(string format, IFormatProvider fp)
{
if (format == null)
{
return string.Format("{0}/{1}", _hp, _maxHp);
}
if (format == "P")
{
return string.Format("{0:P}", (float)_hp / (float)_maxHp);
}
throw new FormatException(string.Format("Invalid format string: '{0}'.", format));
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBocCA9IG5ldyBIUCgzNCwgNTgpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuRm9ybWF0KCJ7MH0iLCBocCkpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKHN0cmluZy5Gb3JtYXQoInswOlB9IiwgaHApKTsKCX0KfQoKY2xhc3MgSFAgOiBJRm9ybWF0dGFibGUKewogICAgcHJpdmF0ZSBpbnQgX21heEhwOwogICAgcHJpdmF0ZSBpbnQgX2hwOwoKICAgIHB1YmxpYyBIUCAoaW50IGhwLCBpbnQgbWF4SHApCiAgICB7CiAgICAgICAgX2hwID0gaHA7CiAgICAgICAgX21heEhwID0gbWF4SHA7CiAgICB9CgogICAgcHVibGljIG92ZXJyaWRlIFN0cmluZyBUb1N0cmluZygpIHsgcmV0dXJuIFRvU3RyaW5nKG51bGwsIG51bGwpOyB9CgogICAgcHVibGljIHN0cmluZyBUb1N0cmluZyhzdHJpbmcgZm9ybWF0LCBJRm9ybWF0UHJvdmlkZXIgZnApCiAgICB7CiAgICAgICAgaWYgKGZvcm1hdCA9PSBudWxsKSAKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBzdHJpbmcuRm9ybWF0KCJ7MH0vezF9IiwgX2hwLCBfbWF4SHApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZvcm1hdCA9PSAiUCIpIAogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmluZy5Gb3JtYXQoInswOlB9IiwgKGZsb2F0KV9ocCAvIChmbG9hdClfbWF4SHApOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbihzdHJpbmcuRm9ybWF0KCJJbnZhbGlkIGZvcm1hdCBzdHJpbmc6ICd7MH0nLiIsIGZvcm1hdCkpOwogICAgfQp9