Skip to content

Instantly share code, notes, and snippets.

@mikkun
Last active August 29, 2015 14:11
Show Gist options
  • Save mikkun/7475a38596a8d65170d5 to your computer and use it in GitHub Desktop.
Save mikkun/7475a38596a8d65170d5 to your computer and use it in GitHub Desktop.
「第14回東京居残りシェル芸勉強会&第32回蟹ではなくピザが出るUSP友の会定例会」解答例
2014/12/13「第14回東京居残りシェル芸勉強会」の解答例
問題URL: http://blog.ueda.asia/?p=4671
Togetterまとめ: http://togetter.com/li/757291
A1:
echo 'define f(x){if(x<=1)return(1);return(f(x-1)*x)};f(100)' | bc
A2:
seq 100 | sed '3~3c\Fizz' | sed '5~5c\Buzz' | sed '15~15c\FizzBuzz'
A2(別解):
seq 100 | sed -e '3~3s/.*/Fizz/' -e '5~5s/.*/Buzz/' -e '15~15s/.*/FizzBuzz/'
A3:
echo 0xaf 0x13 0x0d 0x24 0x58 | tr ' ' '\n' | sed 's/^0x//g' | while read n; do echo $((16#$n)); done | factor | awk 'NF==2{print $2}' | while read m; do echo "obase=16;$m" | bc | sed -e 's/\(.*\)/0x\1/g' -e's/0x\(.\)$/0x0\1/g'; done
A3(別解):
echo 0xaf 0x13 0x0d 0x24 0x58 | xargs printf '%d\n' | factor | awk 'NF==2{print $2}' | xargs printf '0x%02x\n'
A4:
echo e89fb9e3818ce9a39fe381b9e3819fe38184 | xxd -r -p
A5:
awk 'BEGIN{printf "aho\n";for(i=1;i<=1000000000-4;i++)printf "\0"}' > hoge
A6(予めcurlでWikipediaからYAMA.HTMLを作成):
cat YAMA.HTML | sed -n '/^<td>1<\/td>$/,$p' | sed '/^<\/table>$/,$d' | tr -d '\n' | sed 's/<\/tr><tr>/\n/g' | sed 's/<[^>]\+>/ /g' | sed 's/([^)]\+)//g' | sed 's/\. /./' | awk '{print $1,$2,$4}'
A6(別解):
cat YAMA.HTML | sed '/^<td>1<\/td>$/,/^<\/table>$/!d' | tr -d '\n' | sed 's/<\/tr><tr>/\n/g' | sed 's/<[^>]\+>/ /g' | sed 's/([^)]\+)//g' | sed 's/\. /./' | awk '{print $1,$2,$4}'
A7:
echo '1/4 + 2/5 + 7/16 - 5/9' | sed 's!/! / !g' | awk '{D=$3*$7*$11*$15;N=D/$3*$1+D/$7*$5+D/$11*$9-D/$15*$13;print N"\n"D}' | factor | cut -d ' ' -f 4- | tr ' ' '*' | bc | xargs | tr ' ' '/'
A8:
L='*****************************************************************'; for N in 15 1 5 3 1 10 1 5 2 1 5 1; do L=$(echo "$L" | sed '$s/^\(0*\)\(\*\{'$N'\}\)/\1\2\n\1'$(if [ $N -gt 1 ]; then printf %0$[N-1]d; fi)'/'); done; echo "$L" | tr '0' ' '
A8(ランダムに「グニャグニャ芸」できるようにした別解):
L='*****************************************************************'; for N in $(shuf -i 1-6 -n 30 -r); do L=$(echo "$L" | sed '$s/^\(0*\)\(\*\{'$N'\}\)/\1\2\n\1'$(if [ "$N" -gt 1 ]; then printf %0$[N-1]d; fi)'/'); done; echo "$L" | sed '/^0\+$/d' | tr '0' ' '
Special thanks to all the staff including @ryuichiueda and @nullpopopo!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment