บ่น CodeSignal และภาษาอังกฤษ

คือ ผมทำ CodeSignal อยู่เรื่อยๆ พยายามแบ่งเวลามาทำเรื่อยๆ
แต่ปัญหาก็คือ บางครั้งโจทย์ยาวมาก และผมแปลผิด นั้นทำให้เขียนโปรแกรมเท่าไหร่ก็ไม่ผ่าน

ตัวอย่าง

แล้วผมบ้าบอ อะไรก็ไม่รู้คิดไปเองหลายๆอย่าง และนี่ไม่ใช่ครั้งแรก

พอมานึกดูดีๆ ผมเจอแบบนี้บ่อย และข้อนี้ผมก็จำได้ว่า ให้หา number of candidate ไม่ใช่ index แต่พอเราหยุดเขียน เพราะติดงาน หรือติดอื่นๆ กลับมาเขียนใหม่ มันก็จะลืม แล้วก็หา index เหมือนเดิมมมม บ้าาาาาาา

พอผมเข้าใจโจทย์ ผมเขียนรอบเดียวผ่าน ผ่านแบบไม่ได้ทดสอบ test อะไรเลย

ผมเลยหงิดหงุดกับภาษาอังกฤษตัวเองมากกกก ทำไมถึงแย่ขนาดนี้

func electionsWinners(votes []int, k int) int {
    count:=0
    for i:=0;i<len(votes);i++{
        ik:=votes[i]+k
        flagK:=true
        for j:=0;j<len(votes);j++{
          if i == j{
              continue
          }  
          if ik <= votes[j]{
              flagK=false
              break
          }
        }
        if flagK{
            count++
        }
    }
    return count
}

func electionsWinners2(votes []int, k int) int {
    
    maxValue:=votes[0]
    maxIndex:=0
    for i:=0;i<len(votes);i++{
        if votes[i] >= maxValue {
            maxValue = votes[i]
            maxIndex = i
        }
    }
    fmt.Println(maxValue,maxIndex+1)
    max2Value:=votes[0]
    max2Index:=0
    for i:=0;i<len(votes);i++{
        if max2Value != maxValue && votes[i] > max2Value && votes[i] != maxValue {
            max2Value = votes[i]
            max2Index = i
        }
    }
    fmt.Println(max2Value,max2Index+1)
   
   // Test 1
   if max2Value+k > maxValue && max2Value != maxValue{
        return max2Index+1
    } 
   if maxValue+k == max2Value+k {
        // Test 3
        if maxIndex == max2Index{
            return maxIndex+1    
        }
        // Test 5
        if maxValue+k==maxValue && max2Value+k == max2Value{
            return 0
        }
        // Test 4
        if maxIndex > max2Index{
            return maxIndex+1    
        }
    }
    
    
    
    return 0
}

func electionsWinners1(votes []int, k int) int {
    if k == 0 {
        maxValue:=0
        maxvalueIndex:=0
        dup:=0
        for i:=0;i<len(votes);i++{
            if votes[i] > maxValue {
                maxValue = votes[i]
                maxvalueIndex=i
            }
            if maxValue == votes[i] {
                    dup++
            }
        }
        if dup >= 2{
            return 0
        }else{
            return maxvalueIndex+1
        }
    }
    // case dup all
    s:=votes[0]
    flag:=true
    for _,v:=range votes{
        if v != s{
            flag = false
            break
        }
    }
    if flag {
        return len(votes)
    }
    // step 1 find max
    maxValue:=0
    maxValueIndex:=0
    for i:=0;i<len(votes);i++{
        if votes[i] > maxValue {
            maxValue = votes[i]
            maxValueIndex = i
        }
    }
    // step 2 compare with out maxValue
    plusVotes:=make([]int,len(votes))
    saveIndex:=[]int{}
    for i,v:=range votes{
        if i != maxValueIndex{
            // TODO: fix
            if maxValue == votes[i]{
                plusVotes[i] = v
                saveIndex = append(saveIndex,i)    
                continue
            }
            plusVotes[i] = v+k
        }else{
            plusVotes[i] = v
            saveIndex = append(saveIndex,i)    
        }
    }
    // fmt.Println(maxValue,maxValueIndex+1,plusVotes)
    // step 3 find max
    maxValue=0
    maxValueIndex=0
    for i:=0;i<len(plusVotes);i++{
        if plusVotes[i] >= maxValue {
            if maxValue != plusVotes[i]{
                f:=true
                for _,si:=range saveIndex {
                    if si == i {
                        f = false
                        break
                    }
                }
                if f {
                    maxValue = plusVotes[i]
                    maxValueIndex = i        
                }
                
            }
        }
    }
    return maxValueIndex+1
}

ไอที่ยาวๆ คือผิด ส่วนสั้นๆ func เดียว ทีเดียวผ่านนนน บ้าบอออออออ