JavaScript - mover letras

 
Vista:

mover letras

Publicado por victor (1 intervención) el 28/05/2021 11:43:17
Hola, me podrían ayudar a hacer un codigo dónde solo se muevan las letras de una frase y se muevan X veces sin modificar el resto? Xejemplo : "el zorro mira" moviendo 1 letra == "fo apssp njsb" gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de algoritmo
Val: 37
Ha aumentado su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

mover letras

Publicado por algoritmo (29 intervenciones) el 28/05/2021 12:40:37
Hola

Te adjunto la solución para X = 1.

Lo veo muy engorroso para X diferente, y para un X genérico.
Mi duda es:
El código ascii de 'z' es 122, el siguiente es 123, que corresponde a '{'. Si sólo se asumen caracteres alfabéticos, no se me ocurre otra cosa que escribir excepciones, y eso, complica el código.
Si se permite el carácter '{' o siguientes, el código sería mucho más simple.

En cualquier caso, espero que te sirva lo que te adjunto. :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
txt = "el zorro mira";
dev = ''
for (i=0; i < txt.length; i++){
	if (txt[i] == ' '){
		dev += ' ';
		continue;
	}
	if (txt[i] == 'z'){
		dev += 'a';
		continue;
	}
	if (txt[i] == 'Z'){
		dev += 'A';
		continue;
	}
	codigo = txt.charCodeAt(i) + 1;
	dev += String.fromCharCode(codigo);
}
console.log(dev);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 8
Ha disminuido su posición en 14 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

mover letras

Publicado por Carlos (2 intervenciones) el 31/05/2021 00:15:56
Aca te propongo una solución que permite un x genérico,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<html>
<head>
 
	<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" type="text/javascript" ></script>
 
 
<script>
 
	$(document).ready(function(){
	var dato1=document.getElementById('dato1');
	var dato2=document.getElementById('dato2');
	var dato3=document.getElementById('dato3');
	var convierte=document.getElementById('convierte');
		convierte.addEventListener('click', convertir);
 
 
 
	});
 
function convertir(){
 
	dato = Array.from('abcdefghijklmnñopqrstuvwxyz');
	var texto1 = Array.from(dato1.value);
 
	var texto2 = new Array();
	var mueve =  parseInt(dato2.value);
 
	var letras = texto1.length;
	let i = 0;
	do {
 
		let rec = texto1[i];
 
		if (texto1[i] == ' '){
			texto2.push(' ');
		};
		var indice = dato.indexOf(rec);
 
		var nuevo = indice + mueve
 
		if (nuevo > 26){
			nuevo = nuevo - 27;
			}
		texto2.push(dato[nuevo]);
		i = i + 1;
} 	while (i < letras);
 
	dato3.value = texto2.join('');
}
 
 
	</script>
 
	<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
	<title>mover letras</title>
 
 
</head>
<body>
 
	<div>
 
					<br>
					<p>Frase         </p><input type="text" id="dato1" value="a">
					<br>
					<br>
					<p>Movimiento    </p><input type="number" id="dato2" value="0">
					<br>
					<br>
					<p>Nueva Frase   </p><input type="text" id="dato3" value="">
					<br>
 
	<br>
					<input type="button" id="convierte" value="Convertir">
	<br>
	</div>
 
 
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de O rei do PC

mover letras

Publicado por O rei do PC (1 intervención) el 01/06/2021 12:12:17
Buenas, sólo una mejora al codigo sugerido por 'algoritmo':
hay que ver que todas las minusculas estan en el conjunto (96 -122); por tanto, la variable 'codigo' sera:

codigo = txt.charCodeAt(i)+(n_posiciones% 122); es decir jugamos con el operador "modulo" (el simbolo '%').

El resto del algoritmo es completamente igual:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function desplaza (texto,n_posiciones){
 let resultado='';
 
    for (let i = 0; i < texto.length; i++){
        if (texto[i] == ' ') {
 
            resultado += ' ';
            continue;
        }
        codigo=texto.charCodeAt(i) + (n_posiciones%122);
        resultado+=String.fromCharCode(codigo);
 
    }
    return resultado;
}
    console.log(desplaza("el zorro mira", 1));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de algoritmo
Val: 37
Ha aumentado su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

mover letras

Publicado por algoritmo (29 intervenciones) el 01/06/2021 13:31:38
Una vuelta de tuerca.

Esta vez válido para cualquier X, y mucho más simple:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
txt = "el zorro mira";
original = 'abcdefghijklmn\u00F1opqrstuvwxyz';
siguiente = 'bcdefghijklmn\u00F1opqrstuvwxyza';
X = 3 ; // numero de movimientos
txt = txt.toLowerCase();
for (mvto=0; mvto<X; mvto++){
	dev = '';
	for (i=0; i < txt.length; i++){
		orden = original.indexOf(txt[i]);
		if (orden != -1){
			dev += siguiente[orden];
		}else{
			dev += txt[i];
		}
	}
	console.log(dev);
	txt = dev;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar