X



プログラミングのお題スレ Part16
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2019/11/17(日) 09:00:22.10ID:xqEdXdr6
プログラミングのお題スレです。

【出題と回答例】
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/

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

※前スレ
プログラミングのお題スレ Part15
http://mevius.5ch.net/test/read.cgi/tech/1564310397/
0693デフォルトの名無しさん
垢版 |
2020/01/25(土) 08:11:44.03ID:O6wUvbi6
tsort(1) ?
0694デフォルトの名無しさん
垢版 |
2020/01/25(土) 10:35:48.88ID:ZrgQFiPc
>>692
そんなルールはないけれど、制御構造の構文の代わりに安直に
goto分岐を使ったヘッポココードではなくて、perl5のgoto 関数名構文が持つ
continuationの機能を使って、動的環境を維持したまま末尾再帰的な
loopを表現したと言いたかったのよ
0696デフォルトの名無しさん
垢版 |
2020/01/25(土) 11:05:32.17ID:mLh1vP4R
お題

.bash_history には、入力したコマンドが、1行ずつ追記されていくが、
同じコマンドが出てくると面倒なので、古い(上にある)方をすべて消してください

入力
5
3
1
4
2
5
3
4
5

出力
1
2
3
4
5
0699デフォルトの名無しさん
垢版 |
2020/01/25(土) 13:56:27.24ID:yjSryLut
>>696 Perl5

$h{$_} = $. while <>;
print for sort{$h{$a} <=> $h{$b}} keys %h;

実行結果
~ $ cat .bash_history
5
3
1
4
2
5
3
4
5
~ $ perl 16_696.pl .bash_history
1
2
3
4
5
0700デフォルトの名無しさん
垢版 |
2020/01/25(土) 18:59:55.00ID:xXb4DuHd
>>696
https://ideone.com/PtMPWn
RのuniqueにはfromLastオプションがあるので、revによる前後処理が不要。
0701デフォルトの名無しさん
垢版 |
2020/01/25(土) 19:19:17.51ID:i4ScOGkF
>>696 Ruby

a=STDIN.readlines
puts a.select.with_index{|v,i| i==a.rindex(v)}.join
0703デフォルトの名無しさん
垢版 |
2020/01/25(土) 20:22:19.72ID:J6xo1Vbp
>>696 Emacs Lisp
(with-temp-buffer-window #1="*odai-pt16-696*" nil nil
  (switch-to-buffer #1#)
  (insert-file-contents "~/.bash_history")
  (delete-duplicate-lines (point-min) (point-max) t))
0706696
垢版 |
2020/01/26(日) 00:35:54.22ID:2jcz6vHU
>>702
スレ違いで、スマンが、

erasedups で、現在の行と一致する履歴を、保存前にすべて削除するけど、
WSL, Ubuntu 18.04, bash では、削除されなかった!

これは難しい

tmuxとかの仮想端末で複数の画面間で、Bashのコマンド履歴を共有すると、
同じ履歴が何度も記録されてしまう問題を解決する
https://piro.sa@kura.ne.jp/latest/blosxom/webtech/2018-03-04_history-nodup-with-tmux.htm
0708696
垢版 |
2020/01/26(日) 01:39:31.40ID:2jcz6vHU
history の仕組みが難しいから、

定期的に、ここのスクリプトで、履歴ファイルを上書きした方が良いかも
0709デフォルトの名無しさん
垢版 |
2020/01/26(日) 01:43:44.81ID:HPdacZve
rubyXLでエクセルいじってるが

印刷範囲を設定したいときは、どのようにすればよいのでしょうか?
いろいろ探しても見当たらず・・
0710デフォルトの名無しさん
垢版 |
2020/01/26(日) 02:08:32.67ID:4S7WZkam
>>709
スレチ

>>708
bashから.bash_profileの重複をなくすプログラムを実行しても
logoutするときにbashが記憶しているコマンド履歴を.bash_profileに
上書きしちゃって、元の木阿弥になるんジャマイカ
0711696
垢版 |
2020/01/26(日) 05:19:41.93ID:2jcz6vHU
>>710

>>706
のサイトに書いてあるけど、

.bash_history から重複を排除して、上書きする

次に、history -c && history -r

-c で、メモリ上のコマンド履歴を削除して、
-r で、履歴ファイルからメモリへ、コマンド履歴を読み込む

まだ、試してないけど
0712696
垢版 |
2020/01/26(日) 06:05:44.52ID:2jcz6vHU
>>696
Ruby で作った。
コマンドは「ruby script.rb 入力ファイル名」

# ARGF とは、複数のファイルや標準入力を連結して、1つにした仮想ファイル
ary = ARGF.readlines # 1行ずつ配列に入れる

# ! が付く破壊的メソッドは、メソッドチェーンしない!
ary.reverse!
ary.uniq! # 連続していないものも削除する
ary.reverse! # 元に戻す

print ary.join
0713696
垢版 |
2020/01/26(日) 06:21:48.26ID:2jcz6vHU
>>711
の方法で、.bash_history から重複を排除できました!
0714デフォルトの名無しさん
垢版 |
2020/01/26(日) 09:38:26.36ID:6CyPsFJq
お題: 入力された整数を因数分解し、因数の数だけ「どんだけぇ〜♪」と表示せよ

in < 24
因数分解: 2 2 2 3
out > どんだけぇ〜♪
どんだけぇ〜♪
どんだけぇ〜♪
どんだけぇ〜♪
0715デフォルトの名無しさん
垢版 |
2020/01/26(日) 10:24:47.39ID:mBsLdcGX
>>709

121 名前:デフォルトの名無しさん (ワッチョイ a763-gk0v)[] 投稿日:2020/01/25(土) 15:52:45.46 ID:WZ3Oswhu0
rubyXLでエクセルいじってるが

印刷範囲を設定したいときは、どのようにすればよいのでしょうか?
いろいろ探しても見当たらず・・
0718蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/01/26(日) 15:31:19.81ID:QR2U0M8L
お題: どこかの国に競馬があった。そこの競馬場のルールでは馬券一枚に対して単勝の馬一頭しか選べない。
その日の各ゲームのそれぞれの出場馬について、名前と勝率とオッズが掲示されている。

【今日の競馬】
ゲーム1:
馬A, 0.5, 2.0
馬B, 0.8, 1.2
馬C, 0.9, 0.2
ゲーム2:
馬D, 0.3, 4.0
馬E, 0.5, 3.0
馬F, 0.8, 1.4

予算50,000円で獲得期待金額が最大になるように馬券を購入せよ。馬券の購入において、小数点以下は切り捨てとし、馬券には税金が掛からないものと仮定する。
0719デフォルトの名無しさん
垢版 |
2020/01/26(日) 15:44:50.09ID:uQg9mh+n
勝率の和が1を越えてるけど勝率って言うのは勝つ確率のことではなくて何かしらの競馬用語なのか?
0720蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/01/26(日) 15:46:20.30ID:TOQ25Lx5
ここでは、払戻金の倍率(賭けた金が何倍になって払い戻されるか)のことをオッズと呼ぶことにする。払戻金は小数点以下切り捨てとする。
0730デフォルトの名無しさん
垢版 |
2020/01/26(日) 18:56:39.39ID:OTxXTlwF
>>714

初心者です
JavaScriptです

let n = 24;
const factors = [];

for(let i=2;i<=Math.floor(n/2);i++){
if(n % i !== 0) continue;
for(;;) {
n /= i;
factors.push(i);
if(n % i !== 0) break;
}
}

for(let i=0; i<factors.length; i++) {
console.log('どんだけぇ〜♪')
}

って感じに書いたのですがどうも外側のループで i = 3 以上が実行されないらしく困っています
もしかしたら初学者の自分にもできるかもしれないと思い取り組んでみたのですが…
もしどなたかお知恵をお貸しくだされば嬉しいです
0732デフォルトの名無しさん
垢版 |
2020/01/26(日) 19:09:59.33ID:OTxXTlwF
>>731
ありがとうございます!動きました
何かとんでもない思い違いをしていたみたいで恥ずかしい…
0734デフォルトの名無しさん
垢版 |
2020/01/26(日) 19:23:55.94ID:pipfilQo
>>729
ビルの回数Nを引数として受け取って次の問題を解くプログラムを作ってください

N階建てのビルのある階から卵を落とします。
卵はある階よりも低ければ割れることはなく、ある階よりも高いと割れてしまう。
今、あなたは卵を2つ持っています。
卵が何階で割れるかを調べるもっとも効率のよい方法は何ですか?
そして、その方法で必要な卵を落とす回数は最大で何回ですか?
0736デフォルトの名無しさん
垢版 |
2020/01/26(日) 19:40:43.12ID:yXTxN+fl
>>714
C++ イデオン揚げるの面倒なのでべた書きしておくわ。
半月ぶり位にコード書いたけど、やはり良いね。

#include <iostream>
#include <cstdint>

int main() {
std::uintmax_t N = 24;
while (std::cin >> N) {
for (std::uintmax_t i = 2; i <= N; i++) {
while (N % i == 0 && N != 0) {
N /= i;
std::cout <<i<< ":どんだけー。" << std::endl;
}
}
std::cout << std::endl;
}

return 0;

}
0737デフォルトの名無しさん
垢版 |
2020/01/26(日) 19:46:17.80ID:3yHBwxN6
>>734
効率
とは?

落とす回数の平均?
落とす回数の最大?
階を上がる回数の平均?
階を上がる回数の最大?
他?
0738デフォルトの名無しさん
垢版 |
2020/01/26(日) 19:50:34.44ID:3yHBwxN6
卵を使う個数

ってのもある
これだとリニア検索で1個使用でつまらん問題になるけど
0740デフォルトの名無しさん
垢版 |
2020/01/26(日) 20:15:04.58ID:yXTxN+fl
>>734
プログラミング言語・日本語でいうと、
2階から落としていって、割れるまで二階ずつ上っていく。
割れたら一階下りて割れるか確認する。
基本的にそれだけ。
0741デフォルトの名無しさん
垢版 |
2020/01/26(日) 20:16:59.01ID:pipfilQo
>>735
二分探索だとタマゴが割れて調べられないケースがでてくるんよー
0742デフォルトの名無しさん
垢版 |
2020/01/26(日) 20:22:08.04ID:OTxXTlwF
>>731さんの指摘も踏まえ>>730のコードを以下のように修正してみました
JavaScriptです、念のため…

let n = 24
const sup = Math.sqrt(n);

for(let i=2;i<=sup;i++) {
if(n % i !== 0) continue;
while(n % i === 0) {
n /= i;
console.log('どんだけぇ〜♪');
}
}

ここはこうした方がいい等あれば教えていただけると幸いです
0743デフォルトの名無しさん
垢版 |
2020/01/26(日) 20:28:47.99ID:3yHBwxN6
>>734
1階は必ず割れない
N階は必ず割れる
という設定とする

卵を落とす最大回数をa回とすると
N≦(a^2 + a + 4)*0.5
までは調べられる
0745デフォルトの名無しさん
垢版 |
2020/01/26(日) 20:34:49.19ID:3yHBwxN6
>>742
n/= i
を実行する度にsupの値を減らせる

最後に残ったnが1じゃない場合
もう1回文字列を表示する必要がある
0746730
垢版 |
2020/01/26(日) 21:16:56.89ID:OTxXTlwF
>>744
そこは731さんの指摘のままに書いて深く考えていませんでしたが
745さんの言うようにsupの値を減らせるというところにヒントがありそうですね
再帰的?なやりかたになるのかな…うーんわからん

>>745
上については上述の通りまだわかりませんが
下は、小さい順にしらみつぶしで割れるだけ割っていっているのでおっしゃるような結果にはならないのではと考えるのですがどうでしょうか
0747デフォルトの名無しさん
垢版 |
2020/01/26(日) 21:23:54.19ID:pipfilQo
>>746
nに3とかを入れてみると最後の表示については確認できるかと

割り切れたときはiはそのまま
割り切れなかったらiを+1
ループでできるはず
0748730
垢版 |
2020/01/26(日) 21:28:27.08ID:OTxXTlwF
>>747
確認しました…>最後の表示
ちゃんと自分で調べないとダメですね
ちょっと直してみます
0749デフォルトの名無しさん
垢版 |
2020/01/26(日) 22:44:40.59ID:2jcz6vHU
>>734
このお題は、どこかで見た

VBScript のスレか何かで、ピッコロ大魔王が出したクイズじゃないの?w
0750デフォルトの名無しさん
垢版 |
2020/01/26(日) 22:55:24.81ID:2jcz6vHU
>>744
素数かどうかなど、素因数分解する際、平方根まで調べれば見つかるから

例えば、a, b が素数で、a < b の時、
a * b = 7 * 11 = 77 なら、√77 = 8.8 で、aは、9 以下で必ず見つかる

つまり、
平方根よりも小さいa * 平方根よりも大きいb = 77
0752デフォルトの名無しさん
垢版 |
2020/01/26(日) 23:07:17.76ID:pipfilQo
>>749
ネタ元はグーグルの入社試験
ググったら解法もわかる
プログラムで解いてる人は少ないからプログラミング能力を測るのに適当かと
0753デフォルトの名無しさん
垢版 |
2020/01/26(日) 23:18:06.25ID:pipfilQo
お題
ある長方形の面積Sが与えられたとき
短い方の辺の長さが最も長くなるときの縦の長さと横の長さを出力してください
0755デフォルトの名無しさん
垢版 |
2020/01/26(日) 23:29:57.26ID:pipfilQo
>>751
掛け算の対称性は小学校の算数で習うので
整数論とかそんな難しい話は必要ないんじゃ……
0758デフォルトの名無しさん
垢版 |
2020/01/27(月) 06:18:43.37ID:rJ1Bl2Oz
>>714 Ruby

require 'prime'
n=24
Prime.prime_division(n).each{|_,k| puts ["どんだけぇ〜♪"]*k}
0759デフォルトの名無しさん
垢版 |
2020/01/27(月) 07:34:21.87ID:ZyjcNjD+
出題者には回答者からのお題の疑問には答えない主義なの?

「効率」とは何か聞かれてなかった?
0761デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:13:37.57ID:iRmt59/C
文章の読解も問題に含まれてるのでうざ絡みで答え教えてもらおうとするのは卑怯
0762デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:22:09.65ID:7flpRMwp
それは問題が十分よくできているときにのみ有効な論であって、
例えば賭け事のオッズとして1未満の値を設定してくるような阿呆がいた場合にはそれ相応の質疑が必要
0764デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:32:00.67ID:iRmt59/C
グーグルの採用試験で使われてて解説記事もたくさんあるからわからないのは読解力が劣ってるだけ
0766デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:42:24.41ID:7flpRMwp
・グーグルの採用試験と一言一句同じなのか
・グーグルに入社できることが何かの優位性を確実に示し得るのか

はい
0771デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:52:33.69ID:iRmt59/C
>>769
それはただのタイプミスだからそこに疑問を持つ人はいなかったよw
その指摘は流石に低学歴すぎる
0774デフォルトの名無しさん
垢版 |
2020/01/27(月) 10:57:17.70ID:7flpRMwp
>>773
結論ありきで推論しててキモいよお前
俺はグーグルに入社してるバカも知るっていう例を提示しただけ
0777デフォルトの名無しさん
垢版 |
2020/01/27(月) 11:01:10.63ID:7flpRMwp
ID:iRmt59/C がバカすぎて最高に笑える
まあそいつは麻布→理1→グーグルだから馬鹿だったけどお前よりは確実に賢いわ
0780デフォルトの名無しさん
垢版 |
2020/01/27(月) 11:12:30.58ID:j8/I9hQ5
>>771
タイプミスなんて言われんでも分かるよ。
一字一句同じ?同じ!なんて自信満々に答えてるくせに全く確認もしていないいい加減で信用できない奴だなと思っただけだよw
0782デフォルトの名無しさん
垢版 |
2020/01/27(月) 11:49:20.80ID:iRmt59/C
>>780
タイプミスはわかるのに問題は読み解けないんだな
それがお前の限界、無理すんな、お前には無理だ
0784デフォルトの名無しさん
垢版 |
2020/01/27(月) 11:53:35.80ID:iRmt59/C
グーグルの前でお前らは生まれて初めての無力感を味わってるだろうがそれをバネに成長するかどうかはお前ら次第

問題に文句言って満足して終わるのか自らの力不足を認識して研鑽を積むのかこれでお前らの本当の実力が明らかになる
0785デフォルトの名無しさん
垢版 |
2020/01/27(月) 11:57:23.59ID:iRmt59/C
>>781
良くありそうな問題だがお前らは解けない
その現実を見せつけられて逆ギレするのはみっともない
無知を自覚してステップアップ、周りのみんなに差をつけよう
0787デフォルトの名無しさん
垢版 |
2020/01/27(月) 12:14:18.47ID:iRmt59/C
スレタイ音読してノートに書き写して口と耳と手と頭を使い全身でスレタイを理解したけど俺は間違ってないぞ

問題を読み解いてあっと驚くようなオリジナリティ溢れる独創的で優雅な回答を期待してるんだがお前らは何を問われてるのかさえわからない状態だろ

手とり足取り教えて回答に導かれたとしても正確がひねくれてるお前らはそれを嬉しいとは思わないだろ、だったら俺がお前らにできることは一つだけ、お前らが殻を破って成長するのを見守るしかない
0790デフォルトの名無しさん
垢版 |
2020/01/27(月) 12:56:13.37ID:UkOypP5f
落とす回数だけ考えれば良いなら答えは簡単
プログラミングのお題である必要は無い
とても簡単な数学の問題

階の上下のコスト、たまご自体のコスト、たまごを落とすコスト
が決まっていて
コストの最小化問題であるなら
やっとプログラミングの出番

たまごを落とす回数しか効率よ中身として思い浮かばないのなら
発想が乏しすぎる
0791デフォルトの名無しさん
垢版 |
2020/01/27(月) 12:59:24.87ID:lki83My8
時間の無駄だってグーグルの人事が言ってからだいぶたつのに
まだこんなやついるのか
0792デフォルトの名無しさん
垢版 |
2020/01/27(月) 13:02:02.71ID:MAYcFInA
>>734
引っかけ問題だとすると、とにかく落として卵が割れさえすれば「何階で割れるか」は判明した事になる(何階が割れる割れないの境目の階かを求めよという問題になってないので)、いきなり最上階のN階まで上がってしまい、そこで一つ落として割れるかどうかを確認して終わり。
■ このスレッドは過去ログ倉庫に格納されています

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