この問題が解けるかな?(ふふ
課題1 今日の曜日を表示するスクリプト(dayofweek)を作成せよ。dateのマニュアルをよく見る。 % sh dayofweek Monday % パラメータとして2つの整数を入力して、2数の最小公倍数を計算するスクリプト(lcm)を作成せよ。ただし、2数をx,yとしたとき、x・ y=gcd・lcmである。 % sh lcm 10 12 lcm of 10 and 12 is 60 % 課題3 パラメータとして複数のファイル名を受け取り、それぞれのファイルの行数を表示するスクリプト(listlines)を作成せよ。 % sh listlines a b c file a has 5 lines. file b has 9 lines. file c has 12 lines. % 課題4 パラメータとして2つのファイル名を受け取り、それぞれのファイルに共通する単語の数を表示するスクリプト(samewords)を作成せ よ。2つのファイルにそれぞれ含まれる単語の数と、2つのファイルをひとつにしたファイルに含まれる単語の数がわかれば... % sh samewords a b file a and b have 6 same words. % できた人は天才!!!!
ほんと定期的に立つな・・・ 誰かネタ職人が頑張ってるのか >>1 今考えてますから待っててね。僕天才だし。 君は転載ってことで >>1 課題1何だけど今日の曜日を永遠と出せばいいのかなぁ? 火曜日。 いつも火曜日でいいのかな? echo 火曜日 んなわけないよね。 しゃっこうとかも出した方が言い?コッチのサイクルが難しいのよ 環境変数に無いからさぁ。 まぁ良いか。 現在の曜日ね。シェルスクリプト実行時の 正確に求めるとntpが肝だよなぁ。どっかに原子時計のntpサーバ5台くらい無い? これ無敵にしておかないと今晩24:00にコンビニでマガジン買えないのよ ロー村とあわせろ? ダメダメ国際標準じゃないと課題なんだから $ cat dayofweek #!/bin/sh date '+%a' $sh dayofweek 火 (笑) シェルスクリプトってさ、呼び出すコマンドを限定しないと 何でもアリになっちゃうよな。最小公倍数の問題だって、 多分互除法を実装しろってことだろうと思うけど、 mathematica呼び出せば一発だろうしなあ。 >>12 っていうか、そういう発想が出来るかどうかの課題だったりして。 想像力ってやつですな #!/bin/sh cat << EOF >foo.c 色々 EOF cc -o foo foo.c ./foo とか書けば、何でもできるしね。 課題3 $ alias listlines='wc --lines' $ listlines hoge hage 11 hoge 22 hage 33 合計 (笑) >>1 よ。その宿題の提出期限はいつですか? >>18-1001 宿題の提出期限が過ぎてから答えを書いてあげなさい。 >>17 本人に聞いても提出期限の申告にがサバ臭くなるから年開けてから書こうよ。 っていうか課題2はさぁ 今日何曜日?みたいな実務で全く役に立たないような課題1をふまえて 考えるに factorの話もどっかにあったけど 両方に正数書けて答えがマッチしたら抜けるループじゃダメか? 素因数分解からやんのかぁ? 1君どーよ? >>18 とてもバカなこと書いてしまいました笑ってください。 サラシあげてもらっても結構です 車に乗るナリ非常に悲しい痛い18になったことに気がつきました ちゃんと素因数分解使いますから許してください。factorで良いよな 明日からリアル厨房にカテキョ頼みます Λ_Λ ピシ! ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∂/ハ)ヽヽ ノ*;´∀`) < きゃあ!もっと煽ってー!! |ハ`∀´) ミ ./ (つ >>1 つ》 \____________ ⊂ S つ〆 《( ̄__)__) 人 Y ∧∧∧∧ し(_) | M専用 | どーも1です 自分文系なんですけど何を間違ったかUNIXの授業とっちゃって 先生の言ってる事がほっんとわからないんですよ。 他の生徒はみんなわかってるみたいなんですけど・・・ お願いします!!! どなたか親切なお方留年リーチの俺を救ってください!!! いや、まじ本物なんだけど(汗 つーかこのスレ先生に見つかったら どーしよ(´д`;) 留年して UNIX と親密な関係になるってのはどうか UNIXの勉強はじめよーかな でもUNIXやってメリットってあるん? >>1 留年リーチなのは遊びすぎで単位足らんのと違うか?(W 文系でも勉強すればこのくらいわかる. というか, 理解しないで単位とろうという考え方がダメ. 課題4 samewords --- #!/bin/sh ruby -e 'def f(n) f=Hash.new(0);for w in open(n).read.split(/\W+/);f[w]+=1 end;f.keys end;\ p((f($*[0])&f($*[1])).size)' $1 $2 ミスった。配列でいいじゃん。 samewords --- #!/bin/sh ruby -e 'def f(n) a=[];for w in open(n).read.split(/\W+/);a<<w end;a end;p((f($*[0])&f($*[1])).size)' $1 $2 #!/bin/bash x=$1 y=$2 (( $x < $y )) && { x=$2 && y=$1 ;} while (( $y != 0 )) do m=$(( $x - $(( $x / $y )) * $y )) (( $m < $y )) && { x=$y && y=$m ;} || { x=$m ;} done echo "lcm of $1 and $2 is $(( $1 * $2 / $x ))" >>36-37 すばらしい。もしオナゴだったらカテキョしてください。 僕は #!/bin/sh echo 火曜日 しか作れませんでした。 > % sh dayofweek > dayofweek: 2: Syntax error: word unexpected (expecting ")") うごかねえぞゴルァ!! >>39 echo -e "\e[5m 金曜日 \e[0m" (^ ^)/。先生、問1と問3のみできますた。採点してください。 問1 #!/bin/sh DATE=`date | awk '{print $1}'` case "$DATE" in Sun) echo 'Sunday' ;; Mon) echo 'Monday' ;; Tue) echo 'Tuesday' ;; Wed) echo 'Wednesday' ;; Thu) echo 'Thursday' ;; Fri) echo 'Friday' ;; Sat) echo 'Saturday' ;; esac 問3 #!/bin/sh for i in "$@" do NUM=`wc -l "$i" | awk '{print $1}'` echo "file $i is $NUM lines." done 問1 #!/bin/sh /usr/local/week #weekは自作プログラムです。僕のホームページで公開していますので #ぜひダウンロードして使ってください。 クダ質です。 ある拡張子のファイルに無条件に 000013:0x00(0) と書きたいのです。 stdio.hとmath.hのごく一部のライブラリしか使ったことが無いのでCは 殆ど解りません。どなたか簡単に書いていただけると嬉しいです。お願いします。 >>54 000013:0x00(0) を末尾に書くのか,先頭に書くのか,はたまた 内容をこれだけにするのか? あるいは13byte目をヌル文字にしたい? 拡張子hogeのファイル全てに処理したい というのは #!/bin/sh for f in *.hoge;do #処理内容 done のようにすればできる。この程度ならスクリプトのファイル を作らずにコマンドラインに直接書いてもよろし。 >あるいは13byte目をヌル文字にしたい? これです。特定の拡張子の13バイト目を無条件にnullにしたいのです。 ファイルは1個づつコマンド入力でも苦にならないのですが,いちいち バイナリエディタ開いてやるのが面倒なのでそんなプログラムがあれば いいなーと思った次第です。 とりあえず書けそうなところは #include<stdio.h> void main() { } くらいです。いや。マジです。 哀れな私にちょこちょこっとご教示願えると嬉しいです。 >>56 もうちょっとガンバレ fopen,fclose,fputc,fseek が使えればできる。答えは30分後に。 navi2chで書き込めなかったので,ブラウザから >>58 おおむね同意 予告通りソースをup こんなものでよろしいか? #include<stdio.h> #define MODIFY_OFFSET_BYTE 13 int modifyFile(char *fname) { FILE *fp; if(!(fp=fopen(fname,"r+"))){ return -1; } if(fseek(fp,MODIFY_OFFSET_BYTE,SEEK_SET)){ fclose(fp); return -1; } fputc('\0',fp); fclose(fp); return 0; } int main(int argc,char **argv) { while(*++argv){ if(modifyFile(*argv)){ perror(*argv); } } return 0; } ギャ!インデントが全てなくなってしまったよ ウワァン 神降臨! そうですよね。ファイル吐き出すのにvoidなわけないですよね。 で,申し訳ないのですが上のやつをコンパイルしてみたんですが, どうもアドレス0000Dが00になっているようで,00013が00になってはいないようです。 そこで上の宣言を19バイト目にしたらちゃんと動きました。 それと,ちょっと手元にある解説書を読んでみたのですが,私の言葉足らずだったら すいませんが,バイナリで読み込んで更新するときはrb+となっていたので, 一番上の int modifyFile(char *fname) { FILE *fp; if(!(fp=fopen(fname,"r+"))){ ↑ここの"r+"をrb+に書き換えました。 その結果バッチリ動くようになりました。ありがとうございます。 最初 D:\>fc /b p.mld pa.mld ファイル p.mld と PA.MLD を比較しています 0000000D: 00 73 書き換え後 D:\>fc /b new.mld protect.mld ファイル new.mld と PROTECT.MLD を比較しています 00000013: 00 01 MS-DOSかよ! と思っている人が000013人程度いるに違いない。 実行したのは紛れも無くsolaris9でつ。でも,そのファイルをいじれる環境が Windowsでしかないのでそれで試しました。 piyo% mach sparc piyo% uname SunOS piyo% arch sun4 piyo% 本当に助かりました。あとは自力で味付けしてみたいと思います。 bcc32で。いやいや。gccで・・・。 % dd if=/dev/zero of=filename bs=1 count=1 seek=19 conv=notrunc 遅レスだが,自分は 0x13=19=023 という罠に落ちたようです。 あと,Unixではテキストモード,バイナリモードの区別は 必要なかったと思われ。 なるほど。8進と勘違いでしたか。 gccでコンパイルかけてみてうまくいかず,次にbcc32でやってみて それから気がつきました。13じゃなくって19だ,と。 bcc32はBorlandがただで配ってるWin32 C++Compilerでつ。 bcc32だとbinとtextの区別してるかもしれないです。 携帯ゲーム機"プレイステーションポータブル(PSP) このPSPは、新規格UMD(ユニバーサルメディアディスク)というディスクを利用しており、そのサイズは直径6cmととても小さい(CDの半分程度)。 容量は1.8GBとなっている。 画面は4.5インチのTFT液晶で、480px x 272px(16:9)。MPEG4の再生やポリゴンも表示可能。外部端子として、USB2.0とメモリースティックコネクタが用意されているという。 この際、スク・エニもGBAからPSPに乗り換えたらどうでしょう。スク・エニの場合、PSPの方が実力を出しやすいような気がするんですが。 任天堂が携帯ゲーム機で圧倒的なシェアをもってるなら、スク・エニがそれを崩してみるのもおもしろいですし。かつて、PS人気の引き金となったFF7のように。 __∧_∧_ |( ^^ )| <ねばだ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄ このスレ1年近く書き込み内でつよ。たいむりーあげ。 コマンドラインでいいんだけれど、 ELIZAのように質問に答えを返すプログラムを作れないかな。 データの持ち方とロジックで、あたかも人間がチャットしているように できないかな? while read line do echo "はぁ?なんですか?" done 1日でよくそんなに勉強ができたもんだね すごいよ、えらいよ。実になってるかは別として スクリプトやらを作成する事で何日何時何曜日かが分かるわけか 課題4 #!/bin/sh - func() { tr ' ' '\n\n' | sort | uniq | wc -l } num1=$( cat "$1" | func ) num2=$( cat "$2" | func ) num3=$( cat "$1" "$2" | func ) echo "file $1 and $2 have $(( $num1 + $num2 - $num3 )) same words" おっと、TABが反映されないのをうっかりしてたよ。 tr の最初の引数はスペースとTABだよ。 #!/bin/sh で $(...) だの $((...)) だの使うのはどうかと。 >>86 気に入らなければ、適宜 ` ` とか expr に読み代えれば良い。 俺はそんなのは気持ち悪いが・・・ >>50 問3は同じ中身をもっと簡単に書けるぞ。 wc -l "$@" | awk '$2 !~ /^total$/{print "file " $2" has " $1" lines."}' 6年目に回答が寄せられたわけだが・・ 1は結局卒業できたのだろうか してたとしてもニートの可能性大だな #課題1 #今日の曜日を表示するスクリプト(dayofweek)を作成せよ。dateのマニュアルを~よく見る。 #% sh dayofweek #Monday #% % LC_ALL=C date +%A Sunday #パラメータとして2つの整数を入力して、2数の最小公倍数を計算するスクリプト(lcm)を作成せよ。ただし、2数をx,yとしたとき、x・ #y=gcd・lcmである。 #% sh lcm 10 12 #lcm of 10 and 12 is 60 #% if [ $1 -gt $2 ]; then a=$1 b=$2 elif [ $1 -lt $2 ]; then a=$2 b=$1 else echo lcm of $1 and $2 is $1 exit fi m() { expr $1 \* $2 } a_value=$a a_int=1 b_int=1 while [ 1 ] do b_value=`m $b $b_int` if [ $b_value -gt $a_value ]; then a_int=`expr $a_int + 1` a_value=`m $a $a_int` elif [ $b_value -eq $a_value ]; then echo lcm of $1 and $2 is $b_value exit fi b_int=`expr $b_int + 1` done #課題3 #パラメータとして複数のファイル名を受け取り、それぞれのファイルの行数を表示するスクリプト(listlines)を作成せよ。 #% sh listlines a b c #file a has 5 lines. #file b has 9 lines. #file c has 12 lines. #% for x in $* do echo file $x has `wc -l $x` lines. done #課題4 #パラメータとして2つのファイル名を受け取り、それぞれのファイルに共通する単語の数を表示するスクリプト(samewords)を作成せ #よ。2つのファイルにそれぞれ含まれる単語の数と、2つのファイルをひとつにしたファイルに含まれる単語の数がわかれば... #% sh samewords a b #file a and b have 6 same words. #% #できた人は天才!!!! a=$1 b=$2 count=0 for line in `cat $a`; do if [ -n "$line" ];then set $line for var in $*;do grep -w $var > /dev/null <<-! $seen ! if [ $? -eq 0 ];then continue fi grep -w "$var" "$b" > /dev/null if [ $? -eq 0 ]; then count=`expr $count + 1` fi seen="$seen $var" done fi done echo file $a and $b have $count same words. 10年後の俺へ 元気でやってるか?SEになれてる?彼女できた? 頑張れよ俺 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 YW0DIOHGUX 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 A5Z5N read.cgi ver 08.0u [upliftProject] - 2023/07/09 Walang Kapalit ★ | uplift ★ 5ちゃんねる