22/07/26 23:41:29.56 DU0tXUgh.net
魔法の計算式とか無いん?
651:デフォルトの名無しさん
22/07/27 00:03:13.42 MKIa5t3g.net
俺も考えてみたけど調べても回分数のシグマ使わない一般式は無いみたいだな
652:デフォルトの名無しさん
22/07/27 00:09:31.00 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:デフォルトの名無しさん
22/07/27 01:46:36.04 7bF+Pf0F.net
octave綺麗
654:96
22/08/02 01:11:31.65 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
22/08/02 01:20:34.60 6KqVNIq0.net
>>615 Perl5 (リスト処理版)
@a = split '', 123;
print @a, map{@a[$#a - $_]} 0..$#a;
実行結果
~ $ perl 20_615_mirror_list.pl
123321
656:デフォルトの名無しさん
22/08/02 22:22:16.97 9ppQHDnA.net
>>615 ocaml
URLリンク(ideone.com)
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:デフォルトの名無しさん
22/08/02 23:32:00 49BZsXJW.net
>>615
Kotlin
URLリンク(paiza.io)
わざわざ Iterator を実装して実現。
658:デフォルトの名無しさん
22/08/03 00:34:26.60 xChmGTXr.net
>>615 ocaml
URLリンク(ideone.com)
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:デフォルトの名無しさん
22/08/05 11:38:46.19 1Af6TgAi.net
>>615
おもしれーことやってんじゃん
じゃあperlの再帰する正規表現で行くかな
URLリンク(paiza.io)
661:デフォルトの名無しさん
22/08/05 13:16:58.45 6eafuacR.net
gnuWin32を基本使っています。
で行のソートなのですが、各行の末尾から逆向きの文字でソートって出来ませんか
たとえば
aaaaCB
bbbBA
cccccDB
とかあったとき、これを
bbbBA
aaaaCB
cccccDB
としたいのです。
もし難しそうであれば、各行を反転、つまり
abcde
を
edcba
とする方法でもいいです。
662:デフォルトの名無しさん
22/08/05 13:43:08.90 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
22/08/05 19:36:20 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:デフォルトの名無しさん
22/08/05 20:52:38 C4r7F682.net
>>630 ruby
URLリンク(ideone.com)
f = ->(a) {a.sort_by &:reverse}
p f.(%w(aaaaCB bbbBA cccccDB))
>>630 octave
URLリンク(ideone.com)
function i = sorti(varargin), [~, i] = sort(varargin{:}); end
f = @(a) a(sorti(cellfun(@(s) {flip(s)}, a)));
f({'aaaaCB' 'bbbBA' 'cccccDB'})
665:96
22/08/05 22:43:00.57 Rv34IsoP.net
>>632
しまった、これだとsortの計算量 N・log N に応じた回数、比較のための文字列逆転 sub f の呼出しが起き、
データの行数が多いと遅いな
666:96
22/08/06 00:54:37.07 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
22/08/06 01:06:37.87 pYJx8bVL.net
>>635
これ各行の行末の改行まで含めてreverseしてsortキーとするので、
もし入力ファイルの最後の行に改行が欠けていて無かったらsort結果がおかしくなる。
そのような万が一の場合に対してもrubstさも持たすならこうか
chomp(@a = <>);
print "$$_[0]\n" for sort{$$a[1] cmp $$b[1]} map{[$_, scalar reverse]} @a;
668:デフォルトの名無しさん
22/08/06 05:59:59.26 UcInr7RU.net
>>630
Kotlin
URLリンク(paiza.io)
ただ処理を連結しただけだな。コマンドラインでパイプ使ったみたいな感じ。
669:デフォルトの名無しさん
22/08/06 06:11:51.22 UcInr7RU.net
>>630
Linux 等の UNIX 系 OS で rev コマンドと sort コマンドが使える環境ならシェルのコマンドラインからこう入力するとできる。
(入力文字列は input.txt に入ってい�
670:驍ニして)。 rev input.txt | sort | rev Windows の環境でやる場合は互換性のあるコマンドを利用するか、または Cygwin や WSL や WSL2 等の UNIX 互換環境の中でコマンドラインから実行できる。
671:96
22/08/06 08:20:40.77 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:デフォルトの名無しさん
22/08/06 10:15:53 8a3zeEyr.net
>>638
Linux環境ではrevというのがあるのですね
gnuWin32は全部揃ってないのですね。なんだかなあ
rev以外でもLinuxにあってgnuWin32にはないのがあるのかな
rev、自分で作ろうかな
673:デフォルトの名無しさん
22/08/06 11:17:00.60 y9e1BfKB.net
>>630 ocaml
URLリンク(ideone.com)
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
22/08/06 15:02:55.35 ddLJv/Kp.net
>>640
gnuWin32 用の rev.exe が欲しいなら、書き起こさなくともutil-linux-ng パッケージに入っていると思うが…
util-linux-ng for Windows
URLリンク(gnuwin32.sourceforge.net)
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 検索
URLリンク(www.google.com)
C program to reverse a string | Programming Simplified
URLリンク(www.programmingsimplified.com)
C_69 C Program to Reverse a String | with strrev() and without strrev() function - YouTube
URLリンク(www.youtube.com)
… 好きにしんしゃい
675:96
22/08/06 15:16:53.43 ddLJv/Kp.net
Cygwin などに使われている util-linux パッケージのオリジナルな現行のソースは
GitHub - util-linux/util-linux
URLリンク(github.com)
かな。そのうち rev.c のソースは
util-linux/rev.c at master ・ util-linux/util-linux ・ GitHub
URLリンク(github.com)
ちな 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:デフォルトの名無しさん
22/08/06 17:24:05.41 8a3zeEyr.net
>>642
ありがとう。そんなとこにあったのか
678:デフォルトの名無しさん
22/08/07 09:51:45.46 UY2OKMya.net
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHK
679:デフォルトの名無しさん
22/08/07 09:52:47.25 UY2OKMya.net
>>642
linuxのrevでやってみました。ところが、全角日本語はやはりダメですね
なので、AHKで自作で作ってみました
rev input.txt | sort | rev
で問題なく動きました
680:デフォルトの名無しさん
22/08/07 16:26:03 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:デフォルトの名無しさん
22/08/07 18:30:22.20 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:デフォルトの名無しさん
22/08/07 19:28:27.32 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:デフォルトの名無しさん
22/08/07 19:57:31.19 xO94aiKw.net
>>648
perl5
URLリンク(paiza.io)
684:デフォルトの名無しさん
22/08/07 20:01:42.93 H+tq1Ypt.net
正規表現のreplace一個で行けそうと思ったけど最長マッチみたいなの無理なのか
685:デフォルトの名無しさん
22/08/07 20:16:36.94 MpscsJR5.net
拡張正規表現の中にはチューリング完全なものもあるけどね
686:デフォルトの名無しさん
22/08/07 20:17:47.43 xO94aiKw.net
そうか
単純に s/0{$n}/::/;
を連射して増やしていくだけでいいんだな
最後に成功したのを返す感じで
687:デフォルトの名無しさん
22/08/07 20:58:47.87 xO94aiKw.net
>>648
perl5 # sub squash0 を>653 で書き替えた
URLリンク(paiza.io)
688:デフォルトの名無しさん
22/08/07 22:19:54.37 UmcKtz1r.net
>>648 octave
URLリンク(ideone.com)
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
22/08/07 23:28:54.94 UmcKtz1r.net
結果同じだけど若干の整理可能だった
n = arrayfun(@(i) a(i), e);
[~, i] = max(c.*(n == 0));
↓
[~, i] = max(c.*(a(e) == 0));
691:96
22/08/08 01:54:39.48 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:デフォルトの名無しさん
22/08/08 18:20:49.05 911TGIju.net
>>648
Common Lisp URLリンク(ideone.com)
JavaScript URLリンク(ideone.com)
693:デフォルトの名無しさん
22/08/10 20:35:58.72 xa8ST9bT.net
>>648 ocaml
URLリンク(ideone.com)
694:デフォルトの名無しさん
22/08/10 21:08:31.81 xa8ST9bT.net
>>648 octave
URLリンク(ideone.com)
・[1, 1, 1, 1, 1, 1, 1, 1]のとき正しくなかったのを修正
695:デフォルトの名無しさん
22/08/11 15:24:25.24 /k5aJ7yS.net
>>648
Kotlin
URLリンク(paiza.io)
できたことはできたが、なんかもっと良いやり方がありそうな気もする。
696:デフォルトの名無しさん
[ここ壊れてます] .net
>>648
敢えて正規表現使わずKotlinで。ややこしかったわ
URLリンク(ideone.com)
697:デフォルトの名無しさん
[ここ壊れてます] .net
>>661
別の解き方が見れておもろい
698:デフォルトの名無しさん
22/08/11 22:42:32.18 lr7eXs7b.net
>>648 java
URLリンク(ideone.com)
699:661
22/08/12 00:33:44.04 DNG+vRxr.net
全部0の時に :: にならなかったので>>661はちょっと修正した。
700:デフォルトの名無しさん
22/08/13 14:28:26.51 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:デフォルトの名無しさん
22/08/13 14:31:07.91 JPhXlbrB.net
>>666 Ruby
[*1..37].sample(7).sort
# => [4, 8, 15, 20, 24, 26, 37]
702:デフォルトの名無しさん
22/08/13 18:53:16.03 jyB6kjuE.net
>>666 Common Lisp
URLリンク(ideone.com)
703:デフォルトの名無しさん
22/08/13 19:08:33.35 jyB6kjuE.net
>>668
投稿後一部訂正、n の範囲チェックを追加
負数は弾く
(check-type n (integer 0 *))
上限はシーケンスの長さ
(loop repeat n
↓
(loop (min n (length sequence))
704:デフォルトの名無しさん
22/08/13 19:54:15.55 JW3gpbYe.net
>>666 octave
URLリンク(ideone.com)
f = @() sort(randperm(37, 7));
cell2mat(arrayfun(@(~) {f()}, (1:5)'))
705:デフォルトの名無しさん
22/08/14 00:39:46.54 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
22/08/14 00:41:50.08 YzvfyuVN.net
>>671はこれでも同じだった (toList() 抜き)。
repeat(5) { println((1..37).shuffled().slice(0..6).sorted()) }
708:96
22/08/14 01:45:55.09 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:デフォルトの名無しさん
22/08/14 01:54:16.92 v+rcxIed.net
>>673
ソートされてないじゃん
710:96
22/08/14 01:59:26.66 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:デフォルトの名無しさん
22/08/14 12:35:56.93 JoIEy2rI.net
>>666 ocaml
URLリンク(ideone.com)
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:デフォルトの名無しさん
[ここ壊れてます] .net
>>666 c
URLリンク(ideone.com)
713:デフォルトの名無しさん
22/08/14 21:45:18.38 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:デフォルトの名無しさん
[ここ壊れてます] .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:デフォルトの名無しさん
22/08/14 22:30:32.35 z6QFcjeU.net
行列の掛け算を実装せよ
二次正方行列 A=((1 -2) (2 3)), B = ((-2 1)(3 -1)) について
AB, BA を求めよ
可能であれば二次正方行列以外の行列についても対応せよ
実装の細かい点については出題者は指定しないので良きに計らって結構。
<お願い>
行列の積において結合則成立の証明を教えてください
716:デフォルトの名無しさん
22/08/14 22:43:04.52 0XTzAkvO.net
>>678 c
URLリンク(ideone.com)
・(1)(2)ともに自信なし(たぶんお題の意味わかってない)
717:デフォルトの名無しさん
22/08/14 22:49:01.35 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:デフォルトの名無しさん
22/08/14 22:51:54.64 7JC7m3TJ.net
>>682
>二次正方行列以外の行列についても対応せよ
720:デフォルトの名無しさん
22/08/14 23:05:21.92 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:デフォルトの名無しさん
22/08/14 23:09:42.44 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:デフォルトの名無しさん
22/08/15 00:42:19.42 PTEGgn5Q.net
>>679
どういう頭してたらその法則性に気づくん???
723:デフォルトの名無しさん
22/08/15 01:31:39.90 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:デフォルトの名無しさん
22/08/15 01:56:11.12 RG8mAl+Q.net
(2)
出題の仕方が間違ってた
最後に唯一のbbaが現れるパターンと書くべきだった
自分の中ではこのことしか考えてなかったから
>>679さんは汲んでくれたようで、早さにも驚いたけど
725:デフォルトの名無しさん
22/08/15 09:19:59.19 jWRkxbjN.net
なるほど, 再帰的に構成すればいいのか
aから始まる時: a + x[n-1]
baから始まる時: ba + x[n-2]
bbから始まる時: bb...bba
726:デフォルトの名無しさん
22/08/15 09:43:22.06 90U51paY.net
>>686
そういう漸化式は普通に受験で良くでてくる
727:デフォルトの名無しさん
22/08/15 17:00:11.92 ioAOBwsA.net
>>680
URLリンク(ideone.com)
URLリンク(ja.wikibooks.org)'s-associativity
728:デフォルトの名無しさん
22/08/15 17:16:58.66 RVV7PTHo.net
>>691 c
URLリンク(ideone.com)
・二次元でintのみ
729:デフォルトの名無しさん
22/08/15 17:19:53.25 RVV7PTHo.net
>>680
URLリンク(ideone.com)
・二次元でintのみ
730:693
22/08/16 16:05:44.79 y+iYdbLW.net
>>680 c
URLリンク(ideone.com)
・>>693から若干の整理
・インデントも修正
731:デフォルトの名無しさん
22/08/16 19:29:50.25 6LZk+vGC.net
>>688
え?言ってる意味がわからない。どういうこと?
732:デフォルトの名無しさん
22/08/16 20:01:21.15 xodQRDI1.net
bba+gge=momo
733:デフォルトの名無しさん
[ここ壊れてます] .net
>>695
末尾以外にbbaが現れる文字列を除外するってことじゃろう
734:デフォルトの名無しさん
22/08/16 21:15:34.85 dhC56AkH.net
bbaが最後に達成されるんじゃなければ2^47計算するだけのなん�
735:フ面白みもない問題になるからそこで気付く人は気づくよね
736:デフォルトの名無しさん
22/08/16 23:04:49.04 mbmTGUKF.net
ついでに50文字で今度は最後がbbaじゃなくて
bbbのときとbabのときのそれぞれのパターン数を求めるって問題
737:デフォルトの名無しさん
22/08/17 01:28:19.97 0f27vmNE.net
>>697
なるほど。やっと意味がわかった。
738:デフォルトの名無しさん
22/08/17 14:04:15.12 UFtMHmKs.net
お題:分割されている顔文字を結合して表示してください
1つの顔文字は半角4字で構成。左右対称。2字ずつ半分に分割されてシャッフルされている
出力する顔文字の順番は自由とする
入力 < ^)(^
出力 > (^^)
入力 < ^)(-(^-)(vv)
出力 > (^^)(--)(vv)
739:デフォルトの名無しさん
22/08/17 14:59:27.47 2ZT38iyw.net
お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」をそれぞれ表示する方法を示してください
便宜的に、ナンプレのマスには左上から右へ、右下に向かい0~80までの数値を入れます。
0 1 2 3 4 5 6 7 8
...
...............80
左から1列目の9マスは
740:デフォルトの名無しさん
22/08/17 15:10:22.08 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:デフォルトの名無しさん
22/08/17 21:47:42.92 GkJOOerG.net
>>703 c
URLリンク(ideone.com)
742:デフォルトの名無しさん
22/08/17 23:34:27.13 yTY/OYLu.net
>>701
(><)
743:デフォルトの名無しさん
22/08/18 02:15:12.90 KCyiWPRI.net
>>703
perl5
URLリンク(paiza.io)
744:デフォルトの名無しさん
22/08/18 03:07:13.35 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:デフォルトの名無しさん
[ここ壊れてます] .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:デフォルトの名無しさん
[ここ壊れてます] .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:デフォルトの名無しさん
[ここ壊れてます] .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
22/08/18 23:38:15.48 YBxy/c4L.net
>>703 c
URLリンク(ideone.com)
・>>704から若干の整理
750:デフォルトの名無しさん
22/08/19 23:42:01.44 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:デフォルトの名無しさん
22/08/19 23:58:05.14 zRvvDV0W.net
なんで数を入力してるんだ?
後の情報であきらかではないか
まさかグループ名が整数でも良いと考えている?
752:デフォルトの名無しさん
22/08/20 00:02:54.24 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:デフォルトの名無しさん
22/08/20 07:49:15.49 /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:デフォルトの名無しさん
22/08/20 17:09:35.31 tvd+mgyM.net
>>712 c
URLリンク(ideone.com)
755:デフォルトの名無しさん
22/08/20 21:26:59.76 myFbjTal.net
>>712
C#
URLリンク(paiza.io)
756:デフォルトの名無しさん
22/08/20 22:24:09.90 5JSGWnVi.net
>>703ってこれじゃだめなのかな
7行で書ける
URLリンク(ideone.com)
757:96
22/08/21 02:42:00.00 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;
}->(<>);
※見易くするためインデントを全角スペースに置換してあります。
実行結果:
URLリンク(ideone.com)
758:デフォルトの名無しさん
22/08/21 06:03:07.44 V5T4kdVo.net
>>712
<group>順にって、何を元にして group の順序を決めるの?
入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?
759:デフォルトの名無しさん
22/08/21 07:03:57.35 3JIuIXQv.net
<group>毎という事だと思う
サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし
760:デフォルトの名無しさん
22/08/21 08:49:24.60 0ZMA3aWJ.net
>>713
実際にここでも数字を使っている例が出て来てるからわかると思うけど
競プロなんかではよくあるフォーマットだよ
761:デフォルトの名無しさん
22/08/21 18:07:19.66 ecIOs+Jg.net
>>666
C#
URLリンク(paiza.io)
762:デフォルトの名無しさん
22/08/21 18:28:38.88 Y2TZP89X.net
お題:Hello, World!を出力中にプログラムを強制終了せよ
Hello, World!が完全に出力されたらGAME OVERとする
763:デフォルトの名無しさん
22/08/21 18:45:13.28 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:デフォルトの名無しさん
22/08/21 18:49:48.17 ecIOs+Jg.net
>>701
C#
URLリンク(paiza.io)
765:デフォルトの名無しさん
22/08/21 18:51:27.42 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#
URLリンク(paiza.io)
767:デフォルトの名無しさん
[ここ壊れてます] .net
>>724 c
URLリンク(ideone.com)
768:デフォルトの名無しさん
[ここ壊れてます] .net
>>648
C#
URLリンク(paiza.io)
769:729
22/08/22 19:20:01.17 7CA3B9Dd.net
>>724 c
URLリンク(ideone.com)
・>>729 どう見ても正常終了です。本当にありがとうございました。
・子プロセスの強制終了を見届けてから自分自身も強制終了
770:デフォルトの名無しさん
22/08/25 15:38:14.81 bJn+zm7R.net
>>724
その強制終了って人間が Ctrl + C を押すなどしてやるという意味?
間に合わずに全部出力し切った場合は GAME OVER 出すということ?
771:デフォルトの名無しさん
22/08/25 15:52:23.73 BfuXla1W.net
>>732
強制終了→exit(0)などでプログラム的に終了させる
GAME OVER→お題の達成失敗
772:デフォルトの名無しさん
22/08/25 16:09:53.36 6j74uL6b.net
54.144.0.0/12といったどこかで見たことあるような形式の文字列を入力すると
^(?!(54.144.|54.145.|54.146.|54.147.|54.148.|54.149.|54.150.|54.151.|54.152.|54.153.|54.154.|54.155.|54.156.|54.157.|54.158.|54.159.))
といったいい感じの文字列が標準出力に出力されるやつ、誰か作れますか?
例の他にも54.208.0.0/13 54.216.0.0/14 54.192.0.0/12 54.160.0.0/11 54.220.0.0/15といった似た感じの文字列が入力され
やはりいい感じに処理された別の文字列が出力されます
できればライセンスはゼロ条項BSDライセンスでお願いします
773:デフォルトの名無しさん
[ここ壊れてます] .net
ま、まあ、作れなくはないかな…
774:デフォルトの名無しさん
22/08/25 18:48:07.98 0xws5w3m.net
フワっとした頭の中にしか定義されてない案件なんて誰もこなせないぞ
本人以外は
775:デフォルトの名無しさん
22/08/25 20:40:48.98 0z7AphVM.net
>>734
Java
URLリンク(paiza.io)
776:デフォルトの名無しさん
22/08/25 21:10:16.35 /BGaqBqg.net
>>734 JavaScript
function _734(ip_range) {
const result = [];
const as = ip_range.split(/\D/).map(_ => Number(_));
const m = as.at(-1);
const q = Math.floor(m / 8
777:); const r = m % 8; const e = 8 - r; const l = as[q].toString(2).padStart(8, '0').slice(0, r); for (let i = 0, sup = 2 ** e; i < sup; i++) { as.splice(q, 1, Number.parseInt(l + i.toString(2).padStart(e, '0'), 2)); result.push(as.slice(0, q + 1)); } return '^(?!(' + result.map(_ => `${_.join('\\.')}${q < 3 ? '\\.' : ''}`).join('|') + '))'; }
778:デフォルトの名無しさん
22/08/25 22:00:47.00 JPPVgQ9Y.net
beer licenseでよければ書くが
779:デフォルトの名無しさん
22/08/26 04:09:37.08 NIKxWs5c.net
割とすぐに出来るもんなんですね
どちらも実用上問題なさそうな、いい感じの実行結果です
>738は最新の実行環境に心当たりがなかったので確認に手間どりましたが
Chromeのコンソールから実行して確認できました
(cscriptで実行しようとしたらat()に対応してなかったので)
いやー勉強になります、ありがとう
780:デフォルトの名無しさん
22/08/26 04:49:22.52 0rX9u4fb.net
>>740
スレタイも読めないアホは消えろ
781:96
22/08/26 05:19:52.33 GgZblxs6.net
>>740
人をタダで利用してない?
782:デフォルトの名無しさん
22/08/26 11:51:47.61 d54FvNjc.net
>>733
マルチスレッドかマルチタスクで "Hello, world!" を出力する処理と、ランダムなタイミングでそれを強制終了させる処理が動くということで良いのか?
そして出力中に停止できなかったら "GAME OVER" が最後に出ると。
783:デフォルトの名無しさん
22/08/26 14:32:15.45 71YXfdUw.net
>>743
その実装でもいいよ
題意はいかにHello, World!出力中にプログラムを終了させるかだから
sleep挟んでもいい
784:デフォルトの名無しさん
22/08/26 18:44:07.03 NQ4mbOjq.net
>>733
#!/usr/bin/env sh
cat <<"EOL" | perl -ne '/(Hello, World)(?:[!])/ ? die " $1 got failed." : print'
> foo
> bar
> baz
> Hello, World
> Hello, World
> Hello, World!
> you can't see me, right?
> EOL
foo
bar
baz
Hello, World
Hello, World
Hello, World got failed. at -e line 1, <> line 6.
785:デフォルトの名無しさん
22/08/26 21:28:18.28 NIKxWs5c.net
はて?プログラミングのお題を投げて、競技的な興味をもって答えたくなった人が答え
その回答に興味があれば参照して「普段は扱ってないこの言語だとそういうやりかたなのか」
「自分とは違うスマートなやり方があったのか」と思ったりするスレ、という理解でしたが
もしかして投げたときに”お題”という文字が抜けてたのが問題ありましたか?
概ね正解とするに足る実行結果を、実用上問題なさそうと表現したことが拙かったですか?
もしそうなら申し訳ない、次からは気をつけます
786:デフォルトの名無しさん
22/08/26 21:31:39.94 NIKxWs5c.net
ついでというかなんというか>734の自分のお題に対する自己回答です(色々と手抜きしてありますが)
#!/usr/bin/ksh
function proc {
typeset A B C D E F N M L I
IFS='.','/' read A B C D E <<XYZ
$1
XYZ
let N="(${E}+8)/8" let M="8-(${E}%8)"
if [ $N -eq 5 ]; then echo -n "${A}.${B}.${C}.${D}"; return; fi
set -A BASE dummy "" "${A}." "${A}.${B}." "${A}.${B}.${C}."
set dummy $A $B $C $D; shift $N; F=$1; let L="$F-1+(1<<$M)"
for I in `seq $F $L`; do echo -n "|${BASE[$N]}${I}."; done; }
if [ $# -eq 0 ]; then echo "need CIDR/s"; exit 65; fi
set -A CIDR dummy $@;
echo -n "^(?!dummy"; for I in `seq 1 $#`; do proc ${CIDR[$I]}; done; echo ")"
exit 0
787:96
22/08/29 02:30:43.54 QAZMtAov.net
>>734 Perl5
for (<>) {
print;
@a = /(\d+)/g;
$w = pop @a;
$o = ($w - 1) >> 3;
$m = $w - $o * 8;
$n = 2**(8 - $m);
$l = join '.', @a[0..$o-1];
$l .= '.' if '' ne $l;
$h = $a[$o] & (255 << (8 - $m));
$r = $o < 3 ? '.' : '';
@b = map{$l . ($h + $_) . $r} 0..($n - 1);
print '^(?!(' . join('|', @b) . "))\n";
print "\n";
}
※見易くするためインデントを全角スペースに置換しています。
実行例:
URLリンク(ideone.com)
788:96
22/08/29 02:55:16.14 QAZMtAov.net
>>748
128.0.0.0/1 の結果が変
バグ入りだ、ゴメンチャイ
789:96
22/08/29 03:01:45.22 QAZMtAov.net
あれ?いいのかな?
仕様を推測して作ったけどちょっと混乱したかも…
寝るわ
790:デフォルトの名無しさん
22/09/09 22:29:09.28 zwPgoVui.net
お題
長方形の1辺の長さのリストと正方形の面積のリストが入力されます
それぞれの正方形の面積について
長方形の1辺の長さのリストから2つを選んで掛け合わせ長方形の面積を計算します
長方形の面積が正方形の面積以上でかつ最小の面積となる組み合わせを探して出力してください
見つからなかった場合はerrorを出力してください
(例)
// 1辺の長さのリスト
[17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
// 正方形の面積のリスト
[390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
// 出力
390:error
240:16,17
37:3,13
396:error
198:11,18
99:6,17
242:16,17
53:3,18
329:error
202:13,16
791:デフォルトの名無しさん
22/09/09 23:02:00.41 Un8DgV3E.net
>>751
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
c = a.group_by(&:itself).values.map{_1.size > 2 ? _1[0, 2] : _1}.flatten.permutation(2).map{[_1 * _2, [_1, _2].sort]}.uniq.sort.to_h
b.each{|s| puts '%d: %s' % [s, c.find{_1[0] >= s}&.[](1)&.join(?,) || :error]}
# =>
390: error
240: 16,17
37: 3,13
396: error
198: 11,18
99: 6,17
242: 16,17
53: 3,18
329: error
202: 13,16
792:デフォルトの名無しさん
22/09/09 23:46:43.88 3788iROh.net
>>751 ruby
URLリンク(ideone.com)
def f(as, bs)
c = as.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort_by(&:first).each_cons(2)
bs.map do |b|
d = c.find {|e, f| e[0] < b && b <= f[0]}
"#{b}:#{d ? d[1][1..2].join(',') : 'error'}"
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)
793:753
[ここ壊れてます] .net
>>751
URLリンク(ideone.com)
・>>753を若干の整理
・>>752さんのを見て&.を勉強
def f(a, b)
c = a.combination(2).map(&:sort).to_a.uniq.map {|x, y| [x * y, x, y]}.sort
b.map {|b| "#{b}:#{c.find {|e| b <= e[0]}&.[](1..2)&.join(',') || 'error'}"}
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1]
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202]
puts f(a, b)
794:デフォルトの名無しさん
22/09/10 00:34:04.51 sDbT/M8A.net
みんな解くのはえーなぁ
795:96
22/09/10 02:29:07.85 7pWsuKpo.net
>>751 Perl5
$ls = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
$ss = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
sub f {2 < @_ ? (f(@_[1..$#_]), map{[$_[0] * $_, $_[0], $_]} @_[1..$#_]) : ()}
@rs = sort{$$a[0] <=> $$b[0]} f @$ls;
for $aa (@$ss) {
@b = grep{$aa <= $$_[0]} @rs;
print @b ? "$aa:$b[0][1],$b[0][2]\n" : "$aa:error\n";
}
実行結果
$ perl 20_751.pl
390:error
240:17,16
37:3,13
396:error
198:18,11
99:17,6
242:17,16
53:3,18
329:error
202:13,16
796:デフォルトの名無しさん
22/09/10 11:29:46.54 q8enYz1J.net
>>751 octave
URLリンク(ideone.com)
function c = f(a, b)
u = unique(sort(nchoosek(a, 2), 2), 'rows');
p = prod(u, 2);
c = cell(size(b));
for i = 1:numel(b)
d = min(p(b(i) <= p));
if isempty(d)
c{i} = sprintf('%d:error', b(i));
else
s = strjoin(arrayfun(@(n) {num2str(n)}, u(p == d, :)), ',');
c{i} = sprintf('%d:%s', b(i), s);
end
end
end
a = [17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1];
b = [390, 240, 37, 396, 198, 99, 242, 53, 329, 202];
cellfun(@disp, f(a, b))
797:デフォルトの名無しさん
22/09/10 13:32:08.25 q8enYz1J.net
>>751 c
URLリンク(ideone.com)
#include <stdio.h>
void f(int *a, int *b, int na, int nb) {
int i, j, k, found, min, x, y;
for (i = 0; i < nb; i++) {
found = 0;
for (j = 0; j < na; j++)
for (k = 0; k < na; k++)
if (j != k && b[i] <= a[j] * a[k] && (!found || a[j] * a[k] < min))
found = 1, min = a[j] * a[k], x = a[j], y = a[k];
if (!found) printf("%d:error\n", b[i]);
else printf("%d:%d,%d\n", b[i], x, y);
}
}
int main() {
int a[] = {17, 3, 3, 1, 6, 13, 11, 17, 2, 5, 7, 18, 16, 5, 8, 6, 5, 1, 11, 1};
int b[] = {390, 240, 37, 396, 198, 99, 242, 53, 329, 202};
f(a, b, sizeof a / sizeof *a, sizeof b / sizeof *b);
return 0;
}
798:デフォルトの名無しさん
22/09/10 19:18:11.93 PLqR4TKQ.net
>>751
Kotlin
可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな?
URLリンク(paiza.io)
240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。
(リストの順番で覚えているのでこうなる)。
799:デフォルトの名無しさん
22/09/10 22:25:19.23 7X0yi8nW.net
お題
>>751の問題について
長方形の1辺の長さをソートして縦方向と横方向に並べて交差するところに長方形の面積を入れて表にします
URLリンク(downloadx.getuploader.com)
この図は50を探すところを描いています
青色の斜めの値の中から正方形の面積以上かつ最小の値を見つけその場所を出発点とします
長方形の面積が正方形の面積よりも大きい場合は表を上にたどり、長方形の面積が正方形の面積よりも小さい場合は表を右にたどります
右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
しゃくとり虫が動いてるように見えるのでこれをしゃくとり法と呼ぶことにします
>>751の問題をしゃくとり法で解いてください
800:デフォルトの名無しさん
22/09/10 22:51:25.27 7X0yi8nW.net
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
これは間違いかも、これだと55を見つけられない
各自で考えていただければありがたく
801:デフォルトの名無しさん
22/09/10 22:52:41.16 7X0yi8nW.net
いや、いいのか!? ダメだ混乱してきたもうパニックですわ
802:デフォルトの名無しさん
22/09/10 22:57:53.10 sDbT/M8A.net
おちつけ
803:デフォルトの名無しさん
22/09/10 23:12:42.56 7X0yi8nW.net
>>760
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます
これは間違いでした、上方向から右方向に変わる直前の値が回答候補ですね
50を探す場合、56,55,51が候補です
URLリンク(downloadx.getuploader.com)
804:素数を数えるんだ
22/09/10 23:25:22.59 22kPJ9rf.net
2, 3, 5, 7, 11, 13, 17, 19......
805:デフォルトの名無しさん
22/09/11 01:04:25.98 /LH0BDzE.net
お題
2~19までの素数を生成し掛け算の表を出力してください
806:デフォルトの名無しさん
22/09/12 01:50:52.46 xawmAmgS.net
>>751
Java
URLリンク(paiza.io)
807:デフォルトの名無しさん
22/09/12 10:44:10.79 VxR6iqOp.net
>>764
Kotlin
URLリンク(paiza.io)
出力をHTMLにするとそれっぽく表示できた。
50は正方形の面積リストの最初に入れたが例の画像と同じような見た目になった。
808:デフォルトの名無しさん
22/09/12 18:32:56.65 eGlSQ2pk.net
>>751
URLリンク(ideone.com)
>>764
URLリンク(ideone.com)
809:デフォルトの名無しさん
22/09/13 22:22:38.95 B0VHMNYc.net
>>766
C#
URLリンク(paiza.io)
810:デフォルトの名無しさん
22/09/13 22:25:19.07 V4Kz63G0.net
お題:OpenGLで四角形を3つ描画せよ
一番下の四角形が1番大きく赤色
その上にのってる四角形は2番目に大きく緑色
さらにその上にのってる四角形は3番目に大きく青色
811:デフォルトの名無しさん
22/09/14 12:47:57.36 LkrioAg+.net
お題
フェアフィールドの公式は、西暦1年1月1日から指定した日付までの日数を求めるもので次の式です
日数 = (365 * Y) + (Y / 4) - (Y / 100) + (Y / 400) + (306 * (M + 1) / 10) + D - 428
UNIX時間は、西暦1970年1月1日午前0時0分0秒からの経過秒数です
フェアフィールドの公式を用いてUNIX時間から年月日を求めて出力してください
(例)
1000000000 → 2001-09-09T01:46:40
1234567890 → 2009-02-13T23:31:30
812:デフォルトの名無しさん
22/09/14 15:20:59.73 s+3MjQLV.net
>>772 bat
@echo off &setlocal
call :Conv_uTime2iso 1000000000
call :Conv_uTime2iso 1234567890
pause&exit /b
:Conv_uTime2iso
set /a "GD=(UT=%~1)/86400+719468, h=100+(R=UT%%86400)/3600, n=100+(R%%=3600)/60, s=100+R%%60, y=400*(GD/146097), y+=100*(i=(R=GD%%146097)/36524), y+=(R%%=36524)/1461*4, y+=j=(R%%=1461)/365, R=R%%365+365*(L=(i|j)/4), f=(k=(R*5+2)/153)/10, d=R+101-(306*k+4)/10, m=k+103-f*12, y+=f-L"
echo %y%-%m:~-2%-%d:~-2%T%h:~-2%:%n:~-2%:%s:~-2%
813:デフォルトの名無しさん
22/09/15 05:31:46.38 LgD4XKTt.net
//>>772 JavaScript
function _772(epoch) {
/**/epoch = BigInt(epoch);if (epoch < 0n) {throw new RangeError('');}
/**/const lastDateOfMonth = (_ => Object.fromEntries(Array.from([, , , ..._.slice(2), _[0], _[1]].entries()).filter(([, v]) => v)))(Array.from(new Array(12).keys()).map(m => BigInt(new Date(2_022, m + 1, 0, 0, 0 - new Date().getTimezoneOffset()).getDate())));
/**/const FAIRFIELD = fairfield(1_969n, 12n, 31n) + epoch / 86_400n + 1n;
/**/let [Y, M, D] = [1_969n, 13n, 1n];
/**/for (; D <= 58n; D++) {if (FAIRFIELD == fairfield(Y, M, D)) {return {Y: 1_970n, M: 1n + D / 31n, D: D % 31n};}}
/**/for (Y = 1_970n; Y <= Number.MAX_SAFE_INTEGER; Y++) {
/**//**/for (M = 3n, D = 1n; D <= 366n; D++) {
/**//**//**/if (FAIRFIELD == fairfield(Y, M, D)) {
/**//**//**//**/if (D == 366n) {
/**//**//**//**//**/if (isLeapFullYear(Y + 1n)) {
/**//**//**//**//**//**/
814:return {Y: Y + 1n, M: 2n, D: 29n}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: 3n, D: 1n}; /**//**//**//**//**/} /**//**//**//**/} else { /**//**//**//**//**/for (; lastDateOfMonth[M] <= D; D -= lastDateOfMonth[M++]); /**//**//**//**//**/if (M <=12n) { /**//**//**//**//**//**/return {Y, M, D}; /**//**//**//**//**/} else { /**//**//**//**//**//**/return {Y: Y + 1n, M: M % 12n, D}; /**/}}}}} /**/function isLeapFullYear(Y) {return Y % 4n == 0n && Y % 100n != 0n || Y % 400n == 0;} /**/function fairfield(Y, M, D) {return Y * 365n + Y / 4n - Y / 100n + Y / 400n + 306n * (M + 1n) / 10n + D - 428n;} }
815:デフォルトの名無しさん
22/09/15 22:07:10.52 AaudQZzp.net
うるう秒のテーブルがないと求められなくない?
816:デフォルトの名無しさん
22/09/16 00:34:31.77 ETiYX3D6.net
400年で146097日増えるみたいだから適当にバイアス付けて146097で割る予感
817:デフォルトの名無しさん
22/09/16 00:35:51.49 ETiYX3D6.net
違う
適当にバイアス付けて÷365.2425だ
818:デフォルトの名無しさん
22/09/16 01:05:26.42 /mniU0r8.net
フェアフィールドの公式てwikipediaに書かれている出自不明な公式でも何でも無いでっち上げの記事でしょ
式の解説文がこれまた頭悪くて、なのに誰も修正しないという
819:デフォルトの名無しさん
22/09/16 01:13:35.77 mMDmJ4/Z.net
グレゴリオ歴のとこに解説載ってるよ
URLリンク(ja.m.wikipedia.org)
820:デフォルトの名無しさん
22/09/16 21:18:24.66 k/2PI65L.net
>>772
Java
URLリンク(paiza.io)
821:デフォルトの名無しさん
22/09/17 17:48:30.91 fw6a0lZo.net
お題
2*2の整数行列がいくつか与えられる。
これらを適当な順番で掛け合わせる(行列積)ことで零行列を作ることが可能かどうか判定せよ。
ただし、同じ行列を2回以上使用してもよい。
例
[[1, 0], [0, 0]], [[0, -1], [1, 0]] =>可能(行列1*行列2*行列1==0)
[[1, 2], [3, 4]], [[0, -3], [2, 4]] =>不可能(正則行列だから)
822:デフォルトの名無しさん
22/09/17 18:42:03.76 ZMguHADz.net
>>781
零因子の発掘ですか、濃ゆいお題ですね…
823:デフォルトの名無しさん
22/09/18 11:34:42.07 qZaavGGf.net
お題:循環参照を開放せよ。
java
URLリンク(ideone.com)
・ガベコレの対象になったのを確認まででヨシとす
c++
URLリンク(ideone.com)
824:デフォルトの名無しさん
22/09/18 12:52:34.73 BMeW7wRv.net
>>783
Java
URLリンク(paiza.io)
825:デフォルトの名無しさん
22/09/18 16:37:27.93 BMeW7wRv.net
>>783
Python
URLリンク(paiza.io)
826:デフォルトの名無しさん
22/09/19 02:47:41.37 /08McGz8.net
>>783
Kotlin
URLリンク(paiza.io)
Java VM 上で動くから Java と同じで参照している変数を null にして System.gc() するだけ。
827:デフォルトの名無しさん
22/09/24 01:13:05.90 uYRJl5GL.net
>>772
亀レスHaskell
URLリンク(ideone.com)
色々考えて結局テーブル作って処理という最後の手段
わざわざ公開するほどのもんでもないけど一区切りつけるため
暦の勉強になった
なんで大の月と小の月の配置はこんなみっともないことになってるんだろ?
歴史家が調べでよくわからんみたいだけど
828:デフォルトの名無しさん
22/09/24 04:40:38.82 6vPOYH6k.net
>>772
だめ。その式に当てはめると必ずずれる。
829:デフォルトの名無しさん
22/09/24 07:42:29.88 aunrhsr3.net
うるう秒を考慮しないとずれる
830:デフォルトの名無しさん
22/09/24 09:42:29.34 v3rIJe0P.net
>>788
問題には書かれていないけれどその式は条件によって前処理が必要
・1-2月は前年として扱う。 1年を3-14月として計算
m=1 or 2 の時 y=y-1, m=m+12
>>789
UNIXTIMEにうるう秒なんて無い
831:デフォルトの名無しさん
22/09/24 11:33:11.17 aunrhsr3.net
>>790
日付に変換する過程でうるう秒考慮しないとずれるでしょう
832:デフォルトの名無しさん
22/09/24 12:13:55.28 v3rIJe0P.net
>>791
UNIXTIMEは「epocからの実時間の秒数」では無い
実時間から、うるう秒は加減され含まれず、1日は86400秒換算
だからそれを日時に変換しても「うるう秒の時刻を表せない」だけでズレなど発生しない
833:デフォルトの名無しさん
22/09/24 12:34:24.41 aunrhsr3.net
>>792
レスありがとう。不勉強だったわ。
834:デフォルトの名無しさん
22/09/24 16:57:05.53 6vPOYH6k.net
>>790
出題ミスか。
これまでに作られたプログラムはその辺のことを考慮したプログラムになっていたのかな?
だったら分かってたんだからその辺の事を書いておいて欲しかったな。
835:デフォルトの名無しさん
22/09/24 22:38:52.94 Fvr5cAu6.net
wikiにはそこまで詳しい解説はなかったけど式みたらわかったけどな
⌊(m+1)/30.6⌋
という項
⌊x/30.6⌋という関数は0,1,2,3,4となる値が
31,30,31,30,31,31,(繰り返し)‥①
と変化してコレを周期153で繰り返す
月の長さは3月から見ると
31,30,31,30,31,31,30,31,30,31,31,28(29)
となってるから①を一月分左に平行移動すれば良いとわかる
からの⌊(m+1)/30.6⌋
836:デフォルトの名無しさん
22/09/24 22:45:27.51 Fvr5cAu6.net
>>795
間違えた
⌊m×30.6⌋という関数は0,1,2,3,4,‥の時の値が
31,31,30,31,30
の繰り返し
件の公式のmの項はコレを一月分ずらしてる
837:デフォルトの名無しさん
22/09/28 02:17:31.98 UDkh+W3M.net
お題:4回呼び出したらその内の1回が失敗する関数を書け
失敗した場合は「failed」と表示、成功した場合は「ok」と表示せよ
838:デフォルトの名無しさん
22/09/28 09:47:46.29 +QlM3L0o.net
seed変数はパラメータ渡しで良いですか
839:デフォルトの名無しさん
22/09/28 19:05:59.31 WptV1D3q.net
>>797 c
URLリンク(ideone.com)
void f() {
static int i = 0, j, k = 4;
if (i == 0) j = rand() % k;
puts(i == j ? "failed" : "ok");
i = (i + 1) % k;
}
840:デフォルトの名無しさん
22/09/28 22:51:23.95 7XofIB3A.net
>>797 Ruby
def f
$f_cnt||=0
puts$f_cnt==3||(rand(4)==~-$f_cnt+=1)?:failed: :ok
end
841:デフォルトの名無しさん
22/09/30 04:16:06.13 F2zw9Wj+.net
>>797
Kotlin
URLリンク(paiza.io)
Int型1つ分のワークエリアを呼ぶ側から与えてそこでカウントして必ず4回の内1回が失敗になる。
乱数を使うと4回の内1回失敗ではなくなる可能性があるので使っていない。
引数としてInt型の参照を渡しても中身を変えられないのでIntArray(Java なら int[] に相当)で1要素作ってIntArrayの参照を渡している。
クラスでやっても良かったが、わざわざクラス作るほどのことでもないと思ったのでこの方式にした。
842:デフォルトの名無しさん
22/10/01 01:23:09.73 I5nFps2z.net
>>797
Java
URLリンク(paiza.io)
843:デフォルトの名無しさん
[ここ壊れてます] .net
お題: あみだ URLリンク(imgur.com)
画像のようなマス目の上に直線を引いたあみだを次のように表現することにします。
N: 縦線の本数(列数)
M: 橋が架けられている行数
B: M行N-1列の二次元配列で、橋が架けられていたら1、そうでない場合は0が格納されています。
あらかじめ、あみだの入力には左から0~N-1までの整数が割り振られていることにします。また、同じ行に橋が二つ連続で隣り合うことは禁止されています。
一応の制約: 2 <= N <= 100, 1 <= M <= 100
あみだに橋が1つも存在しない場合、M=1となり、Bは1行N-1列の大きさで、すべての要素が0の2次元配列になることにします。
お題1: N, M, Bが与えられるので、あみだの出力を求めてください。(入出力のフォーマットは各自で適宜変更してもいいです。)
入力例(画像のもの):
4
4
1 0 1
0 1 0
1 0 0
0 1 0
出力例:
3 0 1 2
お題2: Nとあみだの出力が与えられるので、Mをできるだけ小さくしたあみだを求め、Mと Bの一例 を表示してください。
入力例:
5
2 4 0 1 3
出力例:
3
0 1 0 1
1 0 1 0
0 1 0 0
あみだ関連のお題は過去スレで何回か見かけたがろくに相手にされていなかったのであげてみる。
844:デフォルトの名無しさん
22/10/10 00:03:47.74 Em47unOv.net
reduced expressionのまとめられる積を出来るだけまとめたものが必ず最短になるなら簡単なんだけどな
845:デフォルトの名無しさん
22/10/10 12:25:25.51 CId/Nblu.net
Gapとか使えばいいんじゃね
846:デフォルトの名無しさん
22/10/10 15:00:17.69 AiOpkeUk.net
reduced expression の長さ自体の計算は簡単だけどこの問題は"reduced expressionの長さを求めよ"ではないからそこまで数学的に単純じゃないよ
847:デフォルトの名無しさん
22/10/10 20:53:48.73 uiS3Rjx/.net
>>803
お題1
URLリンク(paiza.io)
お題2
URLリンク(paiza.io)
お題1とお題2でそれぞれ入力と出力をあわせるようにした
Mをできるだけ小さくって難しいな
これでいいのかわからん
848:デフォルトの名無しさん
22/10/10 21:09:44.88 TC3V9vEZ.net
アルゴリズムが存在するのは明らかだしひとつ答え見つけるアルゴリズムも簡単
でもreduced expression見つけるアルゴリズムと同程度のアルゴリズムとなると途端に難しくなる
reduced expressionの場合には置換σのreduced expressionを見つけるには
(1) σ = idであるか否か判定する、σ=idなら空列を返して終了
(2) そうでない場合σ(i) > σ(i+1)であるiを見つける、見つけたiに対してτ=σ(i i+1)とおいてτほreduced expression sを求める
(3)
849:デフォルトの名無しさん
22/10/10 21:16:09.04 TC3V9vEZ.net
(3) s ( i i+1 )を返して終了
でもとまる
ここでミソはreduced expressionの1番右は( i i+1 )と決め打ち出来ること、コレがあるから多項式時間で終わる
しかしアミダの場合1番右の初手をそんなに簡単に決定出来るかが分からん
初手の可能性は転置全部の可換な集合のうち極大であるもの全体のいずれかに最短が入る事は簡単に示せるけど、そのような極大な可換集合をどれとっても必ずうまくいくことの証明がむずかしい
多分出来るんだとは思うけど正直数学板で話題にするような話でプロ板で出すような問題じゃない気がする
850:441
22/10/11 10:43:04.37 Q+yx5xdI.net
>>803
最近やっとpythonを学び始めたレベルだから合ってるかわからん
コメントとかもちゃんと書いたほうがいいのだろう
851:か 暇な人添削してくれると嬉しい お題1 https://ideone.com/uQ0lEu お題2 https://ideone.com/IvtRj2
852:デフォルトの名無しさん
22/10/11 12:04:38.77 xv8Y5zzF.net
しゃぶれよ
853:96
22/10/13 07:01:45.31 JNehkz2R.net
>>773
自分でやれ
854:デフォルトの名無しさん
22/10/22 02:49:22.02 ql0xnxKt.net
やってるやん
855:デフォルトの名無しさん
22/10/24 10:24:26.56 sCRx2Xsd.net
お題
プリンタAは1分間に1ページ印刷できます
プリンタBは3分間に1ページ印刷できます
プリンタCは5分間に1ページ印刷できます
プリンタを3台同時に動かして100ページを印刷します
100ページを印刷し終わるのに何分掛かるか求めてください
856:デフォルトの名無しさん
22/10/24 12:38:35.85 PxuF7JuF.net
>>814
perl5
URLリンク(paiza.io)
857:デフォルトの名無しさん
22/10/24 13:32:21.38 LLDppSf/.net
>>815
バグってるぞ
65分だと99枚しか印刷されない
858:デフォルトの名無しさん
22/10/24 14:17:54.79 l9s5dDsa.net
>>814 cmd
set /a "p=100, n=15*p/23+!!(15*p%23)"
859:デフォルトの名無しさん
22/10/24 15:31:07.39 FSEywfH4.net
haskell
pages n = sum $ map ( div n ) [ 1,3,5 ]
main = print $ head [ n | n <- [1..], pages n >= 100 ]
860:デフォルトの名無しさん
22/10/24 20:20:16.51 112hix5y.net
>>814
aow = 100
power = (1 + 1r/3 + 1r/5)
printf(aow / power) // => 65.21739130434783
861:デフォルトの名無しさん
22/10/24 22:40:57.89 SGYFZ2pJ.net
>>814 octave
URLリンク(ideone.com)
f = @(n) ceil(n * 15 / 23);
862:デフォルトの名無しさん
22/10/25 01:46:09.54 m3snEfri.net
>>814
Kotlin
何も考えずただカウントして求めるように書いた。
URLリンク(paiza.io)
863:デフォルトの名無しさん
22/10/25 06:54:39.16 LZqPXT/2.net
>>817,820
逆算はページ数によってはダメ
例えば3ページの時、3分4ページが正解だけど
(B=2/3)+(C=2/5) で1繰り上がって2分が出て来る
864:デフォルトの名無しさん
22/10/25 07:50:54.84 V4E25MPr.net
A, B, Cでそれぞれ45/23, 15/23, 9/23ページ印刷すれば45/23分で3ページ印刷し終わるよ
865:デフォルトの名無しさん
22/10/25 08:18:47.97 5cB2OctB.net
100ページだからセーフ
866:デフォルトの名無しさん
22/10/25 13:35:12.41 xp4U3IJL.net
>>814
JavaScript
URLリンク(paiza.io)
867:デフォルトの名無しさん
22/10/25 20:38:44.30 Er29dtqL.net
甘えんな
印刷周期を一定と仮定した上で解として取りうる離散値のどれになるかを小数単位で求めるプログラムも書こうよ
868:デフォルトの名無しさん
22/10/25 21:08:38.15 idE58GAF.net
すまん、1分に3枚じゃなくて3分に1枚かorz
869:デフォルトの名無しさん
22/10/25 22:03:54.71 b0dw4lqu.net
>>814
Java
URLリンク(paiza.io)
870:デフォルトの名無しさん
22/10/25 22:28:13.40 F6XUw+z/.net
じゃあ1分に1枚、3枚、5枚のプリンターでの印刷というお題も出すか。
871:デフォルトの名無しさん
22/10/25 22:38:49.46 d0t/LHiA.net
>>814 octave
URLリンク(ideone.com)
function m = f(n, m)
if nargin == 1
m = f(n, 0);
elseif sum(idivide(m, [1 3 5])) < n
m = f(n, m + 1);
end
end
>>814 ocaml
URLリンク(ideone.com)
let f n =
let rec aux m =
if n <= (m + m / 3 + m / 5) then m else aux (m + 1)
in aux 0
872:デフォルトの名無しさん
22/10/25 23:47:11.01 b0dw4lqu.net
>>829
Java
public static void main(String[] args)
{
var pages = 100;
var s = IntStream.of(1, 3, 5).sum();
System.out.println((pages + s - 1) / s);
}
873:デフォルトの名無しさん
22/10/26 13:26:51.44 FciA0hc1.net
お題
オークA「ぐっふっふ…… 俺は媚薬を盛ってないぜ……」
オークB「ぐふっ…… 媚薬を盛ったやつはAかCのどちらかだぜ…」
オークC「オークBかDは嘘をついているぜ…ぐっふっふっふっ……」
オークD「ぐふふ…媚薬を盛った奴はB,Eの中にはいないぜ……ぐひっ…」
オークE「げひひっ……媚薬を盛ったやつは本当の事を言っているぞ…」
オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
女騎士「くうぅ…誰が嘘をついて誰が私に媚薬を盛ったんだ……!」
オーク達「ぐっふっふ……」
論理演算を用いて答えを求めてください
874:デフォルトの名無しさん
22/10/26 13:33:52.83 FciA0hc1.net
オークCとオークEがめんどくさいな
875:デフォルトの名無しさん
22/10/26 15:30:35.63 DM8ZU7Du.net
全てが媚薬を盛って全員が嘘をついている
これで全員の発言と矛盾がないと思う
876:デフォルトの名無しさん
22/10/26 16:28:02.83 xzd5i3vP.net
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
は正しいと仮定しないとなんでもありありになっちゃうだろ
877:デフォルトの名無しさん
22/10/26 18:06:43.51 VWCwwszG.net
さすがに
> オーク達「ちなみに、お前に媚薬を盛ったのはこの中の一匹で、俺たちの中で一匹が嘘をついているぞ……」
コレウソついてるのは一匹“だけ”つて意味だよね?
“少なくとも一匹はウソついてる”
じゃないよね?
878:デフォルトの名無しさん
22/10/26 18:20:40.38 S3XzLK/s.net
このタイプの論理問題ってよく見かけるな
初出ってどこなんだろうな
879:デフォルトの名無しさん
22/10/26 19:23:29.30 gD5qQ1ZG.net
>>836
> “少なくとも一匹はウソついてる”
だと、全員嘘つきでもいいからなんでもありになっちゃう気がする
880:デフォルトの名無しさん
22/10/26 20:30:42.10 dmTYCGjA.net
>>832
Haskell
まだ自信なし
URLリンク(ideone.com)
881:デフォルトの名無しさん
22/10/26 21:23:18.21 OrdcPqRc.net
オーク達「」が真であることは、
この世界の神である出題者が保証してるわけだな?
882:デフォルトの名無しさん
22/10/26 21:38:57.12 Bjop1AC4.net
出題者が嘘をついていて、オークがそのような発言をしていない可能性もある
883:デフォルトの名無しさん
22/10/27 01:22:34.18 s7i1htqL.net
>>832
Haskell
一ヶ所間違ってたので訂正
あとウソつきはちょうど1人という条件つけたら解一個になった
URLリンク(ideone.com)
884:デフォルトの名無しさん
22/10/27 09:19:06.82 Uf+5HE/G.net
Haskell
ウソつき1人としてループを5×5に
5人しかいないので大して変わらないけど
URLリンク(ideone.com)
885:デフォルトの名無しさん
22/10/27 14:26:07.23 QRorZadJ.net
>>832
Java
URLリンク(paiza.io)
886:デフォルトの名無しさん
22/10/29 19:11:19.58 O3TXZpYa.net
お題
Kの倍数の桁の和
自然数nに対してf(n)をnの10進表示の各桁の和とします
(例 f(1024) = 1+2+4 = 7)
自然数kに対してg(k)を
g(k) = { f(n) | nはkの倍数である自然数 }
とします
入力kに対してg(k)を出力するコードを書いて下さい
887:デフォルトの名無しさん
22/10/29 19:33:57.73 uuZ1gbyy.net
>>845
g(k)って必ずしも有限集合にならなくない?
888:デフォルトの名無しさん
22/10/29 19:39:30.16 O3TXZpYa.net
>>946
orz
訂正
g(k) = min{ f(n) | nはkの倍数である自然数 }
889:デフォルトの名無しさん
22/10/30 00:28:15.63 BQOGiCuF.net
お題
プレーヤーの前に閉じた3つのドアがあります
1つのドアの後ろには景品の新車があります
2つのドアの後ろにははずれを意味するヤギがいます
プレーヤーは新車のドアを当てると新車がもらえます
プレーヤーが1つのドアを選択したあとに司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せます
ここでプレーヤーは「最初に選んだドアを残っている開けられていないドアに変更してもよい」と言われます
ここでプレーヤーはドアを変更すべきだろうか?
乱数を使ったシミュレーションで答えを求めてください
890:デフォルトの名無しさん
22/10/30 03:55:05.76 KHak5nKt.net
>>848
モンティ・ホール問題だな。
Kotlin
URLリンク(paiza.io)
891:デフォルトの名無しさん
22/10/30 08:09:55.23 oF72FRjI.net
ドアを変更するかどうかのところはランダムにする必要無くない?
二択なので一方に決めていれば残りが逆側の確率
892:デフォルトの名無しさん
22/10/30 10:05:48.56 Rpnmj8SE.net
まぁ
交換戦略「必ず交換する」
非交換戦略「決して交換しない」
確率交換戦略「ある分布に従って確率的に交換するかしないか決める」
で答えが変わる事を確認せよだからな
ある意味最初2つの戦略も最後の戦略の特別な場合
893:デフォルトの名無しさん
22/10/30 11:47:05.86 0KuBg4yb.net
お題N x Nのルービックキューブのパターン数を求めよ
894:デフォルトの名無しさん
22/10/30 18:39:10.46 KHak5nKt.net
>>850
なるほど。
895:デフォルトの名無しさん
22/10/30 18:54:42.34 Sqe0pI7B.net
モンティ・ホール問題のシミュレートのように見えて実はちょっと違う
モンキーホール問題だったのだ
896:デフォルトの名無しさん
22/10/30 20:02:07.15 4vBwn6CZ.net
>>848 octave
URLリンク(ideone.com)
897:デフォルトの名無しさん
22/10/31 00:39:33.45 MKojko7I.net
お題 ジュールトムソン効果っぽいものをシミュレーションで再現せよ
898:デフォルトの名無しさん
22/11/04 07:13:30.92 jLlmakBU.net
お題:1~10までの合計を求めよ
*ただしライブラリ、ループ文を使わないこと
899:デフォルトの名無しさん
22/11/04 07:18:56.49 yh54R4RT.net
>>857 PHP
55
900:デフォルトの名無しさん
22/11/04 08:24:04.42 TDQ1gw2t.net
(1+10)*5
901:デフォルトの名無しさん
22/11/04 12:00:50.88 ryvUUS8Q.net
>>857 cmd
set /a "A=1, B=10, (B-A+1)/2*(A+B)+(B-A+1)%2*(A+B)/2" &rem A≦B
902:デフォルトの名無しさん
22/11/04 15:50:39.28 q0UsXtCi.net
1+2+3+4+5+6+7+8+9+10
903:デフォルトの名無しさん
22/11/04 15:52:05.99 TBUnPbqZ.net
>>857
$ dc -e'1 10+5*p'
55
$
904:デフォルトの名無しさん
22/11/04 16:28:57.36 q0UsXtCi.net
整数とは書いてないな
三角数とか実数とか何か別のものを想定してるかもしれない
905:デフォルトの名無しさん
22/11/04 16:32:28.85 q0UsXtCi.net
高級言語なら大抵暗黙のうちにライブラリは使ってるだろうし内部的にループも使ってるかもしれない
ループの定義も問題になるかと
gotoは?再帰は?列挙は?...
906:デフォルトの名無しさん
22/11/04 16:36:48.58 BHFqhq9y.net
>>863
その場合は
> 1~10までの合計
の定義を書かないとね
907:デフォルトの名無しさん
22/11/04 16:55:47.69 q0UsXtCi.net
「その場合」に限定する理由は無いよね?
908:デフォルトの名無しさん
22/11/04 17:35:42.12 u3TD418O.net
>>866
整数なら
> 1~10までの合計
についてほぼ合意できる定義があると思うけど?
909:デフォルトの名無しさん
22/11/04 18:32:31.67 iggZ7AM6.net
そう思ってない人もいる
910:デフォルトの名無しさん
22/11/04 18:59:46.26 u3TD418O.net
思ってない人は具体的にどう言う定義があるのか書けばいいんじゃね?
911:デフォルトの名無しさん
22/11/04 19:06:50.77 iggZ7AM6.net
ちょっと前のレスくらい読め
912:デフォルトの名無しさん
22/11/04 19:18:35.30 u3TD418O.net
ん?
ならなにを言いたいのかわからんわ
913:デフォルトの名無しさん
22/11/04 19:20:02.13 iggZ7AM6.net
わからないなら無理に書き込まなくていいよ
914:デフォルトの名無しさん
22/11/04 19:54:59.56 u3TD418O.net
ごめん、説明できないならいいや
915:デフォルトの名無しさん
22/11/05 14:37:23.18 wb4h3pkZ.net
>>857 octave
URLリンク(ideone.com)
f = @(a, b) (a + b) * (b - a + 1) / 2;
916:デフォルトの名無しさん
22/11/05
917:22:37:38.99 ID:ik3uUvNv.net
918:デフォルトの名無しさん
22/11/05 23:35:33.60 WGyFluMA.net
10*11/2
919:デフォルトの名無しさん
22/11/06 03:33:15.03 V4pkDxVq.net
>>857
Kotlin
URLリンク(paiza.io)
ループ文は使わず再帰でなんとかした。
(1..10).sum() や (1..10).reduce { a, n -> a + n } でも結果は出るが sum() や reduce() がライブラリにある拡張関数なので没。
10 * 11 / 2 とか 55 を直接出すのはプログラム作る意味がほとんどないような感じがするので止めた。