1 名前:デフォルトの名無しさん mailto:sage [2021/06/19(土) 00:02:57.84 ID:MQWrKSb7.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/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part19 https://mevius.5ch.net/test/read.cgi/tech/1606662245/
641 名前:デフォルトの名無しさん mailto:sage [2022/07/09(土) 09:28:21.31 ID:72Wr/ML/.net] >>610 octave https://ideone.com/4MacE3
642 名前:デフォルトの名無しさん [2022/07/09(土) 21:45:11.70 ID:A5P06KhI.net] >>610 Kotlin https://paiza.io/projects/hUR6DylxGsrJBWKI-gmaKg BigInteger 使ったので、ビット数がかなり多くても大丈夫。
643 名前:デフォルトの名無しさん [2022/07/24(日) 20:03:09.74 ID:RqwYi
] [ここ壊れてます]
644 名前:vmm.net mailto: あげ [] [ここ壊れてます]
645 名前:デフォルトの名無しさん [2022/07/26(火) 20:19:27.06 ID:wEdk200U.net] お題:数字をミラーリングせよ 入力 < 123 出力 > 123321 reverse系メソッドを使わなかったら加点とする
646 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 20:33:23.78 ID:gSFNKY8C.net] >>615 Ruby $><<(a=gets.scan /./)*'';$><<$a while$a=a.pop -*- input -*- 123 -*- output -*- 123321
647 名前:デフォルトの名無しさん [2022/07/26(火) 22:30:32.74 ID:LilaKoZu.net] >>615 Java static String mirror(String src) { var dest = new char[src.length() * 2]; var a = src.toCharArray(); for (var i = 0; i < a.length; i++) { dest[i] = a[i]; dest[dest.length - 1 - i] = a[i]; } return new String(dest); }
648 名前:アリ人間 mailto:sage [2022/07/26(火) 22:36:21.87 ID:SFGiBpCo.net] >>615 派生お題: 文字列処理を使わずに与えられた整数を回文にせよ。
649 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 23:38:05.85 ID:ceC8PDvA.net] >>615 octave https://ideone.com/Aa9KII f = @(a) a([1:end end:-1:1]); f('123')
650 名前:デフォルトの名無しさん mailto:sage [2022/07/26(火) 23:41:29.56 ID:DU0tXUgh.net] 魔法の計算式とか無いん?
651 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 00:03:13.42 ID:MKIa5t3g.net] 俺も考えてみたけど調べても回分数のシグマ使わない一般式は無いみたいだな
652 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 00:09:31.00 ID:C/59UMec.net] >>615 JavaScript const mirror = (n, c, ...args) => c === null ? (answer => 0 <= n && answer <= Number.MAX_SAFE_INTEGER ? answer : RangeError(`${n} is invalid.`))(args.reduce((s, d) => s * 10 + d, n)) : c == undefined ? mirror(Number.parseInt(n), Number.parseInt(n), ...args) : mirror(n, c < 10 ? null : Math.floor(c / 10), ...args, c % 10); // test for (const [n] of [[-1, 'x'], [0, 'o'], [1, 'o'], [12345678, 'o'], [123456789, 'x'], [123.456, 'o (123321)']]) { const answer = mirror(n); console[answer instanceof RangeError ? 'error' : 'log'](answer); }
653 名前:デフォルトの名無しさん mailto:sage [2022/07/27(水) 01:46:36.04 ID:7bF+Pf0F.net] octave綺麗
654 名前:96 mailto:sage [2022/08/02(火) 01:11:31.65 ID:6KqVNIq0.net] >>615 Perl5 use feature qw{say signatures}; no warnings 'experimental'; sub f($i, @a) { $i and @a ? (f(@a), $i) : $i } @a = split'',123; say @a, f(@a); 実行結果 ~ $ perl 20_615_mirror.pl 123321
655 名前:96 mailto:sage [2022/08/02(火) 01:20:34.60 ID:6KqVNIq0.net] >>615 Perl5 (リスト処理版) @a = split '', 123; print @a, map{@a[$#a - $_]} 0..$#a; 実行結果 ~ $ perl 20_615_mirror_list.pl 123321
656 名前:デフォルトの名無しさん mailto:sage [2022/08/02(火) 22:22:16.97 ID:9ppQHDnA.net] >>615 ocaml https://ideone.com/FFhxw9 let f s = let csc c s = Char.escaped c ^ s ^ Char.escaped c in let rec aux t = function 0 -> t | n -> aux (csc s.[n - 1] t) (n - 1) in aux "" @@ String.length s let () = print_endline @@ f "123"
657 名前:デフォルトの名無しさん [2022/08/02(火) 23:32:00 ID:49BZsXJW.net] >>615 Kotlin https://paiza.io/projects/2Pe625DoTzToywf3zB2lvA わざわざ Iterator を実装して実現。
658 名前:デフォルトの名無しさん mailto:sage [2022/08/03(水) 00:34:26.60 ID:xChmGTXr.net] >>615 ocaml https://ideone.com/6Y
659 名前:qGis let f s = s ^ String.init (String.length s) (fun i -> s.[String.length s - 1 - i]) let () = print_endline @@ f "123" [] [ここ壊れてます]
660 名前:デフォルトの名無しさん [2022/08/05(金) 11:38:46.19 ID:1Af6TgAi.net] >>615 おもしれーことやってんじゃん じゃあperlの再帰する正規表現で行くかな https://paiza.io/projects/dxhWJaJSrcZdAFpJKe9uvQ
661 名前:デフォルトの名無しさん [2022/08/05(金) 13:16:58.45 ID:6eafuacR.net] gnuWin32を基本使っています。 で行のソートなのですが、各行の末尾から逆向きの文字でソートって出来ませんか たとえば aaaaCB bbbBA cccccDB とかあったとき、これを bbbBA aaaaCB cccccDB としたいのです。 もし難しそうであれば、各行を反転、つまり abcde を edcba とする方法でもいいです。
662 名前:デフォルトの名無しさん [2022/08/05(金) 13:43:08.90 ID:Vk8oFh91.net] >>630 Java Arrays.sort(a, (left, right) -> { var l = left.length() - 1; var r = right.length() - 1; while (l > -1 && r > -1) { var c = Character.compare(left.charAt(l), right.charAt(r)); if (c != 0) { return c; } l--; r--; } if (l > -1) { return 1; } if (r > -1) { return -1; } return 0; });
663 名前:96 mailto:sage [2022/08/05(金) 19:36:20 ID:Rv34IsoP.net] >>630 Perl5が使える環境であれば… ~ $ cat 20_630_isort.pl chomp (@a = <>); sub f {join '', reverse split'', $_[0]} print "$_\n" for sort{f($a) cmp f($b)} @a; ~ $ cat input.txt aaaaCB bbbBA cccccDB ~ $ perl 20_630_isort.pl < input.txt > output.txt ~ $ cat output.txt bbbBA aaaaCB cccccDB
664 名前:デフォルトの名無しさん mailto:sage [2022/08/05(金) 20:52:38 ID:C4r7F682.net] >>630 ruby https://ideone.com/lQz0m2 f = ->(a) {a.sort_by &:reverse} p f.(%w(aaaaCB bbbBA cccccDB)) >>630 octave https://ideone.com/AUCxr3 function i = sorti(varargin), [~, i] = sort(varargin{:}); end f = @(a) a(sorti(cellfun(@(s) {flip(s)}, a))); f({'aaaaCB' 'bbbBA' 'cccccDB'})
665 名前:96 mailto:sage [2022/08/05(金) 22:43:00.57 ID:Rv34IsoP.net] >>632 しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、 データの行数が多いと遅いな
666 名前:96 mailto:sage [2022/08/06(土) 00:54:37.07 ID:pYJx8bVL.net] >>630 Perl5、計算量の抑制に配慮したバージョンと実行例 $ cat 20_630_isort2.pl print $_->[0] for sort{$a->[1] cmp $b->[1]} map{[$_, scalar reverse $_]} <>; $ cat input.txt aaaaCB bbbBA cccccDB $ perl 20_630_isort2.pl input.txt > output.txt $ cat output.txt bbbBA aaaaCB cccccDB
667 名前:96 mailto:sage [2022/08/06(土) 01:06:37.87 ID:pYJx8bVL.net] >>635 これ各行の行末の改行まで含めてreverseしてsortキーとするので、 もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。 そのような万が一の場合に対してもrubstさも持たすならこうか chomp(@a = <>); print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;
668 名前:デフォルトの名無しさん [2022/08/06(土) 05:59:59.26 ID:UcInr7RU.net] >>630 Kotlin https://paiza.io/projects/bK5T2CQgxXwvVlcjKvw-dA ただ処理を連結しただけだな。コマンドラインでパイプ使ったみたいな感じ。
669 名前:デフォルトの名無しさん [2022/08/06(土) 06:11:51.22 ID:UcInr7RU.net] >>630 Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。 (入力文字列は input.txt に入ってい
670 名前:驍ニして)。 rev input.txt | sort | rev Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。 [] [ここ壊れてます]
671 名前:96 mailto:sage [2022/08/06(土) 08:20:40.77 ID:pYJx8bVL.net] >>610 Perl5 use Bit::Vector; $v = Bit::Vector->new(101); for (<DATA>) { ($h, $s, $e) = /0x(\S+) (\S+) (\S+)/; $v->from_Hex("$h"); $v->Interval_Reverse($e, $s); ($r) = $v->to_Hex() =~ /0+(\w+)/; print "$_ => 0x$r\n"; } __DATA__ 0x80 7 0 0xABCD 11 4 0x2 99 1 ※インデントを見易くするため全角スペースに置換しています 実行結果 $ perl 20_610_rebitfld.pl 0x80 7 0 => 0x1 0xABCD 11 4 => 0xA3DD 0x2 99 1 => 0x8000000000000000000000000
672 名前:デフォルトの名無しさん [2022/08/06(土) 10:15:53 ID:8a3zeEyr.net] >>638 Linux環境ではrevというのがあるのですね gnuWin32は全部揃ってないのですね。なんだかなあ rev以外でもLinuxにあってgnuWin32にはないのがあるのかな rev、自分で作ろうかな
673 名前:デフォルトの名無しさん mailto:sage [2022/08/06(土) 11:17:00.60 ID:y9e1BfKB.net] >>630 ocaml https://ideone.com/zdWLHX let rev s = String.init (String.length s) (fun i -> s.[String.length s - 1 - i]) let (<<) f g x = f (g x) let f = List.map (fun (r, s) -> s) << List.sort compare << List.map (fun s -> (rev s, s)) let () = List.iter print_endline @@ f ["aaaaCB"; "bbbBA"; "cccccDB"];
674 名前:96 mailto:sage [2022/08/06(土) 15:02:55.35 ID:ddLJv/Kp.net] >>640 gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが… util-linux-ng for Windows gnuwin32.sourceforge.net/packages/util-linux-ng.htm Util-Linux contains miscellaneous utilities: col: filter reverse line feeds from input colcrt: filter nroff output for CRT previewing colrm: remove columns from a file ddate: converts Gregorian dates to Discordian dates getopt: parse command options (enhanced) hexdump: ascii, decimal, hexadecimal, octal dump line: read one line rename: rename files rev: reverse lines of a file or files ← tailf: follow the growth of a log file whereis: locate the binary, source, and manual page files for a command 作りたいというなら類似のsampleソースはゴマンと転がっとるし C reverse string rev.c strrev - Google 検索 https://www.google.com/search?q=C+reverse+string+rev.c+strrev C program to reverse a string | Programming Simplified https://www.programmingsimplified.com/c-program-reverse-string C_69 C Program to Reverse a String | with strrev() and without strrev() function - YouTube https://www.youtube.com/watch?v=530jWnBMD2M … 好きにしんしゃい
675 名前:96 mailto:sage [2022/08/06(土) 15:16:53.43 ID:ddLJv/Kp.net] Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは GitHub - util-linux/util-linux https://github.com/util-linux/util-linux かな。そのうち rev.c のソースは util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub https://github.com/util-linux/util-linux/blob/master/text-utils/rev.c ちな util-linux パッケージは2006年に fork した
676 名前:ニき名前に -ng をつけて util-linux-ng になったが 2010年に util-linux に名前を戻している。 cf.) util-linux - Wikipedia https://en.wikipedia.org/wiki/Util-linux ついつい、調べ物をしてしまった…orz [] [ここ壊れてます]
677 名前:デフォルトの名無しさん [2022/08/06(土) 17:24:05.41 ID:8a3zeEyr.net] >>642 ありがとう。そんなとこにあったのか
678 名前:デフォルトの名無しさん [2022/08/07(日) 09:51:45.46 ID:UY2OKMya.net] >>642 linuxのrevでやってみました。ところが、全角日本語はやはりダメですね なので、AHK
679 名前:デフォルトの名無しさん [2022/08/07(日) 09:52:47.25 ID:UY2OKMya.net] >>642 linuxのrevでやってみました。ところが、全角日本語はやはりダメですね なので、AHKで自作で作ってみました rev input.txt | sort | rev で問題なく動きました
680 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 16:26:03 ID:BSSIjy3s.net] >>645 環境変数 LANG の設定の問題とか? こっちでは日本語での rev できたよ。 CentOS 7 で bash で LANG=ja_JP.UTF-8 の状態。そこに Windows から TeraTerm で ssh ログインして試したらできた。 $ echo $LANG ja_JP.UTF-8 $ ( echo 見城徹 ; echo 箕輪厚介 ; echo ガーシー ; echo 木原誠二官房副長官 ) | rev 徹城見 介厚輪箕 ーシーガ 官長副房官二誠原木 $
681 名前:デフォルトの名無しさん [2022/08/07(日) 18:30:22.20 ID:C65TbvUb.net] お題 0~2がランダムに8個入力されます 8個の数字を:で結合して出力してください 0が連続する場合は連続する0を::に置換してください 0の連続を::に置換できるのは1回のみです 0の連続が複数存在する場合は長い方を置換してください 長さが同じ場合は先頭の方を置換してください 1個の0は置換してはいけません 例 0, 0, 0, 1, 2, 1, 2, 2 → ::1:2:1:2:2 2, 1, 2, 0, 0, 0, 1, 1 → 2:1:2::1:1 1, 1, 2, 2, 1, 0, 0, 0 → 1:1:2:2:1:: 2, 0, 0, 2, 0, 0, 0, 2 → 2:0:0:2::2 1, 0, 0, 1, 2, 0, 0, 2 → 1::1:2:0:0:2 0, 1, 2, 0, 1, 1, 0, 2 → 0:1:2:0:1:1:0:2
682 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 19:28:27.32 ID:MpscsJR5.net] >>648 Ruby f = -> s { x = s.gsub(', ', ?:); y = x.scan(/0(?::0)+/).max&.count(?0) || 0; x.sub(/:?0(:0){#{y - 1}}+:?/, '::') } [ '0, 0, 0, 1, 2, 1, 2, 2', '2, 1, 2, 0, 0, 0, 1, 1', '1, 1, 2, 2, 1, 0, 0, 0', '2, 0, 0, 2, 0, 0, 0, 2', '1, 0, 0, 1, 2, 0, 0, 2', '0, 1, 2, 0, 1, 1, 0, 2' ].each{ |s| puts '%s -> %s' % [s, f[s]] } # => 0, 0, 0, 1, 2, 1, 2, 2 -> ::1:2:1:2:2 2, 1, 2, 0, 0, 0, 1, 1 -> 2:1:2::1:1 1, 1, 2, 2, 1, 0, 0, 0 -> 1:1:2:2:1:: 2, 0, 0, 2, 0, 0, 0, 2 -> 2:0:0:2::2 1, 0, 0, 1, 2, 0, 0, 2 -> 1::1:2:0:0:2 0, 1, 2, 0, 1, 1, 0, 2 -> 0:1:2:0:1:1:0:2
683 名前:デフォルトの名無しさん [2022/08/07(日) 19:57:31.19 ID:xO94aiKw.net] >>648 perl5 https://paiza.io/projects/5qVZ3qjP3YDPyVVywRVEEQ
684 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 20:01:42.93 ID:H+tq1Ypt.net] 正規表現のreplace一個で行けそうと思ったけど最長マッチみたいなの無理なのか
685 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 20:16:36.94 ID:MpscsJR5.net] 拡張正規表現の中にはチューリング完全なものもあるけどね
686 名前:デフォルトの名無しさん [2022/08/07(日) 20:17:47.43 ID:xO94aiKw.net] そうか 単純に s/0{$n}/::/; を連射して増やしていくだけでいいんだな 最後に成功したのを返す感じで
687 名前:デフォルトの名無しさん [2022/08/07(日) 20:58:47.87 ID:xO94aiKw.net] >>648 perl5 # sub squash0 を>653 で書き替えた https://paiza.io/projects/pNwwe9yNB_dczFaRbV3ZeA
688 名前:デフォルトの名無しさん mailto:sage [2022/08/07(日) 22:19:54.37 ID:UmcKtz1r.net] >>648 octave https://ideone.com/3Udpgi function s = f(a) c = di
689 名前:ff(find([1 diff(a) 1])); e = cumsum(c); b = e - c + 1; n = arrayfun(@(i) a(i), e); [~, i] = max(c.*(n == 0)); s = arrayfun(@(n) {int2str(n)}, a); if (1 < c(i)) s(b(i):e(i)) = ':'; end s = regexprep(strjoin(s, ':'), ':::+', '::'); end [] [ここ壊れてます]
690 名前:655 mailto:sage [2022/08/07(日) 23:28:54.94 ID:UmcKtz1r.net] 結果同じだけど若干の整理可能だった n = arrayfun(@(i) a(i), e); [~, i] = max(c.*(n == 0)); ↓ [~, i] = max(c.*(a(e) == 0));
691 名前:96 [2022/08/08(月) 01:54:39.48 ID:Fkng8CYp.net] >>648 Perl5 use List::Util 'max'; for (<DATA>) { %h = map{length($_) => $_} /(,?0(?:,0)+,?)/g; $n = max keys %h; chomp($i = $_); s/$h{$n}/::/ if $n; s/,/:/g; print "$i => $_"; } __DATA__ 0,0,0,1,2,1,2,2 2,1,2,0,0,0,1,1 1,1,2,2,1,0,0,0 2,0,0,2,0,0,0,2 1,0,0,1,2,0,0,2 0,1,2,0,1,1,0,2 ※見易くするためインデントを全角スペースに置換してあります。 実行結果 $ perl 20_648.pl 0,0,0,1,2,1,2,2 => ::1:2:1:2:2 2,1,2,0,0,0,1,1 => 2:1:2::1:1 1,1,2,2,1,0,0,0 => 1:1:2:2:1:: 2,0,0,2,0,0,0,2 => 2:0:0:2::2 1,0,0,1,2,0,0,2 => 1::1:2:0:0:2 0,1,2,0,1,1,0,2 => 0:1:2:0:1:1:0:2
692 名前:デフォルトの名無しさん [2022/08/08(月) 18:20:49.05 ID:911TGIju.net] >>648 Common Lisp https://ideone.com/p9qSmC JavaScript https://ideone.com/2pXZdF
693 名前:デフォルトの名無しさん mailto:sage [2022/08/10(水) 20:35:58.72 ID:xa8ST9bT.net] >>648 ocaml https://ideone.com/j7yye2
694 名前:デフォルトの名無しさん mailto:sage [2022/08/10(水) 21:08:31.81 ID:xa8ST9bT.net] >>648 octave https://ideone.com/Uyr9cV ・[1, 1, 1, 1, 1, 1, 1, 1]のとき正しくなかったのを修正
695 名前:デフォルトの名無しさん [2022/08/11(木) 15:24:25.24 ID:/k5aJ7yS.net] >>648 Kotlin https://paiza.io/projects/NFrxhMlgOO7dQdW20u_-kw できたことはできたが、なんかもっと良いやり方がありそうな気もする。
696 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>648 敢えて正規表現使わずKotlinで。ややこしかったわ https://ideone.com/JZcPdU
697 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>661 別の解き方が見れておもろい
698 名前:デフォルトの名無しさん mailto:sage [2022/08/11(木) 22:42:32.18 ID:lr7eXs7b.net] >>648 java https://ideone.com/f5yjN8
699 名前:661 [2022/08/12(金) 00:33:44.04 ID:DNG+vRxr.net] 全部0の時に :: にならなかったので>>661 はちょっと修正した。
700 名前:デフォルトの名無しさん [2022/08/13(土) 14:28:26.51 ID:JbrEzaSr.net] お題 1~37からランダムに重複なく7つの数を選び出して小さい順にソートしてください それを5つ出力してください 例 [2, 4, 9, 13, 20, 29, 36] [1, 4, 12, 13, 15, 20, 33] [1, 3, 5, 7, 11, 20, 24] [3, 7, 8, 21, 27, 33, 34] [1, 2, 14, 23, 26, 35, 36]
701 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 14:31:07.91 ID:JPhXlbrB.net] >>666 Ruby [*1..37].sample(7).sort # => [4, 8, 15, 20, 24, 26, 37]
702 名前:デフォルトの名無しさん [2022/08/13(土) 18:53:16.03 ID:jyB6kjuE.net] >>666 Common Lisp https://ideone.com/NMCh3O
703 名前:デフォルトの名無しさん [2022/08/13(土) 19:08:33.35 ID:jyB6kjuE.net] >>668 投稿後一部訂正、n の範囲チェックを追加 負数は弾く (check-type n (integer 0 *)) 上限はシーケンスの長さ (loop repeat n ↓ (loop (min n (length sequence))
704 名前:デフォルトの名無しさん mailto:sage [2022/08/13(土) 19:54:15.55 ID:JW3gpbYe.net] >>666 octave https://ideone.com/Iml4xq f = @() sort(randperm(37, 7)); cell2mat(arrayfun(@(~) {f()}, (1:5)'))
705 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 00:39:46.54 ID:YzvfyuVN.net] >>666 Kotlin script repeat(5) { println((1..37).toList().shuffled().slice(0..6).sorted()) } 実行例 [6, 7, 9, 10, 16, 2
706 名前:2, 27] [2, 8, 9, 11, 16, 32, 33] [11, 13, 18, 25, 26, 30, 34] [2, 3, 12, 14, 20, 27, 37] [7, 13, 14, 19, 27, 30, 35] [] [ここ壊れてます]
707 名前:671 mailto:sage [2022/08/14(日) 00:41:50.08 ID:YzvfyuVN.net] >>671 はこれでも同じだった (toList() 抜き)。 repeat(5) { println((1..37).shuffled().slice(0..6).sorted()) }
708 名前:96 mailto:sage [2022/08/14(日) 01:45:55.09 ID:jl8HjsTF.net] >>666 Perl5 use List::Util 'shuffle'; @a = 1..37; $" = ', '; print "@{[(shuffle@a)[0..6]]}\n" for 1..5; 実行結果 $ perl 20_666_shuffle1-37x5.pl 3, 2, 10, 25, 9, 23, 27 35, 6, 30, 8, 37, 29, 36 20, 29, 19, 18, 37, 21, 23 12, 30, 29, 7, 3, 31, 26 34, 12, 1, 14, 28, 2, 21
709 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 01:54:16.92 ID:v+rcxIed.net] >>673 ソートされてないじゃん
710 名前:96 mailto:sage [2022/08/14(日) 01:59:26.66 ID:jl8HjsTF.net] >>666 Perl5、>>673 は sort するの忘れてた…orz use List::Util 'shuffle'; @a = 1..37; $" = ', '; print "@{[sort{$a <=> $b} ((shuffle @a)[0..6])]}\n" for 1..5; 実行結果 $ perl 20_666_shuffle1-37x5.pl 5, 9, 22, 28, 30, 32, 36 1, 2, 7, 21, 23, 26, 36 6, 14, 15, 16, 19, 26, 28 13, 14, 15, 16, 30, 35, 37 1, 3, 10, 20, 27, 29, 30
711 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 12:35:56.93 ID:JoIEy2rI.net] >>666 ocaml https://ideone.com/3UpGQV let seq b e = let rec aux acc n = if n < b then acc else aux (n :: acc) (pred n) in aux [] e let (<<) f g x = f (g x) let take n = let rec aux acc n = function [] -> acc | x :: xs -> if n <= 0 then acc else aux (x :: acc) (pred n) xs in List.rev << aux [] n let shuffle = List.map snd << List.sort compare << List.map (fun x -> (Random.bits (), x)) let string_of_ints = Printf.sprintf "[%s]" << String.concat "; " << List.map string_of_int let f () = string_of_ints @@ List.sort compare @@ take 7 @@ shuffle @@ seq 1 37 let () = Random.self_init (); List.iter (print_endline << f << ignore) @@ seq 1 5
712 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>666 c https://ideone.com/EHr86S
713 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 21:45:18.38 ID:b/j10zkL.net] (1) aとbからなる文字列があるときその中で部分文字列bbaが最初に完成する文字数を求める ab -> 0 aaa -> 0 bba -> 3 bbba -> 4 babbab -> 5 bbabbaa -> 3 (2) ちょうど50文字のaとbからなる全ての並びの文字列の内 50文字目(最後)にbbaが完成するのは何通りあるか? 長さ3文字で3文字目に完成するのはbbaのひとつだけ 長さ4文字で4文字目に完成するのはabbaとbbbaの二通り
714 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>678 Ruby (1) %w[ab aaa bba bbba babbab bbabbaa].each do |s| i = s =~ /bba\K/ puts '%s -> %d' % [s, i ? i + 3 : 0] end # => ab -> 0 aaa -> 0 bba -> 3 bbba -> 4 babbab -> 5 bbabbaa -> 3 (2) f = -> (n, a=[0, 0, 1]) {return a[n] if n<a.size; a<<f[n-1,a]+f[n-2,a]+1;a.last} p f[49] # => 12586269024
715 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:30:32.35 ID:z6QFcjeU.net] 行列の掛け算を実装せよ 二次正方行列 A=((1 -2) (2 3)), B = ((-2 1)(3 -1)) について AB, BA を求めよ 可能であれば二次正方行列以外の行列についても対応せよ 実装の細かい点については出題者は指定しないので良きに計らって結構。 <お願い> 行列の積において結合則成立の証明を教えてください
716 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:43:04.52 ID:0XTzAkvO.net] >>678 c https://ideone.com/hlf3c3 ・(1)(2)ともに自信なし(たぶんお題の意味わかってない)
717 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:49:01.35 ID:gf0q/4T2.net] >>680 Ruby Matrixクラス不使用 def product(a, b)
718 名前:[ [a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1]], [a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1]], ] end p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]]) # => [[-8, 3], [5, -1]] # 夏休みの宿題は自分でやりましょう [] [ここ壊れてます]
719 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 22:51:54.64 ID:7JC7m3TJ.net] >>682 >二次正方行列以外の行列についても対応せよ
720 名前:デフォルトの名無しさん mailto:sage [2022/08/14(日) 23:05:21.92 ID:gf0q/4T2.net] >>680 >>683 def product(a, b) m = a.first.size c = Array.new(a.size){[]} a.size.times do |i| b.first.size.times do |j| c[j][i] = m.times.map{|k| a[k][i] * b[j][k]}.sum end end c end p product([[1, -2], [2, 3]], [[-2, 1], [3, -1]]) # => [[0, 7], [1, -9]] p product([[-2, 1], [3, -1]], [[1, -2], [2, 3]]) # => [[-8, 3], [5, -1]]
721 名前:デフォルトの名無しさん [2022/08/14(日) 23:09:42.44 ID:ct8M+Uij.net] NxMのデータをどう定義するか だけの問題だな 毎回悩む 下は後悔してるタイプ (defparameter *position-IO* (loop for input in '(7 8 9 4 5 6 1 2 3) for pos below 9 collect (cons input pos)))
722 名前:デフォルトの名無しさん [2022/08/15(月) 00:42:19.42 ID:PTEGgn5Q.net] >>679 どういう頭してたらその法則性に気づくん???
723 名前:デフォルトの名無しさん [2022/08/15(月) 01:31:39.90 ID:b/MTJSvV.net] >>678 Kotlin script (1) listOf("ab","aaa","bba","bbba","babbab","bbabbaa").forEach { print("$it ->"); it.indexOf("bba").let { if (it >= 0) println(it + 3) else println(0) } } 実行時の出力 ab ->0 aaa ->0 bba ->3 bbba ->4 babbab ->5 bbabbaa ->3 (2) println(1L shl (50 - 3)) 実行時の出力 140737488355328
724 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 01:56:11.12 ID:RG8mAl+Q.net] (2) 出題の仕方が間違ってた 最後に唯一のbbaが現れるパターンと書くべきだった 自分の中ではこのことしか考えてなかったから >>679 さんは汲んでくれたようで、早さにも驚いたけど
725 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 09:19:59.19 ID:jWRkxbjN.net] なるほど, 再帰的に構成すればいいのか aから始まる時: a + x[n-1] baから始まる時: ba + x[n-2] bbから始まる時: bb...bba
726 名前:デフォルトの名無しさん [2022/08/15(月) 09:43:22.06 ID:90U51paY.net] >>686 そういう漸化式は普通に受験で良くでてくる
727 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 17:00:11.92 ID:ioAOBwsA.net] >>680 https://ideone.com/umJbre https://ja.wikibooks.org/wiki/%E7%B7%9A%E5%9E%8B%E4%BB%A3%E6%95%B0%E5%AD%A6/%E8%A1%8C%E5%88%97%E3%81%A8%E8%A1%8C%E5%88%97%E5%BC%8F/%E7%AC%AC%E4%B8%89%E9%A1%9E/%E8%A1%8C%E5%88%97%E3%81%AE%E7%A9%8D#matrix's-associativity
728 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 17:16:58.66 ID:RVV7PTHo.net] >>691 c https://ideone.com/47VxwF ・二次元でintのみ
729 名前:デフォルトの名無しさん mailto:sage [2022/08/15(月) 17:19:53.25 ID:RVV7PTHo.net] >>680 https://ideone.com/47VxwF ・二次元でintのみ
730 名前:693 mailto:sage [2022/08/16(火) 16:05:44.79 ID:y+iYdbLW.net] >>680 c https://ideone.com/lWljpL ・>>693 から若干の整理 ・インデントも修正
731 名前:デフォルトの名無しさん [2022/08/16(火) 19:29:50.25 ID:6LZk+vGC.net] >>688 え?言ってる意味がわからない。どういうこと?
732 名前:デフォルトの名無しさん [2022/08/16(火) 20:01:21.15 ID:xodQRDI1.net] bba+gge=momo
733 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>695 末尾以外にbbaが現れる文字列を除外するってことじゃろう
734 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 21:15:34.85 ID:dhC56AkH.net] bbaが最後に達成されるんじゃなければ2^47計算するだけのなん
735 名前:フ面白みもない問題になるからそこで気付く人は気づくよね [] [ここ壊れてます]
736 名前:デフォルトの名無しさん mailto:sage [2022/08/16(火) 23:04:49.04 ID:mbmTGUKF.net] ついでに50文字で今度は最後がbbaじゃなくて bbbのときとbabのときのそれぞれのパターン数を求めるって問題
737 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 01:28:19.97 ID:0f27vmNE.net] >>697 なるほど。やっと意味がわかった。
738 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 14:04:15.12 ID:UFtMHmKs.net] お題:分割されている顔文字を結合して表示してください 1つの顔文字は半角4字で構成。左右対称。2字ずつ半分に分割されてシャッフルされている 出力する顔文字の順番は自由とする 入力 < ^)(^ 出力 > (^^) 入力 < ^)(-(^-)(vv) 出力 > (^^)(--)(vv)
739 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 14:59:27.47 ID:2ZT38iyw.net] お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」をそれぞれ表示する方法を示してください 便宜的に、ナンプレのマスには左上から右へ、右下に向かい0〜80までの数値を入れます。 0 1 2 3 4 5 6 7 8 ... ...............80 左から1列目の9マスは
740 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 15:10:22.08 ID:2ZT38iyw.net] 途中送信してしまった お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」のマスをそれぞれ表示する方法を示してください ※便宜的に、ナンプレのマスには左上から右へ、右下に向かい0〜80までの数値を入れます。 0 1 2 3 4 5 6 7 8 ... ...............80 例えば左から1列目の9マスは [0 9 18 27 36 45 54 63 72] となります。 等差を利用して数字だけを表示するものは不可です。 マスに何の値が入っていても表示できるようにしてください。
741 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 21:47:42.92 ID:GkJOOerG.net] >>703 c https://ideone.com/lBKsc9