aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordeadmarshal <adeadmarshal@gmail.com>2024-07-20 08:51:23 +0330
committerdeadmarshal <adeadmarshal@gmail.com>2024-07-20 08:51:23 +0330
commit83c26b915df95865c54062ab5c1a04a916ac217a (patch)
tree01babe5709ac5289c13853e20cc52a487e0e1347
parent1e7c50d9232dcc1ca985e29ba4860aaf13725056 (diff)
downloadperlweeklychallenge-club-83c26b915df95865c54062ab5c1a04a916ac217a.tar.gz
perlweeklychallenge-club-83c26b915df95865c54062ab5c1a04a916ac217a.tar.bz2
perlweeklychallenge-club-83c26b915df95865c54062ab5c1a04a916ac217a.zip
TWC278
-rw-r--r--challenge-278/deadmarshal/blog.txt1
-rw-r--r--challenge-278/deadmarshal/java/Ch1.java36
-rw-r--r--challenge-278/deadmarshal/java/Ch2.java20
-rw-r--r--challenge-278/deadmarshal/lua/ch-1.lua22
-rw-r--r--challenge-278/deadmarshal/lua/ch-2.lua16
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/Ch1.m397
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/Pair.ig20
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/Pair.mg48
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/m3makefile11
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.i32
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.m31
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.i32
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.m31
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.i32
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.m32
-rw-r--r--challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeqRep.i33
-rw-r--r--challenge-278/deadmarshal/modula-3/ch2/src/Ch2.m330
-rw-r--r--challenge-278/deadmarshal/modula-3/ch2/src/m3makefile6
-rw-r--r--challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.i31
-rw-r--r--challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.m31
-rw-r--r--challenge-278/deadmarshal/perl/ch-1.pl14
-rw-r--r--challenge-278/deadmarshal/perl/ch-2.pl12
-rw-r--r--challenge-278/deadmarshal/ruby/ch1.rb15
-rw-r--r--challenge-278/deadmarshal/ruby/ch2.rb15
24 files changed, 378 insertions, 0 deletions
diff --git a/challenge-278/deadmarshal/blog.txt b/challenge-278/deadmarshal/blog.txt
new file mode 100644
index 0000000000..990c8c8dc3
--- /dev/null
+++ b/challenge-278/deadmarshal/blog.txt
@@ -0,0 +1 @@
+https://deadmarshal.blogspot.com/2024/07/twc278.html
diff --git a/challenge-278/deadmarshal/java/Ch1.java b/challenge-278/deadmarshal/java/Ch1.java
new file mode 100644
index 0000000000..9715d94bc7
--- /dev/null
+++ b/challenge-278/deadmarshal/java/Ch1.java
@@ -0,0 +1,36 @@
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+public class Ch1 {
+ public static void main(String[] args) {
+ try {
+ System.out.println(sort_string("and2 Raku3 cousins5 Perl1 are4"));
+ System.out.println(sort_string("guest6 Python1 most4 the3 popular5 is2 " +
+ "language7"));
+ System.out.println(sort_string("Challenge3 The1 Weekly2"));
+ } catch (Exception e) {
+ System.err.println(e.getMessage());
+ }
+ }
+
+ private static String sort_string(String str) throws Exception {
+ Pattern pattern = Pattern.compile("(\\w+)(\\d+)");
+ Map<String, Integer> m = new HashMap<>();
+ for (String s : str.split(" ")) {
+ Matcher matcher = pattern.matcher(s);
+ if (matcher.find())
+ m.put(matcher.group(1), Integer.parseInt(matcher.group(2)));
+ else
+ throw new Exception("Wrong format!");
+ }
+ return m.entrySet()
+ .stream()
+ .sorted(Map.Entry.comparingByValue())
+ .map(Map.Entry::getKey)
+ .collect(Collectors.joining(" "));
+ }
+}
+
diff --git a/challenge-278/deadmarshal/java/Ch2.java b/challenge-278/deadmarshal/java/Ch2.java
new file mode 100644
index 0000000000..c8dde6453c
--- /dev/null
+++ b/challenge-278/deadmarshal/java/Ch2.java
@@ -0,0 +1,20 @@
+import java.util.Arrays;
+
+public class Ch2 {
+ public static void main(String[] args) {
+ System.out.println(reverse_string("challenge", 'e'));
+ System.out.println(reverse_string("programming", 'a'));
+ System.out.println(reverse_string("champion", 'b'));
+ }
+
+ private static String reverse_string(String str, char c) {
+ int idx = str.indexOf(c);
+ if (idx != -1) {
+ char[] arr = str.substring(0, idx + 1).toCharArray();
+ Arrays.sort(arr);
+ return String.valueOf(arr) + str.substring(idx);
+ }
+ return str;
+ }
+}
+
diff --git a/challenge-278/deadmarshal/lua/ch-1.lua b/challenge-278/deadmarshal/lua/ch-1.lua
new file mode 100644
index 0000000000..df34e13834
--- /dev/null
+++ b/challenge-278/deadmarshal/lua/ch-1.lua
@@ -0,0 +1,22 @@
+#!/usr/bin/env lua
+
+local function sort_by(t,f)
+ assert(type(t) == 'table','t must be a table!')
+ local keys = {}
+ for k in pairs(t) do keys[#keys+1] = k end
+ table.sort(keys,function(a,b) return f(t[a],t[b]) end)
+ return keys
+end
+
+local function sort_string(s)
+ assert(type(s) == 'string','s must be a string!')
+ local t = {}
+ for w in s:gmatch('%S+') do
+ for k,v in w:gmatch('(%a+)(%d+)') do t[k] = v end
+ end
+ return table.concat(sort_by(t,function(a,b) return a < b end),' ')
+end
+
+print(sort_string'and2 Raku3 cousins5 Perl1 are4')
+print(sort_string'guest6 Python1 most4 the3 popular5 is2 language7')
+print(sort_string'Challenge3 The1 Weekly2')
diff --git a/challenge-278/deadmarshal/lua/ch-2.lua b/challenge-278/deadmarshal/lua/ch-2.lua
new file mode 100644
index 0000000000..d368132923
--- /dev/null
+++ b/challenge-278/deadmarshal/lua/ch-2.lua
@@ -0,0 +1,16 @@
+#!/usr/bin/env lua
+
+local function reverse_string(s,e)
+ assert(type(s) == 'string' and
+ type(e) == 'string','s and e must be strings!')
+ local t,idx = {},string.find(s,e,1,true)
+ if idx == nil then return s end
+ for i=1,idx do t[#t+1] = s:sub(i,i) end
+ table.sort(t)
+ return table.concat(t,'') .. s:sub(idx+1,#s)
+end
+
+print(reverse_string('challenge','e'))
+print(reverse_string('programming','a'))
+print(reverse_string('champion','b'))
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/Ch1.m3 b/challenge-278/deadmarshal/modula-3/ch1/src/Ch1.m3
new file mode 100644
index 0000000000..0c26aa6617
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/Ch1.m3
@@ -0,0 +1,97 @@
+MODULE Ch1 EXPORTS Main;
+
+IMPORT SIO,Text,Scan,ASCII,FloatMode;
+IMPORT Lex,TextConv,Integer;
+IMPORT TextIntPair,TextIntPairArraySort;
+
+PROCEDURE ExtractAlphas(READONLY Str:TEXT):TEXT =
+ VAR Ret:TEXT := "";
+ BEGIN
+ FOR I := 0 TO Text.Length(Str)-1 DO
+ WITH C = Text.GetChar(Str,I) DO
+ IF C IN ASCII.Letters THEN
+ Ret := Ret & Text.FromChar(C)
+ END
+ END
+ END;
+ RETURN Ret
+ END ExtractAlphas;
+
+PROCEDURE ExtractDigits(READONLY Str:TEXT):INTEGER
+ RAISES{Lex.Error,FloatMode.Trap} =
+ VAR
+ Acc:TEXT := "";
+ Ret:INTEGER := 0;
+ BEGIN
+ FOR I := 0 TO Text.Length(Str)-1 DO
+ WITH C = Text.GetChar(Str,I) DO
+ IF C IN ASCII.Digits THEN
+ Acc := Acc & Text.FromChar(C)
+ END
+ END
+ END;
+ Ret := Scan.Int(Acc);
+ RETURN Ret
+ END ExtractDigits;
+
+PROCEDURE Compare(READONLY a,b:TextIntPair.T):[-1..1] =
+VAR
+ X:INTEGER := TextIntPair.Second(a);
+ Y:INTEGER := TextIntPair.Second(b);
+BEGIN
+ IF Integer.Compare(X,Y) < 0 THEN RETURN -1
+ ELSIF Integer.Compare(X,Y) > 0 THEN RETURN 1
+ ELSE RETURN 0
+ END;
+END Compare;
+
+PROCEDURE SortString(READONLY Str:TEXT):TEXT
+ RAISES{Lex.Error,FloatMode.Trap} =
+ VAR
+ Len:CARDINAL := TextConv.ExplodedSize(Str,SET OF CHAR{' '});
+ Words:REF ARRAY OF TEXT := NEW(REF ARRAY OF TEXT,Len);
+ Pairs:REF ARRAY OF TextIntPair.T :=
+ NEW(REF ARRAY OF TextIntPair.T,Len);
+ BEGIN
+ TextConv.Explode(Str,Words^,SET OF CHAR{' '});
+ FOR I := FIRST(Words^) TO LAST(Words^) DO
+ Pairs[I] := TextIntPair.Create(ExtractAlphas(Words[I]),
+ ExtractDigits(Words[I]))
+ END;
+ TextIntPairArraySort.Sort(Pairs^,Compare);
+ FOR I := FIRST(Pairs^) TO LAST(Pairs^) DO
+ Words[I] := TextIntPair.First(Pairs[I])
+ END;
+ RETURN TextConv.Implode(Words^,' ')
+ END SortString;
+
+BEGIN
+ TRY
+ SIO.PutText(SortString("and2 Raku3 cousins5 Perl1 are4") & "\n");
+ SIO.PutText(SortString("guest6 Python1 most4 the3 popular5 is2 language7")
+ & "\n");
+ SIO.PutText(SortString("Challenge3 The1 Weekly2") & "\n")
+ EXCEPT
+ Lex.Error => SIO.PutText("Lex.Error: malformed digit!\n")
+ | FloatMode.Trap(t) =>
+ CASE t OF
+ FloatMode.Flag.Invalid =>
+ SIO.PutText("FloatMode.Trap(Invalid)")
+ | FloatMode.Flag.Inexact =>
+ SIO.PutText("FloatMode.Trap(Inexact)")
+ | FloatMode.Flag.Overflow =>
+ SIO.PutText("FloatMode.Trap(Overflow)")
+ | FloatMode.Flag.Underflow =>
+ SIO.PutText("FloatMode.Trap(Underflow)")
+ | FloatMode.Flag.DivByZero =>
+ SIO.PutText("FloatMode.Trap(DivByZero)")
+ | FloatMode.Flag.IntOverflow =>
+ SIO.PutText("FloatMode.Trap(IntOverflow)")
+ | FloatMode.Flag.IntDivByZero =>
+ SIO.PutText("FloatMode.Trap(IntDivByZero)")
+ ELSE
+ SIO.PutText("Some other exception occurred!\n")
+ END
+ END;
+END Ch1.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/Pair.ig b/challenge-278/deadmarshal/modula-3/ch1/src/Pair.ig
new file mode 100644
index 0000000000..1f0e017c4f
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/Pair.ig
@@ -0,0 +1,20 @@
+GENERIC INTERFACE Pair(E1,E2);
+
+IMPORT Word;
+
+CONST
+ Brand = "Pair(" & E1.Brand & "," & E2.Brand & ")";
+
+TYPE
+ T <: REFANY;
+
+PROCEDURE Create(READONLY First:E1.T;
+ READONLY Second:E2.T):T;
+PROCEDURE Equal(READONLY a,b:T):BOOLEAN;
+PROCEDURE Hash(READONLY a:T):Word.T;
+PROCEDURE Compare(READONLY a,b:T):[-1..1];
+PROCEDURE First(READONLY Pair:T):E1.T;
+PROCEDURE Second(READONLY Pair:T):E2.T;
+
+END Pair.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/Pair.mg b/challenge-278/deadmarshal/modula-3/ch1/src/Pair.mg
new file mode 100644
index 0000000000..7902fa425c
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/Pair.mg
@@ -0,0 +1,48 @@
+GENERIC MODULE Pair(E1,E2);
+
+IMPORT Word;
+
+REVEAL T = BRANDED REF RECORD
+ First:E1.T;
+ Second:E2.T;
+END;
+
+PROCEDURE Create(READONLY First:E1.T;
+ READONLY Second:E2.T):T =
+ BEGIN
+ RETURN NEW(T,First := First,Second := Second)
+ END Create;
+
+PROCEDURE First(READONLY Pair:T):E1.T =
+ BEGIN
+ RETURN Pair.First
+ END First;
+
+PROCEDURE Second(READONLY Pair:T):E2.T =
+ BEGIN
+ RETURN Pair.Second
+ END Second;
+
+PROCEDURE Equal(READONLY a,b:T):BOOLEAN =
+ BEGIN
+ RETURN E1.Equal(a.First,b.First) AND E2.Equal(a.Second,b.Second)
+ END Equal;
+
+PROCEDURE Hash(READONLY a:T):Word.T =
+ BEGIN
+ RETURN E1.Hash(a.First)
+ END Hash;
+
+PROCEDURE Compare(READONLY a,b:T):[-1..1] =
+BEGIN
+ IF E1.Compare(a.First,b.First) = 0 AND
+ E2.Compare(a.Second,b.Second) = 0 THEN RETURN 0
+ ELSIF E1.Compare(a.First,b.First) < 0 AND
+ E2.Compare(a.Second,b.Second) < 0 THEN RETURN -1
+ ELSE RETURN 1
+ END;
+ END Compare;
+
+BEGIN
+END Pair.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/m3makefile b/challenge-278/deadmarshal/modula-3/ch1/src/m3makefile
new file mode 100644
index 0000000000..63baab2e7b
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/m3makefile
@@ -0,0 +1,11 @@
+import("libm3")
+import("libsio")
+
+generic_module("Pair")
+
+module("specializations/TextIntPair")
+module("specializations/TextIntPairArraySort")
+
+implementation("Ch1")
+program("ch1")
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.i3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.i3
new file mode 100644
index 0000000000..65a4d60dc5
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.i3
@@ -0,0 +1,2 @@
+INTERFACE TextIntPair = Pair(Text,Integer) END TextIntPair.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.m3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.m3
new file mode 100644
index 0000000000..ecae7d6fbd
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPair.m3
@@ -0,0 +1 @@
+MODULE TextIntPair = Pair(Text,Integer) END TextIntPair.
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.i3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.i3
new file mode 100644
index 0000000000..d8a239276a
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.i3
@@ -0,0 +1,2 @@
+INTERFACE TextIntPairArraySort = ArraySort(TextIntPair) END TextIntPairArraySort.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.m3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.m3
new file mode 100644
index 0000000000..df092085c9
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairArraySort.m3
@@ -0,0 +1 @@
+MODULE TextIntPairArraySort = ArraySort(TextIntPair) END TextIntPairArraySort.
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.i3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.i3
new file mode 100644
index 0000000000..6839fd8db5
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.i3
@@ -0,0 +1,2 @@
+INTERFACE TextIntPairSeq = Sequence(TextIntPair) END TextIntPairSeq.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.m3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.m3
new file mode 100644
index 0000000000..c0b81c0a18
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeq.m3
@@ -0,0 +1,2 @@
+MODULE TextIntPairSeq = Sequence(TextIntPair,TextIntPairSeq,TextIntPairSeqRep) END TextIntPairSeq.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeqRep.i3 b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeqRep.i3
new file mode 100644
index 0000000000..39766fcec3
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch1/src/specializations/TextIntPairSeqRep.i3
@@ -0,0 +1,3 @@
+INTERFACE TextIntPairSeqRep = SequenceRep(TextIntPair,TextIntPairSeq)
+END TextIntPairSeqRep.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch2/src/Ch2.m3 b/challenge-278/deadmarshal/modula-3/ch2/src/Ch2.m3
new file mode 100644
index 0000000000..7af7e36cad
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch2/src/Ch2.m3
@@ -0,0 +1,30 @@
+MODULE Ch2 EXPORTS Main;
+
+IMPORT SIO,Text,TextExtras,CharArraySort;
+
+PROCEDURE SortText(READONLY T:TEXT):TEXT =
+ VAR A:REF ARRAY OF CHAR :=
+ NEW(REF ARRAY OF CHAR,Text.Length(T));
+ BEGIN
+ Text.SetChars(A^,T);
+ CharArraySort.Sort(A^);
+ RETURN Text.FromChars(A^)
+ END SortText;
+
+PROCEDURE ReverseString(READONLY T:TEXT;
+ READONLY C:CHAR):TEXT =
+ VAR
+ I:CARDINAL := 0;
+ BEGIN
+ IF TextExtras.FindChar(T,C,I) THEN
+ RETURN SortText(Text.Sub(T,0,I+1)) & Text.Sub(T,I+1)
+ ELSE RETURN T
+ END;
+ END ReverseString;
+
+BEGIN
+ SIO.PutText(ReverseString("challenge",'e')); SIO.Nl();
+ SIO.PutText(ReverseString("programming",'a')); SIO.Nl();
+ SIO.PutText(ReverseString("champion",'b')); SIO.Nl()
+END Ch2.
+
diff --git a/challenge-278/deadmarshal/modula-3/ch2/src/m3makefile b/challenge-278/deadmarshal/modula-3/ch2/src/m3makefile
new file mode 100644
index 0000000000..72ae467753
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch2/src/m3makefile
@@ -0,0 +1,6 @@
+import("libm3")
+import("libsio")
+module("specializations/CharArraySort")
+implementation("Ch2")
+program("ch2")
+
diff --git a/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.i3 b/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.i3
new file mode 100644
index 0000000000..fb75d48a90
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.i3
@@ -0,0 +1 @@
+INTERFACE CharArraySort = ArraySort(Char) END CharArraySort.
diff --git a/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.m3 b/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.m3
new file mode 100644
index 0000000000..cccaece34d
--- /dev/null
+++ b/challenge-278/deadmarshal/modula-3/ch2/src/specializations/CharArraySort.m3
@@ -0,0 +1 @@
+MODULE CharArraySort = ArraySort(Char) END CharArraySort.
diff --git a/challenge-278/deadmarshal/perl/ch-1.pl b/challenge-278/deadmarshal/perl/ch-1.pl
new file mode 100644
index 0000000000..e083fe6178
--- /dev/null
+++ b/challenge-278/deadmarshal/perl/ch-1.pl
@@ -0,0 +1,14 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub sort_string{
+ my %h = map{/(\w+)(\d+)/} split ' ',$_[0];
+ join ' ',sort{$h{$a} <=> $h{$b}} keys %h
+}
+
+printf "%s\n",sort_string('and2 Raku3 cousins5 Perl1 are4');
+printf "%s\n",
+ sort_string('guest6 Python1 most4 the3 popular5 is2 language7');
+printf "%s\n",sort_string('Challenge3 The1 Weekly2');
+
diff --git a/challenge-278/deadmarshal/perl/ch-2.pl b/challenge-278/deadmarshal/perl/ch-2.pl
new file mode 100644
index 0000000000..ba6e2aaf08
--- /dev/null
+++ b/challenge-278/deadmarshal/perl/ch-2.pl
@@ -0,0 +1,12 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+
+sub reverse_string{
+ $_[0] =~ s/(.*?$_[1])/join '',sort split '',$1/er
+}
+
+printf "%s\n",reverse_string('challenge','e');
+printf "%s\n",reverse_string('programming','a');
+printf "%s\n",reverse_string('champion','b');
+
diff --git a/challenge-278/deadmarshal/ruby/ch1.rb b/challenge-278/deadmarshal/ruby/ch1.rb
new file mode 100644
index 0000000000..4f54d7539c
--- /dev/null
+++ b/challenge-278/deadmarshal/ruby/ch1.rb
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+def sort_string(s)
+ h = Hash.new(0)
+ s.split(' ').each do |e|
+ e =~ /(\w+)(\d+)/
+ h[$1] = $2
+ end
+ (h.keys.sort{|a,b| h[a] <=> h[b]}).join(' ')
+end
+
+puts sort_string('and2 Raku3 cousins5 Perl1 are4')
+puts sort_string('guest6 Python1 most4 the3 popular5 is2 language7')
+puts sort_string('Challenge3 The1 Weekly2')
+
diff --git a/challenge-278/deadmarshal/ruby/ch2.rb b/challenge-278/deadmarshal/ruby/ch2.rb
new file mode 100644
index 0000000000..bcaf70f72a
--- /dev/null
+++ b/challenge-278/deadmarshal/ruby/ch2.rb
@@ -0,0 +1,15 @@
+#!/usr/bin/env ruby
+
+def reverse_string(s,e)
+ idx = s.index(e)
+ if idx.nil?
+ return s
+ end
+ sub = s[0..idx]
+ return sub.chars.sort.join + s[idx+1..-1]
+end
+
+puts reverse_string('challenge','e')
+puts reverse_string('programming','a')
+puts reverse_string('champion','b')
+