언제 만들었는지는 잘 기억도 안나지만.....폴더 구석에서 찾은 Go를 이용한 크기가 동일한 2개 파일이 같은지 비교하는 프로그램

(평문을 암호화했다가 다시 복호화해서 원본과 같은지 잠깐 확인해보려고 했던가...?)

 

main은 간단히 보면 파일 2개를 읽어서 비교, 일치하면 OkCnt 증가 

var bufSize = 512

func main() {
	file1 := os.Args[1]
	file2 := os.Args[2]

	f1, idx1 := readFile(file1)
	f2, _ := readFile(file2)
	okCnt := 0
	match := 0
	for i := 0; i < idx1+1; i++ {
		match = 0
		for j := 0; j < len(f1[idx1]); j++ {
			if f1[idx1][j] != f2[idx1][j] {
				fmt.Println("not match")
				match = 1
			}
		}
		if match == 0 {
			okCnt++
		}
	}
	fmt.Println("okcnt : ", okCnt)
}

 

 

파일을 읽을 때 사용한 함수 

파일 전체 크기를 버퍼 크기 512바이트를 기준으로 나누고 [][]byte를 만들어 파일을 모두 읽음

해당 읽은 파일의 버퍼와 Index수를 반환하는 함수

func readFile(inputFile string) ([][]byte, int) {
	file, err := os.Open(inputFile)
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	testBufSize := bufSize
	fileStat, err := file.Stat()
	if err != nil {
		fmt.Println(err)
		return nil, -1
	}
	fb := bufio.NewReader(file)
	var fileData [][]byte
	fileSize := fileStat.Size()
	idx := int(fileSize) / testBufSize
	remain := int(fileSize) % testBufSize
	fmt.Println("filesize : ", fileSize, "idx :", idx, "remain", remain)
	if remain != 0 {
		idx = idx + 1
	}
	fileData = make([][]byte, idx)

	dataIdx := 0
	// filelen := 0

	for i := 0; i < idx; i++ {
		if remain != 0 {
			if i == idx-1 {
				fileData[i] = make([]byte, remain)
				// filelen += len(decryptDataBuf[i])
				io.ReadFull(fb, fileData[dataIdx])
				// fmt.Println("F Len ", filelen, "dlen :", len(fileData[dataIdx]))
				break
			}
		}
		fileData[i] = make([]byte, testBufSize)
		// filelen += len(decryptDataBuf[i])

		io.ReadFull(fb, fileData[dataIdx])
		// fmt.Println("F Len ", filelen, "dlen :", len(fileData[dataIdx]))
		dataIdx++
	}

	return fileData, dataIdx

}

 

실제 동일한 파일을 이름만 바꾸어 테스트한 결과와 크기가 다른 파일을 테스트한 결과 

크기가 다른 파일이면 버퍼의 index가 일치하지 않아서 바로 오류가 나버리는 급조한 프로그램... 

 

반응형

https://www.hackerrank.com/challenges/weather-observation-station-19/problem

 

Weather Observation Station 19 | HackerRank

Query the Euclidean Distance between two points and round to 4 decimal digits.

www.hackerrank.com

Euclidean 거리를 구하여 소수점 4자리까지 출력하는 문제

반응형

https://www.hackerrank.com/challenges/weather-observation-station-18/problem

 

Weather Observation Station 18 | HackerRank

Query the Manhattan Distance between two points, round or truncate to 4 decimal digits.

www.hackerrank.com

Manhattan Distance를 구하여 소수점 4자리까지 출력하는 문제 

Manhattan Distance = | x1 - x2 | + | y1 - y2 |

반응형

https://www.hackerrank.com/challenges/weather-observation-station-16/problem

 

Weather Observation Station 16 | HackerRank

Query the smallest of STATION's Northern Latitudes that is greater than 38.7780, and round to 4 decimal places

www.hackerrank.com

 

Query the smallest Northern Latitude (LAT_N) from STATION that is greater than 38.7880. Round your answer to  4 decimal places.

Input Format

The STATION table is described as follows:

38.7880보다 큰 LAT_N 중 가장 작은 LAT_N을 반올림하여 소수점 4자리까지 출력

 

https://www.hackerrank.com/challenges/weather-observation-station-17/problem

 

Weather Observation Station 17 | HackerRank

Query the Western Longitude for the smallest value of the Northern Latitudes greater than 38.7780 in STATION and round to 4 decimal places.

www.hackerrank.com

Query the Western Longitude (LONG_W)where the smallest Northern Latitude (LAT_N) in STATION is greater than 38.7880. Round your answer to 4 decimal places.

Input Format

The STATION table is described as follows:

38.7880보다 큰 LAT_N 중 가장 작은 LAT_N의 LONG_W를 반올림하여 소수점 4자리까지 출력 

 

반응형

https://www.hackerrank.com/challenges/weather-observation-station-15/problem

 

Weather Observation Station 15 | HackerRank

Query the Western Longitude for the largest Northern Latitude under 137.2345, rounded to 4 decimal places.

www.hackerrank.com

Query the Western Longitude (LONG_W) for the largest Northern Latitude (LAT_N) in STATION that is less than 137.2345. Round your answer to 4 decimal places.

Input Format

The STATION table is described as follows:

137.2345보다 작은 LAT_N 중 가장 큰 LAT_N을 가진 LONG_W를 소수점 4자리에서 반올림

반응형

https://www.hackerrank.com/challenges/weather-observation-station-14/problem 

 

Weather Observation Station 14 | HackerRank

Query the greatest value of the Northern Latitudes from STATION that are under 137.2345 and truncated to 4 decimal places.

www.hackerrank.com

Query the greatest value of the Northern Latitudes (LAT_N) from STATION that is less than 137.2345. Truncate your answer to 4 decimal places.

Input Format

The STATION table is described as follows:

137.2345 보다 작은 LAT_N 중 가장 큰 LAT_N을 소수점 4자리까지 표현

반응형

https://www.hackerrank.com/challenges/weather-observation-station-13/problem 

 

Weather Observation Station 13 | HackerRank

Query the sum of Northern Latitudes having values greater than 38.7880 and less than 137.2345, truncated to 4 decimal places.

www.hackerrank.com

Query the sum of Northern Latitudes (LAT_N) from STATION having values greater than 38.7880 and less than 137.2345. Truncate your answer to  4 decimal places.

Input Format

The STATION table is described as follows:

 

LAT_N이 38.7880 보다 크고 137.2345 보다 작은 수들의 합을 구하고 소수점 4째짜리 까지 표현하는 문제

 

반응형

https://www.hackerrank.com/challenges/weather-observation-station-11/problem

 

Weather Observation Station 10 | HackerRank

Query a list of CITY names not ending in vowels.

www.hackerrank.com

Query the list of CITY names from STATION that either do not start with vowels or do not end with vowels. Your result cannot contain duplicates.

Input Format

The STATION table is described as follows:

a,e,i,o,u로 시작하지 않거나 a,e,i,o,u로 끝나지 않는 CITY를 찾는 문제

 

https://www.hackerrank.com/challenges/weather-observation-station-12/problem

 

Weather Observation Station 12 | HackerRank

Query an alphabetically ordered list of CITY names not starting and ending with vowels.

www.hackerrank.com

a,e,i,o,u로 시작하지 않고 a,e,i,o,u로 끝나지 않는 CITY를 찾는 문제

반응형

+ Recent posts