[過去ログ] プログラミングのお題スレ Part13 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
617: 2019/03/11(月)20:02 ID:JmszPBJl(2/2)調 AAS
いや、その通りに歩くんだろ
618(1): 2019/03/11(月)20:07 ID:5vEtkzIB(2/2)調 AAS
出題通り以外の回答はやめてほしいな。
それ以外の回答をする場合は、解説文も日本語で書いてくれよ。
不慣れなプログラムもあることだろうし、長いプログラムなんて見る気にもならないし、プログラムを見ればわかるというのは無し。
619(2): 2019/03/11(月)21:26 ID:ALw/TkKR(1)調 AAS
>>618
ソースの中身まではちゃんと確認してないけど、ちゃんと出題通りにできてると思う。
出題の"入力例"通りではないが、複雑な入力パターンに対して正しく動いてそうと思える実行例だと思うぞ。
620(1): 2019/03/11(月)21:31 ID:1OBeL2+Y(1)調 AAS
>>601 Common Lisp, >>614の移植
https://ideone.com/B76Dki
621: 2019/03/11(月)22:12 ID:+V1dboU8(1)調 AAS
>>>v<^^>>
の場合
*^>>
>^>
*<v
622: 2019/03/11(月)22:40 ID:6pdTomDX(1)調 AAS
>>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(7): 2019/03/11(月)23:02 ID:GdRfR4uu(1)調 AAS
以下の整形式の.ini ファイルから、すべての値を取得して、
「セクション名 : キー名 : 値」で表示する
[sec1]
key1=val1
[sec2]
key2=val2
624: 2019/03/11(月)23:51 ID:/Vx80pKW(2/2)調 AAS
>>623 C++
https://ideone.com/V4sf81
625(1): 2019/03/12(火)00:26 ID:XpXqAgCh(1/2)調 AAS
>>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 ID:XpXqAgCh(2/2)調 AAS
>>625 も少し簡潔に書けるんだった…
while (<DATA>) {
$s = $1 if /\[(\w+)\]/;
print "$s:$1:$2\n" if /(\w+)=(\w+)/;
}
__DATA__
[sec1]
key1=val1
[sec2]
key2=val2
627(1): 2019/03/12(火)01:38 ID:nghHbW0D(1)調 AAS
>>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 ID:KPetEW8/(1/4)調 AAS
>>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 ID:+VdOvnK/(1/2)調 AAS
>>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 ID:MLSq27aG(1)調 AAS
>>623 Io
f := method(s,
s split("\n\n")map(splitNoEmpties("[","]","\n",=")join(":"))
)
631: 2019/03/12(火)18:30 ID:M/w6PjEF(1)調 AAS
>>619
出題通りなのかどうかがわからんのだが。どう解釈したら出題通りとなるのか?
632(3): 2019/03/12(火)19:26 ID:mUEXbKn8(1)調 AAS
お題
数列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 ID:2hm/Dong(1)調 AAS
つまらん
634: 2019/03/12(火)21:03 ID:KPetEW8/(2/4)調 AAS
>>619
>>547に対して、ナチュラルソートされて無くても(普通のソートでも正しい答えが得られるとは限らない)正しい答えを出せるとか、出題者の意図を踏まえながら、意図を超えた範囲もカバーするのはいいんじゃ無いか?
意図を無視するのは論外だが。
635: 2019/03/12(火)21:07 ID:KPetEW8/(3/4)調 AAS
>>632
マシンパワーがあれば式を入れればいいだけってのはね。。。
解くのに頭使う。解いてみたら案外簡単(アルゴリズムが浮かぶのがキモ)。あえて難しくて最適化の道がある。とかが望ましい。
いあ、無茶振りだろうから、どれか2つ満たせればおkだが。
636(2): 2019/03/12(火)21:12 ID:KPetEW8/(4/4)調 AAS
例えば[[1,2,3],[4,5,6],[7,8,9]]みたいな任意のn*nなリスト(または配列)を非破壊的に作れ。とか。
637(2): 2019/03/12(火)21:43 ID:rf03pH6k(1)調 AAS
>>636
一般的なミューテートするカウンタも使っちゃダメってことかな?
638(2): 623 2019/03/12(火)22:49 ID:oX4bYoPv(1/2)調 AAS
>>623
お題を修正
[ ] = の3つは、特別な記号です。
それらを含まない行は、無視して
[sec1]
key1=val1
[sec2]
key2=val2
x=y
>>627
セクション名・キー名・値は、特定の文字列ではありません!
特別な記号以外の、任意の文字列です
639(1): 2019/03/12(火)23:03 ID:oX4bYoPv(2/2)調 AAS
お題
現行規格の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(1): 2019/03/12(火)23:07 ID:+VdOvnK/(2/2)調 AAS
>>632
https://ideone.com/Y4N5oM c++
小さい数値は力技(bf2)で確認してみたが……
641: 2019/03/12(火)23:27 ID:LDiZRGdZ(1)調 AAS
>>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 ID:2FAQzMGK(1)調 AAS
>>632 C
https://ideone.com/m3vejt
エクセルとかで実際に数列を計算してみると、長さ12(剰余の数-1)以下の周期になるっぽいのでそれで求められる。
普通に計算するとq * a[i] + r はどんどん大きくなるけど、
毎回 (q * a[i] + r) mod 13としても、計算に影響はないようなので、オーバーフローもせずに計算できる。
だたし、数学的に正しいか保証しかねるが。
643(1): 2019/03/13(水)00:12 ID:rGhbMCbu(1)調 AAS
>>640
12 0 11 1
=> 11
というコーナーケースが…
644: 2019/03/13(水)00:29 ID:Eq+ygVqk(1)調 AAS
>>643
確かに、
コメントアウト(bf2)するときに誤ってしまったようだ、
("if(n==0)" だったのだが、いらないなぁ)
どっちにしろ、0や1のテストは、やってない
645(2): 2019/03/13(水)00:51 ID:vPzmbHWs(1/2)調 AAS
>>637
だめ。
そこが関数型言語と手続き型言語の考え方の大きな違いだし。
皮肉にも?それ作った時、入門書の関数より考え方の違いが分かった。
646(1): 2019/03/13(水)00:54 ID:bUFEpZHr(1)調 AAS
>>638
> セクション名・キー名・値は、特定の文字列ではありません!
> 特別な記号以外の、任意の文字列です
えぇ…
入力:
[あああ]
いいい=ううう
[えええ]
おおお=かかか
出力:
あああ:いいい:ううう
えええ:おおお:かかか
少なくとも任意の文字列には対応してるじゃん。不当指摘だ!
647(1): 2019/03/13(水)01:18 ID:FktqEJYT(1)調 AAS
>>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]]
648: 623 2019/03/13(水)02:39 ID:ZImJqTUY(1)調 AAS
>>646
スマン。漏れの間違い!
key, val などの特定の文字列を置換しているのかと、勘違いしていた
649: 2019/03/13(水)05:11 ID:36vLAC/n(1)調 AAS
>>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 ID:vPzmbHWs(2/2)調 AAS
>>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 ID:loIc2/nm(1)調 AAS
>>623 ruby
https://ideone.com/FBiZcF
652: 2019/03/13(水)22:22 ID:H95Q/dPG(1)調 AAS
こうかな?
;; 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(11): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/13(水)23:29 ID:KwyST1w4(1)調 AAS
お題: ピリオド区切りの二つのバージョン番号を比較し、大小関係を判定した結果を-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 ID:TPG8S2ma(1/2)調 AAS
>>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 ID:vRIsxo2e(1/2)調 AAS
>>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 ID:vRIsxo2e(2/2)調 AAS
>>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(1): 2019/03/14(木)06:43 ID:3EvgP48J(1/2)調 AAS
>>653
0.0.1 > 0.0 でいいのか?
658: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)07:26 ID:1+g2CCuw(1/7)調 AAS
>>657
ない桁はゼロと見なす。
659(1): 2019/03/14(木)10:42 ID:YiVNNcx0(1/5)調 AAS
>>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(2): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)10:59 ID:PwP2txgq(1)調 AAS
>>653
大小関係の定義をまじめに考えましょう。
>>659
JavaScriptならsplit使えるはず。桁数の制限は要らない。
661: 2019/03/14(木)11:23 ID:YiVNNcx0(2/5)調 AAS
ごめん勝手にsemverかと思い込んでた
662: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)11:35 ID:1+g2CCuw(2/7)調 AAS
LaTeXのバージョンシステムはちょっと特殊で、円周率に近付くようになってる。この場合は文字列として比較しないといけない。
一般的なバージョンシステムはドットで区切られた整数を先頭から順に互いに比較して大小関係を定義する。
まれにアルファとかベータとか「限定版」とか訳のわからない文字列が付くことがあるが、これは常識がなければ大小関係を機械的に判定するのは難しい。
663: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)11:47 ID:1+g2CCuw(3/7)調 AAS
一番確実なバージョン大小判定方法は、リリースごとに年月日とバージョン情報を記録しておくことだ。
664: 2019/03/14(木)13:52 ID:uKED8jms(1)調 AAS
>>653
Perl
https://paiza.io/projects/puAYVRuDktPCBh_Xdd2vbQ
665: 2019/03/14(木)15:56 ID:TPG8S2ma(2/2)調 AAS
>>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(4): 2019/03/14(木)18:00 ID:38t26SL0(1/2)調 AAS
お題: 何も出力しないプログラム自身のコードをソートするとhello worldを出力するプログラムを作れ
667(3): 2019/03/14(木)18:07 ID:YPV07ntD(1/3)調 AAS
>>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 [age] 2019/03/14(木)18:11 ID:1+g2CCuw(4/7)調 AAS
>>667
バージョン番号の各整数の数字は2個以上になることがある。'10.0'と'9.1'を比較せよ。
669: 2019/03/14(木)18:14 ID:YPV07ntD(2/3)調 AAS
>>667
print( cmp('1.1.0', '1.1') )
# 1
670(2): 2019/03/14(木)18:32 ID:YPV07ntD(3/3)調 AAS
>>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(1): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)18:44 ID:1+g2CCuw(5/7)調 AAS
>>670
残念だが不正解。比較できる桁がなければゼロと見なす、すなわち、2.0.0は2に等しいと見なす決まりがある。
672: 2019/03/14(木)18:50 ID:dvZ8z+Z0(1/2)調 AAS
>>653 octave
https://ideone.com/xh4Cj4
673(6): 2019/03/14(木)18:58 ID:dvZ8z+Z0(2/2)調 AAS
お題:フィボナッチ数列を最初の10個表示せよ
ruby
https://ideone.com/ewyP50
perl6
https://ideone.com/O3tVZj
674: さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)18:59 ID:1+g2CCuw(6/7)調 AAS
ソフトウェア開発におけるバージョン管理は、製造メーカーにおける型番管理と同じくらい重要である。
検査逃れのために型番や履歴をごまかしたり、型番管理がなっていないメーカーはメーカー失格である。
インターネット全盛の現在では、型番はウェブ検索しやすいものでなければ、国際競争に負けてしまう。
675(3): 2019/03/14(木)18:59 ID:38t26SL0(2/2)調 AAS
お題: 3つの数の最小値を1回の分岐で決めろ!
676: 2019/03/14(木)19:55 ID:YiVNNcx0(3/5)調 AAS
>>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 ID:YiVNNcx0(4/5)調 AAS
あっ間違えた
家帰ってから直す
678(1): 2019/03/14(木)20:14 ID:vvVzV1YI(1/3)調 AAS
>>671 どこにそんな決まりがあるの?
普通 ver.1 が出て、その後ver.1.0 が出れば、ver.1.0 の方が新しいのは明らかだろ。
総称として、ver.1という場合もあるが、その場合はver.1.9も含まれる。
679: 2019/03/14(木)20:14 ID:ko69m/9G(1)調 AAS
見つけた
RPM::VersionSort - RPM version sorting algorithm, in perl XS - metacpan.org
https://metacpan.org/pod/RPM::VersionSort
680: 2019/03/14(木)20:16 ID:vvVzV1YI(2/3)調 AAS
とにかくバージョン番号が異なれば別のバージョンとみなすのが普通だろ。
同じと思う方がおかしい。
681(4): 2019/03/14(木)20:16 ID:0tbf1s3D(1)調 AAS
お題:“木”という漢字を使って以下のようなフラクタル図形を描け
n=0
木
n=1
-木
木木
n=2
---木
--木木
-木--木
木木木木
n=3
-------木
------木木
-----木--木
----木木木木
---木------木
--木木----木木
-木--木--木--木
木木木木木木木木
※ハイフンはスペースだと思ってください
682(1): さまよえる蟻人間 ◆T6xkBnTXz7B0 [age] 2019/03/14(木)20:26 ID:1+g2CCuw(7/7)調 AAS
>>678
Win32の固定幅のバージョン情報では4つの整数をドットで区切ったものを使用する。VerInstallFile関数はバージョン番号を比較する。0.0と0.0.0.0が違うバージョンだとアウトだ。
683(2): 2019/03/14(木)20:45 ID:vvVzV1YI(3/3)調 AAS
>>682 そんなローカルールなんて知るかよ。 もしそういう意図なら問題を訂正しろよ。 いちいち誰かのいちゃもんに付き合ってる暇はない。
684: 2019/03/14(木)20:52 ID:YiVNNcx0(5/5)調 AAS
>>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 ID:8oAE3RnG(1)調 AAS
>>683
例に0.0.0と0.0が等しいって書いてあるんだが
686: 2019/03/14(木)23:16 ID:3EvgP48J(2/2)調 AAS
>>683
> いちいち誰かのいちゃもんに付き合ってる暇はない。
ならスルーしろよ
お前の頓珍漢な解釈なんて要らんし
687: 2019/03/14(木)23:41 ID:nI5lwjDU(1)調 AAS
>>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(1): 2019/03/15(金)00:00 ID:27sSd34q(1/2)調 AAS
>>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 ID:27sSd34q(2/2)調 AAS
>>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 ID:LCz/5Veu(1)調 AAS
>>675
>1回の分岐で決めろ!
https://ideone.com/15k0PN
は題意を満たしていますか?
691: 2019/03/15(金)00:45 ID:GUP5tEyB(1)調 AAS
2回分岐してるように見えるが
692: 2019/03/15(金)00:50 ID:ltf0XXfV(1/2)調 AAS
>>666 I
行単位で昇順にソートする場合
exit
"hello world" println
文字単位のソートの場合は難しそう。
693: 2019/03/15(金)00:52 ID:J+j6Qj2a(1)調 AAS
>>675 Java
https://ideone.com/dAlKtw
0回じゃお題満たしてないからだめです?
694: 2019/03/15(金)01:15 ID:T0clmjRI(1)調 AAS
>>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 ID:4EriVrie(1)調 AAS
>>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(1): 2019/03/15(金)01:51 ID:Fj/79Ht+(1)調 AAS
>>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 ID:VdqhZ9XO(1)調 AAS
>>673 Common Lisp
https://ideone.com/fbbBbx
698: 2019/03/15(金)10:29 ID:4uXCwYPV(1/2)調 AAS
>>696
よく考えたら配列で出力する必要もなかった
console.log(...take(10)(fibo));
結果:
0 1 1 2 3 5 8 13 21 34
699: 2019/03/15(金)10:50 ID:ltf0XXfV(2/2)調 AAS
>>666 Lua
a=ture
a=a or print("hello world")
700: 2019/03/15(金)10:54 ID:EVqxIhVf(1)調 AAS
>>673
Haskell
main = (print.take 10) fibs
where fibs = 0:1:zipWith (+) fibs (tail fibs)
701: 2019/03/15(金)11:30 ID:gesJPCRi(1)調 AAS
>>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(1): 2019/03/15(金)12:06 ID:phFelL6J(1/2)調 AAS
>>666
「ソートすると」ではなく「ソートしてからその出力を実行またはコンパイルして実行すると」なのでは?
703: 2019/03/15(金)13:00 ID:1zMWa3GW(1/2)調 AAS
>>702
せやで
704: 2019/03/15(金)13:38 ID:CRw2aIHX(1)調 AAS
そーっとしておこう
705: 2019/03/15(金)15:16 ID:1zMWa3GW(2/2)調 AAS
お題: プログラムのコードの文字を縦読みしたコードが実行可能なコード
706(4): 2019/03/15(金)17:37 ID:g4S7Lu9n(1)調 AAS
お題
2桁16進数化したものをつなげた形でIPアドレスが与えられる。(例:192.168.0.1 -> C0A80001)
与えられたIPアドレスからホスト名を逆引きせよ。
例
08080808 -> google-public-dns-a.google.com
9da6e21a -> www.cnn.com
707(2): 2019/03/15(金)18:51 ID:phFelL6J(2/2)調 AAS
>>706
Perl5
https://paiza.io/projects/pgmsypvAWHlJ0UwFis4OFg?language=perl
708: 673 2019/03/15(金)19:08 ID:3zDqFokC(1)調 AAS
>>673 java
https://ideone.com/vNVR4y
>>673 c
https://ideone.com/P6eqTd
709: 2019/03/15(金)19:13 ID:4uXCwYPV(2/2)調 AAS
>>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 ID:moiau3OK(1)調 AAS
>>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 ID:ksQagb59(1)調 AAS
>>653
Kotlin
https://paiza.io/projects/Uidg2dU-H0l3liAmw1scwQ
712: 2019/03/16(土)06:51 ID:x9tnPyz1(1)調 AAS
>>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 ID:0dLFyPZP(1/3)調 AAS
>>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 ID:EVMD7h0V(1/3)調 AAS
お題: プログラム言語をなにも知らない人にもプログラムの意味が理解できるコメント無しのhello worldを出力するコプログラム
715: 2019/03/16(土)17:11 ID:0dLFyPZP(2/3)調 AAS
わかりません><
716(1): 2019/03/16(土)17:16 ID:EVMD7h0V(2/3)調 AAS
お題: 文字列に丁度いい具合にグリッチを入れて超かっこいい文字列を作るプログラム
上下前次1-新書関写板覧索設栞歴
あと 286 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s