언제 만들었는지는 잘 기억도 안나지만.....폴더 구석에서 찾은 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가 일치하지 않아서 바로 오류가 나버리는 급조한 프로그램... 

 

반응형

터미널 프로그램의 한 종류로 주로 사용하는 minicom

 

minicom에 출력되는 로그들을 아래와 같은 방법으로 저장할 수 있다.

 

1. minicom을 실행한다.

2. minicom 메뉴창을 연다.

 - CTRL + A 를 동시에 누르고, Z를 누른다.

 - CTRL + A 를 눌러도 화면이 변화하거나 바뀌는 것은 없지만 메뉴창을 열기 위한 과정이다.

3. Capture on/off를 선택하기 위해 'L'을 누른다. 

4. Capture 파일 이름을 적는다.

5. 엔터를 눌러 캡쳐를 시작한다.

 - Capture 파일은 터미널을 실행한 위치에 생성된다. 

6. 캡쳐를 멈추거나 종료하고 싶으면 다시 메뉴창을 열어 Capture on/off 항목을 선택한다.

7. Close를 누르면 Capture를 종료하고 Pause를 누르면 캡쳐를 잠시 멈춘다.

반응형

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째짜리 까지 표현하는 문제

 

반응형

+ Recent posts