aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-207/deadmarshal/cpp/ch-1.cpp33
-rw-r--r--challenge-207/deadmarshal/cpp/ch-2.cpp22
-rw-r--r--challenge-207/deadmarshal/d/ch1.d28
-rw-r--r--challenge-207/deadmarshal/d/ch2.d20
-rw-r--r--challenge-207/deadmarshal/modula-3/ch1/src/Ch1.m347
-rw-r--r--challenge-207/deadmarshal/modula-3/ch1/src/m3makefile4
-rw-r--r--challenge-207/deadmarshal/modula-3/ch2/src/Ch2.m320
-rw-r--r--challenge-207/deadmarshal/modula-3/ch2/src/m3makefile4
-rw-r--r--challenge-207/deadmarshal/nim/ch1.nim18
-rw-r--r--challenge-207/deadmarshal/nim/ch2.nim7
-rw-r--r--challenge-207/deadmarshal/oberon/Ch1.Mod54
-rw-r--r--challenge-207/deadmarshal/oberon/Ch2.Mod28
-rw-r--r--challenge-207/deadmarshal/pascal/ch1.pas46
-rw-r--r--challenge-207/deadmarshal/pascal/ch2.pas20
-rw-r--r--challenge-207/deadmarshal/perl/ch-1.pl25
-rw-r--r--challenge-207/deadmarshal/perl/ch-2.pl12
-rw-r--r--challenge-207/deadmarshal/raku/ch-1.raku23
-rw-r--r--challenge-207/deadmarshal/raku/ch-2.raku12
18 files changed, 423 insertions, 0 deletions
diff --git a/challenge-207/deadmarshal/cpp/ch-1.cpp b/challenge-207/deadmarshal/cpp/ch-1.cpp
new file mode 100644
index 0000000000..e778f5824b
--- /dev/null
+++ b/challenge-207/deadmarshal/cpp/ch-1.cpp
@@ -0,0 +1,33 @@
+#include<iostream>
+#include<string>
+#include<vector>
+#include<algorithm>
+
+bool all_match(const std::string &s1, const std::string &s2)
+{
+ for(auto &c : s1) if(s2.find(c) == std::string::npos) return false;
+ return true;
+}
+
+void keyboard_word(std::vector<std::string> &vec)
+{
+ const std::vector<std::string>
+ qwerty{"qwertyuiop","asdfghjkl","zxcvbnm"};
+ for(auto &s : vec)
+ std::transform(s.begin(),s.end(),s.begin(),
+ [](unsigned char c){return std::tolower(c);});
+ for(const auto &q : qwerty)
+ for(const auto &s : vec)
+ if(all_match(s,q)) std::cout << s << ' ';
+ std::cout << '\n';
+}
+
+int main()
+{
+ std::vector<std::string> vec1{"Hello","Alaska","Dad","Peace"},
+ vec2{"OMG","Bye"};
+ keyboard_word(vec1);
+ keyboard_word(vec2);
+ return 0;
+}
+
diff --git a/challenge-207/deadmarshal/cpp/ch-2.cpp b/challenge-207/deadmarshal/cpp/ch-2.cpp
new file mode 100644
index 0000000000..6af3160443
--- /dev/null
+++ b/challenge-207/deadmarshal/cpp/ch-2.cpp
@@ -0,0 +1,22 @@
+#include<iostream>
+#include<vector>
+
+int h_index(const std::vector<int> &vec)
+{
+ int ret{};
+ for(int i = 0; i < vec.size(); ++i)
+ if(i >= vec[i])
+ {
+ ret = i;
+ break;
+ }
+ return ret;
+}
+
+int main()
+{
+ std::cout << h_index({10,8,5,4,3}) << '\n';
+ std::cout << h_index({25,8,5,3,3}) << '\n';
+ return 0;
+}
+
diff --git a/challenge-207/deadmarshal/d/ch1.d b/challenge-207/deadmarshal/d/ch1.d
new file mode 100644
index 0000000000..af05e1ba16
--- /dev/null
+++ b/challenge-207/deadmarshal/d/ch1.d
@@ -0,0 +1,28 @@
+import std.stdio:writeln,write;
+import std.uni:toLower;
+import std.algorithm:map,all,canFind;
+import std.array:array;
+
+bool all_match(ref string s1, ref string s2)
+{
+ foreach(ref c;s1) if(!canFind(s2,c)) return false;
+ return true;
+}
+
+void keyboard_word(ref string[] words)
+{
+ string[] qwerty = ["qwertyuiop","asdfghjkl","zxcvbnm"];
+ words = words.map!(toLower).array;
+ foreach(ref q;qwerty)
+ foreach(ref w;words) if(all_match(w,q)) write(w,' ');
+ writeln;
+}
+
+void main()
+{
+ string[] words1 = ["Hello","Alaska","Dad","Peace"];
+ string[] words2 = ["OMG","Bye"];
+ keyboard_word(words1);
+ keyboard_word(words2);
+}
+
diff --git a/challenge-207/deadmarshal/d/ch2.d b/challenge-207/deadmarshal/d/ch2.d
new file mode 100644
index 0000000000..3dc2974bad
--- /dev/null
+++ b/challenge-207/deadmarshal/d/ch2.d
@@ -0,0 +1,20 @@
+import std.stdio:writeln;
+
+int h_index(int[] arr)
+{
+ int ret = 0;
+ for(int i = 0; i < arr.length; ++i)
+ if(i >= arr[i])
+ {
+ ret = i;
+ break;
+ }
+ return ret;
+}
+
+void main()
+{
+ writeln(h_index([10,8,5,4,3]));
+ writeln(h_index([25,8,5,3,3]));
+}
+
diff --git a/challenge-207/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-207/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..04ba90c5ef
--- /dev/null
+++ b/challenge-207/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,47 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT IO,Text,ASCII;
+
+VAR
+ A1:ARRAY[0..3] OF TEXT := ARRAY OF TEXT{"Hello","Alaska","Dad","Peace"};
+ A2:ARRAY[0..1] OF TEXT := ARRAY OF TEXT{"OMG","Bye"};
+
+PROCEDURE Lower(text:TEXT):TEXT =
+ VAR
+ Res:TEXT := "";
+ BEGIN
+ FOR I := 0 TO Text.Length(text)-1 DO
+ Res := Text.Cat(Res, Text.FromChar(ASCII.Lower[Text.GetChar(text, I)]));
+ END;
+ RETURN Res;
+ END Lower;
+
+PROCEDURE AllMatch(VAR text:TEXT;VAR S:SET OF CHAR):BOOLEAN =
+ BEGIN
+ FOR I := 0 TO Text.Length(text)-1 DO
+ IF NOT Text.GetChar(text,I) IN S THEN RETURN FALSE END
+ END;
+ RETURN TRUE;
+ END AllMatch;
+
+PROCEDURE KeyboardWord(VAR A:ARRAY OF TEXT) =
+VAR
+ S1:SET OF CHAR := SET OF CHAR{'q','w','e','r','t','y','u','i','o','p'};
+ S2:SET OF CHAR := SET OF CHAR{'a','s','d','f','g','h','j','k','l'};
+ S3:SET OF CHAR := SET OF CHAR{'z','x','c','v','b','n','m'};
+BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO A[I] := Lower(A[I]) END;
+ FOR I := FIRST(A) TO LAST(A) DO
+ IF AllMatch(A[I],S1) OR AllMatch(A[I],S2) OR AllMatch(A[I],S3) THEN
+ IO.Put(A[I]);
+ IO.PutChar(' ')
+ END
+ END;
+ IO.Put("\n");
+END KeyboardWord;
+
+BEGIN
+ KeyboardWord(A1);
+ KeyboardWord(A2);
+END Ch1.
+
diff --git a/challenge-207/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-207/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..0ee72d695b
--- /dev/null
+++ b/challenge-207/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-207/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-207/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..62f84618e9
--- /dev/null
+++ b/challenge-207/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,20 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT IO;
+
+VAR
+ A1:ARRAY[0..4] OF INTEGER := ARRAY OF INTEGER{10,8,5,4,3};
+ A2:ARRAY[0..4] OF INTEGER := ARRAY OF INTEGER{25,8,5,3,3};
+
+PROCEDURE HIndex(VAR A:ARRAY OF INTEGER):INTEGER =
+ BEGIN
+ FOR I := FIRST(A) TO LAST(A) DO
+ IF I >= A[I] THEN RETURN I END
+ END;
+ END HIndex;
+
+BEGIN
+ IO.PutInt(HIndex(A1)); IO.Put("\n");
+ IO.PutInt(HIndex(A2)); IO.Put("\n");
+END Ch2.
+
diff --git a/challenge-207/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-207/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..5c32bbc4bb
--- /dev/null
+++ b/challenge-207/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,4 @@
+import("libm3")
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-207/deadmarshal/nim/ch1.nim b/challenge-207/deadmarshal/nim/ch1.nim
new file mode 100644
index 0000000000..6ba9eaf314
--- /dev/null
+++ b/challenge-207/deadmarshal/nim/ch1.nim
@@ -0,0 +1,18 @@
+import std/[strutils]
+
+proc keyboardWord(strseq:var seq[string]):seq[string] =
+ var
+ s1:set[char] = {'q','w','e','r','t','y','u','i','o','p'}
+ s2:set[char] = {'a','s','d','f','g','h','j','k','l'}
+ s3:set[char] = {'z','x','c','v','b','n','m'}
+ for s in strseq.mitems: s = toLowerAscii(s)
+ for myset in [s1,s2,s3]:
+ for s in strseq:
+ if allCharsInSet(s,myset): result.add(s)
+var
+ s1:seq[string] = @["Hello","Alaska","Dad","Peace"]
+ s2:seq[string] = @["OMG","Bye"]
+
+echo keyboardWord(s1)
+echo keyboardWord(s2)
+
diff --git a/challenge-207/deadmarshal/nim/ch2.nim b/challenge-207/deadmarshal/nim/ch2.nim
new file mode 100644
index 0000000000..b570160249
--- /dev/null
+++ b/challenge-207/deadmarshal/nim/ch2.nim
@@ -0,0 +1,7 @@
+proc hIndex(s:seq[int]):int =
+ for i in 0..<s.len:
+ if i >= s[i]: return i
+
+echo hIndex(@[10,8,5,4,3])
+echo hIndex(@[25,8,5,3,3])
+
diff --git a/challenge-207/deadmarshal/oberon/Ch1.Mod b/challenge-207/deadmarshal/oberon/Ch1.Mod
new file mode 100644
index 0000000000..1928ee8074
--- /dev/null
+++ b/challenge-207/deadmarshal/oberon/Ch1.Mod
@@ -0,0 +1,54 @@
+MODULE Ch1;
+
+ IMPORT Out,Strings,ethStrings;
+
+ TYPE
+ PArr = POINTER TO ARRAY OF ARRAY OF CHAR;
+
+ VAR
+ A1,A2:PArr;
+
+ PROCEDURE Init;
+ BEGIN
+ NEW(A1,4,7); NEW(A2,2,4);
+ COPY("Hello",A1[0]); COPY("Alaska",A1[1]); COPY("Dad",A1[2]);
+ COPY("Peace",A1[3]);
+ COPY("OMG",A2[0]); COPY("Bye",A2[1]);
+ END Init;
+
+ PROCEDURE AllMatch(Haystack,Needle:ARRAY OF CHAR):BOOLEAN;
+ VAR
+ i:LONGINT;
+ s:ARRAY 2 OF CHAR;
+ BEGIN
+ s[1] := 0X;
+ FOR i := 0 TO Strings.Length(Needle) DO
+ s[0] := Needle[i];
+ IF Strings.Pos(s,Haystack,0) = -1 THEN RETURN FALSE END
+ END;
+ RETURN TRUE
+ END AllMatch;
+
+ PROCEDURE KeyboardWord(VAR A:PArr);
+ VAR
+ i,j:LONGINT;
+ qwerty:ARRAY 3,10 OF CHAR;
+ BEGIN
+ COPY("qwertyuiop",qwerty[0]);
+ COPY("asdfghjkl",qwerty[1]);
+ COPY("zxcvbnm",qwerty[2]);
+ FOR i := 0 TO LEN(A^)-1 DO ethStrings.Lower(A[i],A[i]) END;
+ FOR i := 0 TO LEN(qwerty)-1 DO
+ FOR j := 0 TO LEN(A^)-1 DO
+ IF AllMatch(qwerty[i],A[j]) THEN Out.String(A[j]); Out.Char(' ') END
+ END
+ END;
+ Out.Ln
+ END KeyboardWord;
+
+BEGIN
+ Init;
+ KeyboardWord(A1);
+ KeyboardWord(A2);
+END Ch1.
+
diff --git a/challenge-207/deadmarshal/oberon/Ch2.Mod b/challenge-207/deadmarshal/oberon/Ch2.Mod
new file mode 100644
index 0000000000..91ac5e1200
--- /dev/null
+++ b/challenge-207/deadmarshal/oberon/Ch2.Mod
@@ -0,0 +1,28 @@
+MODULE Ch2;
+
+ IMPORT Out;
+
+ VAR
+ A1,A2:ARRAY 5 OF INTEGER;
+
+ PROCEDURE Init;
+ BEGIN
+ A1[0] := 10; A1[1] := 8; A1[2] := 5; A1[3] := 4; A1[4] := 3;
+ A2[0] := 25; A2[1] := 8; A2[2] := 5; A2[3] := 3; A2[4] := 3;
+ END Init;
+
+ PROCEDURE HIndex(VAR A:ARRAY OF INTEGER):INTEGER;
+ VAR
+ i:LONGINT;
+ BEGIN
+ FOR i := 0 TO LEN(A)-1 DO
+ IF i >= A[i] THEN RETURN SHORT(i) END
+ END;
+ END HIndex;
+
+BEGIN
+ Init;
+ Out.Int(HIndex(A1),0); Out.Ln;
+ Out.Int(HIndex(A2),0); Out.Ln;
+END Ch2.
+
diff --git a/challenge-207/deadmarshal/pascal/ch1.pas b/challenge-207/deadmarshal/pascal/ch1.pas
new file mode 100644
index 0000000000..843d231a23
--- /dev/null
+++ b/challenge-207/deadmarshal/pascal/ch1.pas
@@ -0,0 +1,46 @@
+program Ch1;
+
+{$mode objfpc}
+
+uses
+ SysUtils,StrUtils,Types,GVector;
+
+type
+ TVec = specialize TVector<AnsiString>;
+
+var
+ I:Integer;
+ A1:TStringDynArray = ('Hello','Alaska','Dad','Peace');
+ A2:TStringDynArray = ('ONG','Bye');
+ Res1,Res2:TVec;
+
+function AllMatch(Needle,Haystack:AnsiString):Boolean;
+var
+ I:Integer;
+begin
+ for I := Low(Needle) to High(Needle) do
+ if FindPart(Needle[I],Haystack) = 0 then Exit(False);
+ Exit(True);
+end;
+
+function KeyboardWord(var Arr:TStringDynArray):TVec;
+var
+ I,J:Integer;
+ Qwerty:TStringDynArray = ('qwertyuiop','asdfghjkl','zxcvbnm');
+begin
+ Result := TVec.Create;
+ for I := Low(Arr) to High(Arr) do Arr[I] := LowerCase(Arr[I]);
+ for I := Low(Qwerty) to High(Qwerty) do
+ for J := Low(Arr) to High(Arr) do
+ if AllMatch(Arr[J],Qwerty[I]) then Result.PushBack(Arr[J]);
+end;
+
+begin
+ Res1 := KeyboardWord(A1);
+ Res2 := KeyboardWord(A2);
+ for I := 0 to Pred(Res1.Size) do Write(Res1[I],' '); WriteLn;
+ for I := 0 to Pred(Res2.Size) do Write(Res2[I],' '); WriteLn;
+ FreeAndNil(Res1);
+ FreeAndNil(Res2);
+end.
+
diff --git a/challenge-207/deadmarshal/pascal/ch2.pas b/challenge-207/deadmarshal/pascal/ch2.pas
new file mode 100644
index 0000000000..8f54f5ea5a
--- /dev/null
+++ b/challenge-207/deadmarshal/pascal/ch2.pas
@@ -0,0 +1,20 @@
+program Ch2;
+
+{$mode objfpc}
+
+uses
+ SysUtils,Types;
+
+function HIndex(A:TIntegerDynArray):Integer;
+var
+ I:Integer;
+begin
+ for I := Low(A) to High(A) do
+ if(I >= A[I]) then Exit(I);
+end;
+
+begin
+ WriteLn(HIndex([10,8,5,4,3]));
+ WriteLn(HIndex([25,8,5,3,3]));
+end.
+
diff --git a/challenge-207/deadmarshal/perl/ch-1.pl b/challenge-207/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..d0ee6bae07
--- /dev/null
+++ b/challenge-207/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,25 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use List::Util qw(all);
+use Set::Scalar;
+
+sub keyboard_word{
+ my ($arr) = @_;
+ my ($s1,$s2,$s3) = (Set::Scalar->new(split '',"qwertyuiop"),
+ Set::Scalar->new(split '',"asdfghjkl"),
+ Set::Scalar->new(split '',"zxcvbnm"));
+ my @ret;
+ @$arr = map {lc} @$arr;
+ foreach my $str(@$arr){
+ foreach my $set($s1,$s2,$s3){
+ if(all {$set->has($_)} split '',$str){push @ret,$str}
+ }
+ }
+ @ret;
+}
+
+printf "(%s)\n", join ' ',
+ keyboard_word(["Hello","Alaska","Dad","Peace"]);
+printf "(%s)\n", join ' ', keyboard_word(["OMG","Bye"]);
+
diff --git a/challenge-207/deadmarshal/perl/ch-2.pl b/challenge-207/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..5308581fb1
--- /dev/null
+++ b/challenge-207/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub h_index{
+ my ($arr) = @_;
+ map {return $_ if $_ >= $arr->[$_]} 0..$#$arr;
+}
+
+printf "%d\n", h_index([10,8,5,4,3]);
+printf "%d\n", h_index([25,8,5,3,3]);
+
diff --git a/challenge-207/deadmarshal/raku/ch-1.raku b/challenge-207/deadmarshal/raku/ch-1.raku
new file mode 100644
index 0000000000..e0a42c599b
--- /dev/null
+++ b/challenge-207/deadmarshal/raku/ch-1.raku
@@ -0,0 +1,23 @@
+#!/usr/bin/env raku
+
+sub keyboard-word(@arr)
+{
+ my $s1 = set <q w e r t y y u i o p>;
+ my $s2 = set <a s d f g h j k l>;
+ my $s3 = set <z x c v b n m>;
+ my @ret;
+ @arr = @arr.lc;
+ for @arr -> $str {
+ my @chars = $str.comb;
+ for ($s1,$s2,$s3) -> $set {
+ if (so $set{$_} == @chars.all) {
+ @ret.push: $str;
+ }
+ }
+ }
+ @ret;
+}
+
+say keyboard-word(["Hello","Alaska","Dad","Peace"]);
+say keyboard-word(["OMG","Bye"]);
+
diff --git a/challenge-207/deadmarshal/raku/ch-2.raku b/challenge-207/deadmarshal/raku/ch-2.raku
new file mode 100644
index 0000000000..15b6e87410
--- /dev/null
+++ b/challenge-207/deadmarshal/raku/ch-2.raku
@@ -0,0 +1,12 @@
+#!/usr/bin/env raku
+
+sub h-index(@arr)
+{
+ for 0..@arr.end -> $i {
+ return $i if $i >= @arr[$i];
+ }
+}
+
+say h-index([10,8,5,4,3]);
+say h-index([25,8,5,3,3]);
+