Skip to content

Instantly share code, notes, and snippets.

@bbuck
Last active December 20, 2020 23:00
Show Gist options
  • Save bbuck/8cb4a69e6e9b9deb1fa9 to your computer and use it in GitHub Desktop.
Save bbuck/8cb4a69e6e9b9deb1fa9 to your computer and use it in GitHub Desktop.
Solutions to a hacker rank problem demonstrating slowness in Go.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Split(bufio.ScanWords)
scanner.Scan()
t, _ := strconv.Atoi(scanner.Text())
for x := 0; x < t; x++ {
scanner.Scan()
n, _ := strconv.Atoi(scanner.Text())
total := 0
values := make([]int, n)
for i := 0; i < n; i++ {
scanner.Scan()
value, _ := strconv.Atoi(scanner.Text())
total += value
values[i] = value
}
left := total
right := 0
result := "NO"
for i := 0; i < n; i++ {
left -= values[i]
if right == left {
result = "YES"
break
}
right += values[i]
}
fmt.Println(result)
}
}
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
var t int
fmt.Fscanf(reader, "%v\n", &t)
for x := 0; x < t; x++ {
var n, total, value int
fmt.Fscanf(reader, "%v", &n)
values := make([]int, n)
for i := 0; i < n; i++ {
fmt.Fscanf(reader, "%v", &value)
total += value
values[i] = value
}
left := total
right := 0
result := "NO"
for i := 0; i < n; i++ {
left -= values[i]
if right == left {
result = "YES"
break
}
right += values[i]
}
fmt.Println(result)
}
}
#include <stdio.h>
#include <stdlib.h>
int main(void) {
long t = 0;
long n = 0;
long *values;
scanf("%ld", &t);
for (long x = 0; x < t; x++) {
scanf("%ld", &n);
long total = 0;
long value = 0;
values = malloc(sizeof(long) * n);
for (long i = 0; i < n; i++) {
scanf("%ld", &value);
total += value;
values[i] = value;
}
long left = total;
long right = 0;
int yes = 0;
for (long i = 0; i < n; i++) {
left -= values[i];
if (right == left) {
yes = 1;
break;
}
right += values[i];
}
printf("%s\n", (yes ? "YES" : "NO"));
free(values);
}
}
package main
import "fmt"
func main() {
var t int
fmt.Scanf("%v", &t)
for x := 0; x < t; x++ {
var n, total, value int
fmt.Scanf("%v", &n)
values := make([]int, n)
for i := 0; i < n; i++ {
fmt.Scanf("%v", &value)
total += value
values[i] = value
}
left := total
right := 0
result := "NO"
for i := 0; i < n; i++ {
left -= values[i]
if right == left {
result = "YES"
break
}
right += values[i]
}
fmt.Println(result)
}
}
@bbuck
Copy link
Author

bbuck commented Sep 30, 2015

@robpike, Thanks for input - I definitely should have done - totally a failure on me. I haven't used Scan or Scanf a lot (actually never until I started doing these challenges) so I'm relatively new to their offerings. I'll comb over it again doing my due diligence.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment