core1[l_, p_] := MapThread[l~Take~{##} &, {{0}~Join~Most@p + 1, p}]
core2[l_, p_] := MapThread[l[[# ;; #2]] &, {{0}~Join~Most@p + 1, p}]
core3[l_, p_] := Inner[l~Take~{##} &, {0}~Join~Most@p + 1, p, List]
core4[l_, p_] := Inner[l[[# ;; #2]] &, {0}~Join~Most@p + 1, p, List]
list = Range@1*^7~Append~"x";
pt = Accumulate@RandomInteger[999, 15000];
First@Timing@Do[#[list, pt], {20}] & /@ {core1, core2, core3, core4}
First@Timing@Do[#[list, pt], {20}] & /@ {core4, core3, core2, core1}