《程序员的算法趣题》读后感

57 篇文章 0 订阅
《程序员的算法趣题》读后感
昨天晚上折腾camping1.0版本,想把example下的例子调通,老是弄不通。后来升级到最新版本,还是测试不通。
早上,就读《ruby元编程》,读读书后,就接着玩电脑。先把linux的命令行改成vi模式。
cd ~
vi .profile
加入set -o vi
再生效。
. .profile
再安装shell js,实在没找到,就安装node.js
因为要通过终端调用js脚本。
然后,就把书上的例子,照着输入。再用《unix编程环境》中的bundle方法,把全部脚本合成一个文件,如下:
echo q01_01.rb 1>&2
cat >q01_01.rb <<'End of q01_01.rb'
num=11
while true
 if num.to_s == num.to_s.reverse &&
  num.to_s(8) == num.to_s(8).reverse
   puts num
#   break
 end
 num += 2
end
End of q01_01.rb
echo q03_01.rb 1>&2
cat >q03_01.rb <<'End of q03_01.rb'
N=100
cards=Array.new(N,false);
(2..N).each {|i|
 j=i-1;
 while (j<cards.size) do
  cards[j]=!cards[j]
  j += i
 end
}  
N.times {|i|
 puts i+1 if !cards[i]
}
End of q03_01.rb
echo q04_01.rb 1>&2
cat >q04_01.rb <<'End of q04_01.rb'
def cutbar(m,n,current)
 if current >=n then
  0
 elsif current <m then
  1+cutbar(m,n,current*2)
 else
  1+cutbar(m,n,current+m)
 end
end
puts cutbar(3,20,1)
puts cutbar(3,8,1)
End of q04_01.rb
echo q05_03.rb 1>&2
cat >q05_03.rb <<'End of q05_03.rb'
@cnt=0
def change(target,coins,usable)
 coin=coins.shift
 if coins.size==0 then
  @cnt +=1 if target / coin <= usable
 else
  (0..target/coin).each {|i|
   change(target-coin*i,coins.clone,usable-i)
  }
 end  
end  
change(1000,[500,100,50,10],15)
puts @cnt
End of q05_03.rb
echo q06_01.rb 1>&2
cat >q06_01.rb <<'End of q06_01.rb'
def is_loop(n)
 check=n*3+1
 while check !=1 do
  check=check.even? ? check/2:check*3+1
  return true if check ==n
 end
 return false
end
puts 2.step(10000,2).count {|i|
 is_loop(i)
}
End of q06_01.rb
echo q07_01.rb 1>&2
cat >q07_01.rb <<'End of q07_01.rb'
require 'date'
term =Date.parse('19641010')..Date.parse('20200724')
term_list=term.map{|d| d.strftime('%Y%m%d').to_i}
puts term_list.select {|d| d==d.to_s(2).reverse.to_i(2) }
End of q07_01.rb
echo q01_02.js 1>&2
cat >q01_02.js <<'End of q01_02.js'
String.prototype.reverse=function() {
 return this.split("").reverse().join("");
}
var num=11;
while (true) {
 if ( (num.toString() == num.toString().reverse() ) &&
  (num.toString(8)== num.toString(8).reverse() ) ){
  console.log(num);
 }
 num +=2;
}
End of q01_02.js
echo q02_01.js 1>&2
cat >q02_01.js <<'End of q02_01.js'
var op=["+","-","*","/",""];
for(i=1000;i<10000;i++) {
 var c=String(i);
 for(j=0;j<op.length;j++) {
  for(k=0;k<op.length;k++) {
   for(l=0;l<op.length;l++) {
    val = c.charAt(3) + op[j] + c.charAt(2) + op[k] +
     c.charAt(1) + op[l] + c.charAt(0);
    if (val.length > 4 ) {
     if (i==eval(val)) {
      console.log(val+"="+i);
     }
    }
   }
  }
 }
 //console.log(c);
}
End of q02_01.js
这个bundle.sh的源码如下:
#!/bin/bash
for i
do
 echo "echo $i 1>&2"
 echo "cat >$i <<'End of $i'"
 cat $i
 echo "End of $i"
 done
感觉还是每天写写博客,也算每天都做了事。
《unix编程环境》是本神书,这些牛人写的书都非常经典。早晨想对着电脑看pdf书,感觉太费神,还是看纸书眼睛舒服些。但写代码还是要对着电脑,没法。
哈哈!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值