Q07 日付の2進数変換

from htmlinsert(): Localfile, /amazontext, does not exist. Localfile, /amazontext, does not exist. Wiki page, /amazontext, does not exist.

回答(osx版)

gseq 19641010 20200724 | gdate -f- +%Y%m%d 2>/dev/null | awk '$0=$1";obase=2;"$1";obase=10"' | bc | gsed '2~2s/./& /g' | awk '{printf $0" "}NR%2==0{print ""}' | awk '{l=2;r=NF;while(l<=r){if($l!=$r)next;l++;r--}print $0}'

19660713 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 0 0 1
19660905 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 1
19770217 1 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 0 1
19950617 1 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 1 1 0 0 1
20020505 1 0 0 1 1 0 0 0 1 0 1 1 1 1 1 0 1 0 0 0 1 1 0 0 1
20130201 1 0 0 1 1 0 0 1 1 0 0 1 0 1 0 0 1 1 0 0 1 1 0 0 1

real	0m8.913s
user	0m10.720s
sys	0m2.224s

ブルートフォースなんで遅いですね。。。

解説

gseq 19641010 20200724                  # 探索期間内の日付を生成
| gdate -f- +%Y%m%d 2>/dev/null         # 日付として有効なものを抽出 
| awk '$0=$1";obase=2;"$1";obase=10"'   # 日付を2進数表示させるための bc スクリプト?を生成
| bc                                    # 日付と、2進数表示の生成
| gsed '2~2s/./& /g'                    # 2進数表示を1桁毎に分割
| awk '{printf $0" "}NR%2==0{print ""}' # 2行を1行に結合
| awk '{
  # 2進数の左端、右端から順に対象かを調べる
  l=2;
  r=NF;
  while(l<=r){
    # 非対称なら中断して次の入力データを処理
    if($l!=$r)next;
    # 対称だったら比較桁を移動
    l++;
    r--
  }
  # 左右対称な2進数表記を出力
  print $0
}'

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-24 (日) 07:44:02