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

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
91
(14): 2019/08/10(土)22:54 ID:wV6Kn1Zu(1) AAS
お題:
与えられた数列の要素の中で他と被っていない最小のものを求めよ
被っていない要素が存在しないときは-1を出力すること

例:
1,1,1,1,2,2,2,3,3,4 -> 4
1,2,3,4,5,5,4,3,2,1 -> -1
3,1,4,1,5,9,2,6,5,3,5 -> 2
92
(1): 2019/08/11(日)00:46 ID:In4DYV8Y(1/2) AAS
>>91 Perl5

use feature say;
use List::Util min;
for ([1,1,1,1,2,2,2,3,3,4], [1,2,3,4,5,5,4,3,2,1], [3,1,4,1,5,9,2,6,5,3,5]) {
 my %h;
 $h{$_}++ for @$_;
 @s = grep{1 == $h{$_}} keys %h;
 $" = ',';
 say "@$_ -> ", @s ? min @s : -1;
}
省5
93: 2019/08/11(日)01:44 ID:GTeyRs5o(1/2) AAS
>>91
perl5
外部リンク:ideone.com
94: 2019/08/11(日)06:08 ID:0wbGlMwh(1/2) AAS
>>91 Ruby

f = -> a {a.sort.group_by{|e| a.count(e)}[1]&.min || -1}

[
[1,1,1,1,2,2,2,3,3,4],
[1,2,3,4,5,5,4,3,2,1],
[3,1,4,1,5,9,2,6,5,3,5]
].each{|a| puts '%p => %s' % [a, f[a]]} # =>
[1, 1, 1, 1, 2, 2, 2, 3, 3, 4] => 4
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1] => -1
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] => 2
96: 2019/08/11(日)12:01 ID:tGfhCIDM(1) AAS
>>91 ruby
[ [1,1,1,1,2,2,2,3,3,4], [1,2,3,4,5,5,4,3,2,1], [3,1,4,1,5,9,2,6,5,3,5] ].each{|ar|
print ar.join(','), " -> "
while (m = ar.min) && ar.count( m ) != 1
ar.delete( m )
end
puts m || -1
}

1,1,1,1,2,2,2,3,3,4 -> 4
1,2,3,4,5,5,4,3,2,1 -> -1
省1
97
(1): 2019/08/11(日)13:17 ID:In4DYV8Y(2/2) AAS
>>91 Perl5 >>92 よりもう少しシンプルに

use List::Util min;
for ('1,1,1,1,2,2,2,3,3,4', '1,2,3,4,5,5,4,3,2,1', '3,1,4,1,5,9,2,6,5,3,5') {
 my %h;
 $h{$_}++ for split ',';
 $s = min grep{1 == $h{$_}} keys %h;
 $s //= -1;
 print "$_ -> $s\n";
}

実行結果
省4
100: 2019/08/11(日)16:59 ID:z7uw92+V(1/6) AAS
>>91
外部リンク:ideone.com
C++。一応例題は解けたが妖しい処理になった。
101: 2019/08/11(日)17:06 ID:z7uw92+V(2/6) AAS
>>91
外部リンク:ideone.com
C++。これでどうじゃ。
バケットソートでいいじゃないか。プンプン。
112: 2019/08/12(月)00:58 ID:DPPVhuFK(1) AAS
>>91 Pharo/Squeak Smalltalk

| fn |
fn := [:arr | (arr asBag sortedElements detect: [:kv | kv value = 1] ifNone: [-1 -> 0]) key].

fn value: #(1 1 1 1 2 2 2 3 3 4). "=> 4 "
fn value: #(1 2 3 4 5 5 4 3 2 1). "=> -1 "
fn value: #(3 1 4 1 5 9 2 6 5 3 5). "=> 2 "
113: 2019/08/12(月)05:25 ID:+GFDKMmL(1) AAS
>>91
Kotlin
外部リンク:paiza.io
114: 2019/08/12(月)21:41 ID:qMi+e5AX(1) AAS
>>91 Perl5 >>97 もう少しスマートに

for ('1,1,1,1,2,2,2,3,3,4', '1,2,3,4,5,5,4,3,2,1', '3,1,4,1,5,9,2,6,5,3,5') {
 my %h;
 $h{$_}++ for eval;
 ($s) = sort grep{1 == $h{$_}} keys %h;
 $s //= -1;
 print "$_ -> $s\n";
}

実行結果
~ $ perl 15_91_3.pl
省3
115
(2): 2019/08/13(火)07:30 ID:kJJDzO2R(1) AAS
>>91
Ruby で

# 数字の配列の配列。改行は削除
nums = <<"EOT".lines( chomp: true ).map{ |str| str.split( "," ).map( &:to_i ) }
1,1,1,1,2,2,2,3,3,4
1,2,3,4,5,5,4,3,2,1
3,1,4,1,5,9,2,6,5,3,5
EOT

results = nums.each_with_object( [ ] ) do |ary, results|
uniq_ary = ary.uniq # 重複排除
省10
116
(1): 2019/08/14(水)01:39 ID:G04CimIq(1) AAS
>>91
VB
外部リンク:paiza.io
118
(1): 115 2019/08/14(水)03:01 ID:ms62dfnn(1) AAS
>>91
Ruby で、>>115 を修正した

# 数字の配列の配列。改行は削除
nums = <<"EOT".lines( chomp: true ).map{ |str| str.split( "," ).map( &:to_i ) }
1,1,1,1,2,2,2,3,3,4
1,2,3,4,5,5,4,3,2,1
3,1,4,1,5,9,2,6,5,3,5
EOT

def resolve( ary )
# 数字の出現回数を数える。Hash の初期値は、0
省9
239: 2019/08/30(金)18:36 ID:9N6Bd3Tw(1) AAS
>>91
Haskell

main = mapM_ (print.only)
[
[1,1,1,1,2,2,2,3,3,4],
[1,2,3,4,5,5,4,3,2,1],
[3,1,4,1,5,9,2,6,5,3,5]
]

only ns = f [xs | xs <- (group.sort) ns, length xs == 1]
where
省4
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.054s