tag:blogger.com,1999:blog-373262372024-03-13T22:09:47.581+08:00神奇! 搞大數位娛樂的肚子-狂想空間這是屬於菠蘿麵包的地方,發表一些與數位家庭產品、觸控螢幕等工作上相關技術的心得。議題包括 embedded linux, 數位家庭, User Interface, 多點觸控。我喜歡狂想、自由,因此有時天馬行空任我遨遊,也希望您能喜歡這裡,一起享受自由的精神,當一個快樂的精靈。歡迎<a href="http://wadefs.blogspot.com/atom.xml">訂閱 Wonderfully Abdominous Digital Entertainment - Fantasy Space</a>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.comBlogger425125tag:blogger.com,1999:blog-37326237.post-34086384898834239172024-02-22T09:30:00.000+08:002024-02-22T09:30:13.683+08:00using video to long exposure photos 用固定攝影來實現長曝光照片<p> <span style="-webkit-text-stroke-width: 0px; background-color: #0a7cff; color: white; display: inline !important; float: none; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">供參考,我在想,長曝光是不是可以用固定攝影來轉成長曝光效果,有待驗證,
但是這個想法可以用底下的命令來實現, 系統中要安裝 ffmpeg, imagemagick
# 底下存成 video2image.sh, 其中 RATE 是指要從影片一秒抓幾張圖(不是影片本身的 fps)
# Usage: video2image.sh MP4_FILE RATE
MP4=$1; shift
[ -z $MP4 ] && echo "Usage: %0 MP4_FILE RATE" && exit 1
RATE=$1; shift
[ -z $RATE ] && RATE=1
mkdir out
echo "ffmpeg -i ${MP4} -r ${RATE} out/%04d.jpg"
ffmpeg -i ${MP4} -r ${RATE} out/%04d.jpg
ls out/*
cp out/0001.jpg oo.jpg
N=$(\ls out/*jpg | wc -l)
echo "N=$N"
for i in $(seq 2 1 ${N} ); do
F=$(printf "%04d" $i)
echo "convert out/${F}.jpg oo.jpg -compose overlay -composite oo.jpg"
convert out/${F}.jpg oo.jpg -compose overlay -composite oo.jpg
done
rm -rf out</span></p><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-25753446722005199092021-11-28T11:49:00.001+08:002021-11-28T11:50:38.341+08:00DualBoot with freedos最近又用到 freedos, 想把 mx-linux + freedos 放在一顆 8GB 的隨身碟,<br />
懶得說太多,有問題的朋友請回覆<br />
先說 grub.cfg 怎麼下:<br />
<pre>menuentry "FreeDOS testing" {
insmod part_msdos
freedos (hd0,msdos1)/KERNEL.sys
}
</pre>
沒錯,上面跟在 google 找到的都不太一樣,自行揣摩一下囉,這個是真的能動的<br />
<br />
我用的是 freedos 1.3 rc4(版本不重要) 的 <a href="https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.3/previews/1.3-rc4/FD13-LiveCD.zip">LiveCD</a>
解壓縮 zip 檔之後是 iso 檔,
將之整個 cp 到 (hd0,msdos1)/ 也就是 DOS/
清單如下:<pre>-r-xr-xr-x 1 root root 4016 11月 28 11:18 fdauto.bat*
drwxr-xr-x 12 root root 4096 11月 28 11:13 freedos/
drwxr-xr-x 4 root root 4096 4月 30 2021 FDOS-x86/
drwxr-xr-x 2 root root 4096 4月 30 2021 isolinux/
drwxr-xr-x 15 root root 4096 4月 30 2021 packages/
drwxr-xr-x 3 root root 4096 4月 30 2021 devel/
drwxr-xr-x 3 root root 4096 4月 30 2021 games/
drwxr-xr-x 3 root root 4096 4月 30 2021 util/
-r-xr-xr-x 1 root root 182 4月 30 2021 fdconfig.sys*
-r-xr-xr-x 1 root root 85048 4月 30 2021 COMMAND.COM*
-r-xr-xr-x 1 root root 46685 4月 30 2021 KERNEL.SYS*
-r-xr-xr-x 1 root root 6744 4月 30 2021 setup.bat*
</pre>
有沒有注意到上面要修改 fdauto.bat?<br />
貼上整個內容<br />
.....到 :FinishCDMode 之前都不變.....
:FinishCDMode
mkdir \TEMP
set TEMP=\TEMP
set TMP=%TEMP%
SET DOSDIR=\FREEDOS
SET BIN=%DOSDIR%\BIN
set DOSDRV=C:\
set BIN=C:\FREEDOS\BIN
set PATH=\;%BIN%;\UTIL\P7ZIP\
SET NLSPATH=%DOSDIR%\NLS
C:
CD \
.....到下面兩行前面有變而已.....
CALL %DOSDIR%\BIN\FDLIVE.BAT RAMSKIP
if "%FDRAMDRV%" == "" goto WarnReadOnly
.....以下同....<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-49953541663810226132021-03-16T08:36:00.003+08:002021-03-16T08:36:53.774+08:00[git] add remote origin with ssh<p> <span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">我先講一下我的實驗:</span></p><span style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">我有個 repository 它的源是國外的,這個我們不管,位置在</span><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">~/q8vista/q8server</div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;"><br /></div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">然後我在別台機器的 /tmp/xx 下做實驗:</div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;"><i>cd /tmp/xx/ &&<br />git clone wade@192.168.20.110:/home/<wbr></wbr>wade/q8vista/q8server</i></div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">因為不想破壞源庫,所以...</div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;"><i>cd /tmp/xx/ && mkdir q8vista && cd q8vista</i></div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">此時 /tmp/xx/q8server 它的源是192.168.20.110:/home/wade/<wbr></wbr>q8vista/q8server , </div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">然後再做一次</div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;"><i>git clone ssh://wade@192.168.20.110:/<wbr></wbr>tmp/xx/q8server<br /></i></div><div style="background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: small;">上面的命令方式跟底下一樣的意思:<br /><div><i>git clone wade@192.168.20.110:/tmp/xx/<wbr></wbr>q8server<br /></i></div><div>接下來 cd /tmp/xx/q8vista/q8server, 它的源是 192.168.20.110:/tmp/xx/<wbr></wbr>q8server</div><div><i>cd /tmp/xx/q8vista/q8server </i>並做點變動之後<br /><i>git commit -a -m 'test for ssh push' && git push</i></div><div>此時會發生錯誤:<br /><br /></div><div><b><i style="background-color: cyan;">remote: <span style="color: red;">error</span>: refusing to update checked out branch: refs/heads/master <br />remote: <span style="color: red;">error</span>: By default, updating the current branch in a non-bare repository <br />remote: is denied, because it will make the index and work tree inconsistent<br />remote: with what you pushed, and will require 'git reset --hard' to match<br />remote: the work tree to HEAD.<br />remote:<br />remote: You can set the 'receive.denyCurrentBranch' configuration variable<br />remote: to 'ignore' or 'warn' in the remote repository to allow pushing into<br />remote: its current branch; however, this is not recommended unless you<br />remote: arranged to update its work tree to match what you pushed in some<br />remote: other way.<br />remote:<br />remote: To squelch this message and still keep the default behaviour, set<br />remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.<br /></i></b></div><div><br /></div><div>git 的好處是,它的訊息通常會告訴你接下來該怎麼做</div><div>我就下底下的命令:</div><div><i>git config --global receive.denyCurrentBranch ignore</i><br /></div><div>或在 ~/.gitconfig 可以找到底下這2行:<br /><b><i style="background-color: lime;">[receive]<br /> denyCurrentBranch = ignore<br /></i></b></div><div><br /></div><div>再進行一次 git push 就通過了</div><div><span style="color: yellow; font-size: medium;"><b><i style="background-color: red;">要注意的是,遠端的 git tree 被更新了沒錯,</i></b></span></div><div><span style="color: yellow; font-size: medium;"><b><i style="background-color: red;">但是如果在遠端執行 git status 會發現遠端該目錄下的 local files 與 git repository 並不一致,一般的做法是 git reset --hard HEAD</i></b></span></div></div><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-3548477619683688082021-03-15T14:37:00.002+08:002021-03-15T14:37:53.803+08:00Mysql JOIN<p> 工作上需要,我有兩個表格,其中一個叫 logger, 一個叫 terminals</p><p>logger 很單純,會記錄各種 log, 其中一個欄位會記錄來自哪個 terminal mac, 如果它是 terminal 造成的錯誤。</p><p>問題在於,terminals 表格是直式的,就是它的欄位像 attribute, value 這樣的型式,譬如</p><p><span style="font-family: courier;">id attribute value</span></p><p><span style="font-family: courier;">1 mac 123456789012</span></p><p><span style="font-family: courier;">1 name t1</span></p><p><span style="font-family: courier;">2 mac 234567890123</span></p><p><span style="font-family: courier;">2 name t2</span></p><p><span style="font-family: courier;">如果想在列出 logger 時,對這類 log 印出這條 log 來自哪個 terminal 該怎麼辦?</span></p><p><span style="font-family: courier;">對mariadb 而言,因為要的是 logger, 所以要用 LEFT JOIN</span></p><p><span style="font-family: courier;">LEFT JOIN 的意思是,我要表格左邊的結果,但是在某些條件下合併表格資料</span></p><p><span style="font-family: courier;">所以就像 SELECT l.id,l.date,l.info,IF(l.mac<>'',t2.name,'') as termname FROM logger AS l<br /></span><span style="font-family: courier;"> LEFT JOIN Terminals AS t1 on<br /> t1.attribute='mac' AND l.mac<>'' AND l.mac=t1.value<br /> LEFT JOIN Terminals AS t2 on<br /> t1.id=t2.id AND t2.attribute='name'</span></p><p>翻譯成中文大概就像:<br />我要全部的 logger 資料,其中<br /> 如果 mac 欄位有值,那就從 Terminals 表格查,其 attribute='mac' 其值為 mac<br /> 但是傳回 Terminals 中相同 id 的 terminal 名稱</p><p><br /></p><p>有點複雜,我也是想很久才清楚,可以這麼說,LEFT JOIN 是以左邊的(LEFT) 語法為結果,加上條件來自(JOIN) 後面的限制</p><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-60651343518594607092021-02-23T08:46:00.001+08:002021-02-23T08:46:34.923+08:00[dd] 利用 dd split & merge<p> 對超大檔案的分割與合併,我一般是使用 split 與 cat</p><p>結果經過實驗發現,使用 dd 的效率會非常高,</p><p>請參考 https://www.linuxquestions.org/linux/answers/applications_gui_multimedia/splitting_and_merging_files_using_dd</p><p><br /></p><p>底下以 shell 搭配來操作的話,類似 :<br /><br /></p><p><i><span style="font-size: medium;">D=0; for i in `seq 1 1 52`; do dd if=W-2016_TM-11.2-disk1.vmdk.`printf "%03d" $i` of=W-2016_TM-11.2-disk1.vmdk bs=1M count=200 seek=$D; D=$(( D+200 )); done</span></i></p><p>0)最前面的 D=0 每次重設變數,要養成好習慣 </p><p>1) seq 用來自動產生序列數字</p><p>2)printf 用來將檔名的數字固定成補0的3個數位</p><p>3)dd 用 seek 來將下一個檔案附加到前一個的後面</p><p>4)最後利用 現代 shell 的 $(( ... )) 來做運算</p><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com1tag:blogger.com,1999:blog-37326237.post-79859676825363216412020-10-27T11:54:00.000+08:002020-10-27T11:54:01.707+08:00avconv had been gone 不見了<p> 我想將影片放慢,先前都用 avconv, 結果現在卻找不到套件,</p><p>只好又用回 ffmpeg, 語法如下:<br /><br /></p><p>ffmpeg -y -i 4x4.mp4 -vf "setpts=<b><span style="color: red; font-size: medium;">16</span></b>*PTS" -r <b><span style="color: red; font-size: medium;">24.5</span></b> slow.mp4</p><p>影片原來 fps 並不是 24.5, 而是 30, 不過不重要</p><p>重點是我放慢 16 的方式如上面的 <b><span style="color: red; font-size: medium;">16 </span></b>, 這樣做,影片會被拉長</p><p>至於後面的 <b><span style="color: red; font-size: medium;">24.5</span></b> 則是輸出的 fps, 可以不指定或是其他值</p><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-4164366881627300232020-07-15T14:52:00.004+08:002020-07-15T14:52:59.061+08:00[shell] script for 網路小說給喜歡讀網路小說的人用,<br />
利用 elinks(需要自行安裝, apt-get install elinks) 來讀小說,相當方便,同時也可以翻譯成繁中<br />
平常我是這樣用<br />
nob URL<br />
如果離開後想續讀,可以直接打 nob<br />
至於下一頁,通常我是按兩次 q, 一次是離開 elinks, 一次是翻下一頁<br />
如果要前一頁,則先 q, 再按 p<br />
<br />
請自行翻閱 shell scripts<br />
<br />
<br />
<br />
<br />
<br />
<i>URL=$1</i><br />
<i>[ "x$URL" = "x" ] && URL=$(cat $HOME/no.url)</i><br />
<i><br /></i>
<i>read_current() {</i><br />
<i> if [ -e '/tmp/no.txt' ]; then</i><br />
<i> HEAD=$(cat /tmp/no.txt | grep "章節列表")</i><br />
<i> P=$(echo "$HEAD" | cut -d "[" -f2 | cut -d "]" -f1)</i><br />
<i> H=$(echo "$HEAD" | cut -d "[" -f3 | cut -d "]" -f1)</i><br />
<i> N=$(echo "$HEAD" | cut -d "[" -f4 | cut -d "]" -f1)</i><br />
<i> URL=$(grep "${N}. https" /tmp/no.txt | sed -e 's/.*https/https/')</i><br />
<i># less /tmp/no.txt</i><br />
<i> else</i><br />
<i> echo "Usage: $0 {URL}"</i><br />
<i> exit 1</i><br />
<i> fi</i><br />
<i>}</i><br />
<i><br /></i>
<i>[ "x$URL" = "x" ] && read_current</i><br />
<i>while [[ $URL == "https:"* ]]; do</i><br />
<i> echo "$URL" > /tmp/no.txt</i><br />
<i> echo "$URL" > $HOME/no.url</i><br />
<i> elinks -dump "$URL" | cconv -f UTF8-CN -t UTF8-TW - >> /tmp/no.txt</i><br />
<i> less /tmp/no.txt</i><br />
<i> read_current</i><br />
<i> PREV=$(grep "${P}. https" /tmp/no.txt | sed -e 's/.*https/https/')</i><br />
<i> BM=$(grep "${H}. https" /tmp/no.txt | sed -e 's/.*https/https/')</i><br />
<i> NEXT=$(grep "${N}. https" /tmp/no.txt | sed -e 's/.*https/https/')</i><br />
<i><br /></i>
<i> echo "Press ESC key to quit, others to continue..."</i><br />
<i> Q=0</i><br />
<i> # read a single character</i><br />
<i> while read -r -n1 key; do</i><br />
<i> [[ $key == $'\e' ]] && Q=1 && break</i><br />
<i># echo -e -n "KEY='${key}'\nPREV=$PREV\nBM=$BM\nNEXT=$NEXT\n"</i><br />
<i> if [ "x${key}" = "xp" -o "x${key}" = "xP" ]; then</i><br />
<i> URL="${PREV}"</i><br />
<i> elif [ "${key}" = "q" -o "${key}" = "Q" -o "${key}" = "n" -o "${key}" = "N" -o "${key}" = "" ]; then</i><br />
<i> URL="${NEXT}"</i><br />
<i> else</i><br />
<i> URL="${BM}"</i><br />
<i> fi</i><br />
<i> break</i><br />
<i> done</i><br />
<i> [ $Q = "1" ] && break</i><br />
<i>done</i><br />
<div>
<br /></div>
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-5792611897102317232020-07-09T13:58:00.004+08:002020-07-09T13:58:48.423+08:00shutdown linux 關機有一篇文章不錯,標題是『<a href="https://blog.gtwang.org/linux/safe-reboot-of-linux-using-magic-sysrq-key/">使用 SysRq 鍵讓當機的 Linux 安全的重新開機</a>』<br />
嵌入式系統有不同的實作方式,包括 完整的 Linux Distribution 都有不同的方式開機。<br />
<br />
在桌面(X)當掉的時候,或許還可以從遠端連線(沒錯), 或許還可以按 SysRq 鍵,<br />
這樣就有辦法讓系統安全的關機或重新開機。<br />
<br />
我遇到一個系統,用 busybox 建構的,無法關機,底下做法成功的機會大增:<br />echo 510 > /proc/sys/kernel/sysrq<br />
echo o > /proc/sysrq-trigger<br />
<br />
詳閱該文的說明<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-52333694690272215432018-12-15T09:45:00.003+08:002018-12-15T09:45:58.083+08:00a020: 身分證檢驗<a href="https://zerojudge.tw/ShowProblem?problemid=a020"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a020: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">身分證檢驗</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""></stdio><br />
<br />
/*<br />
A=10 台北市 J=18 新竹縣 S=26 高雄縣<br />
B=11 台中市 K=19 苗栗縣 T=27 屏東縣<br />
C=12 基隆市 L=20 台中縣 U=28 花蓮縣<br />
D=13 台南市 M=21 南投縣 V=29 台東縣<br />
E=14 高雄市 N=22 彰化縣 W=32 金門縣<br />
F=15 台北縣 O=35 新竹市 X=30 澎湖縣<br />
G=16 宜蘭縣 P=23 雲林縣 Y=31 陽明山<br />
H=17 桃園縣 Q=24 嘉義縣 Z=33 連江縣<br />
I=34 嘉義市 R=25 台南縣<br />
*/<br />
int map[] = { // 英文字轉成上述數字後,個位數*9+十位數<br />
1, // A<br />
10,// B<br />
19,// C<br />
28,// D<br />
37,// E<br />
46,// F<br />
55,// G<br />
64,// H<br />
39,// I<br />
73,// J<br />
82,// K<br />
2, // L<br />
11,// M<br />
20,// N<br />
48,// O<br />
29,// P<br />
38,// Q<br />
47,// R<br />
56,// S<br />
65,// T<br />
74,// U<br />
83,// V<br />
21,// W<br />
3, // X<br />
12,// Y<br />
30,// Z<br />
};<br />
<br />
int isValid(char* d) {<br />
int cs = map[d[0]-'A'];<br />
for (int i=1; i<9 i="" p=""> cs += (d[i] - '0') * (9-i);<br />
}<br />
cs += (d[9] - '0');<br />
return cs%10 == 0;<br />
}<br />
<br />
int main ()<br />
{<br />
char id[20];<br />
while (scanf("%s", id) == 1) {<br />
printf ("%s\n", isValid(id)?"real":"fake");<br />
}<br />
return 0;<br />
}<br />
</9><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-75188964408967067002018-12-15T09:44:00.003+08:002018-12-15T09:44:52.893+08:00a017: 五則運算<a href="https://zerojudge.tw/ShowProblem?problemid=a017"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a017: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">五則運算</span></a><br />
<pre></pre>
<br />
// 底下這一行,是因為要用 getline(), 這個是 c++ 才有的,或是要告訴 gcc 說,這個是 gnu 額外提供給 c 的<br />
#define _GNU_SOURCE<br />
#include <stdio .h=""></stdio><br />
<br />
char *buf;<br />
char *express;<br />
<br />
// peek() 不移動字元位置,只傳回指標目前所指的字元<br />
char peek() {<br />
while (*express == ' ') ++express; // 一律略過空白字元<br />
return *express;<br />
}<br />
<br />
// 因為 peek() 會略過空白字元,這邊直接傳回指標所指的字元<br />
char get() { return *(express++); }<br />
<br />
// 把數字傳回去,因為數字是連續的,所以....<br />
int number() {<br />
int result = get() - '0';<br />
while (peek() >= '0' && peek() <= '9') result = 10*result + (get() - '0');<br />
return result;<br />
}<br />
<br />
// factor() 可以看成『分解成 + - 的『項』,小括號內的話,視為一項<br />
int expression(); // 要遞迴呼叫,所以得先定義方法<br />
int factor() {<br />
if (peek() >= '0' && peek() <= '9') return number();<br />
else if (peek() == '(') { // 遇上括號,則再遞回呼叫 expression()<br />
get(); // '('<br />
int result = expression();<br />
get(); // ')'<br />
return result;<br />
}<br />
else if (peek() == '-') {<br />
get();<br />
return -factor();<br />
}<br />
return 0; // error<br />
}<br />
<br />
// term() 則將各項運算結合起來, 主要是以 * / % 為主<br />
int term() {<br />
int result = factor();<br />
char p = peek();<br />
while (p == '*' || p == '/' || p == '%') {<br />
p = get();<br />
if (p == '*') result *= factor();<br />
else if (p == '/') result /= factor();<br />
else result %= factor();<br />
p = peek();<br />
}<br />
return result;<br />
}<br />
<br />
int expression() {<br />
int result = term(); // 先取得第一項<br />
while (peek() == '+' || peek() == '-') { // 如果遇到 + - 號的話,則運算下一項的結合<br />
if (get() == '+') result += term();<br />
else result -= term();<br />
}<br />
return result;<br />
}<br />
<br />
int main ()<br />
{<br />
size_t n;<br />
while (getline(&buf, &n, stdin) >= 0) {<br />
express = buf;<br />
int result = expression();<br />
printf ("%d\n", result);<br />
}<br />
return 0;<br />
}<br />
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-29342968313140950792018-12-15T09:43:00.004+08:002018-12-15T09:43:59.996+08:00a016: 數獨(SUDOKU)<a href="https://zerojudge.tw/ShowProblem?problemid=a016"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a016: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">數獨(SUDOKU)</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""></stdio><br />
<br />
int check(int* a) {<br />
// 1) 比對直線(橫+直)<br />
for (int k=0; k<9 k="" p=""> for (int i=0; i<9 i="" p=""> for (int j=i+1; j<9 j="" p=""> if (*(a+k*9+i) == *(a+k*9+j)) return 0; // 橫線<br />
if (*(a+i*9+k) == *(a+j*9+k)) return 0; // 直線<br />
}<br />
}<br />
}<br />
// 3) 比對3x3<br />
for (int m=0; m<3 m="" p=""> for (int n=0; n<3 n="" p=""> // 比對每個 3x3<br />
for (int j=0; j<9 j="" p=""> for (int i=0; i<9 i="" p=""> if (i != j && *(a+(m*3+j/3)*9+j%3+n*3) == *(a+(m*3+i/3)*9+i%3+n*3)) return 0;<br />
}<br />
}<br />
}<br />
}<br />
return 1;<br />
}<br />
<br />
int main ()<br />
{<br />
int a[81];<br />
int *pa;<br />
<br />
while (!feof(stdin)) {<br />
pa = a;<br />
for (int i=0; i<9 i="" p=""> if (scanf ("%d %d %d %d %d %d %d %d %d", pa+0, pa+1, pa+2, pa+3, pa+4, pa+5, pa+6, pa+7, pa+8) != 9) return 0;<br />
pa += 9;<br />
}<br />
printf ("%s\n", check(a)?"yes":"no");<br />
}<br />
return 0;<br />
}<br />
</9></9></9></3></3></9></9></9><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-21975598244569629272018-12-15T09:43:00.000+08:002018-12-15T09:43:04.254+08:00a015: 矩陣的翻轉<a href="https://zerojudge.tw/ShowProblem?problemid=a015"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a015: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">矩陣的翻轉</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""></stdio><br />
<br />
int main ()<br />
{<br />
int m, n;<br />
int a[100][100];<br />
<br />
while (scanf ("%d %d", &m, &n) == 2) {<br />
for (int j=0; j<m j="" p=""> for (int i=0; i<n i="" p=""> scanf("%d", &a[j][i]);<br />
for (int j=0; j<n j="" p=""> for (int i=0; i<m-1 i="" p=""> printf ("%d ", a[i][j]);<br />
printf ("%d\n", a[m-1][j]);<br />
}<br />
}<br />
return 0;<br />
}<br />
</m-1></n></n></m><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-65049918135253742462018-12-15T09:41:00.003+08:002018-12-15T09:41:47.295+08:00a013: 羅馬數字<a href="https://zerojudge.tw/ShowProblem?problemid=a013"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a013: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">羅馬數字</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""></stdio><br />
#include <math .h=""></math><br />
#include <strings .h=""></strings><br />
#include <string .h=""></string><br />
<br />
// 阿拉伯數字 --> 羅馬數字<br />
int a2r(unsigned int val, char* res, size_t sz) {<br />
char *twas[] = {"", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm"};<br />
char *wans[] = {"", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"};<br />
char *thos[] = {"", "M", "MM", "MMM", "Mv", "v", "vM", "vMM", "vMMM", "Mx"};<br />
char *huns[] = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};<br />
char *tens[] = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};<br />
char *ones[] = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};<br />
int size[] = { 0, 1, 2, 3, 2, 1, 2, 3, 4, 2};<br />
<br />
if (val < 0) { strcpy(res, "UNKNOWN"); return 1; }<br />
if (val == 0) { strcpy(res, "ZERO"); return 1; }<br />
<br />
while (val >= 1000000) {<br />
if (sz-- < 1) return 0;<br />
*res++ = 'm';<br />
val -= 1000000;<br />
}<br />
<br />
// Add each of the correct elements, adjusting as we go.<br />
<br />
if (sz < size[val/100000]) return 0;<br />
sz -= size[val/100000];<br />
strcpy (res, twas[val/100000]); res += size[val/100000]; val = val % 100000;<br />
<br />
if (sz < size[val/10000]) return 0;<br />
sz -= size[val/10000];<br />
strcpy (res, wans[val/10000]); res += size[val/10000]; val = val % 10000;<br />
<br />
if (sz < size[val/1000]) return 0;<br />
sz -= size[val/1000];<br />
strcpy (res, thos[val/1000]); res += size[val/1000]; val = val % 1000;<br />
<br />
if (sz < size[val/100]) return 0;<br />
sz -= size[val/100];<br />
strcpy (res, huns[val/100]); res += size[val/100]; val = val % 100;<br />
<br />
if (sz < size[val/10]) return 0;<br />
sz -= size[val/10];<br />
strcpy (res, tens[val/10]); res += size[val/10]; val = val % 10;<br />
<br />
if (sz < size[val]) return 0;<br />
sz -= size[val];<br />
strcpy (res, ones[val]); res += size[val];<br />
<br />
// Finish string off.<br />
if (sz < 1) return 0;<br />
*res = '\0';<br />
return 1;<br />
}<br />
<br />
int r2a_in_char(char r) {<br />
switch (r) {<br />
case 'I': return 1;<br />
case 'V': return 5;<br />
case 'X': return 10;<br />
case 'L': return 50;<br />
case 'C': return 100;<br />
case 'D': return 500;<br />
case 'M': return 1000;<br />
case 'v': return 5000;<br />
case 'x': return 10000;<br />
case 'l': return 50000;<br />
case 'c': return 100000;<br />
case 'd': return 500000;<br />
case 'm': return 1000000;<br />
default: return 0;<br />
}<br />
}<br />
<br />
int r2a(char *str) {<br />
int res = 0;<br />
int max = strlen(str);<br />
for (int i=0; i<max i="" nbsp="" p=""> // 從羅馬數字轉成阿拉伯數字<br />
int s1 = r2a_in_char(str[i]);<br />
<br />
if (i+1 < max) {<br />
// 往後看,將下一個字元從羅馬數字轉成阿拉伯數字<br />
int s2 = r2a_in_char(str[i+1]);<br />
<br />
// 比對前後文....<br />
if (s1 >= s2) { // 前面大於等於後面,表示加法,直接加起來<br />
res = res + s1;<br />
} else { // 前面小於後面,表示減法: 加後面減前面<br />
res = res + s2 - s1;<br />
i++; // i++ 之後,跳過下一符號<br />
}<br />
} else { // 結束.....<br />
res = res + s1;<br />
i++;<br />
}<br />
}<br />
return res;<br />
}<br />
<br />
int main ()<br />
{<br />
int n, a, b;<br />
char r1[100], r2[100];<br />
char res[100];<br />
<br />
while (scanf ("%s %s", r1, r2) == 2) {<br />
a = r2a(r1);<br />
b = r2a(r2);<br />
a2r(a>b?a-b:b-a, res, 100);<br />
printf ("%s\n", res);<br />
}<br />
return 0;<br />
}<br />
</max><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-15939138337538788892018-12-15T09:34:00.001+08:002018-12-15T09:38:38.069+08:00a010: 因數分解<a href="https://zerojudge.tw/ShowProblem?problemid=a010"><span style="background-color: white; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 36px;">a010: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 36px;">因數分解</span></a><br />
<pre></pre>
<br />
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; color: #444444; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; white-space: pre-wrap; word-break: normal;"><span class="hljs-meta" style="box-sizing: border-box; color: #1f7199;">#<span class="hljs-meta-keyword" style="box-sizing: border-box; font-weight: bold;">include</span><span class="hljs-meta-string" style="box-sizing: border-box; color: #4d99bf;"><stdio .h=""></stdio></span></span>
<span class="hljs-meta" style="box-sizing: border-box; color: #1f7199;">#<span class="hljs-meta-keyword" style="box-sizing: border-box; font-weight: bold;">include</span><span class="hljs-meta-string" style="box-sizing: border-box; color: #4d99bf;"><math .h=""></math></span></span>
<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">int</span> <span class="hljs-title" style="box-sizing: border-box; color: #880000; font-weight: bold;">main</span> <span class="hljs-params" style="box-sizing: border-box;">()</span>
</span>{
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">int</span> n, nn;
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">while</span> (<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">scanf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"%d"</span>, &n) == <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>) {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">int</span> last = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">-1</span>;
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">int</span> cnt=<span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>;
nn = <span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">sqrt</span>(n);
<span class="hljs-comment" style="box-sizing: border-box; color: #888888;">// 因為所有質因數只有2是偶數,先處理2</span>
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">while</span> (!(n % <span class="hljs-number" style="box-sizing: border-box; color: #880000;">2</span>)) {
n >>= <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>;
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (last != <span class="hljs-number" style="box-sizing: border-box; color: #880000;">2</span>) {
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"2"</span>);
last = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">2</span>;
cnt = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>;
} <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> cnt++;
}
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (cnt > <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>) {
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"^%d"</span>, cnt);
cnt = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">for</span> (<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">int</span> i = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">3</span>; i <= nn;) {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (n % i == <span class="hljs-number" style="box-sizing: border-box; color: #880000;">0</span>) {
n /= i;
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (last != i) {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (cnt > <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>) <span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"^%d * %d"</span>, cnt, i);
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (last <= <span class="hljs-number" style="box-sizing: border-box; color: #880000;">0</span>) <span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"%d"</span>, i);
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> <span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">" * %d"</span>, i);
}
cnt = <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>;
} <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> cnt++;
last = i;
} <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> i += <span class="hljs-number" style="box-sizing: border-box; color: #880000;">2</span>;
}
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (cnt > <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>) {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (n > <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>)
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"^%d * %d\n"</span>, cnt, n);
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span>
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"^%d\n"</span>, cnt);
} <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (n > <span class="hljs-number" style="box-sizing: border-box; color: #880000;">1</span>) {
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">if</span> (last <= <span class="hljs-number" style="box-sizing: border-box; color: #880000;">0</span>)
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">"%d\n"</span>, n);
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span>
<span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">printf</span> (<span class="hljs-string" style="box-sizing: border-box; color: #880000;">" * %d\n"</span>, n);
} <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">else</span> <span class="hljs-built_in" style="box-sizing: border-box; color: #397300;">puts</span>(<span class="hljs-string" style="box-sizing: border-box; color: #880000;">""</span>);
}
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">return</span> <span class="hljs-number" style="box-sizing: border-box; color: #880000;">0</span>;
}</pre>
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; color: #444444; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; white-space: pre-wrap; word-break: normal;">
</pre>
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; color: #444444; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; white-space: pre-wrap; word-break: normal;">上面的速度應該是比較快的,底下還有一個比較簡明的版本</pre>
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; color: #444444; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; white-space: pre-wrap; word-break: normal;"><pre></pre>
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; word-break: normal;"><span style="color: #444444; font-family: menlo, monaco, consolas, courier new, monospace;"><span style="white-space: pre-wrap;">#include<stdio .h="">
#include<math .h="">
#define push(n) fac[facn++] = (n)
int fac[1024];
int facn = 0;
void output() {
int last = -1;
int cnt = 0;
for (int i=0; i<facn 0="" cnt="" fac="" i="" if="" last=""> 1) { // 有指數
printf ("^%d * %d", cnt, fac[i]);
} else {
if (last <= 0) // 第一個
printf ("%d", fac[i]);
else // 不是第一個,沒有指數
printf (" * %d", fac[i]);
}
cnt = 1;
} else { cnt++; }
last = fac[i];
}
if (cnt > 1) printf ("^%d\n", cnt); else printf ("\n");
}
int main ()
{
int n, i, nn;
while (scanf ("%d", &n) == 1) {
facn = 0;
nn = sqrt(n);
// 因為所有質因數只有2是偶數,先處理2
while (!(n % 2)) {
n >>= 1;
push(2);
}
for (i = 3; i <= nn; i+=2) {
if (n % i == 0) {
n /= i;
push(i);
i-=2;
}
}
if (n > 1) push(n);
output();
}
return 0;
}</facn></math></stdio></span></span></pre>
<pre class="language-c hljs cpp" id="code" style="background: rgb(240, 240, 240); border-radius: 0px; border: 0px; box-sizing: border-box; color: #444444; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; line-height: 1.42857; overflow-wrap: break-word; overflow: auto; padding: 0.5em; white-space: pre-wrap; word-break: normal;"></pre>
</pre>
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-35099860927886968172018-12-15T09:32:00.001+08:002018-12-15T09:32:08.582+08:00a009: 解碼器<a href="https://zerojudge.tw/ShowProblem?problemid=a009"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a009: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">解碼器</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""> </stdio><br />
<br />
int main (int argc, char* argv[]) <br />
{ <br />
int c; <br />
while (EOF != (c = getchar())) { <br />
if (c == '\n') printf ("\n"); <br />
else printf ("%c", (char)((c + 'C' - 'J')%255)); <br />
} <br />
return 0; <br />
}<br />
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-25738437570727741412018-12-15T08:28:00.000+08:002018-12-15T08:28:06.405+08:00a006: 一元二次方程式<a href="https://zerojudge.tw/ShowProblem?problemid=a006"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a006: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">一元二次方程式</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""> </stdio><br />
#include <math .h=""> </math><br />
<br />
int main (int argc, char* argv[]) <br />
{ <br />
int a, b, c; <br />
<br />
while (scanf ("%d %d %d", &a, &b, &c) == 3) { <br />
double r = (double)((b*b) - 4*(a*c)); <br />
if (r == 0.0) { <br />
printf ("Two same roots x=%.0lf\n", (double)(-b/(2.0*a))); <br />
} else if (r > 0.0) { <br />
double s = sqrt(r); <br />
printf ("Two different roots x1=%.0lf , x2=%.0lf\n", (double)((-b+s)/(2.0*a)), (double)((-b-s)/(2.0*a))); <br />
} else { <br />
printf ("No real root\n"); <br />
} <br />
} <br />
return 0; <br />
} <br />
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-47356915805637819602018-12-15T08:26:00.003+08:002018-12-15T08:26:59.052+08:00a005: Eva 的回家作業<a href="https://zerojudge.tw/ShowProblem?problemid=a005"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a005: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">Eva 的回家作業</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""> </stdio><br />
<br />
int main (int argc, char* argv[]) <br />
{ <br />
int n, a[4], r; <br />
<br />
scanf ("%d", &n); <br />
for (int i=0; i<n i="" nbsp="" p=""> scanf ("%d %d %d %d", a, a+1, a+2, a+3); <br />
if ((a[3] - a[0]) == (3*(a[1] - a[0]))) r = a[3]+a[3]-a[2]; <br />
else r = a[3]*a[3]/a[2]; <br />
printf ("%d %d %d %d %d\n", a[0], a[1], a[2], a[3], r); <br />
} <br />
return 0; <br />
} <br />
</n><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-30281055717558748552018-12-15T08:25:00.002+08:002018-12-15T08:25:56.512+08:00a004: 文文的求婚<a href="https://zerojudge.tw/ShowProblem?problemid=a004"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a004: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">文文的求婚</span></a><br />
<span style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;"><pre></pre>
</span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">#include <stdio .h=""> </stdio></span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">int main (int argc, char* argv[]) </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">{ </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> int a; </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> char m[2][10] = { "平", "閏" }; </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> while (scanf ("%d", &a) == 1) { </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> printf ("%s年\n", m[!(a%400) || ((a%100) && !(a%4))]); </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> } </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"> return 0; </span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><span style="background-color: white; box-sizing: border-box;"></span></span><br />
<span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;">} </span><br />
<span style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;"></span><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-69357177873198342102018-12-15T08:24:00.000+08:002018-12-15T08:24:16.723+08:00a003: 兩光法師占卜術<a href="https://zerojudge.tw/ShowProblem?problemid=a003"><span style="background-color: white; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">a003: </span><span id="problem_title" style="background-color: white; box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 36px;">兩光法師占卜術</span></a><br />
<pre></pre>
<br />
#include <stdio .h=""> </stdio><br />
<br />
int main (int argc, char* argv[]) <br />
{ <br />
int a, b; <br />
char m[3][10] = { "普通", "吉", "大吉" }; <br />
while (scanf ("%d %d", &a, &b) == 2) { <br />
printf ("%s\n", m[(a*2+b)%3]); <br />
} <br />
return 0; <br />
}<br />
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-23320381982113016882018-12-15T08:21:00.003+08:002018-12-15T08:21:50.105+08:00zj-a002 簡易加法<a href="https://zerojudge.tw/ShowProblem?problemid=a002">zj-a002 簡易加法</a><br />
<pre></pre>
<br />
#include <stdio .h=""> </stdio><br />
int main (int argc, char* argv[]) <br />
{ <br />
int a, b; <br />
<br />
while (scanf ("%d %d", &a, &b) == 2) { <br />
printf ("%d\n", a+b); <br />
} <br />
return 0; <br />
}<br />
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-63040654313294247632018-12-15T08:20:00.000+08:002018-12-15T08:22:54.371+08:00zj-a001 哈囉 <pre></pre>
<br />
<a href="https://zerojudge.tw/ShowProblem?problemid=a001">zj-a001 哈囉</a><br />
#include <stdio .h=""> </stdio><br />
int main (int argc, char* argv[]) <br />
{ <br />
char name[1024]; <br />
<br />
while (scanf ("%s", name) == 1) { <br />
printf ("hello, %s\n", name); <br />
} <br />
return 0; <br />
}<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-79264407708669946882018-02-08T09:57:00.001+08:002018-02-08T09:57:11.919+08:00Android Proguard 範例底下是我在某支程式中使用的範例,如果遇到一堆警告的話,通常是透過 <span style="color: navy; font-family: "DejaVu Sans Mono"; font-size: 11.3pt; font-weight: bold;">-dontwarn </span>來解決,請見最後幾條。另外一種情況,最常見的解決方法就是用 -keep 來解決,請見前面幾條:<br />
<br />
<pre style="background-color: white; font-family: "DejaVu Sans Mono"; font-size: 11.3pt;"><span style="color: navy; font-weight: bold;">-dontusemixedcaseclassnames</span><span style="color: navy; font-weight: bold;">-dontskipnonpubliclibraryclasses</span><span style="color: navy; font-weight: bold;">-verbose</span><span style="color: navy; font-weight: bold;">-optimizations </span>!code/simplification/arithmetic,!field/*,!class/merging/*
<span style="color: navy; font-weight: bold;">-keep </span>public class * extends android.**
<span style="color: navy; font-weight: bold;">-keep </span>public class * extends java.**
<span style="color: navy; font-weight: bold;">-keep </span>public class com.android.vending.licensing.ILicensingService
<span style="color: navy; font-weight: bold;">-keep </span>public class com.google.**
<span style="color: navy; font-weight: bold;">-keepclasseswithmembernames </span>class * {
<span style="color: #660e7a; font-weight: bold;"> native <methods>;</methods></span>}
<span style="color: navy; font-weight: bold;">-keep </span>public class * extends android.view.View {
<span style="color: #660e7a; font-weight: bold;"> public <init>(android.content.Context);</init></span><span style="color: #660e7a; font-weight: bold;"> public <init>(android.content.Context, android.util.AttributeSet);</init></span><span style="color: #660e7a; font-weight: bold;"> public <init>(android.content.Context, android.util.AttributeSet, int);</init></span><span style="color: #660e7a; font-weight: bold;"> public void set*(...);</span>}
<span style="color: navy; font-weight: bold;">-keepclasseswithmembers </span>class * {
<span style="color: #660e7a; font-weight: bold;"> public <init>(android.content.Context, android.util.AttributeSet);</init></span>}
<span style="color: navy; font-weight: bold;">-keepclasseswithmembers </span>class * {
<span style="color: #660e7a; font-weight: bold;"> public <init>(android.content.Context, android.util.AttributeSet, int);</init></span>}
<span style="color: navy; font-weight: bold;">-keepclassmembers </span>class * extends android.app.Activity {
<span style="color: #660e7a; font-weight: bold;"> public void *(android.view.View);</span>}
<span style="color: grey; font-style: italic;"># For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations</span><span style="color: navy; font-weight: bold;">-keepclassmembers </span>enum * {
<span style="color: #660e7a; font-weight: bold;"> public static **[] values();</span><span style="color: #660e7a; font-weight: bold;"> public static ** valueOf(java.lang.String);</span>}
<span style="color: navy; font-weight: bold;">-keep </span>class * implements android.os.Parcelable {
<span style="color: #660e7a; font-weight: bold;"> public static final android.os.Parcelable$Creator *;</span>}
<span style="color: navy; font-weight: bold;">-keepclassmembers </span>class **.R$* {
<span style="color: #660e7a; font-weight: bold;"> public static <fields>;</fields></span>}
<span style="color: navy; font-weight: bold;">-keep </span>class android.support.v4.app.** {<span style="color: #660e7a; font-weight: bold;"> *; </span>}
<span style="color: navy; font-weight: bold;">-keep </span>interface android.support.v4.app.** {<span style="color: #660e7a; font-weight: bold;"> *; </span>}
<span style="color: navy; font-weight: bold;">-keep </span>class com.actionbarsherlock.** {<span style="color: #660e7a; font-weight: bold;"> *; </span>}
<span style="color: navy; font-weight: bold;">-keep </span>interface com.actionbarsherlock.** {<span style="color: #660e7a; font-weight: bold;"> *; </span>}
<span style="color: navy; font-weight: bold;">-dontwarn </span>android.support.**
<span style="color: navy; font-weight: bold;">-dontwarn </span>com.google.**
<span style="color: navy; font-weight: bold;">-dontwarn </span>com.squareup.**</pre>
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0tag:blogger.com,1999:blog-37326237.post-74785929358129951232018-01-05T15:58:00.000+08:002018-01-05T15:58:14.517+08:00續-快速產生特定大小的檔案 using dd fast create specified size file寫過一篇<br />
<h3 class="post-title entry-title" style="background-color: #f6f6f6; color: #9e5205; font-family: Verdana, sans-serif; font-size: 34.176px; font-stretch: normal; font-variant-east-asian: normal; font-variant-numeric: normal; letter-spacing: -1px; line-height: normal; margin: 0px;">
<a href="http://wadefs.blogspot.tw/2011/09/using-dd-fast-create-specified-size.html" style="color: #9e5205;">快速產生特定大小的檔案 using dd fast create specified size file</a></h3>
<br />
事實上我再做了個實驗,發現那篇有誤,我是指,還有更快的方法,就是直接 resize file 的方式:<br />
<br />
<pre style="background-color: #eff0f1; border: 0px; color: #242729; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">dd bs=1048576 seek=4096 of=data.img count=0</code></pre>
<pre style="background-color: #eff0f1; border: 0px; color: #242729; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 15px; font-stretch: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; line-height: inherit; margin-bottom: 1em; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, sans-serif; font-size: 13px; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">前面 bs = 1M, seek 4K, 馬上就會得到 4G file data.img</code></pre>
<div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com2tag:blogger.com,1999:blog-37326237.post-85849800439104100342017-10-16T10:16:00.001+08:002017-10-16T11:44:01.911+08:00無聊寫的,抓某網站圖片的程式 get.pl#!/usr/bin/perl<br />
use strict;<br />
use warnings;<br />
use Mojo::UserAgent;<br />
use Mojo::URL;<br />
use utf8;<br />
use File::Basename;<br />
binmode(STDIN, ':utf8');<br />
binmode(STDOUT, ':utf8');<br />
<br />
my ($fp_pics, $fp_extracted_links);<br />
open $fp_pics, '<', "pics.txt";<br />
binmode($fp_pics, ':utf8');<br />
my @pics = <$fp_pics>;<br />
chomp @pics;<br />
close $fp_pics;<br />
my $time = localtime;<br />
push @pics, "$time";<br />
<br />
my @extracted_links;<br />
if (open $fp_extracted_links, '<', "extracted_links.txt") {<br />
binmode($fp_extracted_links, ':utf8');<br />
@extracted_links = <$fp_extracted_links>;<br />
chomp @extracted_links;<br />
close $fp_extracted_links;<br />
} else {<br />
@extracted_links = ();<br />
}<br />
<br />
##starting URL<br />
my @urls = (<br />
"http://www.xiuren.org/tag/%E8%AF%B1%E6%83%91.html",<br />
"http://www.xiuren.org/tag/%E7%A7%81%E6%88%BF.html",<br />
"http://www.xiuren.org/tag/%E6%80%A7%E6%84%9F.html",<br />
"http://www.xiuren.org/tag/%E5%A4%A7%E6%B3%A2.html",<br />
"http://www.xiuren.org/tag/%E7%BE%8E%E5%A5%B3.html",<br />
"http://www.xiuren.org/tag/%E5%85%BB%E7%9C%BC.html",<br />
"http://www.xiuren.org/tag/%E7%99%BD%E8%99%8E.html",<br />
"http://www.xiuren.org/tag/%E5%86%99%E7%9C%9F.html",<br />
"http://www.xiuren.org/tag/%E5%A4%A7%E8%83%B8.html",<br />
"http://www.xiuren.org/tag/%E6%92%A9%E4%BA%BA.html",<br />
"http://www.xiuren.org/tag/%E6%91%A9%E6%93%A6%E6%91%A9%E6%93%A6.html",<br />
"http://www.xiuren.org/tag/%E6%9B%BC%E5%A6%99.html",<br />
"http://www.xiuren.org/tag/%E7%9C%9F%E7%A9%BA.html",<br />
"http://www.xiuren.org/tag/%E5%A4%A7%E5%A5%B6.html",<br />
"http://www.xiuren.org/tag/%E5%86%85%E8%A1%A3.html",<br />
"http://www.xiuren.org/tag/%E6%8C%BA%E6%8B%94.html",<br />
"http://www.xiuren.org/tag/%E9%A5%B1%E6%BB%A1.html",<br />
"http://www.xiuren.org/tag/%E7%BE%8E%E4%B9%B3.html",<br />
"http://www.xiuren.org/tag/%E6%A1%83%E4%B9%B3.html",<br />
"http://www.xiuren.org/tag/%E4%B9%8B%E5%90%8E%E5%B9%B2%E4%BA%86%E4%B8%AA%E7%88%BD.html",<br />
"http://www.xiuren.org/tag/%E8%83%B4%E4%BD%93.html",<br />
"http://www.xiuren.org/tag/%E8%95%BE%E4%B8%9D.html",<br />
"http://www.xiuren.org/tag/%E5%B0%8F%E7%99%BD%E5%85%94.html",<br />
"http://www.xiuren.org/tag/MyGirl.html",<br />
"http://www.xiuren.org/category/toutiaogirls.html",<br />
"http://www.xiuren.org/category/miitao.html",<br />
"http://www.xiuren.org/category/youwu.html",<br />
"http://www.xiuren.org/category/TuiGirl.html",<br />
"http://www.xiuren.org/category/ugirls.html",<br />
"http://www.xiuren.org/category/tgod.html",<br />
"http://www.xiuren.org/category/bololi.html",<br />
"http://www.xiuren.org/category/imiss.html",<br />
"http://www.xiuren.org/category/mistar.html",<br />
"http://www.xiuren.org/category/feilin.html",<br />
"http://www.xiuren.org/category/mfstar.html",<br />
"http://www.xiuren.org/category/vgirlmm.html",<br />
"http://www.xiuren.org/category/rayshen.html",<br />
"http://www.xiuren.org/category/uxing.html",<br />
"http://www.xiuren.org/category/AISS.html",<br />
"http://www.xiuren.org/category/ru1mm.html",<br />
"http://www.xiuren.org/category/donggan.html",<br />
"http://www.xiuren.org/category/XiuRen.html"<br />
);<br />
<br />
my $ua = Mojo::UserAgent->new;<br />
my %visited;<br />
<br />
while (@urls) {<br />
my $url = shift @urls;<br />
next if exists $visited{$url};<br />
$visited{$url} = 1;<br />
<br />
print "[$url]\n";<br />
<br />
my $tx = $ua->get($url)->res;<br />
if ($tx->dom('span=photoThum]')) {<br />
$tx->dom('span[class=photoThum]')->each(sub{<br />
my ($match_url) = ( m/<a href="([^"]*)" / );<br />
if ($match_url) {<br />
<a href="https://www.blogger.com/([%5E" p="">
my ($site, $album, $file) = ($match_url =~ m/http:\/\/[^\/]*\/([^\/]*)\/([^\/]*)\/(.*)/);<br />
my ($f, $p, $s) = fileparse($file);<br />
if ($site && $album && $file && ! grep (/^$site\/$album\/$file/, @pics)) {<br />
mkdir "pics"; mkdir "pics/$site"; mkdir "pics/$site/$album";<br />
mkdir "pics/$site/$album/$p" if $p ne '.';<br />
print "getting $site/$album/$file...";<br />
my $ua_gif = Mojo::UserAgent->new(max_redirects => 5);<br />
my $gif = $ua_gif->get($match_url);<br />
$gif->res->content->asset->move_to("pics/$site/$album/$file");<br />
push @pics, "$site/$album/$file";<br />
print "done\n";<br />
}<br />
}<br />
});<br />
}<br />
if ($tx->dom('div[class=content]')) {<br />
$tx->dom('div[class=content]')->each(sub{<br /> </a><span style="color: #0000ee;"><u>my ($match_url) = ( m/<a href="([^"]*)" / );</u></span><br />
<span style="color: #0000ee;"><u> if ($match_url && !grep (m/$match_url/, @extracted_links)) {</u></span><br />
<a href="https://www.blogger.com/([%5E" p="">
push (@urls, $match_url);<br />
push (@extracted_links, $match_url);<br />
}<br />
});<br />
}<br />
}<br />
<br />
open $fp_pics, '>', "pics.txt";<br />
binmode($fp_pics, ':utf8');<br />
print $fp_pics join("\n", @pics), "\n";<br />
close $fp_pics;<br />
<br />
open $fp_extracted_links, '>', "extracted_links.txt";<br />
binmode($fp_extracted_links, ':utf8');<br />
print $fp_extracted_links join("\n", sort @extracted_links), "\n";<br />
close $fp_extracted_links;</a><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com1tag:blogger.com,1999:blog-37326237.post-32530455413010800202017-10-01T10:33:00.000+08:002017-10-01T10:33:01.544+08:00讓chrome 可以讀取 local file 首先,要知道的就是,啟動命令中加上 --allow-file-access-from-files<br />
做法上,有幾個地方可以進行<br />
1. 可以在 ubuntu 快捷圖示修改,檔案在<br />
~/.local/share/applications/google-chrome.desktop<br />
如果已經在的話直接修,否則參考以下內容:<br />
<i style="background-color: cyan;">[Desktop Entry]</i><br />
<i style="background-color: cyan;">Encoding=UTF-8</i><br />
<i style="background-color: cyan;">Version=1.0</i><br />
<i style="background-color: cyan;">Type=Application</i><br />
<i style="background-color: cyan;">Name=Welcome to Chrome - Google Chrome</i><br />
<i style="background-color: cyan;">Icon=google-chrome</i><br />
<i style="background-color: cyan;">Path=/home/wade</i><br />
<i style="background-color: cyan;">Exec=/opt/google/chrome/chrome --allow-file-access-from-files</i><br />
<i style="background-color: cyan;">StartupNotify=false</i><br />
<i style="background-color: cyan;">StartupWMClass=Google-chrome</i><br />
<i style="background-color: cyan;">OnlyShowIn=Unity;</i><br />
<i style="background-color: cyan;">X-UnityGenerated=true</i><br />
<i><br /></i>
2. 直接修改(如果你有權限的話) 啟動的 google-chrome script<br />
通常是 /usr/bin/google-chrome<br />
複雜的我們就不看了,只看最後一行,我的範例是:<br />
exec -a "$0" "$HERE/chrome" --allow-cross-origin-auth-prompt <i style="background-color: cyan;">--allow-file-access-from-files</i> "$@"<br />
<br />
3. 或者是修改安裝的目錄,例如 /opt/google/chrome/google-chrome<br />
<br />
附註:事實上底下幾個位置是相同的(都是超連結)<br />
/usr/bin/google-chrome<br />
/etc/alternatives/google-chrome<br />
/usr/bin/google-chrome-stable<br />
/opt/google/chrome/google-chrome<br />
最後一個才是普通檔,其他幾個最後都指向它<br />
<br /><div class="blogger-post-footer">狂想的空間,自由的精靈
Fantasy Space, Free Spirits</div>菠蘿麵包http://www.blogger.com/profile/14712653374870284543noreply@blogger.com0