[過去ログ] プログラミングのお題スレ Part13 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
875(13): 2019/05/09(木)19:00 ID:n0QdGvKz(1)調 AAS
コラッツ数列を作る関数chainを書け
コラッツ数列の定義
任意の自然数から開始する
数が 1ならば 、終了
数が偶数なら 、 2で割る
数が奇数なら 、 3倍して 1を足す
新しい値でこのアルゴリズムを繰り返す
使用例
>chain 10
[ 1 0 , 5 , 1 6 , 8 , 4 , 2 , 1 ]
>chain 1
[ 1 ]
>chain 30
[ 3 0 , 1 5 , 4 6 , 2 3 , 7 0 , 3 5 , 1 0 6 , 5 3 , 1 6 0 , 8 0 , 4 0 , 2 0 , 1 0 , 5 , 1 6 , 8 , 4 , 2 , 1 ]
876(1): 2019/05/09(木)21:28 ID:V3giiBFx(1)調 AAS
>>875 C
https://ideone.com/vpQG5P
878: 2019/05/10(金)08:21 ID:Z1uC1A15(1/2)調 AAS
>>875
python
def chain(n):
lst = []
if n < 1: raise ValueError("Please n > 0 number")
while n != 1:
lst.append(n)
if n % 2 == 0: n //= 2
else: n = n * 3 + 1
lst.append(1)
return lst
for i in [10,1,30,0]: print(chain(i))
879: 2019/05/10(金)08:24 ID:Z1uC1A15(2/2)調 AAS
>>875
Haskell
main = mapM_ (print.chain) [10,1,30,0]
chain 1 = [1]
chain n | n < 1 = error "Please n > 0 number"
chain n | even n = n:chain (n `div` 2)
chain n = n:chain (n * 3 + 1)
880(1): 2019/05/10(金)11:11 ID:VtNtFyvg(1)調 AAS
>>875
C
https://ideone.com/mBt0yE
1未満の値の判定はchain関数に実装すべきなのかどうなのか……
890(1): 2019/05/10(金)15:43 ID:aTy0NCJ4(1)調 AAS
>>875
与えられた数の3倍以上の個数を持つ系列を
を3個示せ。
891: 2019/05/10(金)17:50 ID:58PV3kUA(1)調 AAS
>>875,884 Squeak Smalltalk
| chain |
chain := [:n |
Array streamContents: [:ss |
ss nextPut: n.
[n > 1] whileTrue: [ss nextPut: (n := n even ifTrue: [n / 2] ifFalse: [n * 3 + 1])]
]
].
chain value: 10. "=> #(10 5 16 8 4 2 1) "
(1 to: 100) count: [:n | (chain value: n) size >= 15] "=> 71 "
892: 2019/05/10(金)20:05 ID:0Zlxa6bH(1)調 AAS
>>875
Perl のワンライナー。
perl -ne '$n=$_;chomp($n);@d=($n);while($n!=1){$n=$n&1?($n*3+1):($n/2);push(@d,$n)}print "[".join(", ", @d)."]\n"'
実行する場合はbash等のシェルから行う(シングルクォートの中がそのままperlに引き渡されさえすれば他のシェルでも良い)。
標準入力から1行1データで入力して結果を出力するようにした。
896: 2019/05/11(土)11:54 ID:Ze1v8w/9(1/2)調 AAS
>>875 Perl5
sub chain {
my $i = shift;
$i == 1 ? $i : ($i, ($i & 1 ? chain(3*$i + 1) : chain($i / 2)))
}
for (qw{10 1 30}) {
@a = chain $_;
print "[@a]\n";
}
実行
~ $ perl 13_875_collatz.pl
[10 5 16 8 4 2 1]
[1]
[30 15 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1]
898: 2019/05/11(土)13:06 ID:bKjSBhWB(1)調 AAS
>>875
Ruby で
module Collatz
def self.next_number( num )
if num.even? # 偶数
num / 2
else # 奇数
num * 3 + 1
end
end
def self.chain( num )
@@results = [ ]
tmp = num
while true
@@results.push tmp
break if tmp == 1
tmp = next_number( tmp )
end
@@results
end
end
[ 1, 27 ].each do | num |
p Collatz.chain( num )
end
899: 2019/05/11(土)18:55 ID:fAbbaveG(1/2)調 AAS
>>875 c
https://ideone.com/jwtvbF
>>875 ruby
https://ideone.com/MIKeM7
>>875 ocaml
https://ideone.com/CEassZ
901: 2019/05/11(土)23:44 ID:fAbbaveG(2/2)調 AAS
>>875 octave
https://ideone.com/eNqIim
902: 2019/05/12(日)02:01 ID:FbICTnq7(1)調 AAS
>>875
Java
https://paiza.io/projects/VSqA-UZgWeXB-YzVTnrQRg
takeUntilが欲しいなー
903: 2019/05/12(日)06:46 ID:R9TUiFuu(1)調 AAS
>>875
コラッツ樹で作れば出力を減らせる。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.040s