El Comando DESCAD
- Inicie sesión o regístrese para enviar comentarios
Hola mis estimados Amigos AdictosHP!!!
En primer lugar saludos a todos Uds. y decirles que Dios los bendiga siempre...
Dicho esto, ahora les propongo un nuevo desafío:
Realizar el código UserRPL más rápido y más pequeño para implementar el Comando DESCAD. Este comando lleva su nombre por la acción que realiza, esto es, DESordenar CADena.
El programa debe aceptar como argumento de entrada 1 solo objeto String (cadena de caracteres) de cualquier longitud y a cada ejecución del comando debe devolver como salida 1 solo objeto String (cadena de caracteres) que sea la desordenación aleatoria de todos y cada uno de los caracteres que conformaron el objeto String (cadena de caracteres) ingresado como argumento de entrada el comando.
Bueno, para que todo quede claro, les dejo un ejemplo de ejecución del Comando DESCAD:
Ejemplo de Ejecución del Comando DESCAD
--------------------------------------------
Pila antes de ejecutar el comando DESCAD
--------------------------------------------
2:
1: "ESTA LINEA DE TEXTO SE AUTODESTRUIRA EN UN MOMENTO..."
--------------------------------------------
Pila después de ejecutar el comando DESCAD
--------------------------------------------
2:
1: "X. IATNS . ETU AL DTEUIRR NSSEAA MNOUE.TEEOTETOM"
Obviamente, como el resultado del desordenamiento de caracteres producido por el Comando DESCAD es absolutamente aleatorio, Uds. seguramente no tendrán de primera instancia la misma salida que les presenté en el Ejemplo de Ejecución del Comando DESCAD. Pero estoy seguro que si ejecutan varias veces el Comando DESCAD con el mismo objeto String (cadena de caracteres) "ESTA LINEA DE TEXTO SE AUTODESTRUIRA EN UN MOMENTO..." podrán obtener como salida el objeto String (cadena de caracteres) "X. IATNS . ETU AL DTEUIRR NSSEAA MNOUE.TEEOTETOM".
Bueno, eso es todo mis queridos Amigos AdictosHP...
Ahora a pensar y proponer nuestras soluciones más creativas e ingeniosas...
- Inicie sesión o regístrese para enviar comentarios
Holas yo propongo:
«
DUP TYPE 2. == IF
THEN
DUP SIZE 1 - SWAP
1 PICK3 START
DUP HEAD SWAP TAIL
PICK3 RAND * CEIL
DUP2 6 PICK SUB UNROT
1 - 1 SWAP SUB ROT + +
NEXT
NIP
ELSE
END
»
- Inicie sesión o regístrese para enviar comentarios
Un saludo.
Aqui otro codigo.
« DUP TAIL
SWAP HEAD
SWAP
RAND
SWAP
DUP SIZE 1 SWAP
START
DUP TAIL SWAP HEAD
4 ROLL SWAP 4 ROLL
RAND DUP ROT
<
« UNROT + »
« UNROT SWAP + »
IFTE
SWAP ROT
NEXT
DROP2
»
- Inicie sesión o regístrese para enviar comentarios
Esta es mi solución con variables locales, se puede hacer con comandos de pila
[->] = [Cambio derecho] + [0-cero]. Programa sin depurar el tipo de elemento en la posición 1 de la pila.
« -> j
« {} {} 1 j SIZE
FOR h RAND + SWAP j h h SUB SWAP + SWAP
NEXT DUP SORT -> m n p
« "" 1 j SIZE
FOR h m n p h GET POS GET +
NEXT
»
»
»
- Inicie sesión o regístrese para enviar comentarios
Esta es mi solución con variables locales, se puede hacer con comandos de pila
[->] = [Cambio derecho] + [0-cero]. Programa optimizado por completo.
« « -105 IF 105 FS? THEN SF ELSE CF END » -> k
« 105
IF -105 FS?
THEN SF
ELSE CF
END
IF DEPTH 0 >
THEN
IF DUP TYPE 2 SAME
THEN
« -> j
« {} {} 1 j SIZE
FOR h RAND + SWAP j h h SUB SWAP + SWAP
NEXT DUP SORT -> m n p
« "" 1 j SIZE
FOR h m n p h GET POS GET +
NEXT
»
»
» k EVAL
END
ELSE k EVAL
"Error:
No hay encomillado en posición 1
Ejemplo
1: casa ---> 1: scaa"DOERR
END
»
»
La depuración exige tener en cuenta:
1) Si hay elementos en la pila
2) El elemento en la posición 1 de la pila es un encomillado o cadena de caracteres.
3) Adicionalmente hay que tratar la cuestión de ética del programa que hay en otro post de dejar los indicadores tal cual los tenía el usuario antes de ejecutar el programa.
4) Dar un mensaje de error indicando qué sucede y de paso una breve ayuda.
5) Incluir una vez resueltas todas las cuestiones anteriores la rutina que da la solución aleatoria a la cadena de caracteres.
6) Si se quiere, para darle un poco más de comodidad se le puede incluir una plantilla con el comando INFORM.
- Inicie sesión o regístrese para enviar comentarios
¿Quién se supone que ha ganado? ¿Cuándo finaliza el minicampeonato?
- Inicie sesión o regístrese para enviar comentarios













