Skip to content

Instantly share code, notes, and snippets.

View greymd's full-sized avatar
😉
Nanchatte

Yasuhiro Yamada greymd

😉
Nanchatte
View GitHub Profile
@greymd
greymd / progress_sed.sh
Last active October 29, 2016 23:08
25回シェル芸回答
$ seq 1 100 | awk 'BEGIN{a="*"}{print a;a=a"*";system("sleep 1")}' | stdbuf -oL sed 's/...../#####/g' | xargs -I@ echo -ne @"\r"
$ seq 1 10 360 |awk '{print int(sin($0*3.14/180)*10)+10}'|perl -nle 'printf "_ " x $_."*"; print " _" x (20 - $_)'|rs -T|tr _ ' '
@greymd
greymd / base64sh.sh
Created November 3, 2016 08:15
base64 encoder given by build-in linux commands.
base64sh() {
local input=${1:-$(cat)}
paste <(seq 0 63 | sed 's/^/obase=2;ibase=10;/' | bc | sed 's/^/00000/' | grep -oE '.{6}$') \
<(echo {A..Z} {a..z} {0..9} + / | xargs -n 1) | \
awk '{print "s|"$1"|"$2"|"}' | \
sed -f - <(echo -n $input| perl -ne 'print unpack("B*", $_)."0000"' | \
fold -w 6 | grep -oE '.{6}$') | tr -d '\n' | fold -w 4 | sed 's/$/===/' | grep -oE '^.{4}' | tr -d '\n' | awk 1
}
# Usage: base64sh
@greymd
greymd / ppow.rb
Created November 15, 2016 09:31
Rubyでの繰り返し二乗法
# coding: utf-8
# 参考: http://judge.u-aizu.ac.jp/onlinejudge/commentary.jsp?id=NTL_1_B
def ppow(x, n)
return 1 if n == 0
return ppow(x**2, n / 2) if (n % 2) == 0
return ppow(x**2, n / 2) * x if (n % 2) == 1
end
p ppow(3,21)
@greymd
greymd / powcompare.sh
Last active November 15, 2016 10:33
シェル上での冪乗計算の速さ比較
# ruby
$ time bash -c 'ruby -e "print 12345**54321"' >/dev/null
bash -c 'ruby -e "print 12345**54321"' > /dev/null 0.57s user 0.37s system 91% cpu 1.027 total
# bc
$ time bash -c 'echo "12345^54321" | bc' >/dev/null
bash -c 'echo "12345^54321" | bc' > /dev/null 3.15s user 0.06s system 81% cpu 3.942 total
# python
$ time bash -c 'echo "print pow(12345,54321)" | python' >/dev/null
@greymd
greymd / pow.sh
Last active November 15, 2016 11:36
Power operation by Shell Script
#!/bin/bash
# Usage
# $ pow.sh x n
# result = x^n
calc () {
echo "$1" | bc | tr -dc '[-0-9]'
}
P=$1
@greymd
greymd / pack_unpack_practice.md
Last active July 10, 2021 14:04
pack/unpack 練習

Perl書くくせにpack/unpackの動作が全然わからなかったため休日に少し練習。 以下、チラシの裏程度のメモ書き。校正しておらず、自分が思いついた思考の順序で一発書きしたもの。 たぶん間違えた内容を含んでます。

pack

packは、引数に配列、あるいは文字列を受け取って、それを規則に従ってバイナリに変換する。

入力: 配列 or 文字列 出力: バイナリ

@greymd
greymd / repeat_str_n_times.md
Last active November 21, 2016 10:31
Let's repeat same string n times on your terminal.

How repeat same string n times. For example, let's repeat "HAGE" 256 times.

printf + sed

$ printf "%256s\n" | sed 's/ /HAGE/g'

Brace expansion

@greymd
greymd / trigger.sh
Created November 27, 2016 10:28
gradle trigger
#!/bin/bash -xv
# Dependencies
# * fswatch
# $ brew install fswatch
THIS_DIR=$(cd $(dirname $0) && pwd)
SEMAPHORE="/tmp/automake.$$"
while ps $$ > /dev/null ; do
@greymd
greymd / gist:9cbd72164301d2fca8c4c302647072b7
Created November 27, 2016 14:27
巨大素数生成シェル芸
$ cat /dev/urandom| LANG=C tr -dc '0-9' | fold -w 70 | grep -v '^0' | xargs -n 1 openssl prime -hex | awk '!/not/{print $1;}'
@greymd
greymd / advent_count.sh
Last active December 8, 2016 09:44
QiitaのAdventCalendarのいいねの数をカウントするスクリプト
#!/bin/bash
# Dependencies
# curl, perl, paste, sort, uniq, awk
curl -so- $1 | \
perl -nle 'print $_ for (m/(?<=<a href=")(http:\/\/qiita.com\/[^"]+\/items\/[^"]+)">(.*?)(?=<\/a>)/g)' | \
paste - - | sort | uniq | \
while read url title; do echo $(curl -so- $url | grep -oP '(?<=<span class="js-likecount">)\d+(?=</span>)')"\t$title\t$url" ;done | \
awk -F'\t' '{s+=$1;print $0}END{print "SUM: "s}'