Jack, C programlama dilini sever, ancak V=a*b*h;
değerleri çoğaltmak gibi ifadeler yazmaktan nefret eder .
Bunun V=abh;
yerine yazmak istiyor , derleyici abh
tanımlandığından beri tanımsız olan sembol hakkında neden inliyor int a, b, h;
, böylece çarpımı çıkarabiliriz?
Geçerli kapsamda tanımlanan değişkenler kümesi biliniyorsa, tek bir çarpma terimini deşifre eden bir ayrıştırıcıyı uygulamasına yardımcı olun.
Basit olması için, sayının (olduğu gibi 2*a*b
) çarpılması dikkate alınmaz, yalnızca değişkenler görünür.
Girdi regexp'yi karşılayan bir çarpma terimi T'dir:
[a-zA-Z_][a-zA-Z_0-9]*
ve Z değişken takımı .
T değişkeninin Z değişken kümesi üzerinden ayrıştırma P'si aşağıdakileri sağlayan bir dizedir:
*
P'nin tüm oluşumlarını kaldırdıktan sonra T alırız,- ya Z'den gelen bir değişken adıdır ya da Z'den gelen tek değişkenli bölünmüş doğru değişken adlarından oluşur
*
.
Çözüm, bir terimin tüm çözümlemelerini yazdırmalıdır.
Örneklem:
Vars a, c, ab, bc
Term abc
Solution ab*c, a*bc
Vars ab, bc
Term abc
Solution -
Vars -
Term xyz
Solution -
Vars xyz
Term xyz
Solution xyz
Vars width, height
Term widthheight
Solution width*height
Vars width, height
Term widthheightdepth
Solution -
Vars aaa, a
Term aaaa
Solution aaa*a, a*aaa, a*a*a*a
Giriş (değişkenler listesi ve terim), dile uygun herhangi bir şekilde sağlanabilir.
Çıktı herhangi bir mantıklı biçimde olabilir (satır başına bir ayrıştırma veya virgülle ayrılmış liste vb.) - ancak açık ve okunması mümkün olmalıdır.
Bir terimin olası ayrıştırılması yoksa boş çıktı kabul edilebilir (açıklık için '-' kullandığım örneklerde).
Bu bir kod golf, bu yüzden en kısa kod kazanır.
a*aaa aaa*a
ve değilab*c c*ab
ab*c
yanlış bir ayrıştırma olduğuna inanıyorumc
.