我一直在尝试HackerRank,其中问题通常需要将整数行读入数组(切片)。
对于许多问题,我的解析代码最终比解决方案的算法更大。例如,Sherlock and Array
就是这种情况关于如何简洁地将空格分隔的整数行解析成切片的任何想法? fmt.Scanf
不支持切片,使用bufio
时,我会得到很长的解决方案。
一些要求:
注意: 解析器应该只使用一行而不是完整的输入。
答案 0 :(得分:4)
嗯,我也遇到了一些黑客问题,这就是我提出的问题。通常,问题始于数组中的项目数:
func main() {
var N int
fmt.Scanf("%d", &N)
line := make([]int, N)
for i, _ := range line {
fmt.Scanf("%d", &line[i])
}
// Do something with the values
}
答案 1 :(得分:2)
您可以使用fmt.Scanf
,但需要跟踪您获得的值。
// a.go
package main
import (
"fmt"
"io"
)
func main() {
var (
next int
nums []int
)
for {
n, err := fmt.Scanf("%d", &next)
if err == io.EOF {
break
}
if err != nil {
panic(err)
}
if n == 0 {
break
}
nums = append(nums, next)
}
fmt.Printf("%#v\n", nums)
}
$ echo "4 8 15 16 23 42" | go run a.go
[]int{4, 8, 15, 16, 23, 42}
答案 2 :(得分:1)
1)读取字符串
2)在[
前加上]
3)将json解析为[] int?
var input = "1,2,3"
var answer []int
j := []byte(fmt.Sprintf("[%s]",input))
err:= json.Unmarshal(j, &input)
if err != nil {
panic(err)
}
for k,v := range input {
fmt.Printf("Element №%v is %v\n", k,v)
}
也使用拆分字符串(https://godoc.org/strings#Split) 和https://godoc.org/strconv#ParseInt
input:= "1,2,3"
temp := strings.Split(input, ",")
var answer []int
for _,v := range temp {
i,err := strconv.ParseInt(v)
if err != nill {
panic(err)
}
answer = append(answer, i)
}
UPD:刚发现这些数字是SPACE分开的。 所以,这段代码必须做的事情:
input:= "1 2 3"
temp := strings.Split(input, " ")
var answer []int
for _,v := range temp {
i,err := strconv.ParseInt(v)
if err != nill {
panic(err)
}
answer = append(answer, i)
}
答案 3 :(得分:1)
$(".linksrtitle").click(function(){
$(this).next(".linksrwrap").slideToggle(); // doesn't work
});
答案 4 :(得分:0)
我曾经在 hackerrank 中使用过这个(很简洁,但没有针对人类进行测试):
func scanInt(n int) []int {
input := make([]int, n)
buffer := make([]interface{}, n)
for i := 0; i < n; i++ {
buffer[i] = &input[i]
}
fmt.Scanln(buffer...)
return input
}
答案 5 :(得分:0)
func main(){
LOGOUT_REQUEST
}