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]
)
