fork(1) download
  1. /++
  2.  + Generic programming v2.0 in the style DR
  3. +/
  4.  
  5. auto ref findPos(T1, T2)(T1 required_element, T2 array) {
  6. import std.variant;
  7.  
  8. foreach (i, e; array)
  9. if (required_element == e) {
  10. return Variant(i);
  11. }
  12.  
  13. return Variant(-1);
  14. }
  15.  
  16. T foo(T)(uint idx, uint takeLazyN, T arr) {
  17. import std.range;
  18.  
  19. return arr[idx .. $].take(takeLazyN);
  20. }
  21.  
  22. void main() {
  23. import std.stdio, std.conv, std.range, std.algorithm, std.ascii, std.string, std.functional;
  24.  
  25. auto a = iota(0, 16).array;
  26. auto s = lowercase.array;
  27.  
  28. assert(equal(a, [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 ]));
  29. assert(equal(s, "abcdefghijklmnopqrstuvwxyz"));
  30.  
  31. auto tmpStart = findPos(3, a).toString;
  32.  
  33. alias checkFindFail = unaryFun!`a == "-1"`;
  34.  
  35. if (checkFindFail(tmpStart)) {
  36. writeln("Fuck!");
  37. return;
  38. }
  39.  
  40. auto start = tmpStart.to!uint;
  41. auto end = 10u;
  42.  
  43. writeln(foo(start, end, a));
  44.  
  45. tmpStart = findPos('d', s).toString;
  46.  
  47. if (checkFindFail(tmpStart)) {
  48. writeln("Fuck!");
  49. return;
  50. }
  51.  
  52. start = tmpStart.to!uint;
  53.  
  54. writeln(foo(start, end, s));
  55. }
Success #stdin #stdout 0s 3820KB
stdin
Standard input is empty
stdout
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
defghijklm