プログラミングのお題スレ Part20

■ このスレッドは過去ログ倉庫に格納されています
2021/06/19(土) 00:02:57.84ID:MQWrKSb7
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

宿題は宿題スレがあるのでそちらへ。

※前スレ
プログラミングのお題スレ Part19
https://mevius.5ch.net/test/read.cgi/tech/1606662245/
2022/08/13(土) 14:31:07.91ID:JPhXlbrB
>>666 Ruby
[*1..37].sample(7).sort

# => [4, 8, 15, 20, 24, 26, 37]
668デフォルトの名無しさん
垢版 |
2022/08/13(土) 18:53:16.03ID:jyB6kjuE
>>666 Common Lisp
https://ideone.com/NMCh3O
669デフォルトの名無しさん
垢版 |
2022/08/13(土) 19:08:33.35ID:jyB6kjuE
>>668
投稿後一部訂正、n の範囲チェックを追加

負数は弾く
(check-type n (integer 0 *))

上限はシーケンスの長さ
(loop repeat n

(loop (min n (length sequence))
2022/08/13(土) 19:54:15.55ID:JW3gpbYe
>>666 octave
https://ideone.com/Iml4xq
f = @() sort(randperm(37, 7));
cell2mat(arrayfun(@(~) {f()}, (1:5)'))
2022/08/14(日) 00:39:46.54ID:YzvfyuVN
>>666
Kotlin script

repeat(5) { println((1..37).toList().shuffled().slice(0..6).sorted()) }


実行例

[6, 7, 9, 10, 16, 22, 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]
672671
垢版 |
2022/08/14(日) 00:41:50.08ID:YzvfyuVN
>>671はこれでも同じだった (toList() 抜き)。

repeat(5) { println((1..37).shuffled().slice(0..6).sorted()) }
67396
垢版 |
2022/08/14(日) 01:45:55.09ID:jl8HjsTF
>>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
2022/08/14(日) 01:54:16.92ID:v+rcxIed
>>673
ソートされてないじゃん
67596
垢版 |
2022/08/14(日) 01:59:26.66ID:jl8HjsTF
>>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
2022/08/14(日) 12:35:56.93ID:JoIEy2rI
>>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
2022/08/14(日) 18:02:28.90ID:JoIEy2rI
>>666 c
https://ideone.com/EHr86S
2022/08/14(日) 21:45:18.38ID:b/j10zkL
(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の二通り
2022/08/14(日) 22:24:05.74ID:gf0q/4T2
>>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
2022/08/14(日) 22:30:32.35ID:z6QFcjeU
行列の掛け算を実装せよ
二次正方行列 A=((1 -2) (2 3)), B = ((-2 1)(3 -1)) について
AB, BA を求めよ
可能であれば二次正方行列以外の行列についても対応せよ
実装の細かい点については出題者は指定しないので良きに計らって結構。

<お願い>
行列の積において結合則成立の証明を教えてください
2022/08/14(日) 22:43:04.52ID:0XTzAkvO
>>678 c
https://ideone.com/hlf3c3
・(1)(2)ともに自信なし(たぶんお題の意味わかってない)
2022/08/14(日) 22:49:01.35ID:gf0q/4T2
>>680 Ruby Matrixクラス不使用
def product(a, b)
[
[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]]

# 夏休みの宿題は自分でやりましょう
2022/08/14(日) 22:51:54.64ID:7JC7m3TJ
>>682
>二次正方行列以外の行列についても対応せよ
2022/08/14(日) 23:05:21.92ID:gf0q/4T2
>>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]]
685デフォルトの名無しさん
垢版 |
2022/08/14(日) 23:09:42.44ID:ct8M+Uij
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)))
686デフォルトの名無しさん
垢版 |
2022/08/15(月) 00:42:19.42ID:PTEGgn5Q
>>679
どういう頭してたらその法則性に気づくん???
687デフォルトの名無しさん
垢版 |
2022/08/15(月) 01:31:39.90ID:b/MTJSvV
>>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
2022/08/15(月) 01:56:11.12ID:RG8mAl+Q
(2)
出題の仕方が間違ってた
最後に唯一のbbaが現れるパターンと書くべきだった
自分の中ではこのことしか考えてなかったから
>>679さんは汲んでくれたようで、早さにも驚いたけど
2022/08/15(月) 09:19:59.19ID:jWRkxbjN
なるほど, 再帰的に構成すればいいのか
aから始まる時: a + x[n-1]
baから始まる時: ba + x[n-2]
bbから始まる時: bb...bba
690デフォルトの名無しさん
垢版 |
2022/08/15(月) 09:43:22.06ID:90U51paY
>>686
そういう漸化式は普通に受験で良くでてくる
2022/08/15(月) 17:00:11.92ID:ioAOBwsA
>>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
2022/08/15(月) 17:16:58.66ID:RVV7PTHo
>>691 c
https://ideone.com/47VxwF
・二次元でintのみ
2022/08/15(月) 17:19:53.25ID:RVV7PTHo
>>680
https://ideone.com/47VxwF
・二次元でintのみ
694693
垢版 |
2022/08/16(火) 16:05:44.79ID:y+iYdbLW
>>680 c
https://ideone.com/lWljpL
>>693から若干の整理
・インデントも修正
695デフォルトの名無しさん
垢版 |
2022/08/16(火) 19:29:50.25ID:6LZk+vGC
>>688
え?言ってる意味がわからない。どういうこと?
696デフォルトの名無しさん
垢版 |
2022/08/16(火) 20:01:21.15ID:xodQRDI1
bba+gge=momo
697デフォルトの名無しさん
垢版 |
2022/08/16(火) 20:30:31.72ID:E3OXZYXp
>>695
末尾以外にbbaが現れる文字列を除外するってことじゃろう
2022/08/16(火) 21:15:34.85ID:dhC56AkH
bbaが最後に達成されるんじゃなければ2^47計算するだけのなんの面白みもない問題になるからそこで気付く人は気づくよね
2022/08/16(火) 23:04:49.04ID:mbmTGUKF
ついでに50文字で今度は最後がbbaじゃなくて
bbbのときとbabのときのそれぞれのパターン数を求めるって問題
2022/08/17(水) 01:28:19.97ID:0f27vmNE
>>697
なるほど。やっと意味がわかった。
2022/08/17(水) 14:04:15.12ID:UFtMHmKs
お題:分割されている顔文字を結合して表示してください
1つの顔文字は半角4字で構成。左右対称。2字ずつ半分に分割されてシャッフルされている
出力する顔文字の順番は自由とする

入力 < ^)(^
出力 > (^^)

入力 < ^)(-(^-)(vv)
出力 > (^^)(--)(vv)
2022/08/17(水) 14:59:27.47ID:2ZT38iyw
お題:ナンプレ(数独)における「縦9マス(列)」「横9マス(行)」「3x3マス」をそれぞれ表示する方法を示してください
便宜的に、ナンプレのマスには左上から右へ、右下に向かい0〜80までの数値を入れます。
0 1 2 3 4 5 6 7 8
...
...............80
左から1列目の9マスは
2022/08/17(水) 15:10:22.08ID:2ZT38iyw
途中送信してしまった

お題:ナンプレ(数独)における「縦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]
となります。
等差を利用して数字だけを表示するものは不可です。
マスに何の値が入っていても表示できるようにしてください。
2022/08/17(水) 21:47:42.92ID:GkJOOerG
>>703 c
https://ideone.com/lBKsc9
2022/08/17(水) 23:34:27.13ID:yTY/OYLu
>>701
(><)
706デフォルトの名無しさん
垢版 |
2022/08/18(木) 02:15:12.90ID:KCyiWPRI
>>703
perl5
https://paiza.io/projects/amKhSF3cnp1Ny5-2yWLO4g
2022/08/18(木) 03:07:13.35ID:dBOjwuYR
>>701 JavaScript
> ['^)(^', '^)(-(^-)(vv)', '<)(>'].map((R => input => Array.from(input.matchAll(/\((.)/g)).reduce((output, [l, r]) => output + l + R(r) + ')', ''))(r => r == '>' ? '<' : r))
[ '(^^)', '(--)(^^)(vv)', '(><)' ]
2022/08/18(木) 10:19:41.72ID:KriVCD9m
>>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)
(-(^-)^) -> (--)(^^)
2022/08/18(木) 10:20:40.39ID:KriVCD9m
>>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
2022/08/18(木) 10:42:28.41ID:KriVCD9m
>>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,67,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
711704
垢版 |
2022/08/18(木) 23:38:15.48ID:YBxy/c4L
>>703 c
https://ideone.com/0yXRih
>>704から若干の整理
712デフォルトの名無しさん
垢版 |
2022/08/19(金) 23:42:01.44ID:GkIv/1vJ
お題
<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
713デフォルトの名無しさん
垢版 |
2022/08/19(金) 23:58:05.14ID:zRvvDV0W
なんで数を入力してるんだ?
後の情報であきらかではないか
まさかグループ名が整数でも良いと考えている?
2022/08/20(土) 00:02:54.24ID:xIohwuBb
>>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
2022/08/20(土) 07:49:15.49ID:/HXUcxOA
// >>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}`);
}
});
2022/08/20(土) 17:09:35.31ID:tvd+mgyM
>>712 c
https://ideone.com/Edol3U
717デフォルトの名無しさん
垢版 |
2022/08/20(土) 21:26:59.76ID:myFbjTal
>>712
C#
https://paiza.io/projects/IAgPLTHFbJ-HmDcLHFrNYA
718デフォルトの名無しさん
垢版 |
2022/08/20(土) 22:24:09.90ID:5JSGWnVi
>>703ってこれじゃだめなのかな
7行で書ける
https://ideone.com/eKTMZr
71996
垢版 |
2022/08/21(日) 02:42:00.00ID:P6BPpVvp
>>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
720デフォルトの名無しさん
垢版 |
2022/08/21(日) 06:03:07.44ID:V5T4kdVo
>>712
<group>順にって、何を元にして group の順序を決めるの?
入力された順?それだと例の入力のように GroupC, GroupA, GroupC の順で来ている場合はどうするの?
2022/08/21(日) 07:03:57.35ID:3JIuIXQv
<group>毎という事だと思う
サンプル見るとgroup名か集計したpointの昇順かも知れないけどそこはどうとでもなりそうだし
2022/08/21(日) 08:49:24.60ID:0ZMA3aWJ
>>713
実際にここでも数字を使っている例が出て来てるからわかると思うけど
競プロなんかではよくあるフォーマットだよ
723デフォルトの名無しさん
垢版 |
2022/08/21(日) 18:07:19.66ID:ecIOs+Jg
>>666
C#
https://paiza.io/projects/sT_SLT3n0NNab0a-ZD7IHQ
2022/08/21(日) 18:28:38.88ID:Y2TZP89X
お題:Hello, World!を出力中にプログラムを強制終了せよ
Hello, World!が完全に出力されたらGAME OVERとする
2022/08/21(日) 18:45:13.28ID:ui07Fbeq
>>724 Ruby
Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'}
Thread.new{exit}

# =>
Hello, World!
726デフォルトの名無しさん
垢版 |
2022/08/21(日) 18:49:48.17ID:ecIOs+Jg
>>701
C#
https://paiza.io/projects/D1PZTVPBn2qnksCQnwYQmw?language=csharp
2022/08/21(日) 18:51:27.42ID:ui07Fbeq
>>725 訂正
Thread.new{'Hello, World!'.each_char{|c| print c; sleep 0.01}; raise 'GAME OVER'}

Thread.new{exit!}


# => H
728デフォルトの名無しさん
垢版 |
2022/08/21(日) 19:50:47.18ID:ecIOs+Jg
>>703
C#
https://paiza.io/projects/HzrEP1l1vX4Z3JUqmHSUwg
2022/08/21(日) 20:19:09.38ID:/7u80ZfN
>>724 c
https://ideone.com/xaMOR7
730デフォルトの名無しさん
垢版 |
2022/08/21(日) 21:11:05.94ID:ecIOs+Jg
>>648
C#
https://paiza.io/projects/2cxaJzBNbukA4-EolW07Cw
731729
垢版 |
2022/08/22(月) 19:20:01.17ID:7CA3B9Dd
>>724 c
https://ideone.com/k8R7TU
>>729 どう見ても正常終了です。本当にありがとうございました。
・子プロセスの強制終了を見届けてから自分自身も強制終了
732デフォルトの名無しさん
垢版 |
2022/08/25(木) 15:38:14.81ID:bJn+zm7R
>>724
その強制終了って人間が Ctrl + C を押すなどしてやるという意味?
間に合わずに全部出力し切った場合は GAME OVER 出すということ?
2022/08/25(木) 15:52:23.73ID:BfuXla1W
>>732
強制終了→exit(0)などでプログラム的に終了させる
GAME OVER→お題の達成失敗
2022/08/25(木) 16:09:53.36ID:6j74uL6b
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ライセンスでお願いします
735デフォルトの名無しさん
垢版 |
2022/08/25(木) 16:22:36.77ID:0z7AphVM
ま、まあ、作れなくはないかな…
736デフォルトの名無しさん
垢版 |
2022/08/25(木) 18:48:07.98ID:0xws5w3m
フワっとした頭の中にしか定義されてない案件なんて誰もこなせないぞ
本人以外は
737デフォルトの名無しさん
垢版 |
2022/08/25(木) 20:40:48.98ID:0z7AphVM
>>734
Java
https://paiza.io/projects/Fot4E7hZfbJ95P_hSbI3NQ
2022/08/25(木) 21:10:16.35ID:/BGaqBqg
>>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);
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('|') + '))';
}
2022/08/25(木) 22:00:47.00ID:JPPVgQ9Y
beer licenseでよければ書くが
2022/08/26(金) 04:09:37.08ID:NIKxWs5c
割とすぐに出来るもんなんですね
どちらも実用上問題なさそうな、いい感じの実行結果です

>738は最新の実行環境に心当たりがなかったので確認に手間どりましたが
Chromeのコンソールから実行して確認できました
(cscriptで実行しようとしたらat()に対応してなかったので)

いやー勉強になります、ありがとう
2022/08/26(金) 04:49:22.52ID:0rX9u4fb
>>740
スレタイも読めないアホは消えろ
74296
垢版 |
2022/08/26(金) 05:19:52.33ID:GgZblxs6
>>740
人をタダで利用してない?
743デフォルトの名無しさん
垢版 |
2022/08/26(金) 11:51:47.61ID:d54FvNjc
>>733
マルチスレッドかマルチタスクで "Hello, world!" を出力する処理と、ランダムなタイミングでそれを強制終了させる処理が動くということで良いのか?
そして出力中に停止できなかったら "GAME OVER" が最後に出ると。
2022/08/26(金) 14:32:15.45ID:71YXfdUw
>>743
その実装でもいいよ
題意はいかにHello, World!出力中にプログラムを終了させるかだから
sleep挟んでもいい
745デフォルトの名無しさん
垢版 |
2022/08/26(金) 18:44:07.03ID:NQ4mbOjq
>>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.
2022/08/26(金) 21:28:18.28ID:NIKxWs5c
はて?プログラミングのお題を投げて、競技的な興味をもって答えたくなった人が答え
その回答に興味があれば参照して「普段は扱ってないこの言語だとそういうやりかたなのか」
「自分とは違うスマートなやり方があったのか」と思ったりするスレ、という理解でしたが

もしかして投げたときに”お題”という文字が抜けてたのが問題ありましたか?
概ね正解とするに足る実行結果を、実用上問題なさそうと表現したことが拙かったですか?
もしそうなら申し訳ない、次からは気をつけます
2022/08/26(金) 21:31:39.94ID:NIKxWs5c
ついでというかなんというか>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
74896
垢版 |
2022/08/29(月) 02:30:43.54ID:QAZMtAov
>>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";
}

※見易くするためインデントを全角スペースに置換しています。


実行例:
https://ideone.com/VBJMMo
74996
垢版 |
2022/08/29(月) 02:55:16.14ID:QAZMtAov
>>748
128.0.0.0/1 の結果が変
バグ入りだ、ゴメンチャイ
75096
垢版 |
2022/08/29(月) 03:01:45.22ID:QAZMtAov
あれ?いいのかな?
仕様を推測して作ったけどちょっと混乱したかも…
寝るわ
751デフォルトの名無しさん
垢版 |
2022/09/09(金) 22:29:09.28ID:zwPgoVui
お題
長方形の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
2022/09/09(金) 23:02:00.41ID:Un8DgV3E
>>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
2022/09/09(金) 23:46:43.88ID:3788iROh
>>751 ruby
https://ideone.com/hBHe51
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)
754753
垢版 |
2022/09/10(土) 00:24:11.29ID:4GiNoMjQ
>>751
https://ideone.com/2UDrLT
>>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)
2022/09/10(土) 00:34:04.51ID:sDbT/M8A
みんな解くのはえーなぁ
75696
垢版 |
2022/09/10(土) 02:29:07.85ID:7pWsuKpo
>>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
2022/09/10(土) 11:29:46.54ID:q8enYz1J
>>751 octave
https://ideone.com/WGkm27
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))
2022/09/10(土) 13:32:08.25ID:q8enYz1J
>>751 c
https://ideone.com/Cqx8M3
#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;
}
759デフォルトの名無しさん
垢版 |
2022/09/10(土) 19:18:11.93ID:PLqR4TKQ
>>751
Kotlin

可能な限り漢字を使ったプログラムにしてみたが、余計にゴチャゴチャしてしまったかな?

https://paiza.io/projects/ay4L7Wchnt6lGUvkh6h21A

240 が 16, 17 ではなく 17, 16 のように出るが、まあよかろう。
(リストの順番で覚えているのでこうなる)。
760デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:25:19.23ID:7X0yi8nW
お題

>>751の問題について

長方形の1辺の長さをソートして縦方向と横方向に並べて交差するところに長方形の面積を入れて表にします

https://downloadx.getuploader.com/g/angel556/90/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95.png
この図は50を探すところを描いています

青色の斜めの値の中から正方形の面積以上かつ最小の値を見つけその場所を出発点とします
長方形の面積が正方形の面積よりも大きい場合は表を上にたどり、長方形の面積が正方形の面積よりも小さい場合は表を右にたどります
右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

しゃくとり虫が動いてるように見えるのでこれをしゃくとり法と呼ぶことにします

>>751の問題をしゃくとり法で解いてください
761デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:51:25.27ID:7X0yi8nW
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

これは間違いかも、これだと55を見つけられない
各自で考えていただければありがたく
762デフォルトの名無しさん
垢版 |
2022/09/10(土) 22:52:41.16ID:7X0yi8nW
いや、いいのか!? ダメだ混乱してきたもうパニックですわ
2022/09/10(土) 22:57:53.10ID:sDbT/M8A
おちつけ
764デフォルトの名無しさん
垢版 |
2022/09/10(土) 23:12:42.56ID:7X0yi8nW
>>760
> 右方向から上方向に切り替わるところが回答の候補でその中から最小値を探すことで効率よく回答を見つけることができます

これは間違いでした、上方向から右方向に変わる直前の値が回答候補ですね

50を探す場合、56,55,51が候補です
https://downloadx.getuploader.com/g/angel556/91/%E3%81%97%E3%82%83%E3%81%8F%E3%81%A8%E3%82%8A%E6%B3%95_%E8%A8%82%E6%AD%A3.png
765素数を数えるんだ
垢版 |
2022/09/10(土) 23:25:22.59ID:22kPJ9rf
2, 3, 5, 7, 11, 13, 17, 19......
766デフォルトの名無しさん
垢版 |
2022/09/11(日) 01:04:25.98ID:/LH0BDzE
お題
2~19までの素数を生成し掛け算の表を出力してください
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況