Caesar cipher: Difference between revisions
Content added Content deleted
Langurmonkey (talk | contribs) |
(a new version in language Elm) |
||
Line 2,928: | Line 2,928: | ||
Decrypted: The five boxing wizards jump quickly |
Decrypted: The five boxing wizards jump quickly |
||
</pre> |
</pre> |
||
=={{header|Elm}}== |
|||
<syntaxhighlight lang="elm"> |
|||
=={{header|Erlang}}== |
=={{header|Erlang}}== |
||
<syntaxhighlight lang="erlang"> |
<syntaxhighlight lang="erlang"> |
||
module Main exposing (main) |
|||
import Browser |
|||
import Html exposing (Html, h2, div, p, input, button, text, textarea) |
|||
import Html.Attributes exposing (style, class, placeholder, value) |
|||
import Html.Events exposing (onInput, onClick) |
|||
-- MAIN |
|||
main = |
|||
Browser.sandbox { init = init, update = update, view = view } |
|||
-- MODEL |
|||
type alias Model = |
|||
{ codeKey : Int |
|||
, normtext : String |
|||
} |
|||
init : Model |
|||
init = |
|||
{ codeKey = 3 |
|||
, normtext = "" } |
|||
-- UPDATE |
|||
type Msg |
|||
= Change String |
|||
| DecKey |
|||
| IncKey |
|||
update : Msg -> Model -> Model |
|||
update msg model = |
|||
case msg of |
|||
DecKey -> |
|||
{ model | codeKey = model.codeKey - 1} |
|||
IncKey -> |
|||
{ model | codeKey = model.codeKey + 1} |
|||
Change newContent -> |
|||
{ model | normtext = String.toUpper newContent } |
|||
encodeChar : Int -> Char -> Char |
|||
encodeChar codeKey character = |
|||
if Char.isUpper character then |
|||
Char.fromCode (modBy 26 (Char.toCode character - 65 + codeKey) + 65) |
|||
else if Char.isLower character then |
|||
Char.fromCode (modBy 26 (Char.toCode (Char.toUpper character) - 65 + codeKey) + 65) |
|||
else |
|||
character |
|||
encodeText : Int -> String -> String |
|||
encodeText codeKey normtext = |
|||
String.map (encodeChar codeKey) normtext |
|||
subheads aKey = |
|||
if aKey > 0 then "Original" |
|||
else if aKey < 0 then "Encrypted text" |
|||
else "?" |
|||
-- VIEW |
|||
view : Model -> Html Msg |
|||
view model = |
|||
div [] |
|||
[ div [] |
|||
[h2 [class "h2style"] [text (subheads model.codeKey)] |
|||
, textarea [ class "textframe", placeholder "Write here your text!" |
|||
, value model.normtext, onInput Change ] [] |
|||
] |
|||
, div [] |
|||
[h2 [class "h2style"] [text (subheads (negate model.codeKey))] |
|||
, textarea [ class "textframe", value (encodeText model.codeKey model.normtext) ] []] |
|||
, div [class "keystyle"] [ button [ class "butstyle", onClick DecKey ] [ text "-1" ] |
|||
, text (" Key " ++ String.fromInt model.codeKey) |
|||
, button [ class "butstyle", onClick IncKey ] [ text "+1" ] |
|||
] |
|||
] |
|||
{{out}} |
|||
<pre> |
|||
Original: THE QUICK ORANGE FOX JUMPED OVER THE SLOW DOG |
|||
Encrypted: WKH TXLFN RUDQJH IRA MXPSHG RYHU WKH VORZ GRJ (used key value 3) |
|||
Encrypted: XLI UYMGO SVERKI JSB NYQTIH SZIV XLI WPSA HSK (used key value 4) |
|||
Decrypted: THE QUICK ORANGE FOX JUMPED OVER THE SLOW DOG (used key value -3) |
|||
Decrypted: THE QUICK ORANGE FOX JUMPED OVER THE SLOW DOG (used key value -4) |
|||
Live version with html file calling the elm module as compiled to JavaScript |
|||
at https://ellie-app.com/qVvVDKdK6PQa1 |
|||
</pre> |
|||
%% Ceasar cypher in Erlang for the rosetta code wiki. |
%% Ceasar cypher in Erlang for the rosetta code wiki. |
||
%% Implemented by J.W. Luiten |
%% Implemented by J.W. Luiten |