トップ «前の日記(2016-05-03(Tue)) 最新 次の日記(2016-05-05(Thu))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2016-05-04(Wed) からりと

バックスラッシュとカンマで

展開。

'( (+ 1 2) 4 5 6)
gosh> ((+ 1 2) 4 5 6)
`(,(+ 1 2) 4 5 6)
gosh> (3 4 5 6)

フィルタしてみた

ついでに一部を省略。

(defun ncdr(lat) ()
  (numfilter (cdr lat)))
(defun numfilter (lat)
  (cond
   ((null lat) nil)
   ((numberp (car lat)) (ncdr lat))
   (t
    (cons (car lat) (ncdr lat)))))
 
(numfilter '(1 2 a b c 3 d 5))
(a b c d)

さらについでに括弧の中も

今度は数字の方を。

(define atom?
  (lambda (n)
    (and (not (pair? n))
         (not (null? n)))))
 
(define SREC
  (lambda (l)
    (strfilter* (cdr l))))
 
(define strfilter*
  (lambda (l)
    (cond
     ((null? l) '())
     ((atom? (car l))
      (cond
       ((number? (car l))
        (cons (car l) (SREC l)))
       (else
        (SREC l))))
     (else
      (cons (strfilter* (car l))
            (SREC l))))))
(strfilter* '(10 (21 (a 32) bb) ccc 43 dddd))
gosh> (10 (21 (32)) 43)

検査用数字のはなし

...が少し面白かった。0の出る確率が他よりずっと 高い(間違いを見逃しやすい...は、もう少し先にある話のようだけど) ということをちょっと試す。

#!/usr/bin/env python
import random
random.seed()
 
example = random.randint(10000000000, 99999999999)
 
numlist = []
for x in range(1,12):
  numlist.append( (example % (10**x))/(10**(x-1)))
 
checkdigit = \
   11 - (\
   numlist[0]*2 + \
   numlist[1]*3 + \
   numlist[2]*4 + \
   numlist[3]*5 + \
   numlist[4]*6 + \
   numlist[5]*7 + \
   numlist[6]*2 + \
   numlist[7]*3 + \
   numlist[8]*4 + \
   numlist[9]*5 + \
   numlist[10]*6)  \
   % 11
 
if checkdigit >= 10:
  checkdigit = 0
 
print checkdigit

で、1000回繰り返して頻度確認。
細かいところで間違ってる可能性は後で(多分確認しない)。
Core i5 2.4GHzの8GBで22秒ほどかかった。

$ for x in `seq 1000`
> do
>   python checkdigit.py 
> done | 
> sort | uniq -c | sort -nr | cat -n
     1	    190 0
     2	    109 9
     3	    100 1
     4	     99 2
     5	     96 8
     6	     86 7
     7	     85 4
     8	     81 6
     9	     79 5
    10	     75 3

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。