Program this!, Programming thread |
Program this!, Programming thread |
![]()
Post
#1
|
|
![]() Senior Member ![]() ![]() ![]() ![]() ![]() ![]() Group: Administrator Posts: 2,648 Joined: Apr 2008 Member No: 639,265 ![]() |
I'm of the understand that there are a few Technology forum aficionados that are programmers, or are at least interested in programming, so I thought I'd start a thread -- a sort of game. The game was inspired by this thread. It's pretty simple: just implement the following program in whatever language you desire. If someone's already posted a program in your favorite language, see if you can do better! You get bragging rights if you implement the program in a weird/unusual/rare language.
Here are the guidelines for the program:
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Senior Member ![]() ![]() ![]() ![]() ![]() ![]() Group: Administrator Posts: 2,648 Joined: Apr 2008 Member No: 639,265 ![]() |
Erlang
CODE -module(matcher). -export([matches_pattern_1/1, matches_pattern_2/1, matches_pattern_3/1]). matches_pattern_1(S) -> mp1(S, {0,0,0}). mp1([], {A, B, C}) -> A + B =:= C; mp1([H|T], {A, B, C}) when H =:= $a -> mp1(T, {A+1, B, C}); mp1([H|T], {A, B, C}) when H =:= $b -> mp1(T, {A, B+1, C}); mp1([H|T], {A, B, C}) when H =:= $c -> mp1(T, {A, B, C+1}). matches_pattern_2(S) -> mp2(S, {0,0,0}, {false,false,false}). mp2([], {A, B, C}, _) -> A + B =:= C; mp2([H|T], {A, B, C}, {_, Saw_b, Saw_c}) when H =:= $a -> if Saw_b -> false; Saw_c -> false; true -> mp2(T, {A+1, B, C}, {true, Saw_b, Saw_c}) end; mp2([H|T], {A, B, C}, {Saw_a, _, Saw_c}) when H =:= $b -> if Saw_c -> false; true -> mp2(T, {A, B+1, C}, {Saw_a, true, Saw_c}) end; mp2([H|T], {A, B, C}, {Saw_a, Saw_b, _}) when H =:= $c -> mp2(T, {A, B, C+1}, {Saw_a, Saw_b, true}). matches_pattern_3(S) -> mp3(S, {0,0,0}, {false,false,false}). mp3([], {A, _, C}, _) -> A =:= C andalso A > 0; mp3([H|T], {A, B, C}, {_, Saw_b, Saw_c}) when H =:= $a -> if Saw_b -> false; Saw_c -> false; true -> mp3(T, {A+1, B, C}, {true, Saw_b, Saw_c}) end; mp3([H|T], {A, B, C}, {Saw_a, _, Saw_c}) when H =:= $b -> if Saw_c -> false; true -> mp3(T, {A, B+1, C}, {Saw_a, true, Saw_c}) end; mp3([H|T], {A, B, C}, {Saw_a, Saw_b, _}) when H =:= $c -> mp3(T, {A, B, C+1}, {Saw_a, Saw_b, true}). Source: matcher.erl |
|
|
![]() ![]() |