20210107のGoに関する記事は3件です。

Goでアルゴリズムを学ぶ@全検索_線形検索法

Go基礎構文の理解と、アルゴリズム脳トレが目的です。

アルゴリズムについて

全検索とは

可能性をすべて調べ上げて問題を解決する手法です。
しらみつぶしに全て調べる手法ですね。仕事においても、問題に対して原因の切り分けができないときは多用してます。

線形検索法とは

一つ一つの要素を順番に調べていく検索方法です。
とりあえず頭から尻まで調べるといった、全検索の中で最も泥臭い部類じゃないでしょうか。

サンプルコード

ひとまずコード載せます。

main.go
package main

import "fmt"

func main() {
    l := []int{1, 2, 3, 4, 5}
    m := 5
    r := solve(l, m)
    fmt.Printf("%v", r)
}

func solve(a []int, b int) string {
    r := "NG"
    for i := 0; i < len(a); i++ {
        if a[i] == b {
            r = "ok"
        }
    }
    return r
}

簡単に解説

int型のスライス(配列)の中に特定の数値が含まれているか調べるコードです。
最初から最後の要素まで調べつくします。

    l := []int{1, 2, 3, 4, 5}
    m := 5

上記の時はfor文の最後のループ処理で数値が含まれていることを確認できましたが、

    l := []int{1, 2, 3, 4, 5}
    m := 1

このような場合は最初のループ処理以外は無駄な処理をしていますね。なので、以下のように書くほうが最適でしょう。

        if a[i] == b {
            r = "ok"
            break
        }

感想

とにかく全部調べるって単純で好きです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Go言語の条件分岐

Goの条件分岐

プログラミング基本からGoの理解を文字におこして行こうと思います!
Go言語の基本❶はこちら
Go言語の基本❷はこちら

条件分岐とは

ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変える

if文

package main
func main(){
  score := 100
  if score > 60 {
    println("合格") //条件が成り立つ時の処理
  }
}

//コンソール
合格

if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能

if文の条件式

package main
func main(){
  score := 100
  if score >= 60 {
    println("合格") //scoreが60より大きい時、もしくは等しい時に成り立つ
  }
}

//コンソール
合格

if文は、if 条件式 { 処理 } というように記述

真偽値

package main
func main(){
  score := 70
  println(score>60)
  println(score>80)
}

//コンソール
true
false

「真偽値型」には「true」と「false」という2つの値が存在

比較演算子を用いた条件式は、成り立つときは「true」
成り立たないときは「false」という値

比較演算子

package main
func main(){
  score := 100
  if score == 100 { //scoreが100の時true
  }
}
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true

比較演算子→等しいか調べる

代表的な比較演算子

//等しいか調べる
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true

//大小を比べる
x < y   右辺の方が大きい時 true
x > y   右辺の方が小さい時 true
x =< y  右辺の方が大きい、等しい時 true
x >= y  右辺の方が小さい、等しい時 true

else(条件に一致しない場合の処理)

package main
func main(){
  score := 50
  if score > 80 { 
    println("合格")
  } else {
      println("失格") //条件式の結果がfalseの時に実行
  }
}

//コンソール
失格

if文に「else」を組み合わせることで
「もし○○ならば●●を行う、そうでなければ▲▲を行う」という条件分岐ができる

else if(条件に一致しない場合、さらに条件分岐したい場合)

package main
func main(){
  score := 50
  if score == 100 { 
      println("卒業")
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
追試

else ifを用いると
「もし○○ならば●●を行う、△△ならば▲▲を行う、
どちらでもなければ□□を行う」という処理ができる

else if(2)

package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
卒業

「else if」はいくつでもつなげて書くことができる

上から順に条件が成り立つか判断され
最初に条件に合致した部分の処理だけが行われる

else if(2)

package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
卒業

かつ(&&)

package main
func main(){
  time := 12
  if time > 10 && time < 19 {
    println("仕事開始")
  }
}

&&を用いて複数の条件式を組み合わせると
全ての条件式がtrueの場合のみ全体としてtrueになる

//論理演算子
true && true      true
true && false     false
false && true     false
false && false    false

または(||)

package main
func main(){
  time := 15
  if time == 10 || time == 15 {
    println("おやつタイム")
  }
}

||を用いて複数の条件式を組み合わせると
複数の条件式のうち1つでもtrueであれば全体がtrueになる

//論理演算子
true  || true     true
true  || false    true
false || true     true
false || false    false

否定(!)

package main
func main(){
  time := 15
  if !(time == 16) {
    println("おやつタイムではない")
  }
}

!(条件式)とすると
条件式が「true」であれば「false」に、「false」であれば「true」

switch文

swich 条件の値 {
  case 値1:
    //処理
  case 値2:
    //処理
  case 値2:
    //処理
}

条件分岐にはif文のほかに、switch文という構文もある
条件の値がcaseの値と一致するとき、処理が実行

caseの後ろのコロン(:)などは忘れがちなので注意

if文とswitch文

//if文
x := 8
if x % 2 == 0 {
    println("偶数です")
} else if x % 2 == 1 {
    println("奇数です")
}
//switch文
x := 8
switch x % 2 {
  case 0: //一致
    println("偶数") //実行
  case 1:
    println("奇数")
}

switch文は「とある値(今回はx % 2)が何であるか」で処理を分けたいとき
(特にその分岐が多いとき)、if文よりシンプルに書ける場合がある

複数の値を指定する

//if文
year := 1994
if year == 1994 || year == 2005 { //1994がtrue
  println("私が産まれた年")
}else if year == 2000 {
   println("弟が産まれた年")
}
//switch文
year := 1994
switch year {
  case 1994,2005: //1994に一致
    println("私が産まれた年") //実行 
  case 2000:
    println("弟が産まれた年")
}

caseのあとの値は、コンマ(,)を用いて複数指定することができる

コンマで複数の値を指定すると
switchの値がいずれかに一致すれば、そのcaseの処理が実行

default

//if文
if rank == 1 {
     println("優勝")
} else if rank == 2 {
     println("準優勝")
} else if rank == 3 {
     println("3位")
} else {
     println("最下位")
}
//switch文
switch rank {
  case 1:
    println("優勝")
  case 2:
    println("準優勝")
  case 3:
    println("3位")
  default:
    println("最下位")

どのcaseとも一致しなかったときに実行する処理を、defaultに指定できる
if文のelseに似ている

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Go言語-条件分岐

条件分岐

プログラミング基本からGoの理解を文字におこして行こうと思います!
Go言語の基本❶はこちら
Go言語の基本❷はこちら

条件分岐とは

ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変える

if文

package main
func main(){
  score := 100
  if score > 60 {
    println("合格") //条件が成り立つ時の処理
  }
}

//コンソール
合格

if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能

if文の条件式

package main
func main(){
  score := 100
  if score >= 60 {
    println("合格") //scoreが60より大きい時、もしくは等しい時に成り立つ
  }
}

//コンソール
合格

if文は、if 条件式 { 処理 } というように記述

真偽値

package main
func main(){
  score := 70
  println(score>60)
  println(score>80)
}

//コンソール
true
false

「真偽値型」には「true」と「false」という2つの値が存在

比較演算子を用いた条件式は、成り立つときは「true」
成り立たないときは「false」という値

比較演算子

package main
func main(){
  score := 100
  if score == 100 { //scoreが100の時true
  }
}
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true

比較演算子→等しいか調べる

代表的な比較演算子

//等しいか調べる
x == y  左右の値が等しい時 true
x != y  左右の値が等しくない時 true

//大小を比べる
x < y   右辺の方が大きい時 true
x > y   右辺の方が小さい時 true
x =< y  右辺の方が大きい、等しい時 true
x >= y  右辺の方が小さい、等しい時 true

else(条件に一致しない場合の処理)

package main
func main(){
  score := 50
  if score > 80 { 
    println("合格")
  } else {
      println("失格") //条件式の結果がfalseの時に実行
  }
}

//コンソール
失格

if文に「else」を組み合わせることで
「もし○○ならば●●を行う、そうでなければ▲▲を行う」という条件分岐ができる

else if(条件に一致しない場合、さらに条件分岐したい場合)

package main
func main(){
  score := 50
  if score == 100 { 
      println("卒業")
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
追試

else ifを用いると
「もし○○ならば●●を行う、△△ならば▲▲を行う、
どちらでもなければ□□を行う」という処理ができる

else if(2)

package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
卒業

「else if」はいくつでもつなげて書くことができる

上から順に条件が成り立つか判断され
最初に条件に合致した部分の処理だけが行われる

else if(2)

package main
func main(){
  score := 100
  if score == 100 { 
      println("卒業") //以降の処理は実行されない
  } else if score >= 60 {
      println("合格")
  } else {
      println("追試")
 }
}

//コンソール
卒業

かつ(&&)

package main
func main(){
  time := 12
  if time > 10 && time < 19 {
    println("仕事開始")
  }
}

&&を用いて複数の条件式を組み合わせると
全ての条件式がtrueの場合のみ全体としてtrueになる

//論理演算子
true && true      true
true && false     false
false && true     false
false && false    false

または(||)

package main
func main(){
  time := 15
  if time == 10 || time == 15 {
    println("おやつタイム")
  }
}

||を用いて複数の条件式を組み合わせると
複数の条件式のうち1つでもtrueであれば全体がtrueになる

//論理演算子
true  || true     true
true  || false    true
false || true     true
false || false    false

否定(!)

package main
func main(){
  time := 15
  if !(time == 16) {
    println("おやつタイムではない")
  }
}

!(条件式)とすると
条件式が「true」であれば「false」に、「false」であれば「true」

switch文

swich 条件の値 {
  case 値1:
    //処理
  case 値2:
    //処理
  case 値2:
    //処理
}

条件分岐にはif文のほかに、switch文という構文もある
条件の値がcaseの値と一致するとき、処理が実行

caseの後ろのコロン(:)などは忘れがちなので注意

if文とswitch文

//if文
x := 8
if x % 2 == 0 {
    println("偶数です")
} else if x % 2 == 1 {
    println("奇数です")
}
//switch文
x := 8
switch x % 2 {
  case 0: //一致
    println("偶数") //実行
  case 1:
    println("奇数")
}

switch文は「とある値(今回はx % 2)が何であるか」で処理を分けたいとき
(特にその分岐が多いとき)、if文よりシンプルに書ける場合がある

複数の値を指定する

//if文
year := 1994
if year == 1994 || year == 2005 { //1994がtrue
  println("私が産まれた年")
}else if year == 2000 {
   println("弟が産まれた年")
}
//switch文
year := 1994
switch year {
  case 1994,2005: //1994に一致
    println("私が産まれた年") //実行 
  case 2000:
    println("弟が産まれた年")
}

caseのあとの値は、コンマ(,)を用いて複数指定することができる

コンマで複数の値を指定すると
switchの値がいずれかに一致すれば、そのcaseの処理が実行

default

//if文
if rank == 1 {
     println("優勝")
} else if rank == 2 {
     println("準優勝")
} else if rank == 3 {
     println("3位")
} else {
     println("最下位")
}
//switch文
switch rank {
  case 1:
    println("優勝")
  case 2:
    println("準優勝")
  case 3:
    println("3位")
  default:
    println("最下位")

どのcaseとも一致しなかったときに実行する処理を、defaultに指定できる
if文のelseに似ている

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む