1 名前:デフォルトの名無しさん mailto:sage [2020/07/14(火) 13:53:46 ID:jW5p6F/e.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/ 宿題は宿題スレがあるのでそちらへ。 ※前スレ プログラミングのお題スレ Part17 https://mevius.5ch.net/test/read.cgi/tech/1584031367/
560 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 01:09:05.65 ID:FJaokp+J.net] >>529 Python decimal でできるだろ。 https://docs.python.org/ja/3/library/decimal.html
561 名前:デフォルトの名無しさん [2020/09/17(木) 07:37:06.63 ID:Lu9ZyyRf.net] お題: (複数行のバックグラウンド、座標テキスト、座標)から合成テキストを返す関数を作れ 座標テキストとバックグラウンドは同じサイズ(とりあえず横4縦3とする) background ┏┓┏┓ ┃┗┛┃ ┗━━┛ 座標テキスト ab23 9014 8765 座標が 0なら ┏┓┏┓ ┃*┛┃ ┗━━┛ 6なら ┏┓┏┓ ┃┗┛┃ ┗━*┛ 11なら ┏*┏┓ ┃┗┛┃ ┗━━┛ あまり綺麗な実装が出来なかったから問題にした https://repl.it/@vip0/analogclock#index.js
562 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 08:03:03.74 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 08:08:23.20 ID:Lu9ZyyRf.net] げっ確かに行ごとにreplace必要ないじゃん 何やってんだ俺 ありがとう
564 名前:デフォルトの名無しさん [2020/09/17(木) 13:17:16.17 ID:GTUBgTcD.net] >>552 問題の意味がわからない。
565 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:30:29.78 ID:/h1W7gqa.net] >>552 くだらない質問スレか初心者質問スレ行け
566 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:34:08.96 ID:Lu9ZyyRf.net] ほんとにどの問題よりもクソみたいな問題だと思っています 本当にすいませんでした
567 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:42:30.73 ID:Lu9ZyyRf.net] た
568 名前:セ私は純粋にプログラミングが好きで 全く質問したかったわけじゃないのはわかってほしい 二次配列じゃないと処理できないものだと勘違いしていたのが甘いしシンプルにしすぎて問題が破綻してしまった [] [ここ壊れてます]
569 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:48:33.25 ID:Lu9ZyyRf.net] 純粋にここにいる人たちが解法として書くコードは好きだし たまに驚くべき角度から解を出す人もいるしマイナーなアルゴリズムも知れて尊敬してる 今回もスマートなコードが見れるんじゃないかと純粋に期待して問題にしてみたんだ スレも今流れ遅かったし
570 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 13:50:39.09 ID:Lu9ZyyRf.net] しかしお前らは牙を向いた 純粋に問題作成初心者の心を無碍にして 鋭い刃のような言葉を投げつけてきた お前らは今日から敵とみなす あばよ😎✋絶望しな
571 名前: mailto:sage [2020/09/17(木) 19:40:19.09 ID:+AujTTfU.net] >>560 奏ちゃん「自意識過剰なんじゃないですか?」
572 名前:デフォルトの名無しさん [2020/09/17(木) 22:33:12.99 ID:H8Ldt8Jg.net] お題:文字列の末尾の数字をインクリメントしてください 入力 IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS 出力 IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
573 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 22:56:25.54 ID:ockp6LF+.net] >>562 vim ?\d<CR><C-a>
574 名前:デフォルトの名無しさん mailto:sage [2020/09/17(木) 23:01:20.65 ID:ockp6LF+.net] >>562 Ruby $><<gets.sub(/\d+(?=\D+$)/, &:succ) # => IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoim M3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOn xhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfP sQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuu UBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
575 名前:デフォルトの名無しさん [2020/09/18(金) 01:44:05.02 ID:hhldwLbP.net] >>562 Perl コマンドラインで以下のように入力後に標準入力から文字列を読ませると標準出力に出力される。 perl -pe 's/(\d+)(\D+)$/($1+1).$2/ge' あるいはファイルに内容を入れておいてそのファイルを指定する。
576 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 03:22:29.90 ID:Pz26zoiQ.net] js window.prompt().replace(/\d(?=\D+$)/,i=>i*1+1)
577 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 06:23:31.29 ID:QICqPxzN.net] >>565 行末が数字のときに対応できない perl -pe 's/(\d+)(\D*)$/($1+1).$2/e' のほうがよくないかな
578 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 06:53:31.48 ID:5l49iFOd.net] >>520 その場合の良いアルゴリズムって 「素因数分解を早く解くアルゴリズム」 よね。 それがもし思いついたらフィールズ賞ものではw
579 名前:デフォルトの名無しさん [2020/09/18(金) 21:10:31.47 ID:JxxZTRpA.net] >>562 Java https://paiza.io/projects/X0KHD9cQEH8LTka6nmDd_w
580 名前:デフォルトの名無しさん [2020/09/18(金) 21:36:05.11 ID:JxxZTRpA.net] >>553 Java https://paiza.io/projects/ka8qfAJFIag1eovg263vzg
581 名前:デフォルトの名無しさん mailto:sage [2020/09/18(金) 21:54:28.27 ID: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 名前:デフォルトの名無しさん [2020/09/18(金) 23:21:52.09 ID:hhldwLbP.net] >>567 そうだった。 + じゃなくて * だったな。
583 名前:253 mailto:sage [2020/09/18(金) 23:34:45.95 ID:/yEGF/vF.net] >>568 素因数分解まで行かない。 素でなくてもいいので因数のうちイチバン大きいもの。 なんかいい解法見つけられないか、考えているけどいまのところ見出せていない
584 名前:253 mailto:sage [2020/09/18(金) 23:36:27.35 ID:/yEGF/vF.net] いや、違うな… 因数のうちイチバン大きいものでは、ダメだわ
585 名前:デフォルトの名無しさん [2020/09/19(土) 00:05:40.30 ID:HLFklpM8.net] >>562 C https://paiza.io/projects/IEDhYc83EDXZuCbsxf_QUg 正規表現を使わずに行末から一文字づつ行頭に向かって検索してやっている。
586 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 00:59:21.89 ID:HX0Lirqs.net] √n以上の最小の約数
587 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 12:14:05.54 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 15:12:41.86 ID:BWMKzapi.net] https://rio2016.5ch.net/test/read.cgi/math/1598637093/133- わけわからん問題文にするなよ・・・
589 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 16:07:21.18 ID:wSOXcncc.net] 全然違って草
590 名前:デフォルトの名無しさん [2020/09/19(土) 16:29:35.90 ID:HLFklpM8.net] >>577 君が何を言わんとしているのかが全くわからない。
591 名前:253 mailto:sage [2020/09/19(土) 17:15:41.66 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 21:37:57.70 ID:HX0Lirqs.net] >>577 です やはりちょっと伝わらないですね >>577 は取り下げます
593 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 21:39:46.15 ID:HX0Lirqs.net] >>581 計算量減らすなら√n以下の最大の約数d求めてn/dを出力すれば計算量は減るな
594 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 21:40:46.29 ID:wSOXcncc.net] 減るというかそもそも計算量が同じというか
595 名前:デフォルトの名無しさん mailto:sage [2020/09/19(土) 21:46:21.17 ID:HX0Lirqs.net] イヤnが素数の場合に√nから上むきに探索すると計算量はnになるけど下向きなら√nになる √n以上の約数と√n以下の約数は同数だけど整数そのものは下側には√nしかなく、上にはn-√nあるので下向きに探していった方が速い
596 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 00:25:54.87 ID:ZGoKBb8Y.net] ポラード・ロー法使えばもっと計算量は減る 素数判定と組み合わせればモンテカルロ法ではなくラスベガス法になるから、正当性も担保される
597 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 01:39:54.18 ID:wHMtOvf4.net] 素因数分解利用するなら素因数分解そのものが手早くできてもダメでしょ? それを何個か使って最も√nに近いもの探すのはかなり難しいんじゃなかったっけ? つまり素因数分解n=Πpi^eiが与えられたとして、つぎは 0≦xi≦eiを動かすときΣxi log(pi) が1/2 log(n)に最も近くなるものを決定しなければならない コレなんか名前ついてる問題で指数オーダーのアルゴリズムしか見つかってないんじゃなかったっけ? 素因子の数はlog(n)のオーダーで増えていくから、結局exp(c log(n)) のオーダーになって、cがどれくらいに収められるか、そもそも指数オーダー必要なのかも未解決なんじゃなかったっけ?
598 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 06:22:49.81 ID:OZ4qNDWZ.net] >>585 素数判定はそもそも計算量少ない
599 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 10:19:03.22 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 10:50:48.99 ID:g28HruB5.net] あ、間違えた 上向き探索の探索量はd-/√n\+1=/d-√n+1\で/~\はceiling 下向き探索の探索量は\√n/-n/d+1=\√n-n/d+1/で\~/はfloor まぁ常に上向きの方が計算量は増える まぁもちろんnをまともに素因数分解して>>587 みたいな方法で√nオーダーより真に早いのがあるなら上向きも下向きもないけど、もうそこまで行ったら研究者レベルの話でしかない気がする
601 名前:デフォルトの名無しさん [2020/09/20(日) 11:23:17.24 ID:MLu0Cj9r.net] >>559-560 短いこの間でダークサイドに堕ちてて草
602 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 11:58:05.82 ID:FaUtZa6z.net] >>591 お詫び→弁解→言い訳→逆ギレ 冷静に書いてたつもりが書いてくうちに興奮して見事なコンボを決めたようだ
603 名前:デフォルトの名無しさん [2020/09/20(日) 12:47:09.77 ID:MLu0Cj9r.net] 感情豊かでかわいいw
604 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 12:59:00.77 ID:wHMtOvf4.net] 気分を変えてまた数学板より 自然数nに対して格子点の集合{(a,b) | a,bは1〜nの整数}の中の相異なる4点の組みで同一円周上に並ぶものの個数を数え上げよ n:1〜8では [0,1,14,194,826,2491,6364,14564] のハズ
605 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 13:05:52.02 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 18:36:43.29 ID:XyOg3AIQ.net] >>594 https://ideone.com/L3IoWm {0,1,14,184,762,2257,5704,13040}と出たんだが どっちが合ってる?
607 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 18:44:44.75 ID:XyOg3AIQ.net] 一直線上にある4点の組を余分に数えたところ >>594 の解と一致した https://ideone.com/GUZoZL
608 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 18:56:48.73 ID:wHMtOvf4.net] あ、ホントだ失礼しました
609 名前:デフォルトの名無しさん mailto:sage [2020/09/20(日) 19:10:27.22 ID:wHMtOvf4.net] [0,1,14,184,762,2257,5704,13040] が正解ですね https://ideone.com/YULQQ4
610 名前:デフォルトの名無しさん [2020/09/20(日) 22:46:33.41 ID:9sb+TTLg.net] >>594 問題がわからない。
611 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 00:11:09.46 ID:ZXxiMs6i.net] >>600 n=3だと ●●◯ ◯●● ◯◯◯ ◯◯◯ ●●◯ ◯●● ●●◯ ◯●● ◯◯◯ ◯◯◯ ●●◯ ◯●● ●◯● ◯◯◯ ●●◯ ◯●● ●◯● ●◯● ◯◯◯ ◯◯◯ ◯◯◯ ●◯● ●●◯ ◯●● ●●◯ ◯●● ◯◯● ●◯◯ ◯◯● ●◯◯ ◯◯● ●◯◯ ◯◯● ●◯◯ ●●◯ ◯●● ●◯● ◯●◯ ◯◯◯ ●◯●
612 名前: ●◯● ◯●◯ の14通り [] [ここ壊れてます]
613 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 11:36:08.07 ID:VFD1LGbi.net] >>594 のお題は、 平面上に4点を選んだとき、その4点をすべて含む円周が存在する場合としない場合がある xy平面上に、x,yの各座標が1〜nの整数であるような、互いに異なる点を4つ選んだとき、4点すべてを含む円周が存在するものがいくつあるか? n=1〜8についてそれぞれ数え上げよ (註:n=1のときは異なる4点を選べないので、解は0でよい) ってことでいいかな?
614 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 13:45:14.08 ID:tVxoOCVr.net] >>601 n=4 のときの184通り imgur.com/GNuPa4z.png
615 名前:デフォルトの名無しさん mailto:sage [2020/09/21(月) 14:54:29.54 ID:/KyZWHiy.net] >>603 正解だと思う おそらくn=9までは [0,1,14,184,762,2257,5704,13040,25996] 今作ってるのはC[n^2,4]を全数検査してるのでO(n^8)で計算量増えるので二桁以上はしんどいorz
616 名前:デフォルトの名無しさん [2020/09/22(火) 00:03:46.43 ID:jIz1rAqD.net] 誰かフォルダにパスワード駆ける方法教えてくれ
617 名前:253 mailto:sage [2020/09/22(火) 02:15:18.79 ID:jDcMk3G3.net] 対象性を考慮する以外の計算量の削減手段はないのかねこの手の問題は 解決すべき課題は計算量の削減ばかりではないだろうけれどさ
618 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 09:28:15.64 ID:yucbsR+t.net] まぁ何に重きを置くかですな 数学板でこの手のプログラムが必要になるのは誰も答え持ってなくて、一応答えは出てるけど確認したいときとか その時は速度より“確実に正しい”事の方が重要になる この場合も対称性やら、明らかに無駄な可能性を排除すれば速度は上がるけど“確実に正しい”のかは怪しくなってしまう 実務でプログラム使う人もその辺のtpoは意識してるのでは?、 コード汚くても高速な奴も募集中
619 名前:デフォルトの名無しさん mailto:sage [2020/09/22(火) 11:56:55.93 ID: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 mailto:sage [2020/09/28(月) 22:51:28.57 ID: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 mailto:sage [2020/09/28(月) 22:53:47.02 ID:mT2w1+AU.net] >>609 × 意識した解法を意識してしまうが、 ○ 意識した解法を思い浮かべてしまうが、
622 名前:デフォルトの名無しさん mailto:sage [2020/09/29(火) 18:23:40.44 ID:TPx3FsW2.net] お題: バブルソートを実装せよ
623 名前:253 mailto:sage [2020/09/29(火) 23:24:18.49 ID:219xwwXO.net] >>611 プログラミングのお題スレ Part13 mevius.5ch.net/test/read.cgi/tech/1549160513/231
624 名前:デフォルトの名無しさん mailto:sage [2020/09/30(水) 20:15:38.19 ID:rtPyMlCZ.net] 古参はここで「番兵おけやボケェ!」と言う
625 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 01:25:55.75 ID: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 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 11:20:33.49 ID: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
627 名前:デフォルトの名無しさん [2020/10/01(木) 12:09:11.51 ID:OaA9a4hN.net] Haskellでもこんな長くなるの?
628 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 12:15:24.40 ID:O+PWz9pR.net] >>616 いや、上手な人ならもっと上手くやるはず アホほどライブラリがあってそれ使えば楽々のハズだけど修行中の身ではこんなもんorz
629 名前:デフォルトの名無しさん mailto:sage [2020/10/01(木) 14:04:34.18 ID:Am+nhG+G.net] >>615 ちょっとチューンナップ 達人なら***とか>>>とか意味わからん演算子使ってもっとスッキリ書くんだろうけどアホほどあって使いこなせんorz haskell ---- astr m s = "A(" ++ (show m) ++ "," ++ s ++ ")" ack 0 n = [astr 0 $ show n, show $ n+1] ack m 0 = (astr m $ show 0) : ack (m-1) 1 ack m n = let ss1 = ack m (n-1) in [astr m $ show n] ++ (map (astr (m-1)) ss1) ++ (tail $ ack (m-1) (read $ last ss1)) main = do [x,y]<-(return.(map read).words)=<<getLine mapM_ ((putStr).(++"\n")) $ ack x y
630 名前:蟻人間 mailto:sage [2020/10/02(金) 19:50:35.06 ID:gQLwfaGp.net] お題: 野球のボールの動きを物理シミュレートして、ピッチャーの投げてきたボールをより遠くにかっ飛ばすバッターAIを開発せよ。
631 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 20:54:50.29 ID:tP403VLl.net] カーブやシュートも再現しろよ
632 名前:253 mailto:sage [2020/10/02(金) 21:41:56.95 ID:kl4hmyt8.net] >>619 ─┼─┐─┼─ / ,. `゙''‐、_\ | / / │ │─┼─/| _,.イ,,.ィ' ─────‐‐‐ * ←>>蟻人間 │ |ツ │ | | | イン /´⌒`ヽ // | \ {, リ) / ./ | \ __ /}从、 リ( / / | ,. ,. -‐===‐- `つ/ ,.イ ’^ソハノリ / ∵|:・. 〃〃〃〃 //ミノ__ /´ /∴・|∵’ ヽ_I__I__I__I__I_I __ノ_/ / ヽミ、、 .∵.;|∵’:; ー{____,,二二二ニ) ノΘ(__ ) ゙ 、∵.;|∵’, /I I I I I I .^^^' \ !  ̄フ ゙ 、 |∴ ソ / ` ノ⌒ヽ') / ノ/ / /\/ ∧/ / ', / / ノ./ ./ ', ノ/ ヘ__、 ./ / ̄ ̄ ̄ヽ .', ヘ_'_, / \ / ', / \/ ', ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙ ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙
633 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 21:46:15.88 ID:JDxjQVnw.net] ナイス
634 名前:デフォルトの名無しさん mailto:sage [2020/10/02(金) 22:04:39.76 ID:jsz+6t1Q.net] >>621 くっそワロタ
635 名前:253 mailto:sage [2020/10/03(土) 01:10:19.52 ID:io8Ij0O0.net] >>614 Perl5 use feature qw{signatures say}; no warnings 'experimental'; sub A($m, $n, $l, $r) { say "${l}A($m, $n)$r"; $m ? $n ? A($m-1, A($m, $n-1, "${l}A(".($m-1).', ', ")$r"), "${l}A(".$m.', ', ")$r") : A($m-1, 1, "${l}A(".($m-1).', ', ")$r") : $n + 1; } say A(2, 1, '', ''); 実行結果 ~ $ perl 18_605_Ackermann_func.pl A(2, 1) A(1, A(2, 0)) A(1, A(1, A(1, 1))) A(1, A(1, A(0, A(1, 0)))) A(1, A(1, A(0, A(0, A(0, 1))))) A(1, A(1, A(1, A(0, 2)))) A(2, A(1, 3)) A(2, A(0, A(1, 2))) A(2, A(0, A(0, A(1, 1)))) A(2, A(0, A(0, A(0, A(1, 0))))) A(2, A(0, A(0, A(0, A(0, A(0, 1)))))) A(2, A(0, A(0, A(1, A(0, 2))))) A(2, A(0, A(1, A(0, 3)))) A(2, A(1, A(0, 4))) 5
636 名前:253 mailto:sage [2020/10/03(土) 01:13:51.37 ID:io8Ij0O0.net] なんかBugってる…orz
637 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 12:07:42.48 ID:xbar0BlH.net] >>614 perl5 https://ideone.com/pRMAjA s///e でいける
638 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 12:20:08.70 ID:nr2+4P+J.net] perlの正規表現マジック恐ろしや
639 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 12:37:17.41 ID:MOu6VxbM.net] >>626 すげえな ほとんどワンライナーだ
640 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 12:46:20.34 ID:ul2MWjNf.net] そうなのよね 入力もらって表示→ワンステップだけ展開して戻る の繰り返しが1番楽なんだけどなぁ
641 名前:253 mailto:sage [2020/10/03(土) 14:01:25.06 ID:5WkJC33J.net] >>614 Perl5、>>624 を修正。 >>626 あら正規表現で書けちゃうのかイナ… use feature qw{signatures say}; no warnings 'experimental'; sub A($m, $n) { $m ? $n ? do{ my ($m2, $n2) = ($m-1, $n-1); push @$l, "A($m2, "; push @$r, ')'; say @$l, "A($m, $n2)", @$r; A($m2, A($m, $n2)) } : do{ my ($m2, $n2) = ($m-1, 1); say @$l, "A($m2, $n2)", @$r; A($m2, $n2)} : do{ my $s = $n + 1; say @$l, $s, @$r; pop @$l; pop @$r; $s }; } ($m, $n) = (2, 1); say "A($m, $n)"; A($m, $n); 実行結果 $ perl 18_605_Ackermann_func.pl 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
642 名前:デフォルトの名無しさん mailto:sage [2020/10/03(土) 18:00:38.18 ID:WWjeAKvH.net] >>614 ocaml https://ideone.com/dqTO60 let (>>) f g x = g (f x) let rec a m n p = let () = p (Printf.sprintf "A(%d, %d)" m n) in if m = 0 then n + 1 else if n = 0 then a (m - 1) 1 p else a (m - 1) (a m (n - 1) (Printf.sprintf "A(%d, %s)" (m - 1) >> p)) p let () = print_int (a 2 1 print_endline) ↓ 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
643 名前:デフォルトの名無しさん mailto:sage [2020/10/07(水) 20:33:26.90 ID:0TsEuxhN.net] >>614 octave https://ideone.com/50i12U function c = a(m, n, p) p(sprintf('A(%d, %d)', m, n)); if m == 0 c = n + 1; elseif n == 0 c = a(m - 1, 1, p); else c = a(m - 1, a(m, n - 1, @(s) p(sprintf('A(%d, %s)', m - 1, s))), p); end end disp(a(2, 1, @disp));
644 名前:253 mailto:sage [2020/10/08(木) 02:27:24.66 ID:Gy7CYzaJ.net] 藻前ら、なかなかやるなー 気に入った。
645 名前:蟻人間 mailto:sage [2020/10/08(木) 13:59:34.65 ID:N89hoMl4.net] お題: ax**2+b*x+c==0という形の二次方程式を解き、全ての実数解と実数解の個数を表示する。
646 名前:デフォルトの名無しさん mailto:sage [2020/10/08(木) 15:03:23.36 ID:eK30Q5Ei.net] 実数解はルートを含んだ形でいいのか? あるいは小数点以下何桁まで正確に求めるのか?
647 名前:蟻人間 mailto:sage [2020/10/08(木) 15:04:48.84 ID:N89hoMl4.net] >>635 浮動小数点数でいいよ。
648 名前:デフォルトの名無しさん mailto:sage [2020/10/08(木) 21:36:29.64 ID:Q4ykcHSC.net] >>633 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ( ´∀`)< オマエモナー ( ) \_____ | | | (__)_)
649 名前:蟻人間 mailto:sage [2020/10/09(金) 13:26:20.64 ID:pUAVGuih.net] お題:計算ができる文章テンプレートを実装し、つるかめ算を自動生成せよ。 文章テンプレートの例: 「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。 足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。 カメは何匹いますか。」 変数は「$(変数名)」のように表し、その具体的な値は入力として与えられる。 計算式は{ }で囲って表す。 計算式は変数や定数、加減乗除の演算子、または丸カッコを含むことができる。 入力の例:「ツルの数=3, カメの数=4」
650 名前:デフォルトの名無しさん [2020/10/09(金) 14:02:14.80 ID:/NdRCF04.net] >>634 js function quadraticWithCount(a, b, c) { const inSqrt = b ** 2 - 4 * a * c if (inSqrt < 0) return [[], 0] const l = - b / (a * 2) if (inSqrt === 0) return [[l], 1] const r = Math.sqrt(inSqrt) / (a * 2) return [[l - r, l + r], 2] } console.log(quadraticWithCount(3, -2, -1)) console.log(quadraticWithCount(3, 6, 3)) console.log(quadraticWithCount(1, 2, 3)) // [ [ -0.3333333333333333, 1 ], 2 ] // [ [ -1 ], 1 ] // [ [], 0 ]
651 名前:蟻人間 mailto:sage [2020/10/09(金) 14:14:06.07 ID:LR5flFjI.net] >>638 追記: パーサーを作れない人はevalを用いても構わない。
652 名前:デフォルトの名無しさん [2020/10/09(金) 14:14:59.57 ID:/NdRCF04.net] >>634 js 改善 function quadratic(a, b, c) { const rt = Math.sqrt(b ** 2 - 4 * a * c) return [(-b + rt) / (2 * a), (-b - rt) / (2 * a)] } function quadraticReal(...abc) { const ans = quadratic(...abc) const [a1, a2] = ans if (isNaN(a1)) return [] if (a1 === a2) return [a1] return ans } const quadraticRealWithCount = (...abc) => addCount(quadraticReal(...abc)) const addCount = a => [a, a.length] console.log(quadraticRealWithCount(3, -2, -1)) // [ [ 1, -0.3333333333333333 ], 2 ] console.log(quadraticRealWithCount(3, 6, 3)) // [ [ -1 ], 1 ] console.log(quadraticRealWithCount(1, 2, 3)) // [ [], 0 ]
653 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 17:52:52.10 ID:gniylpO4.net] >>638 Ruby ツルの数 = 3 カメの数 = 4 Template =<<_EOT_ 「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。 足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。 カメは何匹いますか。」 _EOT_ puts Template.gsub( /\{(.*?)\}/ ){ eval $1.gsub( /\$\((.*?)\)/ ){ $1 } }
654 名前:253 mailto:sage [2020/10/09(金) 22:43:14.04 ID:/QeZd0d9.net] >>638 Perl5 use utf8; no warnings 'utf8'; $ツルの数 = 3; $カメの数 = 4; print <<EOF 「ツルとカメが合わせて@{[${ツルの数}+${カメの数}]}います。 足の合計本数が@{[${ツルの数}*2+${カメの数}*4]}本です。 カメは何匹いますか。」 EOF 実行結果 ~ $ perl 18_633_ツルの数+カメの数.pl 「ツルとカメが合わせて7います。 足の合計本数が22本です。 カメは何匹いますか。」
655 名前:蟻人間 mailto:sage [2020/10/09(金) 23:14:45.18 ID:LR5flFjI.net] お題: 2つのRGBカラーが#RRGGBB形式で与えられる(RRGGBBは六桁の十六進数とする)。 2つの中間色を#RRGGBB形式で出力せよ。 可能ならばこれら3つの色をカラーバーとして表示せよ。
656 名前:蟻人間 mailto:sage [2020/10/09(金) 23:26:06.11 ID:LR5flFjI.net] >>644 入力例1: #112233, #99AAFF 入力例2: #AD03ff, #a39e75
657 名前:デフォルトの名無しさん mailto:sage [2020/10/09(金) 23:55:14.23 ID:ACx6TREf.net] >>644 ,645 自明な入力例だけを示しても、出力例も出さないと意味ないだろう。 2色の中間色ってのが曖昧じゃね? 単にR,G,Bそれぞれの平均を取るだけなのか、赤と紫の中間が赤紫になるように循環する色相で中間をとるのかとか。
658 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 02:56:37.74 ID:KFXrJR76.net] 問題が玉石混合だなぁ
659 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 07:06:51.16 ID:PdovQueR.net] >>643 >変数は「$(変数名)」のように表し、
660 名前:デフォルトの名無しさん mailto:sage [2020/10/10(土) 07:45:17.48 ID:nh4sk35x.net] お題: 20201010と出力してください。ただしコードに使っていい数字は1のみです。