Bueno, este cifrado fue realizado con fin de resolver un reto de programación en UDTOOLS (http://foro.udtools.net/showthread.php?11260-FUNCI%D3N-Morse-Encode-Decode-by-Metal&p=78955&posted=1#post78955).
Código :
# Cifrado Morse.py - Sanko
# -*- coding: utf-8 -*-
class cif_morse():
def __init__(self):
self.table = {'A':'.-', 'B':'-...', 'C':'-.-.',
'D':'-..', 'E':'.', 'F':'..-.', 'G':'--.',
'H':'....', 'I':'..', 'J':'.---', 'K':'-.-',
'L':'.-..', 'M':'--', 'N':'-.', 'Ñ':'--.--',
'O':'---', 'P':'.--.', 'Q':'--.-', 'R':'.-.',
'S':'...', 'T':'-', 'U':'..-', 'V':'...-',
'W':'.--', 'X':'-..-', 'Y':'-.--', 'Z':'--..',
'Ä':'.-.-', 'Ö':'---.', 'Ü':'..--', '0':'-----',
'1':'.----', '2':'..---', '3':'...--', '4':'....-',
'5':'.....', '6':'-....', '7':'--...', '8':'---..',
'9':'----.', '.':'.-.-.-', ',':'--..--', '?':'..--..',
'!':'..--.', ':':'---...', '"':'.-..-.', "'":".----.",
'=':'-...-', ' ':' '}
self.table2 = {}
# Inicializar desde aqui
self.__encode('Sanko os saluda')
self.__decode('... .- -. -.- --- --- ... ... .- .-.. ..- -.. .-')
def __encode(self, text):
self.text = text
self.encoded = ''
if self.text != '':
self.text = self.text.upper()
for i in self.text:
self.encoded += self.table[i] + ' '
print "Encoded: %s"% self.encoded
def __decode(self, en_text):
self.en_text = en_text
self.decoded = ''
for i in self.table:
self.table2[self.table[i]] = i
self.en_text = self.en_text.split(' ')
for x in self.en_text:
try:
self.en_text.remove('')
except:
pass
self.decoded += self.table2[x]
print "Decoded: %s"% self.decoded
cif_morse()
Imágen :
(http://i.imgur.com/yiIz1Ae.png)
Un cifrado más, buena esa, Sanko.
Pero ya tenías que aburrirte para haber programado esto... Lo mejor de todo los ejemplos, jajajajaja.
PD: me gusta lo limpio que te quedó el código :P
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Un cifrado más, buena esa, Sanko.
Pero ya tenías que aburrirte para haber programado esto... Lo mejor de todo los ejemplos, jajajajaja.
PD: me gusta lo limpio que te quedó el código :P
Jajaja suelo despertarme y pasarme por udtools a ver si han subido algún reto de programación xD, programar antes de salir de casa relaja a uno.
Saludos gayer.
Bueno Sanko tambien lo intente hacer en PHP, solo que al decodificar no se como darle los espacios y otra cosa queria usar en la expresion regular \b$acamivariable\b en el decodificado pero no daba el resultado deseado por eso use ^preg_quote($acamivariable)$, puede contener muchos errores por lo que si hay alguna forma mejor o algo que se pueda mejorar y sepan como hacerlo son libres de editarlo o comentarme como hacerlo, gracias Sanko me diverti un rato salu2 bro
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Cifrado morse</title>
</head>
<body>
<?php
$abc=array('A'=>'.-','B'=>'-...','C'=>'-.-.','D'=>'-..','E'=>'.','F'=>'..-.','G'=>'--.','H'=>'....','I'=>'..','J'=>'.---','K'=>'-.-','L'=>'.-..','M'=>'--','N'=>'-.','Ñ'=>'--.--','O'=>'---','P'=>'.--.','Q'=>'--.-','R'=>'.-.','S'=>'...','T'=>'-','U'=>'..-','V'=>'...-','W'=>'.--','X'=>'-..-','Y'=>'-.--','Z'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-'," "=>" ");
if(isset($_POST['enviar'])){
if(!empty($_POST['morse'])){
switch ($_POST['morse2']) {
case 'Encode':
$post=$_POST['morse'];
for($i=0;$i<=strlen($post);$i++){
$letra=substr($post, $i,1);
foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i", $key)){
echo htmlentities($value)." ";
}
}
}
break;
case 'Decode':
$post=$_POST['morse'];
$morse_pal=explode(" ",$post);
foreach($morse_pal as $letra){
foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i", $value)){
echo htmlentities(strtoupper($key));
}
}
}
break;
default:
echo "Ocurrio un error";
break;
}
}else{
echo "Rellene el campo";
}
}
?>
<form action="" method="post">
<p><b>Ingrese el texto:</b></p>
<input name="morse" type="text" /><br />
<input type="radio" name="morse2" value="Encode">Codificar<br>
<input type="radio" name="morse2" value="Decode" checked="checked">Decodificar<br>
<input type="submit" name="enviar" />
</form>
</body>
</html>
Resultado:
(http://i.imgur.com/TaRvuMr.png)
(http://i.imgur.com/J9NPm5G.png)
Debes colocar espacios ejemplo después de .-[aquí va un espacio]---[aquí otro]--- así sucesivamente. obviamente si tienes un espacio ahí se colocaran 2. o simplemente agregas algún carácter que te ayude a delimitar para el decodificado.
ejemplo así:
<?php
$abc=array('A'=>'.-','B'=>'-...','C'=>'-.-.','D'=>'-..','E'=>'.','F'=>'..-.','G'=>'--.','H'=>'....','I'=>'..','J'=>'.---','K'=>'-.-','L'=>'.-..','M'=>'--','N'=>'-.','Ñ'=>'--.--','O'=>'---','P'=>'.--.','Q'=>'--.-','R'=>'.-.','S'=>'...','T'=>'-','U'=>'..-','V'=>'...-','W'=>'.--','X'=>'-..-','Y'=>'-.--','Z'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-'," "=>" ");
//echo $abc['A'];
$final="";
$cadena="HOLA HOLA";
for($i=0;$i<=strlen($cadena);$i++){
$letra=substr($cadena, $i,1);
if ($letra==" ") {
$final.=$abc[$letra];
}else{
$final.=$abc[$letra] . " ";
}
}
echo $final;
?>
así en el descifrado te queda solo hacer split con un espacio.
saludos
Hombre sí... pero el morse no es un cifrado, todo lo contrario.
Hace un tiempo yo estaba muy aficionado a eso del morse :P Vale la pena conocerlo, nunca sabes para lo que te servirá.
Ya arregle lo de los espacios gracias a Danyfirex aca dejo el codigo:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<title>Cifrado morse</title>
</head>
<body>
<?php
$abc=array('A'=>'.-','B'=>'-...','C'=>'-.-.','D'=>'-..','E'=>'.','F'=>'..-.','G'=>'--.','H'=>'....','I'=>'..','J'=>'.---','K'=>'-.-','L'=>'.-..','M'=>'--','N'=>'-.','Ñ'=>'--.--','O'=>'---','P'=>'.--.','Q'=>'--.-','R'=>'.-.','S'=>'...','T'=>'-','U'=>'..-','V'=>'...-','W'=>'.--','X'=>'-..-','Y'=>'-.--','Z'=>'--..',0=>'-----',1=>'.----',2=>'..---',3=>'...--',4=>'...-',5=>'.....',6=>'-....',7=>'--...',8=>'---..',9=>'----.','.'=>'.-.-.-',','=>'--..--','?'=>'..--..','!'=>'..--.',':'=>'---...','"'=>'.-..-.',"'"=>'.----.','='=>'-...-',' '=>' ');
if(isset($_POST['enviar'])){
if(!empty($_POST['morse'])){
switch ($_POST['morse2']) {
case 'Encode':
$post=$_POST['morse'];
for($i=0;$i<=strlen($post);$i++){
$letra=substr($post, $i,1);
foreach($abc as $key=>$value){
if(preg_match("/^".preg_quote($letra)."$/i", $key)){
echo htmlentities($value)." ";
}
}
}
break;
case 'Decode':
$post=$_POST['morse'];
$morse_pal=explode(" ",$post);
foreach($morse_pal as $indice=>$letra){
foreach($abc as $key=>$value){
if(empty($letra)){$letra=' ';}
if(preg_match("/^".preg_quote($letra)."$/i", $value)){
echo htmlentities(strtoupper($key));
}
}
}
break;
default:
echo "Ocurrio un error";
break;
}
}else{
echo "Rellene el campo";
}
}
?>
<form action="" method="post">
<p><b>Ingrese el texto:</b></p>
<input name="morse" type="text" /><br />
<input type="radio" name="morse2" value="Encode">Codificar<br>
<input type="radio" name="morse2" value="Decode" checked="checked">Decodificar<br>
<input type="submit" name="enviar" />
</form>
</body>
</html>