20/08/16 20:34:23 1lLvvYB6.net
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね
349:デフォルトの名無しさん
20/08/16 20:50:12.97 5EzRC1Sr.net
>>339
死ねカス
350:蟻人間
20/08/16 20:54:18.06 GwA/W8AI.net
>>340
> だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。
351:デフォルトの名無しさん
20/08/16 20:57:11.13 rY4w2Ca/.net
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ
352:デフォルトの名無しさん
20/08/16 21:13:43.55 WQRWSQYc.net
where 0 < a < b
0 = 0 * [0, 1]
= ([a, b] + [-a, -b]) * [0, 1]
= [a, b] * [0, 1] + [-a, -b] * [0, 1]
= [0, b] + [-b, 0]
= [-b, b]
!= [0, 0] = 0
矛盾
死ね
消えろ
353:蟻人間
20/08/16 21:16:32.00 GwA/W8AI.net
>>345
0 < a < bのときは、[-a, -b]は定義されない。
354:デフォルトの名無しさん
20/08/16 21:29:26.85 WQRWSQYc.net
>>346
順序の定義が矛盾してるんだから[-a, -b]は定義可能であっても良い
本当頭わりいな
355:デフォルトの名無しさん
20/08/16 21:34:29.96 1lLvvYB6.net
[0, 1]*[0, 1] = [0, 1]
<=> [0, 1]*([0, 1] - 1) = 0
<=> [0, 1]*[-1, 0] = 0
<=> [-1, 0] = 0
流石にひどいって
356:蟻人間
20/08/16 21:48:28.85 GwA/W8AI.net
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則
357:蟻人間
20/08/16 22:04:28.19 GwA/W8AI.net
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。
すみません、取り下げます。
358:デフォルトの名無しさん
20/08/16 22:08:12.76 WQRWSQYc.net
>>350
それ以前の問題だっつーのアホ
任意の数 a, b に対して容易に a = b が成立するクソ
359:デフォルトの名無しさん
20/08/16 22:16:18.77 UYHP6Cr3.net
問題を解くスキル<<<<<解ける問題を作るスキル
だったりするかも
360:デフォルトの名無しさん
20/08/16 22:26:48.34 Nztll5gc.net
>>316
Java
URLリンク(paiza.io)
361:蟻人間 ◆T6xkBnTXz7B0
20/08/16 22:46:06 GwA/W8AI.net
やり直し。
お題: 区間と演算子によって構成される計算式が入力として与えられる。下記に従って浮動小数点数の区間に対する二項演算(+、-、*、/)を実現し、計算後の区間を出力しなさい。入力される区間は閉区間のみとする。
閉区間は角カッコで囲まれた浮動小数点数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。すなわち[a, b]という式があればa<=bでなければならない。
式が正当でないか、ゼロ除算があれば、実行時エラーを発生させること。
演算の定義:
[a, b] + [c, d] := [a+c, b+d].
[a, b] - [c, d] := [a-d, b-c].
[a, b] * [c, d] := [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] := [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].
例)
[1, 3] + [2, 2] → [3, 5].
[2, 8] - [1, 2] → [0, 7].
[-3, 2] * [1, 3] → [-9, 6].
362:デフォルトの名無しさん
20/08/16 22:58:27.46 bYLilpPQ.net
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない
かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが
363:
20/08/16 23:34:04.85 kJzMyvlv.net
>>316 C
URLリンク(ideone.com)
364:253
20/08/16 23:50:47.82 G5r8RAij.net
>>316 Perl5
use Data::Dump 'dump';
sub fn {
my ($le, $pv, @ri) = @_;
defined $pv ? map {[$pv, @$_]} fn([], @$le, @ri) : ([])
,
@ri ? fn([@$le, $pv], @ri) : ()
}
$N = 3;
@a = 1..$N;
print dump(fn [], @a);
実行結果
$ perl 18_308_N_permutation.pl
([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1])
365:デフォルトの名無しさん
20/08/17 01:49:55.07 Nup7rIuH.net
前の書き方だとやる気が出ないみたいなので再掲
お題 任意文字列を含む有効なビットコインアドレスを生成するにはどうすればいいか
ビットコインアドレスの形式は
[プレフィックス 1バイト] [本体データ 160ビット] [チェックサム 4バイト]
をbase58(58進数)で表現したもの
プレフィックスは0x00とする
チェックサムはプレフィックス+本体データをsha256に二回かけた後の先頭4バイト
詳細
URLリンク(www.tottemoyasashiibitcoin.net)
例:
1BitCoinDescriptionAddressadTvGDH
1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC
これはどっちも有効なビットコインアドレスになってる
URLリンク(chainflyer.bitflyer.com)
URLリンク(chainflyer.bitflyer.jp)
366:デフォルトの名無しさん
20/08/17 06:10:10.64 sRZ0bbBO.net
>>354
消えろカス
367:デフォルトの名無しさん
20/08/17 08:34:59.13 4e6PsksO.net
>>359
お前うざいよ
368:デフォルトの名無しさん
20/08/17 09:10:13 CGaaR/Ic.net
どうすればいいか?ってのがよくわからない
369:デフォルトの名無しさん
20/08/17 09:11:51.56 CGaaR/Ic.net
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
370:デフォルトの名無しさん
20/08/17 11:17:26.81 2KNIyB/f.net
ブルートフォースアタックしか思い浮かばない。
371:デフォルトの名無しさん
20/08/17 18:12:59.56 Nup7rIuH.net
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
372:デフォルトの名無しさん
20/08/17 19:37:06.53 4e6PsksO.net
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
373:デフォルトの名無しさん
20/08/17 19:45:01.16 Nup7rIuH0.net
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
374:デフォルトの名無しさん
20/08/17 22:43:06.44 sRZ0bbBO.net
>>360
お前がうぜえよ死ね
375:デフォルトの名無しさん
20/08/17 22:47:24.50 4e6PsksO.net
>>367
お前が死ね
376:デフォルトの名無しさん
20/08/17 22:50:53.21 3fwftKf8.net
よし俺がしぬよ
377:デフォルトの名無しさん
20/08/17 22:53:16.60 UMcd904E.net
夏だなあ
378:デフォルトの名無しさん
20/08/17 22:56:52 4e6PsksO.net
>>369
じゃあ俺が死ぬよ
379:デフォルトの名無しさん
20/08/17 22:57:17 3fwftKf8.net
お題: 『死』を表現せよ
380:デフォルトの名無しさん
20/08/17 22:57:32 3fwftKf8.net
>>371
どうぞうどうぞ
381:デフォルトの名無しさん
20/08/17 22:58:07 sRZ0bbBO.net
>>371
じゃあ死ねよ
382:デフォルトの名無しさん
20/08/17 23:05:20 4e6PsksO.net
>>374
全然おもんないやんけ
もう一回チャンスをやろう
383:デフォルトの名無しさん
20/08/17 23:05:35 4e6PsksO.net
じゃあ俺が死ぬよ
384:デフォルトの名無しさん
20/08/17 23:05:59 4e6PsksO.net
くるよくるよ
385:デフォルトの名無しさん
20/08/17 23:06:13 4e6PsksO.net
ドキドキ
386:デフォルトの名無しさん
20/08/17 23:39:35 4e6PsksO.net
逃げたか
387:デフォルトの名無しさん
20/08/17 23:39:58 4e6PsksO.net
笑いから逃げるな
388:デフォルトの名無しさん
20/08/18 00:15:03.77 /+dAg+CW.net
お題: 二人の煽り耐性から「死ね」と言い合うプログラム
煽り耐性 0.1~1
死ねと言い返す確率 (1-煽り耐性) * 100%
最初に死ねと言うのはA
入力 {Aの煽り耐性} {Bの煽り耐性}
例
> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
389:デフォルトの名無しさん
20/08/18 01:25:39.14 IZwRntbA.net
if (>>381{A}%3 ==0.1&&0.8<<373{B}) print "オモロー" & "アキラ" *100% ;
390:デフォルトの名無しさん
20/08/18 01:35:33.42 Vl5MoMXT0.net
>>358 js
const input = "programmingodaisure"
let tmp_str = input;
let tmp_hex = new Uint8Array();
do {
tmp_str += "X";
tmp_hex = [0x00, ...Base58.decode(tmp_str)];
} while (tmp_hex.length < 25)
const prefix_and_data = tmp_hex.slice(0, -4);
const doubleSha256 = sha256.digest(sha256.digest(prefix_and_data))
const checkSum = doubleSha256.slice(0, 4);
const result_hex = new Uint8Array([...prefix_and_data, ...checkSum]);
const result_str = Base58.encode(result_hex);
console.log(result_str);
→ "1programmingodaisureXXXXXXXZHx9sj"
URLリンク(chainflyer.bitflyer.jp)
BASE58とSHA256のライブラリ
URLリンク(cdn.jsdelivr.net)
URLリンク(cdn.jsdelivr.net)
391:デフォルトの名無しさん
20/08/19 16:18:46 ltFkDVN7.net
>>372
#!/bin/sh
rm $0
392:デフォルトの名無しさん
20/08/19 18:40:23.70 d4bqPFA7.net
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
393:デフォルトの名無しさん
20/08/19 18:45:07.34 OrygHj4v.net
略して示唆トン。
394:デフォルトの名無しさん
20/08/20 11:35:09.25 nWR09WFB.net
>>257
Elixir
# 蓄積変数 set は、すべての文字列の集合。abcde, bcdea などの5つ。
# word は、1文字ずらした文字列
src_word = 'abcde'
%{ set: set } = Enum.reduce_while( 1..length( src_word ), %{ set: MapSet.new, word: src_word }, fn _count, acc ->
[ head | tail ] = acc.word
next_word = tail ++ [ head ] # 1文字ずらす
acc = %{ acc | word: next_word }
if MapSet.member?( acc.set, next_word ) do
{ :halt, acc } # 既に存在すれば、break
else
acc = %{ acc | set: MapSet.put( acc.set, next_word ) }
{ :cont, acc } # ループを続ける
end
end )
# IO.inspect set
# 文字列が、集合の中に含まれているか?
[ 'deabc', 'cdeba' ]
|> Enum.map( fn str -> MapSet.member?( set, str ) end )
|> IO.inspect # [true, false]
395:デフォルトの名無しさん
20/08/23 18:52:15.52 kIX3/Jw/.net
お題:
縦H、横Wの迷路が与えられます。
スタートからゴールに至る道順の個数を求めてください。
迷路は通路から通路へ、上下左右の4方向へのみ移動できます。
ただし、一度通った通路を引き返すような道順は無効です。
また、スタートとゴールは通路です。
1行目に迷路の高さと幅を表す整数H、Wが与えられます。
2行目からH行にわたって、迷路を表す長さWの文字列が与えられます。
文字列は 'S' 'G' '.' '#' の文字のみからなり、それぞれスタート、ゴール、通路、壁です。
例1:
入力:
5 5
S....
##.#.
...#.
##.#.
....G
出力:
2
例2:
入力:
5 5
S....
##.#.
...#.
...#.
....G
出力:
12
396:デフォルトの名無しさん
20/08/24 04:30:51.55 qrCNAVcy.net
>>388 C++
URLリンク(ideone.com)
397:デフォルトの名無しさん
20/08/24 11:49:18.16 2DIU31aQ.net
>>388 C++
URLリンク(wandbox.org)
398:蟻人間
20/08/29 20:44:46.53 GYyhmMZY.net
お題: ロシアンルーレット。
リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
399:デフォルトの名無しさん
20/08/29 21:04:26.78 KxRf/0sH.net
>>391
仕様がわからない
400:蟻人間 ◆T6xkBnTXz7B0
20/08/29 21:07:51 GYyhmMZY.net
ロシアンルーレット
URLリンク(ja.m.wikipedia.org)
回転式拳銃(リボルバー)
URLリンク(ja.m.wikipedia.org)
401:蟻人間
20/08/29 21:24:48.99 GYyhmMZY.net
>>391-392 こんな感じか?
最初にリボルバーを回します。
(弾丸の位置を設定)
こめかみor天井?(K/t) K
1回目: 不発
もう一度リボルバーを回しますか? (Y/n) Y
(弾丸を回転)
こめかみor天井?(K/t) K
2回目: 不発
もう一度リボルバーを回しますか? (Y/n) n
こめかみor天井?(K/t) K
3回目: バーン!
あなたの負けです。
402:蟻人間 ◆T6xkBnTXz7B0
20/08/29 22:00:32 GYyhmMZY.net
えっ、拳銃見たことないの?
403:デフォルトの名無しさん
20/08/29 22:14:20.91 bYj4gZFd.net
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
404:デフォルトの名無しさん
20/08/29 22:51:06 yG/yQHuO.net
jsインタラクティブ入力に弱い
405:デフォルトの名無しさん
20/08/29 23:12:55 yG/yQHuO.net
>>391
URLリンク(repl.it)
// 0-5
const rand6 = () => Math.floor(Math.random() * 6);
const gun = (() => {
let pos = 0;
const shuffle = () => (pos = rand6());
shuffle();
const shut = () => pos-- === -1
return { shuffle, pos, shut }
})()
// mock 1/2 rand
const readDoShuffleAsync = () => {
const y = Math.random() >= 0.5
console.log(y ? "y" : "n")
return y
}
let i = 1;
while (true) {
console.log("リボルバーを回しますか?");
if (readDoShuffleAsync()) gun.shuffle()
const bomb = gun.shut();
console.log(`${i}回目: ${bomb ? "バーン!" : "不発"}`);
i++;
if (bomb) break
}
406:デフォルトの名無しさん
20/08/29 23:34:19.24 2f/XylsB.net
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される
var a = 1
a // 1 と表示される
407:デフォルトの名無しさん
20/08/29 23:41:03.13 yG/yQHuO.net
swift playgroundとかjestのinlineSnapshotみたいな感じか
使うときがあるか微妙
408:デフォルトの名無しさん
20/08/30 01:02:17.18 xjthqQ7x.net
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください
例
入力: 1
出力: [1]
入力: 3
出力: [1, 2, 2, 3, 3, 3]
409:デフォルトの名無しさん
20/08/30 01:33:41.99 xjthqQ7x.net
お題
配列をソートする関数を受け取って安定ソートか否かを判定する
プログラムを作成してください
410:デフォルトの名無しさん
20/08/30 06:49:46 a0VCHWdX.net
お題: splitを実装せよ(ただし組み込みやライブラリのsplitは使ってはならない)
例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
411:デフォルトの名無しさん
20/08/30 08:02:58.80 Ui9A3dkW.net
>>401 J
f =: #~ @: >: @ i.
412:デフォルトの名無しさん
20/08/30 09:40:37.84 rD3R6mry.net
>>401 Ruby
(0..3).each{|n| p (1..n).reduce([]){|s, a| s + [a] * a}}
# =>
[]
[1]
[1, 2, 2]
[1, 2, 2, 3, 3, 3]
>>403 Ruby
p 'abc:def:ghi'.scan(/[^:]+/) # => ["abc", "def", "ghi"]
413:デフォルトの名無しさん
20/08/30 09:41:22.98 ka/TVb/i.net
>>401 octave
URLリンク(ideone.com)
f = @(n) repelem(1:n, 1:n);
f(3)
414:デフォルトの名無しさん
20/08/30 09:43:25.32 pWMgwPJi.net
>>403
JS
let minSplit = (string, separator) => {
let array = [];
let splitter = (st, sp) => {
let pos = st.indexOf(sp);
if (pos == -1) {return [st,void(0)]} else {return [st.slice(0,pos),st.slice(pos+1)]}
}
while (true) {
if (string.length == 0) {array.push(string); break}
let temp = splitter(string, separator)
if (temp[1] == void(0)) {array.push(temp[0]); break}
else {array.push(temp[0]); string = temp[1]}
}
return array
}
let minSplit2 = (string, separator) => {
let reg = new RegExp(`[^(${separator})]+${separator}?`, "g");
return `${string} `.match(reg).map(x=>x.slice(0,-1))
}
415:デフォルトの名無しさん
20/08/30 17:51:57.01 9TpSDH8X.net
>>403 octave
f = @(s, d) arrayfun(@(b, e) {s(b:e)}, [1 find(s == d) + 1], [find(s == d) - 1 numel(s)]);
f('abc:def:ghi', ':')
416:400
20/08/30 18:29:58 9TpSDH8X.net
一応url
URLリンク(ideone.com)
417:デフォルトの名無しさん
20/08/30 18:55:27.84 uG01djUi.net
>>403 js
const replaceAll = (s, from, to) => s.replace(new RegExp(from, "g"), to)
const split = (str, sep) => JSON.parse(`["${replaceAll(str, sep, '","')}"]`)
split('abc:def:ghi', ':')
// [ 'abc', 'def', 'ghi' ]
ずるいしダブルクォート対応できてないけど思いつき
418:デフォルトの名無しさん
20/08/30 19:52:13.41 KMqOjvFr.net
>>403 Ruby
# セパレーターの仕様が文字か文字列か分からなかったので文字列にした
def split( str, sep )
res = []
(str + sep).scan( /(.*?)#{Regexp.escape(sep)}/ ){ res << $1 }
res
end
split('abc:def:ghi', ':') #=> ["abc", "def", "ghi"]
419:デフォルトの名無しさん
20/08/30 19:55:11.73 OKCM85cL.net
>> 393 C++
URLリンク(ideone.com)
>> 394 C++
URLリンク(ideone.com)
合ってるか分からない
(とりあえずバブルソートが安定だからそれと比較した)
>> 395 C++
URLリンク(ideone.com)
420:デフォルトの名無しさん
20/08/30 23:05:46 HaB2mhSL.net
>>401 C++
URLリンク(wandbox.org)
コンパイル時にできる
421:デフォルトの名無しさん
20/08/30 23:23:11.11 OKCM85cL.net
operator[]がconstexprなのはC++17以降らしいね
422:デフォルトの名無しさん
20/08/31 00:36:58 Sr2UUXBk.net
宇宙創生から現在まで【宇宙の歴史?(過去編)】
URLリンク(www.youtube.com)
期待値が無限大な賭け(サンクトペテルブルクのパラドックス)
URLリンク(www.youtube.com)
もしも生徒が全員予備校講師だったら
URLリンク(www.youtube.com)
eが超越数であることの証明
URLリンク(www.youtube.com)
【受験生へ】勉強のモチベーションをあげる3つの方法
URLリンク(www.youtube.com)
線を描くだけ!万能視覚的かけ算【インド式計算】
URLリンク(www.youtube.com)
全受験生が理解するべき!偏差値とは何か
URLリンク(www.youtube.com)
楽しいことを増やそう!科学の眼鏡を�
423:ゥけた1日とは【ヨビノリたくみ特別公演】 https://www.youtube.com/watch?v=u5al7kwy64k 数学の魅力とは?中田敦彦と人気教育系YouTuberヨビノリたくみ先生が初コラボ https://www.youtube.com/watch?v=qxiAyyotAM0
424:デフォルトの名無しさん
20/08/31 08:12:50.04 o+KAewBM.net
>>401 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
425:デフォルトの名無しさん
20/08/31 09:50:22 3l02ZOhc.net
>>404
何やってんのか分かんねぇ…
426:デフォルトの名無しさん
20/08/31 12:53:04.32 DeTlQxvW.net
f#(@:m:@ )顔文字にしか見えん
427:デフォルトの名無しさん
20/08/31 13:15:43 0jcGZySh.net
\(._. \)
428:蟻人間 ◆T6xkBnTXz7B0
20/08/31 13:37:09 tSOV4fJk.net
お題: 覆面算パズルをランダムに自動生成せよ。
単語は大文字のアルファベットのみとする。
各単語は自然数を表している。
単語の各文字は数字を表している。
各単語の先頭はゼロではない。
同じ文字は同じ数字が入る。文字が違えば、数字も違う。
各単語は、3文字以上6文字以下とする。
答えは一つでなければいけない。
今回は、簡単な足し算のみとする。
例)
SEND+MORE=MONEY.
BASE+BALL=GAMES.
単語リスト:URLリンク(gist.github.com)
429:蟻人間 ◆T6xkBnTXz7B0
20/08/31 13:41:36 tSOV4fJk.net
お題:覆面算パズルを解くプログラム。
例)
SEND+MORE=MONEY
→9567+1085=10652.
BASE+BALL=GAMES
→7483+7455=14938.
430:デフォルトの名無しさん
20/08/31 14:49:18.65 7ZWcUsrI.net
>>401
Elixir
# 再帰で、蓄積リスト・ary に、連結していく
defmodule MyList do
def add( num ), do: _add( num, [ ] )
defp _add( 0, ary ) do
ary
end
defp _add( num, ary ) when num > 0 do
_add( num - 1, List.duplicate( num, num ) ++ ary )
end
end
ary = MyList.add 3
IO.inspect ary #=> [1, 2, 2, 3, 3, 3]
431:蟻人間
20/08/31 16:10:16.99 lWn/zYPT.net
>>421, >>420の順に解いてね。
ヒント要る?
432:蟻人間
20/08/31 16:12:08.02 lWn/zYPT.net
ヒント: 各文字を変数とした連立方程式。
433:蟻人間
20/08/31 16:24:48.19 lWn/zYPT.net
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
434:デフォルトの名無しさん
20/08/31 18:26:24.52 qQr3mFGF.net
間違えてなければO(10!)のはずだから充分多いのでは
435:デフォルトの名無しさん
20/08/31 18:26:56.47 qQr3mFGF.net
ごめん10!はめちゃくちゃ小さかった
436:デフォルトの名無しさん
20/08/31 18:43:24.02 hr5jjNmH.net
この手の問題は総当りしたほうが速いことすらある
437:デフォルトの名無しさん
20/08/31 19:18:49 J48xi6fS.net
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
438:デフォルトの名無しさん
20/08/31 19:23:55 fdwPQ6pV.net
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
URLリンク(sunasunax.hatenablog.com)
439:デフォルトの名無しさん
20/08/31 21:02:28 Sr2UUXBk.net
デキる人ほどフリーランス化する?★働き方改革
URLリンク(www.youtube.com)
年収890万円以下は社会のお荷物★騙される労働者
URLリンク(www.youtube.com)
騙されたくなかったら勉強しろ★他人のルールは損をする
URLリンク(www.youtube.com)
底辺の99%は一生底辺★10年後が見えない同僚たち
URLリンク(www.youtube.com)
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
URLリンク(www.youtube.com)
サラリーマン思考では儲からない理由
URLリンク(www.youtube.com)
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
URLリンク(www.youtube.com)
「で、年収は?」と聞くバカとは合わない社長業
URLリンク(www.youtube.com)
440:253
20/08/31 21:47:00.41 Mm8nXRhv.net
>>401 Perl5
use feature qw{signatures};
sub f($n) {
$n ? (f($n-1), ($n) x $n) : ()
}
@a = f(3);
print "@a\n";
実行結果
~ $ perl 18_393_inc_ary.pl
The signatures feature is experimental at 18_393_inc_ary.pl line 2.
1 2 2 3 3 3
441:253
20/08/31 21:54:06.64 pmRcaHIk.net
>>401 Perl5、単にmapで値個数要素のリストに展開
$n = 3;
@a = map{($_) x $_} 1..$n;
print "@a\n";
j実行結果
~ $ perl 18_393_inc_ary_map.pl
1 2 2 3 3 3
442:デフォルトの名無しさん
20/08/31 23:33:38 0jcGZySh.net
>>401
Kotlin
URLリンク(paiza.io)
443:デフォルトの名無しさん
20/09/01 00:01:02 1mY8ta+4.net
>>401
C
URLリンク(paiza.io)
444:デフォルトの名無しさん
20/09/01 00:18:24 vTrOzHSW.net
>>401
python
lambda x: [int(i) for i in "".join(f"{y}"*y for y in range(1,x+1))]
445:デフォルトの名無しさん
20/09/01 14:16:37.60 3qKfeSqF.net
全く知らない構文の言語でカンでいじっても構文エラーも止められずに
動かない機械ガチャガチャしてるだけ感すごいよな
446:蟻人間
20/09/01 18:47:08.83 4meeAMMW.net
お題: テキストファイル「input.txt」の中の" dot "を"."に置換し、さらに" at "を"@"に置換したときに、RFCに従ったメールアドレスになる部分文字列を抽出し、そのメールアドレスのリストを改行区切りで出力せよ。
447:デフォルトの名無しさん
20/09/01 18:47:54.44 Y09tsFBY.net
>>401 Ruby
def f(n)
(1..n*(n+1)/2).map{|x| ((x*2)**0.5+0.5).to_i}
end
448:デフォルトの名無しさん
20/09/01 18:48:39.88 PZXbhIm5.net
>>438
テスト用のinput.txtちょーだい!
449:蟻人間
20/09/01 18:54:57.84 4meeAMMW.net
>>440
「これはテキトーなテキストデータである。
例えば
user at example dot com
とか
user at example dot co dot jp
とか
katayama dot hirofumi dot mz at example dot net
とかあるでしょ。
詐欺メールに引っ掛からないためには、URLのドメインを確認することが一番。
google.com
google.co.jp
まあ、いろいろあるっしょ。」
450:デフォルトの名無しさん
20/09/01 18:57:45.00 PZXbhIm5.net
>>441
あざーす!
451:デフォルトの名無しさん
20/09/01 19:10:04.73 y/wdSyKD.net
>>438
Mail::RFC822::Address: regexp-based address validatio
URLリンク(www.ex-parrot.com)
452:蟻人間
20/09/01 20:18:24.49 4meeAMMW.net
ヒント: 文字列置換と正規表現
453:デフォルトの名無しさん
20/09/01 22:43:25 PZXbhIm5.net
>>438
Java
URLリンク(paiza.io)
454:デフォルトの名無しさん
20/09/01 22:55:31.34 PZXbhIm5.net
>>401
Java
URLリンク(paiza.io)
455:253
20/09/02 00:54:35.54 GpxOT2yi.net
>>401 Python3
(n, a) = (3, [])
for i in range(1, n+1):
a.extend([i] * i)
print(a)
実行結果
~ $ python 18_393_incary.py
[1, 2, 2, 3, 3, 3]
456:デフォルトの名無しさん
20/09/02 23:08:34.85 KTyhBksd.net
>>402
Java
URLリンク(paiza.io)
457:デフォルトの名無しさん
20/09/02 23:31:10.43 KTyhBksd.net
>>403
Java
URLリンク(paiza.io)
458:デフォルトの名無しさん
20/09/03 16:10:13.26 dE9fk8zR.net
>>403 Ruby
def f(s,d)
eval("['"+s.gsub(d,"','")+"']")
end
p f("1 2 3 4"," ")
実行結果
["1", "2", "3", "4"]
459:蟻人間
20/09/03 19:41:51.27 0EoV326K.net
お題: バイナリファイルを読み込んで各バイトの各ビットについて、上位ビットから順に、ゼロをシフトJISの半角カナの「タ」に、いち(1)を同じくの「ヒ」に変換する変換器。
460:蟻人間 ◆T6xkBnTXz7B0
20/09/03 19:46:20 0EoV326K.net
>>451
追記。逆変換器も作って動作することを確認せよ。
461:デフォルトの名無しさん
20/09/03 21:11:58.06 97aiR77+.net
>>451 Ruby
Fpath = 'test.bin'
File.open( Fpath, 'wb' ){|fh| fh.write "Hello word\n" }
Tbl10 = "\xC0\xCB".force_encoding(Encoding::BINARY)
tb = (0..255).to_a.map{|x| ('%08b' % x).tr( '10', Tbl10 ) }
buff = File.open( Fpath, 'rb' ).each_byte.map{|x| tb[x] }
puts buff.join().encode( Encoding::UTF_8, Encoding::CP932 )
print buff.map{|x| x.tr( Tbl10, '10' ).to_i(2).chr }.join
#=> ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
#=> Hello word
462:デフォルトの名無しさん
20/09/03 23:01:51.02 ZdR77D/Z.net
>>450
f("'", ?,)
# =>SyntaxError: (eval):1: unterminated string meets end of file
[''']
^
(eval):1: syntax error, unexpected end-of-input, expecting ']'
463:253
20/09/04 00:01:38 7q8p4uRD.net
>>451 Perl5
print map{qw(ヒ タ)[$_]} map{split '', sprintf '%08b', ord} split'','Hello word';
実行結果
~ $ perl 18_443_タヒ.pl
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒ
464:デフォルトの名無しさん
20/09/04 00:03:39 0wfgbo8M.net
>>452
Java
URLリンク(paiza.io)
465:253
20/09/04 00:04:27 gbrpP/bR.net
>>455
>>452 逆変換機もか…忘れてた
まいいや
466:デフォルトの名無しさん
20/09/04 14:52:11.79 Wl7qFIBb.net
>>451
Elixir。CP932 が無いので、途中までしか出来ません!
# 8桁・2進数・0埋め
_ = 'abc'
|> Enum.map( fn char -> :io.format( "~8.2.0B", [ char ] ) end )
# 01100001_01100010_01100011
467:デフォルトの名無しさん
20/09/04 23:27:10.30 1jfeDIRi.net
>>451
POSIX sh
変換 (URLリンク(paiza.io))
for _b in $(od -v -A n -t d1); do
printf '%b' \
"\\$(( $_b & 128 ? 300 : 313 ))" \
"\\$(( $_b & 64 ? 300 : 313 ))" \
"\\$(( $_b & 32 ? 300 : 313 ))" \
"\\$(( $_b & 16 ? 300 : 313 ))" \
"\\$(( $_b & 8 ? 300 : 313 ))" \
"\\$(( $_b & 4 ? 300 : 313 ))" \
"\\$(( $_b & 2 ? 300 : 313 ))" \
"\\$(( $_b & 1 ? 300 : 313 ))"
done
逆変換 (URLリンク(paiza.io))
od -v -A n -t o1 |
fold -b -w 32 |
while read _b8 _b7 _b6 _b5 _b4 _b3 _b2 _b1; do
printf '%b' "\\$((
($_b8 == 300 ? 200 : 0) +
($_b7 == 300 ? 100 : 0) +
($_b6 == 300 ? 40 : 0) +
($_b5 == 300 ? 20 : 0) +
($_b4 == 300 ? 10 : 0) +
($_b3 == 300 ? 4 : 0) +
($_b2 == 300 ? 2 : 0) +
($_b1 == 300 ? 1 : 0) ))"
done
468:253
20/09/04 23:39:14.02 tinAGSqp.net
>>452 Perl5、バイナリコード(ln)を含むデータをファイルから読み込み、変換》逆変換
undef $/; # slurp
$s = <>;
@b = map{qw(ヒ タ)[$_]} split'', unpack 'B*', $s;
print @b, "\n";
%h = qw(ヒ 0 タ 1);
$t = pack 'B*', join '', map{$h{$_}} @b;
print $t;
実行結果
$ od -xc Hello_world_ln.txt
0000000 6548 6c6c 206f 6f77 6c72 0a64
H e l l o w o r l d \n
$ cat Hello_world_ln.txt
Hello world
$ perl 18_443_444_ヒタ.pl < Hello_world_ln.txt
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒタタヒヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
Hello world
469:デフォルトの名無しさん
20/09/05 15:41:23.97 dAk5cbFF.net
お題
UTF-8 は以下のように、先頭ニブル・4ビットで、1~4バイト文字を判別しています。
この法則を使って、この文字列のバイト数を求めよ
あaθ💀xΩ死🄫
1バイト文字: 0000~0111: 0~7
多バイト文字の2バイト目以降
1000~1011: 8~11(8~B)
2バイト文字: 1100~1101: 12~13(C~D)
3バイト文字: 1110: 14(E)
4バイト文字: 1111: 15(F)
Unicode
URLリンク(seiai.ed.jp)
470:デフォルトの名無しさん
20/09/05 15:42:06.74 gCThzAly.net
お題:
左から右へ、1から10までの番号が付いたマスが順番に隙間なく並んでいます。
今日、訪問者N人があなたに会いにやってきます。各訪問者i(1≦i≦N)は時刻TiにマスPiを訪れます。
ここで、あなたが時刻TiにマスPiに居たのならば「訪問者iは満足した」とします。
最大で何人の訪問者を満足させられるか求めてください。
制約:
最初、時刻は0とする。
あなたは最初、マス1にいる。
あなたは隣り合うマスへの移動手段しか持たない。
1マス移動した場合にも、移動せずに現在マスに留まった場合にも時間1を消費する。
Ti == Tj で Pi == Pj ならば i == j
1≦N ≦10^5
1≦Ti≦10^5
1≦Pi≦10
入力:
N
T1 P1
T2 P2
...
TN PN
出力:
(最大で何人を満足させられるか)
例1:
入力:
5
5 4
2 3
3 2
3 4
4 4
出力:
4
471:デフォルトの名無しさん
20/09/05 15:55:10.03 gCThzAly.net
前回のお題はC++の方からしか回答を頂けなかったので、他の言語の方も考えていただけると嬉しいです
472:デフォルトの名無しさん
20/09/05 17:01:13.99 4vfoT7Xn.net
Tが10^5のそれぞれのマスにいたときの点数を求める(客がいた場合1、いなかったら0)
Tが10^5-1のときのマスの点数を求める(そこに客がいたなら1、いなかったら0
更にそこから次の時間に移動可能なマスの最大の点数のものを加える)
Tが1までくり返す
これで良さそうな気がするけど書くのがめんどくさい
473:デフォルトの名無しさん
20/09/05 17:35:24.39 s0GYNWbk.net
>>461
「この文字列の文字数を求める」んじゃないの?
バイト数だったらUTF-8だろうがSJISだろうが関係なく,
バイトの個数を数えればいいだけになってしまうが……。
474:デフォルトの名無しさん
20/09/05 18:43:21.60 EHHCviTW.net
文字コードまわりの難しさにぶつかったことないから何が何やら
475:
476:デフォルトの名無しさん
20/09/05 19:37:20.09 PsWvtVS4.net
>>461 Ruby
文字数とバイト数を適当に出力
require "cgi"
require "cgi"
str = CGI.unescapeHTML( "あaθ💀xΩ死🄫" )
sbs = str.bytes
i = n = 0
while i < sbs.size
case sbs[i] >> 4
when 0..7; i += 1
when 8..11; warn "Error"
when 12,13; i += 2
when 14; i += 3
when 15
case sbs[i] & 0xF
when 0..7; i += 4
when 8..11; i += 5
when 12,13; i += 6
else warn "Error"
end
end
n += 1
end
puts "#{n} chars\n#{str.size} chars"
puts "#{str.force_encoding( Encoding::BINARY ).size} bytes\n#{sbs.size} bytes"
puts str.bytes.map{|x| '%02X' % x }.join(' ')
#=>
8 chars
8 chars
20 bytes
20 bytes
E3 81 82 61 CE B8 F0 9F 92 80 78 CE A9 E6 AD BB F0 9F 84 AB
477:デフォルトの名無しさん
20/09/05 19:47:45.16 EHHCviTW.net
普通に処理系がchar配列にしたときサイズを入れてくれるからそれでわかっちゃうw
478:453
20/09/05 21:41:42 dAk5cbFF.net
書いてある条件だけで、求めて下さい!
他の方法では、簡単すぎるので
479:デフォルトの名無しさん
20/09/05 21:46:41 qef5ttAc.net
それだったら宿題スレで頼みなよ
480:デフォルトの名無しさん
20/09/05 22:24:40.63 s0GYNWbk.net
>>469
もう一度訊くけど,
ほんとに「バイト数」を求めたいの?
だったら
$ echo ' あaθ💀xΩ死🄫 ' | wc -c
これで一瞬だけど。
文字数なら,UTF-8を扱える言語で数えるか,
POSIX shでやるなら……面倒だな……。
URLリンク(gist.github.com)
こういうの使えばいいかな。
なお,wc -mはPOSIXでは必ずしも
UTF-8文字列を扱えるとは既定されていないので今回の目的には適さない。
481:デフォルトの名無しさん
20/09/05 22:25:44.48 s0GYNWbk.net
>>462
これ結構難しい。
まず普通に算法を考える段階で行き詰まってるw
頭悪いな〜
482:デフォルトの名無しさん
20/09/05 22:49:41.81 BjVkDMA6.net
>>462 C
URLリンク(ideone.com)
483:253
20/09/06 00:11:00 Lo+HJN6n.net
>>388 Perl5
($H, $W) = split' ',<DATA>; @a = map{[split/\s*/]} <DATA>;
for $h (0..$H-1) { for $w (0..$W-1) {
$c = $a[$h][$w];
$S = "$h,$w" if $c eq 'S'; $G = "$h,$w" if $c eq 'G';
if ($c ne '#') {
$e{($h-1).",$w $h,$w"}++ if $h and $a[$h-1][$w] =~ /[.SG]/;
$e{"$h,".($w-1)." $h,$w"}++ if $w and $a[$h][$w-1] =~ /[.SG]/;
}}}
use feature qw{current_sub say}; no warnings 'experimental';
sub {
my $p = @_[-1];
for my $q (map{s/ *$p *//; $_} grep{/$p/} keys %e) {
if ($q eq $G) { $h{"@{[@_, $q]}"}++ }
else { __SUB__->(@_, $q) unless grep{/$q/} @_ }
}
}->($S);
say scalar keys %h;
__DATA__
5 5
S....
##.#.
...#.
...#.
....G
実行結果
~ $ perl 18_380_maze_paths.pl
12
484:253
20/09/06 00:30:27 WEZ/j7UH.net
>>474
今思うとエッジの表現は無向ではなく二重の有効グラフにしたほうが簡潔なコードになったかもしれない
まぁいいや…二度書く気は起きない…
485:デフォルトの名無しさん
20/09/06 00:34:53.48 T9SJW9BR.net
>>403
Kotlin
URLリンク(paiza.io)
区切りは文字列で指定出来るとか、大文字小文字無視とか、最大分割数を決められるだとか、色々と機能を追加してしまった。
486:デフォルトの名無しさん
20/09/06 03:34:19.13 0eLnTbkJ.net
お題
4999の逆数を小数点 以下48桁まで求める。
487:デフォルトの名無しさん
20/09/06 07:27:16.04 +WaXk/Ri.net
>>477 例外だけどbcコマンド
scale=48
1/4999
.000200040008001600320064012802560512102420484096
488:デフォルトの名無しさん
20/09/06 08:14:24.88 CxoRMtYI.net
>>477 Ruby
puts ('%0.49f' % (1r/4999)).chop
# => 0.000200040008001600320064012802560512102420484096
489:デフォルトの名無しさん
20/09/06 09:37:57.61 yqdZF37w.net
>>461 C++
URLリンク(ideone.com)
490:デフォルトの名無しさん
20/09/06 10:17:30.08 uXWEOXeO.net
>>462 C++
URLリンク(wandbox.org)
491:デフォルトの名無しさん
20/09/06 10:30:03.37 r+7yP+3C.net
>>473
>>474
これって二つとも総当たりで解いてる?
そうすると最悪3^(10^5)くらいの回数廻さないといけなくない?
492:デフォルトの名無しさん
20/09/06 10:58:30.52 5MBR0P77.net
1京くらいのループで解けるなら実用性はかろうじてある
競技性は無い
493:デフォルトの名無しさん
20/09/06 11:04:38.70 OF7UMaiS.net
最悪でも2^n組みしかなくね
494:デフォルトの名無しさん
20/09/06 11:07:12.07 uXWEOXeO.net
>>473 はlast_time(10^5)回のループの中でCOL(10)回ループ入れてるし、10^6では?
495:デフォルトの名無しさん
20/09/06 11:29:22.40 r+7yP+3C.net
>>484
いや,総当たりなら,3^(10^5)。
時刻が1--10^5までの間に,
「留まる」「右/左に移動する」の計3通りを
互いに独立に(以前の行動に影響されずに)
行うから。
書いていて思ったけど,端に居るときは
行動可能性が2通りに減るけど,
それでも2^N通りでは済まない。
496:253
20/09/06 12:24:42.87 cAaPNRIA.net
>>482
>>474は>>388への回答なので
その計算量の推定議論には該当しません
497:デフォルトの名無しさん
20/09/06 12:31:12.27 OF7UMaiS.net
>>486
1人が満足することで1点得るとする
点数の最大値は入力されたnの数しかないからn点で
それぞれについて1点得るか得ないかの2^nしかない
あとはそれを実現できるか移動があるかどうかが焦点になる
なので全移動経路を総当りする必要性はない
498:デフォルトの名無しさん
20/09/06 13:12:26.24 GcXxHJb3.net
>>477 C++
#include <iostream>
int main(){
const int d = 4999;
int n = 1;
std::cout << "0b0.";
for( int i = 1; i <= 48; ++ i ){
n <<= 1;
if( n >= d ){
n -= d;
std::cout << '1';
} else {
std::cout << '0';
}
}
std::cout << std::endl;
return 0;
}
// STDOUT
0b0.000000000000110100011100000111010100101011010001
499:デフォルトの名無しさん
20/09/06 13:48:19.34 r+7yP+3C.net
>>488
I see! Thanks.
500:デフォルトの名無しさん
20/09/06 15:12:48.21 JPL9qi8o.net
>>488
2^nも必要ないよ
それぞれの時刻でホストが取れる状態はどのマスにいるかということだけ
だから時刻xマスの数が全状態数
501:デフォルトの名無しさん
20/09/06 15:20:10 JPL9qi8o.net
でその状態数の方が全経路数より圧倒的に少ないので
経路に沿ってではなくて状態について解いていく
502:デフォルトの名無しさん
20/09/06 16:31:54 SNogxihD.net
>>477
Java
URLリンク(paiza.io)
503:デフォルトの名無しさん
20/09/06 16:34:17 r+7yP+3C.net
>>491
ん?
ホストは隣合うマスにしか移動できないから,
単純にその場面での状態を考えるだけでは駄目なんでは?
504:デフォルトの名無しさん
20/09/06 16:57:26.53 JPL9qi8o.net
だから遡って計算していくときは隣り合うマスの結果しか参照しないよ
505:デフォルトの名無しさん
20/09/06 17:01:50 SNogxihD.net
>>461
Java
URLリンク(paiza.io)
506:デフォルトの名無しさん
20/09/06 17:02:55 JPL9qi8o.net
>>473のコードは多分バグがある気がする
51行目と57行目を
a = score[j-1] + bit_test(timeline + i, j);
a = score[j+1] + bit_test(timeline + i, j);
こう変えて
43行目を
for(i = last_time-1; i >= 0; i--){
こうするのが正しいと思う
507:253
20/09/06 18:02:02 EhLQImvS.net
>>462 Perl5、人の訪問を待ち受け得るすべての場合を愚直に総当りで最大満足数を探す
$T = <DATA>;
use feature qw{signatures say}; no warnings 'experimental';
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p, $s) {
if ($t++ < $T) {
if (0 < $p and $p < 11) {
$s++ if grep/$p/, @{$p{$t}};
$s += max(f($t, $p-1, $s), f($t, $p, $s), f($t, $p+1, $s))
}
return $s
}
0
}
say f(0, 1, 0);
__DATA__
5
5 4
2 3
3 2
3 4
4 4
~ $ perl 18_454_N_vztr.pl
4
508:デフォルトの名無しさん
20/09/06 18:12:25.67 OF7UMaiS.net
>>462
python
URLリンク(ideone.com)
満足させる人数の多い順から実現可能か探索する
既に不可能だと分かっている移動が含まれる場合は直ちに打ち切る
509:デフォルトの名無しさん
20/09/06 18:13:41.84 65q5IvB9.net
>>498
perl読めないから間違ってたらごめんだが、
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
の入力で20を返してくる。(答えは5)
510:253
20/09/06 18:20:26.24 EhLQImvS.net
>>500
はい、バグってました。投稿してから気がついた
時間あったら直します
511:253
20/09/06 19:04:52.54 EhLQImvS.net
>>498 Perl5、>>497 のBug Fix、同じ所を何度も通るので漸化式かメモ化使って動的計画法で解けるようにできるかもしれない
use feature qw{signatures say}; no warnings 'experimental';
$T = <DATA>; chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p) {
my $s = 0;
if ($t <= $T) {
if (0 < $p and $p < 11) {
$s++ if grep{$_ eq $p} @{$p{$t}};
$t++;
$s += max(f($t, $p-1), f($t, $p), f($t, $p+1));
}
}
$s
}
say f(0, 1);
__DATA__
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
512:253
20/09/06 19:13:46.76 EhLQImvS.net
>>502 誤記スマソ
× >>497 のBug Fix
○ >>498 のBug Fix
513:465
20/09/06 20:59:44 I1QXsub5.net
>>497
ご指摘の通りバグってたので再投稿します。
URLリンク(ideone.com)
やりたかったことは>>464が言っていることと全く同じです。
イメージとしてはURLリンク(imgur.com) (※お題を考えたい人は閲覧注意)
>>473のコードは大抵の場合なぜかうまくいくコードのようです。
514:253
20/09/06 21:09:12 loE/lDca.net
>>462 Perl5、>>502 を動的計画法で解くように改良(但し再帰呼び出しを使っているので10^5など規模が大きい問題を解くなら下から上に計算してくる単純ループに書き換えた方が良い)
no warnings 'experimental';
use feature qw{signatures say};
$T = <>;
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<>;
use List::Util 'max';
sub f($t, $i) {
my $s = 0;
if (0 < $i and $i < 11) {
return $m[$t][$i] if defined $m[$t][$i];
$s++ if grep{$_ == $i} @{$p{$t}};
$s += max(f($t+1, $i-1), f($t+1, $i), f($t+1, $i+1))
if $t < $T;
$m[$t][$i] = $s;
}
$s
}
say f(0, 1);
515:253
20/09/06 21:11:43.16 loE/lDca.net
>>505 の実行結果
~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | perl 18_454_N_vztr_DP_rec.pl
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | perl 18_454_N_vztr_DP_rec.pl
5
516:253
20/09/07 00:59:21.14 5qB4CD7g.net
>>477 Perl5、小数点以下48桁で「丸め」
use bignum(p=>-48);
print 1/4999, "\n";
実行結果
$ perl 18_468_1_4999-48p.pl
0.000200040008001600320064012802560512102420484097
517:453
20/09/07 18:47:15.23 IF51aHwX.net
>>461
Elixir
ary = for << byte <- "あaθ💀xΩ死🄫" >> do # 1バイトずつ、ループ
<< nibble::size( 4 ), _::size( 4 ) >> = << byte >> # 先頭の4ビット
case nibble do
n when n in 0..7 -> 1
n when n in 8..11 -> 0
n when n in 12..13 -> 2
14 -> 3
15 -> 4
end
end
res = Enum.reject( ary, fn n -> n == 0 end ) # 0 を削除する
IO.inspect res
# [3, 1, 2, 4, 1, 2, 3, 4]
IO.puts( length res ) # 8文字
IO.puts( Enum.sum res ) # 20バイト
518:デフォルトの名無しさん
20/09/08 01:49:37.96 L2ZCtfX62
副業、大手も制度着々…コロナ禍、働き手は空き時間活用
URLリンク(www.itmedia.co.jp)
富士通「年収3500万円」の衝撃 ソニー、NECも戦々恐々の「グローバル採用競争」
URLリンク(www.itmedia.co.jp)
東大の起業ラッシュは本物か、大学発ベンチャー数日本一の実力
URLリンク(business.nikkei.com)
AI研究の第一人者、東大・松尾研でも起業ラッシュ
URLリンク(business.nikkei.com)
失敗は認める、多数決はダメ。拡大する「社会起業家集団」の作り方
URLリンク(newswitch.jp)
新卒“即”起業せよ。社会起業家への最短距離に挑む若者たち
URLリンク(newswitch.jp)
人々の共感を得られないと潰される時代。
URLリンク(news.yahoo.co.jp)
ゼロから起業するよりも事業承継(小さな会社の買収)が圧倒的に有利である3つの理由
URLリンク(honsuki.jp)
「エース人材だって起業OK」、NECは挑戦者が集う場をつくる
URLリンク(business.nikkei.com)
NECなど「出向起業」 大企業人材、起業しやすく
URLリンク(www.nikkei.com)
519:デフォルトの名無しさん
20/09/08 22:13:29.34 r41CjiKh.net
>>169
Java
URLリンク(paiza.io)
520:253
20/09/08 23:15:40.17 TMzoRSJV.net
>>462 go 動的計画法
package main
import ( "fmt" )
var m [][]int
func v(t int, p int) int {
if 1 <= p && p <= 10 { return m[t][p] }; return 0 }
func max3(n1 int, n2 int, n3 int) int {
n := n1; if n < n2 { n = n2 }; if n < n3 { n = n3 }; return n }
func main() {
var n, t, p, i, T int
fmt.Scan(&n)
var a [][]int = make([][]int, n)
for i=0; i<n; i++ {
fmt.Scanf("%d %d", &t, &p)
a[i] = []int{ t, p }
if t > T { T = t }
}
m = make([][]int, T+1)
for t=0; t<=T; t++ {
m[t] = make([]int, 11)
for p=1; p<=10; p++ { m[t][p] = 0 }
}
for i=0; i<n; i++ { m[a[i][0]][a[i][1]] = 1 }
for t=T-1; 0<=t; t-- {
for p=1; p<=10; p++ {
m[t][p] += max3(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
}
}
fmt.Println(m[0][1])
}
521:253
20/09/08 23:16:27.70 TMzoRSJV.net
>>511 の実行結果
~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | go run 18_454_N_vztr_DP.go
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | go run 18_454_N_vztr_DP.go
5
522:253
20/09/09 09:03:14 GqQ7+Mc6.net
>>462 Python3
n = int(input())
a = [list(map(int, input().split())) for i in range(n)]
T = max([a[i][0] for i in range(n)])
m = [[0] * 11 for t in range(T+1)]
for i in range(n):
m[a[i][0]][a[i][1]] = 1
def v(t, p):
return m[t][p] if 0 < p and p < 11 else 0
for t in reversed(range(T)):
for p in range(1, 11):
m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
print(m[0][1])
実行結果 (>>512 と同じテキストファイル 18_454_ex1.txt, 18_454_ex2.txt を入力に使用)
~ $ cat 18_454_ex1.txt | python 18_454_N_vztr_DP.py
4
~ $ cat 18_454_ex2.txt | python 18_454_N_vztr_DP.py
5
523:253
20/09/09 09:34:15.87 GqQ7+Mc6.net
>>513
for p in range(1, 11):
m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
を
for p in range(1, 11):
if t+1 < p: continue
m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
とか書くと、右上三角の不要な計算を省けるが10^5などtが大きいと大勢に影響はないな…
524:デフォルトの名無しさん
20/09/10 01:27:25.37 8z9ZctT6.net
>>358
Java
URLリンク(paiza.io)
525:453
20/09/10 16:14:51.93 ypm5ktrY.net
お題
>>461
のルールに基いて、以下の3つの10進数のバイト列を、先頭(1バイト目)からチェックしていく時、
最初にルール違反となるのは、何バイト目か
129 130
120 169
240 159 146 206 184
526:デフォルトの名無しさん
20/09/10 22:23:57.36 8z9ZctT6.net
>>516
Java
URLリンク(paiza.io)
527:デフォルトの名無しさん
20/09/12 21:24:36.97 2KEhs3KT.net
お題:自然数nが現れる九九の表の最小サイズを求めよ
octave
URLリンク(ideone.com)
528:デフォルトの名無しさん
20/09/13 00:20:13.60 OR+CcCGz.net
>>518
Java
URLリンク(paiza.io)
529:デフォルトの名無しさん
20/09/13 00:35:46.34 42xWDo9L.net
>>518
Kotlin
URLリンク(paiza.io)
良いアルゴリズムが思いつかなかったのでほとんど力技。
530:蟻人間
20/09/13 22:12:25.49 p9JSm0uj.net
お題: 「ジャンケンすたじあむ オンライン」というソーシャルゲームのウェブサイト、もしくはソフトウェアパッケージを制作・運営せよ。
ジャンケンをしたい人が集まって、ひたすらジャンケンをして、勝ち数を競うというソーシャルゲーム。
ジャンケン試合は2人組になり、お互いに出す手を事前に申告し、両者が申告したところでシステムが自動で勝敗を判定する。
531:デフォルトの名無しさん
20/09/13 22:17:50.99 phcl8RYj.net
>>521
消えろ
532:デフォルトの名無しさん
20/09/13 22:22:25.86 lu6eiMc4.net
動的計画法ってちゃんと勉強しないとなかなか思いつかないよな
533:デフォルトの名無しさん
20/09/14 12:06:08.48 u8/qg5cq.net
>>518
Haskell
f x = head [ d | d <- [(ceiling $ sqrt $ fromInteger x)..], mod x d == 0]
main = mapM_ print [(x,f x) | x<-[100..130]]
534:蟻人間
20/09/14 14:12:59.44 /Fwk/gkb.net
お題: 沖縄の名物「シークワーサー」のことが書かれた記事のUTF-8日本語テキストファイル「input.txt」がある。
しかし、記事の執筆に多数の編集者が関わったため、シークワーサーの表記がぶれていることが分かった(次のリンクを参照)。
URLリンク(ja.m.wikipedia.org)
表記のぶれを「シークワーサー」に表記を統一したテキストファイル「output.txt」を出力せよ。
535:デフォルトの名無しさん
20/09/14 17:05:19.85 xV8mpaUY.net
エンジニアが書いてるならシークワーサだな
間違いない
536:蟻人間
20/09/14 17:29:10.23 yesAwSRz.net
>>525 input.txtの中身:
「シークヮーサーは、別名シイークワシャーと呼ばれ、シークヮーサーの香りがするシークヮーシャーのような柑橘系の果物である。シィークアーサーはアーサー王とは関係がないと思われる。」
537:デフォルトの名無しさん
20/09/14 18:00:53.92 wBiJ2Dx0.net
"/シ(?:イ?ー|ィー?)ク[アワァヮ]ー?(?:サ|シャ)ー?/シークヮーサー/g"
538:蟻人間
20/09/14 20:32:57.79 /Fwk/gkb.net
お題: お使いのプログラム言語で、COBOLに負けない最強の通貨型を設計せよ。
任意の桁数の10進整数を扱えること。
任意の有効桁数の10進小数を扱えること(10進浮動小数点数)。
加減乗除、剰余、任意桁での切り捨て・切り上げ・四捨五入が可能。
10進数表記で入出力できること。
比較的高速に演算できること。
539:蟻人間
20/09/14 20:55:28.62 /Fwk/gkb.net
1÷3をどう扱うかという問題があるようだ。
540:デフォルトの名無しさん
20/09/14 21:04:18.95 I0h6BMX6.net
割り算するときに桁数していするだけっしょ
541:デフォルトの名無しさん
20/09/14 21:07:19.27 I0h6BMX6.net
蟻人間さんにお題:銀行丸めを整数型のみを使用して実装してください
542:デフォルトの名無しさん
20/09/14 21:08:24.84 SHGAz9ig.net
>>526
草
543:デフォルトの名無しさん
20/09/14 21:24:52.09 6FD493+N.net
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
544:デフォルトの名無しさん
20/09/14 21:26:17.95 6FD493+N.net
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
545:デフォルトの名無しさん
20/09/14 21:49:38.28 SHGAz9ig.net
分子や分母に分数が入ってきた場合
精度の面で面倒なことになるぞ
546:蟻人間
20/09/14 23:12:41.48 yesAwSRz.net
>>532
URLリンク(ideone.com)
今日はここまで。
547:デフォルトの名無しさん
20/09/14 23:41:27.65 5nyvo7WN.net
>>537
一生ここまでにしろ
548:デフォルトの名無しさん
20/09/15 00:21:13.43 2J2Mo0F/.net
>>525
sed -r 's/シ([イィ]ー?|ー)ク[アァワヮ]ー?(サ|シャ)ー/シークワーサー/g'
-r は拡張正規表現を使うオプション。
これで >>527 の文を変換するとこうなる。
「シークワーサーは、別名シークワーサーと呼ばれ、シークワーサーの香りがするシークワーサーのような柑橘系の果物である。シークワーサ ーはアーサー王とは関係がないと思われる。」
549:蟻人間
20/09/15 02:31:45.89 39uvi0pE.net
現実問題では、long double型で十分な精度が出るから、独自の浮動小数点数は必要なさそう。
残りは四捨五入とか銀行丸めなどの端数処理。
550:デフォルトの名無しさん
20/09/15 09:10:08.88 gc4PCUOV.net
工エエェェ(´д`)ェェエエ工
551:デフォルトの名無しさん
20/09/15 14:07:27.97 2J2Mo0F/.net
bc コマンド使えば良い。
他の言語から使いたい場合はライブラリをリンクするか、またはこっそり裏で fork(), exec() してパイプで繋いで計算させるw
552:蟻人間
20/09/15 21:40:23.58 9dtbuAF3.net
>>537
URLリンク(github.com)
今日はここまで。足し算、引き算、掛け算を実装。
銀行丸めはもうちょっと待ってね。
553:デフォルトの名無しさん
20/09/15 21:59:54.94 ky+PawN1.net
>>543
誰も待ってないから一生滞ってろ
554:蟻人間
20/09/15 22:50:58.78 i370J0Ri.net
>>544
スレチ
555:蟻人間
20/09/15 22:54:46.37 i370J0Ri.net
>>544
とりあえずまあソースコードを読んで頂いてクレヨン。
556:デフォルトの名無しさん
20/09/15 22:56:56.50 ky+PawN1.net
ここはお前の日記帳じゃねぇっての
スレチはお前
557:デフォルトの名無しさん
20/09/16 10:06:16.52 eJDvfDFO.net
ぶぶ漬けどうぞと言われて、美味しくいただいてさらに食レポまで始めてるような状態かな
558:デフォルトの名無しさん
20/09/16 21:28:53.90 XXyygoNj.net
嫌味なことするなよ
559:デフォルトの名無しさん
20/09/17 00:07:22.39 jOQPl4C7.net
京都のおっかさんも口あんぐりやで
560:デフォルトの名無しさん
20/09/17 01:09:05.65 FJaokp+J.net
>>529 Python decimal でできるだろ。
URLリンク(docs.python.org)
561:デフォルトの名無しさん
20/09/17 07:37:06.63 Lu9ZyyRf.net
お題: (複数行のバックグラウンド、座標テキスト、座標)から合成テキストを返す関数を作れ
座標テキストとバックグラウンドは同じサイズ(とりあえず横4縦3とする)
background
┏┓┏┓
┃┗┛┃
┗━┛
座標テキスト
ab23
9014
8765
座標が
0なら
┏┓┏┓
┃*┛┃
┗━┛
6なら
┏┓┏┓
┃┗┛┃
┗━*┛
11なら
┏*┏┓
┃┗┛┃
┗━┛
あまり綺麗な実装が出来なかったから問題にした URLリンク(repl.it)
562:デフォルトの名無しさん
20/09/17 08:03:03.74 dVFtUKnH.net
>>552 Ruby
def analogClockStr( h, bg, positions )
(clockStr = bg.dup)[ positions.index( h.to_s(16) ) ] = '*'
clockStr
end
background = '
┏┓┏┓
┃┗┛┃
┗━┛
'.strip.freeze
positions = '
ab23
9014
8765
'.strip.freeze
puts analogClockStr( 0, background, positions )
puts analogClockStr( 6, background, positions )
puts analogClockStr( 11, background, positions )
563:デフォルトの名無しさん
20/09/17 08:08:23.20 Lu9ZyyRf.net
げっ確かに行ごとにreplace必要ないじゃん
何やってんだ俺
ありがとう
564:デフォルトの名無しさん
20/09/17 13:17:16.17 GTUBgTcD.net
>>552
問題の意味がわからない。
565:デフォルトの名無しさん
20/09/17 13:30:29.78 /h1W7gqa.net
>>552
くだらない質問スレか初心者質問スレ行け
566:デフォルトの名無しさん
20/09/17 13:34:08.96 Lu9ZyyRf.net
ほんとにどの問題よりもクソみたいな問題だと思っています
本当にすいませんでした
567:デフォルトの名無しさん
20/09/17 13:42:30.73 Lu9ZyyRf.net
た�
568:セ私は純粋にプログラミングが好きで 全く質問したかったわけじゃないのはわかってほしい 二次配列じゃないと処理できないものだと勘違いしていたのが甘いしシンプルにしすぎて問題が破綻してしまった
569:デフォルトの名無しさん
20/09/17 13:48:33.25 Lu9ZyyRf.net
純粋にここにいる人たちが解法として書くコードは好きだし
たまに驚くべき角度から解を出す人もいるしマイナーなアルゴリズムも知れて尊敬してる
今回もスマートなコードが見れるんじゃないかと純粋に期待して問題にしてみたんだ
スレも今流れ遅かったし
570:デフォルトの名無しさん
20/09/17 13:50:39.09 Lu9ZyyRf.net
しかしお前らは牙を向いた
純粋に問題作成初心者の心を無碍にして
鋭い刃のような言葉を投げつけてきた
お前らは今日から敵とみなす
あばよ😎✋絶望しな
571:
20/09/17 19:40:19.09 +AujTTfU.net
>>560
奏ちゃん「自意識過剰なんじゃないですか?」
572:デフォルトの名無しさん
20/09/17 22:33:12.99 H8Ldt8Jg.net
お題:文字列の末尾の数字をインクリメントしてください
入力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS
出力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
573:デフォルトの名無しさん
20/09/17 22:56:25.54 ockp6LF+.net
>>562 vim
?\d<CR><C-a>
574:デフォルトの名無しさん
20/09/17 23:01:20.65 ockp6LF+.net
>>562 Ruby
$><<gets.sub(/\d+(?=\D+$)/, &:succ)
# => IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoim
M3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOn
xhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfP
sQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuu
UBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
575:デフォルトの名無しさん
20/09/18 01:44:05.02 hhldwLbP.net
>>562
Perl
コマンドラインで以下のように入力後に標準入力から文字列を読ませると標準出力に出力される。
perl -pe 's/(\d+)(\D+)$/($1+1).$2/ge'
あるいはファイルに内容を入れておいてそのファイルを指定する。
576:デフォルトの名無しさん
20/09/18 03:22:29.90 Pz26zoiQ.net
js
window.prompt().replace(/\d(?=\D+$)/,i=>i*1+1)
577:デフォルトの名無しさん
20/09/18 06:23:31.29 QICqPxzN.net
>>565
行末が数字のときに対応できない
perl -pe 's/(\d+)(\D*)$/($1+1).$2/e'
のほうがよくないかな
578:デフォルトの名無しさん
20/09/18 06:53:31.48 5l49iFOd.net
>>520
その場合の良いアルゴリズムって
「素因数分解を早く解くアルゴリズム」
よね。
それがもし思いついたらフィールズ賞ものではw
579:デフォルトの名無しさん
20/09/18 21:10:31.47 JxxZTRpA.net
>>562
Java
URLリンク(paiza.io)
580:デフォルトの名無しさん
20/09/18 21:36:05.11 JxxZTRpA.net
>>553
Java
URLリンク(paiza.io)
581:デフォルトの名無しさん
20/09/18 21:54:28.27 WsEcPr9A.net
>>562
haskell
theStr = "B0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS"
f x = let
(a,b) = span (\x-> (x<'0') || (x>'9')) $ reverse x
c = show $ (+1) $ read $ return $ head b
in reverse $ a++c++(tail b)
main = do
print $ f theStr
582:デフォルトの名無しさん
20/09/18 23:21:52.09 hhldwLbP.net
>>567
そうだった。 + じゃなくて * だったな。
583:253
20/09/18 23:34:45.95 /yEGF/vF.net
>>568
素因数分解まで行かない。
素でなくてもいいので因数のうちイチバン大きいもの。
なんかいい解法見つけられないか、考えているけどいまのところ見出せていない
584:253
20/09/18 23:36:27.35 /yEGF/vF.net
いや、違うな…
因数のうちイチバン大きいものでは、ダメだわ
585:デフォルトの名無しさん
20/09/19 00:05:40.30 HLFklpM8.net
>>562
C
URLリンク(paiza.io)
正規表現を使わずに行末から一文字づつ行頭に向かって検索してやっている。
586:デフォルトの名無しさん
20/09/19 00:59:21.89 HX0Lirqs.net
√n以上の最小の約数
587:デフォルトの名無しさん
20/09/19 12:14:05.54 iLwsU5Ay.net
初出題
数学板の問題より
5つのサイコロの1~6の面がそれぞれ赤白黄青緑にそれぞれ
["byrbwg", "yrgwbb", "gbrwwy", "gyrbww", "gbrybw"]
と塗り分けられている
この状態では1-6を天地の軸として2~5の側面にはそれぞれ
["yrbyb","rgrrr","bwwby","wbwwb"]
となっている
それぞれのサイコロを適当に回転させて全ての側面にrwybgがちょうど一回ずつとなるようにしたい
そのような回転の組み合わせは何通りか
本質的に同じものを重複して数えるのを避けるために最初のサイコロの回転は
・動かさない
・1→2,2→3,3→1,4→6,5→4,6→5
・1→3,2→1,3→2,4→5,5→6,6→4
の3つのうちどれかのみを許すとする
(出力)
["yrbgbw","gbybrw","bgwryw","bygwwr","bwrygb"]
["yrbgbw","gbybrw","wywrgb","rwgwyb","bgrywb"]
["rbywgb","gyrbbw","wwgyrb","ygbrww","brwgyb"]
["rbywgb","wybrbg","wwgyrb","wgrbwy","brwgyb"]
588:デフォルトの名無しさん
20/09/19 15:12:41.86 BWMKzapi.net
スレリンク(math板:133番)-
わけわからん問題文にするなよ・・・
589:デフォルトの名無しさん
20/09/19 16:07:21.18 wSOXcncc.net
全然違って草
590:デフォルトの名無しさん
20/09/19 16:29:35.90 HLFklpM8.net
>>577
君が何を言わんとしているのかが全くわからない。
591:253
20/09/19 17:15:41.66 6KnxgpBj.net
>>518 Perl5、>>576にヒントを貰った通り√を使ってnaiveに書くと…
use POSIX 'ceil';
for $n (81, 87, 91) {
$r = ceil sqrt $n;
for ($r..$n) {
$i = $_;
last until $n % $_;
}
print "$n => $i\n"
}
実行結果
~ $ perl 18_509_99_naive.pl
81 => 9
87 => 29
91 => 13
計算量の少ないもう少しカッチョイイ方法を見出せればなぁ…
592:デフォルトの名無しさん
20/09/19 21:37:57.70 HX0Lirqs.net
>>577です
やはりちょっと伝わらないですね
>>577
は取り下げます
593:デフォルトの名無しさん
20/09/19 21:39:46.15 HX0Lirqs.net
>>581
計算量減らすなら√n以下の最大の約数d求めてn/dを出力すれば計算量は減るな
594:デフォルトの名無しさん
20/09/19 21:40:46.29 wSOXcncc.net
減るというかそもそも計算量が同じというか
595:デフォルトの名無しさん
20/09/19 21:46:21.17 HX0Lirqs.net
イヤnが素数の場合に√nから上むきに探索すると計算量はnになるけど下向きなら√nになる
√n以上の約数と√n以下の約数は同数だけど整数そのものは下側には√nしかなく、上にはn-√nあるので下向きに探していった方が速い
596:デフォルトの名無しさん
20/09/20 00:25:54.87 ZGoKBb8Y.net
ポラード・ロー法使えばもっと計算量は減る
素数判定と組み合わせればモンテカルロ法ではなくラスベガス法になるから、正当性も担保される
597:デフォルトの名無しさん
20/09/20 01:39:54.18 wHMtOvf4.net
素因数分解利用するなら素因数分解そのものが手早くできてもダメでしょ?
それを何個か使って最も√nに近いもの探すのはかなり難しいんじゃなかったっけ?
つまり素因数分解n=Πpi^eiが与えられたとして、つぎは
0≦xi≦eiを動かすときΣxi log(pi) が1/2 log(n)に最も近くなるものを決定しなければならない
コレなんか名前ついてる問題で指数オーダーのアルゴリズムしか見つかってないんじゃなかったっけ?
素因子の数はlog(n)のオーダーで増えていくから、結局exp(c log(n)) のオーダーになって、cがどれくらいに収められるか、そもそも指数オーダー必要なのかも未解決なんじゃなかったっけ?
598:デフォルトの名無しさん
20/09/20 06:22:49.81 OZ4qNDWZ.net
>>585
素数判定はそもそも計算量少ない
599:デフォルトの名無しさん
20/09/20 10:19:03.22 mk/D54YH.net
>>588
√n以上の最小の約数をdとして上むき探索に必要な時間はすうがく/d-√n\、下向き探索のそれは\√n-n/d/ (/~\と\~/はfloorとceiling)
差は/d-√n\-\√n-n/d/ =\d+n/d-2√n/はam≧gmと\~/の広義単調性から0以上で上むき探索は素数であるか否かに限らず常に計算量は同じかそれ以上
素数であるか予備検査しても結局上向きに探索したら計算量は同じ以上かかる
600:デフォルトの名無しさん
20/09/20 10:50:48.99 g28HruB5.net
あ、間違えた
上向き探索の探索量はd-/√n\+1=/d-√n+1\で/~\はceiling
下向き探索の探索量は\√n/-n/d+1=\√n-n/d+1/で\~/はfloor
まぁ常に上向きの方が計算量は増える
まぁもちろんnをまともに素因数分解して>>587みたいな方法で√nオーダーより真に早いのがあるなら上向きも下向きもないけど、もうそこまで行ったら研究者レベルの話でしかない気がする
601:デフォルトの名無しさん
20/09/20 11:23:17.24 MLu0Cj9r.net
>>559-560
短いこの間でダークサイドに堕ちてて草
602:デフォルトの名無しさん
20/09/20 11:58:05.82 FaUtZa6z.net
>>591
お詫び→弁解→言い訳→逆ギレ
冷静に書いてたつもりが書いてくうちに興奮して見事なコンボを決めたようだ
603:デフォルトの名無しさん
20/09/20 12:47:09.77 MLu0Cj9r.net
感情豊かでかわいいw
604:デフォルトの名無しさん
20/09/20 12:59:00.77 wHMtOvf4.net
気分を変えてまた数学板より
自然数nに対して格子点の集合{(a,b) | a,bは1~nの整数}の中の相異なる4点の組みで同一円周上に並ぶものの個数を数え上げよ
n:1~8では
[0,1,14,194,826,2491,6364,14564]
のハズ
605:デフォルトの名無しさん
20/09/20 13:05:52.02 wHMtOvf4.net
>>594
ちなみにn=3の場合の14個は
1×1の正方形:4個
2×2の正方形:1個
√2×√2の正方形:1個
2×1の長方形:4個
4辺が1,1,√2,2√2の等脚台形:4個
の14個
606:デフォルトの名無しさん
20/09/20 18:36:43.29 XyOg3AIQ.net
>>594
URLリンク(ideone.com)
{0,1,14,184,762,2257,5704,13040}と出たんだが
どっちが合ってる?
607:デフォルトの名無しさん
20/09/20 18:44:44.75 XyOg3AIQ.net
一直線上にある4点の組を余分に数えたところ >>594 の解と一致した
URLリンク(ideone.com)
608:デフォルトの名無しさん
20/09/20 18:56:48.73 wHMtOvf4.net
あ、ホントだ失礼しました
609:デフォルトの名無しさん
20/09/20 19:10:27.22 wHMtOvf4.net
[0,1,14,184,762,2257,5704,13040]
が正解ですね
URLリンク(ideone.com)
610:デフォルトの名無しさん
20/09/20 22:46:33.41 9sb+TTLg.net
>>594
問題がわからない。
611:デフォルトの名無しさん
20/09/21 00:11:09.46 ZXxiMs6i.net
>>600
n=3だと
●●◯ ◯●● ◯◯◯ ◯◯◯
●●◯ ◯●● ●●◯ ◯●●
◯◯◯ ◯◯◯ ●●◯ ◯●●
●◯● ◯◯◯ ●●◯ ◯●●
●◯● ●◯● ◯◯◯ ◯◯◯
◯◯◯ ●◯● ●●◯ ◯●●
●●◯ ◯●● ◯◯● ●◯◯
◯◯● ●◯◯ ◯◯● ●◯◯
◯◯● ●◯◯ ●●◯ ◯●●
●◯● ◯●◯
◯◯◯ ●◯●
612: ●◯● ◯●◯ の14通り
613:デフォルトの名無しさん
20/09/21 11:36:08.07 VFD1LGbi.net
>>594のお題は、
平面上に4点を選んだとき、その4点をすべて含む円周が存在する場合としない場合がある
xy平面上に、x,yの各座標が1~nの整数であるような、互いに異なる点を4つ選んだとき、4点すべてを含む円周が存在するものがいくつあるか?
n=1~8についてそれぞれ数え上げよ
(註:n=1のときは異なる4点を選べないので、解は0でよい)
ってことでいいかな?
614:デフォルトの名無しさん
20/09/21 13:45:14.08 tVxoOCVr.net
>>601
n=4 のときの184通り
URLリンク(imgur.com)
615:デフォルトの名無しさん
20/09/21 14:54:29.54 /KyZWHiy.net
>>603
正解だと思う
おそらくn=9までは
[0,1,14,184,762,2257,5704,13040,25996]
今作ってるのはC[n^2,4]を全数検査してるのでO(n^8)で計算量増えるので二桁以上はしんどいorz
616:デフォルトの名無しさん
20/09/22 00:03:46.43 jIz1rAqD.net
誰かフォルダにパスワード駆ける方法教えてくれ
617:253
20/09/22 02:15:18.79 jDcMk3G3.net
対象性を考慮する以外の計算量の削減手段はないのかねこの手の問題は
解決すべき課題は計算量の削減ばかりではないだろうけれどさ
618:デフォルトの名無しさん
20/09/22 09:28:15.64 yucbsR+t.net
まぁ何に重きを置くかですな
数学板でこの手のプログラムが必要になるのは誰も答え持ってなくて、一応答えは出てるけど確認したいときとか
その時は速度より“確実に正しい”事の方が重要になる
この場合も対称性やら、明らかに無駄な可能性を排除すれば速度は上がるけど“確実に正しい”のかは怪しくなってしまう
実務でプログラム使う人もその辺のtpoは意識してるのでは?、
コード汚くても高速な奴も募集中
619:デフォルトの名無しさん
20/09/22 11:56:55.93 LgsCAwYw.net
>>603に挙げられている184通りのうち、その3/4にあたる138通りが、直径が√10のものである
そのうち、円の中心が図の中央にあるものは、候補となる点が8個あるので、8C4 = 70 通りある。
図の中央から(±1,0)または(0,±1)ずれたものは、候補となる点が6個なので4×(6C4)=60通り
図の中央から(±2,0)または(0,±2)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
図の中央から(±1,±1)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
合わせて 70+60+4+4=138 通りと数え上げることができる
図の中央を基準にすることができるものばかりとは限らないところには注意が必要だが
総当たりよりは効率化が見込めると思われる。
620:253
20/09/28 22:51:28.57 mT2w1+AU.net
>>518 Python3, >>585を参考に計算量を√nに減らした解法
import math
for n in [81, 87, 91, 13]:
s = math.sqrt(n)
f = n
for i in reversed(range(2, 1 + math.floor(s))):
q, m = divmod(n, i)
if m == 0: f = q; break
print(n, '=>', f)
実行結果
~ $ python 18_509_99_rootn.py
81 => 9
87 => 29
91 => 13
13 => 13
もっとスマートな解法を考えていると双曲線を意識した解法を意識してしまうが、
簡単には解けない数学の問題に突き当たると思う
621:253
20/09/28 22:53:47.02 mT2w1+AU.net
>>609
× 意識した解法を意識してしまうが、
○ 意識した解法を思い浮かべてしまうが、
622:デフォルトの名無しさん
20/09/29 18:23:40.44 TPx3FsW2.net
お題: バブルソートを実装せよ
623:253
20/09/29 23:24:18.49 219xwwXO.net
>>611
プログラミングのお題スレ Part13
スレリンク(tech板:231番)
624:デフォルトの名無しさん
20/09/30 20:15:38.19 rtPyMlCZ.net
古参はここで「番兵おけやボケェ!」と言う
625:デフォルトの名無しさん
20/10/01 01:25:55.75 cJ6xF5hb.net
お題:
アッカーマン関数の引数が与えられるので、計算過程を1ステップずつ出力してください
入力:
2 1
出力:
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5
626:デフォルトの名無しさん
20/10/01 11:20:33.49 iee67Noq.net
>>614
Haskell
astr m n = "A(" ++ m ++ "," ++ n ++ ")"
ack' 0 n = (n+1, [astr (show 0) (show n), (show $ n+1)])
ack' m 0 = let
(val, ss) = ack' (m-1) 1
in (val, (astr (show m) (show 0)) : ss)
ack' m n = let
(val1, ss1) = ack' m (n-1)
(val2, ss2) = ack' (m-1) val1
ss = [astr (show $ m-1) s | s <-ss1] ++ (tail ss2)
in (val2, (astr (show m) (show n)):ss)
ack m n = map (++"\n") $ snd $ ack' m n
main = do
[x,y]<-(return.(map read).words)=<<getLine
mapM_ putStr $ ack x y