[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 06/28 06:35 / Filesize : 332 KB / Number-of Response : 1028
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミングのお題スレ Part13



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/

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

720 名前:デフォルトの名無しさん [2019/03/15(金) 10:50:31.62 ID:ltf0XXfV.net]
>>671 Lua

a=ture
a=a or print("hello world")

721 名前:デフォルトの名無しさん [2019/03/15(金) 10:54:07.06 ID:EVqxIhVf.net]
>>678

Haskell

main = (print.take 10) fibs
where fibs = 0:1:zipWith (+) fibs (tail fibs)

722 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 11:30:37.72 ID:gesJPCRi.net]
>>675 訂正 Python

def ver (v):
 s = list( map(int , v.split('.') ) )
 for _ in s:
  if s[-1] == 0 :s.pop(-1)
 return s

def cmp(v0,v1):
 v0 = ver(v0)
 v1 = ver(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('10.0','9.1') ,
cmp('1.1', '1.1') ,
cmp('1.2.0.0','1.2.0') ,
cmp('1.2.3','1.3')
)

# 1 1 1 0 0 -1

723 名前:デフォルトの名無しさん [2019/03/15(金) 12:06:15.98 ID:phFelL6J.net]
>>671
「ソートすると」ではなく「ソートしてからその出力を実行またはコンパイルして実行すると」なのでは?

724 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 13:00:31.13 ID:1zMWa3GW.net]
>>707
せやで

725 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 13:38:24.99 ID:CRw2aIHX.net]
そーっとしておこう

726 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 15:16:52.97 ID:1zMWa3GW.net]
お題: プログラムのコードの文字を縦読みしたコードが実行可能なコード

727 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 17:37:30.24 ID:g4S7Lu9n.net]
お題
2桁16進数化したものをつなげた形でIPアドレスが与えられる。(例:192.168.0.1 -> C0A80001)
与えられたIPアドレスからホスト名を逆引きせよ。


08080808 -> google-public-dns-a.google.com
9da6e21a -> www.cnn.com



728 名前:デフォルトの名無しさん [2019/03/15(金) 18:51:48.50 ID:phFelL6J.net]
>>711
Perl5
https://paiza.io/projects/pgmsypvAWHlJ0UwFis4OFg?language=perl

729 名前:673 mailto:sage [2019/03/15(金) 19:08:00.81 ID:3zDqFokC.net]
>>678 java
https://ideone.com/vNVR4y

>>678 c
https://ideone.com/P6eqTd






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<332KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef