[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/12 17:52 / Filesize : 270 KB / Number-of Response : 1028
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2019/11/17(日) 09:00:22.10 ID:xqEdXdr6.net]
プログラミングのお題スレです。

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

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

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

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

※前スレ
プログラミングのお題スレ Part15
mevius.5ch.net/test/read.cgi/tech/1564310397/

331 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 22:45:37.77 ID:myBFLrpG.net]
お題:ハノイの塔の最少手数は一種類しかないのか?
  (Part 13, 055)

結果:n枚の円盤すべてを移動させるには最低 2^n −1 回の手数がかかる。

332 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 22:58:29.31 ID:myBFLrpG.net]
4ピンのハノイの塔(河内塔)
n枚の円盤は最初ピン0にある。n枚すべてをピン3に移動させる。

条件:
 小円盤の上に大円盤を載せられない。
 ピン1とピン2には最大1枚しか置けない。

333 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 23:12:15.95 ID:myBFLrpG.net]
・n=2 のとき
12, -, -, -
2, 1, -, -
-, 1, -, 2
-, -, -, 12  (3手)

・n=3 のとき
123, -, -, -
23, 1, -, -
3, 1, 2, -
-, 1, 2, 3
-, 1, -, 23
-, -, -, 123  (5手)

・n=4 のとき
1234, -, -, -
234, 1, -, -
34, 1, 2, -
4, 1, 2, 3
4, 1, -, 23
-, 1, 4, 23
2, 1, 4, 3
12, -, 4, 3
12, 3, 4, -
12, 3, -, 4
12, -, -, 34
2, 1, -, 34
-, 1, -, 234
-, -, -, 1234  (13手)

334 名前:デフォルトの名無しさん mailto:sage [2019/12/15(日) 23:25:59.52 ID:myBFLrpG.net]
・n=5 のとき
12345, -, -, -
2345, 1, -, -
345, 1, 2, -
45, 1, 2, 3
45, 1, -, 23
45, -, -, 123
5, 4, -, 123
-, 4, 5, 123
4, -, 5, 123
4, 1, 5, 23
24, 1, 5, 3
124, -, 5, 3
124, 3, 5, -
124, 3, -, 5
24, 3, 1, 5
4, 3, 1, 25
4, 3, -, 125
-, 3, 4, 125
3, -, 4, 125
3, 1, 4, 25
23, 1, 4, 5
23, 1, -, 45
3, 1, 2, 45
-, 1, 2, 345
-, 1, -, 2345
-, -, -, 12345  (25手)

335 名前:デフォルトの名無しさん [2019/12/16(月) 08:07:19.12 ID:YuYKZXFs.net]
お題:

ここに単語を登録したリストがある
リストには以下の種類の言葉が存在する

単語:(例)くさり
単語解説:(例)環状の部品を繋げて線状にしたもの

リストには上記ペアを1単位として、ずらずら並んでいる
(数十個くらい)

リストの中の似たような単語を探し、
以下のサンプルのようにボケ、ツッコミを繰り返すプログラムを作れ
似たような単語が見つからない場合には
最後に「こうじ:お前とはもうやってられませんわ」とprintし、
プログラムを終了せよ

動作サンプル:
こうじ:「くさび」を見ると興奮するよね
てつお:ああ、環状の部品を繋げて線状にしたものね
こうじ:それは「くさり」
てつお:ああ、マルスダレガイ科に属する二枚貝ね
こうじ:それは「あさり」
てつお:ああ、慰安婦の嘘を書いた新聞ね
こうじ:それは「あさひ」
こうじ:お前とはもうやってられませんわ

336 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 09:38:23.88 ID:UpTR80vx.net]
>>326
・n≧6のとき
ピン1とピン2には各1個しか置けないから 1〜(n-1) を置くことはできない。
∴ n を ピン0 から ピン3 に直送することはできない。
∴ ピン0 → ピン1 → ピン3 と送ろう。
まず 12345 をピン2、ピン3に退避する。(n=6の場合)
 123456, -, -, -
 6, -, m, 12345-m  (1≦m≦5)
 6, -, -, 12345    は m=1 と見なす。
 -, 6, m, 12345-m
次にピン3を空けるため、ピン0とピン2に移すことになる。
しかしピン0には3枚しか移動できず、ピン3に n-5枚残ってしまう。
∴ n≧6 では不可能。

337 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 10:03:17.28 ID:UpTR80vx.net]
条件を変えたらどうなるか?

条件(1,1)
 ピン1、ピン2には最大で1枚しか置けない。   >>326

条件(1,2)
 ピン1には最大で1枚、ピン2には最大で2枚しか置けない。

条件(2,2)
 ピン1、ピン2には最大で2枚しか置けない。

338 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 12:12:45.33 ID:ZZ8St2Js.net]
>>331
pin1,pin2に置ける枚数(の合計)に上限があれば
移動可能枚数に上限がつく

339 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 14:51:32.32 ID:b9yK9thh.net]
>>314
common lisp
(format t "~R" 16776960)
sixteen million, seven hundred and seventy-six thousand, nine hundred and sixty



340 名前:デフォルトの名無しさん mailto:sage [2019/12/16(月) 15:02:43.75 ID:b9yK9thh.net]
>>317
perl5

cat digits
2019
102030
123

cat digits | perl -lane '$zero = 0; while (s/0//) {++$zero}; print $_ . "0" x $zero;'
2190
123000
123

341 名前:デフォルトの名無しさん [2019/12/16(月) 17:56:02.69 ID:rcGH9Ke6.net]
>>317 Ruby

def f(n)
n.to_s.chars.partition{|x| x !="0"}.join .to_i
end

342 名前: mailto:sage [2019/12/16(月) 20:29:58.89 ID:NZyGx79l.net]
>>326
これ昔やったことがありますが、すっかり忘れてしまったのは残念ですね…

343 名前:デフォルトの名無しさん [2019/12/16(月) 22:11:10.55 ID:Ppfui4Eb.net]
>>317 PowerShell
function f($n) {($n -replace "0", "") + ($n -replace "[^0]", "")}

344 名前:デフォルトの名無しさん [2019/12/17(火) 01:24:02.19 ID:XiWpNBJ4.net]
>>317 Common Lisp
https://ideone.com/2BlyuC

345 名前:デフォルトの名無しさん [2019/12/17(火) 04:04:38.21 ID:XiWpNBJ4.net]
>>317 Common Lisp
>>338は間違いでした
修正版: https://ideone.com/YaImKC

346 名前:デフォルトの名無しさん [2019/12/17(火) 13:17:36.43 ID:EDJKyz+u.net]
>>317 julia
function f(n)
  r = ""
  for c = reverse(string(n))
    if c == '0'
  r = r * c
    else
      r = c * r
    end
  end
  parse(Int, r)
end

347 名前:デフォルトの名無しさん mailto:age [2019/12/17(火) 17:33:51.45 ID:/DSBUbt2.net]
お題
任意の文字列からaが連続する最も長い長さを出力してください

入力:acgtaattgaaagggtctt
期待値:3

348 名前:デフォルトの名無しさん [2019/12/17(火) 18:10:05.60 ID:Etag1t/i.net]
>>341 Common Lisp
https://ideone.com/mkHEii

349 名前:デフォルトの名無しさん [2019/12/17(火) 18:50:00.42 ID:Etag1t/i.net]
>>342
うん? またバグってた

>>341 Common Lisp
https://ideone.com/JLYXZw



350 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 19:34:15.94 ID:JvBVW/sd.net]
>>317 C++
数値のままやってみた

https://ideone.com/iUEQFI

351 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 20:02:20.13 ID:bKU/e1zO.net]
>>341 Ruby
p 'acgtaattgaaagggtctt'.gsub(/[^a]+/,' ').split.uniq.sort_by{|s| s.size}.last.size

352 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:06:34.08 ID:eGUcswGM.net]
お題

1〜1,000 の整数の内、3 か5 の倍数だけを選んで、その合計を求めよ

353 名前:デフォルトの名無しさん [2019/12/17(火) 21:42:29.19 ID:p+XnOFki.net]
>>346
Rで2通りの求め方

d <- c(3, 5, -3 * 5)
q <- 1000 %/% d
cat(sum(d * q * (q + 1) / 2), "\n")
cat(sum(which(1:1000 %% 3 == 0 | 1:1000 %% 5 == 0)), "\n")

--- 実行結果 ---
234168
234168

354 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:42:34.96 ID:Q1C16S4i.net]
>>341 Ruby

p 'acgtaattgaaagggtctt'.scan(/a+/).max.size # => 3


>>346 Ruby

p 0.step(1000,3).sum + 0.step(1000, 5).sum - 0.step(1000, 15).sum # => 234168

355 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 21:45:36.79 ID:Q1C16S4i.net]
>>348
typo
/a+/ => /a*/

356 名前: mailto:sage [2019/12/17(火) 21:47:21.34 ID:780pCLgH.net]
お題:ファイル名の一部に空白文字が使える OS(出題者想定は Windows7) の元で、正常に argc, argv を切り出せるスタートアップ支援ルーチンを作ってください
"" で囲まれている文字列は、それが一つのファイル名またはディレクトリ名として扱うこととし、"" で囲まれていない空白は引数の区切りとします
int main() {
rearrange(...);
...
と main の頭に置いて、xargc, xargv を代わりに使う、見たいな感じでお願いします

例によって私が痛切に欲しいと思っているものです…

357 名前:デフォルトの名無しさん mailto:sage [2019/12/17(火) 23:55:17.00 ID:jG+XSsUd.net]
>>341は簡単すぎるので、
任意の文字列から連続してる文字が最も長い文字とその文字数を求めよ
最も長い文字が複数ある場合は全て出力すること
入力:acgtaattgaaagggtctt
期待値: ("a", 3), ("g",3)

358 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 00:00:22.88 ID:mWocJHci.net]
期待値
の意味って学校で習わなかった?

359 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 00:01:42.93 ID:i+6d3gEf.net]
>>350
依頼禁止



360 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 00:09:07.64 ID:i+6d3gEf.net]
>>346 C

int s(int n){ return (1000/n)*(1000/n+1)/2*n; }
int main(){ return s(3)+s(5)-s(15); }

361 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 00:12:20.91 ID:i+6d3gEf.net]
int main(){ return 234168; }

で良い気がしてきた

362 名前:デフォルトの名無しさん [2019/12/18(水) 00:13:22.10 ID:LTf ]
[ここ壊れてます]

363 名前:Q+mrC.net mailto: 戦が始まります []
[ここ壊れてます]

364 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 00:28:03.60 ID:i+6d3gEf.net]
どうせコンパイルしたら>>355になる

365 名前:デフォルトの名無しさん [2019/12/18(水) 01:55:09 ID:JeMlTDQr.net]
>>351 Common Lisp
https://ideone.com/Ox6TCK

366 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 06:09:15.93 ID:6RKB+CQ3.net]
>>351 Ruby

p 'acgtaattgaaagggtctt'.scan(/((.)\2*)/).group_by{|s, _| s.size}.max&.last&.map{|s, c| [c, s.size]}

# => [["a", 3], ["g", 3]]

367 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 10:45:51.93 ID:AmwvkO78.net]
acgtが出てくんだからながさ1億の文字列なんじゃね

368 名前:蟻人間 mailto:sage [2019/12/18(水) 11:33:42.87 ID:Zo1XP656.net]
>>350
__getmainargs

369 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 12:47:12.26 ID:Xcao9p4E.net]
acgtが出てくんだからDNA配列だろな。
 a=adenine, c=cytosine, g=guanine, t=thymine
ながさ30億の塩基対なんぢゃね?(ヒトの場合)



370 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:00:45.28 ID:Xcao9p4E.net]
>>331
・n=7 のとき
 条件(1,2) または 条件(2,2) とする。
 1234567, -, -, -
  (>328)
 67, -, -, 12345
 7, 6, -, 12345
 -, 6, 7, 12345
 6, -, 7, 12345
  (>327)
 12346, -, 7, 5
 12346, 5, 7, -
 12346, 5, -, 7
 12346, -, 5, 7
   (>327)
 6, -, 5, 12347
 6, 5, -, 12347
 -, 5, 6, 12347
 5, -, 6, 12347
   (>327)
 12345, -, 6, 7
 12345, -, -, 67
   (>328)
 -, -, -, 1234567
にて可能。

371 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:04:26.11 ID:iEIErwam.net]
(1,2)で8
(2,2)だと12
までは出来たぞ

372 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:06:11.00 ID:iEIErwam.net]
(1,3)で11

紙と鉛筆で考えただけなんで
もっと出来るかも

373 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 13:29:12.80 ID:iEIErwam.net]
(n,1)=3n+2

(2,2)以上だと
(m, n)=4(n+m-1)

まではいける

374 名前:デフォルトの名無しさん [2019/12/18(水) 14:02:18.59 ID:1FTJXM5f.net]
>>317
Kotlin
https://paiza.io/projects/-YDoyhCoGEt6IlVbBdxNyA

実は数字かどうかではなく '0' かどうかで見てるだけ。

375 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 14:58:11.70 ID:Xcao9p4E.net]
>>331
・n=8のとき
 条件(1,2) または 条件(2,2) とする。
 12345678, -, -, -    (>328)
 678, -, -, 12345
 78, -, 6, 12345      (>328)
 1234578, -, 6, -
 1234578, -, -, 6     (>328)
 78, -, -, 123456
 8, 7, -, 123456
 -, 7, 8, 123456
 7, -, 8, 123456      (>328)
 123457, -, 8, 6
 123457, 6, 8, -
 123457, 6, -, 8
 123457, -, 6, 8      (>328)
 7, -, 6, 123458
 7, 6, -, 123458
 -, 6, 7, 123458
 6, -, 7, 123458      (>328)
 123456, -, 7, 8
 123456, -, -, 78     (>328)
 6, -, -, 1234578
 -, -, 6, 1234578     (>328)
 12345, -, 6, 78
 12345, -, -, 678     (>328)
 -, -, -, 12345678
にて可能。

・n=9 は 条件(1,2) では無理か・・・・

376 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 16:04:48.01 ID:iEIErwam.net]
(0,0)=1
(n,m)=(n+2)(m+2)-4

ですかね

377 名前:デフォルトの名無しさん [2019/12/18(水) 21:05:50.74 ID:WdZQqUwr.net]
>>359
Rでrle関数を使って楽々

MaxRepChar <- function(s) {
 if (!nchar(s)) return(invisible())
 r <- rle(unlist(strsplit(s, "")))
 b <- r$lengths == max(r$lengths)
 cat(sprintf('("%s", %d)', r$values[b], r$lengths[b]), sep = ", "); cat("\n")
}

MaxRepChar("acgtaattgaaagggtctt")
MaxRepChar("mevius.5ch.net/test/read.cgi/tech/1573948822/")

-- 実行結果 --
("a", 3), ("g", 3)
("t", 2), ("/", 2), ("8", 2), ("2", 2)

378 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 21:06:21.05 ID:H5ShkPcr.net]
f(m, n) : 動かせる最大枚数

m≧n≧1の時

x=f(m-1,n)
A:1,2,3,...,x
B:x+1,...,x+n
C:x+n+1
D:x+n+2

ABCD, -, -, -
CD, -, -, AB
C, D, -, AB
AC, D, -, B
AC, -, -, BD
C, -, - ABD
-, C, -, ABD
A, C, -, BD
A, -, -, BCD
-, -, - ABCD

よって
f(m, n)≧f(m-1,n)+n+2

f(1,0)=2
f(m,n)=f(n,m)
と数学的帰納法により

f(m,n)≧(m+2)(n+2)-4

379 名前: mailto:sage [2019/12/18(水) 22:57:24.30 ID:tbeJyQYA.net]
>>371
理論はどうでもいいから動く



380 名前:コードを出して欲しいです、このスレ的には []
[ここ壊れてます]

381 名前:デフォルトの名無しさん mailto:sage [2019/12/18(水) 23:01:39.59 ID:i+6d3gEf.net]
ここまで出来ればあとは簡単
他の人に任せた

382 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 00:58:04.71 ID:1AoIgbUn.net]
>>317 文言 wenyan-lang
wenyan-lang.lingdong.works/ide.html

吾有一術。名之曰「零右寄」。欲行是術。必先得一數。曰「数」。乃行是術曰。
吾有三數。曰零。曰零。曰一。名之曰「甲」曰「乙」曰「丙」。
恆為是。若「数」等於零者乃止也。除「数」以十。所餘幾何。昔之「甲」者。今其是矣。
若「甲」等於零者。乘「乙」以十。昔之「乙」者。今其是矣。若非。乘「甲」以「丙」。
加其以「乙」。昔之「乙」者。今其是矣。也。除「数」以十。昔之「数」者。今其是矣。
除其以一。所餘幾何。減「数」以其。昔之「数」者。今其是矣。
乘「丙」以十。昔之「丙」者。今其是矣。云云。乃得「乙」。是謂「零右寄」之術也。
吾有一列。名之曰「丁」。充「丁」以二千零一十九。以一十萬二千零三十。以一百二十三。
凡「丁」中之「戊」。施「零右寄」於「戊」。名之曰「己」吾有三數。曰「戊」。曰「「、」」。曰「己」。書之。云云。

OUTPUT ---------------------
二千零一十九、二千一百九十
一十萬二千零三十、一十二萬三千
一百二十三、一百二十三


なんかGIGAZINEで紹介されていたので

383 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 03:38:08.86 ID:i+MhtJYW.net]
>>363
・n=7 のとき
 条件(1,2) または 条件(2,2)
 {1234}=A と略記する。
 A567, -, -, -   (>327)
 567, -, -, A
 67, 5, -, A
 7, 5, 6, A
 57, -, 6, A    (>327)
 A57, -, 6, -
 A57, -, -, 6   (>327)
 57, -, -, A6
 7, 5, -, A6
 -, 5, 7, A6
 5, -, 7, A6    (>327)
 A5, -, 7, 6
 A5, 6, 7, -
 A5, 6, -, 7
 A5, -, -, 67    (>327)
 5, -, -, A67
 -, -, 5, A67    (>327)
 A, -, 5, 67
 A, -, -, 567    (>327)
 -, -, -, A567
にて可能。

384 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 03:43:24.67 ID:i+MhtJYW.net]
>>368
・n=8のとき
 条件(1,2) または 条件(2,2)
 {12345} = A と略記する。
 A678, -, -, -       (>328)
 678, -, -, A
 78, 6, -, A
 8, 6, 7, A
 68, -, 7, A       (>328)
 A68, -, 7, -
 A68, -, -, 7       (>328)
 68, -, -, A7
 8, 6, -, A7
 -, 6, 8, A7
 6, -, 8, A7       (>328)
 A6, -, 8, 7
 A6, 7, 8, -
 A6, 7, -, 8
 A6, -, -, 78       (>328)
 6, -, -, A78
 -, -, 6, A78     (>328)
 A, -, 6, 78
 A, -, -, 678       (>328)
 -, -, -, A678
にて可能。

385 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 04:34:36.23 ID:i+MhtJYW.net]
・n=12 のとき
 条件(2,2)
{12345678} = A, {9,10} = B, 11=C, 12=D と略記する。
 ABCD, -, -, -   (>376)
 BCD, -, -, A
 CD, -, B, A
 D, C, B, A
 BD, C, -, A    (>376)
 ABD, C, -, -
 ABD, -, -, C   (>376)
 BD, -, -, AC
 D, -, B, AC
 -, D, B, AC
 B, D, -, AC    (>376)
 AB, D, -, C
 AB, D, C, -
 AB, -, C, D
 AB, -, -, CD   (>376)
 B, -, -, ACD
 O, 9, -, ACD   (>376)
 AO, 9, -, CD
 AO, -, -, 9CD   (>376)
 O, -, -, A9CD
 -, O, -, A9CD   (>376)
 A, O, -, 9CD
 A, O, 9, CD
 A, -, 9, OCD
 A, -,-, BCD    (>376)
 -, -, -, ABCD
にて可能。

386 名前:デフォルトの名無しさん [2019/12/19(木) 07:01:53.01 ID:NLbJ7Izu.net]
>>317 J
f =: 3 : 0
a =. ": y
b =. a -. '0'
". b , a -. b
)

387 名前:346 mailto:sage [2019/12/19(木) 11:40:09.74 ID:dMnFAlGo.net]
>>346
Ruby で、234,168

# 蓄積変数の初期値は、0
puts ( 1..1_000 ).inject( 0 ) { |sum, num|
num % 3 == 0 || num % 5 == 0 ? sum + num : sum
}

388 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 13:03:26.44 ID:LRZ6v8WB.net]
>>375-377

>>371で理論は出来たんだから
次は
プログラムにするか
等号の証明をするか
最短手順を調べるか
本数を増やすか

ではないでしょうか?

私は>>371で満足
出題者ありがとう

389 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 14:49:39.96 ID:i+MhtJYW.net]
>>380
う〜む、等号の証明でござる。



390 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 16:03:07.29 ID:POC72xQm.net]
どれが?

391 名前:デフォルトの名無しさん [2019/12/19(木) 16:34:48.53 ID:dMnFAlGo.net]
お題

MY FAVORITE SONGS を、Snake, Camel, Pascal にして!

my_favorite_songs, myFavoriteSongs, MyFavoriteSongs

392 名前:デフォルトの名無しさん [2019/12/19(木) 17:08:15.12 ID:0uPukb6z.net]
>>346
Kotlin script

ただ馬鹿正直に抜き出して足すだけ。

println((1..1000).filter { it % 3 == 0 || it % 5 == 0 }.sum())

393 名前:デフォルトの名無しさん [2019/12/19(木) 17:42:54.73 ID:0uPukb6z.net]
>>383
Kotlin
https://paiza.io/projects/7P7YwhEfK-TZri123sI5xg

394 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 19:39:18.71 ID:xlnTqgd4.net]
>>383 Ruby

str = 'MY FAVORITE SONGS'

puts str.tr('A-Z ', 'a-z_') # => my_favorite_songs
puts str.gsub(/ (\w)/){$1.downcase}.swapcase # => myFavoriteSongs
puts str.split.map(&:capitalize).join # => MyFavoriteSongs

395 名前:デフォルトの名無しさん [2019/12/19(木) 20:42:11.68 ID:M6N2QgoX.net]
>>351 >>362 Common Lisp
https://ideone.com/hTxKo6

30億バイトでの実行結果:

% uname -p
Intel(R) Core(TM) i7-4765T CPU @ 2.00GHz
% /usr/bin/time -p sbcl --script odai-pt16-351-362-lisp-3-hash-table.lisp </tmp/random-acgt-3-billion.txt
((#\T . 17))
real 178.75
user 177.55
sys 1.17
%

*standard-input* ではなく (open "/dev/stdin" ...) を使っているのは *standard-input* が遅いから
ざっと六倍もの時間がかかった

396 名前:デフォルトの名無しさん [2019/12/19(木) 21:46:59.61 ID:XnN+NvoA.net]
>>383
R
https://ideone.com/QeSUF5

397 名前:デフォルトの名無しさん mailto:sage [2019/12/19(木) 22:59:23.08 ID:L7o4TfDh.net]
>>371
f(m,n)≧2mn+m+n+1
が示せました

(2,2)の条件で13枚移動できます

398 名前:383 mailto:sage [2019/12/20(金) 14:24:42 ID:A+TGdcd9.net]
>>383
Ruby で、

ary = "MY FAVORITE SONGS".split.map( &:downcase ) # すべて小文字へ

puts ary.join( "_" ) #=> my_favorite_songs
puts ary.map( &:capitalize ).join #=> MyFavoriteSongs

puts ary.map.with_index { |word, idx|
if idx == 0
word # 最初だけ、そのまま
else
word.capitalize
end
}.join #=> myFavoriteSongs

399 名前:デフォルトの名無しさん [2019/12/20(金) 17:55:37.64 ID:KHh/7LOP.net]
>>346 julia

println(sum(Set([3:3:1000; 5:5:1000])))



400 名前:デフォルトの名無しさん [2019/12/20(金) 19:38:12.53 ID:KibkA5Ab.net]
お題(>>346の改変版)

1から100万までの整数のうち、2か3か5か7か11か13か17か19の倍数の合計を
求める処理を3000回繰り返してから、結果を表示せよ。ただし、ideoneの
実行制限時間(5秒)以内に完了すること。

401 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 20:40:12.54 ID:l1czkVGZ.net]
>>392 C++
https://ideone.com/N01T86

402 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:09:48.70 ID:ZH5ZbPnE.net]
今アップしようと思ったら
>>393とそっくりだった

403 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:22:01.32 ID:ZH5ZbPnE.net]
素数の数をカウントする代わりに
マイナスを付けて素数を掛け算してるのが違うくらい

404 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:28:45.69 ID:ZH5ZbPnE.net]
お題
3000回じゃなくてもっとマシな出し方なかったのかね?
最適化で1回の結果を使い回されて何回やっても時間同じになっちゃってたよ

3000回数分合計して、最後に3000で割ってたんだけど
最適化が頭良すぎた

405 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 21:49:16.14 ID:qHTdS2+z.net]
やったー僕が考えた効率良いプログラムだと5秒以内で3000回も計算できたぞ!
そうだこれを

406 名前:お題にしてやろう! []
[ここ壊れてます]

407 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:16:29.10 ID:ZH5ZbPnE.net]
C/C++だと
ほんのちょっと数学の知識を使えば
コード上の工夫をまったくしなくても0.01秒
コード上の工夫でまだまだ速くなる
スクリプト系言語でも100倍はかからない気がする

なぜ5秒?
なぜ1000000?
なぜ3000回?

謎だ

408 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:30:48.36 ID:fz/tpFJr.net]
些末な最適化など
数学的知識に基づくオーダーの低減に比べたらむなしい

409 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:30:49.77 ID:ZH5ZbPnE.net]
数学的知識を使わないで
単純に足していくアルゴリズムを
コードの工夫で5秒切るって問題?



410 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:38:11.88 ID:PCNOOvYP.net]
>>399

>>393は素数の数に対してオーダーは2^n nだけど、
コード上の工夫で2^nになる

さらに、
乗算の数十倍時間がかかる、変数による除算も
コード上の工夫で無くせる

些細な差では無いと思う

411 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:38:43.75 ID:ZH5ZbPnE.net]
>>399

>>393は素数の数に対してオーダーは2^n nだけど、
コード上の工夫で2^nになる

さらに、
乗算の数十倍時間がかかる、変数による除算も
コード上の工夫で無くせる

些細な差では無いと思う

412 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:39:52.16 ID:ZH5ZbPnE.net]
ダブった

413 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 22:50:38.46 ID:qHTdS2+z.net]
数学も計算機学もどっちも大事

414 名前:デフォルトの名無しさん [2019/12/20(金) 23:00:03.89 ID:KibkA5Ab.net]
>>393
正解。ちなみにRで短く書いたプログラム: https://ideone.com/T9oDqa
結局、奇数個の積の倍数の個数の和から偶数個のそれを引くというやり方は同じだな。

>>397
そう。上のプログラムが5秒以内に余裕を持って終わるように繰り返し回数を設定したw
効率というより短いのが好きで書いた。

>>398
>>393をRにそのまま移植すると5秒以内に終わらず、1000回に減らしても
(https://ideone.com/K94wA8)4.56秒かかって、上のプログラムの2.43秒より
遅いよ。Rでは自前のループを書くよりも、関数や演算子を使って短く書いた方が
速くなることが多い。

415 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 23:06:22.58 ID:ZH5ZbPnE.net]
>>405
Rだと3桁倍も時間がかかるのか
衝撃

416 名前:デフォルトの名無しさん [2019/12/20(金) 23:10:59.45 ID:KibkA5Ab.net]
1000までではなく与えられた自然数までということ以外は>>346と同じ問題が
オライリーの「Modern C++チャレンジ」に載っているが、示されている解答は
if (i % 3 == 0 || i % 5 == 0) sum += i; という単純に足していく方式だな。
本の副題は「C++17プログラミング力を鍛える100問」だが、何が鍛えられられるのか
よく分からない。

417 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 23:11:25.23 ID:ZH5ZbPnE.net]
C/C++で1秒かかる問題は
C/C++限定になっちゃう感じだね

418 名前:デフォルトの名無しさん mailto:sage [2019/12/20(金) 23:14:31.11 ID:ZH5ZbPnE.net]
>>407
算数やアルゴリズムじゃなくて
言語の勉強ってことでしょ

419 名前:デフォルトの名無しさん mailto:sage [2019/12/21(土) 05:43:11.08 ID:vVh8rrgH.net]
連投アスペ君うざいよ
学歴詐称までしてたみたいだけど



420 名前:デフォルトの名無しさん [2019/12/21(土) 17:30:00.35 ID:BSqycIZI.net]
お題
ビットコインの採掘問題です

000 〜 300 までの3桁の整数の文字列を、MD5 で暗号化した時に、
冒頭部分から、5 が最も多く続く、整数は何?

答え、239 : 555d6〜

421 名前:デフォルトの名無しさん [2019/12/21(土) 21:23:49.40 ID:WOeaPgYE.net]
>>411
Java
https://paiza.io/projects/CEzxtHHxdDnP_sglVIdxMg

422 名前:デフォルトの名無しさん [2019/12/21(土) 22:58:23.57 ID:hbXQRpYW.net]
>>411 PowerShell
$MD5 = new-object "System.Security.Cryptography.MD5CryptoServiceProvider"
$a = 0..3

423 名前:00
$hash = $a |% {-join ($MD5.ComputeHash([char[]]("{0:000}" -f $_)) |% {"{0:x2}" -f $_})}
$n = $hash |% {[RegEx]::Match($_, "^5+").length}
$max = ($n | measure -max).Maximum
$a |? {$n[$_] -eq $max} |% {"$_ : " + $hash[$_]}

-- 実行結果 --
239 : 555d6702c950ecb729a966504af0a635
[]
[ここ壊れてます]

424 名前:デフォルトの名無しさん [2019/12/22(日) 03:50:07 ID:lBW/6Z3k.net]
>>411
Kotlin
https://paiza.io/projects/Y5gSI5-FC_UyaaRC1V_69w

425 名前:デフォルトの名無しさん [2019/12/22(日) 14:00:57.91 ID:sfBU8dhx.net]
>>411 Ruby

require 'digest'
p ("000".."300").map{|i|[Digest::MD5.hexdigest(i).index(/[^5]/),i]}.max[1]

426 名前:411 mailto:sage [2019/12/22(日) 19:20:37.12 ID:u+b66RrE.net]
>>411 Ruby

require 'digest'

# :count は、先頭から続く、5の数
Result = Struct.new( :num, :md5, :count )

res = ( "000".."300" ).each_with_object( Result.new( nil, nil, -1 ) ) do |num, res|
md5 = Digest::MD5.hexdigest( num ) # ハッシュ化

md5.each_char.with_index do |char, idx| # 1文字ずつ処理する
if char != "5"
if idx > res.count # 大きい時だけ更新する
res.num = num
res.md5 = md5
res.count = idx
end
break
end
end
end

puts "#{ res.num } : #{ res.md5 }"
#=> 239 : 555d6702c950ecb729a966504af0a635

427 名前:デフォルトの名無しさん [2019/12/23(月) 15:49:57.54 ID:8tSOZ4fL.net]
>>411
Perl5
https://paiza.io/projects/tD4ph2pfNvHIVTsKVqCbuA

428 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 02:05:20.47 ID:3/kDRwCG.net]
>>377
>>389

・n=13 のとき
 条件(2,2)
{12345678} = A, {9,10} = B, 11=C, 12=D, 13=E と略記する。

 ABCDE, -, -, -
  手順1
 CDE, -, -, AB
  手順2
 CD, E, -, AB
 ACD, E, -, B
  手順3
 ACD, -, -, BE
 CD, -, -, ABE
  手順2
 C, D, -, ABE
 AC, D, -, BE 
  手順3
 AC, -, -, BDE
 C, -, -, ABDE
 -, C, -, ABDE
 A, C, -, BDE
  手順3
 A, -, -, BCDE
 -, -, -, ABCDE
にて可能。

429 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 02:16:33.78 ID:3/kDRwCG.net]
 #A = f(2,1) = 8,   #B = 2
* 手順1
 ABX, -, -, -
 BX, -, -, A
 OX, 9, -, A
 AOX, 9, -, -
 AOX, -, -, 9
 OX, -, -, A9
 X, O, -, A9
 AX, O, -, 9
 AX, O, 9, -
 AX, -, 9, O
 AX, -, -, B
 X, -, -, AB
*手順2
 CDY, -, -, *
 DY, C, -, *
 Y, C, D, *
 Y, -, CD, *
 -, Y, CD, *
 -, CY, D, *
 D, CY, -, *
 CD, Y, -, *
* 手順3
 *, Y, -, BZ
 *, 9Y, -, OZ
 *, 9Y, O, Z
 *, Y, B, Z
 *, -, B, YZ
 *, 9, O, YZ
 *, 9, -, OYZ
 *, -, -, BYZ



430 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 06:16:15 ID:cUFUrp77.net]
おめでとう
次は(2,2,2)

431 名前:デフォルトの名無しさん mailto:sage [2019/12/24(火) 06:33:05.83 ID:cUFUrp77.net]
n=13を考えるとき
真ん中2本が空いてる時にはn=12までは動かせる
っていう仮定を使うと
考え方が楽になりますよ

これが出来たら
あとは(2,1)のn=8から1枚ずつ増やしていく帰納法が使えます






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<270KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef