R/torre_hanoi.R

Defines functions torre_hanoi

Documented in torre_hanoi

#' Resuelve el juego torre de hanoi
#'
#' Mueve los discos de la torre de inicio hacia la torre de fin, usando la auxiliar como
#' intermediario, simulando el juego torre de hanoi.
#'
#' @param cant.discos
#' entero no negativo
#' @param origen
#' vector de enteros
#' @param destino
#' vector de enteros sin elementos
#' @param auxiliar
#' vector de enteros sin elementos
#'
#' @return
#' lista de 3 elementos, siendo origen, destino y auxiliar respectivamente
#' @export
#'
#' @examples
#' torre_hanoi(3, c(1,2,3), c(), c())
torre_hanoi <- function(cant.discos, origen, destino, auxiliar)
{
  if ( cant.discos%%1 != 0 || cant.discos <= 0)
  {
    return(F)
  }

  if( (!is.numeric(origen) &&  !is.null(origen)) || (!is.numeric(destino) &&  !is.null(destino))
      || (!is.numeric(auxiliar) &&  !is.null(auxiliar)) )
  {
    return(F)
  }

  if(cant.discos == 1)
  {
    destino <- c(origen[1], destino)
    origen <- origen[-1]
  }
  else if (cant.discos > 1)
  {
    list.aux <- torre_hanoi(cant.discos - 1, origen, auxiliar, destino)
    origen <- list.aux[["origen"]]
    destino <- list.aux[["auxiliar"]]
    auxiliar <- list.aux[["destino"]]

    destino <- c(origen[1], destino)
    origen <- origen[-1]

    list.aux <- torre_hanoi(cant.discos - 1, auxiliar, destino, origen)
    origen <- list.aux[["auxiliar"]]
    destino <- list.aux[["destino"]]
    auxiliar <- list.aux[["origen"]]
  }
  return(list("origen" = origen, "destino" = destino, "auxiliar" = auxiliar))
}
TomasSG/TorreHanoi documentation built on Jan. 6, 2020, 12:28 p.m.