《程序员的算法趣题》读后感
昨天晚上折腾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]
}
昨天晚上折腾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'
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
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书,感觉太费神,还是看纸书眼睛舒服些。但写代码还是要对着电脑,没法。
哈哈!
#!/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书,感觉太费神,还是看纸书眼睛舒服些。但写代码还是要对着电脑,没法。
哈哈!