1 名前:デフォルトの名無しさん [2013/03/08(金) 13:01:05.08 ] JavaScript, Perl, PHP, Python, Ruby, … スクリプト言語をすべて扱うスレッドです。 最強のスクリプト言語は、どれよ? さあ、死ぬまで語りやがれ!!! ■ スクリプト言語の用途 Webアプリ、シェルスクリプト ■ スクリプト言語の特徴 実行速度に優れているわけではないが、 取り回しに優れ、コードの作成や修正が容易、プログラマの負担が軽い! ・インタプリタ ・動的型 ・正規表現 ・クロージャ などを利用できるものがある。 長いコードはここで ttp://play.island.ac/codepaste/ 【Perl,Python,PHP】LL バトルロワイヤル 29【JS,Ruby】 toro.2ch.net/test/read.cgi/tech/1361576195/
22 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 10:18:08.88 ] 可変長のリストの入力に対して固定長のリストを出力したいのですが 足りない部分を先頭の要素から0で埋めようと思います 例:出力が固定長 5 のとき 入力 [1, 3] 出力 [0, 0, 0, 1, 3] 入力 [2, 1, 3] 出力 [0, 0, 2, 1, 3] 入力 [5, 4, 2, 1, 3] 出力 [5, 4, 2, 1, 3] 一番シンプルに書ける言語はどんなのがありますか?
23 名前:20 mailto:sage [2013/03/09(土) 10:25:31.22 ] >>22 Prolog
24 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 10:30:02.10 ] >>22 Python xs = [1, 3] print(([0] * 5 + xs)[-5:])
25 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 10:35:08.59 ] >>18 $ cat todo #!/usr/bin/env python import sys import os import pickle if os.path.isfile('todo.dat'): with open('todo.dat', 'rb') as fp: todo = pickle.load(fp) else: todo = [] if sys.argv[1] == 'list': for x in enumerate(todo, 1): print('%s: %s' % x) elif sys.argv[1] == 'add': todo.append(sys.argv[2]) elif sys.argv[1] == 'done': todo.pop(int(sys.argv[2]) - 1) with open('todo.dat', 'wb') as fp: pickle.dump(todo, fp)
26 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 10:40:12.87 ] >>25 pythonが開発効率一位か
27 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 10:42:36.85 ] >>24 おもしろい記法があるものだな。
28 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 11:50:36.85 ] >>18 @Mathematica reset 機能を追加。 In:= toDo[mode_,action_:""]:=Module[{todofile,todolist}, todofile="todo.txt"; todolist=Import[todofile,"Text"]// StringSplit[#,"¥n"]&; Which[ mode == "add", Append[todolist,action]// Export[todofile,#]&;, mode == "list", todolist// MapIndexed[{ToString[#2[[1]]]<>":",#1}&,#]&// Grid, mode == "done", Drop[todolist,{action}]// Export[todofile,#]&;, mode == "reset", {}// Export[todofile,#]&; True, {}] ];
29 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 11:58:23.92 ] >>22 @Mathematica In:= lst = {1,3}; In:= PadLeft[lst,5] Out:= {0,0,0,1,3} リストのゼロ埋めは良く使うので、 組み込み関数として最初から持ってる言語も多いのでは。 >>24 def padLeft(lst, n): return (([0] * n + lst)[-n:]) ↑自分の Python ライブラリに追加しとくわ ノシ
30 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 12:02:12.76 ] 入力長 > 出力長 のときの動作が未定義
31 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 12:25:10.44 ] >>30 Mathematica だと、こうなる。 In:= PadLeft[{6,5,4,2,1,3},5] Out= {2, 3, 4, 5, 6} Python だとこんな感じかな。 def padLeft(lst, n): if len(lst)>n: return lst[-n:] else: return (([0] * n + lst)[-n:])
32 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 12:29:21.74 ] >>31 Pythonのその条件分岐は無くても同じ xs = [1,2,3,4,5,6,7,8] print(([0] * 5 + xs)[-5:]) #=> [4, 5, 6, 7, 8]
33 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 12:32:19.79 ] >>32 ほんとだ。 ついでに padRight も。 def padRight(lst, n): return ((lst + [0] * n)[:n])
34 名前:33 mailto:sage [2013/03/09(土) 12:33:45.72 ] インデントが消えてしまった。連投スマソ。 def padRight(lst, n): return ((lst + [0] * n)[:n])
35 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 12:59:45.16 ] perl >>18 use 5.016; use warnings; use Tie::File; tie my @list, 'Tie::File', 'todo.dat' or die $!; given($ARGV[0]){ when('add'){ push(@list, $ARGV[1]) } when('list'){ print map{ "$_: $list[$_ - 1]\n" } (1 .. @list) } when('done'){ splice(@list, $ARGV[1] - 1, 1) } default{ say "$0 usage: (add todo/list/done number)" } } >>22 my @l = (1, 3); my @r = ((0) x 5, @l)[@l .. $#l + 5];
36 名前:デフォルトの名無しさん [2013/03/09(土) 13:19:16.57 ] >>31 なんで順番かわるんだろ
37 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 13:21:07.05 ] >>35 perl は二度と使いたくないと決心を新たにしました。
38 名前:31 mailto:sage [2013/03/09(土) 13:25:49.63 ] >>36 ごめん。貼り付ける計算結果を間違えた。orz 正しくは、 In:= PadLeft[{6, 5, 4, 2, 1, 3}, 5] Out= {5, 4, 2, 1, 3}
39 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 13:50:02.25 ] 完動品として、>>18 を俺ならこう作る #!/usr/bin/perl use strict; use warnings; my ($com, $msg) = @ARGV; open(my $FH, "+<", "todo.data") || die("ファイルが開けない"); flock($FH, 2); my @data = <$FH>; if (!defined $com || $com eq "") { print "todo [add | done | list] [value]\n"; } elsif ($com eq 'add') { push (@data, $ARGV[1]."\n"); } elsif ($com eq 'done') { splice(@data, ($ARGV[1] - 1), 1); } elsif ($com eq 'list') { for (my $i=0; $i<scalar @data; $i++) { print $i + 1 , ':', $data[$i]}; } seek($FH, 0, 0); print $FH $_ for (@data); truncate ($FH, tell($FH)); exit;
40 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 13:57:24.34 ] $msg に値入れてるのにARGV[1]見てるのは、ちょっとした茶目っ気
41 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 14:29:05.12 ] 少ないな、もっと色々な言語の人くれよ
42 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 14:33:01.43 ] >>35 って配列をファイルに書きだすコード抜けてる?って思ったら Tie::Fileだと配列への変更がファイルに反映されるのか search.cpan.org/~toddr/Tie-File-0.98/lib/Tie/File.pm やはりあなどれないPerlあなどれない
43 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 14:38:25.99 ] Perl好きな俺が言うのもなんだけどタイはわかりにくい・・・
44 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 18:09:12.85 ] Thailand
45 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 19:08:30.26 ] おぉ?RubyやPHPのソースがないんじゃないか? 雑談の時は賑やかなのにソース晒すとなったら静かだなおい
46 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 19:36:50.88 ] rubyのひとは2chにソース貼るの極端に嫌う 著作権が自動的に2chに譲渡されるとか何とか
47 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 20:30:12.74 ] >>18 require "yaml" filename = "todo.yaml" todo = File.exists?(filename) ? YAML.load_file(filename) : [] case ARGV[0] when "add" todo << ARGV[1] YAML.dump(todo, open(filename, "w")) when "list" todo.each_with_index {|s, i| puts "#{i + 1}: #{s}" } when "done" idx = ARGV[1].to_i - 1 todo.delete_at(idx) YAML.dump(todo, open(filename, "w")) end >>22 xs = [1,3] p [0] * (5 - xs.size) + xs 別にruby詳しいわけじゃないから推奨されてない書き方してるかも
48 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 20:42:36.02 ] >>46 それをやたら主張する人が一時期いたんだよな
49 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 20:57:35.20 ] >>46 Ruby処理系のパッチなんかを2chに貼ると怒られることはあるけど お題の答えを貼るのまで嫌がったり問題視したりはしてないはず
50 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 21:06:29.34 ] >>46 >>49 それじゃオープンソースアプリの一部をコピペしたりしたら、 その一部が2chの著作物になるのか? そんな主張が認められるのか? だとしたら、コピペしまくれば2ch所有のソースばかりになるな
51 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 21:12:53.25 ] それってソースコードに限らないだろうし、とんでもないことになるよね 市販の小説をコピペしても2chの著作物になるなんて
52 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 21:17:58.60 ] >>50 バトンといっしょで権利を持たない人から権利を承継することはない だから誰かの著作物であるソースを2chにコピペしても2chが著作権を取得することはない 49で書いたのは「Rubyに不具合あったのでここ(2ch)にパッチ貼っちゃいますね」的な事例
53 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 21:18:07.75 ] クソスレ
54 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 21:36:39.84 ] たまにはガウチェ(゚д゚)!使いさんの回答を見たい
55 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 22:29:32.32 ] なるほど、Rubyユーザーはバグ見つけても上流にパッチ投げないクソが多いんですね
56 名前:デフォルトの名無しさん mailto:sage [2013/03/09(土) 23:05:27.22 ] xs=[1,3] (5-xs.size).times{xs.unshift(0)}
57 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 01:00:11.68 ] いつまで僕らはdankogaiを崇め続けなければならないのか anond.hatelabo.jp/20130309205518 Perlのためにdankogaiがたくさんコードを書いて貢献したのは知っている。 で、その貢献とやらは何十年にも渡って僕らが崇め続けなければならないほど凄いものだったのか? 僕らはいつまでdankogaiに「凄いですねー」ってご機嫌を取り続けないといけないの? 英語圏でこれほどまでに自分の過去の貢献を誇示し続けるOSSプログラマって少ないよ。 dankogaiがいつまでも過去の貢献を振りかざし続けるのはもうそれは老害と言われても仕方が無いんじゃないかなあ。 古参OSSプログラマがみんな過去の貢献にあぐらをかいて若者を見下すようになったらOSSは確実に終わる。
58 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 01:33:09.13 ] >>57 これ書いたの誰かわかるわ〜w まあ同意だけど
59 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 01:35:43.28 ] Perlの連中はわざわざこんなエントリ書かなきゃならんのか ご愁傷様
60 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 02:04:37.36 ] Twitter界隈でここんところPerlがディスられてたが ついにこのスレに飛び火したかw
61 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 02:21:10.61 ] perl撲滅されたら困るんですね よくわかります
62 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 02:25:17.22 ] dankogaiもライブドア事件のときに朝生でKYな存在だったのに 書評をコンスタントに書くだけでなぜか重鎮的な地位を手に入れたよな あれは不思議で仕方なかった
63 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 02:40:17.43 ] 係属は力なり
64 名前:デフォルトの名無しさん mailto:sage [2013/03/10(日) 02:47:21.58 ] 祇園精舎の鐘の声