Author Topic: ROT13  (Read 800 times)

Dragon

  • Administrator
  • Platinum Level
  • *****
  • Posts: 4882
  • Have you played my board game?
    • Rival Troops
ROT13
« on: March 25, 2025, 23:19:08 »
Just a little programming exercise that I thought would be fun, creating a simple shift cipher in multiple programming languages for comparison.

First up... PHP

Code: [Select]
function rot13($input)
{
  $output = "";
  for ($x = 0; $x < strlen($input); $x++)
  {
    $ascii = ord($input[$x]);
    if ($ascii >= 65 && $ascii <= 77 || $ascii >= 97 && $ascii <= 109) { // A-M & a-m
      $output .= chr($ascii + 13);
    } else if ($ascii >= 78 && $ascii <= 90 || $ascii >= 110 && $ascii <= 122) { // N-Z & n-z
      $output .= chr($ascii - 13);
    } else {
      $output .= $input[$x];
    }
  }
  return $output;
}

echo rot13('Hello World!') . '<br>';
echo rot13('AaMmNnZz') . '<br>';
echo rot13('ABCDefgHIJKlmnopQRStuvWXyz') . '<br>';


Next... C#

Code: [Select]
using System;

public class Program
{
public static void Main()
{
Console.WriteLine(rot13("Hello World!"));
Console.WriteLine(rot13("AaMmNnZz"));
Console.WriteLine(rot13("ABCDefgHIJKlmnopQRStuvWXyz"));
}

public static String rot13(String input)
{
String output = "";
foreach (var letter in input)
{
int ascii = (int)letter;
if (ascii >= 65 && ascii <= 77 || ascii >= 97 && ascii <= 109) { // A-M & a-m
output += (char)(ascii + 13);
} else if (ascii >= 78 && ascii <= 90 || ascii >= 110 && ascii <= 122) { // N-Z & n-z
output += (char)(ascii - 13);
} else {
output += letter;
}
}
return output;
}
}

...And now, SQL:

Code: [Select]
ALTER FUNCTION dbo.ROT13
(
               @PLAINSTRING VARCHAR(255)
)
RETURNS VARCHAR(255)
AS
BEGIN
               DECLARE @MAX INT = LEN(@PLAINSTRING)
               DECLARE @COUNTER INT = 0
               DECLARE @LETTER CHAR(1)
               DECLARE @ENCODEDSTRING VARCHAR(255)
               WHILE (@COUNTER < @MAX)
               BEGIN
                              SET @LETTER = SUBSTRING(@PLAINSTRING, @COUNTER+1, 1);
                              IF(ASCII(@LETTER) BETWEEN 65 AND 77 OR ASCII(@LETTER) BETWEEN 97 AND 109) -- A-M and a-m
                                             SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)+13));
                              ELSE IF(ASCII(@LETTER) BETWEEN 78 AND 90 OR ASCII(@LETTER) BETWEEN 110 AND 122) -- N-Z and n-z
                                             SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)-13));
                              ELSE
                                             SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, @LETTER);
                              SET @COUNTER += 1
               END
               RETURN @ENCODEDSTRING
END
GO
« Last Edit: March 26, 2025, 09:47:16 by Dragon »
"Gee Brain, what are we gonna do tonight?" "The same thing we do every night, try to take over the world!" --Pinky and the Brain