108 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| 
 | |
| file="$1"
 | |
| 
 | |
| 
 | |
| gamma=""
 | |
| epsilon=""
 | |
| 
 | |
| countPositionBits(){
 | |
| 	ones=(0 0 0 0 0 0 0 0 0 0 0 0)
 | |
| 	#ones=(0 0 0 0 0)
 | |
| 	stdin="$(cat -)"
 | |
| 
 | |
| 	while read line; do
 | |
| 
 | |
| 		bitn=0
 | |
| 		while read bit; do
 | |
| 			if [ "$bit" -eq 1 ]; then
 | |
| 				ones[$bitn]=$((${ones[$bitn]} + 1))
 | |
| 			fi
 | |
| 			bitn=$(( bitn + 1 ))
 | |
| 		done < <(echo "$line" | grep -o .)
 | |
| 
 | |
| 
 | |
| 	done < <(echo "$stdin")
 | |
| 
 | |
| 	printf '%s\n' "${ones[@]}"
 | |
| 
 | |
| }
 | |
| 
 | |
| dots(){
 | |
| 	seq $i | sed 's/.*/./' | tr -d '\n'
 | |
| }
 | |
| 
 | |
| ogr="$(cat "$1")"
 | |
| csr="$(cat "$1")"
 | |
| 
 | |
| echo "OGR"
 | |
| 
 | |
| i=0
 | |
| while [ "$(echo "$ogr" | wc -l)" -gt 1 ]; do
 | |
| 	counts="$(echo "$ogr" | countPositionBits)"
 | |
| 	noofogr="$(echo "$ogr" | wc -l)"
 | |
| 	noofones="$( echo "$counts" | sed -n "$((i + 1))p" )"
 | |
| 	echo "$ogr"
 | |
| 	echo "No of ones $noofones"
 | |
| 	echo "No of ogr $noofogr"
 | |
| 	if [ "$((noofones * 10))" -ge "$(( noofogr * 10 / 2 ))" ]; then
 | |
| 		echo "Filtering only 1s in position $i"
 | |
| 		echo "^$(dots $i)1"
 | |
| 		ogr="$(echo "$ogr" | grep "^$(dots $i)1" )"
 | |
| 	else
 | |
| 		echo "Filtering only 0s in position $i"
 | |
| 		ogr="$(echo "$ogr" | grep "^$(dots $i)0" )"
 | |
| 	fi
 | |
| 	echo -e "\n---\n"
 | |
| 	i="$((i + 1))"
 | |
| done
 | |
| 
 | |
| echo "CSR"
 | |
| 
 | |
| i=0
 | |
| while [ "$(echo "$csr" | wc -l)" -gt 1 ]; do
 | |
| 	counts="$(echo "$csr" | countPositionBits)"
 | |
| 	noofcsr="$(echo "$csr" | wc -l)"
 | |
| 	noofones="$( echo "$counts" | sed -n "$((i + 1))p" )"
 | |
| 	echo "$csr"
 | |
| 	echo "No of ones $noofones"
 | |
| 	echo "No of csr $noofcsr"
 | |
| 	if [ "$((noofones * 10))" -ge "$(( noofcsr * 10 / 2 ))" ]; then
 | |
| 		echo "Filtering only 0s in position $i"
 | |
| 		echo "^$(dots $i)1"
 | |
| 		csr="$(echo "$csr" | grep "^$(dots $i)0" )"
 | |
| 	else
 | |
| 		echo "Filtering only 1s in position $i"
 | |
| 		csr="$(echo "$csr" | grep "^$(dots $i)1" )"
 | |
| 	fi
 | |
| 	echo -e "\n---\n"
 | |
| 	i="$((i + 1))"
 | |
| done
 | |
| 
 | |
| 
 | |
| ogrDecimal="$( echo "ibase=2; $ogr" | bc )"
 | |
| csrDecimal="$( echo "ibase=2; $csr" | bc )"
 | |
| 
 | |
| echo "Oxxygen Generator Rating: $ogr -> $ogrDecimal"
 | |
| echo "CO2 Scrubber Rating: $csr -> $csrDecimal"
 | |
| 
 | |
| echo "Answer: $((ogrDecimal * csrDecimal))"
 | |
| 
 | |
| 
 | |
| #while read i; do
 | |
| #	if [ "$i" -gt "$(( lines / 2 ))" ]; then
 | |
| #		gamma="${gamma}1"
 | |
| #		epsilon="${epsilon}0"
 | |
| #	else
 | |
| #		gamma="${gamma}0"
 | |
| #		epsilon="${epsilon}1"
 | |
| #	fi
 | |
| #done < <(echo "")
 | |
| #
 | |
| #gammaDecimal="$( echo "ibase=2; $gamma" | bc )"
 | |
| #epsilonDecimal="$( echo "ibase=2; $epsilon" | bc )"
 | |
| #
 | |
| #echo "Gamma: $gamma -> $gammaDecimal"
 | |
| #echo "Epsilon: $epsilon -> $epsilonDecimal"
 | |
| #
 | |
| #echo "Answer: $((gammaDecimal * epsilonDecimal))"
 |