using System;
using System.Text .RegularExpressions ;
public class HW
{
public double ? H { get; private set; }
public double ? W { get; private set; }
public static HW FromFormula( string formula)
{
var decimalPattern = @"\d*(\.\d*)?" ;
var operatorPattern = @"\s*[-+*/×÷]\s*" ;
var r = new Regex( $@"(w(?<w>{decimalPattern})|WW){operatorPattern}(h(?<h>{decimalPattern})|HH)" ) ;
var m = r.Match ( formula) ;
if ( ! m.Success ) return null ; //throw new FormatException();
var hw = new HW( ) ;
var h = m.Groups [ "h" ] ;
if ( h.Success ) hw.H = hw.H = double .Parse ( h.Value ) ;
var w = m.Groups [ "w" ] ;
if ( w.Success ) hw.W = double .Parse ( w.Value ) ;
return hw;
}
}
public class Test
{
public static void Main( )
{
var fs = new[ ]
{
"w900×HH" ,
"WW×h1000" ,
"WW×HH" ,
"w900/h100" ,
} ;
foreach ( var f in fs)
{
var hw = HW.FromFormula ( f) ;
if ( hw == null )
Console.WriteLine ( $"Invalid Formula: {f}" ) ;
else
Console.WriteLine ( $"Valid Formula: {f}, H = {hw.H}, W = {hw.W}" ) ;
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgSFcKewogICAgcHVibGljIGRvdWJsZT8gSCB7IGdldDsgcHJpdmF0ZSBzZXQ7IH0KICAgIHB1YmxpYyBkb3VibGU/IFcgeyBnZXQ7IHByaXZhdGUgc2V0OyB9CgogICAgcHVibGljIHN0YXRpYyBIVyBGcm9tRm9ybXVsYShzdHJpbmcgZm9ybXVsYSkKICAgIHsKICAgICAgICB2YXIgZGVjaW1hbFBhdHRlcm4gPSBAIlxkKihcLlxkKik/IjsKICAgICAgICB2YXIgb3BlcmF0b3JQYXR0ZXJuID0gQCJccypbLSsqL8OXw7ddXHMqIjsKICAgICAgICB2YXIgciA9IG5ldyBSZWdleCgkQCIodyg/PHc+e2RlY2ltYWxQYXR0ZXJufSl8V1cpe29wZXJhdG9yUGF0dGVybn0oaCg/PGg+e2RlY2ltYWxQYXR0ZXJufSl8SEgpIik7CiAgICAgICAgdmFyIG0gPSByLk1hdGNoKGZvcm11bGEpOwogICAgICAgIGlmICghbS5TdWNjZXNzKSByZXR1cm4gbnVsbDsgLy90aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCk7CiAgICAgICAgdmFyIGh3ID0gbmV3IEhXKCk7CiAgICAgICAgdmFyIGggPSBtLkdyb3Vwc1siaCJdOwogICAgICAgIGlmIChoLlN1Y2Nlc3MpIGh3LkggPSBody5IID0gZG91YmxlLlBhcnNlKGguVmFsdWUpOwogICAgICAgIHZhciB3ID0gbS5Hcm91cHNbInciXTsKICAgICAgICBpZiAody5TdWNjZXNzKSBody5XID0gZG91YmxlLlBhcnNlKHcuVmFsdWUpOwogICAgICAgIHJldHVybiBodzsKICAgIH0KfQoKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQl2YXIgZnMgPSBuZXdbXSAKICAgICAgICB7CiAgICAgICAgICAgICJ3OTAww5dISCIsCiAgICAgICAgICAgICJXV8OXaDEwMDAiLAogICAgICAgICAgICAiV1fDl0hIIiwKICAgICAgICAgICAgInc5MDAvaDEwMCIsCiAgICAgICAgfTsKCiAgICAgICAgZm9yZWFjaCAodmFyIGYgaW4gZnMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgaHcgPSBIVy5Gcm9tRm9ybXVsYShmKTsKICAgICAgICAgICAgaWYgKGh3ID09IG51bGwpCiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIkludmFsaWQgRm9ybXVsYToge2Z9Iik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiVmFsaWQgRm9ybXVsYToge2Z9LCBIID0ge2h3Lkh9LCBXID0ge2h3Lld9Iik7CiAgICAgICAgfQoJfQp9
stdout
Valid Formula: w900×HH, H = , W = 900
Valid Formula: WW×h1000, H = 1000, W =
Valid Formula: WW×HH, H = , W =
Valid Formula: w900/h100, H = 100, W = 900