◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

プログラミングのお題スレ Part13 YouTube動画>1本 ->画像>15枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1549160513/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

601デフォルトの名無しさん2019/03/11(月) 10:48:42.57ID:u4Ymakq9
お題: 下の例のような入力から例の出力のアスキーアートを出力する。それ以外は自由
例:
入力: >>>>>vvvvv<<<<^^^^
出力:
>>>>>
^****v
^****v
^****v
^****v
<<<<v

602デフォルトの名無しさん2019/03/11(月) 11:00:20.46ID:JmszPBJl
これって一歩目はなんでもいいよね

603デフォルトの名無しさん2019/03/11(月) 11:35:10.21ID:AGCERQh7
>>571 Io
f := method(s,n,
"*" repeated(s size)atPut(n - 1, s at(n - 1)) println
s asMutable atPut(n - 1, 42)println
)
f("abc",2)
実行結果
*b*
a*c

604デフォルトの名無しさん2019/03/11(月) 11:45:13.16ID:+cahZmCl
>>601
それ3番目と4番目は必ず1番目と2番目の長さ-1になってるの?

605デフォルトの名無しさん2019/03/11(月) 11:48:56.08ID:u4Ymakq9
>>602
>>604
そういうめんどくさい質問がこないように、
それ以外は自由と付け加えてある

606デフォルトの名無しさん2019/03/11(月) 13:45:52.04ID:+cahZmCl
>>605
仕様をきっちり決めないと解釈の違いから沢山の違った回答が出てくる可能性があるのだが、それで良いと。

607デフォルトの名無しさん2019/03/11(月) 15:42:22.28ID:7+lrfCi1
>>604
そもそも4方向にいくらかずつ進んで四角形で終わりという形とは限らないのでは?
ランダムに方向や距離を生成して既に通った道も上書きするような入力を許容すると考えたっていいはず。

608デフォルトの名無しさん2019/03/11(月) 16:07:33.07ID:5vEtkzIB
>>605 何でこれ以外の形は許さんと言えないんだ?
自由にどうぞなんて問題じゃ無いだろ。

609デフォルトの名無しさん2019/03/11(月) 16:18:14.19ID:ZVqwh3rP
>>606,608
こいつらホント掃き溜めのゴミだな

610デフォルトの名無しさん2019/03/11(月) 16:19:55.06ID:+cahZmCl

611デフォルトの名無しさん2019/03/11(月) 16:25:40.59ID:+cahZmCl
>>607
なるほど。しかしそれならばその事を書いておいて欲しかったな。

>>609
何を作れば良いのかよくわからないから質問しているだけなのだが。それが君にとって何か不都合なのか?

612デフォルトの名無しさん2019/03/11(月) 16:58:12.79ID:PGatxMde
>>601
出力おかしくねぇ?最初と最後の行は5列だけど
間の行ぜんぶ6列になってるぞ?

出力:
>>>>>
^****v
^****v
^****v
^****v
<<<<v

こうじゃね?
>>>>>
^***v
^***v
^***v
^***v
<<<<v

613デフォルトの名無しさん2019/03/11(月) 17:14:58.23ID:+cahZmCl
ま、いいや。よくわかんない問題は放っておこう。

614デフォルトの名無しさん2019/03/11(月) 19:21:39.70ID:PGatxMde
>>601 javascript
長くなっちった
https://ideone.com/vzncKq

入力: <<<<^^^^>>>>>vv<<<<<<<<<<<vvv>>>^^^^^^^>>>>>>>>>>vvvvvv
出力:
***^>>>>>>>>>>
***^*********v
***^**^>>>>>*v
***^**^****v*v
<<<^<<<<<<<v*v
v**^**^******v
v**^**<<<<***v
v>>>**********

615デフォルトの名無しさん2019/03/11(月) 19:36:33.05ID:/Vx80pKW
お題
m×nマスのチェス盤を考える。
1つのナイトが最も左上のマスにあり、そこから任意の回数動かすことができる。
ナイトが訪れることのできるマスの個数を求めよ。

m=1, n=1
=> 1

m=3, n=3
=> 8 (真ん中のマスを訪れることができない)

m=4, n=4
=> 16

616デフォルトの名無しさん2019/03/11(月) 19:36:35.88ID:DXpwYxNa
>>614 説明がないと何をどうやってるのかわけわからん。
先ずは入力と出力をどう解釈して作ったのか?
形にも一貫性があるとは思えないけど。

しかしこんなのがどんどん出てきたら、煩わしいだけ。

617デフォルトの名無しさん2019/03/11(月) 20:02:17.74ID:JmszPBJl
いや、その通りに歩くんだろ

618デフォルトの名無しさん2019/03/11(月) 20:07:58.88ID:5vEtkzIB
出題通り以外の回答はやめてほしいな。
それ以外の回答をする場合は、解説文も日本語で書いてくれよ。

不慣れなプログラムもあることだろうし、長いプログラムなんて見る気にもならないし、プログラムを見ればわかるというのは無し。

619デフォルトの名無しさん2019/03/11(月) 21:26:59.93ID:ALw/TkKR
>>618
ソースの中身まではちゃんと確認してないけど、ちゃんと出題通りにできてると思う。
出題の"入力例"通りではないが、複雑な入力パターンに対して正しく動いてそうと思える実行例だと思うぞ。

620デフォルトの名無しさん2019/03/11(月) 21:31:45.37ID:1OBeL2+Y
>>601 Common Lisp, >>614の移植
https://ideone.com/B76Dki

621デフォルトの名無しさん2019/03/11(月) 22:12:51.52ID:+V1dboU8
>>>v<^^>>
の場合
*^>>
>^>
*<v

622デフォルトの名無しさん2019/03/11(月) 22:40:32.65ID:6pdTomDX
>>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)));

623デフォルトの名無しさん2019/03/11(月) 23:02:42.18ID:GdRfR4uu
以下の整形式の.ini ファイルから、すべての値を取得して、
「セクション名 : キー名 : 値」で表示する

[sec1]
key1=val1

[sec2]
key2=val2

624デフォルトの名無しさん2019/03/11(月) 23:51:36.77ID:/Vx80pKW

625デフォルトの名無しさん2019/03/12(火) 00:26:56.22ID:XpXqAgCh
>>623 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

626デフォルトの名無しさん2019/03/12(火) 00:37:42.27ID:XpXqAgCh
>>625 も少し簡潔に書けるんだった…

while (<DATA>) {
 $s = $1 if /\[(\w+)\]/;
 print "$s:$1:$2\n" if /(\w+)=(\w+)/;
}
__DATA__
[sec1]
key1=val1

[sec2]
key2=val2

627デフォルトの名無しさん2019/03/12(火) 01:38:34.08ID:nghHbW0D
>>623 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

628デフォルトの名無しさん2019/03/12(火) 05:56:44.85ID:KPetEW8/
>>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

629デフォルトの名無しさん2019/03/12(火) 17:03:25.03ID:+VdOvnK/
>>615

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;
}

630デフォルトの名無しさん2019/03/12(火) 18:21:10.69ID:MLSq27aG
>>623 Io
f := method(s,
s split("\n\n")map(splitNoEmpties("[","]","\n",=")join(":"))
)

631デフォルトの名無しさん2019/03/12(火) 18:30:10.82ID:M/w6PjEF
>>619
出題通りなのかどうかがわからんのだが。どう解釈したら出題通りとなるのか?

632デフォルトの名無しさん2019/03/12(火) 19:26:28.38ID:mUEXbKn8
お題
数列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
=> ?

633デフォルトの名無しさん2019/03/12(火) 20:52:19.49ID:2hm/Dong
つまらん

634デフォルトの名無しさん2019/03/12(火) 21:03:21.90ID:KPetEW8/
>>619

>>547に対して、ナチュラルソートされて無くても(普通のソートでも正しい答えが得られるとは限らない)正しい答えを出せるとか、出題者の意図を踏まえながら、意図を超えた範囲もカバーするのはいいんじゃ無いか?
意図を無視するのは論外だが。

635デフォルトの名無しさん2019/03/12(火) 21:07:56.58ID:KPetEW8/
>>632
マシンパワーがあれば式を入れればいいだけってのはね。。。
解くのに頭使う。解いてみたら案外簡単(アルゴリズムが浮かぶのがキモ)。あえて難しくて最適化の道がある。とかが望ましい。

いあ、無茶振りだろうから、どれか2つ満たせればおkだが。

636デフォルトの名無しさん2019/03/12(火) 21:12:06.00ID:KPetEW8/
例えば[[1,2,3],[4,5,6],[7,8,9]]みたいな任意のn*nなリスト(または配列)を非破壊的に作れ。とか。

637デフォルトの名無しさん2019/03/12(火) 21:43:25.40ID:rf03pH6k
>>636
一般的なミューテートするカウンタも使っちゃダメってことかな?

6386232019/03/12(火) 22:49:08.83ID:oX4bYoPv
>>623
お題を修正

[ ] = の3つは、特別な記号です。
それらを含まない行は、無視して

[sec1]
key1=val1

[sec2]
key2=val2
x=y

>>627
セクション名・キー名・値は、特定の文字列ではありません!
特別な記号以外の、任意の文字列です

639デフォルトの名無しさん2019/03/12(火) 23:03:23.82ID:oX4bYoPv
お題

現行規格の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 で、計算してみて!

640デフォルトの名無しさん2019/03/12(火) 23:07:31.93ID:+VdOvnK/
>>632
 https://ideone.com/Y4N5oM  c++

 小さい数値は力技(bf2)で確認してみたが……

641デフォルトの名無しさん2019/03/12(火) 23:27:43.44ID:LDiZRGdZ
>>601 Common Lisp
>>620のリファクタリング
ついでに * を空白に、開始地点を A、終了地点を Z にしてみた
https://ideone.com/zMHal6

Python
https://pastebin.com/NAGHLtcu
実行結果 https://webmshare.com/Ma3gZ

642デフォルトの名無しさん2019/03/12(火) 23:42:34.93ID:2FAQzMGK
>>632 C
https://ideone.com/m3vejt

エクセルとかで実際に数列を計算してみると、長さ12(剰余の数-1)以下の周期になるっぽいのでそれで求められる。
普通に計算するとq * a[i] + r はどんどん大きくなるけど、
毎回 (q * a[i] + r) mod 13としても、計算に影響はないようなので、オーバーフローもせずに計算できる。
だたし、数学的に正しいか保証しかねるが。

643デフォルトの名無しさん2019/03/13(水) 00:12:22.73ID:rGhbMCbu
>>640
12 0 11 1
=> 11
というコーナーケースが…

644デフォルトの名無しさん2019/03/13(水) 00:29:04.16ID:Eq+ygVqk
>>643

確かに、
コメントアウト(bf2)するときに誤ってしまったようだ、
("if(n==0)" だったのだが、いらないなぁ)
どっちにしろ、0や1のテストは、やってない

645デフォルトの名無しさん2019/03/13(水) 00:51:17.73ID:vPzmbHWs
>>637
だめ。
そこが関数型言語と手続き型言語の考え方の大きな違いだし。
皮肉にも?それ作った時、入門書の関数より考え方の違いが分かった。

646デフォルトの名無しさん2019/03/13(水) 00:54:41.38ID:bUFEpZHr
>>638
> セクション名・キー名・値は、特定の文字列ではありません!
> 特別な記号以外の、任意の文字列です

えぇ…

入力:
[あああ]
いいい=ううう

[えええ]
おおお=かかか

出力:
あああ:いいい:ううう
えええ:おおお:かかか

少なくとも任意の文字列には対応してるじゃん。不当指摘だ!

647デフォルトの名無しさん2019/03/13(水) 01:18:15.16ID:FktqEJYT
>>645 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]]

6486232019/03/13(水) 02:39:20.04ID:ZImJqTUY
>>646
スマン。漏れの間違い!

key, val などの特定の文字列を置換しているのかと、勘違いしていた

649デフォルトの名無しさん2019/03/13(水) 05:11:02.02ID:36vLAC/n
>>639 J
f =: 3 : 0
10 | 10 - 10 | +/ (12 $ 1 3) * "."0 }: y -. '-'
)
f '978-4-10-109205-8'
8

f '978-4873115870'
0

650デフォルトの名無しさん2019/03/13(水) 06:35:32.94ID:vPzmbHWs
>>636,637,645,647

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]]

651デフォルトの名無しさん2019/03/13(水) 20:01:04.25ID:loIc2/nm

652デフォルトの名無しさん2019/03/13(水) 22:22:09.99ID:H95Q/dPG
こうかな?
;; 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)))

653さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/13(水) 23:29:50.59ID:KwyST1w4
お題: ピリオド区切りの二つのバージョン番号を比較し、大小関係を判定した結果を-1, 0, 1のいずれとして返せ。

0.1.2 > 0.0: 1
1.2.3 < 1.3: -1
0.0.0 == 0.0: 0

654デフォルトの名無しさん2019/03/14(木) 00:08:08.19ID:TPG8S2ma
>>653
手抜き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

655デフォルトの名無しさん2019/03/14(木) 01:08:57.36ID:vRIsxo2e
>>601 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

656デフォルトの名無しさん2019/03/14(木) 01:16:23.50ID:vRIsxo2e
>>638 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

657デフォルトの名無しさん2019/03/14(木) 06:43:00.64ID:3EvgP48J
>>653
0.0.1 > 0.0 でいいのか?

658さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 07:26:20.10ID:1+g2CCuw
>>657
ない桁はゼロと見なす。

659デフォルトの名無しさん2019/03/14(木) 10:42:18.54ID:YiVNNcx0
>>653 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"]

660さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 10:59:38.01ID:PwP2txgq
>>653
大小関係の定義をまじめに考えましょう。
>>659
JavaScriptならsplit使えるはず。桁数の制限は要らない。

661デフォルトの名無しさん2019/03/14(木) 11:23:19.67ID:YiVNNcx0
ごめん勝手にsemverかと思い込んでた

662さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 11:35:04.68ID:1+g2CCuw
LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。
一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。
まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。

663さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 11:47:43.06ID:1+g2CCuw
一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。

664デフォルトの名無しさん2019/03/14(木) 13:52:35.97ID:uKED8jms

665デフォルトの名無しさん2019/03/14(木) 15:56:35.04ID:TPG8S2ma
>>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' <- (xs:xss), map toLower xs `f` map toLower xs']
filename (_:xss) = filename xss

666デフォルトの名無しさん2019/03/14(木) 18:00:35.68ID:38t26SL0
お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ

667デフォルトの名無しさん2019/03/14(木) 18:07:12.84ID:YPV07ntD
>>653 # 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

668さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 18:11:49.83ID:1+g2CCuw
>>667
バージョン番号の各整数の数字は2個以上になることがある。'10.0'と'9.1'を比較せよ。

669デフォルトの名無しさん2019/03/14(木) 18:14:06.49ID:YPV07ntD
>>667
print( cmp('1.1.0', '1.1') )

# 1

670デフォルトの名無しさん2019/03/14(木) 18:32:38.72ID:YPV07ntD
>>667 訂正 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

671さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 18:44:00.25ID:1+g2CCuw
>>670
残念だが不正解。比較できる桁がなければゼロと見なす、すなわち、2.0.0は2に等しいと見なす決まりがある。

672デフォルトの名無しさん2019/03/14(木) 18:50:17.55ID:dvZ8z+Z0

673デフォルトの名無しさん2019/03/14(木) 18:58:38.18ID:dvZ8z+Z0
お題:フィボナッチ数列を最初の10個表示せよ

ruby
https://ideone.com/ewyP50

perl6
https://ideone.com/O3tVZj

674さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 18:59:00.09ID:1+g2CCuw
ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。
検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。
インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。

675デフォルトの名無しさん2019/03/14(木) 18:59:16.90ID:38t26SL0
お題: 3つの数の最小値を1回の分岐で決めろ!

676デフォルトの名無しさん2019/03/14(木) 19:55:29.27ID:YiVNNcx0
>>660 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"]

677デフォルトの名無しさん2019/03/14(木) 19:59:51.70ID:YiVNNcx0
あっ間違えた
家帰ってから直す

678デフォルトの名無しさん2019/03/14(木) 20:14:25.92ID:vvVzV1YI
>>671 どこにそんな決まりがあるの?

普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。
総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。

679デフォルトの名無しさん2019/03/14(木) 20:14:59.41ID:ko69m/9G
見つけた

RPM::VersionSort - RPM version sorting algorithm, in perl XS - metacpan.org
https://metacpan.org/pod/RPM::VersionSort

680デフォルトの名無しさん2019/03/14(木) 20:16:24.45ID:vvVzV1YI
とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。
同じと思う方がおかしい。

681デフォルトの名無しさん2019/03/14(木) 20:16:49.16ID:0tbf1s3D
お題:“木”という漢字を使って以下のようなフラクタル図形を描け

n=0


n=1
-木
木木

n=2
---木
--木木
-木--木
木木木木

n=3
-------木
------木木
-----木--木
----木木木木
---木------木
--木木----木木
-木--木--木--木
木木木木木木木木

※ハイフンはスペースだと思ってください

682さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/14(木) 20:26:23.57ID:1+g2CCuw
>>678
Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。

683デフォルトの名無しさん2019/03/14(木) 20:45:22.76ID:vvVzV1YI
>>682 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。

684デフォルトの名無しさん2019/03/14(木) 20:52:19.11ID:YiVNNcx0
>>660 の修正
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));
//いいかげん結果省略

685デフォルトの名無しさん2019/03/14(木) 22:10:39.99ID:8oAE3RnG
>>683
例に0.0.0と0.0が等しいって書いてあるんだが

686デフォルトの名無しさん2019/03/14(木) 23:16:14.88ID:3EvgP48J
>>683
> いちいち誰かのいちゃもんに付き合ってる暇はない。
ならスルーしろよ
お前の頓珍漢な解釈なんて要らんし

687デフォルトの名無しさん2019/03/14(木) 23:41:35.78ID:nI5lwjDU
>>653 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 "

688デフォルトの名無しさん2019/03/15(金) 00:00:24.31ID:27sSd34q
>>653 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

689デフォルトの名無しさん2019/03/15(金) 00:10:49.43ID:27sSd34q
>>673 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、いいな…

690 ◆QZaw55cn4c 2019/03/15(金) 00:29:52.08ID:LCz/5Veu
>>675
>1回の分岐で決めろ!
https://ideone.com/15k0PN
は題意を満たしていますか?

691デフォルトの名無しさん2019/03/15(金) 00:45:04.99ID:GUP5tEyB
2回分岐してるように見えるが

692デフォルトの名無しさん2019/03/15(金) 00:50:01.20ID:ltf0XXfV
>>666 I
行単位で昇順にソートする場合

exit
"hello world" println

文字単位のソートの場合は難しそう。

693デフォルトの名無しさん2019/03/15(金) 00:52:36.60ID:J+j6Qj2a
>>675 Java
https://ideone.com/dAlKtw
0回じゃお題満たしてないからだめです?

694デフォルトの名無しさん2019/03/15(金) 01:15:34.20ID:T0clmjRI
>>673 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) "

695デフォルトの名無しさん2019/03/15(金) 01:34:55.02ID:4EriVrie
>>681 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. "=>
'---木
--木木
-木--木
木木木木' "

696デフォルトの名無しさん2019/03/15(金) 01:51:53.98ID:Fj/79Ht+
>>673 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]

697デフォルトの名無しさん2019/03/15(金) 08:40:18.32ID:VdqhZ9XO

698デフォルトの名無しさん2019/03/15(金) 10:29:40.47ID:4uXCwYPV
>>696
よく考えたら配列で出力する必要もなかった
console.log(...take(10)(fibo));
結果:
0 1 1 2 3 5 8 13 21 34

699デフォルトの名無しさん2019/03/15(金) 10:50:31.62ID:ltf0XXfV
>>666 Lua

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

700デフォルトの名無しさん2019/03/15(金) 10:54:07.06ID:EVqxIhVf
>>673

Haskell

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

701デフォルトの名無しさん2019/03/15(金) 11:30:37.72ID:gesJPCRi
>>670 訂正 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

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

703デフォルトの名無しさん2019/03/15(金) 13:00:31.13ID:1zMWa3GW
>>702
せやで

704デフォルトの名無しさん2019/03/15(金) 13:38:24.99ID:CRw2aIHX
そーっとしておこう

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

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


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

707デフォルトの名無しさん2019/03/15(金) 18:51:48.50ID:phFelL6J

7086732019/03/15(金) 19:08:00.81ID:3zDqFokC

709デフォルトの名無しさん2019/03/15(金) 19:13:09.78ID:4uXCwYPV
>>706 node
const reverse = hexIP => require('dns').reverse(hexIP
.split(/^(..)(..)(..)(..)$/g)
.map(xx => parseInt(xx, 16) || '')
.join('.').replace(/^\.|\.$/g, ''),
(err, hostnames) => {
console.log(hostnames);
});
console.log(reverse('08080808')); //=> [ 'google-public-dns-a.google.com' ]
console.log(reverse('9da6e21a')); //=> [ 'www.cnn.com' ]

710デフォルトの名無しさん2019/03/16(土) 01:04:28.66ID:moiau3OK
>>688 もっと簡潔に書けるんだった…

>>653 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;
  (defined $a or defined $b) ? ($a <=> $b or __SUB__->()) : 0
 }->();
 %d = qw{-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

711デフォルトの名無しさん2019/03/16(土) 02:33:36.77ID:ksQagb59

712デフォルトの名無しさん2019/03/16(土) 06:51:03.68ID:x9tnPyz1
>>666

Haskell
空文字は出力しないと動かないから許して。(動く場合はmain =でパターンマッチして出力文埋め込むだけだけど)
ソートした自身の書き込み先、実行先は自身じゃ無いといけないとは書いてない。

import System.Process

main = putStr "" >> readFile "runmyself.hs" >>= \f -> writeFile "runmyself2.hs" ((replace.unlines.qsort.lines) f) >> callCommand "runghc runmyself2.hs"

replace [] = []
replace (p:u:t:s:t2:r:x:y:z:xs) | (p:u:t:s:t2:r:x:y:z:[]) == "putStr \"\"" = "putStrLn \"Hello World\"" ++ replace xs
replace (a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:xs) |
(a1:a2:a3:a4:a5:a6:a7:a8:a9:a10:a11:a12:a13:a14:a15:a16:a17:a18:a19:a20:a21:a22:a23:a24:a25:a26:a27:a28:a29:a30:a31:a32:a33:a34:a35:a36:a37:[]) == ">> callCommand \"runghc runmyself2.hs\"" = "" ++ replace xs
replace (x:xs) = x:replace xs

qsort [] = []
qsort (x:xs) = qsort [s| s <- xs, s <= x] ++ [x] ++ qsort [l| l <- xs, l > x]

713デフォルトの名無しさん2019/03/16(土) 14:50:17.74ID:0dLFyPZP
>>681 Perl5

use feature say;
$n = 0;
@t = ('木');
say "n=$n\n$t[0]";
for $n (1..2) {
 $l = '-' x 2**($n-1);
 @u = map{$l . $_ . $l} @t;
 @w = map{$t[$_].$t[$_]} 0..$#t;
 @t = (@u, @w);
 say "n=$n";
 say for @t;
}

実行例
~ $ perl 13_681.pl
n=0

n=1
-木-
木木
n=2
---木---
--木木--
-木--木-
木木木木

注) 正直者には、-はスペースに見えます。

714デフォルトの名無しさん2019/03/16(土) 16:51:50.43ID:EVMD7h0V
お題: プログラム言語をなにも知らない人にもプログラムの意味が理解できるコメント無しのhello worldを出力するコプログラム

715デフォルトの名無しさん2019/03/16(土) 17:11:38.87ID:0dLFyPZP
わかりません><

716デフォルトの名無しさん2019/03/16(土) 17:16:48.87ID:EVMD7h0V
お題: 文字列に丁度いい具合にグリッチを入れて超かっこいい文字列を作るプログラム

717さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/16(土) 17:18:04.51ID:PQISp+Pa
グリッチは広辞苑には載っていません。説明して下さい。

718デフォルトの名無しさん2019/03/16(土) 17:21:14.90ID:EVMD7h0V
>>717
いやです

719デフォルトの名無しさん2019/03/16(土) 17:36:13.64ID:0dLFyPZP

720デフォルトの名無しさん2019/03/16(土) 20:05:38.53ID:INaBYg0f
グリッチってアレでしょ?
あの、整いました!ってやつ。
最近みないな。
https://glitch.com

7217072019/03/17(日) 01:26:35.49ID:5dC2feuc
>>706
Kotlin
https://paiza.io/projects/PHrLKrBMqZYA6AC9bUWDcg

何故か 9da6e21a の方はホスト名になってくれず IP アドレスの文字列になる。

7227072019/03/17(日) 02:33:00.06ID:5dC2feuc
>>706
C
https://paiza.io/projects/ZW4sJq_ea_wQQxe_vOlGjQ

gethostbyname() や gethostbyaddr() ではなく getnameinfo() 使ってみました。

723デフォルトの名無しさん2019/03/17(日) 06:18:59.33ID:k04EM+xl
2桁までの足し算の筆算を表示せよ。

例:
29
+15
----
14
3
----
44

29
+ 5
----
14
2
----
34

724デフォルトの名無しさん2019/03/17(日) 06:20:05.97ID:5dC2feuc

725デフォルトの名無しさん2019/03/17(日) 07:23:54.75ID:1ggb6IGK
お題
実数a,b (0<a<b)が与えられたとき、平面座標(a,b),(0,0),(a,-b)の3点を通る円の半径を求める。

726デフォルトの名無しさん2019/03/17(日) 07:27:24.80ID:vfP8HMqf
余弦定理と正弦定理1回ずつ使うだけだな

727デフォルトの名無しさん2019/03/17(日) 07:31:01.10ID:OwOB9RAr
数学で解けてもコードに落とせない人っているよね

728デフォルトの名無しさん2019/03/17(日) 08:41:45.83ID:k04EM+xl
>>727
居るけど、そういう人って機械自体が苦手な人。
機械と数学に強くてコードに落とせない人には会ったことがない。

機械には強いけど数学苦手だからコードに落とせないって人は(自分含め)沢山いるが。

729デフォルトの名無しさん2019/03/17(日) 12:19:22.82ID:gm8A83sV
自転車修理屋さんが機械に強いけどコードなんて、かけなさそう

730デフォルトの名無しさん2019/03/17(日) 12:38:59.54ID:TUY5K+QC
>>723 Perl5

for (<DATA>) {
 ($l, $o, $r) = split;
 @l = $l =~ /(\d?)(\d)/;
 @r = $r =~ /(\d?)(\d)/;
 $a1 = $l[0] + $r[0];
 $a0 = $l[1] + $r[1];
 @a1 = $a1 =~ /(\d?)(\d)/;
 @a0 = $a0 =~ /(\d?)(\d)/;
 $a = 10*$a1 + $a0;
 $" = '';
 print <<"EOF";
@l
$o@r
---
@a1
@a0
---
$a

EOF
}
__DATA__
29 + 15
29 + 5

731デフォルトの名無しさん2019/03/17(日) 12:40:50.32ID:TUY5K+QC
>>730 の実行結果

~ $ perl 13_723.pl
29
+15
---
3
14
---
44

29
+5
---
2
14
---
34

せっかくのスペース調整が詰まっちゃって残念なのでアンカーでポップアップして見てね
>>731

732デフォルトの名無しさん2019/03/17(日) 12:41:06.87ID:PfKDQB+U

733デフォルトの名無しさん2019/03/17(日) 13:19:09.72ID:k04EM+xl
>>723
掛け算に対応したり、1桁どうしの計算用フォーマット作ったりしてたら規模がでかくなった(・ω・`)

1
* 2
-----
2

10
* 0
-----
0

Haskell

https://ideone.com/SCzGKq

734デフォルトの名無しさん2019/03/17(日) 13:39:28.89ID:yIqzgq0g

735デフォルトの名無しさん2019/03/17(日) 18:42:43.38ID:7j/Zhhp5
>>723 ネタ回答: WolframAlpha API / node
// index.js
const {get} = require('http');
const appid = '<<YOUR WolframAlpha APP ID>>';
process.stdin.on('data', data => {
get(`http://api.wolframalpha.com/v2/query?appid=${appid}&input=${encodeURIComponent(data.toString().trim())}&podstate=Result__Step-by-step+solution&format=image&output=json`, res => {
res.setEncoding('utf8');
let body = '';
res.on('data', chunk => {body += chunk;});
res.on('end', () => {
get(JSON.parse(body).queryresult.pods.filter(({title}) => title === 'Results')[0].subpods.filter(({title}) => title === 'Possible intermediate steps')[0].img.src, res => {
res.on('data', data => {process.stdout.write(data)});
});
});
});
});
$ echo 29+15 | node . > ./test1.gif
プログラミングのお題スレ Part13 	YouTube動画>1本 ->画像>15枚
$ echo 29+5 | node . > ./test2.gif
プログラミングのお題スレ Part13 	YouTube動画>1本 ->画像>15枚
$ echo 29*15 | node . > ./test3.gif
プログラミングのお題スレ Part13 	YouTube動画>1本 ->画像>15枚

試しに一桁×一桁やってみたらなんだか微妙な計算過程に…
$ echo 5*5 | node . > ./test.gif
プログラミングのお題スレ Part13 	YouTube動画>1本 ->画像>15枚

あと割り算はAPIからでは計算過程のURL取れなかった

736デフォルトの名無しさん2019/03/17(日) 19:54:31.54ID:k04EM+xl
>>735
こうやって足し算の筆算とは言え、人間の思考過程をプログラムで再現してみると小学生から結構複雑な処理してるんだなと思う。
もっと人間の処理に近づけるなら文字列として認識して、1桁目を数字に変換して〜みたいになるんだろうけど。

737デフォルトの名無しさん2019/03/17(日) 22:48:25.97ID:t+AGMGYK
>>494
(CSVはコンマ区切りの値だよ)

738デフォルトの名無しさん2019/03/17(日) 23:32:46.95ID:wEirTeMQ
>>737
カンマを逆から読むとマンコですよ

739デフォルトの名無しさん2019/03/17(日) 23:33:11.60ID:wEirTeMQ
致命的なミスを犯しました

740デフォルトの名無しさん2019/03/17(日) 23:35:38.92ID:QL30OvU4
許さないからな

741デフォルトの名無しさん2019/03/18(月) 00:38:16.94ID:9+FFV4Nx
>>494 >>496 Perl5
use feature say;
@data = <DATA>;
chomp @data;
@tags = split' ', shift @data;
%idx = map{$_ => $n++} @tags;
@sum = 0 x $n;
for (@data) {
 @fs = split' ';
 for (0..$n-1) {
  $v = $fs[$_];
  if ($v =~ /^(\d+\.\d*|\d*\.\d+|\d+)$/) {
   $sum[$_] += $v;
  } else {
   warn "変なデータが紛れ込んでいます_ノ乙(、ン、)_`$v'\n";
  }
 }
}
for (@tags) {
 say "$_ の合計 = ", $sum[$idx{$_}];
}
__DATA__
カラム1 カラム2 カラム3 カラム4
1,0 2.0 3.0 4.0
2.1 3.1 4.1 5.1

~ $ perl 13_494.pl
変なデータが紛れ込んでいます_ノ乙(、ン、)_`1,0'
カラム1 の合計 = 2.1
カラム2 の合計 = 5.1
カラム3 の合計 = 7.1
カラム4 の合計 = 9.1

742デフォルトの名無しさん2019/03/18(月) 01:13:14.07ID:4b49AUHf
>>738
マンコ・カパックは、インカ神話によるクスコ王国の初代国王である。

743デフォルトの名無しさん2019/03/21(木) 03:20:09.08ID:ZuEvTwkR

744デフォルトの名無しさん2019/03/21(木) 05:20:06.50ID:ZuEvTwkR
>>675
Kotlin
https://paiza.io/projects/SlCrKgxVJRghtvESdUMR_A

リストの中の最小値をループして探し出しように作っただけなんだけど、こんなんで良いのか?
(MutableListなのでsort()しちゃうという手抜きワザもあったがそれだと表面上分岐が一つもない状態になるので止めた)。

745デフォルトの名無しさん2019/03/21(木) 11:30:55.91ID:4Lv8Ku6J
>>494 Squeak Smalltalk。コンマを分割と見なしそれぞれについての和を出力させてみた

| fn |
fn := [:columnName |
FileStream oldFileNamed: 'data.txt' do: [:file |
| index sum |
index := (file nextLine subStrings: ' ') indexOf: columnName.
sum := 0.
[file atEnd] whileFalse: [
| next |
next := ((file nextLine subStrings: ' ') at: index) subStrings: ','.
sum := sum + (next size = 1 ifTrue: [next anyOne] ifFalse: [next])].
sum
]
].

fn value: 'カラム3'. "=> 7.1 "
fn value: 'カラム1'. "=> #(3.1 2.1) "

746デフォルトの名無しさん2019/03/21(木) 13:37:55.15ID:p+hkSRzH
お題
長方形の盤で左上から上下左右に一マスずつ移動して全てのマスを
辿る。
移動の順番を表した数字を向きと終点を表す文字(↑↓←→★、
上下左右終、UDLRG、^V<>Gなど)に変換する。

入力
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11

出力
↓→→↓
→↑↓←
↓←→↓
★↑←←

747デフォルトの名無しさん2019/03/21(木) 14:37:03.32ID:Krn8F3T2
>>746 Perl5
@a = map{[split]} <DATA>;
for $y (0..$#a) {
 $h{$a[$y][$_]} = [$y,$_,''] for 0..$#a;
}
@s = keys %h;
%r = qw{-1,0 ↑ 1,0 ↓ 0,-1 ← 0,1 →};
for $i (1..@s) {
 if ($i == @s) {
  $d = '★'
 } else {
  $y = $h{$i+1}->[0] - $h{$i}->[0];
  $x = $h{$i+1}->[1] - $h{$i}->[1];
  $d = $r{"$y,$x"}
 }
 $h{$i}->[2] = $d;
}
($y, $x, $d) = @$_, $a[$y][$x] = $d for values %h;
use feature say;
say "@$_" for @a;
__DATA__
1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11

実行結果
~ $ perl 13_746.pl
↓ → → ↓
→ ↑ ↓ ←
↓ ← → ↓
★ ↑ ← ←

748デフォルトの名無しさん2019/03/21(木) 22:33:42.92ID:4Lv8Ku6J
>>723 Squeak Smalltalk

| fn |
fn := [:int1 :int2 |
| strings width digits interms ans max line |
strings := {int1. int2} collect: #asString.
width := (strings detectMax: #size) size.
digits := strings collect: [:str |
(str forceTo: width paddingStartWith: $0) reversed asArray collect: #asString].
interms := (digits reduce: #+) collectWithIndex: [:interm :idx |
interm, (String new: idx-1 withAll: Character space)].
ans := interms polynomialEval: '10'.
strings atLast: 1 put: '+ ', strings last.
max := ((strings, {ans}) collect: #size) max.
line := String new: max withAll: $-.
(strings, {line}, interms, {line. ans} collect: [:str |
(str forceTo: max paddingStartWith: Character space) withoutTrailingBlanks
]) asStringWithCr
].

fn value: 987 value: 65. "=>
' 987
+ 65
----
12
14
9
----
1052' "

749デフォルトの名無しさん2019/03/22(金) 05:04:29.93ID:NMDgNTgg

750デフォルトの名無しさん2019/03/22(金) 12:12:43.26ID:bmKj2SZK
>>746 Squeak Smalltalk

| fn |

fn := [:str |
| map range sign goal position next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
sign := (0 asPoint fourNeighbors with: #(→ ↓ ← ↑) collect: #->) as: Dictionary.
goal := #★.
position := 1@1. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
(map at: position y) at: position x put: (sign at: found - position ifAbsent: goal).
position := found. next := next + 1.
].
(map collect: #join) asStringWithCr
].

fn value: '1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11'

"=>
'↓→→↓
→↑↓←
↓←→↓
★↑←←' "

751デフォルトの名無しさん2019/03/22(金) 20:50:59.33ID:KB/r9SyN

752デフォルトの名無しさん2019/03/22(金) 21:14:53.89ID:97922Y7I
まだ見にくいなあ。線を繋いで矢印を入れることはできないかな。

753デフォルトの名無しさん2019/03/22(金) 21:41:47.96ID:nZ/OoXFx
罫線
│┌─┐
└┘┌┘
┌┐└┐
★└─┘

直線部に矢印
│┌→┐
└┘┌┘
┌┐└┐
★└←┘

こんな感じ?

754デフォルトの名無しさん2019/03/22(金) 21:43:03.63ID:nZ/OoXFx
スタート部も矢印に出来るやん…

↓┌→┐
└┘┌┘
┌┐└┐
★└←┘

7557472019/03/22(金) 23:30:54.68ID:DMg7GUli
code、プリーズ

756デフォルトの名無しさん2019/03/23(土) 01:24:21.91ID:Bvojjkpo
>>754
Kotlin
https://paiza.io/projects/jjP3AHDkfJ4t_Lfsd3wmlA

>>749 を改造して作った。

757デフォルトの名無しさん2019/03/23(土) 01:27:24.77ID:Bvojjkpo
罫線や矢印が半角で★が全角で表示されてしまうとずれるな。
ま、しょうがないか。

758デフォルトの名無しさん2019/03/23(土) 02:35:34.66ID:FcxASXew

759デフォルトの名無しさん2019/03/23(土) 05:47:57.62ID:ZlGSstH0
>>754 Squeak Smalltalk

| fn |
fn := [:str |
| map range signs sign goal position from next atEnd |
map := str lines collect: [:line | line subStrings collect: #asInteger].
range := 1@1 extent: map first size @ map size.
goal := #★. signs := #(┌ ┌ ← → └ └ ┐ ┐ ↑ ↓ ┘ ┘) readStream.
sign := Dictionary new.
0 asPoint fourNeighbors combinations: 2 atATimeDo: [:combi |
sign at: combi copy put: signs next; at: combi reversed put: signs next].
position := 1@1. from := nil. next := 2. atEnd := false.
[atEnd] whileFalse: [
| found delta |
found := position fourNeighbors detect: [:neighPos |
(range containsPoint: neighPos) and: [((map at: neighPos y) at: neighPos x) = next]
] ifNone: [atEnd := true. Float nan].
delta := found - position.
(map at: position y) at: position x put: (sign at: {from ifNil: [delta negated]. delta} ifAbsent: goal).
position := found. from := delta negated. next := next + 1].
(map collect: #join) asStringWithCr
].

fn value: '1 4 5 6
2 3 8 7
15 14 9 10
16 13 12 11' .
"=>
'↓┌→┐
└┘┌┘
┌┐└┐
★└←┘' "

760デフォルトの名無しさん2019/03/23(土) 06:18:42.67ID:ZlGSstH0
>>759 758の入力例を拝借

fn value: '1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9'.

"=>
'→→→→┐
┌→→┐↓
↑┌★↓↓
↑└←┘↓
└←←←┘' "

fn value: '1 4 5 8 9 12
2 3 6 7 10 11'.

"=>
'↓┌┐┌┐★
└┘└┘└┘' "

fn value: '1 4 5 6
2 3 8 7
16 14 9 10
15 13 12 11' .

"=> 繋げられるところまでで終点にする。
'↓┌→┐
└┘┌┘
16★└┐
15└←┘' "

761デフォルトの名無しさん2019/03/23(土) 22:17:53.61ID:4V4ijAbJ
S : Start
E : End
X : 行けない所

で、表す方がよいかも

762デフォルトの名無しさん2019/03/23(土) 23:35:50.10ID:4ExQ31KE
縦読み

763デフォルトの名無しさん2019/03/23(土) 23:49:28.93ID:5/UQAxw+
>>761
セックス!

764デフォルトの名無しさん2019/03/24(日) 01:17:54.50ID:TWBa+gHA
>>746 C
https://ideone.com/dQ2NRt
行けないところがある場合■で表示した

765デフォルトの名無しさん2019/03/24(日) 13:31:32.22ID:Vlgf6sT0
お題 :次のようなジョブパラメータで表されるジョブ(製造工程)があります。全て完成するための最小時間とマシンスケジュールを求めてください。貧乏なので同じ番号のマシンは一台しかありません。{A, B}とあれば;Aマシン番号、B:所要時間

int job_param[JOBNUM][STP][2] = {
{{3, 10}, {4, 10}, {2, 12}, {0, 18}, {1, 4}},
{{1, 11}, {2, 6}, {3, 2}, {4, 8}, {0, 15}},
{{2, 10}, {4, 16}, {3, 2}, {1, 8}, {0, 14}},
{{2, 15}, {1, 12}, {0, 16}, {3, 6}, {4, 17}},
{{4, 14}, {0, 2}, {1, 15}, {2, 6}, {3, 10}}};

766デフォルトの名無しさん2019/03/24(日) 13:50:50.08ID:ynFGlX0q
>>765
順序に対する制限とかは?
それとなんで5つに分かれているのか?
全部一塊で25個のマシン番号と所要時間のペアがある状態だと順序の関係で何かまずいのか?

767デフォルトの名無しさん2019/03/24(日) 13:56:04.93ID:xOvhcY6B
>>766
5つのタスクでそれぞれ5つの工程があるってことだろう

768デフォルトの名無しさん2019/03/24(日) 14:40:55.72ID:ynFGlX0q
>>767
その辺の制限やルールが書かれていないからどうやれば良いのかが分からない、ということ。

順序も何もかも(マシン番号と所要時間も)入れ替えて構わないなら0〜4のマシン全体に所要時間を平均的に
詰め込むだけになると思うが、わざわざジョブとか分けてるんだからどうやらそうではなさそうだよな。
どうやら順序や入れ替えには制限があるように見える。しかしその制限が書かれていない。

769デフォルトの名無しさん2019/03/24(日) 17:03:38.93ID:Ou399CfX
>>765
>>766
>>767
ジョブショップスケジューリング問題です。この問題はジョブや機械が増加すると調べなければならない組み合わせが爆発的に増加してしまうため、現実的な時間で最適解を求めることが難しいとされています(NP困難として知られています)。
マシンを配列順に使用することで1つの製品ができます。

私の実験では10分ぐらい待っても95で終わりませんでした。

770デフォルトの名無しさん2019/03/24(日) 17:35:40.10ID:Ou399CfX
>>769
途中結果
Solution 4
COST_TIME: 95
0 : ( 3, 0, 10), ( 4, 15, 25), ( 2, 27, 39), ( 0, 46, 64), ( 1, 65, 69)
1 : ( 1, 0, 11), ( 2, 40, 46), ( 3, 54, 56), ( 4, 57, 65), ( 0, 80, 95)
2 : ( 2, 16, 26), ( 4, 27, 43), ( 3, 44, 46), ( 1, 47, 55), ( 0, 65, 79)
3 : ( 2, 0, 15), ( 1, 16, 28), ( 0, 29, 45), ( 3, 47, 53), ( 4, 66, 83)
4 : ( 4, 0, 14), ( 0, 15, 17), ( 1, 29, 44), ( 2, 47, 53), ( 3, 57, 67)

MACHIN Schedule
0 : (46, 64), (80, 95), (65, 79), (29, 45), (15, 17)
1 : (65, 69), ( 0, 11), (47, 55), (16, 28), (29, 44)
2 : (27, 39), (40, 46), (16, 26), ( 0, 15), (47, 53)
3 : ( 0, 10), (54, 56), (44, 46), (47, 53), (57, 67)
4 : (15, 25), (57, 65), (27, 43), (66, 83), ( 0, 14)

771デフォルトの名無しさん2019/03/24(日) 20:02:05.47ID:TWBa+gHA
>>770
プログラミングのお題スレ Part13 	YouTube動画>1本 ->画像>15枚
手動で調べたら90時間(単位は適当)まで縮んだ。最小時間か知らんが。
こういうのガントチャートっていうんだな

772デフォルトの名無しさん2019/03/24(日) 22:58:01.17ID:3fqiTHWE
ちなみに、

>>746
の問題で、行列の周りに、番兵を作って、処理した人はいる?

漏れは、いつもこの手の問題では、番兵で周りを囲む

773デフォルトの名無しさん2019/03/25(月) 12:18:06.31ID:7aW5s/71
……プログラミングやっててガントチャートしらないヤツもいるのか
勉強になった

774デフォルトの名無しさん2019/03/25(月) 12:23:06.98ID:T0osdeZX
名前知らなかっただけでは?

775デフォルトの名無しさん2019/03/25(月) 12:26:24.36ID:VWPF1Bqz
ロシア国防省「東アジアの地震の多い某国は数十年にわたり、地震を偽装した地下核実験を繰り返している」
http://2chb.net/r/liveplus/1550888671/l50
自衛隊の中に熊本人工地震を発生させた連中がいることは震源地が自衛隊駐屯地地下であることから自明。
http://open.mixi.jp/user/38378433/diary/1953066799
そればかりか、いま熊本の地下から出ている放射線量が「謎の赤丸急上昇中」だというのだ。
https://quasimoto2.exblog.jp/22729487/
今、自民党政権が、原発再稼働を進めている本当の理由は、核武装計画だけである。
経済的にとっくに破綻した原子力発電など、最初から眼中にないのだ。
東海アマブログentry-688.html

776デフォルトの名無しさん2019/03/25(月) 14:02:28.57ID:FL0Sj0Av
いちいちガントチャートなんて銘打たんしな
進捗管理するときには普通に使うもんだ

777デフォルトの名無しさん2019/03/25(月) 14:57:20.21ID:T0osdeZX
みんな名前知らないけど気づいたら作ってるようなものじゃないか?

778デフォルトの名無しさん2019/03/25(月) 21:13:29.59ID:wbp6GG9F
ナップザック問題の一種じゃないの?

779デフォルトの名無しさん2019/03/26(火) 00:12:39.41ID:xyG5xdoY
お題1: 整数値に対して K, M, G 等の単位を付けて人間に読みやすく文字列に変換して出力する。(ls -lh の時の容量の出力と同じで良い)。2^10 = K, 2^20 = M, 2^30 = G とする。
 小数点以下を何桁にするかはご自由に。但しあまりあり過ぎると人間には分かり辛いので1桁か2桁が望ましい。

お題2: お題1の逆変換。但し欠落した下位桁があったとしても考慮しなくて良い。

お題3: お題1, お題2 の10^3 = K, 10^6 = M, 10^9 = G 版。

回答のプログラムはまとめた形でも良い。例えばお題1を処理する関数のオプションとして0を与えると2^10単位、1を与えると10^3単位にするなど。
また、K, M, G よりも上の単位ができても良い。

780デフォルトの名無しさん2019/03/26(火) 03:32:10.56ID:xI3rzKRA
いまどき容量系の接頭辞はKi, Mi, Gi使えや

781デフォルトの名無しさん2019/03/26(火) 03:42:21.20ID:xyG5xdoY
>>780
そうしたければそうしてもいいよ。

782デフォルトの名無しさん2019/03/26(火) 13:05:28.20ID:8ujFPLE9
お題1と3まとめてswitch-case文って
筋悪いですかねえ

あるいはお題1とお題2をまとめて、enum型でINVERSEとか作るとか、あるいは TRUE / FALSE で分岐とか

783デフォルトの名無しさん2019/03/26(火) 19:22:41.61ID:NbUyZWCM
誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 95286
https://you-can-program.hatenablog.jp

784デフォルトの名無しさん2019/03/27(水) 00:34:27.07ID:KJlt8YQv
>>779 c
https://ideone.com/N64nDG
・十分に小さい値のときしか動かない
・大きい値を与えたときの挙動もケアされない

785デフォルトの名無しさん2019/03/27(水) 23:48:37.99ID:oM4knkxt
>>779
Kotlin
https://paiza.io/projects/BisWbp363VArN7FaHYwmoA

Long 型使って正の整数しか考慮してないので63bitまで。

786さまよえる蟻人間 ◆T6xkBnTXz7B0 2019/03/28(木) 00:18:20.27ID:JS1PpMcc
Windows付属のshlwapi.dllにStrFormatByteSizeという関数があるようだね。

787デフォルトの名無しさん2019/03/28(木) 17:17:39.60ID:vvqhH31/
>>765
乱数使ったプログラム書いてみたけど動かした瞬間90まで行くけど
そこから何分待っても動かなさそう

788デフォルトの名無しさん2019/03/30(土) 20:23:23.36ID:ghZBhzgh
お題
表示画面におさまる最大の正三角形を描画する

789デフォルトの名無しさん2019/03/30(土) 23:07:23.94ID:DyxzEuK/
つまらん次

790デフォルトの名無しさん2019/03/31(日) 08:20:57.83ID:JrOSOdLx
>>788
最大の定義ぐらい書けよ…

791デフォルトの名無しさん2019/03/31(日) 13:16:21.13ID:m8dr8/PB
>>790
「たとえば表示画面が640x400なら、一辺が400の正三角形を描画する」ことではないのか
貴殿が想定する「最大の定義」とやらを示してもらえんかの?

792デフォルトの名無しさん2019/03/31(日) 13:25:41.80ID:+5DxT57L
ん?
その場合、一辺は400*2/sqrt(3)になるんじゃない?

793デフォルトの名無しさん2019/03/31(日) 13:28:01.88ID:EfWeZY5f
>>791
高さ400の正三角形だと一辺461.88じゃね?

794デフォルトの名無しさん2019/03/31(日) 15:30:18.52ID:uX30LzG9
怒涛のツッコミw

795デフォルトの名無しさん2019/03/31(日) 19:30:51.59ID:KJRyWF55
コンソール画面なら、画面の横幅と縦幅を取得しなきゃならんから言語によってはめんどくさいだろうな
標準でcurses使える言語ってなにがあるかな

796デフォルトの名無しさん2019/03/31(日) 20:25:37.50ID:P4y0w1jO
表示画面が球体だったら…

797デフォルトの名無しさん2019/04/01(月) 00:15:16.48ID:ucc1UNjR
リーマン幾何の多様体上で計算しとけ

なお、サラリーマンのリーンマン じゃないからな。

798デフォルトの名無しさん2019/04/01(月) 01:51:36.50ID://wZRuJn
でしゃばんな

799デフォルトの名無しさん2019/04/01(月) 03:15:46.62ID:Mx+j7LaB
Windows環境だとdirectx叩くことになるのかな

VT100とかXとかは全く知らないけど DisplayWidth とか DisplayHeight とか使うのか
あるいは何らかのクラスのメンバー関数を呼ぶのか

800デフォルトの名無しさん2019/04/01(月) 03:16:52.56ID:Mx+j7LaB
>>795
pdcursesがあるじゃないか(あらゆる環境で使えるとは言ってない


lud20201213015759ca

レス:1-200 201-400 401-600 601-800 801-1000 ALL

このスレへの固定リンク: http://5chb.net/r/tech/1549160513/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「プログラミングのお題スレ Part13 YouTube動画>1本 ->画像>15枚 」を見た人も見ています:
プログラミングのお題スレ Part17
プログラミングのお題スレ Part14
プログラミングのお題スレ Part22
プログラミングのお題スレ Part9
プログラミングのお題スレ Part20
プログラミングのお題スレ Part7
プログラミングのお題スレ Part15
プログラミングのお題スレ
安価でプログラミングの教科書を作るスレ
七行プログラミング part6
UNIXプログラミング質問すれ Part10
最も美しいプログラミング言語は? Part6
関数型プログラミング言語Haskell Part32
プログラミング言語 Kuin Part 16#01
関数型プログラミング言語Haskell Part31
関数型プログラミング言語Haskell Part30
WPF(.NET, WinUI) GUIプログラミング Part30
WPF(.NET, WinUI) GUIプログラミング Part29
WPF(.NET, WinUI) GUIプログラミング Part31
古代VBプログラマ質問スレ(Ver.6.0 まで) part65
WPF(.NET, WinUI) GUIプログラミング Part33
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part19
プログラミング詐欺?情報商材屋マナブ(ねずみ男・アル中)ってどうよ? Part2
【プログラミング商材12万】情報商材屋マナブってどうよ? Part5【ブログ商材2万】
プログラミングスレ
プログラミングの勉強法
大学生のプログラミング雑談スレ
競技プログラミング総合スレ 65
競技プログラミング総合スレ 66
プログラミングの勉強方法を30秒にまとめた
Androidプログラミング質問スレ revision53
Androidプログラミング質問スレ revision54
Androidプログラミング質問スレ revision55
ヒッキーのまったりプログラミングするスレ 2
プログラミングのやる気出す方法教えてくれ
Windows Azure プログラミング 総合スレ2
ふははは、ついにプログラミングのやる気が出たぞ
競技プログラミングにハマるプログラマのスレ 23
Androidプログラミング質問スレ revision53
競技プログラミングにハマるプログラマのスレ 20
競技プログラミングにハマるプログラマのスレ 15
競技プログラミングにハマるプログラマのスレ 19
競技プログラミングにハマるプログラマのスレ 13
Androidプログラミング質問スレ revision53
競技プログラミングにハマるプログラマのスレ 62
俺っちプログラミングのセンスがないんだけど。。。
競技プログラミングにハマるプログラマのスレ 18
一切プログラミングの知識ないけどアプリゲー作りたい
嫌儲休日のプログラミングスレ よーし新しい言語覚えるぞおじさん「よーし新しい言語覚えるぞ」
関数型プログラミング言語Haskell Part34 (694)
ネットワークプログラミング相談室 Port27
ネットワークプログラミング相談室 Port31
Googleのプログラミング言語 「Dart3」 100%Nullセーフ、WebAssemblyとRISC-Vサポート
プログラミング学習サイトについて語るスレ (11)
マルチスレッドプログラミング相談室 その9 (459)
日本語プログラミング言語『なでしこ』スレ6.1&#169;2ch.net (155)
プログラミング業界に激震、C#が「GPU」に対応、「Parallel2D.For」と書くだけ
OpenMPプログラミング
プログラミング飽きた
プログラミングをしたい件
プログラミング言語Egison
プログラミングしようぜ
05:17:23 up 20 days, 20:39, 4 users, load average: 37.20, 29.18, 25.14

in 0.028151988983154 sec @[email protected] on 111219