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

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
206
(23): 2024/02/02(金)06:41 ID:CC6U77IS(1) AAS
お題
入力データをグループ分けして出力せよ

入力データの、= の左右は同じグループである。
出力する順番は、入力データの出現順とする

UnionFind を使えば良いかも

入力データ
["a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2",
省10
207
(1): 2024/02/02(金)10:50 ID:fEMhv+T7(1/2) AAS
AA省
209: 2024/02/02(金)22:48 ID:UezRkqGy(1/4) AAS
>>206 ruby
外部リンク:ideone.com
f = -> a {
w = a.map {|s| s.split('=')}.flatten.uniq.map.with_index.to_h
a.each_with_object([]) {|s, acc|
x, xa, y, ya = s.split('=').map {|k| [k, acc.find {|b| b.include? k}]}.flatten(1)
if xa && ya then xa.concat (acc.delete ya) << x << y
省6
210: 2024/02/02(金)22:51 ID:UezRkqGy(2/4) AAS
>>206 rust
外部リンク:ideone.com
fn f<'a>(a: &[&'a str]) -> Vec<Vec<&'a str>> { // '
let h = a.iter().map(|&s| s.split('=')).flatten().rev().enumerate().map(|(p, s)| (s, p)).collect::<HashMap<_, _>>();
let mut acc = Vec::<Vec<&str>>::new();
for xy in a.iter().map(|s| s.split('=').collect::<Vec<_>>()) {
match (acc.iter().position(|b| b.contains(&xy[0])), acc.iter().position(|b| b.contains(&xy[1]))) {
省18
211
(1): 2024/02/02(金)23:24 ID:UezRkqGy(3/4) AAS
>>206 ruby
外部リンク:ideone.com
・若干の修正
f = -> a {
w = a.map {|s| s.split('=')}.flatten.uniq.map.with_index.to_h
a.each_with_object([]) {|s, acc|
x, xa, y, ya = s.split('=').map {|k| [k, acc.find {|b| b.include? k}]}.flatten(1)
省7
212: 2024/02/02(金)23:24 ID:UezRkqGy(4/4) AAS
>>206 rust
外部リンク:ideone.com
・若干の修正
fn f<'a>(a: &[&'a str]) -> Vec<Vec<&'a str>> { // '
let h = a.iter().map(|&s| s.split('=')).flatten().rev().enumerate().map(|(p, s)| (s, p)).collect::<HashMap<_, _>>();
let mut acc = Vec::<Vec<&str>>::new();
for xy in a.iter().map(|s| s.split('=').collect::<Vec<_>>()) {
省15
213
(1): 2024/02/02(金)23:58 ID:Uk0I9chw(1) AAS
>>206
R
外部リンク:ideone.com
214: 2024/02/03(土)02:58 ID:bEsWZIv5(1) AAS
>>206
Java
外部リンク:paiza.io
215
(1): 2024/02/03(土)10:26 ID:kmOXhk/V(1) AAS
>>206 >>213
Rでもっと短く書けた。
外部リンク:ideone.com
217: 9 2024/02/04(日)18:22 ID:jTY6zdRX(2/2) AAS
>>208 宛てじゃなかった
>>206 の回答だったわ… orz
218
(2): 2024/02/04(日)18:32 ID:fS5H2fbQ(1/2) AAS
AA省
220: 2024/02/04(日)19:43 ID:NiYs7EK6(1) AAS
>>206
C++
2chスレ:tech
完全にやっつけ仕事、いろいろ課題がありますね
221
(1): 211 2024/02/04(日)23:55 ID:ytAuzkvH(1) AAS
>>206 ruby
外部リンク:ideone.com
>>211から若干のアレンジ
・同一グループの収集にSortedSetを使用
222: 17 2024/02/05(月)02:54 ID:8tY/Vubv(1) AAS
>>206
Kotlin

入力データを標準入力から入力したり、クラス作ってその中でまとめる等、色々やって長くなった。

外部リンク:paiza.io
223
(2): 221 2024/02/05(月)20:08 ID:tt/WRhkt(1/2) AAS
>>206 ruby
外部リンク:ideone.com
>>221から若干のアレンジ
・SortedSet単位でのみいじるようにした
f = -> a {
g = -> a {a.combination(2) {|x, y| break g.(a.tap {x.merge y; a.delete y}) if x.intersect? y}}
h = a.map {|s| s.split('=')}.flatten.uniq.map.with_index.to_h
省3
224
(2): 2024/02/05(月)23:26 ID:YjqgZClx(1) AAS
>>206
>>218-219をC#化
外部リンク:ideone.com
225
(1): 223 2024/02/05(月)23:51 ID:tt/WRhkt(2/2) AAS
>>206 rust
外部リンク:ideone.com
>>223の移植
・色々迷いアリ
 .map(|k| *h.get(k).unwrap())のところは当初
 .map(|k| h.get(k).map(|&i| i)).flatten()などとしていたが
 正解がわからないので迷った挙げ句に短く書けるほうを採用
省1
226
(1): 225 2024/02/06(火)22:07 ID:6T/Xuns0(1) AAS
>>206 rust
外部リンク:ideone.com
>>225から若干の修正
・不必要なループ回数を訂正
・二重forを一重に(でもかえって煩雑に)
・まだまだ迷いアリ
 .map(|k| *h.get(k).unwrap())は結局
省6
227
(2): 2024/02/06(火)22:17 ID:ICpsP2hv(1) AAS
>>206
C#で>>224とは別の解法
外部リンク:ideone.com
228: 2024/02/09(金)20:11 ID:xlZlW34G(1) AAS
>>206
C#でHashSet型を使用。実効速度は>>224>>227より遅い。
外部リンク:ideone.com
230
(1): 2024/02/10(土)22:10 ID:HaBtyH/G(1) AAS
>>206
>>227をC++に移植
外部リンク:ideone.com
231: 2024/02/11(日)15:34 ID:3wEOIMb0(1) AAS
>>206 octave
外部リンク:ideone.com

>>206 octave
外部リンク:ideone.com
232: 2024/02/11(日)20:38 ID:v64KP9lJ(1) AAS
>>206
>>230をDで書くと
外部リンク:ideone.com
になるが、switch case 0, 1, 2の場合も3の場合と同じ処理にすると、効率は落ちるもののかなり短くできる。
外部リンク:ideone.com
233: 223 2024/02/12(月)23:45 ID:ix8w7wd+(1) AAS
>>206 octave
外部リンク:ideone.com
・組み合わせつくって集合のペアごとに調べることをやめた
・集合間で重複する要素に着目して集合を減らすようにした

>>223
g.(a).map {|set| set.map &h.invert.method(:[])}じゃなくて単に
g.(a).map {|set| h.keys.values_at *set}で良かった
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.033s