Hacker Rank 30 Days Challenge in Golang

Day 0: Hello, World.

Task

To complete this challenge, you must save a line of input from stdin to a variable, print Hello, World. on a single line, and finally print the value of your variable on a second line.

package main

import (
    "fmt"
    "bufio"
    "os"
)
func main() {
    reader := bufio.NewReader(os.Stdin)
    inputString, _ := reader.ReadString('\n')
    fmt.Println("Hello, World.")
    fmt.Println(inputString)
}

Day 1: Data Type

Task
  1. Declare 3 variables: one of type int, one of type double, and one of type String.

  2. Read 3 lines of input from stdin (according to the sequence given in the Input Format section below) and initialize your 3 variables.

  3. Use the + operator to perform the following operations:

    1. Print the sum of i plus your int variable on a new line.

    2. Print the sum of d plus your double variable to a scale of one decimal place on a new line.

    3. Concatenate s with the string you read as input and print the result on a new line.

package main


import (
  "fmt"
  "os"
  "bufio"
  "strconv"
)

func main() {
    // Ignore this comment. You can still use the package "strconv".
    var _ = strconv.Itoa 
  
    var i uint64 = 4
    var d float64 = 4.0
    var s string = "HackerRank "

    scanner := bufio.NewScanner(os.Stdin)
    
    // Declare second integer, double, and String variables.
    var j uint64
    var e float64
    var t string

    // Read and save an integer, double, and String to your variables.
    scanner.Scan()
    j,_ = strconv.ParseUint(scanner.Text(), 0, 64)
    scanner.Scan()
    e,_ = strconv.ParseFloat(scanner.Text(), 32)
    scanner.Scan()
    t = scanner.Text()

    // Print the sum of both integer variables on a new line.
    fmt.Println(i+j)
 
    // Print the sum of the double variables on a new line.
    fmt.Printf("%.1f\n",d+e)
    
    // Concatenate and print the String variables on a new line
    // The 's' variable above should be printed first.
    fmt.Println(s+t)
}

Day 2: Operators

Task

Given the meal price (base cost of a meal), tip percent (the percentage of the meal price being added as tip), and tax percent (the percentage of the meal price being added as tax) for a meal, find and print the meal’s total cost.

package main

import "fmt"

var (
	mealCost float64
	tipPercent float64
	taxPercent float64
)

func main() {
	fmt.Scan(&mealCost)
	fmt.Scan(&tipPercent)
	fmt.Scan(&taxPercent)

	tip := mealCost*tipPercent/100
	tax := mealCost*taxPercent/100
	totalCost := mealCost + tip + tax
	fmt.Printf("The total meal cost is %v dollars.\n", int(totalCost+.5))
}

Day 3: Intro to Conditional Statements

Task

Given an integer,n, perform the following conditional actions:

If n is odd, print Weird

If n is even and in the inclusive range of 2 to 5, print Not Weird

If n is even and in the inclusive range of 6 to 20, print Weird

If n is even and greater than 20, print Not Weird

package main

import "fmt"

var n int

func main() {
	fmt.Scan(&n)
	if n%2 != 0 {
		fmt.Println("Weird")
	}
	if n%2 == 0 {
		for i:=2; i<6; i++ {
			if n == i {
				fmt.Println("Not Weird")
			}
		}
	}
	if n%2 == 0 {
		for i:=6; i<21; i++ {
			if n == i {
				fmt.Println("Weird")
			}
		}
	}
	if n%2 == 0 && n > 20 {
		fmt.Println("Not Weird")
	}
}

Day4: Class vs. Instance

Task

Write a Person class with an instance variable,age, and a constructor that takes an integer,initialAge, as a parameter. The constructor must assign initailAge to Age after confirming the argument passed as initialAge is not negative; if a negative argument is passed as initialAge, the constructor should set age to 0 and print Age is not valid, setting age to 0.. In addition, you must write the following instance methods:

1.yearPasses() should increase the instance variable by .

2.amIOld() should perform the following conditional actions:

  1. If age<13, print You are young..

  2. If age>= and , print You are a teenager..

  3. Otherwise, print You are old..

package main

import "fmt"

type person struct {
	age int
}

func (p person) NewPerson(initialAge int) person {
	//Add some more code to run some checks on initialAge
	if initialAge < 0 {
		p.age = 0
		fmt.Println("Age is not valid, setting age to 0.")
	}
	p.age = initialAge
	return p
}

func (p person) amIOld() {
	//Do some computation in here and print out the correct statement to the console
	if p.age < 13 {
		fmt.Println("You are young.")
	}
	if p.age > 12 && p.age < 18 {
		fmt.Println("You are a teenager.")
	}
	if p.age > 17 {
		fmt.Println("You are old.")
	}
}

func (p person) yearPasses() person {
	//Increment the age of the person in here
	p.age++
	return p
}


func main() {
	var T, age int

	fmt.Scan(&T)

	for i:=0; i<T; i++ {
		fmt.Scan(&age)
		p := person{age: age}
		p = p.NewPerson(age)
		p.amIOld()
		for j:=0; j<3; j++{
			p = p.yearPasses()
		}
		p.amIOld()
		fmt.Println()
	}
}