List all the numbers where all succeeding numbers are larger than the number. Ex. 3, 7, 6, 9 First is 3 – succeeding numbers are 7, 6, 9 and all are > 3 Second is 7 – succeeding numbers are 6, 9 and 6 is < 7. Hence, excluded. Third is 6 – succeeding number is 9 which is > 6. Fourth is 9 – There is no succeeding number. Hence excluded. Hence, answer is 3, 6.
📌 Challenge Details and Links
ExcelBI Excel Challenge Number: 379
Challenge Difficulty: ⭐️
📥Download Sample File
📥Link to the solutions on LinkedIn
Solving the challenge of Numbers With Larger Successors with Power Query
Power Query solution 1 for Numbers With Larger Successors, proposed by Alejandro Simón 🇵🇦 🇪🇸:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Sol = Table.AddColumn(
Source,
"Answer",
each
let
a = Text.Split([Numbers], ", "),
b = List.Transform(a, Number.From),
c = List.Transform(
{0 .. List.Count(b) - 2},
each
let
a1 = List.RemoveFirstN(b, _),
b1 = {a1{0}, List.AllTrue(List.Transform(List.Skip(a1), each a1{0} < _))}
in
b1
),
d = List.Select(c, each _{1}),
e = Text.Combine(List.Transform(d, each Text.From(_{0})), ", ")
in
e
)[[Answer]]
in
Sol
Power Query solution 2 for Numbers With Larger Successors, proposed by Luan Rodrigues:
let
Fonte = Tabela1,
res = Table.AddColumn(
Fonte,
"Personalizar",
each
let
a = List.Transform(Text.Split([Numbers], ", "), Number.From),
b = List.Reverse(
List.Transform({1 .. List.Count(a)}, (x) => List.RemoveFirstN(List.LastN(a, x)))
),
c = List.Transform(List.Zip({a, b}), (x) => {x{0}} & {List.Transform(x{1}, each _ > x{0})}),
d = List.Select(c, (x) => List.AllTrue(x{1}) and List.Count(x{1}) <> 0),
e = Text.Combine(List.Transform(d, each Text.From(_{0})), ", ")
in
e
)
in
res
Power Query solution 3 for Numbers With Larger Successors, proposed by Ramiro Ayala Chávez:
let
Origen = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
Fx = (x) =>
let
a = Text.Split(x, ", "),
b = List.Transform(a, Number.From),
c = List.Generate(
() => [i = 0, j = 1],
each [i] < List.Count(b),
each [i = [i] + 1, j = [j] + 1],
each {b{[i]}} & List.Range(b, [j])
),
d = List.Transform(c, each if List.First(_) = List.Min(_) then List.First(_) else null),
e = List.RemoveNulls(List.RemoveLastN(List.Distinct(d))),
f = Text.Combine(List.Transform(e, Text.From), ", ")
in
f,
Sol = Table.AddColumn(Origen, "Answer Expected", each Fx([Numbers]))
in
Sol
Power Query solution 4 for Numbers With Larger Successors, proposed by Glyn Willis:
let
Source = Excel.CurrentWorkbook(){[Name = "Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(
Source,
{{"Numbers", type text}, {"Answer Expected", type any}}
),
#"Added Custom" = Table.AddColumn(
#"Changed Type",
"Custom",
each [
t = Text.Split([Numbers], ", "),
c = List.Count(t),
p = List.Positions(t),
g = Table.FromRows(List.Transform(p, (x) => {Int64.From(t{x}), x}), {"a", "b"}),
r = Table.AddColumn(
g,
"d",
(x) =>
let
a = List.Generate(
() => [i = x[b], a = x[a], b = Int64.From(t{i + 1}), e = a < b],
each [i] < c - 1,
each [i = [i] + 1, a = x[a], b = Int64.From(t{i + 1}), e = a < b],
each [e]
),
b = List.AllTrue(if List.IsEmpty(a) then {false} else a)
in
b
),
f = Text.Combine(
List.Transform(Table.SelectRows(r, (x) => x[d])[a], (x) => Text.From(x)),
", "
)
][f]
)
in
#"Added Custom"
Solving the challenge of Numbers With Larger Successors with Excel
Excel solution 1 for Numbers With Larger Successors, proposed by Bo Rydobon 🇹🇭:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
n,
--TEXTSPLIT(
a,
,
","
),
TEXTJOIN(
", ",
,
MAP(
DROP(
n,
-1
),
SEQUENCE(
ROWS(
n
)-1
),
LAMBDA(
m,
i,
REPT(
m,
AND(
m
Excel solution 2 for Numbers With Larger Successors, proposed by Rick Rothstein:
=MAP(
A2:A10,
LAMBDA(
z,
LET(
t,
0+TEXTSPLIT(
z,
", "
),
TEXTJOIN(
", ",
,
SCAN(
"",
SEQUENCE(
COUNT(
t
)-1
),
LAMBDA(
a,
x,
IF(
AND(
INDEX(
t,
x
)
Excel solution 3 for Numbers With Larger Successors, proposed by John V.:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
n,
--TEXTSPLIT(
x,
,
","
),
TEXTJOIN(
", ",
,
MAP(
n,
SEQUENCE(
ROWS(
n
)
),
LAMBDA(
x,
y,
REPT(
x,
IFERROR(
AND(
x
Excel solution 4 for Numbers With Larger Successors, proposed by محمد حلمي:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
e,
--TEXTSPLIT(
a,
,
","
),
TEXTJOIN(
", ",
,
IFERROR(
MAP(
e,
SEQUENCE(
20
),
LAMBDA(
a,
d,
a/AND(
a
Excel solution 5 for Numbers With Larger Successors, proposed by محمد حلمي:
=MAP(A2:A10,LAMBDA(a,LET(r,--TEXTSPLIT(a,","),
e,TOCOL(r),i,ROWS(e),S,SEQUENCE(i),V,TOROW(S),
TEXTJOIN(", ",,IFERROR(r/
DROP(MMULT(V^0,(S>V)*(e>r))=i-V,,-1),"")))))
Excel solution 6 for Numbers With Larger Successors, proposed by Kris Jaganah:
=MAP(A2:A10,LAMBDA(y,LET(a,--TEXTSPLIT(y,,", "),b,ROWS(a),c,SEQUENCE(b,,b,-1),TEXTJOIN(", ",,TOCOL(BYROW(IFNA(IF(a
Excel solution 7 for Numbers With Larger Successors, proposed by Timothée BLIOT:
=MAP(A2:A10,
LAMBDA(z,
LET(A,
--TEXTSPLIT(
z,
,
", "
),
IFERROR(ARRAYTOTEXT (TOCOL(MAP(SEQUENCE(
ROWS(
A
)-1
),
LAMBDA(x,
IF(SUM(--(DROP(
A,
x
)> INDEX(
A,
x
)))=ROWS(
A
)-x,
INDEX(
A,
x
),
1/0))),
3)),
""))))
Excel solution 8 for Numbers With Larger Successors, proposed by Hussein SATOUR:
=IFERROR(
MAP(
A2:A10,
LAMBDA(
z,
LET(
a,
--TEXTSPLIT(
z,
,
", "
),
b,
DROP(
FILTER(
a,
MAP(
a,
SEQUENCE(
COUNT(
a
)
),
LAMBDA(
x,
y,
x = MIN(
DROP(
a,
y-1
)
)
)
)
),
-1
),
IF(
AND(
COUNT(
b
)>1,
COUNT(
UNIQUE(
b
)
)=1
),
"",
ARRAYTOTEXT(
b
)
)
)
)
),
""
)
Excel solution 9 for Numbers With Larger Successors, proposed by Sunny Baggu:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
_c,
TEXTSPLIT(
x,
,
", "
) + 0,
ARRAYTOTEXT(
FILTER(
_c,
IFERROR(
MAP(
SEQUENCE(
ROWS(
_c
)
),
LAMBDA(
a,
AND(
DROP(
INDEX(
TOROW(
_c
) > _c,
a,
),
,
a
)
)
)
),
0
),
""
)
)
)
)
)
Excel solution 10 for Numbers With Larger Successors, proposed by Sunny Baggu:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
_a,
TEXTSPLIT(
x,
,
", "
) + 0,
ARRAYTOTEXT(
FILTER(
_a,
DROP(
REDUCE(
"",
SEQUENCE(
ROWS(
_a
)
),
LAMBDA(
a,
v,
VSTACK(
a,
IFERROR(
AND(
INDEX(
_a,
v
) < DROP(
_a,
v
)
),
0
)
)
)
),
1
),
""
)
)
)
)
)
Excel solution 11 for Numbers With Larger Successors, proposed by LEONARD OCHEA 🇷🇴:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
n,
--TEXTSPLIT(
a,
,
", "
),
TEXTJOIN(
", ",
,
MAP(
SEQUENCE(
ROWS(
n
)-1
),
LAMBDA(
b,
& LET(
i,
INDEX(
n,
b
),
IF(
AND(
i
Excel solution 12 for Numbers With Larger Successors, proposed by Abdallah Ally:
=MAP(
A2:A10,
LAMBDA(
x,
LET(
a,
--TEXTSPLIT(
x,
", "
),
b,
REDUCE(
"",
SEQUENCE(
COUNT(
a
)-1
),
LAMBDA(
x,
y,
IF(
AND(
CHOOSECOLS(
a,
y
)
Excel solution 13 for Numbers With Larger Successors, proposed by 🇵🇪 Ned Navarrete C.:
=MAP(
A2:A10,
LAMBDA(
f,
LET(
a,
--TEXTSPLIT(
f,
,
", "
),
s,
SEQUENCE(
ROWS(
a
)-1
),
i,
INDEX(
a,
s
),
mi,
MAP(
s,
LAMBDA(
r,
MIN(
DROP(
a,
r
)
)
)
),
TEXTJOIN(
", ",
1,
REPT(
i,
i
Excel solution 14 for Numbers With Larger Successors, proposed by Asheesh Pahwa:
=LET(a,
X7:X13,
MAP(a,
LAMBDA(z,
LET(t,
--TEXTSPLIT(
z,
",
"
),
c,
DROP (REDUCE(
"",
SEQUENCE(
,
COLUMNS(
t
)
),
LAMBDA(
x,
y,
HSTACK(
x,
AND(
INDEX(
t,
,
y
)
Excel solution 15 for Numbers With Larger Successors, proposed by JvdV -:
=MAP(
A2:A10,
LAMBDA(
s,
TEXTJOIN(
", ",
,
DROP(
VSTACK(
"",
FILTERXML(
""&SUBSTITUTE(
s,
",",
""
)&" ",
"//s[not(following::*<=.)]"
)
),
-1
)
)
)
)
Excel solution 16 for Numbers With Larger Successors, proposed by Mihai Radu O:
= BYROW(
c,
LAMBDA(
x,
TAKE(
x,
,
1
)
)
)) *
(minim <> --TEXTAFTER(
a,
", ",
nr
)),
""
)
)
)
)
)
Excel solution 17 for Numbers With Larger Successors, proposed by Nicolas Micot:
=LET(_nombres;
FRACTIONNER.TEXTE(
A2;
;
", "
);
_seq;
SEQUENCE(
LIGNES(
_nombres
)-1
);
JOINDRE.TEXTE(", ";
VRAI;
FILTRE(CHOISIRLIGNES(
_nombres;
_seq
);
MAP(_seq;
LAMBDA(l_seq;
SOMME(--(EXCLURE(
_nombres;
l_seq
)-INDEX(
_nombres;
l_seq
)<=0))=0));
"")))
Excel solution 18 for Numbers With Larger Successors, proposed by Giorgi Goderdzishvili:
=MAP(A2:A10,
LAMBDA(x,
LET(
_nm,
--TEXTSPLIT(
x,
", "
),
_mp,
MAP(_nm,
SEQUENCE(
,
COLUMNS(
_nm
)
),
LAMBDA(x,
y,
IFERROR(SUM(--(x
Excel solution 19 for Numbers With Larger Successors, proposed by Edwin Tisnado:
=MAP(
A2:A10,
LAMBDA(
t,
LET(
a,
--TEXTSPLIT(
t,
,
","
),
s,
SEQUENCE(
COUNT(
a
)-1
),
TEXTJOIN(
", ",
,
MAP(
s,
LAMBDA(
x,
IF(
AND(
INDEX(
a,
x
)
Excel solution 20 for Numbers With Larger Successors, proposed by Anup Kumar:
=MAP(
A2:A10,
LAMBDA(
a,
LET(
nos,
--TEXTSPLIT(
a,
,
", "
),
gr,
SCAN(
FALSE,
SEQUENCE(
ROWS(
nos
)-1
),
LAMBDA(
x,
y,
AND(
INDEX(
nos,
y
)
Solving the challenge of Numbers With Larger Successors with Python
Python solution 1 for Numbers With Larger Successors, proposed by Giorgi Goderdzishvili:
for k in lst:
nw_ls = []
for i in range(len(k)-1):
if k[i]
Python solution 2 for Numbers With Larger Successors, proposed by Jan Willem Van Holst:
In Python:
import pandas as pd
import numpy as np
df= pd.read_csv(r"C:JWLENOVOPYTHONPQ challengesExcel_Challenge_379.csv", sep=',')
df = df.replace(np.nan, '')
Numbers=df[df.columns[0]].to_list()
UnpackNumbers = [[int(st) for st in elem.split(", ")] for elem in Numbers]
def fx(numbers):
result = []
for i in range(0,len(numbers)):
if np.all( np.array(numbers[i+1:])>numbers[i] ):
result.append(str(numbers[i]))
string = ', '.join(result[:-1])
return string
df['answer'] = [(fx(x)) for x in UnpackNumbers]
print(df)
Solving the challenge of Numbers With Larger Successors with R
R solution 1 for Numbers With Larger Successors, proposed by Konrad Gryczan, PhD:
library(tidyverse)
library(readxl)
input = read_excel("Excel/379 All Elements Larger than Preceding one.xlsx", range = "A1:A10")
test = read_excel("Excel/379 All Elements Larger than Preceding one.xlsx", range = "B1:B10")
check_succeeding <- function(numbers, index) {
current <- numbers[index]
succeeding <- numbers[(index + 1):length(numbers)]
all(succeeding > current)
}
process_string <- function(string) {
numbers <- str_split(string, ",\s*")[[1]] %>%
as.numeric()
result <- map_lgl(seq_along(numbers), ~check_succeeding(numbers, .)) %>%
which() %>%
map_chr(~ as.character(numbers[.])) %>%
paste(collapse = ", ")
result = ifelse(result == "", NA_character_, result)
return(result)
}
result = input %>%
mutate(`Answer Expected` = map_chr(Numbers, ~process_string(.x)))
&&
