Me gustaría resolver el reto. El idioma de mi preferencia es R. no estoy seguro de cómo recibir la entrada. En hackerrank ventana de codificación dice que

"# Enter your code here. Read input from STDIN. Print output to STDOUT"

Hasta el momento estoy acostumbrado a recibir de entrada mediante el uso de

v1 <- readline("Enter two integers: ")

¿Cómo debo recibir la entrada en hackerrank? Traté de ver resuelto ejemplos, pero no podía encontrar cualquier resuelto ejemplos.


actualización de 1

A continuación el código funciona en R. Único problema es el número de pasos y la bola de valores no son proporcionados desde la entrada de teclado. Tenemos que actualizar manualmente en la línea 1 y línea2. ¿Cómo podría obtener la actualización a continuación la solución para que funcione en hackerrank?

steps=4
ball_numbers=c(1,2,2,2)
d=as.data.frame(c(0,1))

    for (i in (1:(length(ball_numbers)-1)))
    {
      assign(x = paste("A", i, sep = ""),value = c(0,1))
      e <- as.data.frame(get(paste("A", i, sep = "")))
      colnames(e) <- paste("A", i, sep="")
      d <- merge(d,e)
}


d=as.matrix(t(d))
answer=sum(ball_numbers %*% d)/ncol(d)

update2

A continuación el código produce la respuesta correcta

# Enter your code here. Read input from STDIN. Print output to STDOUT
nums <- read.table("/dev/stdin", sep=" ");
nums <- as.matrix(as.data.frame(t(nums)))

steps=nums[1]
ball_numbers=nums[2:length(nums)]
d=as.data.frame(c(0,1))

for (i in (1:(length(ball_numbers)-1)))
{
    assign(paste("A", i, sep = ""),value = c(0,1))
    e <- as.data.frame(get(paste("A", i, sep = "")))
    colnames(e) <- paste("A", i, sep="")
    d <- merge(d,e)
}


d=as.matrix(t(d))
#answer=as.numeric(format(round(sum(ball_numbers %*% d)/ncol(d),1),nsmall=1))
answer = print(format(sum(ball_numbers %*% d)/ncol(d),nsmall=1, digits = 1), quote = F)
write.table(as.numeric(answer), sep = "", append=T, row.names = F, col.names = F,quote = FALSE,)

Me llegan por debajo de la salida de

[1] 2.0
2

que es diferente de la salida que se espera que esté por debajo. ¿Cómo puedo modificar mi código para obtener el formato correcto de salida

2.0
u puede utilizar readLines(file("stdin"))
sería posible para dar ejemplo? he utilizado la línea y escribió varios números. Pero aun así, se espera que más de entrada…no estoy seguro de cómo usarlo
Has probado a pulsar intro cuando termine de escribir?
Sí, me presiona entrar, pero sólo se lleva el cursor a la siguiente línea 🙁

OriginalEl autor user2543622 | 2015-08-18

4 Comentarios

  1. 13

    Mirar el “calentamiento”.

    data <- suppressWarnings(read.table("stdin", sep=" "));

    Alternativamente, usted puede utilizar

    data <- suppressWarnings(readLines(file("stdin")))

    También Consulte esta página en hackerrank

    gracias, que ayudó. Sería usted capaz de ayudarme con el update 2?
    No en mi pc ahora para probar, pero mi conjetura es que 1) no imprimir su respuesta y 2), se debe especificar dígitos al imprimir tu respuesta, pero en realidad no guardar ese valor en la tabla. Por lo que su valor de la tabla es 2 en lugar de la correcta 2.0
    Todavía no estoy claro…agradecería su ayuda una vez que están de vuelta a su ordenador
    Lo siento por la pregunta básica – ¿qué es “stdin” aquí? Es un archivo de entrada que tenemos que crear? Si sí, ¿cómo?

    OriginalEl autor scribbles

  2. 6

    Me enfrenté el problema similar para la lectura de la entrada en R en hackerrank . A continuación, el uso de readLines he utilizado los siguientes :

    input<-file('stdin', 'r')
    x <- readLines(input, n=1)

    U si quiero volver a leer otro de los datos y utilizar el mismo enfoque :

    y <- readLines(input, n=1)

    OriginalEl autor Vijay P R

  3. 1
    #---this solves the problem
    # Enter your code here. Read input from STDIN. Print output to STDOUT
    nums <- suppressWarnings(readLines(file("stdin")))
    #nums <- suppressWarnings(readLines(file("new.txt")))
    nums <- as.matrix(as.data.frame(t(nums)))
    class(nums) <- "numeric"
    
    steps=nums[1]
    ball_numbers=nums[2:length(nums)]
    d=as.data.frame(c(0,1))
    
    for (i in (1:(length(ball_numbers)-1)))
    {
      assign(paste("A", i, sep = ""),value = c(0,1))
      e <- as.data.frame(get(paste("A", i, sep = "")))
      colnames(e) <- paste("A", i, sep="")
      d <- merge(d,e)
    }
    
    
    d=as.matrix(t(d))
    answer=sum(ball_numbers %*% d)/ncol(d)
    write.table(cat(format(answer, nsmall=1), sep="\n"), sep = "", append=T, row.names = F, col.names = F)
    ¿a solucionar su propio problema? También en el futuro, usted obtendrá una mejor respuesta a sus preguntas si usted pide una pregunta por post. Después de contestar a la pregunta original, la gente es muy poco probable que revise las actualizaciones que en realidad son preguntas adicionales. Si la respuesta original que he proporcionado contestado a su pregunta original, por favor haga clic en la marca de verificación junto a la respuesta para que los demás sepan la pregunta es cerrada. Gracias.

    OriginalEl autor user2543622

  4. 0

    Otro enfoque:

    con = file('stdin', open ='r')
    input  = readLines(con)
    z = c()
    for(i in 2:length(input)){
      z = c(z, as.numeric(input[[i]]))
    }
    
    cat(format(round(sum(z)/2, 1), nsmall = 1), sep = "\n")

    OriginalEl autor Fisseha Berhane

Dejar respuesta

Please enter your comment!
Please enter your name here