[過去ログ] プログラミングのお題スレ Part15 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
48
(8): 2019/08/02(金)20:14 ID:fXsI78QL(1) AAS
お題: 数字が与えられるので、その数字を元の数より大きくなるように再構築せよ
大きくできなければ元の数字をそのまま出力せよ

例:
in < 123
out > 231, 213, 321, 312

in < 921
out > 921
53: 2019/08/03(土)01:06 ID:0ts56itm(1/2) AAS
>>48
外部リンク:ideone.com
C++。ご期待通り(?)にパーミテーション回してみたよ。
重いお。
57
(1): 2019/08/03(土)11:39 ID:xpWLAw2C(1/4) AAS
AA省
60
(1): 2019/08/03(土)12:09 ID:xpWLAw2C(4/4) AAS
>>48 Perl5、iteratorじゃなくpermutationを列挙する方法で書いてみた。これなら題意に合うはず。

sub permu {
 my ($l, $p, @r) = @_;
 defined $p ? map {[$p, @$_]} permu([], @$l, @r) : ([])
 ,
 @r ? permu([@$l, $p], @r) : ()
}

#$v = '123';
#$v = '321';
$v = '5672391';
省6
61: 2019/08/03(土)16:01 ID:XF8eWPn5(1) AAS
>>48 Squeak/Pharo Smalltalk

| fn res |
fn := [:input |
(Array streamContents: [:ss |
input permutationsDo: [:perm | perm > input ifTrue: [ss nextPut: perm copy]]]
) ifEmpty: [input]
].

fn value: '123'. "=> #('132' '213' '231' '321' '312') "
fn value: '921'. "=> '921' "
{#ms -> [res := fn value: '5672391'] timeToRun. #size -> res size}. "=> {#ms->6 . #size->2438} "
62
(1): 2019/08/03(土)19:53 ID:0ts56itm(2/2) AAS
>>48だけど、>>56の要件を見落としていたので入れてみたよ。
外部リンク:ideone.com
C++。
65: 2019/08/04(日)08:30 ID:FnmDNXLj(1) AAS
>>48
@Mathematica

rebuildLargerN[n_]:=n//
  IntegerDigits//
  Permutations//
  Map[FromDigits,#]&//
  Select[#,#>n&]&//
  If[#!={},#,{n}]&;

In[1] := rebuildLargerN[123]
Out[1] = {132, 213, 231, 312, 321}
省2
69: 2019/08/05(月)21:32 ID:OFOHGnJp(1) AAS
>>48
外部リンク:ideone.com
C++。暇だったので、文字列版作った。
でかい数のデバッグが大変だから手抜きだ。
ご査収ください。。。
70
(1): 2019/08/05(月)22:51 ID:AzW+f4x5(1) AAS
>>48 C++
外部リンク:ideone.com
>>64で説明したかった内容をコードにしてみた

なお、pythonとc++のpermutationは、同じ値が含まれる時の動作が異なる
外部リンク:stackoverflow.com
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.060s