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/
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
742 名前:デフォルトの名無しさん mailto:sage [2022/08/17(水) 23:34:27.13 ID:yTY/OYLu.net] >>701 (><)
743 名前:デフォルトの名無しさん [2022/08/18(木) 02:15:12.90 ID:KCyiWPRI.net] >>703 perl5 https://paiza.io/projects/amKhSF3cnp1Ny5-2yWLO4g
744 名前:デフォルトの名無しさん mailto:sage [2022/08/18(木) 03:07:13.35 ID:dBOjwuYR.net] >>701 JavaScript > ['^)(^', '^)(-(^-)(vv)', '<)(>'].map((R => input => Array.from(input.matchAll(/\((.)/g)).reduce((output, [l, r]) => output + l + R(r) + ')', ''))(r => r == '>' ? '<' : r)) [ '(^^)', '(--)(^^)(vv)', '(><)' ]
745 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>701 Ruby f = -> str do loop do str.sub!(/(.)\)(.*)\(\1/, '(\1\1)\2') || str.sub!(/\((.)(.+)\1\)/, '(\1\1)\2') || (break str) end end %w[ ^)(^ ^)(-(^-)(vv) (-(^-)^)].each do |s| puts '%s -> %s' % [s, f[s.b]] end # => ^)(^ -> (^^) ^)(-(^-)(vv) -> (^^)(--)(vv) (-(^-)^) -> (--)(^^)
746 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>703 Ruby PLACEHOLDER = [*0..80] field = 9.times.reduce([]) do |s, y| s << 9.times.map do |x| PLACEHOLDER[9 * y + x] end end puts field.map{|r| r.map{'%02d' % _1}.join} # => 000102030405060708 091011121314151617 181920212223242526 272829303132333435 363738394041424344 454647484950515253 545556575859606162 636465666768697071 727374757677787980
747 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>703 お題をよく読んでいなかった >>709 の続き row = -> (n, field) {field[n]} column = -> (n, field) {field.map{_1[n]}} block = -> (n, field) {9.times.map{n * 3 + n / 3 * 18 + _1 + _1 / 3 * 6}.map{field.flatten[_1]}} puts row[7, field].join(?,) # => 63,64,65,66,6
748 名前:7,68,69,70,71 puts column[7, field].join($/) # => 7 16 25 34 43 52 61 70 79 puts block[7, field].each_slice(3).map{_1.join(?,)}.join($/) # => 57,58,59 66,67,68 75,76,77 [] [ここ壊れてます]
749 名前:704 mailto:sage [2022/08/18(木) 23:38:15.48 ID:YBxy/c4L.net] >>703 c https://ideone.com/0yXRih ・>>704 から若干の整理
750 名前:デフォルトの名無しさん [2022/08/19(金) 23:42:01.44 ID:GkIv/1vJ.net] お題 <user>:<group>の数 <user>:<group> <user>:<point>の数 <user>:<point> が入力されます <group>ごとに<point>を集計して<group>順に <group>:<point>を出力してください 例) // 入力 6 UserE:GroupC UserD:GroupA UserB:GroupC UserA:GroupC UserC:GroupB UserF:GroupB 6 UserB:3 UserF:2 UserD:5 UserC:13 UserE:11 UserA:7 // 出力 GroupA:5 GroupB:15 GroupC:21
751 名前:デフォルトの名無しさん [2022/08/19(金) 23:58:05.14 ID:zRvvDV0W.net] なんで数を入力してるんだ? 後の情報であきらかではないか まさかグループ名が整数でも良いと考えている?
752 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 00:02:54.24 ID:xIohwuBb.net] >>712 Ruby g, p = str.split(/^\d+$/)[1, 2].map{_1.strip.each_line.map{|s| s.chomp.split(?:)}.to_h} puts g.reduce(Hash.new(0)){|h, (k, v)| h[v] += p[k].to_i; h}.sort.map{_1.join(?:)} # => GroupA:5 GroupB:15 GroupC:21
753 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 07:49:15.49 ID:/HXUcxOA.net] // >>712 Node.js import readline from 'node:readline'; const rl = readline.createInterface({input: process.stdin, output: process.stdout}); const all = [/* {user, group, point}, ... */]; let usergroup = false; rl.on('line', line => { line = line.trim(); if (line) { if (/^\d+$/.test(line)) { usergroup = !usergroup; } else if (usergroup) { const {groups} = line.match(/^(?<user>[^:]+):(?<group>[^:]+)$/); all.push(groups); } else { const {groups: {user, point}} = line.match(/^(?<user>[^:]+):(?<point>\d+)$/); Object.defineProperty(all.find(_ => _.user == user), 'point', {value: Number(point), enumerable: true}); } } else { rl.close(); } }); rl.on('close', () => { for (const [group, point] of Object.entries(all.reduce((gp, {group, point}) => {gp[group] = (gp[group] ?? 0) + point; return gp;}, {})).sort(([a], [b]) => a < b ? -1 : 1)) { console.log(`${group}:${point}`); } });
754 名前:デフォルトの名無しさん mailto:sage [2022/08/20(土) 17:09:35.31 ID:tvd+mgyM.net] >>712 c https://ideone.com/Edol3U
755 名前:デフォルトの名無しさん [2022/08/20(土) 21:26:59.76 ID:myFbjTal.net] >>712 C# https://paiza.io/projects/IAgPLTHFbJ-HmDcLHFrNYA
756 名前:デフォルトの名無しさん [2022/08/20(土) 22:24:09.90 ID:5JSGWnVi.net] >>703 ってこれじゃだめなのかな 7行で書ける https://ideone.com/eKTMZr
757 名前:96 mailto:sage [2022/08/21(日) 02:42:00.00 ID:P6BPpVvp.net] >>712 Perl5 use feature qw{say signatures}; no warnings "experimental::signatures"; sub ($n, @a) { $h{$$_[0]} = $$_[1] for map{[/(\w+)/g]} @_[1..$n]; sub ($m, @) { $g{$h{$$_[0]}} += $$_[1] for map{[/(\w+)/g]} @_[1..$m]; }->(@a[$n..$#a]); say "$_:$g{$_}" for sort keys %g; }->(<>); ※見易くするためインデントを全角スペースに置換してあります。 実行結果: https://ideone.com/GxsRSY
758 名前:デフォルトの名無しさん [2022/08/21(日) 06:03:07.44 ID:V5T4kdVo.net] >>712 <group>順にって、何を元にして group の順序を決めるの? 入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?
759 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 07:03:57.35 ID:3JIuIXQv.net] <group>毎という事だと思う サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし
760 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 08:49:24.60 ID:0ZMA3aWJ.net] >>713 実際にここでも数字を使っている例が出て来てるからわかると思うけど 競プロなんかではよくあるフォーマットだよ
761 名前:デフォルトの名無しさん [2022/08/21(日) 18:07:19.66 ID:ecIOs+Jg.net] >>666 C# https://paiza.io/projects/sT_SLT3n0NNab0a-ZD7IHQ
762 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:28:38.88 ID:Y2TZP89X.net] お題:Hello, World!を出力中にプログラムを強制終了せよ Hello, World!が完全に出力されたらGAME OVERとする
763 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:45:13.28 ID:ui07Fbeq.net] >>724 Ruby Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'} Thread.new{exit} # => Hello, World!
764 名前:デフォルトの名無しさん [2022/08/21(日) 18:49:48.17 ID:ecIOs+Jg.net] >>701 C# https://paiza.io/projects/D1PZTVPBn2qnksCQnwYQmw?language=csharp
765 名前:デフォルトの名無しさん mailto:sage [2022/08/21(日) 18:51:27.42 ID:ui07Fbeq.net] >>725 訂正 Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'} Thread.new{exit!} # => H
766 名前:デフォルトの名無しさん [[ここ壊れてます] .net] >>703 C# https://paiza.io/projects/HzrEP1l1vX4Z3JUqmHSUwg