1 名前:デフォルトの名無しさん [2019/02/03(日) 11:21:53.20 ID:72eosYJ+.net] プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ https://mevius.2ch.net/test/read.cgi/tech/1538096947/
619 名前:デフォルトの名無しさん [2019/03/11(月) 13:45:52.04 ID:+cahZmCl.net] >>606 仕様をきっちり決めないと解釈の違いから沢山の違った回答が出てくる可能性があるのだが、それで良いと。
620 名前:デフォルトの名無しさん [2019/03/11(月) 16:12:48.47 ID:TMb+YRHxP] >>571 >>597 Haskellでも複数対応してみた。 main = mapM_ (putStrLn.secret "abcdef" [2,3,5]) [elem,notElem] secret xs ns = secret' xs 1 ns where secret' [] _ _ _ = [] secret' (x:xs) n as f | f n as = x:secret' xs (n + 1) as f secret' (_:xs) n as f = '*':secret' xs (n + 1) as f
621 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 15:42:22.28 ID:7+lrfCi1.net] >>605 そもそも4方向にいくらかずつ進んで四角形で終わりという形とは限らないのでは? ランダムに方向や距離を生成して既に通った道も上書きするような入力を許容すると考えたっていいはず。
622 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 16:07:33.07 ID:5vEtkzIB.net] >>606 何でこれ以外の形は許さんと言えないんだ? 自由にどうぞなんて問題じゃ無いだろ。
623 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 16:18:14.19 ID:ZVqwh3rP.net] >>607 ,610 こいつらホント掃き溜めのゴミだな
624 名前:デフォルトの名無しさん [2019/03/11(月) 16:19:55.06 ID:+cahZmCl.net] >>571 Kotlin https://paiza.io/projects/fOvQDvJ6VoTchgVL3pYJpw
625 名前:デフォルトの名無しさん [2019/03/11(月) 16:25:40.59 ID:+cahZmCl.net] >>609 なるほど。しかしそれならばその事を書いておいて欲しかったな。 >>611 何を作れば良いのかよくわからないから質問しているだけなのだが。それが君にとって何か不都合なのか?
626 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 16:58:12.79 ID:PGatxMde.net] >>602 出力おかしくねぇ?最初と最後の行は5列だけど 間の行ぜんぶ6列になってるぞ? 出力: >>>>> ^****v ^****v ^****v ^****v <<<<v こうじゃね? >>>>> ^***v ^***v ^***v ^***v <<<<v
627 名前:デフォルトの名無しさん [2019/03/11(月) 17:14:58.23 ID:+cahZmCl.net] ま、いいや。よくわかんない問題は放っておこう。
628 名前:デフォルトの名無しさん [2019/03/11(月) 18:14:45.27 ID:I7wjNxVQq] >>547 Haskell import Data.Char main = (mapM_ print.filename) ["a","aB.txt","Ab.txt","xx","cd","cD","CD","f"] filename [] = [] filename (xs:xss) |length a > 1 = a:(filename.drop (length a)) (xs:xss) where a = filter ((map toUpper xs ==).map toUpper) (xs:xss) filename (_:xss) = filename xss
629 名前:デフォルトの名無しさん [2019/03/11(月) 19:08:54.88 ID:TMb+YRHxP] ソートするの忘れてた…。 import Data.Char main = (mapM_ print.filename) ["a","aB.txt","Ab.txt","xx","cd","cD","CD","ab.txt","f"] filename [] = [] filename (xs:xss) | length a > 1 = a:(filename.drop (length a)) sorted where a = filter ((map toUpper xs ==).map toUpper) sorted sorted = ssort (xs:xss) filename (_:xss) = filename xss ssort [] = [] ssort xs = minimum xs:(ssort.delete (minimum xs)) xs delete _ [] = [] delete n (x:xs) | n == x = xs delete n (x:xs) = x:delete xs
630 名前:デフォルトの名無しさん [2019/03/11(月) 19:49:55.14 ID:TMb+YRHxP] 度々ごめん・・・ バグが有った。 そもそもソートとか関係なかった。 import Data.Char main = (mapM_ print.filename) ["a","aB.txt","Ab.txt","xx","cd","cD","CD","ab.txt","f"] filename [] = [] filename (xs:xss) | length a > 1 = a:filename b where a = func (==) b = func (/=) func f = filter (f (map toUpper xs).map toUpper) (xs:xss) filename (_:xss) = filename xss
631 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 19:21:39.70 ID:PGatxMde.net] >>602 javascript 長くなっちった https://ideone.com/vzncKq 入力: <<<<^^^^>>>>>vv<<<<<<<<<<<vvv>>>^^^^^^^>>>>>>>>>>vvvvvv 出力: ***^>>>>>>>>>> ***^*********v ***^**^>>>>>*v ***^**^****v*v <<<^<<<<<<<v*v v**^**^******v v**^**<<<<***v v>>>**********
632 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 19:36:33.05 ID:/Vx80pKW.net] お題 m×nマスのチェス盤を考える。 1つのナイトが最も左上のマスにあり、そこから任意の回数動かすことができる。 ナイトが訪れることのできるマスの個数を求めよ。 m=1, n=1 => 1 m=3, n=3 => 8 (真ん中のマスを訪れることができない) m=4, n=4 => 16
633 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 19:36:35.88 ID:DXpwYxNa.net] >>619 説明がないと何をどうやってるのかわけわからん。 先ずは入力と出力をどう解釈して作ったのか? 形にも一貫性があるとは思えないけど。 しかしこんなのがどんどん出てきたら、煩わしいだけ。
634 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 20:02:17.74 ID:JmszPBJl.net] いや、その通りに歩くんだろ
635 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 20:07:58.88 ID:5vEtkzIB.net] 出題通り以外の回答はやめてほしいな。 それ以外の回答をする場合は、解説文も日本語で書いてくれよ。 不慣れなプログラムもあることだろうし、長いプログラムなんて見る気にもならないし、プログラムを見
636 名前:黷ホわかるというのは無し。 [] [ここ壊れてます]
637 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 21:26:59.93 ID:ALw/TkKR.net] >>623 ソースの中身まではちゃんと確認してないけど、ちゃんと出題通りにできてると思う。 出題の"入力例"通りではないが、複雑な入力パターンに対して正しく動いてそうと思える実行例だと思うぞ。
638 名前:デフォルトの名無しさん [2019/03/11(月) 21:31:45.37 ID:1OBeL2+Y.net] >>602 Common Lisp, >>619 の移植 https://ideone.com/B76Dki
639 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:12:51.52 ID:+V1dboU8.net] >>>v<^^>> の場合 *^>> >^> *<v
640 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:40:32.65 ID:6pdTomDX.net] >>571 octave 複数列指定可能版 https://ideone.com/UqKcNb h = @(m, n) cell2mat(arrayfun(@(c, i) {['*'; c] [c; '*']}(1 + (i == n)), m, 1:numel(m))); ↓ h = @(m, n) cell2mat(arrayfun(@(c, i) {['*'; c] [c; '*']}(1 + any(i == n)), m, 1:numel(m)));
641 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:02:42.18 ID:GdRfR4uu.net] 以下の整形式の.ini ファイルから、すべての値を取得して、 「セクション名 : キー名 : 値」で表示する [sec1] key1=val1 [sec2] key2=val2
642 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:51:36.77 ID:/Vx80pKW.net] >>628 C++ https://ideone.com/V4sf81
643 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 00:26:56.22 ID:XpXqAgCh.net] >>628 Perl5 while (<DATA>) { $s = $1 if /\[(\w+)\]/; print "$s:$k:$v\n" if ($k, $v) = /(\w+)=(\w+)/; } __DATA__ [sec1] key1=val1 [sec2] key2=val2 実行結果 ~ $ perl 13_623.pl sec1:key1:val1 sec2:key2:val2
644 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 00:37:42.27 ID:XpXqAgCh.net] >>630 も少し簡潔に書けるんだった… while (<DATA>) { $s = $1 if /\[(\w+)\]/; print "$s:$1:$2\n" if /(\w+)=(\w+)/; } __DATA__ [sec1] key1=val1 [sec2] key2=val2
645 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 01:38:34.08 ID:nghHbW0D.net] >>628 javascript(es2018 named capture groups) ` [sec1] key1=val1 [sec2] key2=val2 `.replace(/\[(?<section>.+)\]\n(?<key>.+)=(?<value>.+)\n/g, '$<section>:$<key>:$<value>').trim(); 結果: sec1:key1:val1 sec2:key2:val2
646 名前:デフォルトの名無しさん [2019/03/12(火) 05:56:44.85 ID:KPetEW8/.net] >>547 Haskell import Data.Char main = (mapM_ print.filename) ["a","aB.txt","Ab.txt","xx","aBc.txt","cd","cD","CD","ab.txt","z"] filename [] = [] filename (xs:xss)| length a > 1 = a:filename b where a = func (==) b = func (/=) func f = filter (f (map toUpper xs).map toUpper) (xs:xss) filename (_:xss) = filename xss
647 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 17:03:25.03 ID:+VdOvnK/.net] >>620 0 <= m,n <=10億 と仮定して int64_t cal(int m, int n){ if( m>n ) swap(m, n); if( m<=1 ) return m; if( m==2 ) return (n + 1) / 2; if( n==3 && m==3) return 8; return (int64_t)n * m; }
648 名前:デフォルトの名無しさん [2019/03/12(火) 18:21:10.69 ID:MLSq27aG.net] >>628 Io f := method(s, s split("\n\n")map(splitNoEmpties("[","]","\n",=")join(":")) )
649 名前:デフォルトの名無しさん [2019/03/12(火) 18:30:10.82 ID:M/w6PjEF.net] >>624 出題通りなのかどうかがわからんのだが。どう解釈したら出題通りとなるのか?
650 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 19:26:28.38 ID:mUEXbKn8.net] お題 数列a[i]を考える。 a[0] = p a[i+1] = q * a[i] + r [入力] p q r n (p,q,r,nは整数) (0≦p,q,r≦99) (0≦n≦10^10) [出力] a[n] mod 13 を求めよ 1 2 0 8 => 9 (2^8 mod 13) 1 0 99 0 => 1 1 2 3 2 => 0 (a[0]=1, a[1]=2*1+3=5, a[2]=2*5+3=13) 1 3 5 10000000000 => ?
651 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 20:52:19.49 ID:2hm/Dong.net] つまらん
652 名前:デフォルトの名無しさん [2019/03/12(火) 21:03:21.90 ID:KPetEW8/.net] >>624 >>547 に対して、ナチュラルソートされて無くても(普通のソートでも正しい答えが得られるとは限らない)正しい答えを出せるとか、出題者の意図を踏まえながら、意図を超えた範囲もカバーするのはいいんじゃ無いか? 意図を無視するのは論外だが。
653 名前:デフォルトの名無しさん [2019/03/12(火) 21:07:56.58 ID:KPetEW8/.net] >>637 マシンパワーがあれば式を入れればいいだけってのはね。。。 解くのに頭使う。解いてみたら案外簡単(アルゴリズムが浮かぶのがキモ)。あえて難しくて最適化の道がある。とかが望ましい。 いあ、無茶振りだろうから、どれか2つ満たせればおkだが。
654 名前:デフォルトの名無しさん [2019/03/12(火) 21:12:06.00 ID:KPetEW8/.net] 例えば[[1,2,3],[4,5,6],[7,8,9]]みたいな任意のn*nなリスト(または配列)を非破壊的に作れ。とか。
655 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 21:43:25.40 ID:rf03pH6k.net] >>641 一般的なミューテートするカウンタも使っちゃダメってことかな?
656 名前:623 mailto:sage [2019/03/12(火) 22:49:08.83 ID:oX4bYoPv.net] >>628 お題を修正 [ ] = の3つは、特別な記号です。 それらを含まない行は、無視して [sec1] key1=val1 [sec2] key2=val2 x=y >>632 セクション名・キー名・値は、特定の文字列ではありません! 特別な記号以外の、任意の文字列です
657 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:03:23.82 ID:oX4bYoPv.net] お題 現行規格のISBN (ISBN-13) のcheck digit は、JANコードと同じく、 「モジュラス10 ウェイト3・1(モジュラス10 ウェイト3)」という計算法にて算出される 一番右側の? の所のcheck digitを除いて、数字以外は無視して、 一番左側の桁から順に、1、3、1、3…を掛けて、それらの和を取る。 和を10で割って出た余りを、10から引く。 ただし、10で割って出た余りの下1桁が0の場合は、check digitを0とする ISBN 978-4-10-109205-? 9×1 + 7×3 + 8×1 + 4×3 + 1×1 + 0×3 + 1×1 + 0×3 + 9×1 + 2×3 + 0×1 + 5×3 = 9 + 21 + 8 + 12 + 1 + 0 + 1 + 0 + 9 + 6 + 0 + 15 = 82 82 ÷ 10 = 8 あまり 2 10 - 2 = 8 幾つかのISBN-13 で、計算してみて!
658 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:07:31.93 ID:+VdOvnK/.net] >>637 https://ideone.com/Y4N5oM c++ 小さい数値は力技(bf2)で確認してみたが……
659 名前:デフォルトの名無しさん [2019/03/12(火) 23:27:43.44 ID:LDiZRGdZ.net] >>602 Common Lisp >>625 のリファクタリング ついでに * を空白に、開始地点を A、終了地点を Z に
660 名前:オてみた https://ideone.com/zMHal6 Python https://pastebin.com/NAGHLtcu 実行結果 https://webmshare.com/Ma3gZ [] [ここ壊れてます]
661 名前:デフォルトの名無しさん [2019/03/12(火) 23:42:34.93 ID:2FAQzMGK.net] >>637 C https://ideone.com/m3vejt エクセルとかで実際に数列を計算してみると、長さ12(剰余の数-1)以下の周期になるっぽいのでそれで求められる。 普通に計算するとq * a[i] + r はどんどん大きくなるけど、 毎回 (q * a[i] + r) mod 13としても、計算に影響はないようなので、オーバーフローもせずに計算できる。 だたし、数学的に正しいか保証しかねるが。
662 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 00:12:22.73 ID:rGhbMCbu.net] >>645 12 0 11 1 => 11 というコーナーケースが…
663 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 00:29:04.16 ID:Eq+ygVqk.net] >>648 確かに、 コメントアウト(bf2)するときに誤ってしまったようだ、 ("if(n==0)" だったのだが、いらないなぁ) どっちにしろ、0や1のテストは、やってない
664 名前:デフォルトの名無しさん [2019/03/13(水) 00:51:17.73 ID:vPzmbHWs.net] >>642 だめ。 そこが関数型言語と手続き型言語の考え方の大きな違いだし。 皮肉にも?それ作った時、入門書の関数より考え方の違いが分かった。
665 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 00:54:41.38 ID:bUFEpZHr.net] >>643 > セクション名・キー名・値は、特定の文字列ではありません! > 特別な記号以外の、任意の文字列です えぇ… 入力: [あああ] いいい=ううう [えええ] おおお=かかか 出力: あああ:いいい:ううう えええ:おおお:かかか 少なくとも任意の文字列には対応してるじゃん。不当指摘だ!
666 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 01:18:15.16 ID:FktqEJYT.net] >>650 javascript const seqSqArr = n => Array.from({length: n}).map((v, i) => Array.from({length: n}, (v, j) => n * i + j + 1)); console.log(seqSqArr(3)); //=> [[1,2,3],[4,5,6],[7,8,9]] console.log(seqSqArr(7)); //=> [[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21],[22,23,24,25,26,27,28],[29,30,31,32,33,34,35],[36,37,38,39,40,41,42],[43,44,45,46,47,48,49]]
667 名前:623 mailto:sage [2019/03/13(水) 02:39:20.04 ID:ZImJqTUY.net] >>651 スマン。漏れの間違い! key, val などの特定の文字列を置換しているのかと、勘違いしていた
668 名前:デフォルトの名無しさん [2019/03/13(水) 05:11:02.02 ID:36vLAC/n.net] >>644 J f =: 3 : 0 10 | 10 - 10 | +/ (12 $ 1 3) * "."0 }: y -. '-' ) f '978-4-10-109205-8' 8 f '978-4873115870' 0
669 名前:デフォルトの名無しさん [2019/03/13(水) 06:35:32.94 ID:vPzmbHWs.net] >>641 ,642,650,652 Haskell main = ps 3 >> putStrLn "" >> ps 7 where ps = print.seqSqList seqSqList n = (take n.iterate (map (+ n))) [1..n] out: [[1,2,3],[4,5,6],[7,8,9]] [[1,2,3,4,5,6,7],[8,9,10,11,12,13,14],[15,16,17,18,19,20,21],[22,23,24,25,26,27,28],[29,30,31,32,33,34,35],[36,37,38,39,40,41,42],[43,44,45,46,47,48,49]]
670 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 20:01:04.25 ID:loIc2/nm.net] >>628 ruby https://ideone.com/FBiZcF
671 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 22:22:09.99 ID:H95Q/dPG.net] こうかな? ;; Common Lisp (defun seq-sq-list (n) (labels ((sub (i r) (if (zerop i) r (sub (1- i) (if (zerop (mod i n)) (cons (list i) r) (cons (cons i (car r)) (cdr r))))))) (sub (* n n) nil)))
672 名前:さまよえる蟻人間 mailto:age [2019/03/13(水) 23:29:50.59 ID:KwyST1w4.net] お題: ピリオド区切りの二つのバージョン番号を比較し、大小関係を判定した結果を-1, 0, 1のいずれとして
673 名前:ヤせ。 0.1.2 > 0.0: 1 1.2.3 < 1.3: -1 0.0.0 == 0.0: 0 [] [ここ壊れてます]
674 名前:デフォルトの名無しさん [2019/03/14(木) 00:08:08.19 ID:TPG8S2ma.net] >>658 手抜きHaskell main = mapM_ pc $ [("0.1.2", "0.0"), ("1.2.3", "1.3"), ("0.0.0", "0.0")] where pc = print.uncurry mycompare mycompare "0.0.0" "0.0" = 0 mycompare "0.0" "0.0.0" = 0 mycompare xs ys |xs `compare` ys == EQ = 0 |xs `compare` ys == GT = 1 |xs `compare` ys == LT = -1
675 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 01:08:57.36 ID:vRIsxo2e.net] >>602 Perl5 $s = '>>>>>vvvvv<<<<^^^^'; ($i, $y) = (0, 0); for (split'',$s) { $i++ if />/; $i-- if /</; $j++ if /v/; $j-- if /\^/; push @t, [$i, $j, $_]; } use List::Util qw{min max}; ($i, $j) = (min(map{$$_[0]} @t), min(map{$$_[1]} @t)); $$_[0] -= $i, $$_[1] -= $j for @t; ($i, $j) = (max(map{$$_[0]} @t), max(map{$$_[1]} @t)); push @m, [('*')x($i + 1)] for 0..$j; $m[$$_[1]][$$_[0]] = $$_[2] for @t; use feature say; say @$_ for @m; 実行結果 ~ $ perl 13_601.pl >>>>> ^***v ^***v ^***v ^***v <<<<v
676 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 01:16:23.50 ID:vRIsxo2e.net] >>643 Perl5 $r = qr/[^][=]/; while (<DATA>) { chomp; $s = $1 if /\[($r+)\]/; print "$s:$1:$2\n" if /($r+)=($r+)/; } __DATA__ [sec1] key1=val1 [sec2] key2=val2 実行結果 ~ $ perl 13_638.pl sec1:key1:val1 sec2:key2:val2
677 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 06:43:00.64 ID:3EvgP48J.net] >>658 0.0.1 > 0.0 でいいのか?
678 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 07:26:20.10 ID:1+g2CCuw.net] >>662 ない桁はゼロと見なす。
679 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 10:42:18.54 ID:YiVNNcx0.net] >>658 javascript const vComp = (a, b) => { const [semA, semB] = [a, b].map(v => { const {major, minor = 0, patch = 0} = /(?<major>\d+)(\.(?<minor>\d+)(\.(?<patch>\d+))?)?/.exec(v).groups; return {major, minor, patch}; }); const majorComp = semA.major - semB.major; if (majorComp) return Math.sign(majorComp); const minorComp = semA.minor - semB.minor; if (minorComp) return Math.sign(minorComp); const patchComp = semA.patch - semB.patch; return Math.sign(patchComp); }; console.log(vComp('0.1.2', '0.0')); console.log(vComp('1.2.3', '1.3')); console.log(vComp('0.0.0', '0.0')); 結果: 1 -1 0 (おまけ)ソート: console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp)); 結果: ["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
680 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 10:59:38.01 ID:PwP2txgq.net] >>658 大小関係の定義をまじめに考えましょう。 >>664 JavaScriptならsplit使えるはず。桁数の制限は要らない。
681 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 11:23:19.67 ID:YiVNNcx0.net] ごめん勝手にsemverかと思い込んでた
682 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 11:35:04.68 ID:1+g2CCuw.net] LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。 一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。 まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。
683 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 11:47:43.06 ID:1+g2CCuw.net] 一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。
684 名前:デフォルトの名無しさん [2019/03/14(木) 13:52:35.97 ID:uKED8jms.net] >>658 Perl https://paiza.io/projects/puAYVRuDktPCBh_Xdd2vbQ
685 名前:デフォルトの名無しさん [2019/03/14(木) 15:56:35.04 ID:TPG8S2ma.net] >>547 Haskell 内包表記の方が何をやってるか分かり易いと気付いて書き換えた。 import Data.Char main = (mapM_ print.filename) ["aB.txt","Ab.txt","xx","cd","cD","CD","ab.txt"] filename [] = [] filename (xs:xss)| length a > 1 = a:filename b where a = func (==) b = func (/=) func f = [xs' | xs' <-
686 名前: (xs:xss), map toLower xs `f` map toLower xs'] filename (_:xss) = filename xss [] [ここ壊れてます]
687 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:00:35.68 ID:38t26SL0.net] お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ
688 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:07:12.84 ID:YPV07ntD.net] >>658 # Python def cmp(v0,v1): if v0==v1: return 0 else: return 1 if (v0 > v1) else -1 print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') , cmp('1.1', '1.1') , cmp('1.2.3','1.3') ) # 1 1 0 -1
689 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 18:11:49.83 ID:1+g2CCuw.net] >>672 バージョン番号の各整数の数字は2個以上になることがある。'10.0'と'9.1'を比較せよ。
690 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:14:06.49 ID:YPV07ntD.net] >>672 print( cmp('1.1.0', '1.1') ) # 1
691 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:32:38.72 ID:YPV07ntD.net] >>672 訂正 Python def cmp(v0,v1): v0 = list( map(int , v0.split('.') ) ) v1 = list( map(int , v1.split('.') ) ) if v0==v1: return 0 else: return 1 if (v0 > v1) else -1 print(cmp('1.2.3','1.2') , cmp('1.2.3','1.1.1') , cmp('1.1.0', '1.1') , cmp('10.0','9.1') , cmp('1.1', '1.1') , cmp('1.2.3','1.3') , cmp('1.1', '1.1.0') , ) # 1 1 1 1 0 -1 -1
692 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 18:44:00.25 ID:1+g2CCuw.net] >>675 残念だが不正解。比較できる桁がなければゼロと見なす、すなわち、2.0.0は2に等しいと見なす決まりがある。
693 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:50:17.55 ID:dvZ8z+Z0.net] >>658 octave https://ideone.com/xh4Cj4
694 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:58:38.18 ID:dvZ8z+Z0.net] お題:フィボナッチ数列を最初の10個表示せよ ruby https://ideone.com/ewyP50 perl6 https://ideone.com/O3tVZj
695 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 18:59:00.09 ID:1+g2CCuw.net] ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。 検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。 インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。
696 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 18:59:16.90 ID:38t26SL0.net] お題: 3つの数の最小値を1回の分岐で決めろ!
697 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:55:29.27 ID:YiVNNcx0.net] >>665 javascript const vComp = (a, b) => { const verA = a.split`.`; const verB = b.split`.`; const shorter = verA.length - verB.length < 0 ? verA : verB; const cmps = shorter.map((v, i) => Math.sign(verA[i] - verB[i])); return cmps.reduce((acc, v, i) => Math.sign(acc + v * 2 ** (shorter.length - i)), 0); }; console.log(vComp('0.1.2', '0.0')); console.log(vComp('1.2.3', '1.3')); console.log(vComp('0.0.0', '0.0')); 結果: 1 -1 0 (おまけ)ソート: console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp)); 結果: ["0.0", "0.0.0", "0.0", "0.1.2", "1.2.3", "1.3"]
698 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:59:51.70 ID:YiVNNcx0.net] あっ間違えた 家帰ってから直す
699 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:14:25.92 ID:vvVzV1YI.net] >>676 どこにそんな決まりがあるの? 普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。 総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。
700 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:14:59.41 ID:ko69m/9G.net] 見つけた RPM::VersionSort - RPM version sorting algorithm, in perl XS - metacpan.org https://metacpan.org/pod/RPM::VersionSort
701 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:16:24.45 ID:vvVzV1YI.net] とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。 同じと思う方がおかしい。
702 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:16:49.16 ID:0tbf1s3D.net] お題:“木”という漢字を使って以下のようなフラクタル図形を描け n=0 木 n=1 -木 木木 n=2 ---木 --木木 -木--木 木木木木 n=3 -------木 ------木木 -----木--木 ----木木木木 ---木------木 --木木----木木 -木--木--木--木 木木木木木木木木 ※ハイフンはスペースだと思ってください
703 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 20:26:23.57 ID:1+g2CCuw.net] >>683 Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。
704 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:45:22.76 ID:vvVzV1YI.net] >>687 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。
705 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:52:19.11 ID:YiVNNcx0.net] >>665 の修正 const vComp = (a, b) => { let verA = a.split `.`; let verB = b.split `.`; const len = Math.max(verA.length, verB.length); verA = [...verA, ...'0'.repeat(len - verA.length)]; verB = [...verB, ...'0'.repeat(len - verB.length)]; const cmps = verA.map((v, i) => Math.sign(verA[i] - verB[i])); return Math.sign(cmps.reduce((acc, v, i) => acc + v * 2 ** (len - i)), 0); }; console.log(vComp('0.1.2', '0.0')); console.log(vComp('1.2.3', '1.3')); console.log(vComp('0.0.0', '0.0')); console.log(['0.1.2', '0.0', '1.2.3', '1.3', '0.0.0', '0.0'].sort(vComp)); //いいかげん結果省略
706 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 22:10:39.99 ID:8oAE3RnG.net] >>688 例に0.0.0と0.0が等しいって書いてあるんだが
707 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:16:14.88 ID:3EvgP48J.net] >>688 > いちいち誰かのいちゃもんに付き合ってる暇はない。 ならスルーしろよ お前の頓珍漢な解釈なんて要らんし
708 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:41:35.78 ID:nI5lwjDU.net] >>658 Squeak Smalltalk | fn | fn := [:strs | (strs collect: [:str | (str subStrings: '.') polynomialEval: 1/1e4]) reduce: #<=>]. fn value: #('0.1.2' '0.0'). "=> 1 " fn value: #('1.2.3' '1.3'). "=> -1 " fn value: #('0.0.0' '0.0'). "=> 0 "
709 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 00:00:24.31 ID:27sSd34q.net] >>658 Perl5 use feature current_sub; @is = (['0.1.2', '0.0'], ['1.2.3', '1.3'], ['0.0.0', '0.0']); for (@is) { ($l, $r) = @$_; @l = split'\.', $l; @r = split'\.', $r; $z = sub { my $a = shift @l; my $b = shift @r; if (defined $a or defined $b) { $a //= 0; $b //= 0; $a <=> $b or __SUB__->() } else { 0 } }->(); %d = (-1 => ' <', 0 => '==', 1 => '> '); print "$l $d{$z} $r : $z\n"; } 実行結果 ~ $ perl 13_653.pl 0.1.2 > 0.0 : 1 1.2.3 < 1.3 : -1 0.0.0 == 0.0 : 0
710 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 00:10:49.43 ID:27sSd34q.net] >>678 Perl5 @f = (0, 1); push @f, $f[-2] + $f[-1] while @f < 10; print "@f\n"; 実行結果 ~ $ perl 13_673_fib10.pl 0 1 1 2 3 5 8 13 21 34 Prel6、いいな…
711 名前: mailto:sage [2019/03/15(金) 00:29:52.08 ID:LCz/5Veu.net] >>680 >1回の分岐で決めろ! https://ideone.com/15k0PN は題意を満たしていますか?
712 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 00:45:04.99 ID:GUP5tEyB.net] 2回分岐してるように見えるが
713 名前:デフォルトの名無しさん [2019/03/15(金) 00:50:01.20 ID:ltf0XXfV.net] >>671 I 行単位で昇順にソートする場合 exit "hello world" println 文字単位のソートの場合は難しそう。
714 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 00:52:36.60 ID:J+j6Qj2a.net] >>680 Java https://ideone.com/dAlKtw 0回じゃお題満たしてないからだめです?
715 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 01:15:34.20 ID:T0clmjRI.net] >>678 Squeak Smalltalk | fibGen | fibGen := [:a :b | Generator on: [:g | [g yield: a. b := a + b. a := b - a] repeat]]. (fibGen value: 0 value: 1) next: 10. "=> an OrderedCollection(0 1 1 2 3 5 8 13 21 34) "
716 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 01:34:55.02 ID:4EriVrie.net] >>686 Squeak Smalltalk | sp fn | sp := $-. "sp := Character space." fn := [:n | | tree | tree := [:lines :count | (lines collectWithIndex: [:line :idx | line, (String new: idx - 1 * 2 withAll: sp), line ]), lines ]. (((1 to: n) inject: #('木') into: tree) collectWithIndex: [:line :idx | (String new: idx - 1 withAll: sp), line ]) reversed asStringWithCr ]. fn value: 0. "=> '木' " fn value: 1. "=> '-木 木木' " fn value: 2. "=> '---木 --木木 -木--木 木木木木' "
717 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 01:51:53.98 ID:Fj/79Ht+.net] >>678 javascript const take = n => function*(iterable) { const iterator = iterable[Symbol.iterator](); for (let i = 0; i < n; i++) { const {value, done} = iterator.next(); if (done) break; yield value; } }; const fibo = function*() { const memo = [0n, 1n]; const fib = n => n in memo ? memo[n] : memo[n] = fib(n - 2) + fib(n - 1); for(let i = 0; ; i++) yield fib(i); }(); console.log([...take(10)(fibo)]); 結果: [0n, 1n, 1n, 2n, 3n, 5n, 8n, 13n, 21n, 34n]
718 名前:デフォルトの名無しさん [2019/03/15(金) 08:40:18.32 ID:VdqhZ9XO.net] >>678 Common Lisp https://ideone.com/fbbBbx
719 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 10:29:40.47 ID:4uXCwYPV.net] >>701 よく考えたら配列で出力する必要もなかった console.log(...take(10)(fibo)); 結果: 0 1 1 2 3 5 8 13 21 34