Home » Triangle Side Validation

Triangle Side Validation

Provide a formula to list all Triangles from A2:A10. Given 3 sides, something is a Triangle if sum of two sides is > third side. Hence, for sides a, b, c, it is a Triangle if all 3 are met – a+b>c, b+c>a, c+a>b.

📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 18
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn

Solving the challenge of Triangle Side Validation with Power Query

Power Query solution 1 for Triangle Side Validation, proposed by Aditya Kumar Darak 🇮🇳:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  Calc = Table.AddColumn(
    Source, 
    "Calc", 
    (f) =>
      let
        a = Record.ToList(f), 
        b = List.Sort(List.Skip(a)), 
        d = List.Sum(List.FirstN(b, 2)) > List.Sum({List.Last(b)})
      in
        d
  ), 
  Result = Table.SelectRows(Calc, each ([Calc] = true))[[Triangle]]
in
  Result
Power Query solution 2 for Triangle Side Validation, proposed by Luan Rodrigues:
let
  Fonte = Excel.CurrentWorkbook(){[Name = "Tabela1"]}[Content], 
  cond = Table.SelectRows(
    Table.AddColumn(
      Fonte, 
      "Result", 
      each 
        if [Side 1]
          + [Side 2] > [Side 3] and [Side 2]
          + [Side 3] > [Side 1] and [Side 3]
          + [Side 1] > [Side 2]
        then
          true
        else
          false
    ), 
    each [Result] = true
  )[[Triangle]]
in
  cond
Power Query solution 3 for Triangle Side Validation, proposed by Brian Julius:
let
  Source = Table.TransformColumnTypes(
    #"Triangles Raw", 
    {{"Side 1", Int64.Type}, {"Side 2", Int64.Type}, {"Side 3", Int64.Type}}
  ), 
  TestSides = Table.AddColumn(
    Source, 
    "Custom", 
    each 
      if [Side 1] + [Side 2] <= [Side 3] then
        0
      else if [Side 1] + [Side 3] <= [Side 2] then
        0
      else if [Side 2] + [Side 3] <= [Side 1] then
        0
      else
        1
  ), 
  Cleanup = Table.RenameColumns(
    Table.RemoveColumns(
      Table.SelectRows(TestSides, each ([Custom] = 1)), 
      {"Side 1", "Side 2", "Side 3", "Custom"}
    ), 
    {"Triangle", "Expected Answer"}
  )
in
  Cleanup
Power Query solution 4 for Triangle Side Validation, proposed by Matthias Friedmann:
let
  Source = Excel.CurrentWorkbook(){[Name = "Table2"]}[Content], 
  #"Filtered Rows" = Table.SelectRows(
    Source, 
    each 
      if List.Max({[Side 1], [Side 2], [Side 3]}) = [Side 1] then
        [Side 1] < [Side 2] + [Side 3]
      else if List.Max({[Side 1], [Side 2], [Side 3]}) = [Side 2] then
        [Side 2] < [Side 1] + [Side 3]
      else if List.Max({[Side 1], [Side 2], [Side 3]}) = [Side 3] then
        [Side 3] < [Side 2] + [Side 1]
      else
        null
  )[[Triangle]]
in
  #"Filtered Rows"
Power Query solution 5 for Triangle Side Validation, proposed by Antriksh Sharma:
let
  Source = DataSource, 
  AddedCustom = Table.AddColumn(
    Source, 
    "Custom", 
    (CurrentRow) =>
      let
        TriangleValues = Record.ToList(Record.RemoveFields(CurrentRow, "Triangle")), 
        Result = List.AllTrue(
          List.Transform(
            TriangleValues, 
            (CurrentValue) =>
              CurrentValue < List.Sum(List.RemoveItems(TriangleValues, {CurrentValue}))
          )
        )
      in
        Result, 
    Logical.Type
  ), 
  FilteredRows = Table.SelectRows(AddedCustom, each ([Custom] = true))
in
  FilteredRows
Power Query solution 6 for Triangle Side Validation, proposed by Venkata Rajesh:
let
  Source = Source, 
  #"Changed Type" = Table.TransformColumnTypes(
    Source, 
    {
      {"Triangle", type text}, 
      {"Side 1", Int64.Type}, 
      {"Side 2", Int64.Type}, 
      {"Side 3", Int64.Type}
    }
  ), 
  #"Added Custom" = Table.SelectRows(
    Table.AddColumn(
      #"Changed Type", 
      "Custom", 
      each [Side 1]
        + [Side 2] > [Side 3] and [Side 2]
        + [Side 3] > [Side 1] and [Side 1]
        + [Side 3] > [Side 2]
    ), 
    each [Custom] = true
  )[Triangle]
in
  #"Added Custom"
Power Query solution 7 for Triangle Side Validation, proposed by Sergei Baklan:
let
  Source = Excel.CurrentWorkbook(){[Name = "data"]}[Content], 
  #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars = true]), 
  Triangle = Table.SelectColumns(
    Table.SelectRows(
      #"Promoted Headers", 
      (_) => [a = List.LastN(Record.FieldValues(_), 3), b = List.Max(a) / List.Sum(a) < 0.5][b]
    ), 
    Table.ColumnNames(#"Promoted Headers"){0}
  )
in
  Triangle
Power Query solution 8 for Triangle Side Validation, proposed by Matthew Braun:
Power BI - M Code 
#"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Triangle", type text}, {"Side 1", Int64.Type}, {"Side 2", Int64.Type}, {"Side 3", Int64.Type}}),
 #"Added Custom" = Table.AddColumn(#"Changed Type1", "Custom", each if ([Side 1]+[Side 2] > [Side 3]) 
and ([Side 2]+[Side 3] > [Side 1]) 
and ([Side 1]+[Side 3] > [Side 2]) then 1
else 0),
 #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = 1))
in
 #"Filtered Rows"
                    
                  

Solving the challenge of Triangle Side Validation with Excel

Excel solution 1 for Triangle Side Validation, proposed by Rick Rothstein:
=FILTER(A2:A10,BYROW(B2:D10,LAMBDA(x,2*MAX(x)
Excel solution 2 for Triangle Side Validation, proposed by محمد حلمي:
=FILTER(A2:A10;BYROW(B2:D10;LAMBDA(a;SUM(LARGE(a;{2;3}))>MAX(a))))
Excel solution 3 for Triangle Side Validation, proposed by محمد حلمي:
=LET(b;B2:B10;c;C2:C10;d;D2:D10;FILTER(A2:A10;(b+c>d)*(c+d>b)*(d+b>c)))
Excel solution 4 for Triangle Side Validation, proposed by Julian Poeltl:
=FILTER(A2:A10,BYROW(B2:D10,LAMBDA(A,MAX(A)
Excel solution 5 for Triangle Side Validation, proposed by Aditya Kumar Darak 🇮🇳:
= FILTER(
 CHOOSECOLS(data, 1),
 BYROW(
 CHOOSECOLS(data, 2, 3, 4),
 LAMBDA(a, SUM(SMALL(a, {1,2})) > MAX(a))))
Excel solution 6 for Triangle Side Validation, proposed by Timothée BLIOT:
=LET(array,BYROW(B2:D10,LAMBDA(r,
IF(SUM(INDEX(r,1),INDEX(r,2))>INDEX(r,3),
IF(SUM(INDEX(r,2),INDEX(r,3))>INDEX(r,1),
IF(SUM(INDEX(r,1),INDEX(r,3))>INDEX(r,2),
OFFSET(INDEX(r,1),,-1),""),""),"")
)),FILTER(array,array<>""))
Excel solution 7 for Triangle Side Validation, proposed by Abdallah Ally:
=INDEX(FILTER(A2:D10,(B2:B10+C2:C10>D2:D10)*(C2:C10+D2:D10>B2:B10)*(D2:D10+B2:B10>C2:C10)),,1)
Excel solution 8 for Triangle Side Validation, proposed by Bhavya Gupta:
=FILTER(TAKE(Rng,,1), BYROW(DROP(Rng,,1), LAMBDA(x, MEDIAN(x) > MAX(x) - MIN(x))))
Excel solution 9 for Triangle Side Validation, proposed by Charles Roldan:
=LAMBDA(Data, LET(body, DROP(Data, 1), labels, TAKE(body, , 1), sides, DROP(body, , 1), 
isTriangle, LAMBDA(a, SUM(a) > 2 * MAX(a)), 
FILTER(labels, BYROW(sides, isTriangle))))(A1:D10)
Excel solution 10 for Triangle Side Validation, proposed by Peter Bartholomew:
= s(s-a)(s-b)(s-c)
giving
= FILTER(triangle,
 BYROW(sides, LAMBDA(d, LET(
 s, SUM(d)/2,
 A², PRODUCT(s, s-d),
 A²>0 )))
 )
Excel solution 11 for Triangle Side Validation, proposed by Jardiel Euflázio:
=FILTER(

A2:A10,

IF(B2:B10+C2:C10>D2:D10,
IF(C2:C10+D2:D10>B2:B10,
IF(B2:B10+D2:D10>C2:C10,1

)
)
)
)
Excel solution 12 for Triangle Side Validation, proposed by Jardiel Euflázio:
=LET(
a,B2:B10,
b,C2:C10,
c,D2:D10,
d,A2:A10,

TEXTSPLIT(
 TEXTJOIN(
 "-",
 ,
 IF(
 (a+b>c)*(b+c>a)*(a+c>b),
 d,
 ""
 )
 ),
 ,
 "-"
 )

)
Excel solution 13 for Triangle Side Validation, proposed by Jardiel Euflázio:
=FILTER(

A2:A10,

(B2:B10+C2:C10>D2:D10)*
(C2:C10+D2:D10>B2:B10)*
(B2:B10+D2:D10>C2:C10)

)
Excel solution 14 for Triangle Side Validation, proposed by Jardiel Euflázio:
=FILTER(
A2:A10,

MAP(
B2:B10,
C2:C10,
D2:D10,

LAMBDA(
a,b,c,AND(a+b>c,a+c>b,b+c>a)

)

)

)
Excel solution 15 for Triangle Side Validation, proposed by Sergei Baklan:
=FILTER( A2:A10, BYROW(B2:D10, LAMBDA(v, MAX(v/SUM(v) ) < 0.5 ) ) )
Excel solution 16 for Triangle Side Validation, proposed by Cary Ballard, DML:
=FILTER(
 A2:A10,
 MAP(B2:B10, C2:C10, D2:D10, LAMBDA(a, b, c, AND(a + b > c, a + c > b, b + c > a)))
)
Excel solution 17 for Triangle Side Validation, proposed by Juliano Santos Lima:
=FILTER(A2:A10,((B2:B10+C2:C10>D2:D10)*(C2:C10+D2:D10>B2:B10)*(D2:D10+B2:B10>C2:C10))*ROW(A2:A10)>0)
Excel solution 18 for Triangle Side Validation, proposed by Tyler N.:
=UNIQUE(FILTER(A2:A10;(B2:B10+C2:C10>D2:D10)*(C2:C10+D2:D10>B2:B10)*(D2:D10+B2:B10>C2:C10)))
Excel solution 19 for Triangle Side Validation, proposed by Nazmul Islam Jobair:
=LET(
_names,A2:A10,
_side1,B2:B10,
_side2,C2:C10,
_side3,D2:D10,
_condition,(_side1+_side2>_side3)*(_side1+_side3>_side2)*(_side2+_side3>_side1),
FILTER(_names,_condition)
)
Excel solution 20 for Triangle Side Validation, proposed by Charalampos Dimitrakopoulos:
=FILTER(Table1[Triangle],((Table1[Side 1]+Table1[Side 2])>Table1[Side 3])*((Table1[Side 1]+Table1[Side 3])>Table1[Side 2])*((Table1[Side 3]+Table1[Side 2])>Table1[Side 1]))
Excel solution 21 for Triangle Side Validation, proposed by Apostolos Goulandris:
=FILTER(A2:A10, BYROW(B2:D10,LAMBDA(a,SUM(SMALL(a,{1,2}))>MAX(a))) )

Solving the challenge of Triangle Side Validation with Python in Excel

Python in Excel solution 1 for Triangle Side Validation, proposed by Aditya Kumar Darak 🇮🇳:
df = xl("A1:D10", True)
result = df[df.apply(lambda x: sum(sorted(x[1:])[0:2]) > max(x[1:]), 1)][
 "Triangle"
].reset_index(drop=True)
result
                    
                  

Solving the challenge of Triangle Side Validation with DAX

DAX solution 1 for Triangle Side Validation, proposed by Zoran Milokanović:
EVALUATE
SELECTCOLUMNS(
 FILTER(Input,
 VAR A = Input[Side 1]
 VAR B = Input[Side 2]
 VAR C = Input[Side 3]
 RETURN
 A + B > C &&
 B + C > A &&
 C + A > B
 ),
 "Answer Expected",
 Input[Triangle]
)
                    
                  

Leave a Reply