1read 100read
2013年01月プログラム22: 【Perl,Python,PHP】LL バトルロワイヤル 28【JS,Ruby】 (417) TOP カテ一覧 スレ一覧 2ch元 削除依頼
datファイルを共有するP2Pソフト o2on 17dat (380)
JavaScriptスレ2 (623)
なぜポインタで引っかかる人が多いのか (1001)
C、C++の最適化について語るスレ 3 (833)
小学生プログラマだけど質問ある (259)
日本語プログラミング言語『なでしこ』スレ5 (827)

【Perl,Python,PHP】LL バトルロワイヤル 28【JS,Ruby】


1 :2012/12/05 〜 最終レス :2013/01/16
最強のLL=軽量プログラム言語は、どれよ?
エントリーは、Perl、PHP、Python、Ruby、JavaScript・・・
さあ、死ぬまで語りやがれ!!!
■LLとは?
軽量プログラミング言語(Lightweight Language,LL)とは、取り回しに優れ、
コードの作成や修正が容易と見なされるプログラミング言語のことを指す。
ここでいう「軽さ」はプログラマの負担の軽重を指し、
実行速度に優れているという意味ではない。
現在の水準では
・インタプリタ
・動的型
・正規表現
・クロージャ
などを利用できるものがLLと呼ばれることが多い。
ただし、他人の同意を得られるとは限りません。
長いコードはここで
ttp://play.island.ac/codepaste/
【Perl,Python,PHP】LL バトルロワイヤル 27【JS,Ruby】
http://toro.2ch.net/test/read.cgi/tech/1349545643/

2 :
前スレでは沢山のコードが書き込まれたが
JSのコードは一つも無かったな
スレタイにも入ってるのに……

3 :
PHPってSSIのことだよね?それか啓蒙書

4 :
>>1
おつ!

5 :
>>1


6 :
Perlのデバッグで nは進むんですが
戻る方法ってありますか?
1行戻る方法
なんかウザいです
どんどん進んだり間違ってタイプミスしたら終了します
たすけてください
おしえてください

7 :
並列化はPython, Scala, Haskellの圧勝だったな……

8 :
gnomeのtutorialも、c++よりjsの方が充実する今日、
未だにperlでソフトウェアやスクリプトを書くなんて、
何かの拷問だとしか考えられない。
一体、前世でどんなに悪いことをやらかしたんだろう。

9 :
JavascriptのRさはJavaに匹敵するレベル

10 :
言語の種類が増える一方だけど、競技コーディングの世界で、
c++やjavaが上位に来る理由について考えた方が良い
githubでのjavascriptの登録件数がrubyを越えた理由についても、少しは考える必要がある。

11 :
【お題】
[1, 2, 3, 4, 5, 6, 7]のようなリストを
次のような表に整形して出力せよ
<table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</table>

12 :
こんなウンkみたいなつまらないお題誰もやらんだろ、
何のヒネリも無いんだもん

13 :
>>11
@Mathematica
formatList[lst_] := lst //
 PadRight[#, Length[#] + 3 - Mod[Length[#], 3], "x"] & //
 Partition[#, 3] & //
 ToString //
 StringReplace[#, {
  "{{" -> "<table>&yen;r<tr><td>",
  "}, {" -> "</td></tr>&yen;r<tr><td>",
  ", " -> "</td><td>",
  "}}" -> "</td></tr>&yen;r</table>",
  "x" -> "&nbsp;"}] &;
In := formatList[{1, 2, 3, 4, 5, 6, 7}]
Out = (省略)

14 :
formatList 中の &yen; は、実際はバックスラッシュです。
投稿したら自動的に変換されちゃった。

15 :
>>11
Haskell

f _ [] = []
f n xs = take n (map show xs ++ repeat "&nbsp;") : f n (drop n xs)
h = mapM_ (putStrLn.("<tr>"++).(++"</tr>").(concatMap $ ("<td>"++).(++"</td>")))
main = putStrLn "<table>" >> (h.f 3) [1..7] >> putStrLn "</table>"

16 :
>>11
; Common Lisp
(let ((list '(1 2 3 4 5 6 7)))
(format t "<table>~%~{<tr>~3@{<td>~:[&nbsp;~;~:*~d~]</td>~}</tr>~%~}</table>~%"
(concatenate 'list list (make-list (- 3 (mod (length list) 3))))))

17 :
>>11
; Common Lisp
; >>16は3で割り切れるとき、駄目だったので訂正。
(let ((list '(1 2 3 4 5 6 7)))
(format t "<table>~%~{<tr>~3@{<td>~:[&nbsp;~;~:*~d~]</td>~}</tr>~%~}</table>~%"
(concatenate 'list list (make-list (abs (mod (length list) -3))))))

18 :
>>10
言語の種類が増えると何か困るのか?
他人を邪魔して困らせるのも競争の一つだ
だれにも邪魔されない競技を望むのは甘い

19 :
3で割り切れる場合を考慮に入れてなかった orz
>>17 を参考に、
@Mathematica(改定版)
formatList[lst_] := lst //
 PadRight[#, Length[#] + Abs[Mod[Length[#], -3]], "&nbsp;"] & //
 Partition[#, 3] & // ToString //
 StringReplace[#, {
  "{{" -> "<table>&yen;r<tr><td>",
  "}, {" -> "</td></tr>&yen;r<tr><td>",
  ", " -> "</td><td>",
  "}}" -> "</td></tr>&yen;r</table>"}] &;

20 :
>>10
考える参考にしたいので>>11をお願いします

21 :
>>11
Perl
my @list = (1..7);
print "<table>\n";
foreach my $i (0..$#list / 3){
    print
        "<tr>",
        map("<td>" . ($list[$i * 3 + $_] // "&nbsp;") . "</td>", (0..2)),
        "</tr>\n";
}
print "</table>\n";

22 :
ひねりも無くRubyで。
def make_table(ary, ncolumns = 3)
p ary
puts "<table>";
while ary.any?
print "<tr>";
ncolumns.times do
print "<td>#{ary.shift || "&nbsp;"}</td>"
end
puts "<tr>";
end
puts "</table>";
end
make_table [1, 2, 3, 4, 5, 6]
make_table [1, 2, 3, 4, 5, 6, 7]
make_table [1, 2, 3, 4, 5, 6, 7, 8]

23 :
>>11
#ruby
list = [1,2,3,4,5,6,7]
puts "<table>"
list.each_slice(3){|a,b,c|
b ||= "&nbsp;"
c ||= "&nbsp;"
puts "<tr><td>#{a}</td><td>#{b}</td><td>#{c}</td></tr>"
}
puts "</table>"

24 :
>>11
Python

lst = [1,2,3,4,5,6,7]
lst = lst + ["&nbsp;"] * ((3-len(lst))%3)
print('<table>')
for x in (lst[n:n+3] for n in range(0,len(lst),3)):
    print('<tr>%s</tr>' % ''.join('<td>%s</td>' % n for n in x))
print('</table>')

25 :
JavaScript
var arr = [1, 2, 3, 4, 5, 6, 7], n = 3, s = '';
for (var i = 0; i < arr.length; i += n) {
  var row = arr.slice(i, i + n);
  for (var j = row.length; j < n; j++) { row.push('&nbsp;'); }
  s += '<tr>' +
    row.map(function (v) { return '<td>' + v + '</td>'; }).join('') +
    '</tr>\n';
}
s = '<table>\n' + s + '</table>'
console.log(s);

>>12
確かにつまらない
けど、回答も酷いの多いからバランスは取れてるんだろう

26 :
こんな面白い言語が流行らないワケが無い > JavaScript
'' == '0' // false
0 == '' // true
0 == '0' // true
3 + '2' // 32
3 - '2' // 1
parseInt(0 + '9') // 0
parseInt(0 - '9') // -9

27 :
>>26
0 + '9' => '09'
だから、キャストと+演算子の仕様はおかしく思わないけど
parseInt()はハマるね。

28 :
ひねりもなくPowerShellの正規表現で。
[regex]::Matches( (1..7+,"&nbsp;"*2) -join ",", '(\d+,){1,3}(,?&nbsp;)*') |
% { ($_.value -split ',')[0..2] -join '</td><td>' } |
% { "<table>" } { "<tr><td>$_</td></tr>" } { "</table>" }

29 :
>>26
JavaScripterはたいてい「JavaScript: The Good Parts」を読んでるから
そういう面白いことはしないんだな

30 :
そういうヘンテコなノウハウ満載なのが大事なんだよ。
ノウハウは暗記すれば覚えられるから、
地頭が悪い子でも新人君に大きい顔が出来る。

31 :
1 == 1 // true
1 == [1] // true
[1] == [1] // false
1 === 1 // true
1 === [1] // false
[1] === [1] // false

32 :
>>22,23 を参考にして、Rubyの関数型プログラミング・スタイルで....
def make_table(list, n = 3)
  (
    ['<table>'] +
    list.each_slice(n).map { |cols|
      '<tr>' + cols.map { |col| "<td>#{col.to_s}</td>" }.join + '</tr>'
    } +
    ['</table>']
  ).join("&yen;n")
end
puts make_table([1,2,3,4,5,6,7])

33 :
【お題】
ウィルソンの定理を使って素数を判定する関数is_primeを実装し、
10000以下の素数以外の数の和を求めよ
ウィルソンの定理
pが素数 <=> (p-1)!+1 (mod p) == 0

34 :
>>33
Python
def fact(n, memo={}):
    if n == 0: return 1
    if n not in memo:
        memo[n] = n * fact(n-1, memo)
    return memo[n]
def is_prime(n):
    return fact(n-1) % n == n-1
print(sum(x for x in range(1,10001) if not is_prime(x)))

35 :
Output: 44268603

36 :
>>26
今のところさっぱりだが。

37 :
>>25
簡単すぎてつまらないでしょうが>>33もお願いします

38 :
>>33
@Mathematica
notPrimeSum[nmax_] := Module[{isPrime},

 isPrime[n_] := Mod[Factorial[n - 1] + 1, n] == 0;
 Range[1, nmax] // Map[If[isPrime[#], 0, #] &, #] & // Total];
In := notPrimeSum[10000]
Out = 44268603

39 :
>>33 Haskell
isPrime n = fact !! (fromInteger (n-1)) `mod` n == n-1
fact = 1 : zipWith (*) fact [1..]
main = print . sum $ filter (not.isPrime) [1..10000]
出力
44268603

40 :
>>33
間違えた...もう一度Haskell
isPrime 1 = False
isPrime n = fact !! (fromInteger (n-1)) `mod` n == n-1
fact = 1 : zipWith (*) fact [1..]
main = print . sum $ filter (not.isPrime) [1..10000]
出力
44268604

41 :
> pが素数 <=> (p-1)!+1 (mod p) == 0
だから1も素数に含めて良いんじゃないの?

42 :
そうかもね

43 :
>>33
; Common Lisp
(defun primep (l)
(labels ((fact (m &optional (n 1))
(if (zerop m)
n
(fact (1- m) (* m n)))))
(zerop (mod (1+ (fact (1- l))) l))))
(loop for x from 1 to 10000
unless (primep x)
sum x)

44 :
>>33
Perl
use List::Util qw(sum);
use bigint;
my @memo = (0 => 1);
sub fact {
    my ($n) = @_;
    return $memo[$n] //= $n * fact($n - 1);
}
sub is_prime {
    my ($n) = @_;
    return (fact($n - 1) + 1) % $n == 0;
}
print sum grep{ not is_prime $_ } (1..10000);

45 :
この速度差はなぜだろう?
Python http://ideone.com/ShjbMd
Haskell http://ideone.com/Oqj1MG
Common Lisp http://ideone.com/j2gR36
Perl http://ideone.com/SMtYZs

46 :
多倍長演算の得意不得意が出てるんじゃないのん。

47 :
メモ化しないとヤバいくらい遅い
メモ化しても多倍長演算が遅いと遅い

48 :
>>33
def fact_mod(n, m)
  return 1%m if n == 0
  prod = 1
  (1..n).each{|k|
    prod = prod*k % m
    return 0 if prod ==0
  }
  prod
end
def is_prime(n)
  return (fact_mod(n-1, n)+1)%n == 0
end
puts (2..10000).select{|k| !is_prime(k) }.inject(&:+)

49 :
>>33
Squeak Smalltalk で。
| fact isPrime |
fact := nil.
fact := [ | memo |
 memo := Dictionary new at: 0 put: 1; yourself.
 [:n | memo at: n ifAbsentPut: [n * (fact value: n-1)]]] value.
isPrime := [:n | (fact value: n-1) \\ n = (n-1)].
(1 to: 10000) inject: 0 into: [:sum :m | sum + ((isPrime value: m) ifTrue: [0] ifFalse: [m])]
&nbsp;

50 :
>>33
Haskellで>>48を参考に、メモ化を無くして並列化してみた

import Control.Parallel.Strategies
import Data.Maybe
factMod = factMod' 1 where
  factMod' p 0 n = p
  factMod' p m n = case p*(n-m) `mod` n of
                        0 -> 0
                        q -> factMod' q (m-1) n
isPrime :: Int -> Bool
isPrime n = factMod (n-1) n `mod` n == n-1
main = print $ sum $ catMaybes $ 
       parMap rseq (\p -> if isPrime p then Nothing else Just p) [1..10000]

51 :
>>33 Prolog
:- dynamic(階乗保存計算/2).
'ウィルソンの定理を使って素数を判定する関数is_primeを実装し、10000以下の素数以外の数の和を求めよ
ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_10000以下の素数以外の数の和) :-
    findsum(_p,(
            between(1,10000,_p),
            \+(is_prime(_p))),
        _10000以下の素数以外の数の和).
is_prime(_p) :- 'ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_p).
'ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_p) :-
    Y is _p - 1,
    階乗保存計算(Y,Z),
    0 is (Z + 1) mod X,!.
階乗保存計算(0,1) :- !.
階乗保存計算(1,1) :- !.
階乗保存計算(N,X) :-
    N2 is N - 1,階乗保存計算(N2,Y),X is N * Y,
    asserta((階乗保存計算(N,X) :- !)).

52 :
findsum/3の定義が必要だった。
findsum(_選択項,_項,_合計値) :-
    findall(_選択項,_項,_値ならび),
    sum(_値ならび,_合計値).
sum([],0).
sum([N|R],S) :-
    sum(R,S1),
    S is S1 + N.

53 :
Javaで同じコード書こうとしたらBigIntegerがRすぎてワロタ

54 :
JavaScriptで同じコード書こうとしたらゴミ実装のBigDecimalライブラリしか無くてワロタ

55 :
LLでの多倍長整数って便利だったところで、何かのプロトタイプに使うようなもんだよね

56 :
オーバーフローを気にせず足し算ができるのは大きいと思う
Cだとintのオーバーフローは未定義
Javaでも演算が無事完了する保証があるだけで、値に関しては何も述べてない
そういう怪しい世界に突入せずに済む

57 :
>>55
R言語使いの負け惜しみワロタ

58 :
お題がつまらないと言った時点で既に負け惜しみだった
つまらない問題を量産して負け惜しみを言わせれば勝てる
勝負にこだわるやつは良い出題者になれない

59 :
>>56
まあその辺の言語の基本型は、代わりにビット演算が比較的素直かなとは思う

60 :
演習のプログラムでオーバーフローのシグナルを捕らえようとしたけど出来なかったな
未だに原因が分からない

61 :
'ウィルソンの定理とは pが素数 <=> (p-1)!+1 (mod p) == 0'(_p) :-
    Y is _p - 1,
    階乗保存計算(Y,Z),
    0 is (Z + 1) mod _p,!.
% 一番最後の mod X は誤りでした。Xを全部_pに直したのだが
% そこだけ残ってしまった。

62 :
このスレの皆さんは変わった言語を使ってますね
何でその言語を使ってるの?

63 :
UbuntuでVimを愛し、Githubでソースを公開し、
気に入ったプロジェクトがあればPull Requestを送り、
Haskellを勉強し、Pythonのブログを書いていたとしても、
俺は依然として無職だし、Windowsでメモ帳でPHPを書いていても仕事は貰える!!

64 :
>>63
仕事探せ

65 :
>>62
そこに言語があるから

66 :
新しいお題としてこんなのどう?
http://gihyo.jp/dev/serial/01/codeiq/0001
簡単なビット処理なのでLLでライブラリ使用可なら十数行で書けそう
締め切りも過ぎたし、盗用投稿やネタバレの心配も無用かと

67 :
>>66 具体的にはこんな感じか?
【お題】
1. http://dl.dropbox.com/u/110505645/CodeIQ/20121129/embedded.png を読んで
2. この画像に繰り込まれた文字列を抽出して返すコードを書きやがれ!
3. 余力があれば任意画像に任意文字列を繰り込んで吐き出すコードも書いとけ

68 :
>>67
犯罪臭のするお題だなぁ

69 :
>>67
tEXtチャンクを抽出すれば良いの?

70 :
>>66,67
9割以上解析だけど、時間切れで余力なし。Python 2.7/PIL
ideone.com/mUBLes
>>68
犯罪?はないと思うけど、悪用可能だったりするの?それともモラル的な問題?
サイトの規約とかは読んでないので、何か問題あるようだったら削除申請よろしく

71 :
>>69
話の流れから、ビット処理、ステガノグラフィー

72 :
>>67
Squeak Smalltalk で
| url stream image decode |
url := 'http://dl.dropbox.com/u/110505645/CodeIQ/20121129/embedded.png'.
stream := HTTPClient httpGet: url.
image := ImageReadWriter formFromStream: stream.
decode := [:px | (px >> 11 bitAnd: 224) + (px >> 5 bitAnd: 24) + (px bitAnd: 7)].
^((image bits asArray collect: decode) upTo: 0) asByteArray asString convertFromEncoding: #utf8
=> '漢字、カタカナ、ひらがなの入ったPNG。
'

73 :
rubyって、scipyやblender級のソフトウェアないの?
手段としてはメリット薄いぞ

74 :
PHPやrailsで一枚岩って色々と危険杉
生残るためには、せめてpythonかjava

75 :
>>74
いろいろって例えば?

76 :
会社をくびになったとき

77 :
今は仕事があったとしても、いずれは競合が増える。PHPやrailsじゃ、
一部の仕事をするのに手っ取り早くても、今のところ他のことに使えない。

78 :
最近のデザイナーって普通にpython使える人が多い

79 :
>>78
デザイナーって

80 :
javascriptのイディオム覚える知能があれば、pythonぐらい扱えるでしょ
UIレベルだと競合増えるの明らかで、生存するには自然言語処理だの機械学習だの方面じゃない?
他に、もっとオイシイ分野ある?

81 :
オイシイ分野ってなんだ?
お金が稼げるという意味なら
仕事があるJavaScriptの方がオイシイだろ。

82 :
>>79
3dのモデラーとか2dのイラストレーター

83 :
>>73
Rubyはもともとそーゆーユーザーアプリケーションを作るようなプログラミング言語ではありません
どちらかというとシェルスクリプトに近い

84 :
シェルに失礼だろうRubyなんかただオモチャ

85 :
Unixなんかおもちゃ
コンピュータなんかおもちゃ
核兵器なんかおもちゃ
決め付けって素晴らしいねw

86 :
>>73
そういう用途にはpythonがおすすめ
無理にrubyでやろうとするのがアホ

87 :
「Ruby」は「オブジェクト指向」の隠語かもしれない
隠さずに言うと、オブジェクト指向なんかおもちゃ
無理にオブジェクト指向でやらない

88 :
最近のデザイナーは普通にプログラム組めてびっくりした。
彼らの話てた第一級関数ってなんだよ。

89 :
40万するパソコンの使い道

90 :
staticおじさんかw

91 :
コンパイルエラーが出なければ大丈夫と信じていたのに粛清されるおっさん
そして地獄の底から帰ってきたおっさんの復讐を後押しするおいしい分野

92 :
>>86
python使った方がカバレッジする領域ひろいじゃない
jsは、決定打になってもwebアプリとスマホに閉じられそう
ここに統計周りのライブラリとユーザーアプリが作られたなら、
いよいよ終わりのときが来たって、もう何も考えないけれど

93 :
>>92
おまえプログラミング言語勉強する前に日本語勉強しろよ
意味不明なんだよw

94 :
言ってる意味が理解できないなら、業界全般を見回した方が良いんじゃない?

95 :
はぁ? 述語がねーのに理解できねーだろ、おまえは本当にバカだなーww

96 :
おまえは が主語で
バカ ってのが述語だ つまり、おまえはバカだと言ってるわけだ
理解できる?

97 :
だからその、バカ(述語)がないっていってるだろ。
このスレのどこにバカって書いてある?
>>95で初めて出てきた単語なんだから
述語がないというのは正しいだろ

98 :
馬鹿には無理

99 :
>>92が言いたいことってのは、
Pythonはオイシイ分野で使えるアプリケーションがあるので生き残るが、
RubyやPHPは死ぬ。Python最強。
おいしいといって>>81が出したJavascriptはWebアプリとスマホにしか使われないだろう。
もし仮に統計ライブラリとユーザーアプリが作られたらLL戦争にも終わりが来たと思って、
何も考えずにJavascriptを使うことになるだろうな。
ということか? 分かってねえな、最後に生き残るのはLISPなんだよ。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【信者】C++の問題点【アンチ】 (379)
正規表現 Part10 (494)
Androidプログラミング質問スレ Part28 (487)
Androidプログラミング質問スレ Part28 (487)
●●●●TCL/TKなら俺に聞け 2●●●● (926)
Visual Studio IDE環境 (568)
--log9.info------------------
【60才以上限定】トムウェイツ【座談会】 (293)
【Relax】FankieGoesToHollywood【Pleasuredome】 (281)
THE POP GROUP ザ・ポップ・グループ (440)
♪大好きな音楽をyoutubeで紹介すれ〜♪ (613)
オリコンチャート売上枚数Q&A2 (689)
♪この曲のタイトルを教えてください。37曲目♪ (716)
BEING GROUP::229 (574)
音楽CDいらなくね?【サイレントテロ】 (250)
■□■勝手に替え歌するスレ■□■ (672)
消費者が音楽業界に物申す (898)
音楽CD悲鳴、もう音楽CDがさっぱり売れん (290)
■■■ SMEの裏情報 ■■■ (432)
日本人の好きな3大コード進行を語るスレ2 (590)
秋元康は日本の音楽界を腐らせた元凶 (351)
河原美代子 (304)
本当に好きな音楽と建前上好きな音楽は? (400)
--log55.com------------------
【コンシューマ】ゲーム好きのドケチ【アーケード】
【PSE】電気用品安全法でリサイクルショップ死亡
逆にこれだけはケチった方がいいもの
貧乏】ドケチの婚活【金なし
食費を書き込んで切磋琢磨するスレ1
働いている人、お昼ご飯について語ろう
ドケチなら中国野菜は買わないよな
ドケチにとって寿司とは何か