1 名前:デフォルトの名無しさん [2023/08/03(木) 13:52:13.20 ID:/xW45k0z.net] プログラミングのお題スレです。 【出題と回答例】 1 名前:デフォルトの名無しさん お題:お題本文 2 名前:デフォルトの名無しさん >>1 使用言語 回答本文 結果がある場合はそれも 【ソースコードが長くなったら】 (オンラインでコードを実行できる) https://ideone.com/ codepad.org/ compileonline.com/ rextester.com/runcode https://runnable.com/ https://code.hackerearth.com/ melpon.org/wandbox https://paiza.io/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part21 https://mevius.5ch.net/test/read.cgi/tech/1668333636/
2 名前:デフォルトの名無しさん [2023/08/03(木) 14:04:23.10 ID:Lr04Zjag.net] >>1 O2
3 名前:デフォルトの名無しさん [2023/08/06(日) 12:21:14.08 ID:/9zIb/V0.net] お題 1行につき一つの文章が入力されます アルファベット26文字がすべて含まれている文章をフィルタリングしてください 大文字小文字は区別しません そのうちもっとも短い文章を出力してください 入力 The quick brown fox jumps over a lazy dog. The jay, pig, fox, zebra and my wolves quack! Pack my box with seven dozen liquor jugs. The horse, pig, fox, zebra and my wolves quack! Jackdaws love my small sphinx of quartz. Jackdaws love my big sphinx of quartz. The quick brown fox jumps over a lazy cat. Pack my box with five dozen liquor jugs. 出力 Jackdaws love my big sphinx of quartz.
4 名前:デフォルトの名無しさん [2023/08/06(日) 17:47:37.64 ID:RhhSFLLO.net] >>3 Kotlin https://paiza.io/projects/cmJpXwaAhFH6jYozb0bb2g
5 名前:デフォルトの名無しさん [2023/08/06(日) 18:08:09.04 ID:RhhSFLLO.net] >>3 C https://paiza.io/projects/McLPuKlM4c-1C9EgarDGjw
6 名前:デフォルトの名無しさん mailto:sage [2023/08/06(日) 19:07:03.27 ID:Md+pNxjw.net] use std::io::{self, BufRead, BufReader}; const FULL_BITS: u32 = (1 << 26) - 1; fn main() { let mut shortest: Option<String> = None; for line in BufReader::new(io::stdin()).lines() { let line = line.unwrap(); let mut bits = 0; for b in line.as_bytes() { let index = match b { b'A'..=b'Z' => b - b'A', b'a'..=b'z' => b - b'a', _ => continue, }; bits |= 1 << index; } if bits != FULL_BITS { continue; } if let Some(ref shortest) = shortest { if shortest.len() < line.len() { continue; } } shortest = Some(line); } if let Some(shortest) = shortest { println!("{shortest}"); } else { eprintln!("ERROR: no matched lines"); } }
7 名前:デフォルトの名無しさん [2023/08/06(日) 20:04:54.35 ID:pJXl8PQk.net] >>3 R https://ideone.com/ZdKsPa
8 名前:デフォルトの名無しさん [2023/08/07(月) 01:25:47.55 ID:dolrRGoi.net] >>6 それなんて言語?
9 名前:9 mailto:sage [2023/08/07(月) 01:46:18.23 ID:PMO8D1QO.net] >>3 Perl5 for (<DATA>) { my %h = map{$_ => 1} grep{/[a-z]/i} split ''; push @a, $_ if 26 == keys %h; } @s = sort{length($a) <=> length($b)} @a; print $s[0]; __DATA__ The quick brown fox jumps over a lazy dog. The jay, pig, fox, zebra and my wolves quack! Pack my box with seven dozen liquor jugs. The horse, pig, fox, zebra and my wolves quack! Jackdaws love my small sphinx of quartz. Jackdaws love my big sphinx of quartz. The quick brown fox jumps over a lazy cat. Pack my box with five dozen liquor jugs. ※ 見易くするためインデントを全角スペースに置換してあります。 実行結果: $ perl 22_3_az26.pl Jackdaws love my big sphinx of quartz.
10 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 01:57:03.56 ID:PMO8D1QO.net] >>9 ゴメン、2行目に間違いあり…orz my %h = map{$_ => 1} grep{/[a-z]/i} split ''; ↓正しくは my %h = map{$_ => 1} map{lc} grep{/[a-z]/i} split ''; 実行結果は今回のテストデータだとたまたま同じ結果になる。
11 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 09:39:33.60 ID:3KYy8N/l.net] >>8 Rustでは?
12 名前:デフォルトの名無しさん [2023/08/07(月) 19:28:19.42 ID:dolrRGoi.net] >>11 言われてみればRustに見えるな。 Rustは趣味で学習始めたばかりでよく分からなかった。
13 名前:デフォルトの名無しさん mailto:sage [2023/08/07(月) 20:51:54.50 ID:ZWV0+Q1Z.net] >>3 Haskell https://ideone.com/ACKqL8
14 名前:デフォルトの名無しさん [2023/08/08(火) 16:30:48.37 ID:mHXT/QMM.net] >>10 2行目はもっと簡潔に書ける my %h = map{$_ => 1} map{lc} grep{/[a-z]/i} split ''; ↓ my %h = map{lc $_ => 1} /([A-Za-z])/g; 結局、これでよい筈 for (<DATA>) { my %h = map{lc $_ => 1} /([A-Za-z])/g; push @a, $_ if 26 == keys %h; } @s = sort{length $a <=> length $b} @a; print $s[0]; __DATA__ … (ry
15 名前:デフォルトの名無しさん mailto:sage [2023/08/08(火) 19:36:27.56 ID:ODiXw46s.net] >>3 Rust use std::collections::HashSet; use std::io::{self, BufRead, BufReader}; fn main() { match BufReader::new(io::stdin()) .lines() .map(Result::unwrap) .filter(|line| { line.bytes() .filter(|b| matches!(b, b'A'..=b'Z'| b'a'..=b'z')) .collect::<HashSet<_>>() .len() .eq(&26) }) .min_by_key(String::len) { Some(shortest) => println!("{shortest}"), None => eprintln!("ERROR: no matched lines"), } }
16 名前:デフォルトの名無しさん mailto:sage [2023/08/09(水) 12:27:32.68 ID:ZMLVZrF/.net] 無駄に比較回数が増えるsortを使っている>>13 と>>14 は不正解 単純にminが正解
17 名前:デフォルトの名無しさん [2023/08/10(木) 13:37:16.01 ID:YYBOmFjO.net] >>3 Perl https://paiza.io/projects/05DzwASHT6-4bVjpenNDBQ
18 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/10(木) 19:00:30.10 ID:kqXaMgBC.net] お題: ちょっとした画像処理。 赤い丸がいくつか描画された不透明な画像ファイル「input.png」を読み込んで、赤い丸を緑の丸に描き変えたものを画像ファイル「output.png」に保存するプログラム。 ここに「赤い」とは、HSV色空間において、色相が0度~60度か300度~360度の範囲にあり、彩度が30%以上で、明度が50%以上の色であると定義する。 「丸」とは、円形度が0.7~1.3の範囲の単一色の図形であると定義する。 「緑」とはRGBで#008000の色であると定義する。
19 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 19:03:42.87 ID:0ymjHRaX.net] 絶対自分でやる気ないお題出すな
20 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 19:07:41.57 ID:yqkCXlxz.net] >>6 >>15 同じ言語とは思えないほど違うな
21 名前:デフォルトの名無しさん mailto:sage [2023/08/10(木) 21:44:28.63 ID:4K08AJqU.net] >>16 このスレで正解とか不正解とか言ってる時点で不正解
22 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 00:03:07.62 ID:6txSsch+.net] >>16 head , sort で無駄ソートは起こらない minimumByと最大2倍程度の差しか発生しない https://hackage.haskell.org/package/base-4.18.0.0/docs/src/Data.OldList.html#sort
23 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 00:37:49.70 ID:NzWkf1P2.net] 今回のようなsortを一切必要としない問題で何度もsortを用いるプログラマーは劣等生
24 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 00:43:13.53 ID:0bfZQT9B.net] >>23 Haskellのhead . sortはソートしないってのに sortって書いてあるからソートすると思ってるんやろ?
25 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 01:09:02.59 ID:NzWkf1P2.net] sortを使うことを問題にしているのであって sortしていないなら問題ないだろう 個別の話などしていない そこまで言うならとHaskellのプログラム >>13 を見にいってみたが 入力文字列を各文字でソートして重複を取り除いてabcdefghijklmnopqrstuvwxyzと比較しているのか hasAllAlph = ( == [ 'a' .. 'z' ] ) . tail . nub . sort . map toLowOrSp . ( ' ' : )
26 名前:9 mailto:sage [2023/08/11(金) 02:38:50.64 ID:4P/NDj/+.net] スレが伸びているので何かと思えば、オレほか一部の回答者がsortを使ったのが そんなに気に入らなかったか、気に障ったか、 ざまぁみろw としか言いようがないが 後出しでケチつけてるのは出題者じゃないようだが そしたらsortも、そしてminもあえて使わないバージョン、 書き方はいろいろあると思うけど: >>3 Perl5 use List::Util 'first'; for (<DATA>) { my %h = map{lc $_ => 1} /([A-Za-z])/g; $a[length $_] = $_ if 26 == keys %h; } print first{defined} @a; __DATA__ The quick brown fox jumps over a lazy dog. The jay, pig, fox, zebra and my wolves quack! Pack my box with seven dozen liquor jugs. The horse, pig, fox, zebra and my wolves quack! Jackdaws love my small sphinx of quartz. Jackdaws love my big sphinx of quartz. The quick brown fox jumps over a lazy cat. Pack my box with five dozen liquor jugs. 実行結果 ~ $ perl 22_3_az26_a.pl Jackdaws love my big sphinx of quartz.
27 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 02:52:08.14 ID:45O+1i6X.net] そう、haskellの評価戦略はcall by need (の一種) で必要に応じて展開される、head . sort では 「sortした後の最初の項」を求めているのでそれを出すための必要最小限の事しかしない 件のData.Listにおけるsortでは ①与えられた列を1回目のバスで広義単調増大列いくつかに分割する、コストはO(n) ②できた列を2つずつマージして広義単調増大列の個数を半分にする、全部やればコストはO(n) ③②を列の数が1になるまで繰り返す、コストはO(log(n)) で全部の処理を要求してもO(nlog(n))でいわゆるクイックソートと同じコスト しかしheadがこのsortの処理を呼ぶ時にはmergeする2列の中の最小値だけ残されてあとは捨てられる、なので最初の①の結果が最悪のケース、長さ1の列がn個できた場合でもmerge処理は最大n-1回だけ行われて終了する、すなわち事実上minimumと一緒 じゃあminimumBy ( on length )でいいじゃんという話なのだけど「遅延評価を利用すればほとんどコストレスでminimumByと同様の事ができる」というのがHaskellの面白いところ なのでそっちを採用 これは遅延評価の文化に慣れてないと中々わからない
28 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 07:58:17.97 ID:vOTsx3Ge.net] >>25 そちらのsortはO(nlog(n))なのでダメですね
29 名前:9 mailto:sage [2023/08/11(金) 08:37:47.88 ID:4P/NDj/+.net] O(nlog(n))がダメかどうかは、データの規模および実行時間による
30 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 09:12:59.75 ID:BG0MJIEb.net] あかん、通じてないね 時間の無駄やった
31 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 09:22:47.99 ID:HI+ykM5H.net] Perlな人の短く書ければよいだけで計算量とか知らないだろうから仕方ないと思うよ しかしHaskellな人がsortを何箇所も使っているのは驚いた head . sort以外のsortはあかんね
32 名前:デフォルトの名無しさん [2023/08/11(金) 09:27:54.00 ID:vdwKG93K.net] お前ら賢いんだから自分も疑え
33 名前:デフォルトの名無しさん [2023/08/11(金) 14:03:26.02 ID:v1edpQDw.net] doubt
34 名前:17 [2023/08/11(金) 16:34:17.24 ID:j3k4ZyED.net] 俺は Perl で書いたやつも sort 使わず >>4 ,5 と同じやり方にした。 一番短い文を最後に出すだけで良いなら sort やる必要ないよね。 何らかの制約があってそうしなければ出来ないとか、使っても思い切り最適化されて最終的に同じ動きになるというなら使うかも知れないが。
35 名前:デフォルトの名無しさん [2023/08/11(金) 17:25:08.27 ID:I5t9Gg6x.net] 遅延評価は馴染みない人にはわからんからしょうがない
36 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 17:41:01.68 ID:Nevl7mZs.net] Haskell版で問題にされてるのは 遅延評価でO(n)となるhead $ sort部分ではなく O(nlog(n))のsortが別途あること
37 名前:デフォルトの名無しさん mailto:sage [2023/08/11(金) 22:35:55.39 ID:H5Y2+fuz.net] >>35 遅延評価は色んな言語にあるよ その対象や動作は各言語や各機能によって様々で PromiseやFutureのような非同期に遅延評価されるものもあるけど 今回のお題だとC#のLINQメソッドチェーンによる遅延評価やRubyのlazy指定などが有効だね >>15 のRustのイテレータメソッドチェーンも遅延評価されるから何万行の入力が来てもメモリを消費せずに済むね
38 名前:デフォルトの名無しさん [2023/08/14(月) 19:55:41.01 ID:KSpEuPpD.net] マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ マサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲマサナヲ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ ヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマヲナサマ
39 名前:デフォルトの名無しさん [2023/08/14(月) 20:16:21.84 ID:29MXQOm3.net] >>38 Java public class Main { public static void main(String[] args) { System.out.println( "マサナヲ".repeat(8).concat("\n").repeat(4).concat("\n") .concat("ヲナサマ".repeat(8).concat("\n").repeat(4).concat("\n")) .repeat(2)); } }
40 名前:デフォルトの名無しさん [2023/08/15(火) 16:29:06.61 ID:eu+UdA0l.net] このサイトより agora.ex.nii.ac.jp/digital-typhoon/ 2023/8/1/0/0 から 2023/8/16/23/0 まで 表示日時を変更しながら1時間毎の静止気象衛星画像(地球)を収集し (衛星画像 は 可視光 2048x2048 程度 512x512 等も可 起動オプションで指定出来るとボーナス特典) gif animation または png animation ファイルに変換せよ 例 8/14/0/0 agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081315.globe.1.jpg 8/15/0/0 agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081415.globe.1.jpg 8/15/15/0 agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081505.globe.1.jpg
41 名前:デフォルトの名無しさん mailto:sage [2023/08/15(火) 23:36:55.46 ID:GhE5EH0z.net] 蟻人間がコテハン外したのかな
42 名前:デフォルトの名無しさん mailto:sage [2023/08/16(水) 10:34:21.25 ID:tgyEZLGb.net] 可視光より赤外線の方が雲はきれいだけど 可視光は影が毎日くるくる回るからこっちはこっちで面白いね
43 名前:9 mailto:sage [2023/08/16(水) 13:32:44.58 ID:vjpqg3x7.net] >>40 bash、curl および GraphicsMagick の convert コマンドを使用。動作確認したOSはUbuntu 20.04LTS。数百枚のjpegからgifへのconvertには多少時間がかかります。 オプション -h または --highres を指定すると 2048x2048、オプション無しあるいは -l または --lowreso を指定すると 512x512、なおボーナスはスイス銀行の秘密口座に。 ※見易くするためインデントは全角スペースに置換してあります。8月16日23時まで取得するようにしているがまだ無い将来の画像は含まない。 res='512x512' # default OPT=`getopt -o hl -l highreso,lowreso -- "$@"` eval set -- "$OPT" while true; do case "$1" in -h | --highreso) res='2048x2048' shift ;; -l | --lowreso) res='512x512' shift ;; --) shift break ;; esac done dir=$(mktemp -d TmpDir.XXXXXX) for d in $(seq -w 01 16); do for h in $(seq -w 0 23); do dh="$d$h" file="HMW92308${dh}.globe.1.jpg" url="agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}" echo $url; curl -f -s -R -o "$dir/$file" $url done done #set -x time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif ls -o TyphoonAime${res}.gif
44 名前:9 mailto:sage [2023/08/16(水) 13:42:58.39 ID:vjpqg3x7.net] >>43 typo orz -h または --highres ↓ -h または --highreso
45 名前:9 mailto:sage [2023/08/16(水) 19:12:35.95 ID:y9YJABkH.net] >>43 これだと、scriptを実行するたびに全てのjpegファイルをtemporaryディレクトリにdownloadするためサーバの負荷の面で行儀がよくないので、 ディレクリは TyphoonJpegDir512x512 または TyphoonJpegDir2048x2048 で固定とし、未取得のjpegがあればdownloadするように直すわ。 res='512x512' # default OPT=`getopt -o hl -l highreso,lowreso -- "$@"` eval set -- "$OPT" while true; do case "$1" in -h | --highreso) res='2048x2048' shift ;; -l | --lowreso) res='512x512' shift ;; --) shift break ;; esac done dir=./TyphoonJpegDir${res} for d in $(seq -w 01 16); do for h in $(seq -w 0 23); do file="HMW92308${d}${h}.globe.1.jpg" url="agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/${res}/${file}" [ -f $dir/$file ] || { echo $url; curl -f -s -R -o "$dir/$file" $url; } done done #set -x time convert $(ls $dir/*.jpg) TyphoonAime${res}.gif ls -o TyphoonAime${res}.gif ※見やすくするためインデントは全角スペースに置換してあります。
46 名前:17 [2023/08/17(木) 00:52:29.22 ID:YACPkQ1f.net] >>40 Kotlin ただし paiza.io のサイトの都合で大きい画像の出力がうまく行かないのと時間が掛かるとタイムアウトしてしまうので、 それらを避けるために 2023/08/15~2023/08/16 の8時間間隔(0, 8, 16 時)の画像を収集して 120x120 の大きさに 変更してアニメーションGIFにして出力するようにした。その時に HTML で <img src="data:image/gif;base64,..."> で埋め込んでいるのでHTMLモードで表示させるとブラウザに画像が表示される。スマホでも見てみたがちゃんと 動いている画像で表示された。 https://paiza.io/projects/w-fOIVbPGuSPh1_DJTSatA
47 名前:デフォルトの名無しさん mailto:sage [2023/08/18(金) 10:27:20.40 ID:Rd3M1fjh.net] 可視光は globe.0 だな しかも夜のデータ無いやん
48 名前:デフォルトの名無しさん mailto:sage [2023/08/18(金) 11:07:33.13 ID:wx26N4AH.net] >>40 UTC で答えてる人が多いみたいだけど >例 >8/14/0/0 agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081315.globe.1.jpg JST ですよね
49 名前:デフォルトの名無しさん [2023/08/18(金) 17:11:49.56 ID:TT1gR8pP.net] 過去未来100年(幅201年)の範囲で 2023年とカレンダーの曜日が一致する年を全て出力せよ また任意の指定年の前後100年で同じ動作をする(閏年も考慮)ように改変せよ
50 名前:デフォルトの名無しさん [2023/08/18(金) 20:03:41.92 ID:Bxqhk529.net] >>49 R https://ideone.com/keSaYi
51 名前:デフォルトの名無しさん [2023/08/19(土) 00:14:13.53 ID:Za4r2XUP.net] >>50 曜日をわざわざ求める必要はなかったな。 R https://ideone.com/1Zh5wd
52 名前:デフォルトの名無しさん mailto:sage [2023/08/19(土) 02:12:13.34 ID:7swIlm9f.net] 6,11,11,6,11,11,・・・なんでこうなうの?
53 名前:デフォルトの名無しさん mailto:sage [2023/08/19(土) 10:40:53.03 ID:7swIlm9f.net] >>48 JSTだとしたら >8/15/15/0 agora.ex.nii.ac.jp/digital-typhoon/globe/color/2023/512x512/HMW923081505.globe.1.jpg は 8/15/14/0 じゃないかな 夏時間?
54 名前:む げ [2023/08/20(日) 17:53:44.63 ID:yELvYXkhV] 初カキコ失礼します あのさ夏休みの宿題学びポケットとかいうWEB問題サイトに追われてるんだけど 「あと夏休み期間2か」それの自動回答ロボットを作ってくれない 作ってくれたら命に代えても感謝するんだけどなーとか言ってる 冗談じゃなくてまじで追われていて学校退学になりそうだ方まじで助けで,、、、
55 名前:む げ [2023/08/20(日) 17:54:11.37 ID:yELvYXkhV] タスケテ>>>
56 名前:デフォルトの名無しさん [2023/08/20(日) 20:19:24.17 ID:T0IVLETo.net] >>52 365と366を7で割った余りは1と2なので、平年には翌年の元日の曜日が1つ進み、閏年には2つ進む。 100の倍数の年の例外を除けば、曜日の進みは1, 1, 1, 2, 1, 1, 1, 2, 1, 1, 1, 2, ...のように 1, 1, 1, 2というパターンの繰り返しになる。 パターン1, 1, 1, 2のうちの最初の1の年から始めて、何年後に曜日の進みの累積が7の倍数かつ その年が閏年でなくなるかを順々に求めれば6, 11, 11年後となり、ここでパターン1, 1, 1, 2の うちの最初の1の年に戻るので、以降は6, 11, 11年後というパターンの繰り返しになる。 ┌──────────┐ │ ↓ @@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷@@@❷ │ ↑ │ ↑ └─────┘ └──────────┘
57 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/20(日) 21:28:53.42 ID:KEiNPJgB.net] お題: お風呂の準備。 容積225Lの浴槽に適温39度のお湯200Lを用意したい。 次の2つのスイッチのON/OFFを切り替えてお湯を用意するプログラムを作れ。 スイッチ1: これをONにすると浴槽に水温20度の水を分速10Lで投入する。 スイッチ2: これをONにすると浴槽の水を800ワットの電熱線で加熱する。 ただし、浴槽に容積の1/2以上の水またはお湯が入っていないときは、空焚き防止のため、加熱しないものとする。 放熱は考慮しなくてもよい。 出力例) 時刻??: スイッチ1をONにしました。 時刻??: スイッチ2をONにしました。 時刻??: お風呂ができました。 時刻??: スイッチ1をOFFにしました。 時刻??: スイッチ2をOFFにしました。
58 名前:17 [2023/08/20(日) 22:57:39.22 ID:pbHEs6OP.net] >>49 Kotlin 折角なので Iterator で作った。(でも AbstractIterator クラス使ったので特に苦労はしていない) https://paiza.io/projects/v1X96MyvBFn0N4z9X-9gkw
59 名前:17 [2023/08/20(日) 23:07:16.25 ID:pbHEs6OP.net] >>57 800Wの電熱線で加熱するとどれだけの量の水がどのぐらいの時間で1度上がるか、など、基本的な事が分からない。
60 名前:デフォルトの名無しさん mailto:sage [2023/08/21(月) 05:17:48.42 ID:9NybdpKD.net] >>58 200年分のデータを配列を貯め込む>>51 の方法よりも そのようなメモリ消費を必要としないイテレータを作る案は好ましい方法ですね しかし-100や+100は今回たまたまのマジックナンバーに過ぎないですし 例えばお題が「指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ」もありえます したがって作成しておくべき汎用イテレータは指定した年から順方向に返すイテレータと逆方向に返すイテレータでしょう それがあれば今回のお題を含めた様々なバリエーションのお題に対応できると思います
61 名前:デフォルトの名無しさん [2023/08/21(月) 10:53:53.65 ID:qNeGin4f.net] >>60 へのお題 指定した年とその後(またはそれ以前に)同じカレンダーになる年を100個求めよ
62 名前:デフォルトの名無しさん mailto:sage [2023/08/21(月) 12:55:28.09 ID:tqXtwiP4.net] // Rust 双方向イテレータ版 struct SameCalendarYear(u32); impl Iterator for SameCalendarYear { type Item = u32; fn next(&mut self) -> Option<u32> { common_next(self.0, false).map(|year| { self.0 = year; year }) } } impl DoubleEndedIterator for SameCalendarYear { fn next_back(&mut self) -> Option<u32> { common_next(self.0, true).map(|year| { self.0 = year; year }) } } fn common_next(start_year: u32, is_before: bool) -> Option<u32> { let mut day = 0; let mut year = start_year; while year > 0 { if is_before { year -= 1; } day += 1 + leap(year); if day >= 7 { day -= 7; } if !is_before { year += 1; } if day == 0 && leap(year) == leap(start_year) { return Some(year); } } None } fn leap(year: u32) -> u32 { (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) as u32 }
63 名前:デフォルトの名無しさん mailto:sage [2023/08/21(月) 12:57:26.59 ID:tqXtwiP4.net] >>61 指定した年と同じカレンダーの年を前後 n 個表示 (長くなるので今回は10個だけ表示) fn main() { let n = 10; for year in [2000, 2023, 2024, 2025, 2100] { println!("{year}年より前: {:?}", SameCalendarYear(year).rev().take(n).collect::<Vec<_>>()); println!("{year}年より後: {:?}", SameCalendarYear(year).take(n).collect::<Vec<_>>()); } } このRust公式の実行環境で実行やコード編集ができます https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=5e5a518120f75351ca5ff5fdd0bf4d8c // 実行結果 2000年より前: [1972, 1944, 1916, 1876, 1848, 1820, 1780, 1752, 1724, 1684] 2000年より後: [2028, 2056, 2084, 2124, 2152, 2180, 2220, 2248, 2276, 2316] 2023年より前: [2017, 2006, 1995, 1989, 1978, 1967, 1961, 1950, 1939, 1933] 2023年より後: [2034, 2045, 2051, 2062, 2073, 2079, 2090, 2102, 2113, 2119] 2024年より前: [1996, 1968, 1940, 1912, 1872, 1844, 1816, 1776, 1748, 1720] 2024年より後: [2052, 2080, 2120, 2148, 2176, 2216, 2244, 2272, 2312, 2340] 2025年より前: [2014, 2003, 1997, 1986, 1975, 1969, 1958, 1947, 1941, 1930] 2025年より後: [2031, 2042, 2053, 2059, 2070, 2081, 2087, 2098, 2110, 2121] 2100年より前: [2094, 2083, 2077, 2066, 2055, 2049, 2038, 2027, 2021, 2010] 2100年より後: [2106, 2117, 2123, 2134, 2145, 2151, 2162, 2173, 2179, 2190]
64 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/21(月) 15:10:32.39 ID:GU1DZq8L.net] >>59 中学校の物理で習うはずなんだけどなあ。忘れたか。 https://chuugakurika.com/2017/10/24/post-155/
65 名前:デフォルトの名無しさん [2023/08/21(月) 22:02:18.08 ID:s7o0Gu1A.net] >>61 R https://ideone.com/1o1wp6
66 名前:デフォルトの名無しさん mailto:sage [2023/08/24(木) 05:04:40.60 ID:UkV1PQmo.net] お題:2Dゲームのスクロール処理 整数の二次元配列(高さ50, 横幅100)上にランダムに整数1〜9が200個配置される。 この配列を高さ20, 横幅40の矩形領域に切り取って表示したい。キーボードの入力(l, r, t, b)で矩形領域を移動させ切り取る領域を変化させよ。
67 名前:デフォルトの名無しさん [2023/08/24(木) 08:57:28.75 ID:a6n854uv.net] >>66 試しに自分で書いてどんなプログラムになるのか見せてくれ
68 名前:デフォルトの名無しさん [2023/08/24(木) 22:51:17.82 ID:hcnR5QOK.net] >>66 PowerShell (等幅フォント限定。最初は一番左上の領域が表示される。qキーで終了。Ubuntu版ではカーソルが消えない) $a = random (1..9999) -count 200 |% {$_ % 9 + 1} $b = random (0..4999) -count 200 $c = [char[][]](,(," " * 100) * 50) 0..199 |% {$c[[Math]::Floor($b[$_] / 100)][$b[$_] % 100] = [string]$a[$_]} $L = 0..49 |% {-join $c[$_]} $UI = $Host.UI.RawUI $p, $s = $UI.CursorPosition, $UI.CursorSize $p.y = [Math]::Min($p.y, $UI.BufferSize.Height - 23) $x = $y = 0 $border = "+" + "-" * 40 + "+" while ($true) { try {$UI.CursorSize = 0} catch {} $UI.CursorPosition = $p $border 0..19 |% {"|" + $L[$y + $_].SubString($x, 40) + "|"} $border switch ($UI.ReadKey(6).Character) { "l" {if ($x -gt +0) {$x--}} "r" {if ($x -lt 60) {$x++}} "t" {if ($y -gt +0) {$y--}} "b" {if ($y -lt 30) {$y++}} "q" {try {$UI.CursorSize = $s} catch {} return} } }
69 名前:デフォルトの名無しさん [2023/08/25(金) 00:19:01.99 ID:P3glK3pZ.net] お題:ウィンドウのアラインメント処理 マウスの座標の変化からウインドウを描画すべき座標を計算したい。 ただし変形する形は縦横4方向、斜め4方向の8パターンとし、寄せた方向に幅が1/2となること。
70 名前:デフォルトの名無しさん [2023/08/25(金) 14:02:15.09 ID:5+gJach+.net] >>66-67 OpenCVのROI便利だよな
71 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 14:14:02.40 ID:EQIr/PqP.net] 世界で最初の月曜日ってどうやって決まったの?
72 名前:17 [2023/08/26(土) 14:42:38.00 ID:Wr5tcJsi.net] 曜日はシュメール人が使い始めたらしいので、お近くのシュメール人に聞きください。
73 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 20:03:48.42 ID:LJcWLtrE.net] 文字列Sの中に含まれる回文をすべて列挙ってどうやったらいいですかね(*_*) aとかbみたいな一文字でも回文とみなしますです 文字列Sは1文字以上100文字以下で、半角英字であることがわかってます とんでもない計算量になる気がするのですが、鮮やかなやりかたってないものかと…トホ(ヽ´ω`)
74 名前:17 [2023/08/26(土) 22:26:37.90 ID:Wr5tcJsi.net] >>73 それって例えば "ABCBAXYZZYX" だったら "ABCBA" と "XYZZYX" が抜き出せれば良いの? 途中の "BCB", "C", "YZZY", "ZZ" も抜き出すの?
75 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/26(土) 23:04:31.69 ID:JYg5slq9.net] 回文の長さに制限があるから、回文の長さで場合分けすれば、全部列挙可能。
76 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 23:09:39.72 ID:jGmIYD91.net] >>74 途中のもぜんぶっす… 含まれる回文、ひとつのこらず出力です(;´∀`) たとえAとかBみたいな一文字でも回文と定義します なのでAとかXも抜き出します٩(′д‵)۶ で、一文字目にAがあって、5文字目にもAがあるじゃないですか?こういった場合は、どっちも出力しちゃって大丈夫です! 重複された出力が行われるのは問題ないんです! ただ、「過去にすでにその分の出力が行われていた場合、重複した出力を再度行わない」というやりかたでもし計算量が飛躍的に下がるということであれば、そのやりかたが知りたいというのもまああります(*_*; 重複する出力をするかしないか、それはどちらでもオケーです 全パターンチェックするようにループ回すならとりあえず理屈ではできると思うんですが、計算量がとんでもないことになりそうな感じで、ちょっとお手上げでした/(^o^)\
77 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 23:20:42.48 ID:jGmIYD91.net] たとえば文字列Sがabbbaだとすると、すくなくともa,b,bb,bbb.abbbaが最低一回は出力される必要があります できればaやbが複数回出力されず一回しか出力されないほうがいいですが、必須ではないです
78 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/26(土) 23:29:51.32 ID:JYg5slq9.net] >>73 C++ #include <stdio.h> bool is_kaibun(const char *str, size_t len) { for (size_t i = 0; i < len/2; i++) if (str[i] != str[len - i - 1]) return false; return true; } void detect_kaibun(const char *str, size_t len) { for (size_t klen = 1; klen <= len; klen++) { for (size_t i = 0; i < len - klen + 1; i++) if (is_kaibun(str + i, klen)) printf("%*s\n", (int)klen, str + i); } } int main(void) { detect_kaibun("ABCBCXC", 7); return 0; }
79 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/08/26(土) 23:37:32.47 ID:JYg5slq9.net] >>78 間違えた。 printf("%*s\n", (int)klen, str + i); を printf("%.*s\n", (int)klen, str + i); に訂正。
80 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 23:40:14.43 ID:jGmIYD91.net] >>79 ありがとうございます、ちょっとためしてみますm(_ _)m
81 名前:デフォルトの名無しさん mailto:sage [2023/08/26(土) 23:44:49.05 ID:M8vKemPr.net] 連続部分列 https://en.m.wikipedia.org/wiki/Longest_palindromic_substring 部分列 https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2895
82 名前:デフォルトの名無しさん mailto:sage [2023/08/27(日) 00:17:21.22 ID:3rRjeZjU.net] >>79 動いている様子を確認させていただきました!!ありがとうございました! 当チケットはこれにてクローズとさせていただきたいと思いますヽ(=´▽`=)ノ
83 名前:デフォルトの名無しさん mailto:sage [2023/08/27(日) 01:14:16.06 ID:xDzSjAxc.net] >>78 こうすると計算量を減少できる fn len_of_eq(s: &str, index: usize, even: usize) -> usize { let mut len = 0; for (p, q) in std::iter::zip(s[(index + even)..].chars(), s[0..=index].chars().rev()) { if p != q { break; } len += 1; } return len; } fn print_kaibun(s: &str) { for index in 0..s.len() { for even in 0..=1 { for len in 1..=len_of_eq(s, index, even) { let first = index + 1 - len; let last = index + len - 1 + even; println!("{first}~{last}: {}", &s[first..=last]); } } } } fn main() { print_kaibun("ABCBAXYZZYX"); }
84 名前:デフォルトの名無しさん mailto:sage [2023/08/27(日) 01:16:42.56 ID:xDzSjAxc.net] まずこの部分が最初のヒントで >>それって例えば "ABCBAXYZZYX" だったら "ABCBA" と "XYZZYX" が抜き出せれば良いの? >>途中の "BCB", "C", "YZZY", "ZZ" も抜き出すの? >途中のもぜんぶっす… 最も長いものを抜き出せばその一部分はその中に含まれている だから短いのが判明した時点で引き続き長いのも探索しないと多重に無駄に比較が行なわれてしまう もう一つのポイントは回文は対称系で長さ奇数と偶数の二種類があること 長さ奇数「DCBABCD」と長さ偶数「DCBAABCD」どちらの場合も 比較は対称点となるAからのみ出発して比較していけばよくて 順方向&逆方向へ最長分を比較していけば上述の無駄な比較を減らせる このような順番で見つかっていくことになる >>83 の実行結果 0~0: A 1~1: B 2~2: C 1~3: BCB 0~4: ABCBA 3~3: B 4~4: A 5~5: X 6~6: Y 7~7: Z 7~8: ZZ 6~9: YZZY 5~10: XYZZYX 8~8: Z 9~9: Y 10~10: X
85 名前:17 [2023/08/27(日) 05:51:19.72 ID:A+RJ0qtc.net] >>82 ここはお題スレなのでクローズはない。
86 名前:17 [2023/09/07(木) 20:20:41.05 ID:HlrfnodH.net] >>73 Kotlin https://paiza.io/projects/qh3bysWxeqAkDEImg1ZyPw
87 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 14:42:58.26 ID:I55f6i4N.net] お題 abc1.mp4 abc2.mp4 .. abc20.mp4があるとします これを名前順でソートできるようにするため abc001.mp4 abc002.mp4 ... abc020.mp4 とリネームしてください
88 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 18:43:20.77 ID:DIo9fsPi.net] コレでどーかぬ #!/bin/bash # ファイル名のプレフィックス prefix="abc" # ソート対象のファイルリストを取得 file_list=$(ls ${prefix}*.mp4 | sort) # ファイルを001、002、...の形式にリネーム counter=1 for file in $file_list; do new_name=$(printf "${prefix}%03d.mp4" $counter) mv "$file" "$new_name" counter=$((counter + 1)) done
89 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 18:50:38.69 ID:I55f6i4N.net] いいだしっぺということで作ってきたら既に投稿が printfするところは一緒ですね bash,勉強になります haskell import Text.Printf import System.IO import System.Directory import System.FilePath.Glob import Data.List import Control.Monad kaku = ".mp4" fn = "abc" main = do files <- glob (fn <> "*" <> kaku) zipWithM_ (\a b -> renameFile a b) files (map f files) where f l = let r1 = reverse $ takeWhile ((/=) '/') $ reverse l in let r2 = (r1 \\ fn) \\ kaku in fn <> printf "%03d" (read r2 :: Int) <> kaku
90 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 11:23:46.58 ID:R2SvRL0Z.net] お題:celeronで快適に動作するwebブラウザを作れ
91 名前:9 mailto:sage [2023/09/22(金) 16:53:16.55 ID:8M97O6g7.net] >>87 Perl5 rename "abc$_.mp4", sprintf 'abc%03d.mp4',$_ for 1..20; ※abc1.mp4 abc2.mp4 .. abc20.mp4 があるとしています。 また abc001.mp4 abc002.mp4 ... abc020.mp4 は既存かのチェックは省いています。
92 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 17:31:41.64 ID:fCKJ4NGF.net] すごい簡潔ですね!perlすごい これはワンライナーではないのでしょうか #!/usr/bin/perl .. としてperl rename.plを動かすと動きました ファイルはこれ(bash)で用意できます for i in {1..20}; do touch abc$i.mp4; done
93 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 20:45:10.11 ID:CSDqgjJn.net] tcsh のバヤイわこうかぬ foreach i (`seq 1 20`) # 1から20までの数値を生成 # ファイル名を生成し、touchコマンドでファイルを作成 set filename = "abc$i.mp4" touch $filename end
94 名前:17 [2023/09/24(日) 00:36:54.25 ID:FZ40Ia2p.net] >>87 Kotlin https://paiza.io/projects/GEok1uy5LzC9VB9ARGu4yg
95 名前:17 [2023/09/24(日) 00:44:46.90 ID:FZ40Ia2p.net] 1~20を決め打ちして良いならもっと簡単にできたな。まあいいや。
96 名前:デフォルトの名無しさん mailto:sage [2023/09/24(日) 01:16:14.31 ID:nC1Pu7Ba.net] >>94 なかなかおもろいサイトやぬ
97 名前:デフォルトの名無しさん mailto:sage [2023/09/24(日) 01:37:34.83 ID:XDqOvN5B.net] >>87 haskellで再投稿 https://ideone.com/HHMuMT
98 名前:デフォルトの名無しさん [2023/09/26(火) 17:04:35.08 ID:lhHS5sJh.net] お題:32ビット浮動小数点数のnextafter() 32ビット精度(IEEE754のbinary32)の変数aを 64ビット精度(IEEE754のbinary64)の変数bに代入する。 ここで、nextafterf(a, 0)やnextafterf(a, 正の無限)などに相当する操作を bに対して行え(bを32ビット浮動小数点数に戻すのは無しで)。 操作結果のoverflowやunderflowは考慮しなくてもよい。
99 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 11:02:54.03 ID:Jpj1XONB.net] お題:日本語の文章が入力されるので「、」をカンマに、「。」を改行に変換せよ
100 名前:デフォルトの名無しさん [2023/09/27(水) 11:36:52.67 ID:uGji0T93.net] Python s = input() s = s.replace("、", ",") s = s.replace("。", "\n") print(s)
101 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 13:01:54.91 ID:9Ywamwi5.net] Haskell import Data.List.Utils main = do s <- getContents putStrLn $ replace "。" "\n" $ replace "、" "," s コンパイルはしてないので動かないかも
102 名前:デフォルトの名無しさん [2023/09/27(水) 20:48:13.39 ID:hJUMqAFS.net] >>99 R https://ideone.com/syZ9JI
103 名前:デフォルトの名無しさん mailto:sage [2023/09/28(木) 08:18:15.29 ID:q8VwFY1b.net] お題 文字列S=abcdefghij(10文字)が与えられて 配列[0,4,7]が与えられる このときSの0番目を4番目、4番目を7番目、7番目を0番目に移動した文字列を出力するプログラムを書いてください
104 名前:デフォルトの名無しさん [2023/09/28(木) 09:17:20.57 ID:iiudb0JA.net] >>103 lisp https://www.ideone.com/pOwDJd
105 名前:デフォルトの名無しさん mailto:sage [2023/09/28(木) 13:09:43.08 ID:tckV2TlV.net] >>103 Ruby 文字列S='abcdefghij' 配列=[0,4,7] 文字列 = 文字列S.dup 配列.zip( 配列.rotate ).each{|i,j| 文字列[i] = 文字列S[j] } puts 文字列
106 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/09/28(木) 13:15:33.53 ID:eLIN3EHU.net] お題: コンソールに指定したUTF-8文字列のQRコードを表示するプログラム。
107 名前:デフォルトの名無しさん [2023/09/28(木) 14:55:17.75 ID:7+/lnWbq.net] use std::io::{stdin, Read}; use std::error::Error; use qrcode::QrCode; fn read() -> Result<String, Box<dyn Error>> { Ok(stdin().lock().bytes().map(|c| c.expect("char") as char).collect()) } fn main() -> Result<(), Box<dyn Error>> { let qr = QrCode::new(read()?.as_bytes())?; let s = qr.render().light_color(' ').dark_color('#').build(); println!("{}", s); Ok(()) }
108 名前:蟻人間 ◆T6xkBnTXz7B0 mailto:sage [2023/09/28(木) 21:17:30.48 ID:yc7Vl2N1.net] お題: 指定されたフォントのひらがなの各文字について ひらがなの線に囲まれて閉じた領域の個数を調べ、最もその個数の多い文字ベスト3を出力せよ。
109 名前:デフォルトの名無しさん mailto:sage [2023/09/28(木) 22:53:24.99 ID:8VuS2PIw.net] 自分でやれ いやできないかすまん
110 名前:デフォルトの名無しさん [2023/09/28(木) 22:59:15.05 ID:isk1iJ0r.net] pythonならcv2使ってやるかな
111 名前:17 [2023/09/29(金) 10:58:18.12 ID:eBy6R6wt.net] >>99 bash のコマンドラインで以下のように入力すると標準入力から入力して「、」が「,」に、「。」が改行に変換されて標準出力に出力される。 (起動する環境は bash でなければならないということはないと思うが、他のシェルは確認していない)。 sed 's/、/,/g;s/。/\n/g' もちろん日本語入出力可能な端末を使用して、尚且つ sed がその入力をまともに受け付けてくれなければちゃんと動かない。
112 名前:デフォルトの名無しさん mailto:sage [2023/09/29(金) 11:02:02.85 ID:F8aJXNq9.net] お題: 指定されたフォントのひらがなの各文字について ひらがなの線に囲まれて閉じた領域の面積を調べ、各文字毎にそれぞれの面積の順序を最も大きい物から順に出力せよ。 またその情報を元に輪郭のhierarchy情報をcv2で利用出来る形で出力せよ
113 名前:デフォルトの名無しさん [2023/09/30(土) 17:32:44.04 ID:xxjzuZuq.net] お題 文字列が入力されます 赤と緑を入れ替えて 黒と白を入れ替えて 黄と青を入れ替えてください 例 入力: 緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ 出力: 赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ
114 名前:デフォルトの名無しさん mailto:sage [2023/09/30(土) 18:00:29.42 ID:oqu6hf3+.net] >>113 node const swap = (text, [w1, w2]) => text.split(w1).map(v => v.replaceAll(w2, w1)).join(w2) const swapAll = (text, rules) => rules.reduce(swap, text) const text = '緑のカバンに500万入れて白の紙で黄色のカバン言うて書きながら赤のカバン言いながら置いてくれたら俺黒のカバン言いながら取りに行くわ' const rules = [['赤', '緑'], ['黒', '白'], ['黄', '青']] const replaced = swapAll(text, rules) // console.log(replaced) console.log(replaced === '赤のカバンに500万入れて黒の紙で青色のカバン言うて書きながら緑のカバン言いながら置いてくれたら俺白のカバン言いながら取りに行くわ') // true
115 名前:デフォルトの名無しさん [2023/09/30(土) 19:24:03.19 ID:t2v1jL5l.net] >>113 R https://www.ideone.com/FCPqvY
116 名前:デフォルトの名無しさん [2023/09/30(土) 20:00:09.54 ID:iuoy3pEW.net] >>113 ウェブブラウザのJavaScript https://pastebin.com/YvymwTeN ユーザースクリプトの体裁で書いたけどブラウザーのConsoleでも動かせる Firefox: Ctrl+Shift+K Chrome: Ctrl+Shift+J https://mevius.5ch.net/test/read.cgi/tech/1691038333/113 を開いてそこで実行 結果はレスに直接追記 重複がないからXPathのtranslate()でいけるな思った、それだけ
117 名前:17 [2023/10/02(月) 01:36:39.53 ID:hWT/DRlk.net] >>103 Kotlin https://paiza.io/projects/95GuXcUyZr8AkmVsRESj5Q
118 名前:17 [2023/10/02(月) 01:52:26.35 ID:hWT/DRlk.net] >>106 1. qrencode というプログラムをインストールする。(例: RedHat系Linuxなら yum install qrencode) 2. qrencode で出力に ansi 等を指定して文字列で出力する。 例: qrencode -t ansi やっほー 3. 画面に出て来たQRコードをスマホで撮影する等して確認する。 4. 終わり。
119 名前:デフォルトの名無しさん mailto:sage [2023/10/02(月) 11:46:19.28 ID:0odvDMYE.net] >>118 よくできました 蟻ポイント30
120 名前:デフォルトの名無しさん [2023/10/06(金) 16:54:06.65 ID:jg1c5xSH.net] [クライシスアクター」「豊島保養所」←画像検索&拡散! 他スレに丸ごとコピペよろしっく!! ネットでできる反レプティリアン・反イルミ活動です!!!!! 動画サイトのコメ欄もねらい目だぞーーーー!!!!!!!
121 名前:デフォルトの名無しさん [2023/10/06(金) 16:54:28.09 ID:jg1c5xSH.net] [クライシスアクター」「豊島保養所」←画像検索&拡散! 他スレに丸ごとコピペよろしく!! ネットでできる反レプティリアン・反イルミ活動です!!!!! 動画サイトのコメ欄もねらい目だぞ!!!!!!!
122 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 19:28:55.20 ID:faQf3SiN.net] お題:n階建てのビルに定員4人のエレベーターがある。エレベーターは各階でボタンが押されるとその階に向かう。住人達はエレベータを呼んで乗るとエレベーター内で次に向かう階へのボタンを押す。ボタンを押すのは乗員全員である。乗るのを待っている住人が定員より多かった場合、エレベーターは乗れなかった住人を優先的に回収する。住人は列の先頭から順番にエレベーターに乗り込む。エレベーターは乗員を降ろしている間に住人を追加で乗せることはなく、すべての乗員を降ろしてから次の住人の回収に向かうものとする。 もっとも効率がいいエレベーターの停止順序を求め、入力に対して停止階のリストを出力せよ。 エレベーターの初期位置は1階とする。 入力 階数 乗員数 住人たちがいる階 乗員iが向かう階 乗員iが向かう階 … 5 1 1 5 2 4 3 2 3 2 1 3 5 出力 停止階 停止階 … 1 5 4 3 2 1 3 5 入力 10 5 1 1 2 3 4 4 9 4 10 10 10 1 8 6 6 6 5 出力 1 2 3 4 1 4 1 10 4 6 8 4 5
123 名前:9 mailto:sage [2023/10/08(日) 20:24:03.46 ID:zYJ3wh+h.net] >>122 「もっとも効率がいいエレベーターの停止順序」とは? 1.停止回数がもっとも少ない 2.移動した階数の和が最も小さい 3.ほか など、どのような指標?
124 名前:デフォルトの名無しさん mailto:sage [2023/10/09(月) 13:56:36.62 ID:V7NN5mnX.net] >>123 2.移動した階数の和が最も小さい
125 名前:デフォルトの名無しさん [2023/10/09(月) 19:10:41.03 ID:5dE8x2G+.net] >>87 C# https://paiza.io/projects/q-lUy-6voRo_XdJfyAdw6A
126 名前:デフォルトの名無しさん [2023/10/09(月) 22:18:18.11 ID:5dE8x2G+.net] >>113 C# https://paiza.io/projects/WbaYdgONPOZUKqB_TVkNbw?language=csharp
127 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 11:02:46.67 ID:u59ybXeV.net] スイカゲームを自動操縦するプログラムを造れ
128 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 12:31:12.32 ID:hnj5q8Ch.net] while (true) push(BUTTON_A)
129 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 00:00:08.85 ID:sMwx6jpS.net] お題:角カッコの列が入力されるのでカッコの対応が取れていたら1,取れていなかったら0と表示せよ < [[]] > 1 < [[] > 0
130 名前:17 [2023/10/14(土) 02:22:24.53 ID:BgrcFKKf.net] >>129 Perl bash 等のシェルのコマンドラインで以下のように入力すると標準入力から入力して結果を標準出力に出力する。 perl -ne '$n=0;while(/(.)/g){if($1eq"["){$n++}elsif($1eq"]"){$n--}}$f=$n==0?1:0;print"$f\n"' 実行例 [[]] 1 [[] 0 [[[[]][[]]] 0 [[[[]][[]]]] 1
131 名前:17 [2023/10/14(土) 04:16:14.71 ID:BgrcFKKf.net] >>113 Kotlin https://paiza.io/projects/ll5rbpwAp7dzQ_lOoj7RPw
132 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 10:19:17.10 ID:BRbCCPQd.net] >>129 Ruby %W( [[]] [[] [[[[]][[]]] [[[[]][[]]]] ][ #{} ).each{|s| w = s.dup {} while w.sub!( /\[\]/, '' ) puts "#{(s != '' && w == '')? 1 : 0} #{s.inspect}" } # 1 "[[]]" # 0 "[[]" # 0 "[[[[]][[]]]" # 1 "[[[[]][[]]]]" # 0 "][" # 0 ""
133 名前:デフォルトの名無しさん [2023/10/14(土) 22:38:53.08 ID:5dUK8HoW.net] >>129 C# https://paiza.io/projects/biEUVjCtGCYB8s0ny8vsAQ
134 名前:デフォルトの名無しさん [2023/10/16(月) 08:51:26.93 ID:kgcCjrnK.net] 1) BY RG 2) RG BY 3) GR YB 1-3を回転対称で同じとみなせるグループと線対称で同じとみなせるグループに分類せよ 4色を2x2の升にランダムに一つづつ配置して4x3x2通りのパターンを作成し それぞれを上の基準でグループ分けせよ
135 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 07:02:57.86 ID:InaHR8fg.net] >>134 Ruby https://ideone.com/J7Ec40
136 名前:デフォルトの名無しさん mailto:sage [2023/10/18(水) 20:40:59.79 ID:4ifgnZXl.net] お題:Pythonのmath.ulp()と同機能の関数 引数が正規化数限定のサブセットでも可(その旨を明記)。 Pythonで実装する場合は(もちろん)math.ulp()を使ってはならない。
137 名前:134 mailto:sage [2023/10/18(水) 20:46:23.24 ID:4ifgnZXl.net] 簡単なお題: >>135 のサブセット(求めたulpも正規化数限定)
138 名前:デフォルトの名無しさん mailto:sage [2023/10/18(水) 20:56:02.06 ID:L3TY2GGf.net] import struct def my_ulp(x): # 浮動小数点数xをバイト列に変換 b = struct.pack("d", x) # バイト列を整数に変換 i = int.from_bytes(b, "little") # 符号部(1ビット)を取り出す s = i >> 63 # 指数部(11ビット)を取り出す e = (i >> 52) & 0x7ff # 仮数部(52ビット)を取り出す m = i & 0xfffffffffffff # 指数部が0や最大値ならエラー if e == 0 or e == 0x7ff: raise ValueError("x is not a normalized number") # 仮数部の最下位ビット(1ビット)を求める lsb = m & 1 # 符号部と指数部を元に戻す i = (s << 63) | ((e - lsb) << 52) # 整数をバイト列に変換 b = i.to_bytes(8, "little") # バイト列を浮動小数点数に変換 return struct.unpack("d", b)[0]
139 名前:134 [2023/10/18(水) 21:44:13.43 ID:4ifgnZXl.net] >>137 間違えましたorz
140 名前:134 mailto:sage [2023/10/18(水) 21:52:04.82 ID:4ifgnZXl.net] >>138 math.ulp()は符号を戻さないらしいです: ulp(1) == ulp(-1)
141 名前:デフォルトの名無しさん mailto:sage [2023/10/21(土) 04:08:56.28 ID:TaroWUwV.net] お題:文字列「せんだ」「みつを」「ナハナハ」がランダムに100行入力される。せんだ、みつを、ナハナハが順番に入力されたときに1と一行出力せよ
142 名前:デフォルトの名無しさん [2023/10/21(土) 23:03:24.39 ID:x0YGunAE.net] >>141 C# https://paiza.io/projects/2AXALD9gCHkTYmJ7WYKEOQ
143 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 07:23:48.08 ID:gFkqcLnH.net] お題: (1)Python3.12以降の、math.nextafter()のサブセット (実装はPythonでなくても構いません) 64ビット長程度の整数iを引数として、 a)iがゼロ:foo(i) = 0.0 b)i > 0:foo(i) = nextafter(0, inf, steps=i) c)i < 0:foo(i) = nextafter(0, -inf, steps=-i) を満たすfoo()を書く。 Python3.12を使う場合は、nextafter()を使ってはならない。 (2)(1)の逆関数。
144 名前:141 mailto:sage [2023/10/25(水) 07:27:56.03 ID:gFkqcLnH.net] 補足:(1)(2)いずれも実用的な時間内で求める事(steps=1相当のnextafter()をループで回すのは不可)。
145 名前:デフォルトの名無しさん [2023/10/25(水) 12:47:47.78 ID:Bgy3SEXp.net] なんだnextafterって
146 名前:141 mailto:sage [2023/10/25(水) 23:22:03.23 ID:gFkqcLnH.net] >>145 nextafter()は、浮動小数点数の、(数直線上での)「隣」を求めるやつですね(C99以降?)。 Python3.12のやつは、隣の隣の隣の…を求める事が出来る様に拡張されました。
147 名前:21-923 mailto:sage [2023/10/26(木) 00:31:46.93 ID:7aLp+Ojb.net] 前スレの補足: V8やLLVMは、自前でstrtod()的なものを実装してました。 tps://arxiv.org/abs/2101.11408
148 名前:デフォルトの名無しさん mailto:sage [2023/10/28(土) 20:54:22.44 ID:U0JINWpQ.net] >>103 octave https://ideone.com/87WGBO function s = f(s, i) s(circshift(i, -1, 2)) = s(i); end >>129 ocaml https://ideone.com/IY1dWU let chars s = let rec aux acc i = if i < 0 then acc else aux (s.[i] :: acc) (i - 1) in aux [] ((String.length s) - 1) let f s = let rec aux = function ([], []) -> 1 | (_, []) -> 0 | ('['::bs, ']'::cs) -> aux (bs, cs) | (bs, c::cs) -> aux (c::bs, cs) in aux ([], (chars s))
149 名前:デフォルトの名無しさん mailto:sage [2023/10/31(火) 00:00:13.24 ID:mywig6Xf.net] >>3 c https://ideone.com/BnNzUC int has26(const char *p) { int c, count[26] = {0}; for (; c = tolower(*p); p++) if (isalpha(c)) count[c - 'a']++; for (c = 'a'; c <= 'z'; c++) if (count[c - 'a'] < 1) return 0; return 1; } const char *f(const char **lines, int n) { const char *found = 0; int i, len, minlen; for (i = 0; i < n; i++) if (has26(lines[i])) if (!found) found = lines[i], minlen = strlen(lines[i]); else if (len = strlen(lines[i]) < minlen) found = lines[i], minlen = len; return found; }
150 名前:デフォルトの名無しさん [2023/11/02(木) 14:01:24.52 ID:4TnUpiLT.net] お題 https://i.imgur.com/XZDqbeJ.png
151 名前:17 [2023/11/05(日) 02:55:01.08 ID:w6RhJs5K.net] >>150 ChatGPT にそのままテキストを読ませたらこう答えた。 ------------------------------------------------------------------------------------------------- 通学に自転車を使わない学生は34人、自転車を使うがバスを使わない学生は39人、バスを使うが自転車を使わない学生は18人です。 100人の学生全体からこれらの人数を引いた残りの学生がバスと自転車の両方を使っている学生の数です。 100人 - 34人 (自転車を使わない学生) - 39人 (バスを使わない学生) - 18人 (自転車を使わない学生) = 9人 したがって、通学にバスと自転車の両方を使う学生は9人です。 ------------------------------------------------------------------------------------------------- ここで徒歩については考慮しないのかとツッコミを入れたらこう答えた。 ------------------------------------------------------------------------------------------------- 申し訳ありません、徒歩の学生についての情報が提供されていなかったため、上記の計算では徒歩を選択した学生については考慮されていませんでした。徒歩を選択した学生の数についての情報がなければ、バスと自転車の両方を使う学生の正確な数を計算することはできません。 -------------------------------------------------------------------------------------------------
152 名前:17 [2023/11/05(日) 02:58:00.24 ID:w6RhJs5K.net] そして更にこういうツッコミを入れる。 最初の34人は自転車を使っていないだけで密かにバスを使っているかも知れないのだが、そのことは考慮しないのか? ChatGPT 申し訳ありません、私の以前の回答は不完全でした。確かに、最初の34人のうち自転車を使っていないという情報だけでは、彼らがバスを使っているかどうかを確定することはできません。そのため、正確な答えを得るためには追加の情報が必要です。 もし最初の34人のうち何人かが実際にはバスを利用している場合、それを考慮する必要があります。与えられた情報だけからは、バスと自転車の両方を使う学生の正確な数を特定することはできません。必要な情報が揃わない限り、正確な答えを提供することはできません。
153 名前:デフォルトの名無しさん mailto:sage [2023/11/06(月) 00:02:49.99 ID:fuk9k4cf.net] お題:単方向リストを逆順にせよ
154 名前:デフォルトの名無しさん [2023/11/06(月) 00:48:06.04 ID:uPzAm2Gi.net] >>153 Java https://paiza.io/projects/3z8V5XGGFjxqLac8ZYo_kg
155 名前:デフォルトの名無しさん mailto:sage [2023/11/11(土) 20:39:33.71 ID:iU/7lT3J.net] >>87 Ruby で作った。 FileUtils::DryRun を使っているので、実際には変更されません require 'fileutils' HEAD = 'abc' # 先頭文字 EXT = '.mp4' # 末尾の拡張子 HEAD_LEN = HEAD.length # 3文字 EXT_LEN = EXT.length # 4文字 # 絶対パスのディレクトリ名の後ろに、* を付けること! # . で始まる、隠し directory, file を除く glob_pattern = "C:/Users/Owner/Documents/test/*#{ EXT }" target_dir = File.dirname( glob_pattern ) # ディレクトリパスだけを取り出す # 元のファイル名の配列 fname_src_ary = Dir.glob( glob_pattern ) .select { |full_path| File.file?( full_path ) } # ファイルのみ .select do |full_path| file_name = File.basename( full_path ) # 先頭文字が abc かつ、末尾が .mp4 だけに絞り込む file_name.start_with?( HEAD ) && file_name.end_with?( EXT ) end .map { |full_path| File.basename( full_path ) } 次へ続く
156 名前:153 mailto:sage [2023/11/11(土) 20:41:20.19 ID:iU/7lT3J.net] # 変更後のファイル名の配列 fname_dest_ary = fname_src_ary.map do |file_name| str = String.new( file_name ) # 先頭文字の abc と、末尾の .mp4 を取り除いて、数字だけにする str.slice!(-EXT_LEN, EXT_LEN) str.slice!(0, HEAD_LEN) # 10進数の数値型に変換してから、3桁0埋め文字にする HEAD + "%03d" % Integer( str, 10 ) + EXT end require 'set' # 変更後のファイル名が既に存在しているか、チェックする。 # abc100.mp4 など、3桁以上の数値もエラー! fname_src_set = Set.new( fname_src_ary ) # 集合 fname_dest_ary.each { |file_name| raise "ファイル名: #{ file_name } が重複しています" if fname_src_set.include?( file_name ) } # ファイル名を変更する fname_src_ary.zip( fname_dest_ary ) do |src_filename, dest_filename| src_path = target_dir + "/" + src_filename dest_path = target_dir + "/" + dest_filename FileUtils::DryRun.move( src_path, dest_path ) end 出力 mv C:/Users/Owner/Documents/test/abc0.mp4 C:/Users/Owner/Documents/test/abc000.mp4 mv C:/Users/Owner/Documents/test/abc99.mp4 C:/Users/Owner/Documents/test/abc099.mp4
157 名前:17 [2023/11/21(火) 04:31:35.72 ID:aOoah041.net] >>153 Kotlin https://paiza.io/projects/TDUcagXrng4H9zD9AenxjQ
158 名前:デフォルトの名無しさん mailto:sage [2023/11/25(土) 20:07:06.40 ID:zpqT0hBE.net] お題:ランダムに1から9999までの整数を得た時、何回で全種類出揃うか確認せよ 擬似乱数列生成法については指定しないものとする ruby https://ideone.com/rucuHk require 'set' r = 1..9999 c = r.to_a.fill(0) s = r.to_set while !s.empty? n = rand(r) c[n - r.first] += 1 s.delete n end p c.sum ↓ 84736
159 名前:デフォルトの名無しさん [2023/11/25(土) 22:17:37.68 ID:Al0Rw+0l.net] >>158 R https://ideone.com/nTywN4
160 名前:デフォルトの名無しさん [2023/11/26(日) 10:44:04.74 ID:dd78ITN+.net] プログラミングの依頼はここでいいでしょうか。 ココナラで依頼したのですが見送りになってしまいました。 お金は出すので製品版を作って欲しいです。 できないなら何が定義できていないのか教えて下さい。 AIによる詩作成 まずAIが詩を作成するための学習ツールを作ります AIがリンゴの形相を分解するには辞書が必要となる リンゴを検索し辞書を比較し関連性の高いワード リンゴ⊇(赤い、丸い、果物…)を拾うのだ これが学習ツールであり 一致したワードからさらに形相に分解する リンゴ⊇(赤い、丸い、果物、酸っぱい…) その中の果物を形相分解するには 果物⊇(リンゴ、サクランボ、なし…) その中のなしを様相分解すると なし⊇(果物、丸い、黄緑…) ここから詩を作るには『黄緑のリンゴ』などになる 形相分解すると客観的な『深さ』(今回は三段階)を持った詩になる
161 名前:デフォルトの名無しさん [2023/11/26(日) 10:50:43.54 ID:d/KzVdDP.net] >>158 設定があいまいなんだが shuffleとかselectとかchoice系なら 高々9999回で必ず全部出る
162 名前:デフォルトの名無しさん [2023/11/26(日) 11:41:26.07 ID:1iIVw+fD.net] >>158 Java https://paiza.io/projects/NEIRYxOjS1MiyOOhmbhaHA
163 名前:158 [2023/11/26(日) 12:29:54.58 ID:dd78ITN+.net] 製品版なら10万円出します AIでなくても詩作成ツールでいいです
164 名前:デフォルトの名無しさん [2023/11/26(日) 13:43:11.68 ID:4uIV+oN2.net] >>158 lisp https://ideone.com/pYi0rj
165 名前:デフォルトの名無しさん [2023/11/26(日) 21:12:35.28 ID:SfQeb61a.net] >>159 これだと150001回以上となる場合が本来よりも起こりにくくなってしまい駄目だった。 活かしながら書き換えると https://ideone.com/qv7bL9
166 名前:17 [2023/11/27(月) 10:19:46.26 ID:VB+FhCy9.net] >>160 ここは誰かがお題を出して答えたい人が答えるスレなので、どんなお題を書いても構わないが、誰も答えないことはよくある。 また、バグがあっても気づかずにそのままになる事もある。多分大半のプログラムは作った本人以外は検証しないので。 ごく稀に他人がバグを発見することはあるが、発見されてもわざわざ指摘するとは限らないし修正もされないかも知れない。
167 名前:17 [2023/11/27(月) 10:35:37.58 ID:VB+FhCy9.net] >>158 Kotlin https://paiza.io/projects/B7Eq1O1iPp-ynUyb5QGL9g こんなので良いのか?やっぱ Set とか使わずにやった方が良いかな?
168 名前:デフォルトの名無しさん mailto:sage [2023/11/27(月) 12:57:15.00 ID:lzpjbGZv.net] >>158 Ruby >>158 の例が個別の出現回数をカウントしていたのでそれに合わせた c = [0] * 9999 9999.times { redo unless ( c[ rand(9999) ] += 1 ) == 1 } p c.sum
169 名前:17 [2023/11/27(月) 13:09:30.74 ID:VB+FhCy9.net] >>158 また Kotlin https://paiza.io/projects/yYQ9bdMb0_d91607skNw4Q 今度は add ではなく remove でやるようにした。 これでその Ruby の例に近くはなるがカウントする方法は前と同じで個別にはやってない。
170 名前:デフォルトの名無しさん [2023/11/27(月) 18:30:50.07 ID:O6HTjvgJ.net] >>158 Perl perl -E 'for ($r = 9999; $n < $r; $_++) { $h{int(rand($r)) + 1} ||= ++$n }; say' 79596
171 名前:156 mailto:sage [2023/11/27(月) 20:35:49.92 ID:VuTnBSK2.net] >>158 c https://ideone.com/K1fD78 ・lispのひとの(>>164 )をパク…参考にしました ・乱数生成部分は https://c-faq.com/lib/randrange.html からコピペしました int main() { int a[9999] = {0}, size = sizeof a / sizeof *a, sum, min, max, r, i, j, k; srand(time(0)); #define randi(size) ((int)((double)rand() / ((double)RAND_MAX + 1) * (size))) for (r = size; 0 < r; ) if (!a[randi(size)]++) r--; for (sum = min = max = a[0], i = 1; i < size; i++) { sum += a[i]; min = min < a[i] ? min : a[i]; max = a[i] < max ? max : a[i]; } printf("%d\n%f\n[%d, %d]\n", sum, (double)sum / size, min, max); for (i = min; i <= max; i++) { for (k = j = 0; j < size; j++) if (i == a[j]) k++; printf("%d\t%d\n", i, k); } return 0; }
172 名前:17 [2023/11/28(火) 15:35:44.30 ID:cIauX08C.net] >>158 今度はC言語 https://paiza.io/projects/c6ALnYb4rksMFGZT03mcCw 1~9999ではなく実際には0~9998でやっているが、表示する必要もないし一々1足したり後で引いたりも馬鹿らしいのでそのままにした。
173 名前:デフォルトの名無しさん mailto:sage [2023/11/30(木) 06:46:26.20 ID:/rzYr39l.net] お題:英字の羅列された文字列が与えられる。この文字列を分析して数字列を出力せよ。数字の表記ルールは、その文字の両隣の文字がASCIIコードにおける奇数だったら1、そうでなければ0.
174 名前:デフォルトの名無しさん mailto:sage [2023/11/30(木) 09:19:30.52 ID:AZ5oWFgm.net] 前提としてエラー入力はなくて 出力は両隣がある時のみでいいのかな use itertools::{Itertools, assert_equal}; fn convert(input: &[u8]) -> Vec<u8> { input .iter() .tuple_windows() .map(|(prev, _curr, next)| (prev & next & 1) + b'0') .collect() } fn main() { assert_equal(&convert(b"ABC"), b"1"); assert_equal(&convert(b"abcIJKpqrXYZ"), b"1001010000"); }
175 名前:デフォルトの名無しさん mailto:sage [2023/11/30(木) 20:13:06.94 ID:tzHzM+FM.net] >>173 octave https://ideone.com/mx954D function a = f(s) o = rem([0 uint8(s) 0], 2) == 1; a = o(1:end-2) & o(3:end); end >>173 c https://ideone.com/VsnqKu void f(const char *s, int *out, int *len) { int i; for (*len = strlen(s), i = 0; i < *len; i++) out[i] = (i == 0 || i == *len - 1) ? 0 : s[i - 1] & s[i + 1] & 1; }
176 名前:デフォルトの名無しさん [2023/11/30(木) 20:40:22.09 ID:2Igm/ys/.net] >>R https://ideone.com/NqXKMs
177 名前:17 [2023/12/02(土) 14:30:47.66 ID:FLL1Kaqa.net] >>173 Kotlin https://paiza.io/projects/xZXVc46Ys3qUlGX4DAIxzw 両隣が存在する文字のみを対象に処理をするようにした。なので3文字未満はエラーになる。3文字の場合は2文字目だけを対象にして一つ結果を出す。
178 名前:デフォルトの名無しさん mailto:sage [2023/12/04(月) 20:26:07.07 ID:LtCaDuZa.net] >>173 Ruby def solution1( str ) a = 0 str.chars.inject(''){|s,c| s << ( (5 & (a = 7 & a << 1 | c.ord & 1) == 5)? '1' : '0' ) }[2..-1] || '' end solution( '' ) #=> "" solution( 'AB' ) #=> ""
179 名前:デフォルトの名無しさん [2023/12/08(金) 09:07:44.84 ID:Fcz3Modv.net] >>173 lisp https://ideone.com/ftjccy
180 名前:デフォルトの名無しさん [2023/12/10(日) 17:41:17.00 ID:Dj8Ho2Ik.net] >>173 C# https://paiza.io/projects/ymS6iGUKe08auaZZ-2Q6XA
181 名前:デフォルトの名無しさん [2023/12/13(水) 09:27:48.18 ID:NbIWTS6w.net] お題 ビールの空きビンをN本集めると新品のビール1本と交換してもらえる あなたが新品のビールをP本持っている そのとき、あなたが飲めるビールはR本である N, Pを引数としてRを返す関数を定義してください
182 名前:17 [2023/12/13(水) 15:17:15.28 ID:WwinWAeQ.net] >>181 Kotlin または Kotlin script fun beer(n: Int, p: Int) = p + p / n
183 名前:17 [2023/12/13(水) 15:19:45.81 ID:WwinWAeQ.net] ごめん。これだと1回分しか計算してないね。ということで >>182 はボツ。
184 名前:17 [2023/12/13(水) 15:47:32.26 ID:WwinWAeQ.net] >>181 Kotlin https://paiza.io/projects/1gGtpt6dxb6-vzoATj_Qkg 作り直した。 もっと簡略化できそうな感じもしたがやってない。何か画期的な計算方法やアルゴリズムに気付いたらまた作る。
185 名前:デフォルトの名無しさん mailto:sage [2023/12/13(水) 18:37:32.11 ID:8Qa5an+7.net] >>181 Ruby def solution( n, m ) b = r = n while (k = b.div( m )) != 0 b += k - k * m r += k end r end solution( 5, 3 ) #=> 7
186 名前:デフォルトの名無しさん mailto:sage [2023/12/14(木) 00:01:58.90 ID:WyfgSj4g.net] >>181 https://ideone.com/tvmy6F let f n p = let rec aux r p q = if p = 0 then r else aux (r + p) ((p + q) / n) ((p + q) mod n) in aux 0 p 0 let () = print_int @@ f 3 5 ↓ 7
187 名前:デフォルトの名無しさん [2023/12/14(木) 00:03:09.36 ID:uNhVrYF2.net] >>181 R R <- function(N, P) ((P - 1) * N) %/% (N - 1) + 1
188 名前:17 [2023/12/19(火) 15:39:00.18 ID:S/sB6wJe.net] >>181 Kotin https://paiza.io/projects/yPf1W7SClD8GIOV1WD_5LQ 再帰にすればとても簡単だったことに、さっき気付いた。
189 名前:デフォルトの名無しさん [2024/01/16(火) 00:33:05.98 ID:n8j0XaXx.net] お題:時刻の文字列が与えられる。その時刻から1秒後の時刻を出力せよ。 例 入力:00:00:00 出力:00:00:01 入力:23:59:59 出力:00:00:00
190 名前:9 mailto:sage [2024/01/16(火) 02:37:52.68 ID:SfyAs2IF.net] >>189 Perl5 use Time::Piece; use Time::Seconds; for (qw{00:00:00 23:59:59}) { $t = Time::Piece->strptime($_, '%T') + 1; print "入力:$_\n出力:", $t->strftime('%T'), "\n"; } ※見易くするためインデントを全角スペースに置換してあります 実行結果 ~ $ perl 22_187_1秒後.pl 入力:00:00:00 出力:00:00:01 入力:23:59:59 出力:00:00:00
191 名前:9 mailto:sage [2024/01/16(火) 02:38:47.78 ID:SfyAs2IF.net] >>190 use Time::Seconds; これ要らなかった…orz
192 名前:デフォルトの名無しさん mailto:sage [2024/01/16(火) 20:31:44.73 ID:76+p6SY+.net] >>189 octave https://ideone.com/CEGEj8 f = @(s) datestr(addtodate(datenum(s), 1, 'second'), 'HH:MM:SS'); in = ['00:00:00';'23:59:59'], out = f(in)
193 名前:デフォルトの名無しさん [2024/01/16(火) 20:54:27.73 ID:OiJoE8pV.net] >>189 PowerShell "00:00:00", "23:59:59" |% {[String]([DateTime]$_).AddSeconds(1).TimeOfDay}
194 名前:デフォルトの名無しさん mailto:sage [2024/01/16(火) 21:26:50.38 ID:76+p6SY+.net] >>189 ruby https://ideone.com/y2wgxo require 'time' f = -> s {(Time.parse(s) + 1).strftime('%T')} p ['00:00:00', '23:59:59'].map {|s| [s, f.(s)]}
195 名前:デフォルトの名無しさん mailto:sage [2024/01/16(火) 23:32:13.09 ID:+Emu7d1R.net] >>189 js const decode = (s) => s.split(":").map(Number); const encode = (nums) => nums.map((v) => String(v).padStart(2, "0")).join(":"); const inct = (s, sec = 1) => { const a = decode(s); const ss = [ { n: a[0], max: 24 }, { n: a[1], max: 60 }, { n: a[2], max: 60 }, ]; let up = sec; const b = ss .reverse() .map(({ n, max }) => { n += up; up = Math.floor(n / max); return n % max; }) .reverse(); return encode(b); }; console.log(inct("00:00:00"));// 00:00:01 console.log(inct("23:59:59"));// 00:00:00 console.log(inct("00:00:00", 100));// 00:01:40
196 名前:デフォルトの名無しさん mailto:sage [2024/01/17(水) 00:04:27.61 ID:g7dwo5vO.net] >>189 ocaml https://ideone.com/aEsvl6 let sec_of_hms hms = let at i = int_of_string (String.sub hms i 2) in at 0 * 60 * 60 + at 3 * 60 + at 6 let hms_of_sec sec = Printf.sprintf "%02d:%02d:%02d" (sec mod 86400 / 3600) (sec mod 3600 / 60) (sec mod 60) let (<<) f g x = f (g x) let f = hms_of_sec << (+) 1 << sec_of_hms
197 名前:デフォルトの名無しさん mailto:sage [2024/01/17(水) 01:45:50.10 ID:xvgJymQe.net] >>189 Rust (date/timeライブラリ不使用版) fn next_time(cur: &str) -> String { let [sec, min, hour] = cur .rsplitn(3, ':') .map(|s| s.parse().unwrap()) .zip([60, 60, 24]) .scan(1, |carry, (mut value, limit)| { value += *carry; (*carry, value) = if value == limit { (1, 0) } else { (0, value) }; Some(value) }) .collect::<ArrayVec<_, 3>>()[..] else { unreachable!() }; format!("{hour:02}:{min:02}:{sec:02}") } fn main() { assert_eq!(next_time("00:00:00"), "00:00:01"); assert_eq!(next_time("23:59:59"), "00:00:00"); }
198 名前:17 [2024/01/18(木) 03:01:51.54 ID:opxINJAy.net] >>189 Kotlin Java のライブラリそのまま使ってるだけの怠惰なプログラム https://paiza.io/projects/76gN3OCL93cAj7qXnNlyIA
199 名前:17 [2024/01/19(金) 19:43:44.34 ID:hxZRcaHh.net] >>189 Kotlin 今度は Java のライブラリは使わずに時分秒を保持するクラスを自分で作ってそこで秒に足すとか文字列にするとかやるようにした。 https://paiza.io/projects/7YcPDBTxVFt9EVczvBJ8gQ
200 名前:デフォルトの名無しさん mailto:sage [2024/01/20(土) 23:08:19.98 ID:PCaU0wMN.net] >>189 dart 2.3.0 https://ideone.com/khq9gr void main() { var sec_of_hms = (hms) => hms.split(':').fold(0, (acc, s) => acc * 60 + int.parse(s)); var hms_of_sec = (sec) => [sec % 86400 ~/ 3600, sec % 3600 ~/ 60, sec % 60].map((x) => x.toString().padLeft(2, '0')).join(':'); var f = (hms) => hms_of_sec(sec_of_hms(hms) + 1); print(f('00:00:00')); print(f('23:59:59')); }
201 名前:デフォルトの名無しさん [2024/01/21(日) 17:06:46.39 ID:BpmEGVkv.net] >>189 c++ https://mevius.5ch.net/test/read.cgi/tech/1434079972/124
202 名前:デフォルトの名無しさん [2024/01/21(日) 21:15:52.66 ID:BWkvMixc.net] >>189 c https://ideone.com/wRIYl2 int hmstosec(const char *hms) { int h, m, s; return sscanf(hms, "%d:%d:%d", &h, &m, &s) == 3 ? h * 3600 + m * 60 + s : 0; } char *sectohms(char *buff, int sec) { sprintf(buff, "%02d:%02d:%02d", sec % 86400 / 3600, sec % 3600 / 60, sec % 60); return buff; } char *f(char *buff, const char *hms) { return sectohms(buff, hmstosec(hms) + 1); } >>189 c https://ideone.com/3gj90n int hmstosec(const char *hms) { #define _(i) ((hms[i] - '0') * 10 + (hms[i + 1] - '0')) return _(0) * 3600 + _(3) * 60 + _(6); #undef _ } char *sectohms(char *buff, int sec) { #define _(i, value) buff[i] = '0' + (value) / 10, buff[i + 1] = '0' + (value) % 10 return _(0, sec % 86400 / 3600), buff[2] = ':', _(3, sec % 3600 / 60), buff[5] = ':', _(6, sec % 60), buff[8] = '\0', buff; #undef _ } char *f(char *buff, const char *hms) { return sectohms(buff, hmstosec(hms) + 1); }
203 名前:デフォルトの名無しさん [2024/01/22(月) 15:47:46.18 ID:PT6/fzaV.net] >>189 lisp https://ideone.com/J8xIVN
204 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 20:39:51.43 ID:8rvcqFQo.net] >>189 gawk https://ideone.com/zBy22y BEGIN {FS=":"} {print strftime("%T", mktime(sprintf("2024 01 23 %s %s %s", $1, $2, $3)) + 1);} >>189 sqlite https://ideone.com/fjEdMz select time('00:00:00', '+1 second'); select time('23:59:59', '+1 second'); >>189 bash https://ideone.com/pYf8vL while read hms; do date '+%T' --date="+1 seconds $hms" done
205 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 22:56:23.02 ID:8rvcqFQo.net] >>189 pascal https://ideone.com/sprmCC program ideone; Uses sysutils, dateutils; function f(hms : string) : string; begin f := TimeToStr(IncSecond(StrToTime(hms), 1)) end; begin writeln(f('00:00:00')); writeln(f('23:59:59')); end.
206 名前:デフォルトの名無しさん mailto:sage [2024/01/23(火) 23:54:34.15 ID:39Fs96AV.net] >>189 を時間ライブラリ無しで作成できている言語は現時点で 193のJavaScript 194のOCaml 195のRust 197のKotlin 198のDart 199のC++ 200のC 201のLisp 以上
207 名前:17 [2024/01/24(水) 00:08:17.22 ID:n4ooUyFj.net] >>189 Perl bashのコマンドラインから長い長いワンライナーで。 $ perl -ne 'if(/(\d+):(\d+):(\d+)/){$h=$1;$m=$2;$s=$3;printf"入力:%02d:%02d:%02d\n",$h,$m,$s;$s++;if($s>=60){$m++;$s=0;if($m>=60){$h++;$m=0;if($h>=24){$h=0}}}printf"出力:%02d:%02d:%02d\n",$h,$m,$s}' 1:2:3 入力:01:02:03 出力:01:02:04 0:0:0 入力:00:00:00 出力:00:00:01 23:59:59 入力:23:59:59 出力:00:00:00 $
208 名前:デフォルトの名無しさん [2024/02/02(金) 06:41:15.23 ID:CC6U77IS.net] お題 入力データをグループ分けして出力せよ 入力データの、= の左右は同じグループである。 出力する順番は、入力データの出現順とする UnionFind を使えば良いかも 入力データ ["a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2", "a3=a4", "c3=c4", "e1=e3", "a2=a4", "c3=c1", "b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3"] 出力 [["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"], ["c1", "c2", "c3", "c4", "d1", "d2", "d3"], ["e1", "e2", "e3"]] Ruby で、UnionFind を自作してみた。 下はユニットテストです https://paiza.io/projects/e6nk1EOu3utyWpV3iuWAFQ?language=ruby https://paiza.io/projects/kjeVtTKeDwEnWVrBU5_nbg?language=ruby
209 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 10:50:23.49 ID:fEMhv+T7.net] >>208 Rust fn foo<'a, 'b>(input: &'b [&'a str]) -> Vec<Vec<&'a str>> { struct Data<'a> { name: &'a str, rep: usize, coll: Option<Vec<usize>>, } let mut data = Vec::<Data>::new(); let mut map = HashMap::<&str, usize>::new(); for s in input { let (index0, index1) = s.splitn(2, '=') .map(|s| match map.get(s) { Some(&index) => data[index].rep, None => { let index = data.len(); map.insert(s, index); data.push(Data { name: s, rep: index, coll: Some(vec![index]), }); index }, }) .sorted().tuple_windows().next().unwrap(); if index0 != index1 { let coll0 = data[index0].coll.take().unwrap(); let coll1 = data[index1].coll.take().unwrap(); coll1.iter().for_each(|&index| data[index].rep = index0); data[index0].coll = Some(itertools::merge(coll0, coll1).collect()); } } data.iter().map(|data| &data.coll).flatten() .map(|coll| coll.iter().map(|&index| data[index].name).collect()).collect() }
210 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 10:53:02.58 ID:fEMhv+T7.net] >>209 の動作確認用追加分 use std::collections::HashMap; use itertools::Itertools; fn main() { let input = [ "a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2", "a3=a4", "c3=c4", "e1=e3", "a2=a4", "c3=c1", "b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3" ]; let output = [ vec!["a1", "a2", "b1", "b2", "b3", "a3", "a4", "a5", "b4"], vec!["c1", "c2", "c3", "c4", "d1", "d2", "d3"], vec!["e1", "e2", "e3"] ]; assert_eq!(foo(&input), output); }
211 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 22:48:33.27 ID:UezRkqGy.net] >>208 ruby https://ideone.com/eF5lww 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 elsif xa then xa << x << y elsif ya then ya << x << y else acc << [x, y] end }.map {|a| a.uniq.sort_by {|s| w[s]}}.sort_by {|a| w[a[0]]} }
212 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 22:51:42.74 ID:UezRkqGy.net] >>208 rust https://ideone.com/MEZMPO 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]))) { (Some(xi), Some(yi)) => { let ys = acc[yi].clone(); acc[xi].extend(ys); acc[xi].extend(xy); acc.remove(yi); }, (Some(xi), None) => acc[xi].extend(xy), (None, Some(yi)) => acc[yi].extend(xy), _ => acc.push(xy), } } for b in acc.iter_mut() { b.sort_by(|c, d| h.get(d).cmp(&h.get(c))); b.dedup(); } acc.sort_by(|c, d| h.get(d[0]).cmp(&h.get(c[0]))); acc }
213 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 23:24:19.60 ID:UezRkqGy.net] >>208 ruby https://ideone.com/daI0QL ・若干の修正 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) elsif xa then xa << y elsif ya then ya << x else acc << [x, y] end }.map {|a| a.sort_by {|s| w[s]}}.sort_by {|a| w[a[0]]} }
214 名前:デフォルトの名無しさん mailto:sage [2024/02/02(金) 23:24:45.86 ID:UezRkqGy.net] >>208 rust https://ideone.com/dO4xea ・若干の修正 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]))) { (Some(xi), Some(yi)) => { let ys = acc[yi].clone(); acc[xi].extend(ys); acc.remove(yi); }, (Some(xi), None) => acc[xi].push(xy[1]), (None, Some(yi)) => acc[yi].push(xy[0]), _ => acc.push(xy), } } acc.iter_mut().for_each(|b| b.sort_by(|c, d| h.get(d).cmp(&h.get(c)))); acc.sort_by(|c, d| h.get(d[0]).cmp(&h.get(c[0]))); acc }
215 名前:デフォルトの名無しさん [2024/02/02(金) 23:58:11.98 ID:Uk0I9chw.net] >>208 R https://ideone.com/FOwwk2
216 名前:デフォルトの名無しさん [2024/02/03(土) 02:58:35.44 ID:bEsWZIv5.net] >>208 Java https://paiza.io/projects/TzHsf-cnqzdxSASpwlgg_w
217 名前:デフォルトの名無しさん [2024/02/03(土) 10:26:51.46 ID:kmOXhk/V.net] >>208 >>215 Rでもっと短く書けた。 https://ideone.com/vmtYAJ
218 名前:9 mailto:sage [2024/02/04(日) 16:39:59.23 ID:jTY6zdRX.net] >>210 Perl5 use feature qw{:5.16 signatures}; no warnings qw(experimental::signatures); @s = qw[a1=a2 b1=b2 b3=b2 c1=c2 e1=e2 a3=a4 c3=c4 e1=e3 a2=a4 c3=c1 b3=a4 c2=d1 a4=a5 d2=c1 b4=b3 d3=c3]; for (map{[sort /(\w+)=(\w+)/]} @s) { ($l, $r) = @$_; $g{$r} //= $g{$l} //= $g{$r} // $l; $h{$g{$r}} = $g{$l} if $g{$l} ne $g{$r}; } $h{$k} = sub($e){$h{$e} ? __SUB__->($h{$e}) : $e}->($v) while ($k, $v) = each %h; $g{$_} = $h{$g{$_}} // $g{$_} for keys %g; push @{$r{$v}}, $k while ($k, $v) = each %g; say "@$_" for values %r; ※見易くするためインデントを全角スペースに置換してあります 実行結果 $ perl 22_206_grouping.pl b3 a3 a5 b4 a4 a1 b1 a2 b2 c1 d1 d3 c3 c2 d2 c4 e3 e1 e2
219 名前:9 mailto:sage [2024/02/04(日) 18:22:17.66 ID:jTY6zdRX.net] >>210 宛てじゃなかった >>208 の回答だったわ… orz
220 名前:デフォルトの名無しさん [2024/02/04(日) 18:32:39.04 ID:fS5H2fbQ.net] >>208 >>217 をPowerShellに移植 $in = "a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2", "a3=a4", "c3=c4", "e1=e3", "a2=a4", "c3=c1", "b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3" $in -split "=" |% {$h = @{}; $n = 0} {if (!$h[$_]) {$h[$_] = $n++}} $eq = $in |% {, $h[$_ -split "="]} $g = 1..$n do { $changed = $false $eq |% { $i, $j = $_ switch ($g[$i] - $g[$j]) { {$_ -gt 0} {$g[$i] = $g[$j]; $changed = $true} {$_ -lt 0} {$g[$j] = $g[$i]; $changed = $true} } } } while ($changed) $h.keys | sort {$h[$_]} | group {$g[$h[$_]]} |% {"[$($_.group -join ", ")]"} -- 実行結果 -- [a1, a2, b1, b2, b3, a3, a4, a5, b4] [c1, c2, c3, c4, d1, d2, d3] [e1, e2, e3]
221 名前:デフォルトの名無しさん [2024/02/04(日) 19:02:37.59 ID:fS5H2fbQ.net] >>220 の5行目の if (!$h[$_]) を if ($h[$_] -eq $null) に訂正
222 名前:デフォルトの名無しさん [2024/02/04(日) 19:43:39.57 ID:NiYs7EK6.net] >>208 C++ https://mevius.5ch.net/test/read.cgi/tech/1434079972/125 完全にやっつけ仕事、いろいろ課題がありますね
223 名前:211 mailto:sage [2024/02/04(日) 23:55:45.21 ID:ytAuzkvH.net] >>208 ruby https://ideone.com/2UiT8U ・>>213 から若干のアレンジ ・同一グループの収集にSortedSetを使用
224 名前:17 [2024/02/05(月) 02:54:15.12 ID:8tY/Vubv.net] >>208 Kotlin 入力データを標準入力から入力したり、クラス作ってその中でまとめる等、色々やって長くなった。 https://paiza.io/projects/zdysD5ygRDFVbY2gAGCwOw
225 名前:221 mailto:sage [2024/02/05(月) 20:08:21.07 ID:tt/WRhkt.net] >>208 ruby https://ideone.com/j2xPyB ・>>223 から若干のアレンジ ・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 a = a.map {|s| s.split('=').map {|k| h[k]}.to_set SortedSet} g.(a).map {|set| set.map &h.invert.method(:[])} }
226 名前:デフォルトの名無しさん [2024/02/05(月) 23:26:45.85 ID:YjqgZClx.net] >>208 >>220-221 をC#化 https://ideone.com/qWA5TB
227 名前:223 mailto:sage [2024/02/05(月) 23:51:15.55 ID:tt/WRhkt.net] >>208 rust https://ideone.com/Ma1WGV ・>>225 の移植 ・色々迷いアリ .map(|k| *h.get(k).unwrap())のところは当初 .map(|k| h.get(k).map(|&i| i)).flatten()などとしていたが 正解がわからないので迷った挙げ句に短く書けるほうを採用 ・これに限らずrustは不慣れなので色々珍妙なことをしている可能性アリ
228 名前:225 mailto:sage [2024/02/06(火) 22:07:13.88 ID:6T/Xuns0.net] >>208 rust https://ideone.com/m5INyJ ・>>227 から若干の修正 ・不必要なループ回数を訂正 ・二重forを一重に(でもかえって煩雑に) ・まだまだ迷いアリ .map(|k| *h.get(k).unwrap())は結局 .flat_map(|k| h.get(k)).cloned()に置き換え こっちのほうが個人的にはスッキリ感アリ >>208 rust https://ideone.com/hT5zGF ・上記のmutナシ版 ・パフォーマンス的な観点もナシ
229 名前:デフォルトの名無しさん [2024/02/06(火) 22:17:05.66 ID:ICpsP2hv.net] >>208 C#で>>226 とは別の解法 https://ideone.com/fvtgZa
230 名前:デフォルトの名無しさん [2024/02/09(金) 20:11:03.28 ID:xlZlW34G.net] >>208 C#でHashSet型を使用。実効速度は>>226 と>>229 より遅い。 https://ideone.com/cPsAYu
231 名前:226 mailto:sage [2024/02/09(金) 22:33:42.16 ID:JDB9tF7l.net] >>228 すべてruby移植版rust DでもE見た目派生まとめ mutあり版 https://ideone.com/m5INyJ // for if return https://ideone.com/R8wcOJ // match find https://ideone.com/ifI5EX // if let find mutなし版 https://ideone.com/hT5zGF // for if return https://ideone.com/1PNKbR // match find https://ideone.com/btKWb1 // if let find 集合同士の組み合わせに重なりが一個もなかったときに 最後に返す a がポツーンと片隅に居るのが落ち着かなかったので match/if letで書き直してみたがそれはそれで難があり? 条件部分が奥に入ってしまったのがなんかイヤだったり? 一行目が長くなりすぎる、という理由で二行に分けたり? やっぱ元のfor if returnのリズムのほうが眼球に入りやすい?
232 名前:デフォルトの名無しさん [2024/02/10(土) 22:10:46.31 ID:HaBtyH/G.net] >>208 >>229 をC++に移植 https://ideone.com/RgBBVA
233 名前:デフォルトの名無しさん mailto:sage [2024/02/11(日) 15:34:27.52 ID:3wEOIMb0.net] >>208 octave https://ideone.com/b2MsDk >>208 octave https://ideone.com/x6Lzmb
234 名前:デフォルトの名無しさん [2024/02/11(日) 20:38:42.50 ID:v64KP9lJ.net] >>208 >>232 をDで書くと https://ideone.com/9oenyq になるが、switch case 0, 1, 2の場合も3の場合と同じ処理にすると、効率は落ちるもののかなり短くできる。 https://ideone.com/ILLUdy
235 名前:223 mailto:sage [2024/02/12(月) 23:45:12.86 ID:ix8w7wd+.net] >>208 octave https://ideone.com/VtqJcV ・組み合わせつくって集合のペアごとに調べることをやめた ・集合間で重複する要素に着目して集合を減らすようにした >>225 g.(a).map {|set| set.map &h.invert.method(:[])}じゃなくて単に g.(a).map {|set| h.keys.values_at *set}で良かった
236 名前:デフォルトの名無しさん mailto:sage [2024/02/14(水) 09:32:06.19 ID:JjlrBdlD.net] お題:数値が入力されるのでその数値に最も近い回分数を出力せよ 回分数とは回分になっている数(負数含まず)のことである 最も近い回分数が2つある場合は2つとも出力せよ 入力 0 出力 0 入力 17 出力 22 入力 100 出力 99 出力 101
237 名前:デフォルトの名無しさん [2024/02/14(水) 15:20:24.32 ID:VoM/Kva2.net] >>236 lisp https://ideone.com/MvDoGf
238 名前:デフォルトの名無しさん mailto:sage [2024/02/14(水) 21:10:48.99 ID:/8p4lTpf.net] >>236 ocaml https://ideone.com/4RtyBj >>236 rust https://ideone.com/eLCvSJ
239 名前:デフォルトの名無しさん [2024/02/14(水) 23:21:42.28 ID:iTsk+dOj.net] >>238 PowerShell https://ideone.com/voA7MH
240 名前:デフォルトの名無しさん mailto:sage [2024/02/15(木) 21:30:35.17 ID:MveN6p4/.net] >>236 Rust fn foo(n: usize) -> (usize, Option<usize>) { let n2b = |n: usize| { let mut o = Some(n); iter::from_fn(|| { let n = o.take()?; o = (n >= 10).then(|| n / 10); Some((n % 10) as i8) }).collect::<Vec<i8>>() }; let b2n = |b: &[i8]| b.iter().rev().fold(0_usize, |n, b| n * 10 + *b as usize); let pal = |b: &mut [i8]| { let len = b.len() / 2; let (l, u) = b.split_at_mut(len); iter::zip(l, u.iter().rev()).for_each(|(l, u)| *l = *u); }; let inc = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b += c; if *b > 9 { *b = 0; c = 1; } else { c = 0; }}); }; let dec = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b -= c; if *b < 0 { *b = 9; c = 1; } else { c = 0; }}); }; let fix = |b: &mut [i8]| { if b.last() == Some(&0) { if b.len() & 1 == 0 { b[(b.len() - 1) / 2] = 9; } true } else { false } }; let mut b = n2b(n); pal(&mut b); let n1 = b2n(&b); match n.cmp(&n1) { Ordering::Equal => return (n, None), Ordering::Greater => inc(&mut b), Ordering::Less => dec(&mut b), } if fix(&mut b) { b.pop(); } pal(&mut b); let n2 = b2n(&b); match n.abs_diff(n1).cmp(&n.abs_diff(n2)) { Ordering::Less => (n1, None), Ordering::Greater => (n2, None), Ordering::Equal => (n1, Some(n2)), } }
241 名前:デフォルトの名無しさん [2024/02/15(木) 22:00:50.95 ID:fu0tHwRa.net] >>236 >>239 は入力が1〜9のとき出力が正しくなかった。function内の1行目に if ($n -le 9) {return $n} を 挿入すると修正される。 Rでは添字の開始値は1で添字0では空のデータが返るので、入力が1〜9のときの場合分けは不要。 []演算子と+演算子を文字列でも使えるように再定義した。 https://ideone.com/PP5swB Dでは添字範囲指定は半開区間なので、入力が1〜9のときの場合分けは不要。 https://ideone.com/hvNBia
242 名前:デフォルトの名無しさん mailto:sage [2024/02/15(木) 23:18:01.58 ID:IMdr4idU.net] >>236 c https://ideone.com/mWihci
243 名前:9 mailto:sage [2024/02/16(金) 02:56:10.41 ID:7jtCAGu+.net] >>236 Perl5 for $n (0,17,100,123459321) { my %a; for (0..$n) { $i = $n - $_; $a{$i} = $i if 0 <= $i and $i =~ /^((\d)(?1)\2|\d?)$/; $j = $n + $_; $a{$j} = $j if $j =~ /^((\d)(?1)\2|\d?)$/; last if keys %a; } @a = keys %a; print "$n -> @a\n"; } ※見やすくするためインデントを全角スペースに置換してあります。 実行結果 $ perl 22_234_palindromic_number.pl 0 -> 0 17 -> 22 100 -> 99 101 123459321 -> 123464321 123454321
244 名前:9 mailto:sage [2024/02/16(金) 03:13:10.80 ID:7jtCAGu+.net] >>243 last if keys %a; } @a = keys %a; は last if @a = keys %a; } とコンパクトに書けるんだった、まぁいいや
245 名前:9 mailto:sage [2024/02/16(金) 14:47:55.29 ID:TIAwaOOw.net] >>236 Perl5、小さい方の検索は0で止まるので負の値を避ける必要はなかった、書き直し。 $r = qr/^((\d)(?1)\2|\d?)$/; for $n (0,17,100,123459321) { my %a; for (0..$n) { $a{$n - $_} = 1 if ($n - $_) =~ $r; $a{$n + $_} = 1 if ($n + $_) =~ $r; last if @a = keys %a; } print "$n -> @a\n"; }
246 名前:デフォルトの名無しさん mailto:sage [2024/02/16(金) 21:57:03.19 ID:cLyPSkE5.net] >>236 pascal https://ideone.com/F1gAKR
247 名前:17 [2024/02/16(金) 23:58:17.22 ID:C4FuIAno.net] >>236 Kotlin 何か画期的なアルゴリズムを使ったわけではなく、むしろほとんど何も考えずただ作られただけのプログラム。 https://paiza.io/projects/S5qsLnHz_pZD3um9jYRg_Q
248 名前:9 mailto:sage [2024/02/17(土) 02:10:36.54 ID:K8P5qDCx.net] >>236 Python3 def f(k): s = str(k) return s == s[::-1] for n in [0, 17, 100, 123459321]: l = set() for i in range(n + 1): if f(n - i): l.add(n - i) if f(n + i): l.add(n + i) if l: print(n, l) break ※見易くするためインデントは全角空白に置換してあります 実行結果 $ python3 22_234_palindromic_number..py 0 {0} 17 {22} 100 {99, 101} 123459321 {123454321, 123464321}
249 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 18:14:20.87 ID:nUY+CX2J.net] >>236 pascal https://ideone.com/kRXq6z ・dynamic array 使用
250 名前:デフォルトの名無しさん [2024/02/17(土) 19:03:53.65 ID:eWGoJOTY.net] >>236 C++ https://mevius.5ch.net/test/read.cgi/tech/1434079972/126
251 名前:デフォルトの名無しさん [2024/02/17(土) 20:00:17.98 ID:k6cg1rdP.net] >>236 >>241 のC#版 https://ideone.com/glAEMw Julia版 https://ideone.com/cbP5Dm
252 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 20:51:00.88 ID:nUY+CX2J.net] >>236 octave https://ideone.com/MXux5X
253 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 21:45:58.19 ID:nUY+CX2J.net] >>236 ruby https://ideone.com/0pvK4o
254 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 17:05:41.93 ID:z028saCP.net] >>253 >[[0, [0]], [17, [11]], [100, [99, 101]]] 17 は、22 だよ
255 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 18:14:23.24 ID:puttXdr1.net] >>237 しらみ潰しで失格 >>238 しらみ潰しで失格 >>242 しらみ潰しで失格
256 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 18:14:51.62 ID:puttXdr1.net] >>245 しらみ潰しで失格 >>246 しらみ潰しで失格 >>247 しらみ潰しで失格
257 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 18:15:27.81 ID:puttXdr1.net] >>248 しらみ潰しで失格 >>249 しらみ潰しで失格 >>250 しらみ潰しで失格
258 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 18:16:03.57 ID:puttXdr1.net] >>252 しらみ潰しで失格 >>253 しらみ潰しで失格
259 名前:デフォルトの名無しさん [2024/02/18(日) 18:26:09.28 ID:ovKjFpQ6.net] >>255-258 アスペで不合格w
260 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 18:34:19.30 ID:rWy6ZYAH.net] >>236 ruby https://ideone.com/N0w91j f = -> n { (0..n).lazy.map {|i| [n - i, n + i].select {|x| x.to_s.reverse.to_i == x}}.find(&:any?).uniq } >>254 (`・ω・´)ゞ 誤:a - 1, a + 1 正:a - 1, b + 1
261 名前:デフォルトの名無しさん mailto:sage [2024/02/18(日) 19:41:35.69 ID:rWy6ZYAH.net] >>236 dart https://ideone.com/e23wRv void main() { var rev = (n) => int.parse(n.toString().split('').reversed.join()); var f = (n) => Iterable.generate(n + 1).map((i) => [n - i, n + i].where((x) => x == rev(x))).firstWhere((a) => a.isNotEmpty).toSet().toList(); print([0, 17, 100].map((n) => [n, f(n)])); }
262 名前:デフォルトの名無しさん [2024/02/20(火) 08:46:37.56 ID:8US2zplP.net] 【㋮㋑㋣㋹㊀㋳】 チャールズ3世戴冠式に`死神´ https://rio2016.5ch.net/test/read.cgi/kokusai/1690352002/l50 sssp://o.5ch.net/22ja8.png
263 名前:17 [2024/02/20(火) 10:47:13.25 ID:YmH8jdAc.net] >>256 しらみ潰しって、どんなテストしたの?
264 名前:デフォルトの名無しさん mailto:sage [2024/02/20(火) 12:59:46.62 ID:qzcGLGiS.net] しらみ潰しとは例えば1から順番に見つかるまで全てを試していく最悪な方法を指す 今回の場合だと与えた数から順番に見つかるまで±1を続けて全てを試していって探すプログラムが該当する
265 名前:9 mailto:sage [2024/02/20(火) 17:18:07.59 ID:X5uoFLgg.net] 「どんなテストしたの?」 って質問だよ
266 名前:◆QZaw55cn4c [2024/02/20(火) 20:48:17.02 ID:RtAsHDVN.net] >>264 私は >>250 だけれども、解法としてはそれしかないと思いますね
267 名前:デフォルトの名無しさん mailto:sage [2024/02/20(火) 22:00:55.76 ID:e+y9lgSN.net] >>251 と >>240 は しらみ潰しではなく きちんとプログラミングして算出しているようにみえますね
268 名前:デフォルトの名無しさん mailto:sage [2024/02/21(水) 13:54:29.89 ID:ve9Dz9D8.net] >>266 私は解答は提出していないが、ざっくりと自分が思いついた方法 まず、以下のような操作を考える A. 1234という入力に対して1234321を返す B. 1234という入力に対して12344321を返す ここで、xという入力に対してA,Bが返す数をA(x),B(x)と表すことにする 次に、与えられた数の桁数で場合分け (1)与えられた数字の桁数が奇数の場合 例として5桁の数字を考える N=a*10000+b*1000+c*100+d*10+e*1 (a~eは1桁の自然数, aは0でない) が与えられたとき、 M=a*100+b*10+c*1 とすると、N=10000の場合を除いて、Nに最も近い回文数は A(M), A(M+1), A(M-1) の3つの候補に絞られる(厳密にはA(M)とNとの大小比較からA(M±1)の何れかは明らかに候補にならないので2つを考えれば良い) N=10000の場合は9999と10001が答え (2)与えられた数の桁数が偶数の場合 例として6桁の数を考える (1)と同様に N=a*100000+b*10000+c*1000+d*100+e*10+f*1 に対して M=a*100+b*10+c*1 とすると、N=100000の場合を除いて B(M), B(M+1), B(M-1) のどれかがNに最も近い回文数(厳密には以下略) N=100000の場合は99999と100001が答え 十分大きな数に対しては虱潰しに回文判定していくより速く求まる
269 名前:デフォルトの名無しさん [2024/02/21(水) 16:02:55.06 ID:Sko4Sglv.net] >>268 N=17 のときは?
270 名前:259 mailto:sage [2024/02/21(水) 23:06:20.13 ID:DX/jvS2m.net] >>261 Iterable.generate(n).map(f)は単に Iterable.generate(n, f)で良かったと判明
271 名前:デフォルトの名無しさん [2024/02/21(水) 23:42:23.78 ID:bqTl0uQM.net] >>236 >>251 をC++で書き換え(入力値は64ビット整数の範囲内限定) https://ideone.com/e1AM8A 元々はCで書き、4行目はなし、15行目と24行目はstrrev(s + i);だったが、Windowsのgccでは コンパイルできたのにideoneではできなかったので、仕方なくC++にしてstd::reverseで代用した。
272 名前:デフォルトの名無しさん [2024/02/22(木) 00:34:50.13 ID:+mJgzEZf.net] >>236 lisp >>268 を参考に>>251 (C#)を移植 https://ideone.com/CUPTas
273 名前:デフォルトの名無しさん mailto:sage [2024/02/22(木) 01:30:35.61 ID:9s07Ijs0.net] >>236 Rust fn nearest_palindrome_numbers(n: usize) -> Vec<usize> { let mut dd = DecimalDigits::new(n); dd.palindrome_using_upper_half(); let n1 = dd.to_number(); match compare(n, n1) { Equal => return vec![n], Greater => dd.increment_upper_half(), Less => dd.decrement_upper_half(), } if dd.is_most_upper_zero() { return vec![n - 1, n + 1]; } dd.palindrome_using_upper_half(); let n2 = dd.to_number(); match compare_absolute_diff((n, n1), (n, n2)) { Less => return vec![n1], Greater => return vec![n2], Equal => return if n1 < n2 { vec![n1, n2] } else { vec![n2, n1] }, } }
274 名前:266 mailto:sage [2024/02/22(木) 01:47:44.56 ID:c61GBvnr.net] >>269 N=17=1*10+7*1のとき、Nは2桁(偶数桁)でM=1*1=1 B(M)=B(1)=11はNより小さいのでB(M-1)は考えなくてよい B(M+1)=B(2)=22なので11,22が答えの候補 11より22のほうが17に近いので22が答え ちょっとNに対するMの説明が足りてなかったけど言葉で上手く言い表せないすみません(上位半分以上かつ最小の桁数を抜き出す、的な)
275 名前:デフォルトの名無しさん mailto:sage [2024/02/22(木) 20:54:45.16 ID:+nyM4OV5.net] >>236 ruby https://ideone.com/rJCYgT ・それっぽい三個の候補から選んでるだけ
276 名前:デフォルトの名無しさん [2024/02/22(木) 21:04:16.48 ID:3p8Kt6H4.net] >>236 >>271 の一部でC++の機能をどうせ使ってしまったので、この際、全部をC++流に変えたら C流よりすっきり書けた。 https://ideone.com/38bo2E
277 名前:273 mailto:sage [2024/02/22(木) 21:48:36.22 ID:+nyM4OV5.net] >>275 > [1000, [1001]] 誤:ps = [p.(s), p.(t.to_i.pred.abs.to_s + u), p.(t.succ + u)] 正:ps = [p.(s), p.(t.to_i.pred.abs.to_s + u), p.(t.succ + u), p.(s.to_i.pred.abs.to_s)] とりあえず雑に修正してみたが? (ノ∀`)アチャー
278 名前:17 [2024/02/23(金) 18:10:28.85 ID:ZR6D6MGM.net] >>264 >>247 のKotlinのプログラムは何も考えてなくて本当に馬鹿正直に±1して一つ一つ検査する方式で作ったんだけど、それでもあなたのテストではダメということになったの? まあ Int (符号付32bit整数) 使ってるからその限界超えたらダメではあるんだけど、そういう問題ではなく?
279 名前:デフォルトの名無しさん mailto:sage [2024/02/23(金) 18:58:34.05 ID:9Umf93zL.net] >>278 それはしらみつぶしと言われる駄目プログラミングだよ 例えば求める解法が存在する方程式を解くのに値を±1しながら順に代入して試していくのと同じ
280 名前:デフォルトの名無しさん [2024/02/23(金) 21:39:34.55 ID:ZR6D6MGM.net] >>279 あー。プログラムにバグがあってまともに答えが出ないっていうことではなく何の捻りもないプログラムだからダメっていう感想ね。それならわかる。 こちらもアルゴリズム思い浮かばないけどとりあえず作ってみただけだし。ダメというほどではないが良いとも思えないプログラムなので。
281 名前:273 mailto:sage [2024/02/23(金) 23:06:54.56 ID:RzwC5Hr4.net] >>236 ruby https://ideone.com/E9VSE3 ・273の[1000, [1001]]バグ修正版 ・275とは違う方法で修正してみたがやっつけ感大 >>236 ruby 2.5.5 https://ideone.com/1zqSr1 ・いわゆる(?)ジェネレータ版 ・「終端を持たない範囲オブジェクト」はRuby 2.6.0から
282 名前:デフォルトの名無しさん mailto:sage [2024/02/24(土) 00:25:03.27 ID:f2xn4abB.net] >>236 Ruby https://paiza.io/projects/2G8vPQJQOBZecXPD5ZIFTQ?language=ruby
283 名前:279 mailto:sage [2024/02/24(土) 13:21:16.94 ID:aSUCvHSH.net] >>236 ruby 2.5.5 https://ideone.com/04fxGM ・ジェネレータ版ちょっとアレンジ ・to_sしてto_iするのをやめた
284 名前: mailto:sage [2024/02/24(土) 14:25:41.40 ID:NZEL8Kud.net] 異なる自然数 a, b (a > b) における a^3 - b^3 を「a, b の三乗差」と呼ぶことにする。 異なる5通りの組(a, b) (c, d) ... (j, k) について三乗差がすべて相等しいとき その組(a, b)...(j, k) および三乗差自体を求めよ 異なる6通りの組で三乗差が相等しい場合があるかも検討せよ
285 名前:デフォルトの名無しさん [2024/02/24(土) 16:47:38.19 ID:KRWvIUHe.net] >>284 [(1134, 357), (1155, 504), (1246, 805), (2115, 2004), (4746, 4725)] a^3 - b^3 == 1412774811
286 名前:17 [2024/02/24(土) 16:52:08.36 ID:Pf8MFN4C.net] 数学、か・・・
287 名前:デフォルトの名無しさん mailto:sage [2024/02/24(土) 18:16:29.01 ID:O6Cw1j13.net] >>284 ruby https://ideone.com/wBX9Rs ・そのまま版 ・5秒じゃ_
288 名前:デフォルトの名無しさん [2024/02/24(土) 20:03:55.52 ID:mNVJyIZh.net] >>236 >>276 を巨大整数対応にした。 https://ideone.com/Hg3kGJ
289 名前:デフォルトの名無しさん [2024/02/24(土) 22:30:55.28 ID:mNVJyIZh.net] >>284 aが5000以下限定で>>285 の解はRで5秒以内に求められた。8〜9行目は下三角行列の要素番号から 行番号と列番号を求めているだけで、>>284 を解く特別なアルゴリズムというわけではない。 https://ideone.com/w4X3DC
290 名前:285 mailto:sage [2024/02/25(日) 08:52:58.18 ID:M1xmyD2F.net] >>284 ruby 2.5.5 https://ideone.com/4GdMaO ・285の無駄なループ回数を削減 ・でも5秒じゃ_
291 名前:デフォルトの名無しさん [2024/02/25(日) 21:06:57.77 ID:CUQUyFSy.net] >>284 >>289 は下三角行列の要素番号から列番号を求めるのに2次方程式を解くのが分かりにくかったから、 各列の最下行の要素番号を計算しておいてそれを二分探索するように変更した。 https://ideone.com/Tefgkh n = 25000で実行してみても、n = 5000ときの解のa, bを両方とも2, 3, 4, 5倍した解しか別に 見つからなかった。
292 名前:デフォルトの名無しさん [2024/02/26(月) 22:18:39.21 ID:CjcYgBx5.net] >>284 >>291 と似た手順でC++ https://ideone.com/nFRsrK Rではソートする前に重複値だけを抽出しているが、C++のunique関数はソート済みデータにしか 使えないので使っていない。
293 名前:288 mailto:sage [2024/02/27(火) 21:45:30.42 ID:nu8aoj+0.net] >>284 c https://ideone.com/eM18H1 ・288の移植
294 名前:デフォルトの名無しさん [2024/02/27(火) 22:30:42.88 ID:BJV11H6M.net] >>284 下三角行列の各列内の要素は昇順で既に並んでいるのに、>>292 は下三角行列の全要素を ソートして無駄なので、列のマージに変更(要するにマージソートを途中段階から開始) したら少し速くなった。 https://ideone.com/EZSvB3 n = 10000でも5秒以内に終わった。 https://ideone.com/huQiBe
295 名前:288 mailto:sage [2024/02/28(水) 22:00:05.18 ID:7ZY4TL6q.net] >>284 c++ https://ideone.com/teo5Mm ・288の移植 >>284 rust https://ideone.com/G94aN3 ・288の移植
296 名前:デフォルトの名無しさん [2024/02/28(水) 23:21:09.16 ID:FCtvUtiC.net] >>284 >>294 とは別の方法で>>292 を高速化 https://ideone.com/QxjmyT 1³, 2³, 3³, …, 5000³をD = 5001で割った余りはすべて異なる値になるから、d = a³ − b³を Dで割った余りはどれか1つの値に偏ることなく均等に分布する。dをDで割った余りによりdを 区分すれば、各区分に入る個数はどれも多すぎないのでソートに時間が余りかからない。 Dの値はconstexpr関数によりコンパイラに計算させている。n = 10000, 15000のときは それぞれD = 10002, 15009になる。
297 名前:291 mailto:sage [2024/02/29(木) 22:20:45.85 ID:HlaTo1dC.net] >>284 c https://ideone.com/JnJpJW ・291から省メモリ化 旧:unsigned int values[10]; 新:unsinged short values[4];
298 名前:デフォルトの名無しさん [2024/03/01(金) 22:22:26.10 ID:6k2oCbjk.net] >>284 C++ https://ideone.com/1c4s5I >>296 はa, bの二重ループ内でa³ − b³をD = 5001で割った余りrにより区分していたが、 rのループ内でa, bを変化させるように変更したら、2次元配列がなくなってすっきりした。 その結果、メモリ使用量が激減し、nが大きい場合でも実行できるようになった。
299 名前:デフォルトの名無しさん [2024/03/01(金) 22:23:18.03 ID:6k2oCbjk.net] >>298 の続き n = 1000000, m = 6で実行すると、12通りの解が見つかった。 [6つ組解] 424910390480793: (75978, 23919), (77385, 33768), (83482, 53935), (141705, 134268), (317982, 316575), (596001, 595602) 620174235433536: (86184, 27132), (87780, 38304), (90237, 48573), (94696, 61180), (160740, 152304), (360696, 359100) 1238805803151000: (107487, 14487), (108540, 34170), (110550, 48240), (119260, 77050), (454260, 452250), (851430, 850860) 1384074844012224: (112152, 29844), (125324, 83600), (130050, 93426), (159372, 138624), (224928, 215412), (357447, 353799) 1936290882196125: (127629, 52254), (133320, 75675), (149285, 111620), (228525, 215430), (246510, 235395), (290214, 282339) 4589726535576000: (170172, 69672), (177760, 100900), (185265, 120945), (304700, 287240), (328680, 313860), (386952, 376452) 4961393883468288: (172368, 54264), (175560, 76608), (180474, 97146), (189392, 122360), (321480, 304608), (721392, 718200) 11072598752097792: (224304, 59688), (250648, 167200), (260100, 186852), (318744, 277248), (449856, 430824), (714894, 707598) 36717812284608000: (340344, 139344), (355520, 201800), (370530, 241890), (609400, 574480), (657360, 627720), (773904, 752904) 52279853819295375: (382887, 156762), (399960, 227025), (447855, 334860), (685575, 646290), (739530, 706185), (870642, 847017) [7つ組解] 15490327057569000: (249281, 6281), (255258, 104508), (266640, 151350), (298570, 223240), (457050, 430860), (493020, 470790), (580428, 564678) 123922616460552000: (498562, 12562), (510516, 209016), (533280, 302700), (555795, 362835), (597140, 446480), (914100, 861720), (986040, 941580) 6つ組解の(2, 7), (4, 8), (5, 10), (6, 9)番目は各括弧内で自然数比になっている。 6つ組解の5番目の2倍は7つ組解の1番目のうちの6組を構成している。
300 名前:デフォルトの名無しさん [2024/03/01(金) 22:24:42.81 ID:6k2oCbjk.net] >>284 C++ https://ideone.com/tM1cuo >>298 のrのループ内でa³ − b³をD2 = 5003で割った余りr2により区分し、それぞれの区分ごとに 解を探すようにしたら速くなった。ただし、nが大きい場合にはかえって遅くなる。
301 名前: [2024/03/03(日) 19:08:39.58 ID:75HCbpT6.net] >>299 出題者です。 すごいです。ありがとうございます。私の手元ではまだ6通り解、7通り解のひとつも入手できていないので、参考になりました 私のアルゴリズムは効率が悪いようですね
302 名前:デフォルトの名無しさん [2024/03/03(日) 22:19:54.92 ID:ZEDvt9uH.net] >>284 C++ https://ideone.com/LEU7EV >>300 でnを大きくするにつれ>>298 に対する高速化効果が薄れていくのは、ABをvectorでなく 配列にしたらある程度改善された。n = 5000のときの実行時間は>>298 の半分以下になった。 ただし、n = 1000000まで大きくすると、296よりやっぱり遅くなる。 >>301 どんなプログラムを書いたのか見せて。
303 名前:デフォルトの名無しさん [2024/03/06(水) 22:35:52.23 ID:lIZep5aT.net] >>284 C++ https://ideone.com/PG6UiY >>302 の実行時間を分析すると、最も時間が掛かっているのは46〜と47行目だと判明した。 そこで配列ABの第1次元と第2次元を入れ替えてみると、n = 5000では変わらないが、 1万, 2万, 5万, 10万, 20万では35%前後高速になった。これは、改良前には第2次元の添字が 小さい要素に書き込みが集中しているため、改良後のように第1次元に入れ替えた方が 纏まったメモリ領域に書き込みが集中しキャッシュの効きが良くなるからだと考えられる。 一方、n = 100万で高速化しないのは、書き込み集中領域が大きすぎるからだろう。 https://ideone.com/6RzW0n n = 100万の場合にはr2の値によってデータを多数の列へ振り分けるのをやめ、列を1つにして、 その内部でr2の値により2種類に区分し、それぞれの内部で2種類にさらに区分し、…と再帰的に 区分していけば(要するにクイックソートの変形版)、1つの配列内での要素のスワップだけで済み、 キャッシュの効きが改善されるとの予想通り、n = 100万で実行速度は>>298 より25%速くなった。 (原理的には>>302 より非効率なのでn = 5000では>>302 より当然遅い)
304 名前:デフォルトの名無しさん mailto:sage [2024/03/08(金) 19:02:53.21 ID:oHHhAfhn.net] >>303 ハズレが多いから2passは効果ある?
305 名前:デフォルトの名無しさん [2024/03/09(土) 22:13:47.64 ID:C74EWG6S.net] >>284 C++ https://ideone.com/xQD1W8 関数mainのループで配列A, B, Pに書き込まずdにだけ書き込むようにし、関数FindDuplicatesで dの添字Pではなくdそのものをソートするように変えて、n = 1000000の場合に>>303 より10%高速化。 関数PrintSolutionでa, bをmainでと同じ方法で再計算するのは非効率だが、PrintSolutionは僅か12回しか 呼ばれないため、全体の実行時間への影響は無視できる。
306 名前:デフォルトの名無しさん mailto:sage [2024/03/09(土) 22:47:01.30 ID:v99WCN19.net] お題 460円 580円 600円 の3種類の商品があります これらを組み合わせて合計10個買ったら5360円になりました 組み合わせを求めるプログラムを書いてください ちなみに答えの一つは ・600円×2 ・580円×4 ・460円×4 だそうです https://rio2016.5ch.net/test/read.cgi/cigaret/1706726196/56-57
307 名前:デフォルトの名無しさん [2024/03/09(土) 23:59:51.39 ID:C74EWG6S.net] >>306 面倒なのでRで全探索 https://ideone.com/vrtYvk
308 名前:デフォルトの名無しさん mailto:sage [2024/03/10(日) 01:20:18.65 ID:8NU5B5F+.net] >>306 面倒なので全て460円を引くと A=0円 B=120円 C=140円 10個で760円という問題 面倒なのでさらに20で割ると A=0円 B=6 C=7円 10個で38円という問題 つまり唯一奇数のCは偶数個が確定 Cが6個以上だと42円以上でオーバーしてNG Cが4個だと28円で残り10円をA,Bで作れないからNG Cが2個だと14円で残り24円はBが4個で残り4個がA Cが0個だと0円で残り38円をA,Bで作れないからNG つまり解は(A,B,C)=(4,4,2)しかない
309 名前:デフォルトの名無しさん [2024/03/10(日) 11:20:30.42 ID:Doj9A/yB.net] >>308 すごすぎるだろ、日本の未来を頼む
310 名前:デフォルトの名無しさん [2024/03/10(日) 19:06:13.20 ID:qBLPZ6x8.net] >>306 Rで全探索でなくちゃんと解くと https://ideone.com/F44pCL 解が複数ある場合と全くない場合の例として、600円を540円と520円に変更したときの出力も載せた。
311 名前:デフォルトの名無しさん mailto:sage [2024/03/10(日) 20:08:55.20 ID:6qxPF4Wx.net] 2pass案は多少工夫したらかなり速い n ␣␣m ␣296␣ ␣301-1 ␣301-2 ␣303␣ ␣2pass 5k␣␣5 ␣ 0.5s ␣ 0.1s ␣ 0.5s ␣ 0.4s ␣ 0.1s 25k ␣5 ␣12.7s ␣ 2.5s ␣13.9s ␣11.1s ␣ 1.7s 100k␣5 ␣3m52s ␣49.3s ␣4m13s ␣3m26s ␣38.9s 1M* ␣6 ␣8h23m ␣2h50m ␣8h51m ␣6h43m ␣1h11m *n=100万は1万サンプルの部分ループ500k≦r<510kから100倍 >>303 の296と301-2の比較記述と違う傾向があるのはキャッシュ階層の違いだと思う 2passは301-1に近いけど1pass目でのランダムアクセスサイズを落としながらも 誤判定率を低く抑える(0.2%~2%)工夫をするのがお楽しみだと思う
312 名前:デフォルトの名無しさん mailto:sage [2024/03/14(木) 14:43:15.33 ID:ZraPd1+Q.net] t
313 名前:デフォルトの名無しさん mailto:sage [2024/03/27(水) 23:42:08.75 ID:sRZ89+IF.net] >>306 a = (600, 580, 460) m = min(a) h = set() def buy(b, yen): if yen < m: return for i in range(0, len(a)): v = a[i] if yen >= v: b[i] += 1 if yen == v: h.add(str(b)) else: buy(b, yen - v) b[i] -= 1 buy([0, 0, 0], 5360) for s in h: print(s)
314 名前:デフォルトの名無しさん [2024/03/27(水) 23:55:15.74 ID:qNf/D02g.net] >>306 Haskell [(a, b, c) | a <- [0..20], b <- [0..20], c <- [0..20], a * 460 + b * 580 + c * 600 == 5360] output: [(0,2,7),(4,4,2)]
315 名前:デフォルトの名無しさん [2024/03/28(木) 00:00:41.99 ID:0Zoa9Vsx.net] 合計10個という条件忘れてた。 [(a, b, c) | a <- [0..20], b <- [0..20], c <- [0..20], a + b + c == 10, a * 460 + b * 580 + c * 600 == 5360] output: [(4,4,2)]
316 名前:デフォルトの名無しさん mailto:sage [2024/03/31(日) 11:57:53.31 ID:enek7T1c.net] 大幅に手直しした 特に前回数値が一部出てこない状態になっていたので色々と手動で最適化した 新しいアイディアを思いつかない限りはシングルスレッドでの限界に近いと思う n m 301-1 303 2pass 2pass' 5k 5 0.1s 0.4s 0.1s 0.1s 25k 5 2.5s 11.1s 2.3s* 1.7s 100k 5 49.3s 3m26s 38.9s 27.7s 1M* 6 2h50m 6h43m 1h11m 48m10s 2M* 6 17h06m 28h27m 5h47m 3h13m Max* 6 35h51m 51h23m 11h09m 5h47m *前回>>311 2pass n=25kの再計測値 *n=1Mは部分ループ500k<=r<510kから100倍 *n=2Mは部分ループ500k<=r<505kから400倍 *Max:=2642245は3乗がUINT64に収まる最大 *n=Maxは部分ループ500k<=r<500k+3785から2642245/3785倍 ヒント含みの数値がこちら n D1 D2 D3 = 5000 5001 5003 5009 false_positive = 23 / 5001 = 0.46% total_t_pass1 = 64.220 ms 2.568 ns/iter total_t_pass2 = 0.044 ms 0.381 ns/iter real 0m0.097s
317 名前:デフォルトの名無しさん mailto:sage [2024/03/31(日) 11:58:50.32 ID:enek7T1c.net] n D1 D2 D3 = 25000 25003 25005 25006 false_positive = 171 / 25003 = 0.68% total_t_pass1 = 1654.681 ms 2.647 ns/iter total_t_pass2 = 1.407 ms 0.329 ns/iter real 0m1.709s false_positive = 2211 / 100005 = 2.21% total_t_pass1 = 27338.298 ms 2.734 ns/iter total_t_pass2 = 78.402 ms 0.355 ns/iter real 0m27.692s n D1 D2 D3 = 1000000 1000002 1000009 1000015 false_positive = 18 / 10000 = 0.18% total_t_pass1 = 28674.338 ms 2.867 ns/iter total_t_pass2 = 5.642 ms 0.313 ns/iter real 0m28.897s n D1 D2 D3 = 2000000 2000003 2000013 2000015 false_positive = 13 / 5000 = 0.26% total_t_pass1 = 28777.424 ms 2.878 ns/iter total_t_pass2 = 8.620 ms 0.332 ns/iter real 0m29.015s n D1 D2 D3 = 2642245 2642246 2642253 2642258 false_positive = 315 / 3785 = 8.32% total_t_pass1 = 29210.857 ms 2.921 ns/iter total_t_pass2 = 336.864 ms 0.405 ns/iter real 0m29.800s
318 名前:デフォルトの名無しさん [2024/03/31(日) 22:30:39.09 ID:4FIGx2uN.net] >>306 ぶっちゃけ、他の言語の人と同じっぽくないので心配なんだが…。 自分なりにHaskellで全探索じゃないバージョン書いてみた。 Haskell [(a, b, c) | a <- [0..10], b <- [0..10 - a], c <- [0..10 - (a + b)], a * 460 + b * 580 + c * 600 == 5360, a + b + c == 10] 答えは同じ[(4,4,2)]。
319 名前:デフォルトの名無しさん mailto:sage [2024/04/01(月) 04:52:23.91 ID:iTC1bSa8.net] 少し一般化して、N個の商品があり、i番目の商品はA_i円です 合計M個購入し、価格の合計がS円であるような購入の仕方を998244353で割った余りを求めてください だとO(N M S)より小さい計算量で解けるのかな
320 名前:デフォルトの名無しさん mailto:sage [2024/04/01(月) 16:50:08.47 ID:0Kkx57P3.net] 2個、4個、8個…みたいにメモ化すればMはlogMにできるかもしれんね 空間がlogM倍されそうだが
321 名前:デフォルトの名無しさん [2024/04/13(土) 11:43:17.27 ID:itq2kjOw.net] ヘロンの公式を実装せよ 使用言語:C
322 名前:17 [2024/04/13(土) 16:57:10.76 ID:SxW/5mRR.net] >>321 https://paiza.io/projects/_ZdSzHtV9YdEzV-oOySQWQ Wikipedia でヘロンの公式を調べてそのまま実装しただけで、ほとんど何も考えてない。
323 名前:デフォルトの名無しさん [2024/04/13(土) 23:01:22.75 ID:wFZkrOeZ.net] >>321 https://ideone.com/YCi6qe ヘロンが作ったもう1つの式である平方根を加算と除算の繰り返しで求める式も使用。 sqrt関数を呼び出すより実行形式ファイルサイズがほんの少しだけ小さくなる。
324 名前:デフォルトの名無しさん mailto:sage [2024/04/14(日) 00:59:32.83 ID:ujzJ2+0Y.net] >>323 無限ループにならない? 機械イプシロン(DBL_EPSILON)とか気になる
325 名前:デフォルトの名無しさん [2024/04/14(日) 18:34:21.49 ID:MHeAinLP.net] 解答例 #include <stdio.h> #include <math.h> void heron(double, double, double); int main(void) { double a, b, c; printf("3辺a, b, cを入力せよ "); scanf("%lf,%lf,%lf", &a, &b, &c); heron(a, b, c); } void heron(double x, double y, double z) // heronの定義 { double s, t; s = (x+y+z)*0.5; t = s*(s-x)*(s-y)*(s-z); printf("3角形の面積は S=%g\n", sqrt(t)); return; }
326 名前:デフォルトの名無しさん [2024/04/14(日) 18:36:52.16 ID:MHeAinLP.net] >>323 さすがですね
327 名前:デフォルトの名無しさん [2024/04/15(月) 21:01:04.41 ID:dSNEYg5r.net] >>324 p < 0 のとき(= 三角形を作れない場合)は浮動小数点数の特性に関係なく無限ループになる。 sqrt(p) と同様にNANを返すには、if (p < 0) return 0 / (p - p); を追加すれば良い。 p > 0 のときは無限ループにならないはず。以下が検証プログラム。 https://ideone.com/mzemEM x = sqrt(p), y = p / x とすると、浮動小数点数の特性により x == y とならない場合は存在する。 このとき、xとyの仮数部を整数と見なした値(以降では「仮数整数」と呼ぶ)の差は1なので、 z = (x + y) / 2 はxとyのうち仮数整数が偶数の方に一致する。zを新たなxとして代入しyとzを 再計算すれば、今度はxの仮数整数が偶数なのでzはxに必ず一致し、>>323 の収束判定条件が成立する。 具体例で見ると、p = 2 のときはxの仮数整数が奇数なので x != z となるが、zを新たなxとして代入し 再計算すれば x == z が成立する。桁上がりが起こる p = 3.9999999999999996 のときも、同様に 再計算で x == z が成立する。p = 3 のときはxの仮数整数が偶数なので x == z が成立し再計算は不要。
328 名前:デフォルトの名無しさん mailto:sage [2024/04/15(月) 22:06:46.39 ID:MxMoolaJ.net] >>327 解説ありがとう 俺には理解できないレベルだと分かりましたw 俺なら収束の自信が無くてDBL_EPSILONを使った判定と ループ回数上限を組み合わせて実装しそうだ
329 名前:デフォルトの名無しさん mailto:sage [2024/04/17(水) 05:47:35.77 ID:F2fqxIYT.net] ヘロンの公式はそのままだと、数値計算での安定性が良くないらしいぞ 解決策は、Wikipediaの英語版の方に… tps://en.wikipedia.org/wiki/Heron%27s_formula#Numerical_stability
330 名前:327 mailto:sage [2024/04/17(水) 05:52:23.77 ID:F2fqxIYT.net] そしてこんなとこでもカハンせんせーの名前がが
331 名前:デフォルトの名無しさん [2024/04/17(水) 16:28:33.14 ID:7JRzlbtx.net] の長さ この公式で計算される面積は、理論的には正しい値です。しかし、実際には、以下の理由で誤差が生じる可能性があります。 数値計算の誤差: 計算機で数値を扱う場合、有限桁しか扱えないため、丸め誤差が生じます。特に、辺の長さの値が大きく異なる三角形の場合、この誤差が顕著になります。 四捨五入誤差: 計算結果を小数点以下n桁まで表示する場合、n桁目以降の数字を切り捨てます。この四捨五入誤差も、面積の誤差に影響を与えます。 by Gemini
332 名前:デフォルトの名無しさん [2024/04/17(水) 23:38:33.35 ID:k4k/eSae.net] >>329 に載っている参考文献 William M. Kahan, ‘Miscalculating Area and Angles of a Needle-like Triangle’ www.cs.berkeley.edu/~wkahan/Triangle.pdf のTable 1の問題がパソコン等でのC++プログラムでも再現されるか試してみた。 https://ideone.com/r4toUS Table 1とは違い、Accurate Δが概ね正確な場合にHeron's Δ'が大きく懸け離れた不正確な値に なってしまうことはなく、ほぼ同じ値になり差はごく僅かしかない。Table 1のような不安定性は Table 1の計算に使われたプログラマブル関数電卓に特有の問題で、パソコン等のプログラムでは 再現されない。(パソコン等のdoubleの方が精度が高いので当然と言えば当然だが) 一方、(a, b, c) = (5278.64055, 94721.35941, 99999.99996)の場合は、逆にHeron's Δ' = 0が 正確なのにAccurate Δ = 9.53674324543714が大きく懸け離れた不正確な値になってしまう 重大な欠点がある。これは、Accurate Δの式の根号内の第2因数c - (a - b)が正確には0なのに 3.63797880709171e-12と計算されてしまい、この誤差が他の因数との乗算により増幅されるから。 Heron's Δ'の式の根号内の第4因数s - cは0と計算されるので問題ない。 double向けの入力値(a, b, c) = (31622.77777777662, 0.000000000023, 31622.77777777661)を 作れば、Heron's Δ' = 2.30085990753844e-07, Accurate Δ = 3.20111707955507e-07となり、 相対差は確かに大きくなるが、200ビットで計算したほぼ正確な値3.27490470056059e-07から 見れば両方とも不正確だから、Accurate Δの利点はない。 だから、パソコン等のプログラムでは改良版の式を使う必要がないどころか使うべきではなく、 ヘロンの公式をそのまま使う方が良い。
333 名前:デフォルトの名無しさん mailto:sage [2024/04/18(木) 07:16:50.63 ID:8T8m8Yde.net] >(a, b, c) = (5278.64055, 94721.35941, 99999.99996) >c - (a - b)が正確には0なのに3.63797880709171e-12と計算されてしまい この例に限らず、たいていの場合a,b,cはdoubleでexactに格納されて無くて この例では「c - (a - b)が正確には0」なのをチョイスしただけでは?
334 名前:デフォルトの名無しさん mailto:sage [2024/04/18(木) 07:30:10.21 ID:PYBA8OB3.net] パソロジカルな三角形をパラメトライズして面積を積分する検証はどう? 数式計算での正確な値 Heronで面積計算した時の数値積分 Accurateで面積計算した時の数値積分 を比べるのがフェアかなぁと
335 名前:デフォルトの名無しさん mailto:sage [2024/04/18(木) 07:34:09.77 ID:PYBA8OB3.net] > 200ビットで計算したほぼ正確な値3.27490470056059e-07 この例だけ見るとAccurate Δの方が優れているように見えるので >>333 の様なチェリーピックはどちらの計算式でも出来るので平均的に近似が近い方が精度的に優れているかと
336 名前:デフォルトの名無しさん [2024/04/18(木) 22:41:59.70 ID:y7NBfn6/.net] >>333 その通り。そして、(a, b, c) = (10000.1, 10000.2, 20000.3)とすれば、正しい面積は0なのに Heron's Δ' = 2.69745899635295とAccurate Δ = 1.34872949817647は両方とも大間違いになる。 この場合のようにHeron's Δ'での問題がAccurate Δで改善されないだけでなく、>>333 の引用の 場合のようにHeron's Δ'では結果的に問題ないのにAccurate Δでは新たな問題が生じてしまうのは、 参考文献の11ページで述べられた An algorithm stood convicted of numerical instability if it could be replaced by a new algorithm at least about as fast and accurate as the old for all data, and good for all data for which the old algorithm was bad. すべてのデータに対して旧アルゴリズムと少なくとも同じくらい高速かつ正確であり、 かつ旧アルゴリズムが悪くなるすべてのデータに対して良くなる新アルゴリズムによって 置き換えることができるとしたら、旧アルゴリズムは数値的に不安定と判定される。 という判定条件を満たさないから、Accurate Δは改良版としての適性を欠く。 >>335 その例では有効桁数がHeron's Δ'は0桁、Accurate Δは1桁しかなく、どちらの品質も絶対的に 劣悪で、それらの間の相対的な優劣に大した意味はない。 そもそも針のように異様に細長い三角形が重箱の隅をつつくような話で、普通はそんな場合は 想定しなくても良く、ヘロンの公式で充分。そこを敢えてつつくなら、ヘロンの公式だけでなく 改良式もぼろが出てしまうだけ。
337 名前:デフォルトの名無しさん mailto:sage [2024/04/18(木) 22:55:38.47 ID:n9UdHBZN.net] 総合すると有効桁じゃなくて精度が2桁良いし実装上は大差ないから改良版を使う、と言う方が自然では?
338 名前:デフォルトの名無しさん [2024/05/01(水) 12:56:47.83 ID:nIC3qyB/.net] スレ落ちそうなのであげ
339 名前:デフォルトの名無しさん mailto:sage [2024/05/01(水) 15:39:17.16 ID:hqp8cDbc.net] >>338 嵐を呼び込むために・・・
340 名前:デフォルトの名無しさん mailto:sage [2024/05/01(水) 22:59:10.72 ID:4hNncNW1.net] 何でこんなに過疎化しちゃったのか。前に頻繁に出題していた人がいなくなったのか。
341 名前:デフォルトの名無しさん mailto:sage [2024/05/02(木) 10:32:38.87 ID:ijoO2C2L.net] お題を出してみてください
342 名前:デフォルトの名無しさん [2024/05/02(木) 16:59:52.63 ID:DPVqLIsI.net] >>340 お題が出尽くしたってことはあるんじゃないか? 過去のお題拾ってきてそれを投稿すればいいぐらいまでスレが成熟してしまったのでは?
343 名前:デフォルトの名無しさん [2024/05/02(木) 17:21:22.07 ID:pg1ymc2D.net] PC買って、脱衣AIで遊びまくってる「 一日一回無料で使えるみたい「 https://mao.5ch.net/test/read.cgi/gymnastics/1322657462/98
344 名前:17 [2024/05/02(木) 18:44:04.16 ID:LxBZq7I4.net] >>342 なるほど。それをやるか。
345 名前:17 [2024/05/14(火) 05:34:03.62 ID:ou5vbzLn.net] じゃあ10年前のこのお題(URLを書くとNGになるようなので書かない)。 プログラミングのお題スレ Part4 115 :デフォルトの名無しさん:2014/06/21(土) 18:36:45.72 ID:/fMJIWig.net お題:文字列Aを1回以上繰り返した文字列Bが与えられたとき 文字列Aを求める。ただしAの候補が複数ある場合は最短のものとする。 例 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -> a 123412312341231234123123412312341231234123 -> 1234123 oxoxoxoxoxoxoxoxxoxoxoxoxoxoxoxoxx -> oxoxoxoxoxoxoxoxx
346 名前:デフォルトの名無しさん mailto:sage [2024/05/14(火) 17:27:18.46 ID:AXiunB2g.net] ttps://ideone.com/KrUq7e Z-algorithm を使って O(|B|) で解いてみた
347 名前: [2024/05/14(火) 20:59:46.84 ID:xk+62xOP.net] >>345 R https://ideone.com/ITR83u C https://ideone.com/g2INyj
348 名前: [2024/05/23(木) 14:16:50.64 ID:zV267ZMC.net] あれ?どんぐりの都合か?URL書いてあると書けなくなったような?
349 名前: [2024/05/23(木) 14:17:56.56 ID:zV267ZMC.net] URLの先頭のhを抜いて書いてみよう。 >>345 Kotlin こちらは普通に自作したやつ。 ttps://paiza.io/projects/OYy-A5rfKg7RqLzv-DKMIA こちらは正規表現使ってとても小さくなったやつ。 ttps://paiza.io/projects/jgmtMRDhKfcjYfGAglEl3g
350 名前:デフォルトの名無しさん mailto:sage [2024/06/01(土) 10:16:34.91 ID:hzaQXY32.net] お題: コロン区切りの時分秒の時刻が与えられるので時分秒をそれぞれ掛け算した結果を表示せよ 例: 04:05:06 120
351 名前:デフォルトの名無しさん mailto:sage [2024/06/01(土) 11:08:12.83 ID:hzaQXY32.net] お題: バイト列が与えられる。先頭から解析した場合にバイトが1だったら次の4バイトを読み込んで整数として出力し、バイトが2だったら次のバイトを0が来るまで読み込んで文字列として出力せよ 入力 1 1 0 0 0 2 65 66 67 0 1 128 0 0 0 出力 1ABC128
352 名前:デフォルトの名無しさん mailto:sage [2024/06/01(土) 12:57:50.32 ID:M5I0DyuF.net] 知らんがな
353 名前:デフォルトの名無しさん [2024/06/01(土) 23:31:08.51 ID:oEZc8FHN.net] >>350 R https://ideone.com/x4hIYG >>351 C (データ識別子は1か2しかないものとし、整数のエンディアンは実行環境依存とする) https://ideone.com/aJts6n
354 名前: 警備員[Lv.19] [2024/06/02(日) 04:45:03.04 ID:yi3OE76t.net] >>350 Perl bash のコマンドラインから入力して実行(ワンライナー) $ perl -ne 'if(/(\d+):(\d+):(\d+)/){print $1*$2*$3,"\n"}else{print"入力エラー\n"}' 1:2:3 6 3:4:5 60 04:05:06 120 $
355 名前: 警備員[Lv.20] [2024/06/02(日) 05:19:02.45 ID:yi3OE76t.net] >>351 Kotlin https://paiza.io/projects/lk2q4-Ciny3H2NptrkAbcw
356 名前:デフォルトの名無しさん mailto:sage [2024/06/03(月) 13:25:02.42 ID:21u+58W3.net] >>350 Windows のPowershell 上で、Ruby の1-liner を使う 末尾の改行を削除して、: で分割して、 文字列を数値型に変換してから、全ての要素を掛ける。 %Q で、ダブルクォーテーションをエスケープする。つまり、split(":") echo '01:2:09' | ruby -ne 'puts $_.chomp.split(%Q[:]).map(&:to_i).inject(:*)' 18
357 名前:デフォルトの名無しさん mailto:sage [2024/06/03(月) 15:28:01.42 ID:p+D7Hh++.net] >ruby -ne 'p eval($_.gsub(":","*"))' 1:2:9 18
358 名前:デフォルトの名無しさん mailto:sage [2024/06/07(金) 06:27:47.87 ID:ZJzD8UbY.net] お題:引数sとnを取りシーザー暗号化を行う関数を作れ sは平文、nはずらす文字数(負数可)、返り値は暗号化後の文字列 同様の関数で「Hello, World!」を暗号化し復号化せよ
359 名前:デフォルトの名無しさん mailto:sage [2024/06/07(金) 09:04:03.36 ID:tQi+9x5m.net] #! ruby class String def to_c(n) if %r|^n|=~n n=(n.sub(%r|^n|,"").to_i+26)%26 lb=("A".."Z").to_a.join sb=("a".."z").to_a.join la=lb[n..25]+lb[0..n-1] sa=sb[n..25]+sb[0..n-1] return self.tr(lb,la).tr(sb,sa) else return self end end end p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!" p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!" p "Hello,World!".to_c("s") #=>"Hello,World!" p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!" p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
360 名前:デフォルトの名無しさん mailto:sage [2024/06/07(金) 09:04:13.66 ID:tQi+9x5m.net] #! ruby class String def to_c(n) if %r|^n|=~n n=(n.sub(%r|^n|,"").to_i+26)%26 lb=("A".."Z").to_a.join sb=("a".."z").to_a.join la=lb[n..25]+lb[0..n-1] sa=sb[n..25]+sb[0..n-1] return self.tr(lb,la).tr(sb,sa) else return self end end end p "Hello,World!".to_c("n3") #=>"Khoor,Zruog!" p "Hello,World!".to_c("n-5") #=>"Czggj,Rjmgy!" p "Hello,World!".to_c("s") #=>"Hello,World!" p "Khoor,Zruog!".to_c("n-3") #=>"Hello,World!" p "Czggj,Rjmgy!".to_c("n5") #=>"Hello,World!"
361 名前:デフォルトの名無しさん [2024/06/07(金) 21:13:26.78 ID:U/DqAKAj.net] >>358 R https://ideone.com/Qj6B3w
362 名前:デフォルトの名無しさん [2024/06/07(金) 23:24:01.54 ID:KUK95Vnh.net] Haskell 範囲外の数値は平文字をそのまま返すこととした。 import Data.Char cearsar n |(-26) <= n && n <= 26 = map (f n) where f x = chr.(+x).ord cearsar _ = cearsar 0 sample: ghci> cearsar 50 "Hello, World!" "Hello, World!" ghci> cearsar 3 "Hello, World!" "Khoor/#Zruog$" ghci> cearsar (-3) "Khoor/#Zruog$" "Hello, World!"
363 名前:デフォルトの名無しさん mailto:sage [2024/06/07(金) 23:28:58.71 ID:KMptjexu.net] TA = [ * ?\x20 .. ?\x7E ] TS = TA.join def caesar( s, n ) s.tr( TS, TA.rotate( n ).join ) end s = "Hello, World!" p caesar( s, 0 ) #=> "Hello, World!" p caesar( s, 1 ) #=> "Ifmmp-!Xpsme\"" p caesar( s, -1 ) #=> "Gdkkn+~Vnqkc " p caesar( s, 20240607 ) #=> "Jgnnq.\"Yqtnf#" p caesar( caesar( s, 20240607 ), -20240607 ) #=> "Hello, World!" p caesar( 'HAL9000', 1 ) #=> "IBM:111"
364 名前:9 mailto:sage [2024/06/11(火) 14:41:10.23 ID:NjINqn/m.net] >>350 Perl5 ($x = '04:05:06') =~ s/:/*/g; print eval $x;
365 名前:9 mailto:sage [2024/06/13(木) 14:34:57.00 ID:XgNTPGgf.net] >>351 > 「バイトが1だったら次の4バイトを読み込んで整数として出力し、」 正直、意味がわからんかった 例で見ると 1 1 0 0 0 → 1 1 128 0 0 0 → 128 ということだが 1に続く4バイトを加算して出力するって意味だったのかいな
366 名前:デフォルトの名無しさん mailto:sage [2024/06/13(木) 14:48:43.48 ID:sldne70j.net] >>365 整数が4バイト型という脳内補完だった
367 名前:デフォルトの名無しさん mailto:sage [2024/06/13(木) 14:54:19.57 ID:lNMgjwmg.net] >>365 出題者がエンディアンを知らなくて説明もなくリトル環境を前提にしてしまっている エンディアンを知っている人たちは出題には書かれてないけど例よりリトル前提だと読み取ってこたえている
368 名前:デフォルトの名無しさん [2024/06/13(木) 14:59:03.73 ID:fAZ1qthZ.net] >>367 リトルエンディアンはビットが逆って事じゃ無いぞ 10 00なら 00 10だぞ
369 名前:デフォルトの名無しさん mailto:sage [2024/06/13(木) 15:00:51.22 ID:lNMgjwmg.net] >>368 例>>365 を見てないのか?
370 名前:9 mailto:sage [2024/06/13(木) 17:03:39.85 ID:XgNTPGgf.net] >>367 ああそういうことか「4バイトを読み込んで整数」と書いてあるのはそういう意味だったのか ならわかるかも。 オレは4バイト一個一個が整数だと捉えて、それを「4バイトを読み込んで整数」とは何のこっちゃと?になってたわ
371 名前:9 mailto:sage [2024/06/13(木) 17:07:01.55 ID:XgNTPGgf.net] すまんね68系で育ったもんですぐ連想できなんだ
372 名前:デフォルトの名無しさん [2024/06/14(金) 21:10:23.18 ID:H7FTNa+g.net] >>369 例が間違えてるか説明が足りて無い 要は4バイトを読み込んでと説明してるが「一気に4バイト読み込む」とおかしくなる 1バイトずつ順に4バイトを読み込んでという説明なら例が腑に落ちる
373 名前:デフォルトの名無しさん mailto:sage [2024/06/14(金) 21:15:46.04 ID:cNkcubsv.net] 例を示しての出題だから
374 名前: [2024/06/15(土) 16:15:42.96 ID:h/vMPGM+.net] >>358 Kotlin 面倒なのでASCIIコード(0x20-0x7e)でしかシフトしないやつを作った。 まあでも Kotlin は Java 同様に内部でUnicodeで扱っているので平仮名とか漢字とか全然違う言語の文字とかも比較的楽に追加できると思う。 https://paiza.io/projects/5H9H1zSjDnVshGCf4JaQJg
375 名前:デフォルトの名無しさん [2024/06/19(水) 15:22:47.09 ID:xfTENZQh.net] >>350 awk https://ideone.com/dMvvZG
376 名前:デフォルトの名無しさん [2024/06/20(木) 17:43:48.64 ID:0f6ktMCR.net] お題:迷路生成を様々な言語で 例: C https://ideone.com/a527mc
377 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 20:17:47.11 ID:0f6ktMCR.net] https://paiza.io/projects/a6ZS3co-gsEV1tN57VUctA
378 名前:デフォルトの名無しさん [2024/06/21(金) 02:17:42.15 ID:wIxdZD1d.net] 迷路。やっつけで汚い。乱数自前 C https://paiza.io/projects/5vyyygrG7exduzqDa-jBAA Rust https://paiza.io/projects/g1UmjFWydgmjAEZAgqS5xw
379 名前:デフォルトの名無しさん mailto:sage [2024/06/21(金) 05:01:41.33 ID:wIxdZD1d.net] 乱数改良 C https://paiza.io/projects/UWRNkhfbdscMIwR0bTvqHA Rust https://paiza.io/projects/g1UmjFWydgmjAEZAgqS5xw
380 名前:デフォルトの名無しさん mailto:sage [2024/07/26(金) 09:46:37.73 ID:PcAUXe08.net] お題:配管サイズの「A呼称」「B呼称」の相互変換 tps://www.keyence.co.jp/ss/products/process/flowmeter/technique/size.jsp などに掲載されている「A呼称」から「B呼称」への変換。及びその逆変換。 「A呼称」は整数値で(8とか)、「B呼称」は実数(0.125とか)または分母を8とする分数の分子(1とか)で表すものとする。 規格に存在しない場合(42Aとか)は考慮しなくてもよい。 表を引くだけなら簡単過ぎるので、ツェラーの公式の様な「技巧的」な解法を求む。
381 名前:デフォルトの名無しさん mailto:sage [2024/07/27(土) 06:14:08.30 ID:QMQQaL7S.net] REM 呼称変換.bat chcp 65001 ruby -x "%~f0" ruby tmp.rb goto end #~ #!ruby #encoding: utf-8 Encoding.default_external='UTF-8' require 'base64' st=<<'EOS' IyFydWJ5CiNlbmNvZGluZzogdXRmLTgKRW5jb2RpbmcuZGVmYXVsdF9leHRl cm5hbD0nVVRGLTgnCgpjbGFzcyBPYmplY3QKICBkZWYgdG9fZmwKICAgIHJl dHVybiBldmFsKHNlbGYuc3BsaXQoIisiKS5tYXB7fGV8CiAgICAgIGUuc3Bs aXQoIi8iKS5tYXB7fGZ8IGYudG9fZi50b19zfS4KICAgICAgam9pbigiLyIp fS5qb2luKCIrIikpCiAgZW5kCmVuZAoKY2xhc3MgTnVtZXJpYwogIEBAYT1b Niw4LDEwLDE1LDIwLDI1LDMyLDQwLDUwLDY1LAogICAgICA4MCw5MCwxMDAs MTI1LDE1MCwxNzUsMjAwLDIyNV0KICBAQGI9WyIxLzgiLCIxLzQiLCIzLzgi LCIxLzIiLCIzLzQiLCIxIiwKICAgICAgIjErMS80IiwiMSsxLzIiLCIyIiwi MisxLzIiLCIzIiwKICAgICAgIjMrMS8yIiwiNCIsIjUiLCI2IiwiNyIsIjgi LCI5Il0KICBAQGM9QEBiLm1hcHt8ZXwgZS50b19mbH0KICBkZWYgYV90b19i CiAgICBuPXNlbGYKICAgIGlmIG48MjUwCiAgICAgIGE9NgogICAgICBAQGEu ZWFjaHt8ZXwgYT1lIGlmIGUvbjw9MS4wfQogICAgICBiPUBAYltAQGEuaW5k ZXgoYSldCiAgICAgIGM9QEBjW0BAYS5pbmRleChhKV0KICAgICAgcmV0dXJu ICIoYT0je2F9KSBiPSN7Yn09I3tjfSIKICAgIGVsc2UKICAgICAgYT0obi81 MCkudG9faSo1MAogICAgICBiPWEvMjUKICAgICAgcmV0dXJuICIoYT0je2F9
382 名前:デフォルトの名無しさん mailto:sage [2024/07/27(土) 06:15:03.76 ID:QMQQaL7S.net] KSBiPSN7Yn0iCiAgICBlbmQKICBlbmQKICBkZWYgYl90b19hCiAgICBuPXNl bGYKICAgIGlmIG48MTAKICAgICAgYz0wLjEyNQogICAgICBAQGMuZWFjaHt8 ZXwgYz1lIGlmIGUvbjw9MS4wfQogICAgICBhPUBAYVtAQGMuaW5kZXgoYyld CiAgICAgIGI9QEBiW0BAYy5pbmRleChjKV0KICAgICAgcmV0dXJuICIoYj0j e2J9PSN7Y30pIGE9I3thfSIKICAgIGVsc2UKICAgICAgYj1uLnRvX2kKICAg ICAgYT1iKjI1CiAgICAgIHJldHVybiAiKGI9I3tifSkgYT0je2F9IgogICAg ZW5kCiAgZW5kCmVuZAoKd2hpbGUgMQogIGFyPVsi77yh5ZG856ew44GL44KJ 77yi5ZG856ewIiwi77yi5ZG856ew44GL44KJ77yh5ZG856ewIiwi57WC5LqG Il0KICBtc2c9YXIubWFwLndpdGhfaW5kZXh7fGUsaXwiI3tpKzF9OiN7ZX0i fS5qb2luKCJcbiIpKyJcbiIKICBwcmludCBtc2crImlucHV0IG51bWJlciA+ ICIKICBuPSRzdGRpbi5nZXRzLnRvX2kKICBicmVhayBpZiBuPT0zCiAgbmV4 dCBpZiBuPT0wCiAgd2hpbGUgMQogICAgcHJpbnQgIiN7YXJbbi0xXX06aW5w dXQgdmFsdWUgPiAiCiAgICBtPSRzdGRpbi5nZXRzLmNob21wCiAgICBicmVh ayBpZiBtPT0iIgogICAgbT1tLnRvX2ZsCiAgICBwdXRzIG0uYV90b19iIGlm IG49PTEKICAgIHB1dHMgbS5iX3RvX2EgaWYgbj09MgogIGVuZAplbmQK EOS File.write("tmp.rb",Base64.decode64(st)) __END__ :end
383 名前:デフォルトの名無しさん [2024/07/30(火) 12:03:21.52 ID:zP/xDheD.net] お題 C言語のトライグラフ(可能ならダイグラフも)と普通のテキストとの相互変換。 ファイルまたは標準入力から読んで変換した結果を標準出力に出力する。 面倒なら文字列変換する関数とそれをテストするメイン関数のみでも良い。
384 名前: 警備員[Lv.8] [2024/08/03(土) 07:16:23.70 ID:HS6IEZQf.net] お題 Unicode 文字列を UTF-9 へ変換する。また UTF-9 を Unicode 文字列に変換する。 ただし1バイトが9bitではないコンピュータを使用する場合は9bit以上で扱いやすいbit数の変数(例えば 16bitの変数)を代用して下9bitのみを使用する等しても良い。 UTF-9 の仕様は RFC 4042 を見るか、または下記URLのページを参照。 https://www.wdic.org/w/WDIC/UTF-9%20%28RFC%29
385 名前: 警備員[Lv.9] [2024/08/03(土) 17:38:42.19 ID:HS6IEZQf.net] >>383 Kotlin Digraph, Trigraph の変換と逆変換 https://paiza.io/projects/FPUStm3O4tZZMYi1Cw2ruw https://paiza.io/projects/4vD2Ux8Jd6EzLIynkzTXtw Map と正規表現使った簡単な変換なので他の言語で作っても大差ないと思う。
386 名前:デフォルトの名無しさん [2024/08/03(土) 20:58:23.65 ID:S2fEkJP0.net] お題 整数の格子がある(伝われ) 任意の2点間を線で結ぶ(座標成分は実数) 格子と交わるところで線を分割せよ sssp://o.5ch.net/23qe8.png
387 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 21:19:51.17 ID:VMb0ie+F.net] >>386 jwwの外部変形としてこんな感じで交点で分割させるの作ったことあるけどプログラミングスレののお題としては座標指定もなく漠然としすぎていていかがなものか。ちょっと伝わんなかった。
388 名前:デフォルトの名無しさん [2024/08/03(土) 21:36:58.95 ID:dM8NlTKR.net] ごめん、画像から察してほしい 遊びだから曖昧なところは適当で https://i.imgur.com/YUKpLcI.png
389 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 21:50:20.46 ID:VMb0ie+F.net] >>388 二直線の交点は連立方程式を解けば良くて行列を使えば簡単だけど、どういう回答が求められてるのかが分からず途方に暮れております
390 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 22:08:55.42 ID:/AInVOhB.net] >>388 出直し
391 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 22:28:33.50 ID:Dl6/uvrz.net] クイズと「プログラミングのお題」との決定的な違い 検証するための入力(問題)と出力(解答)例が明記されているかどうか
392 名前:デフォルトの名無しさん [2024/08/03(土) 22:29:35.16 ID:S2fEkJP0.net] テンプレに書いてなかったしいいやって思っちゃった ここまで伝わらんもんなのか…
393 名前:デフォルトの名無しさん [2024/08/03(土) 22:35:56.24 ID:S2fEkJP0.net] 具体例を計算するのはめんどくさいけど、例えばさっきの絵で言えば右上が始点で左下が終点なら始点側から順番に座標を出力するとかね
394 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 22:41:57.69 ID:Dl6/uvrz.net] 入力例とその時の出力例を データとして数種類用意すればOK 例えば>>236 とか>>345 を参考
395 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 22:42:49.82 ID:t4RpIT1N.net] >>392 そういうことは伝える努力をしてから言おうな
396 名前:デフォルトの名無しさん [2024/08/03(土) 22:44:30.36 ID:S2fEkJP0.net] めんどくさい そこまでして出そうと思わんから興味ないならスルーで
397 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 22:52:49.60 ID:/AInVOhB.net] この頭の悪さを見るに学校の課題か何かを丸投げしようとしてるのかな
398 名前:デフォルトの名無しさん mailto:sage [2024/08/03(土) 23:04:31.31 ID:Dl6/uvrz.net] 入出力例があると仕様が定まってプログラミングのお題が成立する 入出力例がないと宿題を手伝わせようとしているだけの可能性も否定できないね
399 名前:デフォルトの名無しさん mailto:sage [2024/08/04(日) 00:49:43.30 ID:iskScWib.net] >>396 ドンマイ、出題の意図は分かった気がするので改めて出題 お題 10mm方眼用紙、左下原点、入力された任意の直線と方眼線との交点を求めよ (例)始点(3.5,5.2)終点(6.3,8.1)
400 名前:デフォルトの名無しさん mailto:sage [2024/08/04(日) 04:51:29.74 ID:9TVMMXOl.net] >>386 nodejs https://www.mycompiler.io/view/8GupmXA8eQS
401 名前:デフォルトの名無しさん mailto:sage [2024/08/09(金) 23:38:00.57 ID:PnKZlDGe.net] お題:与えられた線分を指定された長さLで分割せよ。ただし最後に余る分は長さLでなくてもよい。 線分([始点,終点])=[[0,0],[100,100]] L=50 ↓ [[[0,0],[50,50]],[[50,50],[100,100]]]
402 名前: [2024/08/10(土) 04:24:35.61 ID:C1sXjWXk.net] >>401 その例おかしくない?それか問題がおかしいか。 長さがLということはx=yの線を分割する場合は座標はx, y 共にL/√2倍にならないか?
403 名前:デフォルトの名無しさん mailto:sage [2024/08/10(土) 08:05:08.91 ID:cX2Nc5cZ.net] ごめん、ミスった
404 名前:デフォルトの名無しさん mailto:sage [2024/08/10(土) 08:07:10.85 ID:cX2Nc5cZ.net] 修正 線分([始点,終点])=[[0,0],[120,0]] L=50 ↓ [[[0,0],[50,0]],[[50,0],[100,0]],[[100,0],[120,0]]]
405 名前:デフォルトの名無しさん mailto:sage [2024/08/10(土) 08:54:23.54 ID:DYGkQoQe.net] REM 座標計算.bat chcp 65001 ruby -x "%~f0" goto end #~ #!ruby #encoding: utf-8 Encoding.default_external='UTF-8' require "matrix" while 1 print "input start point > " #0,0 p1=$stdin.gets.split(",").map{|e| e.to_f} print "input end point > " #120,0 p2=$stdin.gets.split(",").map{|e| e.to_f} print "input length > " #50 l=$stdin.gets.to_f exit if l<=0 p1[1]=0 unless p1[1] p2[1]=0 unless p2[1] v1=Vector.elements(p1) v2=Vector.elements(p2) m=(v2-v1).r n=(m/l).to_i a=(0..n).map{|e| l*e} b=a.map{|e| v1+(v2-v1)*(e/(v2-v1).r)}.map{|e| e.to_a} b<<p2 p b.uniq end __END__ :end
406 名前:デフォルトの名無しさん mailto:sage [2024/08/20(火) 15:28:18.45 ID:YrWgN0+y.net] お題:今日、または任意の日付から、もういくつ寝るとお正月かを求めよ。(昼寝は除く)
407 名前:デフォルトの名無しさん mailto:sage [2024/08/20(火) 18:03:45.73 ID:UEEknM+z.net] >>406 lisp https://ideone.com/RhvMjC
408 名前:デフォルトの名無しさん [2024/08/21(水) 11:05:18.96 ID:kc5yLFga.net] >>406 徹夜はどうしますか?
409 名前: [2024/08/22(木) 08:01:35.77 ID:dwyU9o+h.net] >>406 bash のコマンドラインから expr コマンドと date コマンドを利用して次のようにして計算した。 実際に日数が経過後に1月1日になっているかの確認もした。 $ expr $( date -d '2024/12/31' +%j ) - $( date +%j ) + 1 132 $ date -d 'now +132 days' 2025年 1月 1日 水曜日 07:58:54 JST $
410 名前: [2024/08/22(木) 08:04:39.02 ID:dwyU9o+h.net] >>409 をちょっと改良 今年に限定しないやりかた。 $ expr $( date -d $(date +%Y)'/12/31' +%j ) - $( date +%j ) + 1 132 $
411 名前:デフォルトの名無しさん [2024/08/24(土) 01:28:41.99 ID:Ou5o/VfJ.net] ロケール設定なしとかジョークかよ
412 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 07:25:49.23 ID:/cWP8Umv.net] こまけぇこたぁいいんだよ(AA略)
413 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 23:36:40.04 ID:/cWP8Umv.net] てかこのお題で私、期間中にヨーロッパから帰国しますんでってな特殊ケースまで折り込めって方が無理に思えるけど、ロケール設定した模範解答をどぞ、
414 名前:デフォルトの名無しさん mailto:sage [2024/08/24(土) 23:58:49.15 ID:D7M8BxWI.net] せっかくだから、旧正月も考慮して
415 名前:デフォルトの名無しさん [2024/09/01(日) 04:58:12.84 ID:sYmH1KkQ.net] お題:複数の文字列が格納されている配列と配列の添字がある。標準入力からnextが入力されたら文字列を表示し添字を進め、prevが入力されたら文字列を表示して添字を戻す。添字が始点と終点に達したら始点は終点に、終点は始点に移動させる。動作は例に合うように実装せよ。 v = ["aaa","bbb","ccc"] next aaa next bbb prev aaa next bbb next ccc next aaa
416 名前:デフォルトの名無しさん mailto:sage [2024/09/01(日) 08:19:39.59 ID:MmIh9kGJ.net] >>415 lua https://ideone.com/OEEqAA
417 名前:デフォルトの名無しさん mailto:sage [2024/09/01(日) 11:51:46.92 ID:Zfu0bsG/.net] >>415 REM nextprev.bat ruby -x "%~f0" exit #~ #!ruby #encoding: utf-8 i=0;v=["aaa","bbb","ccc"] while 1 puts v[i] print "input next or prev [n/p]> " a=$stdin.gets.chomp if ""==a exit elsif /^n/=~a i=i+1 elsif /^p/=~a i=i-1 end i=(i+3)%3 end
418 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 07:13:35.79 ID:1bP400Ev.net] お題 引数aから引数bまでの数列を返す関数がある。この関数を数列にゾロ目が含まれていた場合に空の数列を返すように実装せよ
419 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 07:56:47.18 ID:Jxau6mSM.net] >>418 lisp https://ideone.com/WMC2aN
420 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 09:22:31.13 ID:HQsZJT0t.net] >>419 windowsを使ってるんですが>>419 を実行するにはどのような環境を整えれば良いでしょうか?
421 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 10:00:07.45 ID:VHciJKZC.net] 417ではないが,clispかsbclをインストールすればいいよ.Windowsでもできるし,WSLならさらに簡単にできる
422 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 10:17:03.41 ID:HQsZJT0t.net] >>421 ありがとうございます そうするとemacsが使えるようになるのでしょうか? それともプログラミング言語としてのlisp環境が整うだけでしょうか?
423 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 13:27:22.48 ID:Jxau6mSM.net] >>420 Windowsは不断使いしていないんで開発環境とかemacsとかはわからないけど、動かすだけなら https://www.sbcl.org/platform-table.html からWindows版のSBCLインストーラーを落としてインストール コマンドプロンプトなどのコマンド行で sbcl --script ファイル名 とすると「ファイル名」のファイルをスクリプトとして実行します --script を付けない場合REPLが起動します(Pythonでいうところの対話モード) これの終了は (quit) と入力してEnterキー
424 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 13:38:16.60 ID:Jxau6mSM.net] ちょっと試すだけならウェブサービスを使う手も Common Lispを動かせるオンラインコンパイラーサイト https://rextester.com/l/common_lisp_online_compiler https://www.jdoodle.com/execute-clisp-online https://wandbox.org/ これらはideoneとは異なり "Share" とか "Save" とかをクリックしない限り保存・公開されない(はず)
425 名前:デフォルトの名無しさん mailto:sage [2024/09/03(火) 22:13:24.20 ID:HQsZJT0t.net] レス頂いた方、ありがとうございます とりあえず>>424 辺りで試してみます
426 名前:デフォルトの名無しさん mailto:sage [2024/09/04(水) 03:34:25.27 ID:k+9kMn3u.net] REM zorome.bat ruby -x "%~f0" exit #~ #!ruby while 1 print "input a > " a=$stdin.gets.chomp exit if a=="" a=a.to_i print "input b > " b=$stdin.gets.to_i ar=(a..b).to_a z=0 ar.each{|e| n=e.to_s.gsub(/^-/,"") m=n.split("").uniq if n.size>1 && m.size==1 z=1 break end } ar=[] if z==1 p ar end __END__ a=0;b=10 => [0,1,2,3,4,5,6,7,8,9,10] a=0;b=11 => []
427 名前:デフォルトの名無しさん mailto:sage [2024/09/04(水) 06:34:37.52 ID:FQ5fjJ2m.net] >>418 fn is_zorome(n: i32) -> bool { let s = n.abs().to_string(); let b = s.as_bytes(); if b.len() > 1 { b[1..].iter().all(|&d| d == b[0]) } else { false } } fn odai(a: i32, b: i32) -> Vec<i32> { if (a..=b).any(|n| is_zorome(n)) { vec![] } else { (a..=b).collect() } } fn main() { assert_eq!(odai(1, 10), [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); assert_eq!(odai(1, 11), []); }
428 名前: 警備員[Lv.7] [2024/09/29(日) 14:12:38.24 ID:Sdg7KlJR.net] >>418 Kotlin (URL投稿禁止になってるようなので先頭の https:// は抜きで)。 paiza.io/projects/nPK7U1uDtt4b7O2saECP0A [入力]タブの方で開始、終了の値を入れている。とりあえず 10 40 を入れてある。 一桁の数を指定した場合は全てゾロ目扱いになるので出力は空のリストになる。
429 名前:デフォルトの名無しさん mailto:sage [2024/10/08(火) 17:17:22.09 ID:CS1PHEoT.net] お題:文字列を中央寄せする関数を作れ。 関数は文字列、全体の横幅(整数)、余白を埋める文字、を引数に取る。横幅分の文字列を引数の文字で作成し、その中央に引数の文字列を埋め込み戻り値として返せ。
430 名前:デフォルトの名無しさん mailto:sage [2024/10/08(火) 19:52:28.65 ID:Rq2an05y.net] py text.center
431 名前: [2024/10/09(水) 00:07:23.87 ID:O5zCFPJO.net] >>429 文字幅についてはどう考えれば良い? エンコーディングが UTF-8 や UTF-16 だとバイト数や要素数が画面の表示幅と一致しないわけだが。 一致するような Shift-JIS だったとしても端末のフォント設定次第で表示幅が変わる。
432 名前:デフォルトの名無しさん mailto:sage [2024/10/09(水) 00:38:16.24 ID:j8RLE5Fj.net] EUCにも半角2バイト文字なんてあったりする
433 名前:デフォルトの名無しさん mailto:sage [2024/10/09(水) 00:56:06.70 ID:LtADXZKH.net] asciiの前提では 全角判定関数は切り分けるべきだし
434 名前:デフォルトの名無しさん [2024/10/09(水) 01:18:55.72 ID:4B3K5XUV.net] #ドラクエ3が超好きだったので、お題にしてみる。ただしロト3のファミコン版のドラクエな!w "こちらの職業は勇者、戦士、空手家、僧侶、柔道家の5人がかりw 勇者から柔道家までの5人の攻撃回数が異なります。"まずは変数と確率の問題。 勇者=you戦士=sen,空手家=kara,僧侶=sou まず勇者は1~2回攻撃、戦士は1~3回攻撃、空手は2~3回攻撃、柔道は足払いで相手を20%で麻痺させることができる。(1ターン何もできない)10%では超麻痺。(2ターン何も敵は動かない) 5%でクリティカルヒットの足払いで3ターン敵は何もできない。 柔道は敵に攻撃を加えられない分、足払いで相手を痙攣させる。 (勇者の1回分の攻撃は100〜200、20%の確率でクリティカルヒットの攻撃になることがある。 (戦士の攻撃は200〜300、20%の確率で攻撃がクリティカルヒット1回になることがある。 (空手家)空手家の攻撃は350〜500、ただし20%の確率で攻撃がクリティカルヒットとなるときがある。youはぞろ目(111とか222とか999まで)の場合はロトの剣を取得する。 攻撃回数無限で全てクリティカルヒットになります。 クリティカルヒットは攻撃力X2です。さてプログラムをやっていくか。" *ただし、ロトの剣は勇者しか使えない。 ”まずギルガメッシュっていう名前のenemy ラスボスの名前はenemyとする。ボスのHPは5万。 ボスは基本的に何もしません、できません。これやるとさすがに面倒なのでw 基本的にボスは攻撃しません。(面倒だからw) 一方的になかまあつめてボコすw” *ロトの剣で攻撃したら攻撃力が1.5倍あがります。* **癒しの穂。食べたら防御力と賢さがあがります** ロトの剣の出現条件は3並びで一つ食べることができます。 例えば111攻撃とか222攻撃とか333攻撃とか〜999まで。 次の発言からコードを書いていく。 ニーズあるか?
435 名前:デフォルトの名無しさん mailto:sage [2024/10/09(水) 01:22:59.53 ID:YvVjSPhZ.net] プログラミングする以前に読むのが面倒くさい
436 名前:デフォルトの名無しさん [2024/10/09(水) 01:43:57.73 ID:4B3K5XUV.net] しまった。初期化してなかったなw変数のところ。 あとsouの回復もホイミ、ベホイミ、ベホマラーの3種類だけ。 その3種類がぞろ目の時(111,222など) そしたらベホマズンを使える。ほぼ運ゲーですw 人修羅みたいに取り巻きがいます。それはバラモスエビルと神龍です。 ある一定時期を過ぎると取り巻きが一斉にHPを連続してあげまくるので 取り巻き先に倒さないと厳しいです。取り巻き=tori種類1の取り巻き=tori0 種類2の取り巻き=tori1 5人だとなかなか倒せないから6人目の魔法剣士=maken だれか これをいれよう。 さてif文を完成させよう!if zoma =1 print("ゾーマが現れた”) import random random.random()x = random.uniform(0.1,0.9) print(x) if x >202 : print( 'enemyに' +200のダメージを与えた) elif x > 0.5 : print( 'enemyに100+のダメージを与えた' ) elif x > 0.2 : print( '相手が躱した' ) else : print( "まだゾーマは死んでません") つかれたーw もっと簡単なやつにしまーすw
437 名前:デフォルトの名無しさん mailto:sage [2024/10/09(水) 01:45:35.37 ID:YvVjSPhZ.net] 頑張って読んだけどこのままでは多分スレチ、ずっと条件を簡単にして出題し直してみる。 お題 勇者(HP1000)対魔王(HP5000)、先鋒勇者、サイコロ(目は1から6)を振って出た目だけ相手にダメージを与えられ、交互に攻撃しHP0となったら負け。魔王のサイコロは1個だけど勇者のサイコロはN個(N=1~10)の時の勇者の勝率を求めよ。
438 名前:デフォルトの名無しさん [2024/10/09(水) 02:10:34.29 ID:4B3K5XUV.net] # RPGの攻撃状況を再現 # モンスターと戦っている。 # 1から10のサイコロをふって、 # 6未満の場合、サイコロの目だけダメージを与えたと表示。 # 6以上の場合、クリティカルヒットとして、100のダメージを与えたと表示。 # 0の場合、防御されたとして、0ダメージを表示。 import random hit = random.randint(0,10) if 1 <= hit < 6: print("スライムに、" + str(hit) + "のダメージを与えた!") elif hit >= 6: print("クリティカルヒットダメージ100を与えた") else: print("ダメージは、" + str(hit) + "防御された") #楽しすぎだなwこれはw
439 名前:デフォルトの名無しさん mailto:sage [2024/10/09(水) 18:59:48.61 ID:Vd16zyId.net] >>431 asciiで。
440 名前:デフォルトの名無しさん mailto:sage [2024/10/11(金) 05:53:27.29 ID:EzY86rdr.net] お題:文字列の中で1つ以上連続している空白をすべて空白4つに置換せよ。ただし正規表現は使ってはならない。 例: "abc def ghi" -> "abc def ghi"
441 名前:438 mailto:sage [2024/10/11(金) 05:54:39.00 ID:EzY86rdr.net] 5chは空白を1つに置換するらしく例は出せない。脳内保管せよ。
442 名前:デフォルトの名無しさん [2024/10/11(金) 20:53:22.06 ID:BlO5cFoG.net] >>440 perl -lpE'$_=join$"x4,split$"' (文字列を入れる)
443 名前:デフォルトの名無しさん [2024/10/11(金) 20:58:31.10 ID:BlO5cFoG.net] >>442 splitのあとの$"は不要だった。 どちらにしてもタブも置換してまうのでアウトかも。
444 名前:デフォルトの名無しさん [2024/10/11(金) 22:15:53.82 ID:H5F5jhxE.net] >>440 R https://ideone.com/LO7vyR
445 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 01:34:10.91 ID:OB4ycmPb.net] >>437 こういう場合の確率の計算はよく分からなかったので実際にそれぞれ一万回ずつ戦わせてみた。 サイコロ1個で100000戦0勝 サイコロ2個で100000戦0勝 サイコロ3個で100000戦0勝 サイコロ4個で100000戦0勝 サイコロ5個で100000戦47171勝 サイコロ6個で100000戦100000勝 サイコロ7個で100000戦100000勝 サイコロ8個で100000戦100000勝 サイコロ9個で100000戦100000勝 サイコロ10個で100000戦100000勝
446 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 01:39:02.69 ID:OB4ycmPb.net] >>445 #!ruby #encoding: utf-8 $stdout=open("kekka.txt","w") i=100000 #対戦回数 k=0 #勇者の勝ち n=1 #勇者のサイコロの数 hpm=5000 #魔王のHP hpy=1000 #勇者のHP
447 名前:デフォルトの名無しさん mailto:sage [2024/10/12(土) 01:39:40.49 ID:OB4ycmPb.net] >>446 while n<=10 j,t=0,0 while j<i hpy-=rand(1..6) if hpy<=0 j+=1 t,hpy,hpm=0,1000,5000 next end m=0 while m<n hpm-=rand(1..6) m+=1 end if hpm<=0 k+=1 j+=1 t,hpy,hpm=0,1000,5000 next end t+=1 end puts "サイコロ#{n}個で#{i}戦#{k}勝" k,hpy,hpm=0,1000,5000 n+=1 end
448 名前: 警備員[Lv.12] [2024/11/05(火) 05:27:21.14 ID:srt1vo+S.net] >>429 Kotlin スペースが何個なのか分り易くするために '*' をスペースの代わりに入れて呼び出している。 https://paiza.io/projects/xSP0nP203HXTwqyxlQD0Gg
449 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 22:01:15.62 ID:nRkxNwtG.net] >>437 R f=\(N){ u=1000 m=5000 while(u>0 & m>0){ m=m-sum(sample(6,N,replace=TRUE)) u=u-sample(6,1) } u>m } sim=\(N) mean(replicate(1e3,f(N))) p=sapply(1:10,sim) plot(p) data.frame(N=1:10,p=p) N p 1 1 0.000 2 2 0.000 3 3 0.000 4 4 0.000 5 5 0.498 6 6 1.000 7 7 1.000 8 8 1.000 9 9 1.000 10 10 1.000
450 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 22:22:31.42 ID:nRkxNwtG.net] >>437 Wolfram f[N_] :=( u=1000; m=5000; Until[u<=0 || m<=0, m-=Total@RandomChoice[Range[6],N];u-=Total@RandomChoice[Range[6],1]]; Boole[u >= m] ) Table[Mean@Table[f[x],10^3],{x,1,10}] // N {0., 0., 0., 0., 0.511, 1., 1., 1., 1., 1.}
451 名前:デフォルトの名無しさん [2024/12/31(火) 22:33:49.84 ID:5KitXLte.net] ベクターにあるこれを解いてくれ 昔2ch、5chスレでやってたができず いまだと4x4はパワーで行けるとおもうが 4x4盤タイルゲーム for Windows 対戦するたびに学習して次第に強くなる「最善手探索+対戦学習型知能ゲーム」
452 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 12:58:01.50 ID:emEmRiID.net] 他力本願か?
453 名前:デフォルトの名無しさん mailto:sage [2025/01/01(水) 13:30:44.19 ID:WMbw73Fu.net] 出題の仕方でプログラミング能力の無さがわかる
454 名前:デフォルトの名無しさん [2025/01/01(水) 13:32:50.17 ID:ZpviU2f/.net] >>440 Java https://paiza.io/projects/c5TaBFHebIAdHNIU_QToUg
455 名前:デフォルトの名無しさん [2025/01/01(水) 13:54:47.38 ID:ZpviU2f/.net] >>429 Java https://paiza.io/projects/9XrtZ_9CpiIeg-xcQkcc1Q?language=java
456 名前:デフォルトの名無しさん [2025/01/01(水) 15:04:31.04 ID:ZpviU2f/.net] >>418 Java https://paiza.io/projects/xs9ggwnP0Am-Y9dDK0794A?language=java
457 名前:デフォルトの名無しさん [2025/01/01(水) 18:14:11.44 ID:X9RQ0R0S.net] >>451 勝手に名付けて水道管連結ゲーム 先後で縦か横で管を繋げた方の勝ち ただしこの場合、黒が角においたら連結するだけだが今白が角におくと黒2つは除去される ▓ □▓
458 名前:デフォルトの名無しさん [2025/01/01(水) 19:18:52.94 ID:ZpviU2f/.net] >>384 Java https://paiza.io/projects/Nvq9hUoU-aTzCInIQLugGg
459 名前:デフォルトの名無しさん [2025/01/01(水) 19:35:45.17 ID:ZpviU2f/.net] >>383 Java https://paiza.io/projects/DzTt5UiETM3n60v4Pj5-hg?language=java
460 名前:デフォルトの名無しさん [2025/01/01(水) 20:12:46.32 ID:ZpviU2f/.net] >>358 Java https://paiza.io/projects/9oGyF38BDGg3_l8X-MS5-Q?language=java
461 名前:デフォルトの名無しさん [2025/01/01(水) 20:32:30.47 ID:ZpviU2f/.net] >>351 Java https://paiza.io/projects/VuNCoPaBlgTLpp9G-pMWxg?language=java
462 名前: [2025/01/02(木) 03:06:13.48 ID:PSAM74+n.net] >>440 Kotlin https://paiza.io/projects/8ePwRoyLPZQ0cMWtO7MSHg
463 名前: [2025/01/02(木) 03:15:13.97 ID:PSAM74+n.net] >>451 解いてくれって?何をしたらいいの? 全パターンやらせて勝つパターンを出せってこと?
464 名前:デフォルトの名無しさん [2025/01/02(木) 10:05:16.72 ID:gED46q9T.net] >>463 最善手だったら先手の勝ちかどうか
465 名前:デフォルトの名無しさん [2025/01/02(木) 16:25:40.35 ID:H7SLSd6p.net] https://mevius.5ch.net/test/read.cgi/tech/1624028577/251 Java https://paiza.io/projects/hQp_tZ73CDJ-oBAxcJuHbA?language=java
466 名前:デフォルトの名無しさん [2025/01/03(金) 13:22:57.82 ID:dEYOS8Dq.net] お題 AのあとbノAと同じ数だけBが続く言語エビがあるとします 文字列が入力されたときそれがエビ言語であるか判定するプログラムを作成してください → true A → false B → false AB → true ABB → false AAB → false AABB → true ABAABBAAABBB→ true
467 名前:デフォルトの名無しさん [2025/01/03(金) 13:25:00.11 ID:dEYOS8Dq.net] >>466 文字化け訂正 誤:AのあとbノAと同じ数だけBが続く言語エビがあるとします 正:AのあとにAと同じ数だけBが続く言語エビがあるとします
468 名前:デフォルトの名無しさん [2025/01/03(金) 15:30:14.42 ID:aGLRGnDr.net] >>466 lisp https://ideone.com/hHjwKz
469 名前:デフォルトの名無しさん [2025/01/03(金) 15:34:16.34 ID:aGLRGnDr.net] >>466 python https://ideone.com/2Xa1tx
470 名前:デフォルトの名無しさん mailto:sage [2025/01/03(金) 17:52:02.97 ID:aGLRGnDr.net] >>466 lisp (chatgptに教えてもらった) https://ideone.com/UYK3Qu https://chatgpt.com/share/67778c2d-647c-8011-96dd-954a8f0fba92
471 名前:デフォルトの名無しさん mailto:sage [2025/01/03(金) 20:07:57.67 ID:yesC/P5F.net] >>466 fn is_ab_lang(input: &str) -> bool { match input .chars() .fold(Some(0), |state, char| match (state, char) { (Some(count), 'A') => Some(count + 1), (Some(count), 'B') if count > 0 => Some(count - 1), _ => None, }) { Some(0) => true, _ => false, } } fn main() { for s in ["", "AB", "AABB", "ABAABBAAABBB"] { assert!(is_ab_lang(s)); // true } for s in ["A", "B", "BA", "ABB", "AAB", "ABBA"] { assert!(!is_ab_lang(s)); // false } }
472 名前:デフォルトの名無しさん mailto:sage [2025/01/03(金) 23:45:21.31 ID:AD9nWeeV.net] >>466 c https://ideone.com/KDcKNc #include <stdio.h> #include <string.h> int isablang(const char *s) { size_t a = strspn(s, "A"), b = strspn(s + a, "B"); return !*s || 0 < a && 0 < b && a == b && isablang(s + a + b); } void g(const char *s) { printf("%s\t%s\n", isablang(s) ? "true" : "false", s); } int main() { g("A"), g("B"), g("C"), g("BA"), g("CA"), g("ABB"), g("AAB"), g("AABABB"), g("ABC"), g("CAB"), g("ABCAB"); g(""), g("AB"), g("ABAB"), g("AABB"); return 0; }
473 名前:デフォルトの名無しさん [2025/01/04(土) 14:03:19.07 ID:uiECOsgP.net] >>470 ChatGPTロジックだとAABABBが受理されちゃう
474 名前:468 mailto:sage [2025/01/04(土) 15:43:19.87 ID:RKGS1C18.net] あら ちょっとだけ修正すれば…って、無理か
475 名前:デフォルトの名無しさん mailto:sage [2025/01/04(土) 16:26:18.49 ID:kbkaPDs8.net] >>466 c https://ideone.com/x7a81M ・strspn使わない ・再帰しない #include <stdio.h> int isablang(const char *s) { const char *t, *u; for (; *s; s = u) { if (*s != 'A') return 0; else for (t = s; *t == 'A'; t++); if (*t != 'B') return 0; else for (u = t; *u == 'B'; u++); if (t - s != u - t) return 0; } return 1; }
476 名前:デフォルトの名無しさん [2025/01/04(土) 21:19:41.74 ID:uiECOsgP.net] お題 貨幣・銀行券を次の文字列で表すとします (1) (5) (10) (50) (100) (500) [1000] [5000] [10000] 貨幣・銀行券がランダムに次のような文字列で与えられます (100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000] 与えられた貨幣・銀行券を分類して貨幣・銀行券の価値が高い順に次のように出力するプログラムを作成してください [10000] [5000] [1000][1000][1000][1000] (500) (100)(100)(100) (50) (10)(10) (5) (1)
477 名前:デフォルトの名無しさん mailto:sage [2025/01/04(土) 22:52:21.99 ID:frbzLXtQ.net] >>476 c https://ideone.com/TBzq6C
478 名前:デフォルトの名無しさん [2025/01/05(日) 03:39:43.83 ID:/228f09V.net] >>451 誰もいないので自分でAIに司令してやってみた が何かおかしい https://ideone.com/ZlulrF
479 名前:デフォルトの名無しさん mailto:sage [2025/01/05(日) 21:35:39.46 ID:6Z+55hA8.net] >>476 ruby https://ideone.com/6bso7P
480 名前: [2025/01/12(日) 04:14:11.28 ID:zWON4EbF.net] >>466 Kotlin https://paiza.io/projects/SkS05OZPJQJlBJ0iWlkkeA
481 名前: [2025/01/12(日) 04:47:49.98 ID:zWON4EbF.net] >>476 Kotlin https://paiza.io/projects/rM9KpHluaNW1E3bsLY2k6A
482 名前:デフォルトの名無しさん [2025/01/12(日) 17:40:12.54 ID:Mt0OVaIB.net] 4*4タイルゲームをAIに命令させてやらせているが それっぽいのを出力はするが正しい勝利判定ができていない
483 名前:デフォルトの名無しさん mailto:sage [2025/01/13(月) 13:03:01.90 ID:mFwJihvQ.net] >>440 c https://ideone.com/UKze06
484 名前:デフォルトの名無しさん mailto:sage [2025/01/13(月) 20:43:35.02 ID:zlmvetys.net] >>440 java https://ideone.com/mGUDU4
485 名前:9 mailto:sage [2025/01/20(月) 01:11:38.35 ID:zWVP8H/r.net] >>476 Perl5 $s = '(100)(10)(1)[10000](5)(500)[1000][5000][1000][1000](10)(100)(50)(100)[1000]'; $h{$_} .= $_ for $s =~ /\(\d+\)|\[\d+\]/g; use List::Util 'sum'; $v{$h{$_}} = sum($h{$_} =~ /\d+/g) for keys %h; print "$_\n" for sort{$v{$b} <=> $v{$a}} keys %v; 実行結果 ~ $ perl 22_474_value.pl [10000] [5000] [1000][1000][1000][1000] (500) (100)(100)(100) (50) (10)(10) (5) (1)
486 名前:9 mailto:sage [2025/01/21(火) 02:09:25.80 ID:Kvjf8jsk.net] >>485 Perl5 $_ = 'abc def ghi'; print join(' ' x 4, split) . "\n";
487 名前:デフォルトの名無しさん [2025/01/22(水) 21:35:12.82 ID:JtEnwxKE.net] お題 文字列と長さを入力として受け取り デカルト積のリストを出力してください 入力:ABC 1 出力:[A, B, C] 入力:ABC 2 出力:[AA, AB, AC, BA, BB, BC, CA, CB, CC] 入力:ABC 3 出力:[AAA, AAB, AAC, ABA, ABB, ABC, ACA, ACB, ACC, BAA, BAB, BAC, BBA, BBB, BBC, BCA, BCB, BCC, CAA, CAB, CAC, CBA, CBB, CBC, CCA, CCB, CCC]
488 名前:デフォルトの名無しさん mailto:sage [2025/01/22(水) 22:43:43.59 ID:EHGf/TPZ.net] >>487 Rust fn odai(文字列: &str, 長さ: usize) -> Vec<String> { use itertools::Itertools; (0..長さ) .map(|_| 文字列.chars()) .multi_cartesian_product() .map(String::from_iter) .collect() } fn main() { assert_eq!(odai("ABC", 1), ["A", "B", "C"]); assert_eq!(odai("ABC", 2), ["AA", "AB", "AC", "BA", "BB", "BC", "CA", "CB", "CC"]); assert_eq!(odai("ABC", 3), ["AAA", "AAB", "AAC", "ABA", "ABB", "ABC", "ACA", "ACB", "ACC", "BAA", "BAB", "BAC", "BBA", "BBB", "BBC", "BCA", "BCB", "BCC", "CAA", "CAB", "CAC", "CBA", "CBB", "CBC", "CCA", "CCB", "CCC"]); }
489 名前:デフォルトの名無しさん mailto:sage [2025/01/22(水) 23:18:53.24 ID:dYX3B7ea.net] >>487 ruby https://ideone.com/EA8orq f = ->(s, n) {:product.to_proc.(*[s.chars]*n).map(&:join)}
490 名前:デフォルトの名無しさん mailto:sage [2025/01/22(水) 23:57:13.34 ID:EHGf/TPZ.net] >>487 Rust 今回は積ライブラリを使わない自力版 fn odai(文字列: &str, 長さ: usize) -> Vec<String> { let chars = 文字列.chars().collect::<Vec<_>>(); let mut state = vec![0; 長さ]; let mut output = Vec::new(); 'Loop: loop { let s = state.iter().map(|i| chars[*i]).collect(); output.push(s); for index in state.iter_mut().rev() { *index += 1; if *index == chars.len() { *index = 0; continue; } continue 'Loop; } return output; } } 検証用main()は>>488 と同じ
491 名前:デフォルトの名無しさん [2025/01/23(木) 18:33:06.01 ID:hcg9tgUx.net] >>487 JavaScript const prod = function* (str, len, buf = []) { if (len > 0) { for (let i = 0; i < str.length; i++) { buf.push(str[i]); yield* prod(str, len - 1, buf); buf.pop(); } } else { yield buf.join(""); } }; for (let n = 1; n < 4; n++) { console.log([...prod("ABC", n)]); }
492 名前:デフォルトの名無しさん mailto:sage [2025/01/23(木) 20:05:23.84 ID:naue5Hlh.net] >>487 ocaml https://ideone.com/hEQ0UI >>487 octave https://ideone.com/Hga7TO
493 名前:9 mailto:sage [2025/01/24(金) 01:44:22.46 ID:p08ruAfw.net] >>487 Perl5 for $n (1..3) { @cp = @s = qw(A B C); while(--$n) { @cp = map{ $p = $_; map{ "$p$_" } @s } @cp } print "@cp\n"; } ※見易くするためインデントは全角スペースに置換してあります 実行結果 ~ $ perl 22_485_CartesianProd.pl A B C AA AB AC BA BB BC CA CB CC AAA AAB AAC ABA ABB ABC ACA ACB ACC BAA BAB BAC BBA BBB BBC BCA BCB BCC CAA CAB CAC CBA CBB CBC CCA CCB CCC
494 名前:9 mailto:sage [2025/01/24(金) 17:38:14.24 ID:cg1ZmS3G.net] >>466 Perl5 for (<DATA>) { chomp; print "$_ → ", (/^(A((AB)?|(?1))B)+$/g ? 'true' : 'false'), "\n"; } __DATA__ A B AB ABB AAB AABB ABAABBAAABBB ABC AABABB ※見易くするためにインデントを全角スペースに置換してあります 実行結果 ~ $ perl 22_464_AB_rec_rex.pl → false A → false B → false AB → true ABB → false AAB → false AABB → true ABAABBAAABBB → true ABC → false AABABB → false
495 名前:デフォルトの名無しさん mailto:sage [2025/01/24(金) 20:04:46.59 ID:kDOvSp0D.net] >>487 dart https://ideone.com/nZXS5G >>487 rust https://ideone.com/07rym1
496 名前:9 mailto:sage [2025/01/25(土) 02:52:09.44 ID:wVQIyzpy.net] >>494 /g の gは不要で / でおkだった…orz
497 名前:デフォルトの名無しさん mailto:sage [2025/01/25(土) 03:04:24.02 ID:Z97MpHAu.net] どんまい
498 名前:デフォルトの名無しさん mailto:sage [2025/01/25(土) 21:23:47.57 ID:KM9w0vp0.net] >>487 c https://ideone.com/7DAmou ・バッファに取る版 >>487 c https://ideone.com/irBE3p ・バッファに取らない版 ・表示するだけ
499 名前:デフォルトの名無しさん [2025/01/26(日) 14:07:38.91 ID:nBBaggrk.net] >>487 Java https://paiza.io/projects/W5rymKHMXkZgp2ID0-tfMg
500 名前:493 mailto:sage [2025/01/26(日) 15:22:46.05 ID:dl7YvN1C.net] >>487 dart https://ideone.com/WtkLVE ・若干の簡略化 >>487 rust https://ideone.com/VXyvY2 ・若干の簡略化?
501 名前:デフォルトの名無しさん mailto:sage [2025/01/27(月) 00:00:51.14 ID:/Jqezixy.net] >>487 java https://ideone.com/H7Pti7
502 名前:デフォルトの名無しさん [2025/01/27(月) 09:16:22.69 ID:rqFJtGlJ.net] お題 入力された文字列から重複する文字を抽出してください T → CG → ATA → A CGGA → G ATGAT → AT GTTGCA → GT CCCCGGG → CG ACTGCGAG → ACG ATCAGAATA → AT TGCCATGACA → TGCA
503 名前:9 mailto:sage [2025/01/27(月) 17:15:59.64 ID:cwZgX9Gy.net] Perl5 for (qw{T CG ATA CGGA ATGAT GTTGCA CCCCGGG ACTGCGAG ATCAGAATA TGCCATGACA}) { %h = (); $h{$_}++ for split ''; print "$_ → ", (grep{1 < $h{$_}} keys %h), "\n"; } ※見易くするためインデントを全角スペースに置換してあります 実行結果 ~ $ perl 22_500_dupe_char.pl T → CG → ATA → A CGGA → G ATGAT → TA GTTGCA → GT CCCCGGG → CG ACTGCGAG → GAC ATCAGAATA → TA TGCCATGACA → TGAC
504 名前:9 mailto:sage [2025/01/27(月) 21:20:12.94 ID:cwZgX9Gy.net] >>503 Coilotに入力して処理内容を問うてみたらちゃんと返してきてワラタ https://copilot.microsoft.com/chats/rbPk2t5sxTRgAPM8BeSxZ
505 名前:9 mailto:sage [2025/01/27(月) 21:22:36.75 ID:cwZgX9Gy.net] CopilotのURLをコピペしても他の人に内容を見せることはできなかったワ…orz
506 名前:デフォルトの名無しさん mailto:sage [2025/01/27(月) 21:24:28.42 ID:LHxZVLOG.net] >>502 octave https://ideone.com/eLcVPC function s = f(s) [~, ia] = unique(s); s(ia) = []; if 1 < length(s) [~, ia] = unique(s, 'first'); s = s(sort(ia)); end end >>502 ruby https://try.ruby-lang.org/playground/#code=f+%3D+-%3Es+%7Bs.chars.tally.select+%7B1+%3C+_2%7D.keys.join%7D%0Ass+%3D+%3C%3CEOS.lines(chomp%3A+true)%0AT%0ACG%0AATA%0ACGGA%0AATGAT%0AGTTGCA%0ACCCCGGG%0AACTGCGAG%0AATCAGAATA%0ATGCCATGACA%0AEOS%0Aputs+ss.map+%7B%7Cs%7C+%22%23%7Bs%7D+-%3E+%23%7Bf.(s)%7D%22%7D&engine=cruby-3.3.0 https://ideone.com/9E5Z9a f = ->s {s.chars.tally.select {1 < _2}.keys.join}
507 名前:デフォルトの名無しさん mailto:sage [2025/01/27(月) 21:30:57.80 ID:l9HsQRRu.net] >>487 lisp https://ideone.com/Hiqt3o >>502 lisp https://ideone.com/eRqGSp
508 名前:デフォルトの名無しさん mailto:sage [2025/01/28(火) 21:18:03.62 ID:oNqYbqge.net] >>502 dart https://ideone.com/WZzsxb >>502 c https://ideone.com/1c41ME
509 名前:デフォルトの名無しさん mailto:sage [2025/01/29(水) 01:00:49.19 ID:4mvV5Tkg.net] >>502 c++ https://ideone.com/5VRuHk
510 名前:デフォルトの名無しさん mailto:sage [2025/01/29(水) 01:49:29.44 ID:PQfpjql4.net] >>502 REM 重複チェック.bat ruby -x "%~f0" exit #~ #!ruby while 1 print "> " a=$stdin.gets.chomp.split("") exit if a==[] puts a.select{|e| a.count(e)>1}.uniq.join end
511 名前:デフォルトの名無しさん mailto:sage [2025/01/29(水) 21:56:05.24 ID:GDFS0NvX.net] >>502 java https://ideone.com/zIZZ1G
512 名前:デフォルトの名無しさん [2025/01/30(木) 21:27:24.39 ID:te1+SH0T.net] お題 ソース文字列と検索文字列が入力されます 検索文字列の文字をすべて含むソース文字列の部分文字列のうち 一番短い部分文字列を出力してください DHBICEJAFG EIC → ICE FDGJHCBIEA EIC → CBIE FBHDCIJGEA EIC → CIJGE JDIBGHCEAF EIC → IBGHCE JBCIAGDHEF EIC → CIAGDHE EJFBCAGIHD EIC → EJFBCAGI IADCGJFBEH EIC → IADCGJFBE IDFHBJGAEC EIC → IDFHBJGAEC
513 名前:506 mailto:sage [2025/01/30(木) 21:43:26.41 ID:ID2xuR+0.net] >>502 c https://ideone.com/LLFaOP ・unsigned int m[128] = {0};を使って集計
514 名前:デフォルトの名無しさん mailto:sage [2025/01/30(木) 22:47:12.58 ID:3iB+73MI.net] 高速文字列解析の世界に似た問題のアルゴリズム(ウェーブレット木)が沢山ありました
515 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 00:36:51.89 ID:MBodgIXJ.net] >>512 ruby https://ideone.com/K7lxJe
516 名前:デフォルトの名無しさん [2025/01/31(金) 13:46:22.55 ID:+tPQNmsr.net] このスレでいいのかわからんのだけど Rust勉強中なんだがメモリ安全性の恩恵を受けやすいなんかしらかのプログラムを書こうと思ってるんだがなにかいいお題はあるか? 言語処理系は大体作ってるのでそれ以外で頼む
517 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 15:33:43.41 ID:b4vq2KMj.net] う~んこの嫌われムーブはあのおじさんか このスレでは自重して欲しいな
518 名前:デフォルトの名無しさん [2025/01/31(金) 16:14:43.64 ID:fZW/Grtl.net] >>516 へのお題 次の操作ができる循環リンクリストを作成してください ・空のリストへの挿入 ・冒頭の挿入 ・最後に挿入 ・指定された位置への挿入 ・最初のノードを削除する ・最後のノードを削除する ・任意の位置からノードを削除する
519 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 21:55:55.86 ID:mLWOFznj.net] >>516 Rustはメモリのデータ競合もデータ参照競合も全てコンパイルエラーにしてくれるから間違えようがないね 他の普通の言語だと実行して問題発生に気付いて調査して頑張ってようやく競合が原因だと判明して間違えていたことがわかるから開発効率の悪さとして差が現れるけど Rustは実行前にその種のミスのデバッグまで全て終えてしまう感じ
520 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 22:10:00.47 ID:4ClqIqkw.net] 普通は問題発生前に気がつく
521 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 22:17:10.46 ID:bHXxdIdo.net] >>512 c https://ideone.com/MZt32o
522 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 22:38:00.61 ID:3jAIz2ps.net] >>520 グローバル変数を排他制御せずに使ってしまっていたりするミスなどよく見かけるような 一般的にも巨大なコードになったり複数人で共通認識なかったりで見逃しミスは必ず出てくる そしてタイミング次第によって稀にバグが起こるパターンとか負荷が高くなって起きてバグ発覚とか
523 名前:デフォルトの名無しさん mailto:sage [2025/01/31(金) 23:44:08.10 ID:mLWOFznj.net] 全て自分で出来る気付くミスらない って自己過信な人がセキュリティホールを招いてるからね 自動的にサポートしてくれる言語を使うのが安全で開発効率もいいよ
524 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 00:00:30.73 ID:pgp85i6o.net] ちゃんとルールを守って運転すれば 事故も起きないし、違反で捕まらない それと同じ
525 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 00:26:30.15 ID:cvjWKAds.net] >>519 せっかくだからRustで>>518 やってきなよ
526 名前:519 mailto:sage [2025/02/01(土) 17:22:30.12 ID:/Ur4AoNp.net] >>512 c https://ideone.com/tdT1q2 ・若干の高速化 部分文字列を一文字ずつズラして検証していたのを n = strcspnで探してn文字スキップへ
527 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 22:42:58.39 ID:1BfoGXYb.net] >>518 横からだがその仕様ならベクタをリングバッファとして使った両端キューで十分だな 多くの実用例でもこの方が速いことが知られている use std::collections::VecDeque; // 空のキュー let mut deque: VecDeque<T> = VecDeque::new(); // 先頭に挿入 deque.push_front(t); // 最後に挿入 deque.push_back(t); // 指定位置に挿入 deque.insert(index, t); // 先頭を削除して得る let first: Option<T> = deque.pop_front(); // 最後を削除して得る let last: Option<T> = deque.pop_back(); // 指定位置を削除して得る let element: Option<T> = deque.pop_back();
528 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 22:57:16.48 ID:FwGLv5NU.net] ズルしてどうするんよ…
529 名前:デフォルトの名無しさん mailto:sage [2025/02/01(土) 23:00:12.86 ID:FwGLv5NU.net] Rustのメモリ安全性を確認するためにプログラム書きたいんでしょ、だったら循環リストをフルスクラッチするしかないよね
530 名前:デフォルトの名無しさん mailto:sage [2025/02/02(日) 19:41:14.89 ID:NpAQnhYs.net] リンクリストならindex番目の操作(挿入or切除)は index番目で分解して操作して合体するだけなのでこれで動くよ use std::collections::LinkedList; trait LinkedListExt<T> { fn insert_at(&mut self, index: usize, value: T); fn remove_at(&mut self, index: usize) -> Option<T>; } impl<T> LinkedListExt<T> for LinkedList<T> { fn insert_at(&mut self, index: usize, value: T) { let mut tail = self.split_off(index); self.push_back(value); self.append(&mut tail); } fn remove_at(&mut self, index: usize) -> Option<T> { let mut tail = self.split_off(index); let value = tail.pop_front(); self.append(&mut tail); value } }
531 名前:デフォルトの名無しさん [2025/02/03(月) 21:15:02.53 ID:swo++26S.net] >>512 R https://ideone.com/0Hr1lU C++ (>>526 と同じ巨大文字列での繰り返しあり) https://ideone.com/7fJXjB
532 名前:デフォルトの名無しさん mailto:sage [2025/02/03(月) 22:57:52.37 ID:VF4m0iMh.net] >>512 c https://ideone.com/L4xIAy ・f_529 は529さんのパクり ・f_strcspn_chr は strchr してから strcspn すると単純ながら若干の速度向上
533 名前:530 mailto:sage [2025/02/04(火) 21:13:55.63 ID:k8XtEdoq.net] >>512 c https://ideone.com/Mar3S7 ・f_529direct は出現位置集めるのやめた *min = strchr(*min + 1, **min)) でそのまま次へ
534 名前:531 mailto:sage [2025/02/05(水) 20:39:11.49 ID:mFRiRIqM.net] >>512 c https://ideone.com/jeAf1a ・デバッグと若干の整理
535 名前:532 mailto:sage [2025/02/05(水) 23:28:39.35 ID:mFRiRIqM.net] >>512 java https://ideone.com/EdHfzN
536 名前:デフォルトの名無しさん [2025/02/06(木) 22:16:32.16 ID:u6r6iDwj.net] >>512 C++ https://ideone.com/ywT3qw >>531 からの変更点 ・sへのtの文字の出現位置を高速取得(1バイト文字のみに対応) ・sにtの同一文字が3回以上連続して出現する場合に最初と最後以外の位置を省略
537 名前:デフォルトの名無しさん mailto:sage [2025/02/07(金) 19:14:17.64 ID:UF6GKvr5.net] >>502 Wolfram Language str = "ATGAT" >> Out[1]= ATGAT duplicates = str // Characters \ (* { A, T, G, A, T } *) \ // Counts \ (* <| A -> 2, T -> 2, G -> 1 |> *) \ // Select[Function[ 1 < # ]] \ (* <| A -> 2, T -> 2 |> *) \ // Keys \ (* { A, T } *) \ // StringJoin (* "AT" *) >> Out[2]= AT
538 名前:デフォルトの名無しさん mailto:sage [2025/02/07(金) 21:12:13.92 ID:n3kvQb3T.net] テス
539 名前:9 mailto:sage [2025/02/07(金) 21:20:22.98 ID:dMuAEB5V.net] >512 Perl5 https://ideone.com/lceN9R
540 名前:デフォルトの名無しさん mailto:sage [2025/02/07(金) 22:53:14.41 ID:ovhX7KXo.net] >>512 c https://ideone.com/uYlPLX ・f_537 は537さんのパクリ
541 名前:9 mailto:sage [2025/02/07(金) 23:00:25.46 ID:dMuAEB5V.net] >>539 しくった、これ一番短い範囲ではなく間違って一番長い範囲を検出してる。 サンプルデータではたまたま同じ解になるようで、間違いを見落としてしまった。 それから、一番長い(短いにすべきだったが)範囲の検索にわざわざ候補listをsortして[0]番目を 取得しているが無駄だし規模が大きくなると効率よくない 時間あったら直しますわ〜
542 名前:9 mailto:sage [2025/02/07(金) 23:02:20.43 ID:dMuAEB5V.net] >>540 あーでも527の方式がいまんとこ一番早いんだな、検証thx
543 名前:9 mailto:sage [2025/02/07(金) 23:04:01.40 ID:dMuAEB5V.net] >>542 527 じゃなくて 537ね。スマソ
544 名前:538 mailto:sage [2025/02/07(金) 23:08:45.80 ID:ovhX7KXo.net] >>542 >>539 さん方式は動的にメモリとらなくていいのがいいよね、清々しくていいよね あと実行時間の値はまぁアテにはならんので参考程度にw
545 名前:デフォルトの名無しさん [2025/02/07(金) 23:41:05.56 ID:qBbgMoXu.net] >>502 PowerShell "T", "CG", "ATA", "CGGA", "ATGAT", "GTTGCA", "CCCCGGG", "ACTGCGAG ", "ATCAGAATA", "TGCCATGACA" |% { "$_ → $(-join ([char[]]$_ | group -case |% {$_.name[$_.count -le 1]}))" } [実行結果] T → CG → ATA → A CGGA → G ATGAT → AT GTTGCA → GT CCCCGGG → CG ACTGCGAG → ACG ATCAGAATA → AT TGCCATGACA → TGCA
546 名前:9 mailto:sage [2025/02/08(土) 00:22:55.52 ID:vma3KbbM.net] >>512 Perl5、>>539 の修正版 https://ideone.com/klqLux 修正点 ・>>539 では間違って一番長い範囲を検出していたが、一番短い範囲に修正した。(サンプルデータではそれらの解はたまたま一致) ・パターンが3文字であることに依存する定数「2(=3 -1 )」をハードコードしている箇所があったので、パターン文字数次第で処理するように修正 ・検出した候補文字列リストのうち一番短い物の検索のためにわざわざ候補リスト全体をsortするのをやめて reduceによって長さが一番短い文字列を検索するように修正 List::Utils は言語処理系にデフォルトで付属のコアモジュール、 List::MoreUtils はCPANのオプションノジュールだがideoneのperlにはインスコされていたので使っちゃいましたテヘペロ なお、候補文字列リストを作らず、ループの最内ifの中で一番短い文字列だけを記録していく様に記述すれば 大規模問題で若干効率が良くなるだろうけど、 まあいいや、もういいや。
547 名前:9 mailto:sage [2025/02/08(土) 00:26:07.95 ID:vma3KbbM.net] >>546 List::Utils → List::Util ね。スマソ
548 名前:デフォルトの名無しさん [2025/02/08(土) 08:27:20.39 ID:7bAG/IVE.net] >>512 Wolfram Language s = "DHBICEJAFG" >> Out[1]= DHBICEJAFG pattern = "EIC" >> Out[2]= EIC shortestMatch = \ (* 全通りの部分文字列を生成する *) \ ReplaceList[ Characters[ s ], {___, x__, ___} -> {x} ] \ (* 短い順、先頭に近い順に並べる *) \ // Sort \ (* 検索文字列の文字を全て含むものを選ぶ *) \ // Select[ ContainAll[ Characters[ pattern ] ] ] \ (* 1つ目を文字列として返す *) \ // Extract[ 1 ] // StringJoin >> Out[3]= ICE
549 名前:9 mailto:sage [2025/02/08(土) 17:50:15.20 ID:HpUe4TZQ.net] >>512 Perl5、>>546 をもう一回だけ改良 https://ideone.com/YkuK1w 改良点: ・検出された範囲の候補を一通りリストに蓄えて、あとでその中から最短のものを探す方式を止めて、 範囲を検索するループ内のifでその時点までの最短な範囲の判定と記録を行うようにした。 ・CPANモジュールList::MoreUtilsのminmaxを使わない。 ・コアモジュールList::Utilはminだけ使う。reduceは使わない。 なんだかPerlのコードらしい感じが減って、ベタな感じのコードになってしまいました
550 名前:デフォルトの名無しさん [2025/02/08(土) 19:59:09.70 ID:EDI8nVtP.net] >>512 C++ https://ideone.com/7EHx0H >>536 からの変更点 ・minmax_elementを呼び出さずに済むようにして高速化
551 名前:デフォルトの名無しさん [2025/02/08(土) 20:02:06.41 ID:EDI8nVtP.net] >>512 C++ https://ideone.com/TluWQi >>550 では検索文字列が短くて高速化されたか分かりにくかったので、長くして529, 534, 548の 実行時間を比較してみると、効果が顕著に現れた。
552 名前: [2025/02/09(日) 03:18:28.07 ID:Y8d2noVo.net] >>487 Kotlin https://paiza.io/projects/RtyGxT2PXZScHW6eucI5ng
553 名前: [2025/02/09(日) 03:56:54.57 ID:Y8d2noVo.net] >>502 Kotlin https://paiza.io/projects/eipNjg4meAtA7__e3JTRdg
554 名前:デフォルトの名無しさん mailto:sage [2025/02/09(日) 12:47:59.38 ID:uN83pfj6.net] >>512 c https://ideone.com/D2AZMK ・両端に着目し、両端のみを更新しつつ調べていく(が、これといってパっとせず) ・f_both_ends はあくまで元の文字列s上を調べていく ・f_both_ends_v2 は「次」「隣」にアクセスしやすくした構造の上を調べていく ・あと実行時間の値ははげしくブレブレなので参考程度にとどめておいてね
555 名前:デフォルトの名無しさん [2025/02/09(日) 21:29:55.65 ID:do9MXosP.net] >>487 R https://ideone.com/wuW5oV
556 名前:デフォルトの名無しさん [2025/02/09(日) 21:31:24.58 ID:do9MXosP.net] >>512 C++ https://ideone.com/bwvs06 >>550 からの変更点 ・データ構造を単純化したら速くなった
557 名前:デフォルトの名無しさん [2025/02/09(日) 21:35:08.87 ID:do9MXosP.net] >>512 https://ideone.com/46Tb28 >>551 の実行速度比較に554を追加。548は不要な2行を削除した。検索文字列が短いのと長いのの両方をテスト。
558 名前: [2025/02/10(月) 13:21:24.86 ID:g+w4FSG9.net] >>512 Kotlin 出来たことは出来たが、もっと簡単に出来そうな気がしてきた。 https://paiza.io/projects/RwNXYMH6q3P6v0vx9zbZng
559 名前:デフォルトの名無しさん [2025/02/10(月) 21:24:31.20 ID:KgR1Tipz.net] >>487 C# (IEnumerableとして列挙) https://ideone.com/UBY8bl
560 名前:デフォルトの名無しさん [2025/02/11(火) 03:27:04.16 ID:FlAqv/ML.net] 動画再生回数、登録者数、評価数、コメント数 上2桁、下2桁に04、13、40、44、71、74など (+生年月日、IDの数字など)の組み合わせ 業者による忌み数字、不吉数字の嫌がらせ&精神攻撃がキモすぎ
561 名前: 警備員[Lv.20] [2025/02/11(火) 05:48:25.27 ID:Y4Uu1QjJ.net] それはお題なのか?それともただの誤爆か?
562 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 06:03:36.08 ID:h8gYOd9x.net] 糖質でしょ 忌み数字不吉数字とか意味不明なこと言ってるし,それを業者が特定個人を狙って表示する意味も分からんし
563 名前:デフォルトの名無しさん [2025/02/11(火) 10:54:21.93 ID:E5oVpL7o.net] お題 数列が入力されます ニ番目に小さい数を出力してください 入力:4, 5, 1, 7, 1, 2, 8, 9, 2, 7 出力:2
564 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 11:46:37.94 ID:A5/Zs5AB.net] こんちゃ 質問いいでしょうけ プルダウン(ポップアップ)をUIとしてだすとして 見えている項目名と、実際にパラミータとして出す値を変えたい時はどうしたらよか
565 名前:9 mailto:sage [2025/02/11(火) 14:53:15.78 ID:mMj2PIa8.net] >>563 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";
566 名前: [2025/02/11(火) 16:33:48.19 ID:Y4Uu1QjJ.net] >>564 環境や言語やフレームワークを書いて限定しないと色々な環境や言語やフレームワークでの答えが適当に沢山湧いて出て来る可能性あるぞ。 しかも分からない所は適当に解釈してだ。なぜならここはお題スレだから。
567 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 16:37:12.05 ID:WPoAkGuN.net] >>563 ruby https://ideone.com/OI7hWs >>563 octave https://ideone.com/36aKUO >>563 c https://ideone.com/eDmlMM
568 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 16:40:21.13 ID:gFwXvlnz.net] >>563 #!ruby puts $stdin.gets.chomp.split(",").map{|e| e.to_i}.uniq.sort[1]
569 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 17:43:14.68 ID:7RexIvi8.net] >>512 lisp https://ideone.com/qm4PsV
570 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 17:48:30.95 ID:7RexIvi8.net] >>563 lisp https://ideone.com/g6m1EK
571 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 18:19:05.70 ID:7RexIvi8.net] >>570 全然だめでした 取りあえずテスト追加済
572 名前:デフォルトの名無しさん [2025/02/11(火) 20:45:09.89 ID:hMHygfcC.net] >>563 R https://ideone.com/3beF1j C++ https://ideone.com/A8hp2f それぞれ3通りの方法で、大きなデータでの実行時間を比較
573 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 23:21:03.54 ID:Vzh5cLYk.net] 数列が入力されるので 整数の数列だけでなく浮動小数点数の数列にも対応してくださいね ニ番目に小さい数がない時 例えば同じ数しか存在しない時や数列の長さが1の時には 解がないことを返してくださいね 例えばその時にMAX値が返ってきたら失格ですよ
574 名前:565 mailto:sage [2025/02/11(火) 23:28:05.14 ID:qmej6t15.net] >>563 ocaml https://ideone.com/aV59Yd >>563 java https://ideone.com/PdgusX
575 名前:9 mailto:sage [2025/02/11(火) 23:36:31.53 ID:yxel6cu3.net] 先に言えよって、感じw
576 名前:デフォルトの名無しさん mailto:age [2025/02/11(火) 23:48:25.56 ID:E5oVpL7o.net] >>573 は出題者ではないよ 出題者として申し上げるなら>>573 は観点がダサい
577 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 23:50:12.69 ID:HwVbkmdb.net] 小数対応はともかく max値を返してしまう人はプログラマ失格かな あとsortを使ってしまう人は計算量を知らない初心者
578 名前:デフォルトの名無しさん mailto:age [2025/02/11(火) 23:53:59.73 ID:E5oVpL7o.net] そういうこだわりはアスペルガーにしか思えないな、どうでも良いじゃないですかそんなこと
579 名前:デフォルトの名無しさん mailto:age [2025/02/11(火) 23:56:29.96 ID:E5oVpL7o.net] こだわりは自分の胸のうちに留めていただきたい、他人に求めたら回答の幅を狭めるだけ、多様性のある回答こそ美しい
580 名前:デフォルトの名無しさん mailto:sage [2025/02/11(火) 23:57:23.71 ID:HwVbkmdb.net] >>578 多くの人はちゃんとnilとかemptyとかNoneなどを返しているよね プログラマならそこだけは守らなければならない必須事項
581 名前:デフォルトの名無しさん mailto:age [2025/02/11(火) 23:59:56.87 ID:E5oVpL7o.net] だからそういう、こうじゃないとダメだという態度がアスペルガー仕草なんだってばよ、君が思うのは勝手だが他人に求めるものじゃない
582 名前:デフォルトの名無しさん mailto:age [2025/02/12(水) 00:01:10.34 ID:hk2aQo3G.net] プログラミングはもっと自由なものなんだよ、思ったとおりにかけば良い
583 名前:9 mailto:sage [2025/02/12(水) 00:03:23.15 ID:yw0CaA/O.net] そういう条件は回答を見て思いついた後から言わず先に書くべきでは? そうでなければ、与えられた短い文とテストデータから、 処理対象データの範囲や要求仕様を読み手が色々解釈しても仕方ないだろ。 後からいろいろ言って批判なんてでもってのほかだと思うが。
584 名前:9 mailto:sage [2025/02/12(水) 00:05:30.21 ID:yw0CaA/O.net] 出来たもの見て実はこういう条件がありましたってケチつけるのはクソクライアントと一緒だな
585 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 00:13:52.34 ID:SJ0T1N6w.net] ざっと見たけどmax()を返してるのはC++の人だけで他は皆まともだ 普段からまともなコード書いてるかどうかバレてしまうから自由が面白い
586 名前:デフォルトの名無しさん mailto:age [2025/02/12(水) 00:18:10.68 ID:hk2aQo3G.net] 好きにしたら良いんやで吉田松陰もそんなこと言ってた気がする
587 名前:デフォルトの名無しさん mailto:age [2025/02/12(水) 00:20:24.72 ID:hk2aQo3G.net] まともとかバレるとかそういう当て擦りの嫌味ったらしい言い方どこで身につけてきたのあんた、母ちゃんは悲しいよ
588 名前:デフォルトの名無しさん [2025/02/12(水) 00:22:24.96 ID:Qtl/TEf6.net] >>585 関数がINT_MAXを返すのはまともなコードだろ。2番目に小さい数はINT_MAXではありえないから、 返り値がINT_MAXの場合は「なし」と表示すれば良いだけ。
589 名前:9 mailto:sage [2025/02/12(水) 00:28:30.94 ID:yw0CaA/O.net] 「データが二個未満の場合にはnilを返す。」とか書いとくべき。 でもそういう細かい条件をちまちま指定した窮屈な課題は、つまんなくて回答を造る意欲が減るんだよな。 シンプルで純な課題に対してどういうエレガントでエッセンシャルな回答があるか考えるのが楽しいのであって、 細かいいろんな条件を守る周辺コードで固めるような作業はつまんないから趣味の世界ではやりたくないな
590 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 00:31:16.47 ID:1WuTe288.net] 普段はプログラム載せるだけだけど、みんな意外と饒舌なんだなw
591 名前:9 mailto:sage [2025/02/12(水) 00:33:57.88 ID:yw0CaA/O.net] ここはある意味、回答のコードでもって語るスレだからな
592 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 00:35:35.77 ID:kQv2EDFI.net] お題にそんな指定ないのに みんなnilなどを返してるからこのスレの住人たちはセンスいいな
593 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 19:12:16.26 ID:FZJ50oR3.net] >>563 lisp (sbcl) https://ideone.com/Bct7bC >>563 lisp (clisp) https://ideone.com/yqfmzh clispだと何故かsort版の方が速い
594 名前:デフォルトの名無しさん mailto:sage [2025/02/12(水) 20:45:54.96 ID:JML0DDov.net] >>563 ruby https://ideone.com/svMSSw >>563 sqlite https://ideone.com/W02Q5r
595 名前:デフォルトの名無しさん [2025/02/12(水) 22:44:39.40 ID:Qtl/TEf6.net] >>563 , 571 >>572 のC++のf3をint型の最大値を含むデータにも対応させた。 C#にはint?型があるのですっきり書けるが、 https://ideone.com/oRhDL1 C++ではまあまあすっきり書くにはintへのポインタを返すしかないか。 https://ideone.com/xYnTSD (該当値が複数の位置に存在する場合にそれらのうちのどれへのポインタを返すかについては こだわらないものとする)
596 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 12:04:43.08 ID:KGk2Z9bM.net] お題:ランダムな数列から任意の並んでいる二つの数同士を足して、その二つの数の間に挿入せよ。 その新しい数が一桁ならそのまま挿入し二桁なら桁同士を足してその二桁の間に挿入せよ。 < 123456789 3 4 > 1237456789 (3+4=7) < 123456789 6 7 > 123456143789 (6+7=13 1+3=4)
597 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 12:31:31.25 ID:QhFtS6hw.net] 問題文の記述が下手かよ
598 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 13:27:16.37 ID:J5YSE8js.net] >>596 ruby a=$stdin.gets.chomp.split(" ") b=a[1].to_i+a[2].to_i c=(b<9 ? a[1]+b.to_s+a[2] : a[1]+"#{b/10}#{b/10+b%10}#{b%10}"+a[2]) puts a[0].gsub(a[1]+a[2],c)
599 名前:9 mailto:sage [2025/02/13(木) 17:35:13.67 ID:UAfabByi.net] >>596 Perl5、見易くするためインデントは全角スペースに置換してあります for (<DATA>) { ($s, $a, $b) = split; $c = $a + $b; $c = $1 . ($1 + $2) . $2 if $c =~ /(\d)(\d)/; $s =~ s/$a$b/$a$c$b/g; print "$s\n"; } __DATA__ 123456789 3 4 123456789 6 7 123456789 8 9 3141592653589793238462643383279502884197169399375105820974944 9 7 実行結果 ~ $ perl 22_594.pl 1237456789 123456143789 123456781879 3141592653589176793238462643383279502884191767169399375105820917674944
600 名前:デフォルトの名無しさん [2025/02/13(木) 20:12:01.16 ID:3SfOseF2.net] >>596 題意が以下の通りだとして、PowerShell (エラーチェックは省略) 自然数x, i, j (i + 1 = jを満たす) が与えられる。xの上i桁目の数字をx[i]で表す。 x[i]とx[j]の和をyとして、 ・yが1桁のとき、yをx[i]とx[j]の間に挿入せよ ・yが2桁のとき、y[1]とy[2]の和をy[1]とy[2]の間に挿入してから、yをx[i]とx[j]の間に挿入せよ function f($x, $i, $j) { $s = [string]$x $y = [int][string]$s[$i - 1] + [int][string]$s[$j - 1] if ($y -lt 10) { $s.insert($i, $y) } else { $s.insert($i, 11 * $y) } } (123456789, 3, 4), (123456789, 6, 7) |% { "< $($_[0]) $($_[1]) $($_[2])" "> $(f $_[0] $_[1] $_[2])", "" } [実行結果] < 123456789 3 4 > 1237456789 < 123456789 6 7 > 123456143789
601 名前:9 mailto:sage [2025/02/13(木) 20:24:48.49 ID:UAfabByi.net] 数学屋さんかいなw i,jの「3 4」とか「6 7」は桁の位置をしていしているのではなく数値列の中にある数字を指定するんジャマイカ とオレは解釈したが
602 名前:デフォルトの名無しさん [2025/02/13(木) 20:34:25.67 ID:3SfOseF2.net] >>601 そうか。だとすれば、 function f($x, $i, $j) { $s = [string]$x $y = $i + $j if ($y -ge 10) {$y *= 11} $s -replace "$i$j", "$i$y$j" } (123456789, 3, 4), (123456789, 6, 7), (123456789, 8, 9), ("3141592653589793238462643383279502884197169399375105820974944", 9, 7) |% { "< $($_[0]) $($_[1]) $($_[2])" "> $(f $_[0] $_[1] $_[2])", "" } [実行結果] < 123456789 3 4 > 1237456789 < 123456789 6 7 > 123456143789 < 123456789 8 9 > 123456781879 < 3141592653589793238462643383279502884197169399375105820974944 9 7 > 3141592653589176793238462643383279502884191767169399375105820917674944
603 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 20:45:01.39 ID:KiG3F5Wd.net] >>563 c https://ideone.com/ZyWoVM >>596 ruby https://ideone.com/gp9Fvp
604 名前:9 mailto:sage [2025/02/13(木) 20:52:32.26 ID:UAfabByi.net] なんでこの人はコーデイングするのがこんなに早いんだろう…
605 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 22:58:07.29 ID:bC7pFAVH.net] >>596 Rust fn f(input: &str, a: u32, b:u32) -> String { let src = format!("{a}{b}"); let dst = if a + b < 10 { format!("{a}{x}{b}", x = a + b) } else { format!("{a}{x}{y}{z}{b}", x = 1, y = 1 + a + b - 10, z = a + b - 10) }; use itertools::Itertools; input.split(&src).join(&dst) } fn main() { assert_eq!(f("123456789", 3, 4), "1237456789"); assert_eq!(f("123456789", 6, 7), "123456143789"); assert_eq!(f("3141592653589793238462643383279502884197169399375105820974944", 9, 7), "3141592653589176793238462643383279502884191767169399375105820917674944"); }
606 名前:デフォルトの名無しさん mailto:sage [2025/02/13(木) 23:47:12.83 ID:bC7pFAVH.net] >>563 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); }
607 名前:デフォルトの名無しさん mailto:sage [2025/02/14(金) 17:55:06.91 ID:L6dJMbYJ.net] わけがわからん アセンブラじゃあるまいし
608 名前:デフォルトの名無しさん mailto:sage [2025/02/14(金) 18:42:18.21 ID:RXjqXFcF.net] わからないのはどのへんなんだろう? ・型がジェネリックになっている点 ・代入文がないなど関数型プログラミングになっている点 ・パターンマッチングが使われている点 いずれも最近は対応している言語が増えてるような
609 名前:デフォルトの名無しさん mailto:sage [2025/02/14(金) 23:21:45.00 ID:bNo2F1oE.net] 可読性の良さから高階関数を使ったメソッドチェーンが一般的になってきたね マイクロソフトがC#などでLINQ広めたのがきっかけで各言語もその有用性から導入するようになった
610 名前:デフォルトの名無しさん mailto:sage [2025/02/14(金) 23:42:29.57 ID:PVqLPxMJ.net] お題:ランダムな英文字列が与えられる。隣り合う英文字が同じ大文字だった場合、その間にその大文字の小文字を挿入せよ In < abcDDefGG Out > abcDdDefGgG
611 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 00:16:29.67 ID:aVKCg5xf.net] >>610 ruby while 1 s=DATA.gets.chomp exit if s=="" t=s.gsub(%r|([A-Z])\1|){$1+$1.downcase+$1} puts "IN < #{s}\nOUT > #{t}" end __END__ abcDDefGG
612 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 00:16:34.18 ID:f9ERvXXy.net] >>596 dart https://ideone.com/uQxzo1 >>610 ruby https://ideone.com/pwoRRH
613 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 00:28:45.42 ID:/PgyVRU9.net] >>608 正規表現みたい非人間的な書式はやめようぜっての
614 名前:デフォルトの名無しさん [2025/02/15(土) 00:39:27.81 ID:rssRTGdz.net] >>610 PowerShell function f($s) { -join $( foreach ($i in 0..($s.length - 2)) { $s[$i] if ($s[$i] -ne $s[$i + 1]) {continue} if ($s[$i] -lt [char]"A" -or $s[$i] -gt [char]"Z") {continue} ([string]$s[$i]).ToLower() } $s[$i + 1] ) } "abcDDefGG", "abcDDDfGG" |% {"$_ → $(f $_)"} [実行結果] abcDDefGG → abcDdDefGgG abcDDDfGG → abcDdDdDfGgG
615 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 01:01:01.24 ID:qzrI3kKZ.net] >>610 Rust fn f(input: &str) -> String { let mut output = String::new(); let mut pre_uppercase = None; for char in input.chars() { if Some(char) == pre_uppercase { output.push(char.to_ascii_lowercase()); } output.push(char); pre_uppercase = char.is_ascii_uppercase().then_some(char); } output } fn main() { assert_eq!(f("abcDDefGG"), "abcDdDefGgG"); assert_eq!(f("abcDDDfGG"), "abcDdDdDfGgG"); }
616 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 09:21:24.60 ID:XILc/8JX.net] >>610 ruby https://ideone.com/nHcphN >>610 dart https://ideone.com/NxwW8Y
617 名前:614 mailto:sage [2025/02/15(土) 10:02:25.10 ID:UI50KRFJ.net] >>610 dart https://ideone.com/2E5Rxy
618 名前:9 mailto:sage [2025/02/15(土) 10:36:35.12 ID:1WENuqRv.net] >>610 Perl5、肯定先読みと置換の小文字変換 s/([A-Z])(?=\1)/\1\l\1/g, print for <DATA>; __DATA__ abcDDefGG abcDDDefGGG 実行結果 C:\Home>perl 22_608_ins_l.pl abcDdDefGgG abcDdDdDefGgGgG
619 名前:9 mailto:sage [2025/02/15(土) 10:39:20.52 ID:1WENuqRv.net] >>613 お断り〜します〜♪ ハハ (゚ω゚) ((⊂ノ ノつ)) (_⌒ヽ εニ≡ )ノ`J
620 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 10:40:34.16 ID:+yYMeR0h.net] >>596 >>610 lisp https://ideone.com/W5gGfD
621 名前:615 mailto:sage [2025/02/15(土) 13:20:38.24 ID:eC3jFbuY.net] >>610 java https://ideone.com/YfufZz >>618 _人人人人人人人人人人人人_ > 置換の小文字変換!? <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄ 勉強になりました
622 名前:デフォルトの名無しさん [2025/02/15(土) 21:05:44.70 ID:rssRTGdz.net] >>614 は文字列長が1文字の場合にバクがあった。PowerShellの0..-1は空(から)ではなく0, -1になるのが 原因 (Rの0:-1も同様)。修正するには、fの最初に if ($s.length -lt 2) {return $s} を挿入する。
623 名前:デフォルトの名無しさん [2025/02/15(土) 21:06:37.89 ID:rssRTGdz.net] >>563 C++ https://ideone.com/bQBKIM C#のヌル許容型と同じ挙動のnullable型を自作し、>>595 のC#のmin2関数をジェネリック化、 ポインタ参照化して移植した。 https://ideone.com/p2LNC9 593のC++のmin2関数と実行速度を比較する¹と30%ほど遅い。文字列型や可変長数値型と 違って最大値が存在する固定長数値型では、それを利用するf593の方が良い。 ── ¹ Microsoft C++では100回繰り返しテストが最適化され1回しか実行されない
624 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 21:52:48.39 ID:qa0m30Tb.net] >>623 最大値をundefined代わりに使ってはいけないと指摘があったのにまだ使っているのかいな そのコードで入力数列がこうだった場合 vector<int> a = {IntMax - 1, IntMax}; 2番目に小さい数として正解のintMaxを返さなければならない
625 名前:デフォルトの名無しさん [2025/02/15(土) 22:00:12.34 ID:rssRTGdz.net] >>624 >>595 のC++プログラムの実行結果を参照。入力数列にINT_MAXが含まれる場合でも問題ない。
626 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 22:09:09.66 ID:qa0m30Tb.net] >>625 それはm1とm2を間接にポインタで持つために遅くなっているf593() m1とm2を直接に整数で持つため速いf3()はIntMaxに対応できていない
627 名前:デフォルトの名無しさん [2025/02/15(土) 22:24:28.09 ID:rssRTGdz.net] >>626 >>623 の速度比較テストに>>572 のf3も追加 https://ideone.com/scnfdu ポインタで持つf593との比で、整数で持つf570は6%速いだけ。一方、null許容型のf621は29%も遅い。 最大値が存在する型ではそれを利用する方が良いという結論に変わりはない。
628 名前:デフォルトの名無しさん [2025/02/15(土) 22:29:41.23 ID:rssRTGdz.net] まあ、同じ値の要素が大量に存在する入力データではf570は遅くなるが、平均的な速度はf570の方が速い。
629 名前:デフォルトの名無しさん [2025/02/15(土) 22:31:16.05 ID:rssRTGdz.net] >>628 はf570じゃなくてf593だった。
630 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 22:42:01.35 ID:v2QOLp/q.net] f593でローカル変数へのポインタを返し得るのは如何かと
631 名前:デフォルトの名無しさん [2025/02/15(土) 23:34:59.77 ID:rssRTGdz.net] >>630 返しえないでしょ。
632 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 23:46:12.83 ID:qa0m30Tb.net] >>627 まずnullableのコードがおかしい 例えばoverload(op)のこれ if (y.isNull) return false; \ return x op y.value; \ Nullだとfals eとなり opの計算結果次第でもfal seとなり 両者を区別できない
633 名前:デフォルトの名無しさん mailto:sage [2025/02/15(土) 23:47:32.80 ID:qa0m30Tb.net] >>627 あとvector扱うコードは倫理的に際どいかな 長さ0でないことを調べずに いきなりint *m1 = &a[0], m2 = &y; 今回は長さ0の時に*m1をアクセスしないから論理的にギリセーフだけど際どい そのへんのトリッキーさも含めて (もしあれば)最小値も返す場合 (もしあれば)3番目の最小値も返す場合など このIntMax方式は破綻すると思う
634 名前:デフォルトの名無しさん [2025/02/15(土) 23:52:31.08 ID:rssRTGdz.net] >>632 >>623 に書いた通り、C#のヌル許容型T? (Nullable<T>のエイリアス) の挙動に従っただけだから。 文句があるならMicrosoftに言ってくれ。
635 名前:9 mailto:sage [2025/02/16(日) 06:28:07.79 ID:GnMUCCm7.net] qa0m30Tb の回答はどれよ?
636 名前:デフォルトの名無しさん [2025/02/16(日) 08:09:49.66 ID:v+IcfGmt.net] いるよねえ他人の回答に文句だけつけて自分では回答しないやつ
637 名前:デフォルトの名無しさん [2025/02/16(日) 08:16:54.29 ID:v+IcfGmt.net] 他人の回答が間違いとなるようにお題を解釈するのは知的なことではないよバカの所業だよ
638 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 08:20:29.71 ID:eNZyrnPC.net] そんなことより>>618 のワンライナーがカッコよくてほれぼれする
639 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 10:58:48.51 ID:EXJYkLn8.net] 帰ったと思ったらまたやってんのw
640 名前:デフォルトの名無しさん mailto:sage [2025/02/16(日) 15:14:38.18 ID:8bpH8MuA.net] コンパイラ警告無視するのが知的な事だと思ってそうだな
641 名前:9 mailto:sage [2025/02/16(日) 15:45:59.98 ID:GnMUCCm7.net] 回答のコードでもって語ってほしいなぁ
642 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 13:08:08.60 ID:lz3iaMcC.net] お題:ランダムな数列が与えられる。隣り合う数字が偶数同士の時、あいだに0を。奇数同士の時は1を挿入し、それ以外は何も挿入しない In < 123346 Out > 12313406
643 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 13:47:54.59 ID:1CKZ5rpi.net] >>642 ruby DATA.readlines(chomp:1).map{|e| a=e.split("").map{|f| f.to_i} (0..a.size-2).each{|n| a[n]=a[n]*10 if (a[n]%2==0 && a[n+1]%2==0) a[n+1]=a[n+1]+10 if (a[n]%2==1 && a[n+1]%2==1)} puts "IN < #{e}\nOUT > #{a.map{|f| f.to_s}.join}"} __END__ 123346
644 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 20:02:39.61 ID:SzDlV4TD.net] >>642 lisp https://ideone.com/DV9DeR
645 名前:デフォルトの名無しさん [2025/02/17(月) 20:47:46.22 ID:2enU2rA/.net] >>642 PowerShell (一般的な文字コードを想定) function f([string]$s) { $rprev = 2 -join ([char[]]$s |% { $r = $_ % 2 if ($r -eq $rprev) {$r} $rprev = $r $_ }) } 123346, 12333468, 1, "" |% {"$_ → $(f $_)"} [実行結果] 123346 → 12313406 12333468 → 123131340608 1 → 1 →
646 名前:デフォルトの名無しさん [2025/02/17(月) 20:48:16.10 ID:2enU2rA/.net] 正規表現置換なら、 function f($s) { $s -replace "[02468](?=[02468])", "$&0" -replace "[13579](?=[13579])", "$&1" } 1回で済ますなら、 function f($s) { [RegEx]::Replace($s, "[02468](?=[02468])|[13579](?=[13579])", {$_ = $args[0].value[0]; "$_$($_ % 2)"}) }
647 名前:デフォルトの名無しさん mailto:sage [2025/02/17(月) 20:58:11.16 ID:UxhkW11K.net] >>642 Rust fn f(input: &[u8]) -> Vec<u8> { input.windows(2).fold(Vec::new(), |mut vec, w| { if vec.is_empty() { vec.push(w[0]); } if (w[0] ^ w[1]) & 1 == 0 { vec.push(w[0] & 1 + b'0'); } vec.push(w[1]); vec }) } fn main() { assert_eq!(f(b"123346"), b"12313406"); assert_eq!(f(b"12333468"), b"123131340608"); }
648 名前:デフォルトの名無しさん [2025/02/18(火) 10:32:01.38 ID:Spp0fdd/.net] >>647 そうやればいいのか、なるほどね
649 名前:デフォルトの名無しさん mailto:sage [2025/02/18(火) 17:51:16.96 ID:ZRfTlf8i.net] Vecのnewやpushなど普通にcollectに任せる手もあるね 条件付き挿入は汎用にOptionで取捨を示してflat_mapとflattenでも可能 前値など状態を保ちつつ1つにまとめるならfoldでイテレータに流すならscan 一例としてこんな感じ fn f(input: &[u8]) -> Vec<u8> { input .iter() .scan(None, |pre, &x| { Some([ pre.replace(x & 1) .and_then(|p| (p == x & 1).then_some(p + b'0')), Some(x), ]) }) .flat_map(|list| list.into_iter().flatten()) .collect() } >>642 Rust
650 名前:デフォルトの名無しさん [2025/02/19(水) 21:30:14.30 ID:LKzHskwz.net] >>642 >>645-646 の3つのfを上から順にf1, f2, f3とし、長い文字列を引数として呼び出したときの 実行時間を比較すると、 $s = -join (1..10000) $t = 1..3 |% {(iex "measure-command {f$_ $s}").ticks} $tmin = ($t | measure -min).minimum 1..3 |% {"f$_`: {0:0.00}倍" -f ($t[$_ - 1] / $tmin)} [実行結果の一例] f1: 34.78倍 f2: 1.00倍 f3: 14.93倍 大差でf2 < f3 < f1となった。インタプリタ言語のコード実行は遅いので、処理を自分で 書くほど遅くなり、ライブラリ関数等に丸投げすれば速くなることによる。 https://ideone.com/GVewWL コンパイラ言語のC#で同様の比較をすると (PowerShellより速いので文字列を長くし、 f1の改良版としてStringBuilder使用のf4を追加した)、当然f4< f1 < f2 < f3になった。
651 名前:デフォルトの名無しさん mailto:sage [2025/02/19(水) 21:58:22.55 ID:Hs/awmG/.net] >>649 関数型でタブーの可変な変数宣言してもよいなら、もっと簡単になるね。 fn f(input: &[u8]) -> Vec<u8> { let mut pre = None; input .iter() .flat_map(|&x| { [ pre.replace(x & 1) .and_then(|p| (p == x & 1).then_some(p + b'0')), Some(x), ] .into_iter() .flatten() }) .collect() }
652 名前:デフォルトの名無しさん mailto:sage [2025/02/20(木) 23:25:43.81 ID:Zfo8kSSQ.net] mutableの使用は必要最小限が望ましいが mutableを使えない言語は実用的ではない
653 名前: [2025/02/22(土) 15:11:12.54 ID:nEyoRU5r.net] >>642 Perl5 https://paiza.io/projects/gW_sI1_VqokddmYSJ6Lj2A
654 名前: [2025/02/22(土) 15:42:54.65 ID:nEyoRU5r.net] >>642 Kotlin https://paiza.io/projects/mAEXhhFdJiHVQWYtHvIP-g
655 名前: [2025/02/22(土) 15:53:04.03 ID:nEyoRU5r.net] >>642 C https://paiza.io/projects/7L9vpqOvFcbZfv9vO5GPvA
656 名前:デフォルトの名無しさん [2025/02/22(土) 23:33:07.08 ID:k7PDvk0j.net] >>642 Haskell https://ideone.com/U3SvTZ
657 名前: [2025/02/24(月) 18:11:14.44 ID:Ikw9MrIX.net] >>610 >>653 とかとアルゴリズムはほぼ同じ。これといった捻りはない。 よく分からないが5chに書き込みがブロックされたのでURLのコロンまでは削った。 Perl //paiza.io/projects/zAqms-VVEWIMhcgr8AV6Pw Kotlin //paiza.io/projects/iu8mTSyKsxqWx_T51Wpj4Q C //paiza.io/projects/bDkj3tRF_KmiBL67miRxyA
658 名前:デフォルトの名無しさん [2025/02/26(水) 21:33:47.93 ID:rkiIsmEI.net] お題: Python の int.bit_count() 65535 → 16 15 → 4 6 → 2 1 → 1 0 → 0 -1 → 1 -6 → 2 -15 → 4 -65535 → 16
659 名前:デフォルトの名無しさん [2025/02/26(水) 23:29:03.38 ID:Gl9HHMVG.net] >>658 C++20 https://paiza.io/projects/R-sSq9oCAOmG17wk6c5naw
660 名前:デフォルトの名無しさん mailto:sage [2025/02/27(木) 00:23:41.10 ID:TOGelnHV.net] >>658 Rust fn bit_count(x: i64) -> usize { const MAGIC_1: u64 = 0x5555555555555555; // 0101..0101 const MAGIC_2: u64 = 0x3333333333333333; // 0011..0011 const MAGIC_3: u64 = 0x0f0f0f0f0f0f0f0f; const MAGIC_4: u64 = 0x00ff00ff00ff00ff; const MAGIC_5: u64 = 0x0000ffff0000ffff; const MAGIC_6: u64 = 0x00000000ffffffff; let x = x.unsigned_abs(); let x = (x & MAGIC_1) + ((x >> 1) & MAGIC_1); let x = (x & MAGIC_2) + ((x >> 2) & MAGIC_2); let x = (x & MAGIC_3) + ((x >> 4) & MAGIC_3); let x = (x & MAGIC_4) + ((x >> 8) & MAGIC_4); let x = (x & MAGIC_5) + ((x >> 16) & MAGIC_5); let x = (x & MAGIC_6) + ((x >> 32) & MAGIC_6); x as usize } fn main() { assert_eq!(bit_count(65535), 16); assert_eq!(bit_count(15), 4); assert_eq!(bit_count(6), 2); assert_eq!(bit_count(1), 1); assert_eq!(bit_count(0), 0); assert_eq!(bit_count(-1), 1); assert_eq!(bit_count(-6), 2); assert_eq!(bit_count(-15), 4); assert_eq!(bit_count(-65535), 16); }
661 名前:デフォルトの名無しさん mailto:sage [2025/02/27(木) 08:26:19.30 ID:LSRTW28H.net] >>658 Rust trait BitCount { fn bit_count(&self) -> usize; } impl BitCount for i32 { fn bit_count(&self) -> usize { self.unsigned_abs().count_ones() as usize } } use num::{BigInt, One}; impl BitCount for BigInt { fn bit_count(&self) -> usize { self.iter_u64_digits().map(|x| x.count_ones() as usize).sum() } } fn main() { for (input, output) in [(65535, 16), (15, 4), (6, 2), (1, 1), (0, 0), (-1, 1), (-6, 2), (-15, 4), (-65535, 16)] { assert_eq!(input.bit_count(), output); } assert_eq!(BigInt::from(-1).bit_count(), 1); assert_eq!((BigInt::from(2).pow(1_000_000_000) - BigInt::one()).bit_count(), 1_000_000_000); }
662 名前:デフォルトの名無しさん [2025/02/28(金) 01:30:55.49 ID:1HSOHgVq.net] intは処理単位のことなんだけどな 何ビットで表現できるかという意味ではない
663 名前:9 mailto:sage [2025/02/28(金) 03:12:43.15 ID:MEvV9q87.net] 負の場合に表現可能なビット数を配慮しないとPython の int.bit_count()と同じ結果にならないんジャマイカじゃまいか たぶんPythonの整数がbigintのせいだとおもう 絶対値とってpopcountとかやらないと意外とあれこれ書いてプチ長めのコードになりそうなおかん
664 名前:デフォルトの名無しさん mailto:sage [2025/02/28(金) 23:07:16.17 ID:SRu+xdWw.net] よく見たらみんな絶対値をとったりbigintを使ったりしてるな
665 名前:デフォルトの名無しさん [2025/03/01(土) 20:18:20.34 ID:H8RpZRUP.net] >>658 PowerShellのBigIntなら、 $b = @(0) 1..8 |% {$b += $b |% {$_ + 1}} function bit_count([BigInt]$n) { ($b[[BigInt]::Abs($n).ToByteArray()] | measure -sum).Sum } 65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% { "$_ → $(bit_count $_)" } [実行結果] 65535 → 16 15 → 4 6 → 2 1 → 1 0 → 0 -1 → 1 -6 → 2 -15 → 4 -65535 → 16 11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043 → 159
666 名前:デフォルトの名無しさん [2025/03/01(土) 20:19:24.06 ID:H8RpZRUP.net] お題:1からnまでの自然数のビット単位での総排他的論理和1 ⊕ 2 ⊕ 3 ⊕ … ⊕ nを求める 関数を作り、n = 123456789, 12345678901234567890のときの値を表示せよ。
667 名前:デフォルトの名無しさん [2025/03/01(土) 21:19:28.22 ID:5VrbV50/.net] A003815かな
668 名前:デフォルトの名無しさん mailto:sage [2025/03/01(土) 21:32:49.43 ID:UfbLQAky.net] 数学の試験で中間式を省いて解答だけ書くタイプw
669 名前:デフォルトの名無しさん [2025/03/01(土) 23:41:19.76 ID:+HRoh0yF.net] まあ数列の問題ならOEISを見てみるよな
670 名前:デフォルトの名無しさん mailto:sage [2025/03/02(日) 01:21:29.93 ID:xdmIFouH.net] >> 664 Rust fn f(n: u64) -> u64 { // f(n) = 1⊕2⊕3⊕...⊕n とすると (2k)⊕(2k+1)=1 であるから 1⊕1=0 より // f(4k+1) = (4k+1)⊕(4k)⊕(4k-1)⊕(4k-2)⊕f(4k-3) = f(4(k-1)+1) = ... = f(1) = 1 // f(4k+3) = (4k+3)⊕(4k+2)⊕f(4k+1) = 0 // f(4k) = (4k)⊕f(4k-1) = 4k // f(4k+2) = (4k+2)⊕f(4k+1) = (4k+2)⊕1 = 4k+3 match n % 4 { 0 => n, 1 => 1, 2 => n + 1, 3 => 0, _ => unreachable!(), } } fn main() { for n in [123456789, 12345678901234567890] { println!("f({n}) = {fn}", fn = f(n)); } } 出力 f(123456789) = 1 f(12345678901234567890) = 12345678901234567891
671 名前:デフォルトの名無しさん [2025/03/11(火) 21:18:30.26 ID:Qmk3F8/1.net] >>658 PowerShellでもPopCountがいつの間にか使えるようになっていた。Version 7.5.0で動作確認。 function bit_count($n) { [BigInt]::PopCount([BigInt]::Abs($n)) } 65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% { "$_ → $(bit_count $_)" } 実行結果は>>665 と同じ。
672 名前:デフォルトの名無しさん [2025/03/13(木) 20:35:03.45 ID:QP/8WHEA.net] お題:数列が入力される。元の数列に逆順にした数列を減算したときの値を出力せよ In < 12345 OUt > -41976 (12345 - 54321)
673 名前:デフォルトの名無しさん [2025/03/13(木) 21:13:53.77 ID:SRpNsp20.net] >>672 PowerShell function f([BigInt]$n) { $c = [char[]][string]$n $n - [BigInt]-join $c[-1..-$c.length] } 12345, [BigInt]::Pow(12, 34) |% {"$_ → $(f $_)"} [実行結果] 12345 → -41976 4922235242952026704037113243122008064 → 314233029528909439273950854852378624
674 名前:デフォルトの名無しさん mailto:sage [2025/03/14(金) 02:10:51.25 ID:wjeVVi0w.net] >>673 12の34乗は合っているけどその後の差がおかしくない? 4922235242952026704037113243122008064 から 4608002213423117304076202592425322294 を引いて 314233029528909399960910650696685770 が正解のところ 314233029528909439273950854852378624 となっているよ 正解は1の位が「4 - 4 = 0」になるはずだよね >>672 Rust 逆文字列を生成する版 use num::BigInt; fn odai(input: &str) -> Option<String> { let rev_input: String = input.chars().rev().collect(); let x: BigInt = input.parse().ok()?; let y: BigInt = rev_input.parse().ok()?; Some((x - y).to_string()) } fn main() { assert_eq!(odai("12345"), Some("-41976".to_string())); assert_eq!(odai("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".to_string())); }
675 名前:デフォルトの名無しさん mailto:sage [2025/03/14(金) 02:30:00.58 ID:wjeVVi0w.net] >>672 Rust 逆文字列を生成しない&整数ジェネリック版 use num::{BigInt, CheckedAdd, CheckedMul, CheckedSub, FromPrimitive}; fn chars_to_integer<X>(input: impl Iterator<Item = char>) -> Option<X> where X: FromPrimitive + CheckedMul + CheckedAdd, { let (zero, ten) = (X::from_u32(0).unwrap(), X::from_u32(10).unwrap()); input .map(|c| X::from_u32(c.to_digit(10)?)) .try_fold(zero, |acc, x| acc.checked_mul(&ten)?.checked_add(&x?)) } fn odai<X>(input: &str) -> Option<X> where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub, { let x = chars_to_integer::<X>(input.chars())?; let y = chars_to_integer::<X>(input.chars().rev())?; x.checked_sub(&y) } fn main() { assert_eq!(odai::<i64>("12345"), Some(-41976)); assert_eq!(odai::<BigInt>("4922235242952026704037113243122008064"), Some("314233029528909399960910650696685770".parse::<BigInt>().unwrap())); }
676 名前:デフォルトの名無しさん [2025/03/14(金) 20:19:17.17 ID:Imul3vYR.net] >>674 確かに間違っていた。PowerShellの旧ヴァージョンでは [BigInt]文字列 と書くだけで 文字列をBigInt型に正確に変換できるから>>673 のプログラムでも正しい結果が得られるが、 新ヴァージョンではdouble経由での変換に仕様変更されたようで誤差が生じてしまうから [BigInt]::Parse(文字列) と書かなければならなくなった。
677 名前:デフォルトの名無しさん [2025/03/14(金) 21:36:16.55 ID:pC/XkvI4.net] 数列の長さは指定されていない。 10 INPUT "0-9";I 20 PRINT "0" 30 END
678 名前:デフォルトの名無しさん mailto:sage [2025/03/15(土) 19:04:58.28 ID:GCbQqql0.net] >>675 これらのwhere~は何という名称ですか? > where X: FromPrimitive + CheckedMul + CheckedAdd, > where X: FromPrimitive + CheckedMul + CheckedAdd + CheckedSub,
679 名前:9 mailto:sage [2025/03/16(日) 00:12:31.12 ID:8GU62dKf.net] >>672 Perl5 use bigint; print $_ - reverse($_), "\n" for 12345, 4922235242952026704037113243122008064; 実行結果 $ perl 22_670_reverse_minus_biginit.pl -41976 314233029528909399960910650696685770
680 名前: [2025/03/16(日) 17:25:01.96 ID:wlGuyFJ7.net] >>672 Kotlin 文字列にしてひっくり返しているだけの何の捻りもないプログラム https://paiza.io/projects/VBq2l9lhzmUxVo6xAMuAHg
681 名前:デフォルトの名無しさん [2025/03/16(日) 22:59:41.54 ID:wtk+s/+W.net] >>672 PowerShellでジェネリック化(もどき?) 途中式や結果が入力値の型で表せない場合は$nullを返す。 function f($n) { $T = $n.GetType() $s = [string]$n try { $n - $T::Parse(-join $s[-1..-$s.Length]) -as $T } catch { $null } } 12345, [BigInt]::Pow(12, 34), [byte]12, [sbyte]12, [sbyte]123, -123 |% { "[$($_.GetType())]$_ → $(f $_)" } -- 実行結果 -- [int]12345 → -41976 [bigint]4922235242952026704037113243122008064 → 314233029528909399960910650696685770 [byte]12 → [sbyte]12 → -9 [sbyte]123 → [int]-123 →
682 名前:デフォルトの名無しさん [2025/03/16(日) 23:01:39.52 ID:6JX6mCC/.net] お題:36桁以下の負でない整数で16進表記が10進表記の部分文字列であるものをすべて求めて下さい。 (例) ・1の16進表記1は10進表記1の部分文字列です ・123の16進表記7Bは10進表記123の部分文字列ではありません ・357440の16進表記57440は10進表記357440の部分文字列です ※遅い言語では15桁以下で解いても構いません
683 名前:デフォルトの名無しさん mailto:sage [2025/03/16(日) 23:59:39.36 ID:qWmLE6LP.net] >>678 where句だよ 型Xのトレイト境界を宣言してる
684 名前:9 mailto:sage [2025/03/18(火) 16:05:22.66 ID:GYPHuJM6.net] >>682 Perl5、ナイーブな処理方式だと時間がかかり過ぎで最後まで解けないおそれがあるが、なかなかほかに回答者が現れないし、 出現傾向を見るだけでも…と思って、16進数の桁にa-fの現れる値をskipするナイーブな処理方法で。 $m = sprintf '%x', 9 x 15; # 10進で15桁まで print $m . ' '. hex($m)."\n"; $m =~ s/[a-f]/9/g; print "1 .. 0x$m\n"; print "".localtime."\n"; for (1 .. $m) { $d = hex($_); if (0 <= index($d, $_)) { $n++; print "$d, 0x$_\n"; } } print "".localtime."\n"; print "$n count found";
685 名前:9 mailto:sage [2025/03/18(火) 16:07:07.28 ID:GYPHuJM6.net] >>684 実行結果 (改行数を減らすため適度につなげてます) $ perl 22_680_hex_substr_1.pl 38d7ea4c67fff 999999999999999 1 .. 0x3897994967999 Tue Mar 18 09:15:31 2025 1, 0x1 2, 0x2 3, 0x3 4, 0x4 5, 0x5 6, 0x6 7, 0x7 8, 0x8 9, 0x9 357440, 0x57440 357441, 0x57441 357442, 0x57442 357443, 0x57443 357444, 0x57444 357445, 0x57445 357446, 0x57446 357447, 0x57447 357448, 0x57448 357449, 0x57449 1079653, 0x107965 1081713, 0x108171 1122966, 0x112296 1123079, 0x112307 1123080, 0x112308 2246166, 0x224616 3369253, 0x336925 3371313, 0x337131 3412566, 0x341256 4494393, 0x449439 4494400, 0x449440 4535653, 0x453565 5658739, 0x565873 5658740, 0x565874 5660793, 0x566079 5660800, 0x566080 5702166, 0x570216 6783879, 0x678387 6783880, 0x678388 6784000, 0x678400 6825253, 0x682525 7948339, 0x794833 7948340, 0x794834 7950393, 0x795039 7950400, 0x795040 2182104640, 0x82104640 2182104641, 0x82104641 2182104642, 0x82104642 2182104643, 0x82104643 2182104644, 0x82104644 2182104645, 0x82104645 2182104646, 0x82104646 2182104647, 0x82104647 2182104648, 0x82104648 2182104649, 0x82104649 1263629042727, 0x12636290427 1307655353654, 0x13076553536 2573583194436, 0x25735831944 2617616245848, 0x26176162458 3330782168640, 0x30782168640 3330782168641, 0x30782168641 3330782168642, 0x30782168642 3330782168643, 0x30782168643 3330782168644, 0x30782168644 3330782168645, 0x30782168645 3330782168646, 0x30782168646 3330782168647, 0x30782168647 3330782168648, 0x30782168648 3330782168649, 0x30782168649 3883544086630, 0x38835440866 3927569962533, 0x39275699625 3927570397557, 0x39275703975 Core i7-8559U で6時間ほど実行してここまで高々13桁。 やはり想定通り気の利いた高速解放が要りますテヘペロ。
686 名前:デフォルトの名無しさん mailto:sage [2025/03/18(火) 16:35:06.57 ID:lVLkTjWA.net] >>682 ruby (0..10**16-1).each{|e| puts "#{e},0x#{e.to_s(16)}" if %r|[a-f]|!~e.to_s(16)}
687 名前:デフォルトの名無しさん [2025/03/18(火) 21:39:06.90 ID:9hwr8+MV.net] >>685 14桁と15桁には該当値がないので、そこに列挙された数に0を追加した72個が15桁以下の答で 結果的には合っているよ。 出題時に作ったC++プログラムはideoneで36桁以下を0.43秒で完了した。これをPowerShellに 移植したプログラムは15桁以下を0.5秒未満、36桁以下を数分で完了した。 その後、改良したC++プログラムではideoneで36桁以下を0.23秒に短縮できた。
688 名前:9 mailto:sage [2025/03/18(火) 21:41:48.53 ID:GYPHuJM6.net] >>685 >やはり想定通り気の利いた高速解放が要りますテヘペロ。 そのヒントになるかいな…? ・16進数を10進数に変換すると桁数は同じまたは高々1桁増えるのみ(だともう、証明略) ・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明 ・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる
689 名前:9 mailto:sage [2025/03/18(火) 21:42:49.00 ID:GYPHuJM6.net] >>687 あそうなんだ。じゃオレ様が一番乗りということでヨロ ノシ
690 名前:9 mailto:sage [2025/03/18(火) 21:52:10.05 ID:GYPHuJM6.net] >>688 >・一桁増える場合は先頭または末尾に一桁増える。残りが16進数と同じ部分文字列であるかが評価対象となる 二桁増える場合があるのでこれは誤りでした
691 名前:684 mailto:sage [2025/03/19(水) 06:18:11.44 ID:khMnA4jS.net] ようやく題意は理解したけど良い解法が思いつかない ちなみに36桁以下だと答えはいくつありますか?
692 名前:デフォルトの名無しさん mailto:sage [2025/03/19(水) 08:44:27.79 ID:khMnA4jS.net] >>682 ruby 遅いけど i=0 while i<10**16 if %r|[a-f]|=~i.to_s(16) i=i.to_s(16).gsub(%r|[a-f].*|){|e| e.gsub(%r|.|,"f")}.hex else puts "#{i},0x#{i.to_s(16)}" if %r|#{i.to_s(16)}|=~i.to_s end i+=1 end
693 名前:9 mailto:sage [2025/03/19(水) 16:33:58.47 ID:kDrq13vm.net] >>688 > ・桁数が同じ場合、16進数と10進数が同じということはあり得ない、自明 大間違い。16進数と10進数で桁数が同じ値のうち、一桁のものは、16進も10審も同じだった…orz 結局、高速解放はあるんだろうか? あるいはコラッツ予想みたいに「無いかもしれない」類の、考えるだけ無駄な問題なのだろうか?
694 名前:デフォルトの名無しさん [2025/03/19(水) 21:08:24.40 ID:VtmjGkS9.net] >>691 167個で最大値は697786638998562641695629924526065234 >>693 時間をかけて64桁以下で解いたら、405個で最大値は 2714476666993915057605587441263923823484611431446449961712093492 だった。これはナイーヴな解法ではC++ですら到底求められない値だから、高速解法が 実在する証になっているだろう。 解答例は1週間くらい経ったら載せるので、それまでよく考えてみて下さい。
695 名前:デフォルトの名無しさん [2025/03/19(水) 22:39:07.36 ID:P0JLFopv.net] お題:単位分数のエジプト風分解(2進数風味) 1/aを、1/a=1/b+c/dを満たす1/bとc/dに分解する。 aは1以上の整数とする。 c, dは整数とし、bは2の整べき乗(1, 2, 4,...)とする。 c/dは絶対値が最小である事(負数であってもよい)。 例: 1/3→1/4+1/12 : b=4, c=1, d=12 1/7→1/8+1/56 : b=8, c=1, d=56 1/9→1/8-1/72 : b=8, c=-1, d=72(c=1, d=-72も可) 1/13→1/16+3/208 : b=16, c=3, d=288 1/60→1/64+1/960 : b=64, c=1, d=960
696 名前:693 [2025/03/19(水) 22:42:43.02 ID:P0JLFopv.net] aは2以上の整数とする。 に訂正します。
697 名前:デフォルトの名無しさん [2025/03/19(水) 23:16:25.83 ID:G4dDQ6P7.net] >>695 R https://ideone.com/TaaAw2 aが2の整べき乗の場合の出力形式に指定がなかったので適当に決めた。
698 名前:デフォルトの名無しさん mailto:sage [2025/03/20(木) 08:21:38.87 ID:6IEA4H0O.net] >>695 Rust fn f(a: i64) -> String { let b = (a as u64).next_power_of_two() as i64; let b = if 3 * a > 2 * b { b } else { b >> 1 }; let (c, d) = (b - a, a * b); let shift = c.trailing_zeros().min(d.trailing_zeros()); let (c, d) = (c >> shift, d >> shift); if a == b { format!("1/{a}=1/{b}") } else { format!("1/{a}=1/{b}{c:+}/{d}") } } fn main() { assert_eq!("1/3=1/4+1/12", f(3)); assert_eq!("1/7=1/8+1/56", f(7)); assert_eq!("1/9=1/8-1/72", f(9)); assert_eq!("1/13=1/16+3/208", f(13)); assert_eq!("1/60=1/64+1/960", f(60)); assert_eq!("1/64=1/64", f(64)); assert_eq!("1/6718464=1/8388608+1631/55037657088", f(6718464)); assert_eq!("1/123456789=1/134217728+10760939/16570089725755392", f(123456789)); }
699 名前:デフォルトの名無しさん mailto:sage [2025/03/21(金) 12:56:29.73 ID:CgJbZEAu.net] >>682 Rust fn odai_680() -> Vec<i128> { let mut answer = vec![0]; let n_max = (0..).find(|&n| pow16(n + 1) > pow10(36)).unwrap(); for s in (0..).take_while(|&s| pow16(n_max) >= pow10(n_max + s + 1)) { let c = (0..=n_max).map(|i| pow16(i) - pow10(i + s)).collect::<Vec<_>>(); let rmax = c.iter().scan(0, |s, &c| { *s += if c > 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>(); let rmin = c.iter().scan(0, |s, &c| { *s += if c < 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>(); let (mut i, mut n, mut d, mut ct) = (0, 1, vec![0; c.len()], vec![0; c.len() + 1]); loop { d[i] += 1; if d[i] < 10 { let m = pow10(n as u32 + s); ct[i] = c[i] * d[i] + ct[i+1]; if i == 0 { if ct[0] >= 0 && ct[0] % m < pow10(s) { answer.push(d.iter().take(n).rev().fold(0, |sum, &d| sum * 16 + d)) } } else { let (max, min) = (ct[i] + rmax[i-1], ct[i] + rmin[i-1]); if max >= 0 && (max - min > m || pow10(s) > min % m || min % m > max % m) { i -= 1; } } } else { d[i] = -1; i += 1; if i == n { if n == d.len() { break; } n += 1; } } } } answer.sort(); answer }
700 名前:デフォルトの名無しさん mailto:sage [2025/03/21(金) 12:58:11.47 ID:CgJbZEAu.net] >>699 // 略記 fn pow16(x: u32) -> i128 { 16_i128.pow(x) } fn pow10(x: u32) -> i128 { 10_i128.pow(x) } // 結果検証 fn main() { let answer = odai_680(); assert_eq!(167, answer.len()); for &a in &answer { assert!(a.to_string().contains(&format!("{a:x}"))); } assert_eq!(0, answer[0]); assert_eq!(1, answer[1]); assert_eq!(357440, answer[10]); assert_eq!(2182104649, answer[54]); assert_eq!(3927570397557, answer[71]); assert_eq!(38135630558262267902210, answer[99]); assert_eq!(331052794565713975838768757043267, answer[152]); assert_eq!(697786638998562641695629924526065234, answer[answer.len() - 1]); }
701 名前:デフォルトの名無しさん [2025/03/21(金) 20:49:29.98 ID:uwhksDTb.net] >>699-700 Rustはよく知らないが、mainのforループ内をprintln!("{}", a);に置き換えれば解が表示されるんだよね? 実行結果を>>687 で述べたC++プログラムのものと照合したら167個の解すべてが一致した。見事正解! 実行時間はC++プログラムの数倍かかるようだが、ideoneでの実行時間も見たいので載せて下さい。
702 名前:デフォルトの名無しさん [2025/03/23(日) 23:00:51.13 ID:pi1bImlR.net] >>682 から1週間経ったので解答例を掲載 >>687 を書いたときに作ってあった2つのC++プログラム https://ideone.com/KID2jR https://ideone.com/ysdd6b 1番目ではsolve関数の再帰呼び出しの対象とするx[p]の下限と上限を線形探索するが、 2番目では二分探索する。要素数10では二分探索の効果は薄いと思いきや、大分速くなった。 2番目を読み返していたらバグを発見してしまった。i = N - 1のとき63行目のa[i + 1]はa[N]となり 配列の添字範囲外アクセス。0との比較だけだし、if文の評価がどっちでも以降の処理は結局同じだから、 実害も解への影響もないが、厳格さが必要ならif ((i + 1 < N ? a[i + 1] : 0) >= 0) {と書き換えるべきだな。 実行時間への影響は無視できる。 それぞれのPowerShellへの移植版 https://ideone.com/vEGZ3D https://ideone.com/azzMa4 完全な逐語訳ではなく、PowerShellで書くと遅くなったり煩雑になったりする箇所は適宜改変した。 15桁以下の場合は64ビット整数でも桁溢れしないので、BigIntの代わりにInt64を使えば少し速くなる。
703 名前:デフォルトの名無しさん [2025/03/24(月) 22:16:36.44 ID:/lNBwDBZ.net] 非素数であることが既知の巨大整数を素因数分解するときの 最速のアルゴリズムって何がある?
704 名前:デフォルトの名無しさん [2025/03/25(火) 15:25:56.57 ID:Yc/egiP0.net] >>701 > 実行時間はC++プログラムの数倍かかるようだが rustc -C opt-level=2 でコンパイルしたら g++ -O2 でコンパイルした ideone_KID2jR.cpp (>>702 の一つめ) とほぼ同じ速度出たよ
705 名前:デフォルトの名無しさん mailto:sage [2025/03/25(火) 15:54:47.24 ID:GZ5kfx5g.net] >>704 データ精度を揃えたアルゴリズム比較のために >>699-700 をi128固定ではなくnum::BigIntにして計測して見ては? あと出題者>>687 は>>702 の二つ目で(倍速以上に)短縮出来たと言っているよ
706 名前:デフォルトの名無しさん [2025/03/25(火) 16:11:02.68 ID:Yc/egiP0.net] そこまでは興味ないや 「数倍」だったのはもしかして最適化オプション付けてなかったんじゃない?ってだけの話
707 名前:デフォルトの名無しさん [2025/03/25(火) 17:30:47.40 ID:Yc/egiP0.net] >>699-700 をBigIntに変えるのはどうしたらいいのか分かんなかったので >>702 の方を boost::multiprecision::cpp_int から boost::multiprecision::int128_t に変えてみた 改変版 | オリジナル https://ideone.com/Ie0HhO 0.12s | https://ideone.com/KID2jR 0.43s https://ideone.com/np3p5h 0.11s | https://ideone.com/ysdd6b 0.23s
708 名前:デフォルトの名無しさん mailto:sage [2025/03/25(火) 20:18:24.92 ID:oTGl9wWX.net] >>707 感心した、出題者回答C++コードはほんの少し変更するだけで簡単にBigInt/i128切り替え出来るのか >>699-700 Rustはどうなのかな?
709 名前:デフォルトの名無しさん [2025/03/25(火) 23:43:24.86 ID:V/NXIH+S.net] >>706 >>701 では最適化オプションを付けてrustc -O a.rsでコンパイルした。最適化なしでは ありの4.6倍くらい掛かった。もしやと思ってコンパイラをアップデートしてみたら、 実行時間は約3分の1に激減し、>>702 の1番目と大差ない1.3倍ほどに収まった。 Rustの古いコンパイラ(5年前のもの)がこんなに低性能だったとは…
710 名前:デフォルトの名無しさん mailto:sage [2025/03/27(木) 11:39:31.21 ID:vU3T1Sq/.net] >>699 crateのnumを使う
711 名前:デフォルトの名無しさん [2025/03/27(木) 20:29:20.38 ID:DyGv4jyd.net] c言語で実用的なプログラムを作りたい。 いいテーマはありますか?
712 名前:デフォルトの名無しさん mailto:sage [2025/03/27(木) 20:35:59.71 ID:cvPlHeM5.net] お題:#(シャープ)を入力の段数でウンコ状に並べて出力せよ 出力は全角でも半角でもどちらでもよしとする(5ch は半角スペース表示できない) in < 3 out > # ### #####
713 名前:デフォルトの名無しさん [2025/03/27(木) 21:06:27.50 ID:AGn6MWSp.net] >>712 PowerShell function unko($n) { if ($n -ge 1) {1..$n |% {" " * ($n - $_) + "#" * (2 * $_ - 1)}} } unko 3 -- 実行結果 -- # ### #####
714 名前:デフォルトの名無しさん [2025/03/28(金) 21:33:35.13 ID:VDfNaTNz.net] お題:素因数の総和が2025である2000万以下の自然数をすべて求めて下さい。 例) 32272 素因数分解すると32272 = 2 × 2 × 2 × 2 × 2017で、 素因数の総和は2 + 2 + 2 + 2 + 2017 = 2025となります。 ※20億以下でもC++で5秒以内に余裕で完了できますが、出力が長すぎるため2000万以下としました。 その結果、Rでも5秒以内に余裕で完了できる問題になりました。
715 名前:デフォルトの名無しさん [2025/03/28(金) 21:54:52.53 ID:e6/uDocq.net] >>712 山状ではだめだったのか 俺にはわからない
716 名前:デフォルトの名無しさん [2025/03/28(金) 22:12:15.09 ID:g08AymBh.net] お題 AさんがBさんに惚れてることを A-B と表します 両思いのペアを出力してください 入力 D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S 出力 B,E R,W
717 名前:デフォルトの名無しさん [2025/03/28(金) 22:28:49.68 ID:VDfNaTNz.net] >>716 PowerShell $s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S" $h = @{} $s -split "," |% { $a, $b = $_ -split "-" $h[$a] += , $b } foreach ($a in $h.keys) { foreach ($b in $h[$a]) { if ($a -lt $b -and $h[$b] -contains $a) {"$a,$b"} } } -- 実行結果 -- B,E R,W
718 名前:デフォルトの名無しさん [2025/03/28(金) 23:19:47.32 ID:VDfNaTNz.net] >>716 PowerShellでもう少し短く $s = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S" $h = @{} $s -split "," |% { $a, $b = $_ -split "-" $i, $t = if ($a -lt $b) {1, "$a,$b"} else {2, "$b,$a"} $h[$t] = $h[$t] -bor $i } $h.keys |? {$h[$_] -eq 3} | sort -- 実行結果 -- B,E R,W
719 名前:デフォルトの名無しさん mailto:sage [2025/03/29(土) 11:51:50.06 ID:UeqVkFR5.net] >>716 Rust use itertools::Itertools; fn f(input: &str) -> impl Iterator<Item = &str> { input.split(',') .map(|pair| (pair, pair.splitn(2, '-').collect_tuple().unwrap())) .filter(|(_, (a, b))| a < b) .flat_map(|(pair, (a, b))| { input.split(',') .map(|pair| pair.splitn(2, '-').collect_tuple().unwrap()) .filter_map(move |(x, y)| (a == y && b == x).then_some(pair)) }) } fn main() { let input = "D-L,U-X,U-Y,U-R,Z-B,B-E,B-M,B-N,V-H,V-X,W-F,W-R,R-B,R-W,O-W,O-S,F-A,Q-X,P-E,P-L,X-X,Y-M,Y-C,L-U,L-V,I-X,E-B,H-M,A-S"; itertools::assert_equal(["B-E", "R-W"], f(input).sorted()); }
720 名前:デフォルトの名無しさん mailto:sage [2025/03/30(日) 01:28:45.68 ID:KrBJAiIU.net] お題:1〜10までの範囲の乱数生成をn回行ったとき出た値の積が20の倍数になる確率Pnを出力せよ n=2 2, 10 ... 20 4, 5 ... 20 Pn=??? n=3 2, 5, 2 ... 20 4, 5, 2 ... 40 Pn=???
721 名前:デフォルトの名無しさん [2025/03/30(日) 15:24:52.85 ID:6QsLEZYT.net] >>720 ん? 何千回も試行してその実際の発生率を出すの? それとも数学的に確率の理論値を出すの?
722 名前:デフォルトの名無しさん mailto:sage [2025/03/30(日) 15:35:52.69 ID:bQF7/1H+.net] 後者で学校の課題な予感がするな
723 名前:デフォルトの名無しさん [2025/03/30(日) 20:11:24.72 ID:qyCZpZxd.net] >>720 R Version4 https://ideone.com/r03zEZ ideoneのRは古すぎてエラーが出てしまうので、出力は入力欄に記載した。 巨大整数型を使わなければideoneでも実行できる。 https://ideone.com/K0RefY
724 名前:デフォルトの名無しさん [2025/03/30(日) 20:58:57.54 ID:qyCZpZxd.net] >>720 C++への移植版 https://ideone.com/g87ECX これもideoneのC++が古すぎて10行目をm = size(d)と書けず変更せざるを得なかった。
725 名前: [2025/03/31(月) 03:24:21.45 ID:V+SeThnI.net] >>716 Kotlin //paiza.io/projects/WMZL8ULLNxc0zJQPI2uUsA URLあると書けなかったので先頭のhttps:を抜いた。
726 名前:デフォルトの名無しさん mailto:sage [2025/03/31(月) 05:32:04.89 ID:lZyiUZP+.net] >>720 学校の課題をここに書くなって教わらなかったの?
727 名前:デフォルトの名無しさん [2025/03/31(月) 22:37:26.59 ID:eEIz6yDp.net] >>720 >>723-724 を整理して行列とヴェクトルの積ですっきり書けるようにした。 R (ideoneでも巨大整数型で実行可能になった) https://ideone.com/sHNag3 C++ https://ideone.com/7zgflb 式を展開してしまえばPowerShellで結局これだけ。 $a, $b, $c, $d, $e, $f = 0, 1, 1, 2, 2, [BigInt]4 2..100 |% { $a = 10 * $a + 5 * $b + 2 * $c + 2 * $d + $e $b = 5 * $b + 3 * $c + $e + $f $c = 5 * $c + $f $d = 8 * $d + 4 * $e + 2 * $f $e = 4 * $e + 2 * $f $f = 4 * $f for ($p = $a; $p % 10 -eq 0; $p /= 10) {} "P[$_] = 0.$p" }
728 名前:デフォルトの名無しさん [2025/04/01(火) 22:39:42.98 ID:9GVSWQu0.net] 半角スペースの意味がわからない そういうこだわりは古臭いよ
729 名前:デフォルトの名無しさん mailto:sage [2025/04/02(水) 13:29:35.55 ID:k9Y5euIy.net] いまどきのプログラミングなら出力はHTMLだよな
730 名前:デフォルトの名無しさん mailto:sage [2025/04/02(水) 13:47:27.57 ID:hi8l+lAW.net] PHPさえその動作禁止だぞ
731 名前:デフォルトの名無しさん [2025/04/02(水) 14:31:23.27 ID:vIYRPSqy.net] >>727 変数名がa、b、cの時点でプロじゃねえな
732 名前:デフォルトの名無しさん mailto:sage [2025/04/02(水) 15:10:39.64 ID:hi8l+lAW.net] 行列演算は数学でもa,b,c,dだから…
733 名前:デフォルトの名無しさん [2025/04/02(水) 19:51:02.16 ID:7MGV8+qg.net] 俺が言ってるのは5chのプロじゃねえなってことだから 数学は関係ない
734 名前:デフォルトの名無しさん [2025/04/02(水) 19:56:31.51 ID:/hTkauy0.net] 5chのプロ 笑
735 名前:デフォルトの名無しさん mailto:sage [2025/04/02(水) 20:14:17.34 ID:ZWpp3MuE.net] 5chのプロはどんな変数名使うのか教えて
736 名前:デフォルトの名無しさん [2025/04/02(水) 21:11:27.43 ID:HCJVcqu8.net] >>728 >>727 の全角空白のこと? 項の書き忘れや書き間違いがないか分かりやすくするため。余分な空白や長い変数名が ディスク・メモリ空間やコンパイル・インタプリト時間を無駄に増やすと気にする方が古臭くない? とはいえ、今でもインタプリタ言語のPowerShellでは変数名を長くすると顕著に遅くなる。例えば、 $t1 = measure-command {for ($i = 0; $i -lt 1000000; $i++) {}} $t2 = measure-command {for ($AnExtraordinarilyLongVariableName = 0; $AnExtraordinarilyLongVariableName -lt 1000000; $AnExtraordinarilyLongVariableName++) {}} $t2.Ticks / $t1.Ticks をPowerShell Ver.7で実行すると1.56前後の値が表示される。奇妙なことに、かなり古いVer.2では1前後の値になる。 実時間ではVer.7の$t2とVer.2の$t2が同程度なので、Ver.7では短い変数名での最適化が施されているということか。 それはさておき、>>714 を解く人はいませんか?
737 名前:デフォルトの名無しさん [2025/04/02(水) 23:31:04.18 ID:vIYRPSqy.net] >>736 縦に揃えるのは無駄に横に長くなる
738 名前:デフォルトの名無しさん [2025/04/02(水) 23:33:04.35 ID:vIYRPSqy.net] >>736 ループは毎回、構文を解析しているわけじゃねえぞ?
739 名前: [2025/04/05(土) 14:46:26.08 ID:bpkT9prW.net] >>721 このお題の場合は数学的に答えを出そうとするとプログラムを作る必要がなくなってしまわないか? 人が普通に数学的に考えて行くと答えが出てしまいそうな気がするんだが。 またはAIに聞いたらすぐ答えが出そうな感じが。
740 名前:デフォルトの名無しさん mailto:sage [2025/04/08(火) 23:28:40.30 ID:OzdBhfzQ.net] >>714 Rust fn solve(n: usize, limit: usize) -> Vec<usize> { let mut answer = Vec::new(); let mut pnt = generate_primes(n).iter().skip(1).rev().map(|&p| (p, 0, 0)).collect::<Vec<_>>(); let (mut ci, mut cn, mut ct) = (0, n, 1_usize); 'advance: loop { pnt[ci..].iter_mut().for_each(|(_p, n, t)| (*n, *t) = (cn, ct)); if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 { ct <<= cn >> 1; if ct <= limit { answer.push(ct as usize); } } for (i, (p, n, t)) in pnt.iter_mut().enumerate().rev() { if *n < *p { continue; } *n -= *p; *t *= *p; if *t > limit { continue; } if *n == 1 { continue; } if *n == 0 { answer.push(*t as usize); continue; } (ci, cn, ct) = (i, *n, *t); continue 'advance; }; break; } answer.sort(); answer }
741 名前:デフォルトの名無しさん mailto:sage [2025/04/08(火) 23:30:40.48 ID:OzdBhfzQ.net] >>740 素因数の総和が2025になる問題を可能な素数の組合せ総当りで挑戦してみました 20億以下で約0.4秒と規定時間以内に実行できました 実行時間 solve(2025, 20000000): 22.638309ms 実行時間 solve(2025, 2000000000): 418.607978ms fn main() { for (n, limit) in [(2025, 2000_0000), (2025, 20_0000_0000)] { let start_time = std::time::Instant::now(); let answer = solve(n, limit); let end_time = std::time::Instant::now(); println!("実行時間 solve({n}, {limit}): {:?}", end_time - start_time); // 個数と最初と最後の検証 let (valid_len, valid_first, valid_last) = match (n, limit) { (2025, 2000_0000) => (1265, 30255, 19970000), (2025, 20_0000_0000) => (49942, 30255, 1999986740), _ => (0, 0, 0), }; assert_eq!(answer.len(), valid_len); assert_eq!(*answer.first().unwrap(), valid_first); assert_eq!(*answer.last().unwrap(), valid_last); } }
742 名前:デフォルトの名無しさん [2025/04/09(水) 14:40:43.48 ID:jYixYFG8.net] >>739 AIも同じこと言ってた
743 名前:デフォルトの名無しさん [2025/04/09(水) 22:22:33.83 ID:Ip5PiQSs.net] >>740-741 出題時に作成した解答例 C++ https://ideone.com/y1YZlj R https://ideone.com/zvqAsg と解の個数と最小値・最大値が一致するので正解だろう。 ローカルでコンパイルしようとしたら、 error[E0425]: cannot find function `generate_primes` in this scope と表示されコンパイルできなかったので、実行時間の比較はできなかった。
744 名前:デフォルトの名無しさん mailto:sage [2025/04/09(水) 22:57:11.84 ID:R3DmBa+t.net] >>743 すみません 素数の一覧を返すだけなので素数列挙でもライブラリ利用でも何でもいいのですが 例えばエラトステネスの篩ならこんな感じの関数で // 素数の一覧を返す [2, 3, 5, 7, 11, ... , (最大max)] fn generate_primes(max: usize) -> Vec<usize> { // maxの平方根までの素数の倍数を篩にかければ全ての素数が見つかる let limit = max.isqrt() + 1; let mut is_prime = vec![true; max + 1]; is_prime[0] = false; is_prime[1] = false; // 偽初期値 let mut prime = 1; // 次の素数を探す (前回の素数以降でtrueを探すと次の素数) while let Some(pos) = is_prime[(prime + 1)..limit].iter().position(|bool| *bool) { prime += pos + 1; // この素数の倍数をfalseにする 【エラトステネスの篩】 is_prime[(prime << 1)..].iter_mut().step_by(prime).for_each(|bool| *bool = false); } // 素数一覧を返す (trueになるindex値が素数) is_prime.iter().enumerate().filter_map(|(index, bool)| bool.then_some(index)).collect() }
745 名前:デフォルトの名無しさん [2025/04/09(水) 23:40:58.68 ID:Ip5PiQSs.net] >>740-741 , 742と>>743 のC++を解の標準出力なしに変更したものの実行速度を比較したら、 前者の方が2000万以下では27%、20億以下では11%速かった。
746 名前:デフォルトの名無しさん mailto:sage [2025/04/09(水) 23:43:56.02 ID:R3DmBa+t.net] 前者はどっち? アルゴリズムが違うのかちょっと見てみる
747 名前:デフォルトの名無しさん [2025/04/09(水) 23:50:45.01 ID:Ip5PiQSs.net] >>746 前者は>>740-741 , 742のRustプログラム。後者 (C++プログラム) はvectorへの要素追加回数が 多いので時間が掛かっていそう。
748 名前:デフォルトの名無しさん mailto:sage [2025/04/09(水) 23:59:16.31 ID:R3DmBa+t.net] たしかにC++の20億だと数秒かかりますね 何がそんなに違うのかな
749 名前:デフォルトの名無しさん mailto:sage [2025/04/10(木) 00:43:03.90 ID:1pFQYAQA.net] vectorのメモリは必要分を最初に確保すると速くならない? vectorの最初のサイズの初期値は要素10個分だったはず。11個目が追加されたら20個確保して全要素コピーんsんてやってたら遅いよ
750 名前:デフォルトの名無しさん mailto:sage [2025/04/10(木) 02:19:18.58 ID:Zvxe3V8x.net] ベクタはC++もRustも他でもほぼ同じ仕様で埋まると倍の新たなエリアを確保してコピー これは2^n個が埋まった時点でそれ以前の累積コピー個数は 最悪の1個スタートでも1+2+4+ ... + 2^(n-2)+2^(n-1) =2^n - 1個しかない つまりO(1)とみなせるため問題になることは少ない 言語による詳細な差もC++とRustならほぼ無いと思われる 一方で今回の20億以内で素数和が2025になる数を求める問題 C++版がRust版より約10倍遅くなってる原因は ・pushしていくベクタがRust版は1個でC++版は2026個のベクタを利用 ・pushしていく回数がRust版は解の個数と同じ49942回でC++版は134621081回 ワーキングメモリ使用量の差が効いてる
751 名前:デフォルトの名無しさん [2025/04/10(木) 22:03:03.91 ID:Y2N8/SQw.net] >>749 vector p[0]〜p[S]のサイズの最大値4499個(20億以下では88876個)分のメモリを for (auto &v : p) v.reserve(4499); で最初に割り付けておくと、>>745 ではRustの方が2000万以下で27%、20億以下で11%速かったのが、 2000万以下では差が縮まりRustの方が14%速く、20億以下では逆転しRustの方が20%遅くなった。 サイズの最大値は実行前には分からないから、上記の改変はあくまでもvectorのサイズ拡張が実行時間に 及ぼす影響を見るためのテストで、解答として使うことはできないが。 vectorのサイズ拡張は、新しいメモリ割り付けとそこへの要素コピーに掛かる時間によってだけではなく、 要素の格納アドレスが変わることによるキャッシュ有効率の低下によっても、速度低下をもたらしそう。 >>748 , 748 どっちがどれだけ速いかは実行環境に依存するとはいえ、C++が20億で数秒とかRustより約10倍遅いと いうのはいくら何でも遅すぎておかしいと思う。解の標準出力をなしにするのを忘れていたり、Windowsで コンパイル後の実行ファイルの実行時間をPowerShellでmeasure-command {a.exe}のように計測して ウィルス・チェックに要した時間も含まれていたりしない?
752 名前:デフォルトの名無しさん mailto:sage [2025/04/11(金) 07:38:20.09 ID:oaeJuxMT.net] >>740 に手を加えて10倍速くしてみた fn solve(n: usize, limit: usize) -> Vec<usize> { let mut answer = Vec::new(); let mut pnt = generate_primes(n).windows(2).rev().map(|s| (s[1], s[0], 0, 0)).collect::<Vec<_>>(); let (mut ci, mut cn, mut ct) = (0, n, 1_usize); 'advance: loop { pnt[ci..].iter_mut().for_each(|(_p, _q, n, t)| (*n, *t) = (cn, ct)); if cn & 1 == 0 && ct.leading_zeros() >= (cn >> 1) as u32 { ct <<= cn >> 1; if ct <= limit { answer.push(ct); } } 'back: for (i, (p, q, n, t)) in pnt.iter_mut().enumerate().rev() { 'again: loop { if *n < *p { continue 'back; } *n -= *p; *t *= *p; if *n ==1 || *t > limit { continue 'back; } if *n == 0 { answer.push(*t); continue 'back; } if *q > 3 { let mut tt = *t * (*n % *q); for _ in 0..(*n / *q) { tt *= *q; if tt > limit { continue 'again; } } }; break 'again; }; (ci, cn, ct) = (i, *n, *t); continue 'advance; }; break 'advance; }; answer.sort(); answer }
753 名前:デフォルトの名無しさん mailto:sage [2025/04/11(金) 22:07:48.99 ID:CMM29JI3.net] すごいな アルゴリズムの違いでそんなに速度差変わるものなんだな
754 名前:デフォルトの名無しさん [2025/04/11(金) 22:44:47.89 ID:4wK2/GRg.net] >>752 これはとても速いな。ローカルで実行してみたら、>>740 のRustプログラムと比較して 2000万以下で16倍、20億以下で55倍の速さだった。
755 名前:デフォルトの名無しさん mailto:sage [2025/04/12(土) 09:11:24.51 ID:xiQsTIG2.net] >>714 @Wolfram https://ideone.com/4xyb1s
756 名前:デフォルトの名無しさん [2025/04/12(土) 21:18:53.69 ID:RVQAocGC.net] >>743 のC++プログラムは for (int i = S; i >= 2; i--) のループの最後のi = 2の場合を ループの外に出して最適化 (p[S]以外のp[_]への要素追加をしないように) するだけで、 20億以下で解の出力なしのときの実行時間が元のプログラムの半分未満になるな。 https://ideone.com/RtTEO2 (1.02秒) ↓ https://ideone.com/1O04wl (0.44秒)
757 名前:デフォルトの名無しさん mailto:sage [2025/04/12(土) 21:26:41.27 ID:csJOBVaF.net] >>756 それに気づいたけど まだ>>752 と比べて20倍遅いからメモ化の方針が徒となってるのかな
758 名前:753 mailto:sage [2025/04/13(日) 11:09:12.37 ID:vq5HB/06.net] >>714 初Rust https://ideone.com/aaj5D8
759 名前:デフォルトの名無しさん mailto:sage [2025/04/13(日) 23:46:14.76 ID:bmEZDV0H.net] >>758 遅い原因は長さ2000万のベクタ利用?
760 名前:デフォルトの名無しさん mailto:sage [2025/04/13(日) 23:53:41.46 ID:fz+Jdq57.net] 配列にするとどうかね
761 名前:デフォルトの名無しさん mailto:sage [2025/04/17(木) 00:27:46.72 ID:dz0qzhSq.net] 素因数和2025のお題の3系統のコードを読み解いてみた >>758 2000万まで各々で素因数の和を求めて2025になるかを確認する方法。 ただし各数の素因数分解を工夫せずにすると大変なので、 各数の最小素因数(SPF)を先に一気にエラトステネスの篩で求めてる。 それを用いれば各数の素因数分解はその分解数回の割算だけで求まる。 ただしそのSPF表のために長さ2000万のベクタを用いている。 もし20億までなら32bit✕20億で8GBが許容できるとしても、 あるいはこのSPF一覧のベクタを用いなくても、 20億回の処理を劇的に減らす枝刈り方法を組み込めないと厳しい。 2000万までの計算でも一番遅い。
762 名前:デフォルトの名無しさん mailto:sage [2025/04/17(木) 00:29:06.02 ID:dz0qzhSq.net] >>743 2000万個すべてを素因数分解する方法とは逆に、 2025以下の素数の組み合わせを調べていく方法。 そのうち和が2025になる組み合わせの積が各解となる。 それを効率よく求めるために2025(+1)個のベクタのベクタpを用意している。 つまり和がsumとなる時の積をp[sum]に記録していく。 効率面からの仮の初期値p[0]に1を入れて、各素数iについて降順に、 ベクタp[j]にxがある時、ベクタp[i+j]にx*iをpushしていく。 ここでjの上限は 2025 - i、処理するxの上限は 2000万 / i の枝刈りができる。 最終的にベクタp[2025]の一覧が解となる。 2025個のベクタを用いることが長所および短所になっている。 この改良版>>756 では、最後の素数2だけ特別扱いすることで倍速にしている。
763 名前:デフォルトの名無しさん mailto:sage [2025/04/17(木) 00:32:14.51 ID:dz0qzhSq.net] >>740 これも2025以下の素数を組み合わせて和が2025になる解を調べる方法。 解一覧を収めるベクタ以外は、固定の長さ305のベクタのみが使われている。 この長さの 305 とは2025以下~3以上の素数[2017, 2011, ... 5, 3]の数になってる。 各素数の冪乗の和 2017^e2017 + 2011^e2011 + ... + 5^e5 + 3^e3 及び積を計算していくが、 各指数のe2017などは解に不要なので使われておらず、 各冪乗の和自体も不要なので2025までの残りの数が使われていて、 固定長ベクタの値は(素数, 残りの数, ここまでの積)の3つ組となっている。 その素数を1つ使うと残りの数が減算されてて積が乗算されるのを繰り返していく。 素数2だけ特別扱いされており、残りの数の半分だけ左シフトすると解の積が出来上がる。 各if~continueが枝刈りとなっていて、残りの下限(=和の上限)や積の上限などがある この改良版>>752 では、次の素数以降の組み合わせで起き得る積の下限で枝刈りしている。 例えば7以下の素数で残り21ならば積の下限は7*7*7=343となるため、 ここまでの積に343を掛けた値が2000万(または20億)を超えていれば枝刈りできるようだ。 このアルゴリズムは作業メモリが固定で小さく常にL1キャッシュに乗り有利と思われる点と、 様々な枝刈りがしやすく処理する組み合わせを大きく減らしている点により、 他のアルゴリズムより桁違いに高速になっていると推測される。
764 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 06:56:07.77 ID:Hs+w1scb.net] お題:0か1のランダムな要素を持つW*Hの行列と二点の座標x, yとp, qが入力される 直線(x,y)→(p, q) を行列内で要素1に当たらないように任意の位置に合同変換したい 合同変換できる座標があればその二点の座標を出力し、なければ「なし」と出力せよ
765 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 14:00:53.01 ID:2KurydQy.net] ?
766 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 14:59:51.97 ID:LoSO6jC9.net] 行列の1は格子点上の印なのかクロスワードの黒マスなのか (x,y)、(p,q)は任意の点なのか格子点なのか 合同変換される直線(x,y)→(p,q)は実は線分だったりしないのか 無限の可能性を感じさせるお題だな
767 名前:デフォルトの名無しさん mailto:sage [2025/05/03(土) 15:10:32.79 ID:OINldK7L.net] 検証用のデータを書いていないお題は失格 入力例とその時の出力例が必要 もし出力が複数個で長いならその特例の一部や個数など
768 名前:デフォルトの名無しさん [2025/06/21(土) 16:41:25.25 ID:muNvYhtO.net] お題 2次元の配列があったときに 一番左上を起点として右上方向、左下方向、右上方向… というふうに斜めに配列の要素をたどることを ジグザグスキャンと名付けます たとえば、3 * 3の配列の場合は次の順番で配列の要素にアクセスします (1, 2, 6) (3, 5, 7) (4, 8, 9) 二次元の配列を入力としてジグザグスキャンを行ってください 結果を1次元の配列として出力してください 例 入力: (A, B, C), (D, E, F), (G, H, I) 出力: (A, B, D, G, E, C, F, H, I) 入力: (A, B, C), (D, E, F) 出力: (A, B, D, E, C, F) 入力: (A, B), (C, D), (E, F) 出力: (A, B, C, E, D, F)
769 名前:デフォルトの名無しさん [2025/06/21(土) 19:44:57.30 ID:jAwJC0YX.net] >>768 R https://wandbox.org/permlink/JoDE3h6F6k7gKbPs
770 名前:デフォルトの名無しさん mailto:sage [2025/06/21(土) 23:05:10.33 ID:awm9eire.net] >>768 Rust fn f<T: Clone, const M: usize, const N: usize>(input: &[[T; N]; M]) -> Vec<T> { let mut output = Vec::<T>::new(); for x in 0..(M + N - 1) { let start = if x < N { 0 } else { x + 1 - N }; let end = if x < M { x } else { M - 1 }; let iter = (start..=end).map(|m| input[m][x - m].clone()); if x & 1 == 1 { output.extend(iter.clone()); } else { output.extend(iter.rev()); } } output } fn main() { assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]), ['A', 'B', 'D', 'G', 'E', 'C', 'F', 'H', 'I']); assert_eq!(f(&[['A', 'B', 'C'], ['D', 'E', 'F']]), ['A', 'B', 'D', 'E', 'C', 'F']); assert_eq!(f(&[['A', 'B'], ['C', 'D'], ['E', 'F']]), ['A', 'B', 'C', 'E', 'D', 'F']); }
771 名前:デフォルトの名無しさん mailto:sage [2025/06/29(日) 20:45:32.73 ID:f7vmTtNq.net] お題:W*Hの行列に迷路を生成してください(アルゴリズムは任意)
772 名前:デフォルトの名無しさん mailto:sage [2025/06/29(日) 21:58:43.69 ID:HlaloW8+.net] >>771 解がないため不成立 inputとoutputの事例などがないため不成立
773 名前:デフォルトの名無しさん mailto:sage [2025/07/25(金) 12:30:11.02 ID:CjDQVF2B.net] 【問題】 整数のリストが与えられたとき、そのリストを昇順に安定ソートした時の各要素のインデクス(0開始)を対応させたリストを作成せよ 【例】 入力: 1 100 10 10000 1000 出力: 0 2 1 4 3 入力: 3 1 4 1 5 9 2 出力: 3 0 4 1 5 6 2 入力: 0 1 0 1 0 1 0 1 出力: 0 4 1 5 2 6 3 7 実際に必要になって実装したけどスマートな方法があったら知りたい
774 名前:デフォルトの名無しさん mailto:sage [2025/07/25(金) 20:46:23.28 ID:dyl0C+2U.net] >>773 例がおかしい わかりやすい最後の例で示すと 入力: 0 1 0 1 0 1 0 1 出力: 0 4 1 5 2 6 3 7 間違い 出力: 0 2 4 6 1 3 5 7 正解 安定ソートなので同値は順序を保ってこうなる
775 名前:デフォルトの名無しさん mailto:sage [2025/07/25(金) 21:30:28.86 ID:Z69qH9vG.net] >>773 C++ 特にひねりは無い https://ideone.com/mTHn46
776 名前:デフォルトの名無しさん mailto:sage [2025/07/26(土) 12:26:55.07 ID:xCVVpUlx.net] >>774 出題者だけど「各要素の移動先のインデクス」って書いた方がよかったか 文言削りすぎた
777 名前:デフォルトの名無しさん [2025/07/26(土) 15:08:13.56 ID:T78ZrTu7.net] >>773 SQL select row_number() over(order by arrayValue, arrayIndex) - 1 from arrayTable order by arrayIndex
778 名前:デフォルトの名無しさん [2025/07/26(土) 19:25:22.74 ID:T78ZrTu7.net] >>773 Java 24 https://text.is/4Z27R
779 名前:デフォルトの名無しさん mailto:sage [2025/07/27(日) 10:09:36.80 ID:vFJ24xnO.net] >>773 ocaml https://ideone.com/E7eFPC >>773 octave https://ideone.com/KkHu9S >>773 ruby https://ideone.com/pPIxcE
780 名前:デフォルトの名無しさん mailto:sage [2025/07/27(日) 17:05:48.29 ID:vFJ24xnO.net] >>773 c https://ideone.com/6Wn3eD
781 名前:デフォルトの名無しさん mailto:sage [2025/07/27(日) 17:08:58.25 ID:vFJ24xnO.net] >>773 ruby 2.6以降? sorti = ->a {a.map.with_index.sort.map &:last} f = sorti << sorti g = method(:p) << f
782 名前:デフォルトの名無しさん [2025/07/27(日) 20:19:17.79 ID:uFbo+/2v.net] >>773 R https://ideone.com/ctaQC5 統計用言語だけあってライブラリ関数rankを呼び出すだけ。ties.method = "min"を指定すれば 同値を同順位(例えば2番目の例では出力が3 0 4 0 5 6 2となる)にもできる。
783 名前:デフォルトの名無しさん mailto:sage [2025/07/27(日) 21:43:59.43 ID:w39E9j9Q.net] >>773 Rust 既に色々と出ているため別の観点からのコード 一時作業メモリ最小 & ソートは1回 & ジェネリック fn f<T: std::cmp::Ord>(input: &[T]) -> Vec<usize> { let len = input.len(); // ポジションのリスト [0, 1, 2, 3, ... , len-1] を作成 let mut pos_list: Vec<usize> = (0..len).collect(); // inputを利用してそのポジションだけをソート pos_list.sort_by_key(|&pos| &input[pos]); // 返すべきランクのリスト let mut rank_list: Vec<usize> = vec![0; len]; // ポジション⇔ランクは逆写像なのでソートは不要 (0..len).for_each(|rank| rank_list[pos_list[rank]] = rank); rank_list } fn main() { assert_eq!(f(&[1, 100, 10, 10000, 1000]), [0, 2, 1, 4, 3]); assert_eq!(f(&[3, 1, 4, 1, 5, 9, 2]), [3, 0, 4, 1, 5, 6, 2]); assert_eq!(f(&[0, 1, 0, 1, 0, 1, 0, 1]), [0, 4, 1, 5, 2, 6, 3, 7]); }
784 名前:777 mailto:sage [2025/07/27(日) 22:54:22.66 ID:YfUjoiLt.net] >>773 octave ソート一回 https://ideone.com/dTRKBs >>773 ruby 2.5 ソート一回 https://ideone.com/akDhpS
785 名前: [2025/07/28(月) 23:30:37.16 ID:uO5vEij8.net] >>773 >>778 をKotlinに変換してKotlinらしくなるように色々省略しただけのもの。 やはり最初からラムダとか考慮されている言語だと色々省略できて分り易くなるね。 https://paiza.io/projects/0Dhknk4mUHrMqtuwzCDAxQ
786 名前:デフォルトの名無しさん mailto:sage [2025/07/29(火) 00:12:31.56 ID:9AXsNEm+.net] >>773 Rust https://ideone.com/jYX2ws バイナリヒープ使うとソート過程で直接リスト作れるけどコード量増えるしヒープソート遅いから実用性は微妙か C言語ならありかもしれない
787 名前:デフォルトの名無しさん mailto:sage [2025/07/30(水) 21:50:10.50 ID:Ug40aZKP.net] >>773 java https://ideone.com/Z8Q9Dk
788 名前:デフォルトの名無しさん [2025/07/31(木) 14:56:29.97 ID:cLL+G38O.net] >> 771 java >> 785氏のデータも加えてみた。 https://ideone.com/vzXoGd ideoneのjavaはバージョン古いのか... ま、通りがかりにこのスレみつけたのでちょっと書いただけ。
789 名前:デフォルトの名無しさん [2025/07/31(木) 18:54:11.86 ID:cLL+G38O.net] ち、勘が鈍った。>>もつけ間違えるし、sage忘れるし。
790 名前:785 mailto:sage [2025/07/31(木) 21:15:09.63 ID:R3hgrYP8.net] >>773 java compose乱用 https://ideone.com/TBTZgj
791 名前:デフォルトの名無しさん mailto:sage [2025/08/03(日) 22:00:37.87 ID:1jv9m6G7.net] >>773 java >>788 を修正。javaが古いねぇ。 https://ideone.com/Z3jS0P
792 名前:デフォルトの名無しさん mailto:sage [2025/08/04(月) 22:42:57.64 ID:A9zbJQ8U.net] >>773 java >>791 を修正。何度もすいませんね。classをメソッド内に移動。 https://ideone.com/BV5FXe
793 名前:デフォルトの名無しさん mailto:sage [2025/08/04(月) 23:09:28.79 ID:A9zbJQ8U.net] >>773 java >>792 修正。classだったらメソッドの引数がみえるので修正。recordではできない。 https://ideone.com/r6T4Zf
794 名前:デフォルトの名無しさん mailto:sage [2025/08/05(火) 01:04:23.30 ID:wgx4FmLX.net] class ValueWithIndex<U /*extends Comparable<U>*/> implements Comparable<ValueWithIndex<T>> { ジェネリックは難しい。上のextends Comparable<U>は無くてもよいのだが、無駄でも明記したほうがよさそうなので、 ソースではそうした。 明記しなくとも、Uは正しく推測されているようだ。
795 名前:デフォルトの名無しさん [2025/08/06(水) 17:17:53.29 ID:qE4NV2ND.net] >>773 JavaScript https://paiza.io/projects/xtvAB2LXpLg0XOjzBHfl2w
796 名前:デフォルトの名無しさん [2025/08/07(木) 07:21:55.28 ID:W/yAWgo4.net] これからはメソッドの時代
797 名前:デフォルトの名無しさん mailto:sage [2025/08/10(日) 23:18:32.78 ID:FODtZCg5.net] >>773 scala https://ideone.com/iycaKk >>773 swift https://ideone.com/de2iOi
798 名前:デフォルトの名無しさん mailto:sage [2025/08/11(月) 20:38:34.09 ID:frWpQyFA.net] >>773 dart 2.3 https://ideone.com/XLI2nC ・拡張メソッドはDart2.7から ・ideone現状はDart (dart 2.3.0)
799 名前:デフォルトの名無しさん [2025/08/12(火) 21:05:08.06 ID:uRUBTkGF.net] >>773 PowerShell 6以降 function rank($a) { $n = $a.length $r = [int[]]::new($n) if ($n) {0..($n - 1) | sort-object -stable {$a[$_]} |% {$i = 0} {$r[$_] = $i++}} $r } function PrintArray($a) { if ($a.length -le 1) {return $a} "[$(($a |% {PrintArray $_}) -join ", ")]" } $q = (1, 100, 10, 10000, 1000), (3, 1, 4, 1, 5, 9, 2), (0, 1, 0, 1, 0, 1, 0, 1), @(), 1, ((1, 1), (1, 1), (1, 0, 1), (1, 0)) $q |% { "入力: $(PrintArray $_)" "出力: $(PrintArray (rank $_))" "" }
800 名前:デフォルトの名無しさん [2025/08/12(火) 21:05:40.60 ID:uRUBTkGF.net] -- 実行結果 -- 入力: [1, 100, 10, 10000, 1000] 出力: [0, 2, 1, 4, 3] 入力: [3, 1, 4, 1, 5, 9, 2] 出力: [3, 0, 4, 1, 5, 6, 2] 入力: [0, 1, 0, 1, 0, 1, 0, 1] 出力: [0, 4, 1, 5, 2, 6, 3, 7] 入力: 出力: 入力: 1 出力: 0 入力: [[1, 1], [1, 1], [1, 0, 1], [1, 0]] 出力: [2, 3, 1, 0]
801 名前:デフォルトの名無しさん mailto:sage [2025/08/16(土) 01:44:59.97 ID:VU+jlz0U.net] 【問題A】 1~9を1つずつ使用して表される9桁の数Anは全部で9!(=362880)個存在する。 整数n(1≦n≦362880)が与えられたとき、n番目に小さいAnを求めよ。 (例) 1 → 123456789 2 → 123456798 3 → 123456879 123456 → 416589732 234567 → 684753219 362880 → 987654321 【問題B】 1~4を3つずつ使用して表される12桁の数Bnは全部で12!/(3!)^4(=369600)個存在する。 整数n(1≦n≦369600)が与えられたとき、n番目に小さいBnを求めよ。 (例) 1 → 111222333444 2 → 111222334344 3 → 111222334434 123456 → 222331434114 234567 → 324424331112 369600 → 444333222111 ※求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])
802 名前:デフォルトの名無しさん mailto:sage [2025/08/16(土) 13:16:59.50 ID:MUbLd8/3.net] >>801 Rust 愚直にn回まわし use itertools::Itertools; // for tuple_windows() fn f(init: &str, n: usize) -> String { let mut list = init.chars().rev().collect::<Vec<_>>(); for _ in 1..n { if let Some((pre_index, (_, old))) = list.iter().tuple_windows().enumerate().find(|(_, (pre, cur))| pre > cur) { let old_index = pre_index + 1; let (new_index, _) = list.iter().enumerate().find(|(_, cur)| cur > &old).unwrap(); list.swap(old_index, new_index); list[..old_index].reverse(); } } list.into_iter().rev().collect() } fn main() { assert_eq!(f("123456789", 1), "123456789"); assert_eq!(f("123456789", 2), "123456798"); assert_eq!(f("123456789", 3), "123456879"); assert_eq!(f("123456789", 123456), "416589732"); assert_eq!(f("123456789", 234567), "684753219"); assert_eq!(f("123456789", 362880), "987654321"); assert_eq!(f("111222333444", 1), "111222333444"); assert_eq!(f("111222333444", 2), "111222334344"); assert_eq!(f("111222333444", 3), "111222334434"); assert_eq!(f("111222333444", 123456), "222331434114"); assert_eq!(f("111222333444", 234567), "324424331112"); assert_eq!(f("111222333444", 369600), "444333222111"); }
803 名前:デフォルトの名無しさん [2025/08/16(土) 19:14:21.11 ID:kN4EEg8M.net] >>801 の問題A 1からnまでの自然数を並べてできるi番目の順列を求める関数を前に作って持っていたので、 それを流用したらすぐできた(元の関数はBigIntとiの範囲外エラーにも対応)。 R https://ideone.com/hMTf2k C++ https://ideone.com/ZiU5Aa
804 名前:デフォルトの名無しさん [2025/08/16(土) 20:29:06.33 ID:kN4EEg8M.net] >>801 の問題B R https://ideone.com/SdWBKf C++ https://ideone.com/90BpGt
805 名前:デフォルトの名無しさん [2025/08/16(土) 21:32:58.04 ID:kN4EEg8M.net] >>801 >>804 のC++のithDuplicatedPermutation関数は引数が別の値(例えばn = 5, m = 3)のとき 正しく計算できなかったので修正。Rの方はintではなくdoubleで計算しているので問題ない。 https://ideone.com/uH8dpO
806 名前:デフォルトの名無しさん mailto:sage [2025/08/16(土) 21:46:08.81 ID:VU+jlz0U.net] 32bitだと階乗は12!が限界
807 名前:デフォルトの名無しさん mailto:sage [2025/08/17(日) 12:07:33.92 ID:R1ye1QDy.net] >>801 ruby https://ideone.com/o2Qlkr >>801 c https://ideone.com/Q4XNBb
808 名前:805 mailto:sage [2025/08/17(日) 15:08:29.44 ID:R1ye1QDy.net] >>801 ruby 若干の改善 https://ideone.com/oavxRo >>801 c 若干の改善 https://ideone.com/34A07H
809 名前:デフォルトの名無しさん mailto:sage [2025/08/17(日) 15:21:28.95 ID:OrBxx4uG.net] ソートが消えて>>802 と同じアルゴリズムになったね
810 名前:デフォルトの名無しさん [2025/08/17(日) 20:40:30.84 ID:bUKuWE64.net] >>806 確かにそうだった。15!も14!もintの範囲内に収まらない。>>805 でn = 5に変えた場合に正しい 出力になるのはたまたまだった。 >>804 をBigInt化するだけで問題なかった。 R https://ideone.com/OgBxTJ C++ https://ideone.com/KLqe3g
811 名前:デフォルトの名無しさん [2025/08/19(火) 21:08:19.27 ID:zFi0pntB.net] >>801 問題A perl use v5.42; sub nthPermutation($digits, $rank) { my @figures = (1..$digits); my @fact = (1); push @fact, $_ * $fact[-1] for @figures; return join "", map { splice(@figures, $_, 1) } sub($n, $r) { $n-- ? (int($r / $fact[$n]), __SUB__->($n, $r % $fact[$n])) : (); }->($digits, $rank - 1); } for my $i (1, 2, 3, 123456, 234567, 362880) { say "$i -> " . nthPermutation(9, $i); } 1 -> 123456789 2 -> 123456798 3 -> 123456879 123456 -> 416589732 234567 -> 684753219 362880 -> 987654321
812 名前:デフォルトの名無しさん mailto:sage [2025/08/19(火) 21:28:38.04 ID:ahVErwF8.net] >>773 scheme (chicken 4.13) https://ideone.com/RREeGy
813 名前:806 mailto:sage [2025/08/21(木) 22:19:54.42 ID:fAlkh9Aq.net] >>801 ruby https://ideone.com/3TW9Vr ・問題A時に若干端折る
814 名前:デフォルトの名無しさん [2025/08/21(木) 23:15:48.39 ID:0KQ1xtxb.net] >>801 の逆変換プログラム R https://ideone.com/TU73Yu C++ https://ideone.com/dmETd5 問題A, 問題Bとは違って、順列に出現するユニークな整数は1〜nの連番でなくても良いし、 出現回数はすべて同じでなくても良い。例えば、入力は [3, 1, 4, 1, 5, 9] でも良い (ユニークな整数は1, 3, 4, 5, 9で、出現回数は1が2回、その他が1回)。
815 名前:デフォルトの名無しさん [2025/08/22(金) 01:14:43.39 ID:6LYRfbyj.net] >>801 Java https://paiza.io/projects/F5kCIBu6BOVB9QTX7hHWMg
816 名前:デフォルトの名無しさん mailto:sage [2025/08/22(金) 06:55:21.34 ID:qlaiAqZd.net] >>814 Rust >>801 の逆変換の重複順列の何番目か算出 use itertools::Itertools; use num::{BigUint, One}; // 重複順列の何番目かを求める ex. "222331434114" → "123456"番目 fn to_nth(input: &str) -> String { // 出現数 let (mut counts, chars): (Vec<usize>, Vec<char>) = input.chars().sorted().dedup_with_count().multiunzip(); // index化input let input: Vec<usize> = input.chars().map(|c| chars.iter().position(|&c0| c0 == c).unwrap()).collect(); // 階乗関数 fn factorial(x: usize) -> BigUint { (1..=x).fold(BigUint::one(), |p, x| p * x) } // 重複順列の総数 let mut whole: BigUint = factorial(input.len()) / counts.iter().map(|&x| factorial(x)).product::<BigUint>(); // nth番目を算出 (1..=input.len()).rev().zip(input).fold(BigUint::one(), |mut nth, (len, index)| { // 自分より前までの総数をnthに足す nth += &whole * counts[..index].iter().sum::<usize>() / len; // 自分の総数へ更新 whole *= counts[index]; whole /= len; counts[index] -= 1; nth }) .to_string() }
817 名前:デフォルトの名無しさん mailto:sage [2025/08/22(金) 06:56:46.07 ID:qlaiAqZd.net] >>816 の検証分 fn main() { assert_eq!(to_nth("123456789"), "1"); assert_eq!(to_nth("123456798"), "2"); assert_eq!(to_nth("123456879"), "3"); assert_eq!(to_nth("416589732"), "123456"); assert_eq!(to_nth("684753219"), "234567"); assert_eq!(to_nth("987654321"), "362880"); assert_eq!(to_nth("111222333444"), "1"); assert_eq!(to_nth("111222334344"), "2"); assert_eq!(to_nth("111222334434"), "3"); assert_eq!(to_nth("222331434114"), "123456"); assert_eq!(to_nth("324424331112"), "234567"); assert_eq!(to_nth("444333222111"), "369600"); assert_eq!(to_nth("111333442545225"), "123456"); assert_eq!(to_nth("555444333222111"), "168168000"); assert_eq!(to_nth("11111222223333344444555556666677777899⑩⑩889889⑩⑩⑩9"), "123456"); assert_eq!(to_nth("⑩⑩⑩⑩⑩999998888877777666665555544444333332222211111"), "49120458506088132224064306071170476903628800"); assert_eq!(to_nth("314159"), "127"); assert_eq!(to_nth("3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"), "11503448027594046007734790817193859678406683579515952737315863863451534425766911708030454269"); assert_eq!(to_nth("なまむぎなまごめなまたまご"), "10515454"); assert_eq!(to_nth("かえるぴょこぴょこみぴょこぴょこあわせてぴょこぴょこむぴょこぴょこ"), "8273693808428448039784"); }
818 名前:811 mailto:sage [2025/08/22(金) 20:26:43.82 ID:m9vhyo0Z.net] >>801 ruby https://ideone.com/vvp0kq ・問題A時に全体的な規則性に着目 ・部分的に着目しちゃったのが>>813 ・何も工夫を入れなかったのが>>808
819 名前:816 mailto:sage [2025/08/23(土) 20:27:40.18 ID:uyhDG+iz.net] >>801 ruby 問題Bもケア https://ideone.com/od17Hn
820 名前:デフォルトの名無しさん mailto:sage [2025/08/23(土) 21:01:55.02 ID:gxRFdG35.net] >>801 java https://ideone.com/qRTy1Z
821 名前:817 mailto:sage [2025/08/23(土) 23:26:24.12 ID:uyhDG+iz.net] >>801 java https://ideone.com/78psr6
822 名前:デフォルトの名無しさん [2025/08/24(日) 21:13:57.80 ID:ubCw2JoQ.net] >>814 の逆変換プログラムは>>810 の順変換プログラムを流用したから処理に無駄があった。 逆変換用に一から書き直したらすっきりした。 R https://ideone.com/jYUHe1 C++ https://ideone.com/Lne3AQ
823 名前:819 mailto:sage [2025/08/25(月) 00:28:39.45 ID:IbSJkZLt.net] >>801 java Iterable<int[]> https://ideone.com/NRTZpa
824 名前:デフォルトの名無しさん mailto:sage [2025/08/27(水) 00:40:48.46 ID:AbNZa8yo.net] >>801 ocaml https://ideone.com/1Jx1Q8 >>801 scheme (chicken 4.13) https://ideone.com/n7pIFw
825 名前:デフォルトの名無しさん mailto:sage [2025/08/27(水) 21:02:12.94 ID:AbNZa8yo.net] >>801 octave https://ideone.com/RH6xXb
826 名前:デフォルトの名無しさん [2025/08/27(水) 21:46:51.59 ID:B7vE54ji.net] >>822 の逆変換プログラムのC#版 https://ideone.com/8HpCN9 LINQのTakeWhileメソッドとSumメソッドを組み合わせたらすっきり書けた。
827 名前:821 mailto:sage [2025/08/28(木) 21:01:46.43 ID:mnaa+hsk.net] >>801 java https://ideone.com/aKkfqN ・next()ごとに複製しない版。する版は >>823 ・hasNext()側で次を準備。next()側なのは >>823
828 名前:デフォルトの名無しさん [2025/08/29(金) 13:52:26.21 ID:xrZF+zBK.net] >>801 https://ideone.com/JLM8r8 C++
829 名前:デフォルトの名無しさん mailto:sage [2025/08/29(金) 20:09:32.40 ID:VEuLqGzD.net] >>814 ruby 2.5.5 https://ideone.com/tzzN04 ・tallyあるのは2.7以降 >>814 octave https://ideone.com/ebJd9k
830 名前:デフォルトの名無しさん [2025/08/29(金) 22:34:59.67 ID:uVFRnDIW.net] >>804 をCMD (Windowsバッチファイル) に移植 @echo off & setlocal EnableDelayedExpansion echo 【問題A】 for %%i in (1, 2, 3, 123456, 234567, 362880) do call :ithDuplicatedPermutation 9 1 %%i echo. echo 【問題B】 for %%i in (1, 2, 3, 123456, 234567, 369600) do call :ithDuplicatedPermutation 4 3 %%i exit /b :ithDuplicatedPermutation set /a n = %1, m = %2, i = %3, L = 0, P = 1 for /l %%j in (1, 1, %n%) do ( set /a c%%j = %m% for /l %%k in (1, 1, %m%) do set /a L += 1, P = P * L / %%k ) set a=%i% → for /l %%j in (1, 1, %L%) do ( set /a done = 0 for /l %%k in (1, 1, %n%) do ( if !done! equ 0 ( set /a "q = P * c%%k / (L - %%j + 1)" if !i! leq !q! ( set a=!a!%%k set /a c%%k -= 1, P = q, done = 1 ) else ( set /a i -= q ) ) ) ) echo %a%
831 名前:デフォルトの名無しさん [2025/08/29(金) 22:35:22.12 ID:uVFRnDIW.net] -- 実行結果 -- 【問題A】 1 → 123456789 2 → 123456798 3 → 123456879 123456 → 416589732 234567 → 684753219 362880 → 987654321 【問題B】 1 → 111222333444 2 → 111222334344 3 → 111222334434 123456 → 222331434114 234567 → 324424331112 369600 → 444333222111
832 名前:デフォルトの名無しさん mailto:sage [2025/08/30(土) 17:37:04.21 ID:zI+bKiSo.net] >>814 ocaml https://ideone.com/SfsytC >>814 scheme (chicken 4.13) https://ideone.com/jwWrRt
833 名前:830 mailto:sage [2025/09/02(火) 21:36:10.92 ID:MM5Gazf9.net] >>814 scheme (chicken 4.13) https://ideone.com/fZufck ・集計部分をalistに変えてみただけ
834 名前:デフォルトの名無しさん mailto:sage [2025/09/06(土) 23:05:19.87 ID:Z/aFZPi6.net] >>563 scheme (chicken 4.13) https://ideone.com/lCgs9s
835 名前:832 mailto:sage [2025/09/07(日) 12:29:41.48 ID:O1zDlKW9.net] >>563 scheme (chicken 4.13) https://ideone.com/8VZv71 ・m1m2を不必要にリストにしてたのを廃止
836 名前:833 mailto:sage [2025/09/07(日) 14:22:59.56 ID:O1zDlKW9.net] >>563 scheme (chicken 4.13) https://ideone.com/EsJWtG ・letを自然な位置に移動
837 名前:デフォルトの名無しさん mailto:sage [2025/09/08(月) 23:02:49.14 ID:4SI/cFAg.net] >>487 scheme (chicken 4.13) https://ideone.com/feYtNB >>502 scheme (chicken 4.13) https://ideone.com/Svhv1y
838 名前:835 mailto:sage [2025/09/08(月) 23:33:25.73 ID:4SI/cFAg.net] >>487 scheme (chicken 4.13) https://ideone.com/ejvKat ・(product . lists) ・(product xs . rest) が >>837
839 名前:デフォルトの名無しさん mailto:sage [2025/09/09(火) 21:56:29.91 ID:PCxKX9bv.net] >>440 scheme (chicken 4.13) https://ideone.com/6weUjU ・まずまとまりに分割して処理 >>440 scheme (chicken 4.13) https://ideone.com/BCt6fd ・最初のを四つにして、残りはスキップ
840 名前:デフォルトの名無しさん [2025/09/10(水) 21:21:57.38 ID:rb/tQvOM.net] >>440 C#で短く書けた https://ideone.com/SwAZsS x.EndsWith(" ") でなく x.LastOrDefault() == ' ' の方が長くはなるが効率的かも知れない。
841 名前:836 mailto:sage [2025/09/10(水) 22:49:33.81 ID:NV1RL9MH.net] >>487 scheme (chicken 4.13) https://ideone.com/g8wtFG ・デカルト積の解釈を(勝手に)変更
842 名前:839 mailto:sage [2025/09/10(水) 23:35:38.95 ID:6JfM8ZLf.net] >>487 scheme (chicken 4.13) https://ideone.com/A6K3XL ・(cons y x)して最後にreverseする ・(list x y)して最後にflattenするのが >>841
843 名前:840 mailto:sage [2025/09/11(木) 23:05:23.09 ID:WPUXbxYH.net] >>487 scheme (chicken 4.13) https://ideone.com/YqrvdM ・reverse回数減らした版
844 名前:デフォルトの名無しさん mailto:sage [2025/09/12(金) 15:41:31.15 ID:IRXhEt4s.net] お題 1行1単語のリストが、しりとりとして成立しているか判定するコードを書きなさい 成立していたら◯、不成立なら☓をしゅつりょくすること 【入力】 りんご ごりら らっぱ
845 名前:デフォルトの名無しさん mailto:sage [2025/09/12(金) 16:19:33.85 ID:uazXAFOm.net] 入力例に対する出力例が存在しなくて曖昧 それを補わないと問題が不成立
846 名前:デフォルトの名無しさん mailto:sage [2025/09/12(金) 20:36:05.46 ID:I2wrB793.net] >>440 scheme (chicken 4.13) https://ideone.com/SlkO0l ・空白時にdrop-while >>844 ruby https://ideone.com/mY83rW
847 名前:デフォルトの名無しさん mailto:sage [2025/09/13(土) 12:21:51.23 ID:nVmVuqdT.net] 退屈そうだからちょっと難易度高め 【問題】 各桁の数が1~5のいずれかで全ての桁の合計がMとなる正整数の集合をG[M]で表す。 例えば123、111111はG[6]の要素、255、222222はG[12]の要素となる。 整数M(1≦M≦32)、N(1≦N)が与えられたとき、N番目に小さいG[M]の要素を求めよ。 ただしNがG[M]の要素数より大きい場合の出力は0とする。 求める数値は文字列または各桁の数の配列による表現も可能とする(123⇔"123"⇔[1,2,3])。 【例】 #入力は(M,N) (2,1) → 2 (2,2) → 11 (2,3) → 0 (20,1) → 5555 (20,2) → 14555 (20,3) → 15455 (20,400096) → 11111111111111111111 (20,400097) → 0 (32,1) → 2555555 (32,2) → 3455555 (32,3) → 3545555 (32,1000) → 34355354 (32,1000000) → 11532334334 (32,1000000000) → 2141111311212411131 (32,1333610936) → 11111111111111111111111111111111 (32,1333610937) → 0 【ヒント(?)】 G[M]の要素数の数列は下記pentanacci数列a[n]から先頭の[0,0,0,0,1]を除いたものとなる(|G[M]| = a[M + 4])。 ・a[0,1,2,3,4] = [0,0,0,0,1] ・a[k] = a[k-1] + a[k-2] + a[k-3] + a[k-4] + a[k-5] (k≧5) ※a[37]までのリスト: https://oeis.org/A001591/list
848 名前:デフォルトの名無しさん [2025/09/13(土) 21:09:19.41 ID:rhMflYHg.net] >>847 R https://ideone.com/R7chTY ヒントはどう使うのかわからなかった。
849 名前:デフォルトの名無しさん [2025/09/14(日) 02:07:05.25 ID:K9dbpWus.net] >>847 c++ https://ideone.com/ezHz45 先越された
850 名前:デフォルトの名無しさん mailto:sage [2025/09/14(日) 02:17:37.66 ID:ymjVQadn.net] >>847 ruby https://ideone.com/wrV2zh ・なんとなく動いてる版 ・チマチマと次を探して行く ・G[20]まで出すのがやっと(4.05s)
851 名前:デフォルトの名無しさん [2025/09/14(日) 21:00:58.83 ID:Yva1i9w5.net] >>847 R https://ideone.com/XhdJw4 >>848 より行列計算が速くなった。変数名mとnが逆だったのを直した。 C++に移植 https://ideone.com/9dibE0
852 名前:デフォルトの名無しさん [2025/09/14(日) 22:50:48.82 ID:Yva1i9w5.net] >>847 Fortranに移植 https://ideone.com/CnJ0S9 行列計算を短く書けて、しかも実行が速い。
853 名前:848 mailto:sage [2025/09/15(月) 00:34:43.20 ID:aTaxsjKO.net] >>847 ruby https://ideone.com/3I72I6 ・キャッシュ探りながら構築 ・c[桁の合計][幅] = とりうるパターン
854 名前:851 mailto:sage [2025/09/15(月) 00:58:49.72 ID:aTaxsjKO.net] https://ideone.com/GWbQAx ・動きは >>853 といっしょ ・若干の整理
855 名前:デフォルトの名無しさん [2025/09/15(月) 22:27:44.05 ID:g8zilsSB.net] >>852 では行末に無駄な半角空白文字が出力される。消すには最後から3行目のnthPartition(m, n)を trim( )で囲めば良い。
856 名前:852 mailto:sage [2025/09/16(火) 01:02:30.84 ID:3CKXdG+H.net] >>847 ruby https://ideone.com/n5Jqm3 ・動きは >>853 といっしょ ・数値の内部表現を配列から整数へ変更
857 名前:854 mailto:sage [2025/09/17(水) 22:30:29.22 ID:U8XLHdaR.net] >>847 ruby 2.5.5 https://ideone.com/oAQimi ・とりうるパターン数に着目し迫る ・tallyは2.7以降
858 名前:デフォルトの名無しさん [2025/09/17(水) 22:43:48.03 ID:RlLGu0ST.net] >>847 C++ https://ideone.com/I6K1tl 行列Aの計算で加減算・代入回数を>>851 より減らした。実行時間の違いは分からなかった。
859 名前:デフォルトの名無しさん [2025/09/17(水) 23:39:47.32 ID:RlLGu0ST.net] >>858 BigInt化してm = 2000, n = 2¹⁰²⁴で実行したら違いが明確になった。 (1) >>851 のBigInt版 https://ideone.com/S92L9G (2) >>858 のBigInt版 https://ideone.com/3x03xT 加減算・代入回数を削減した(2)の方が確かに速く、(1)の約4分の3の実行時間。
860 名前:855 mailto:sage [2025/09/18(木) 21:13:33.56 ID:mk4sIpUK.net] >>847 ruby 2.5.5 https://ideone.com/Zm2433 ・揃ってからcumsum、のリズムを廃止
861 名前:858 mailto:sage [2025/09/19(金) 21:59:08.62 ID:e72KvXSi.net] >>847 ruby 2.5.5 https://ideone.com/iwQNCH ・若干の整理(loop廃止、fill三回へ置き換え)
862 名前:859 mailto:sage [2025/09/20(土) 21:39:31.29 ID:zrmIrXrK.net] >>847 ruby 2.5.5 https://ideone.com/jHqv2L ・内部表現の変更 112225→[2,3,0,0,1]
863 名前:860 mailto:sage [2025/09/22(月) 21:37:36.11 ID:9W7EeSnZ.net] >>847 ruby 2.5.5 https://ideone.com/MDHX6v ・内部表現のさらなる変更 ・パターン数を直接キャッシュするようにした cc[合計][幅] = とりうるパターン数 >>847 ruby https://ideone.com/PB8S7w ・m = 2000, n = 1 << 1024
864 名前:861 mailto:sage [2025/09/23(火) 01:13:48.01 ID:XS9iE/WB.net] >>847 c++ https://ideone.com/oma0Jf ・ruby版861の移植 ・m = 2000, n = 1 << 1024
865 名前:862 mailto:sage [2025/09/26(金) 21:58:13.14 ID:rAOVnJgT.net] >>847 ruby https://ideone.com/YEGl7C ・実りの無い再帰を省略 ・結果を配列で集めず整数で集める >>847 c++ https://ideone.com/f62fkG ・rubyの移植版 >>847 ocaml https://ideone.com/cHYmdv ・rubyの移植版 ・任意精度整数は昔ながらのnumのBig_int使用 ・ZarithのZは確かに速かったけどideoneでは使えずボツ
866 名前:デフォルトの名無しさん [2025/10/19(日) 18:23:02.12 ID:UPYRyJKx.net] お題 硬貨の種類と金額が与えられます。 硬化の合計がちょうど金額と同じになるように硬貨を選ぶとき、使用枚数の最小値を求めてください。 支払いが不可能なときは-1を出力します。 各硬貨は無制限に使用できます。 額面の大きい硬貨を優先して選ぶ貪欲法が常に最適解を与えるとは限らないことに注意。 入力 硬貨:[1,7,10] 金額:14 出力 使用枚数:2
867 名前:デフォルトの名無しさん [2025/10/19(日) 21:36:07.90 ID:1trCfbwI.net] >>866 R https://ideone.com/bUDu3l
868 名前:デフォルトの名無しさん [2025/10/22(水) 21:34:32.83 ID:vm0Iby1T.net] >>866 金額が大きい場合でも高速に求められるようにした。 R https://ideone.com/NC6lV7 C++ https://ideone.com/52TbeF
869 名前:デフォルトの名無しさん [2025/10/26(日) 09:31:44.23 ID:Y3+SSpql.net] お題というか、協力してほしい感じなんですが、素因数分解関数をHaskellで書いて色んな数を素因数分解して遊んでいたら確認したい事実に出くわしたので。 31 <- 素数 331 <- 素数 3331 <- 素数 33331 <- 素数 333331 <- 素数 と、3が5個並んで末尾が1の数字までは素数という事が分かりましたが、いかんせん、ノートだと力不足。 それにCとかで書き直したらもっと先まで行けるかも?という事で、この先、どこまで33...31が素数なのかを調べて欲しいのです。 協力お願いします<(_ _)> 一応、Haskellではこんなコードです。 factorization n = f primes n where primes = 2:(sieve [3,5..]) where sieve (p:xs) = p:(sieve [x | x <- xs, x `mod` p /= 0]) f (p:ps) n | n <= p = [n] f (p:ps) n | n `mod` p == 0 = p:f (p:ps) (n `div` p) f (p:ps) n = f ps n
870 名前:デフォルトの名無しさん [2025/10/26(日) 09:50:23.90 ID:Y3+SSpql.net] あ、ただの素数判定でも良いです。 ちなみに、66..61の場合は6661までは素数ですが66661は素数じゃなくなりました。 なので、33..31もどこかで素数じゃなくなるのか?それともずっと素数になりそうなのか?って疑問が持ち上がりました。
871 名前:デフォルトの名無しさん mailto:sage [2025/10/26(日) 10:13:01.91 ID:XLS0tlS8.net] >>869 興を削いですまんが、「33...331は素数か」でググったら、AIが(あまり大きくない桁数で)答えを示してくれた…
872 名前:デフォルトの名無しさん mailto:sage [2025/10/26(日) 10:19:15.38 ID:0X7G2IAI.net] near-repdigit素数とかで研究されてるらしい 結果だけ知りたいなら↓がまとめてる https://stdkmd.net/nrr/3/33331.htm
873 名前:869 mailto:sage [2025/10/26(日) 10:21:11.68 ID:XLS0tlS8.net] >>871 ちなみに、以下の思考経路だったのでプログラミング的な思考がゼロだった訳では無い。 1.多倍長整数で組むべきかな? 2.でも64bit整数の範囲で合成数だったら馬鹿馬鹿しいな 3.組む前にカンニングしちゃえ 4.>>871
874 名前:デフォルトの名無しさん [2025/10/26(日) 17:08:32.87 ID:Y3+SSpql.net] >>871-873 いえいえ、ああ、やっぱりずっと素数という訳にはいかないんですね…。 何か素数の秘密に触れるヒントか?と心躍ったけど、そんな訳なかったですね(´・ω・`) あやうく数学スレで鼻息荒く書き込むところでした。 ありがとうございました<(_ _)>
875 名前:デフォルトの名無しさん mailto:sage [2025/10/26(日) 17:55:12.41 ID:N6SeZsiy.net] 29bitで収まる範囲内 333333331 = 17 × 19607843 これを求められなかったHaskellはすごく遅い?
876 名前:デフォルトの名無しさん [2025/10/26(日) 23:06:07.50 ID:Y3+SSpql.net] >>875 速いアルゴリズムに変えたら何とか1分ほどでその数字まで届きました。 (そもそも、>869 のは美しいとか短いとかの枕詞が付くコードですし。33...31に気付かなかったら4桁ぐらいが実用的ならおkだったので) 改良版Haskell pfactorization = f primes where primes =2:3:5#primes where n#x@(m:q:y)=[n|gcd m n<2]++(n+2)#last(x:[m*q:y|q^2-3<n]) というか、それより1桁少ない方が少し時間かかりますね。 19607843 < 33333331 なので、素数比較回数が多いのかと。
877 名前:デフォルトの名無しさん [2025/10/26(日) 23:07:37.04 ID:Y3+SSpql.net] あ、f の方を忘れた。 f のコードは変更なしです。
878 名前:デフォルトの名無しさん [2025/11/07(金) 05:48:17.42 ID:ckPLmv2U.net] >>870 cだとこんな感じでいいのかな? 3333333333333331くらいまで一瞬でできる #include <stdio.h> int main(void) { long long d, n; printf("Enter a number: "); scanf("%lld", &n); for (d = 2; d * d <= n; d++) { if (n % d == 0) break; } if (d * d <= n) printf("%lld is divisible by %lld\n", n, d); else printf("%lld is prime.\n", n); return 0; }