プログラミングのお題スレ Part22 (862レス)
前次1-
抽出解除 レス栞

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
561
(15): デフォルトの名無しさん [] 02/11(火)10:54 ID:E5oVpL7o(1/5)
お題
数列が入力されます
ニ番目に小さい数を出力してください

入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7
出力:2
563: 9 [sage] 02/11(火)14:53 ID:mMj2PIa8(1)
>>561 Perl5

$h{$_} = $_ for 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
@s = sort keys %h;
print "$s[1]\n";

実行結果
~ $ perl 22_561_second.pl
2

Perl5.26以降に付属のList::Utilにはuniq関数があるのでそれを使えば:

use List::Util qw(uniq);
@s = uniq sort 4, 5, 1, 7, 1, 2, 8, 9, 2, 7;
print "$s[1]\n";
565
(1): デフォルトの名無しさん [sage] 02/11(火)16:37 ID:WPoAkGuN(1)
>>561 ruby
https://ideone.com/OI7hWs

>>561 octave
https://ideone.com/36aKUO

>>561 c
https://ideone.com/eDmlMM
566: デフォルトの名無しさん [sage] 02/11(火)16:40 ID:gFwXvlnz(1)
>>561
#!ruby
puts $stdin.gets.chomp.split(",").map{|e| e.to_i}.uniq.sort[1]
568
(1): デフォルトの名無しさん [sage] 02/11(火)17:48 ID:7RexIvi8(2/3)
>>561 lisp
https://ideone.com/g6m1EK
570
(2): デフォルトの名無しさん [] 02/11(火)20:45 ID:hMHygfcC(1)
>>561
R
https://ideone.com/3beF1j

C++
https://ideone.com/A8hp2f

それぞれ3通りの方法で、大きなデータでの実行時間を比較
572: 565 [sage] 02/11(火)23:28 ID:qmej6t15(1)
>>561 ocaml
https://ideone.com/aV59Yd

>>561 java
https://ideone.com/PdgusX
591: デフォルトの名無しさん [sage] 02/12(水)19:12 ID:FZJ50oR3(1)
>>561 lisp (sbcl)
https://ideone.com/Bct7bC

>>561 lisp (clisp)
https://ideone.com/yqfmzh

clispだと何故かsort版の方が速い
592: デフォルトの名無しさん [sage] 02/12(水)20:45 ID:JML0DDov(1)
>>561 ruby
https://ideone.com/svMSSw

>>561 sqlite
https://ideone.com/W02Q5r
593
(2): デフォルトの名無しさん [] 02/12(水)22:44 ID:Qtl/TEf6(2/2)
>>561 571
>>570のC++のf3をint型の最大値を含むデータにも対応させた。

C#にはint?型があるのですっきり書けるが、
https://ideone.com/oRhDL1

C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。
https://ideone.com/xYnTSD
(該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては
こだわらないものとする)
601: デフォルトの名無しさん [sage] 02/13(木)20:45 ID:KiG3F5Wd(1)
>>561 c
https://ideone.com/ZyWoVM

>>594 ruby
https://ideone.com/gp9Fvp
604: デフォルトの名無しさん [sage] 02/13(木)23:47 ID:bC7pFAVH(2/2)
>>561 Rust

fn second_smallest<T: Copy + Ord>(input: &[T]) -> Option<T> {
use std::cmp::Ordering::{Equal, Greater, Less};
input
.iter()
.copied()
.fold(None, |state, t| match state {
Some((_t0, Some(t1))) if t >= t1 => state,
Some((t0, _)) => match Ord::cmp(&t, &t0) {
Less => Some((t, Some(t0))),
Equal => state,
Greater => Some((t0, Some(t))),
},
None => Some((t, None)),
})
.and_then(|(_t0, t1option)| t1option)
}

fn main() {
assert_eq!(second_smallest(&[4, 5, 1, 7, 1, 2, 8, 9, 2, 7, 1]), Some(2));
assert_eq!(second_smallest(&[1, 1, 1]), None);
assert_eq!(second_smallest(&[] as &[i32]), None);
}
621
(3): デフォルトの名無しさん [] 02/15(土)21:06 ID:rssRTGdz(3/9)
>>561
C++
https://ideone.com/bQBKIM
C#のヌル許容型と同じ挙動のnullable型を自作し、>>593のC#のmin2関数をジェネリック化、
ポインタ参照化して移植した。

https://ideone.com/p2LNC9
593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と
違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。

──
¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
832
(1): デフォルトの名無しさん [sage] 09/06(土)23:05 ID:Z/aFZPi6(1)
>>561 scheme (chicken 4.13)
https://ideone.com/lCgs9s
833
(1): 832 [sage] 09/07(日)12:29 ID:O1zDlKW9(1/2)
>>561 scheme (chicken 4.13)
https://ideone.com/8VZv71
・m1m2を不必要にリストにしてたのを廃止
834: 833 [sage] 09/07(日)14:22 ID:O1zDlKW9(2/2)
>>561 scheme (chicken 4.13)
https://ideone.com/EsJWtG
・letを自然な位置に移動
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.419s