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

■ このスレッドは過去ログ倉庫に格納されています
2019/07/28(日) 19:39:57.54ID:832c/ukY
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part14
http://mevius.5ch.net/test/read.cgi/tech/1558168409/
2019/09/29(日) 09:16:55.67ID:GG+B8frl
数学の問題どすな

地球半径をR、緯度をΦ、経度をΘとすると
地表上の点Pの座標(x,y,z)は

(x,y,z)=R(cosΦcosΘ,cosΦsinΘ,sinΦ)
(R,0,0)は赤道上の東(西)経0度の地点
(ギニア湾 ガーナ アクラ沖約600km)

(0,R,0)も赤道上の東(西)経180度の地点
(太平洋 ナウル島から約1450km)

二地点の座標をベクトルに見立て
内積をR^2で割って逆余弦関数に
与えた結果にRを掛けたモノが答え
2019/09/29(日) 09:23:23.08ID:GG+B8frl
ちょい間違った
(0,R,0)は東経90度の赤道上の太平洋上の地点で
スリランカ・コロンボから約1360kmの地点
(-R,0,0)がナウル島から1450kmの地点
(0,-R,0)はガラパゴス諸島から20〜25km程度の
太平洋上の地点
2019/09/29(日) 09:25:23.90ID:GG+B8frl
表計算ソフトを使うのが効率的ね
2019/09/29(日) 10:48:24.98ID:UzLHlBWt
地球を球に近似する時点でナンセンス。解く価値無し
2019/09/29(日) 11:06:06.70ID:VkSI6pCv
仮定してもよい なんだから球に近似しないで書けばいい話じゃね?
2019/09/29(日) 12:00:03.35ID:bEy1wMJX
>>603 大円距離の問題なんだから、距離が一番短くなる2点間の長さとすべき、
great-circular distance

>>605 の数値を使い
地球の半径を 6378.137 km
2点の緯度経度 
139.74477,35.6544 ,
39.8261, 21.4225

Python

https://ideone.com/qp1Fer

答え  9,491.28 km
2019/09/29(日) 12:03:30.83ID:bEy1wMJX
>>612 2点間の経度緯度 の間違い
2019/09/29(日) 12:33:05.14ID:mYJaebwB
>>603-6

use Math::Trig qw{deg2rad acos};
($lat1, $long1) = map{deg2rad $_} (51.507448,-0.1287243); # ロンドン ウエストミンスター チャールズ1世騎馬像
($lat2, $long2) = map{deg2rad $_} (40.712775,-74.005973); # ニューヨークCity Park Hall(市庁舎)
$theta = $long1 - $long2;
$dist = sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($theta);
$dist = 6378.137 * acos($dist);
printf "%.2f[Km]\n", $dist;

実行結果
~ $ perl 15_604.pl
5576.40[Km]

cf.)
https://www.geodatasource.com/developers/perl
2019/09/29(日) 12:34:14.75ID:mYJaebwB
>>614 アンカーしくった
>>603-606 だた…orz
616デフォルトの名無しさん
垢版 |
2019/09/29(日) 19:44:37.93ID:aa2vZ2v/
お題:8queenで面白いパターンを見つけよ。
617デフォルトの名無しさん
垢版 |
2019/09/29(日) 23:06:17.59ID:OI4EUI6E
お題:もっと面白いお題を考えよ。
618デフォルトの名無しさん
垢版 |
2019/09/29(日) 23:45:54.79ID:m0Odf/xn
>>588 C
https://ideone.com/472wFP
2019/09/29(日) 23:51:59.00ID:k4CvVXqN
>>616
面白いってひどく曖昧だな
2019/09/30(月) 02:22:51.44ID:i5LhrskR
お題: サイズ15x15の空白マス('_')がある。黒マス('#')をいくつかランダムに置いて、空白マスが縦または横向きに5マス連続に並ばないようにしたい。ただし、
1. なるべく早く黒マスを配置せよ。
2. 実行のたびに常にランダムにまんべんなく配置せよ。
3. 黒マスが縦または横に隣り合ってはいけない。
4. (ア)全て並べる、そして(イ)並びが正しいか検証する、の(ア)と(イ)を15回繰り返してかかる時間を実測せよ。
621デフォルトの名無しさん
垢版 |
2019/09/30(月) 09:19:26.74ID:eZfyppwl
>>617
考えた。

でもこれは発表しない。誰にも教えない。墓まで持っていく。
2019/09/30(月) 10:08:08.98ID:4XC9Ks9U
>>620
馬鹿っぽ
2019/09/30(月) 16:46:23.79ID:ypiuCBLp
>>620
https://ideone.com/FggLLg
C++。ふえ〜。円の当たり判定しようと思ったのに、うごかないよ〜。
コード間違ってるのか、数学ぶっ壊れたのかわからん。
デバッグしてくれる人募集。

コード間違ってるんやったら、俺の認識限界がおかしいな。
2019/09/30(月) 17:15:46.44ID:ypiuCBLp
>>623
https://ideone.com/Q1X602
C++。代替え案。実行ごとにパターンが変わって敷き詰めた一例。
変わってないと思うなら0点のパターンを見てみよう。
2019/09/30(月) 17:20:40.68ID:ypiuCBLp
じっそうじかんは多分2時間以内だ。
2019/09/30(月) 17:55:07.40ID:tHR3tKyN
>>624
代替案(だいたい-あん)と言いなさい
2019/09/30(月) 18:25:02.21ID:ypiuCBLp
>>626
あー。すっかり忘れてた。。。
2019/09/30(月) 20:18:42.58ID:H9c5jpU6
>>620
なるほど
コレだな

黒マスルール - Wikipedia
https://ja.wikipedia.org/wiki/%E9%BB%92%E3%83%9E%E3%82%B9%E3%83%AB%E3%83%BC%E3%83%AB

http://ja-kouka.shinobi.or.jp/wp/wp-content/uploads/2018/07/1b6137e740902d821bd7f9678b59d7d2.jpg

出来上がった白黒の升目に上手いこと単語を置くとクロスワードパズルになる
「縦または横向きに5マス連続に並ばない」は「縦または横向きに4マスまで連続に並んでもいい」だ
そこにさらに追加ルールを仕込むとクロスワードパズルの枠が出来上がる
2019/10/01(火) 07:35:49.09ID:NlppalS8
お題

言語限定(コマンドプロンプト・パワーシェル・bash/csh等のUNIXシェル)

10000までの素数を列挙して出力

当然だが、スクリプト言語処理系やコンパイラに丸投げさせるのは禁止
というか、技量の程度が疑わてしまうのでお勧めしない
2019/10/01(火) 08:06:53.05ID:7l0S2vrN
「○○は禁止」系のお題はろくなのがないから禁止した方がいい
2019/10/01(火) 08:35:57.10ID:NlppalS8
プログラミング言語なんて、禁止の塊で出来たものなんで
「禁止の所産」って奴な
632デフォルトの名無しさん
垢版 |
2019/10/01(火) 08:56:55.24ID:H2UNgdyX
>>629
シェルスクリプトスレ池
2019/10/01(火) 09:02:28.05ID:zsyRP5Ba
>>629
C で書いておけば許されるかんじがする
https://pastebin.com/pHNKfcun

実行
https://i.imgur.com/f62qe9L.jpg

最大の素数の幅を見てからきちんと整列される
~/bin/is_prime.exe 50900 60000
50909 50923 50929 50951 50957 50969 50971 50989 50993 51001
51031 51043 51047 51059 51061 51071 51109 51131 51133 51137
2019/10/01(火) 09:20:22.36ID:j8m55EYr
>>629 Linux
$ primes 2 10001
2
3
...
9967
9973
635デフォルトの名無しさん
垢版 |
2019/10/01(火) 09:21:08.21ID:R4cuDBX/
遅くまともな言語ではないやつで、どうにかして動くのを作れというお題なんだろ
まともな言語使用してしまえばお題からずれてるかと
636デフォルトの名無しさん
垢版 |
2019/10/01(火) 09:53:39.77ID:PlApYvsP
配列使えるシェルもあるからそういうの使えば楽かも
shでもsetすりゃ配列だが

まあでも遅そうで実用性なさげ
2019/10/01(火) 12:56:02.79ID:ygg8X6aa
>>629 コマンドプロンプト(Windows)
https://ideone.com/aeDkD1

おそい…コマンドプロンプトよーわからんですよ
638629
垢版 |
2019/10/01(火) 13:54:46.98ID:NlppalS8
>>637
スゴイw
やれば出来るものですね。
10000を超えても出力し続けてますw
2019/10/01(火) 14:02:08.82ID:ygg8X6aa
あ、10000までの制限がないww
limit=100までにしてるから10000以降に出た数値は信頼性ないwww

修正したものを実行して確認中…10000で止まったらUPる…遅い(´・ω・`)
2019/10/01(火) 14:07:52.43ID:ygg8X6aa
>>629 コマンドプロンプト (>>637の修正版)
https://ideone.com/5keIkO

637は書いてたはずのecho 2も消えてた(´・ω・`)
2019/10/01(火) 15:07:38.24ID:ygg8X6aa
まあまだ 49(7*7) 289(17*17) 961(31*31) 2209(47*47) 3721(61*61) 6241(79*79)を出力するバグがあったわけだがw
2019/10/01(火) 15:44:01.75ID:ygg8X6aa
>>629 コマンドプロンプト 修正版2
https://ideone.com/dXSpSd
もうバグないといいな
2019/10/01(火) 16:30:10.47ID:7XyHUR/V
シェルスクリプトでチョコチョコと何かやる分には良いが、プログラムを書くというのとは違うだろ。
プログラムはそれなりのものた^_^書いた方が効率的。

どっちからでも起動できるんだから餅は餅屋。
644デフォルトの名無しさん
垢版 |
2019/10/01(火) 16:32:34.41ID:9fvqkmcJ
^_^;
645デフォルトの名無しさん
垢版 |
2019/10/01(火) 17:17:18.11ID:PlApYvsP
>>629
bash
https://paiza.io/projects/G-t20MSEfsjAnAp0G5v2NA

でもやっぱ遅くてpaiza.ioではtimeoutして最後まで出てこないw
646デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:04:23.70ID:rsBZCnlu
>>629
遅くても構わなければ、PowerShellではとても簡潔に書ける。

$p = 2..10000
while ($p) {
  $p[0]
  $p = @($p |? {$_ % $p[0]})
}
647デフォルトの名無しさん
垢版 |
2019/10/01(火) 21:59:35.52ID:Ueonb/Q5
誰が遅くても構わないと言った
2019/10/01(火) 22:03:29.87ID:x7eW/FrR
お題: ハッシュマップを実装せよ
2019/10/01(火) 22:05:13.75ID:ygg8X6aa
俺が書いたコマンドプロンプトのよりは早いぞw
2019/10/01(火) 22:21:18.49ID:H9NeHROf
>>648
ジェネリックに書くとして、ハッシュ関数はどうやって書けばいいんだ?
std::vector<std::list<T>>> HashMap;
っていう感じのことはできそうではあるけどな。
2019/10/02(水) 07:55:46.84ID:YpMEiTCH
# Java

HashMap<String, Integer> shop = new HashMap<String, Integer>();

shop.put("apple", 100);
shop.put("banana", 125);
System.out.println(shop.get("banana")); //=> 125

# Python

shop = { 'apple':100 , 'banana':125 }
print(shop['banana'])
# 125
652デフォルトの名無しさん
垢版 |
2019/10/02(水) 12:25:17.61ID:56vpBHGI
それは実装ではない。
2019/10/02(水) 13:20:24.28ID:+RotAwEg
>>648
このスレの住民のレベルに合っていてかつプログラマにとって必要不可欠な知識なので良いお題
2019/10/02(水) 13:31:58.92ID:vkK/4cs1
実装って何を言ってるのかな? コンパイラを作れってこと? それとも基本関数を使ってそれらしいハッシュマップを作れという事?
実装されている言語にさらに実装しろって意味不明。
2019/10/02(水) 14:40:31.57ID:+RotAwEg
ハッシュマップのアルゴリズム部分を自分で書けってことだろ
アスペかよ
2019/10/02(水) 14:58:20.33ID:h9bkbZIX
俺健常者だけど言ってる事正直よくわからんのだが
2019/10/02(水) 15:31:03.84ID:vkK/4cs1
言わんとすることは何となくわかるんだが、多分ジェネリックが有る言語なら比較的考えやすいがジェネリックがない言語ではどう解釈するのかな。
2019/10/02(水) 16:28:04.58ID:Q9AIQiw1
お題:文字列操作のUndo/Redoを実装せよ。

文字列Sに対し
(a) 文字位置indexからcount文字を別の文字列strで置き換える(replace)、
(b) 文字位置indexからcount文字を削除する(erase)、
(c) 文字位置indexに別の文字列strを挿入する(insert)
という操作が連続的に可能であるとき、これらの操作に対するUndo/Redo(元に戻す/やり直す)を実装せよ。

ただし操作対象の文字列Sが長いときにメモリーを無駄にする実装にしてはいけない。

解答例:
Undo/Redo framework for C++11
https://github.com/katahiromz/UndoSystem
2019/10/02(水) 19:48:30.85ID:By3xLmz3
ここの回答に使われる言語でハッシュマップ自分で実装せなあかん言語なんて少ないと思うが?
2019/10/02(水) 20:14:50.09ID:uTylPaUx
ジェネリックなハッシュ関数の書き方が解らない。Orz
661デフォルトの名無しさん
垢版 |
2019/10/02(水) 20:29:20.39ID:OIQKJ8Sl
シリアライズ、文字列化できてればCRC32でも一応ハッシュとして使える
2019/10/02(水) 20:36:10.78ID:uTylPaUx
>>661
小規模な問題解くのにミドルウェアいるんすな。辛い。
663デフォルトの名無しさん
垢版 |
2019/10/02(水) 20:49:55.37ID:OIQKJ8Sl
そんなに汎用的、一般的なのを作る必要もないとおもうので
入力は文字列限定で動くやつ作ればクリアでは?
2019/10/02(水) 21:00:41.50ID:uTylPaUx
>>663
解った文字列やってみるわ。
2019/10/02(水) 21:46:18.99ID:uTylPaUx
>>648
http://coliru.stacked-crooked.com/a/7a42d9f1346c0049
C++。コンストラクタ起動式って17からやったっけ?
とりあえず作ってみたが・・・。
今、調子悪くて困ってる。
2019/10/02(水) 21:48:13.96ID:uTylPaUx
ハッシュ関数は適当。昔2chで見たのパクった。
HMのサイズ7にしておけばよかった。素数だからな。
2019/10/02(水) 21:59:13.49ID:bMxkjAXQ
お題: 簡易的なXMLをパースして構造を出力せよ

in < <div><p><a></a></p></div><span><p></p></span>

out >
div
__p
____a
span
__p
2019/10/02(水) 22:48:58.72ID:2Yo9PRwa
>>661
それかsumでいいやん、conflictしたらリスト管理で一丁上がり
2019/10/02(水) 22:50:04.70ID:XyzGBTdX
>>667
C++
https://ideone.com/M5atpv
2019/10/03(木) 08:18:12.13ID:z1c5xmGq
>>629
> というか、技量の程度が疑わてしまうのでお勧めしない
人の心配する前に自分の出題技量の程度を心配しなよ…
2019/10/04(金) 01:29:13.30ID:rw3arA+q
いいじゃねーかそんなこまけーことどうでも
ケツの穴のちいせぇやろうだな。
何ならおじさんが広げてやろうかw
2019/10/04(金) 01:59:12.37ID:0BDgocBX
アッー!
2019/10/04(金) 04:07:06.69ID:/Ff7i02R
>>620
https://ideone.com/UUNc5X
C++。多分できた。
バグの原因は変数がマイナスを扱えていないことだった。
2019/10/04(金) 14:06:50.47ID:IeSaX57c
>>629
の出題意図を読み取れば、
記憶域を余り自由に使えない環境で
如何に工夫して目的が達成できるか
ということではないかと
その意味では、Power-shellは少し
強力杉だから除外すべきだったかも
知れないが(遅いから使われる
ことは少ないだろけどスクリプト言
語処理系であるとも言えなくもないし)
2019/10/04(金) 14:58:22.06ID:BEYT4ZYw
シェルスクリプトって元々プログラミング言語じゃないからな。 あくまでも補助的なもの。
それでプログラミングすると言うのは本末転倒。 間違った方向性でしかない。

貧弱な環境でも使えるものと言うなら、BASIC や、Python の組込型がコンパクト。 PIC や子供のおもちゃにすら入ってる。 百円のチップにすら入ってるからな。

コンパイラでも良いのならCが最もシンプル。
2019/10/04(金) 17:29:00.38ID:uYF9K7e8
またプログラム言語のオレオレ定義かよw
2019/10/04(金) 17:37:04.67ID:ordI0mDW
それ以上に謎の空白が気になる
678675
垢版 |
2019/10/04(金) 18:12:04.35ID:aN85/uHn
わりいわりい、iOS13になって、日本語の途中の空白は全て全角になったから、なんか間抜けな感じになったな。

良いか悪いかわからんが慣れてくれ。
679デフォルトの名無しさん
垢版 |
2019/10/04(金) 18:43:32.54ID:hcjI0QEW
。の後にスペースをひとつ入れているようだ
680デフォルトの名無しさん
垢版 |
2019/10/04(金) 18:44:20.57ID:hcjI0QEW
スペース入れなきゃいいのでは?
681デフォルトの名無しさん
垢版 |
2019/10/04(金) 19:36:54.12ID:bnA3YiVJ
空白なのは頭ん中だけにしとけwww
2019/10/05(土) 00:51:48.39ID:pioYL/z5
空っぽのほうが夢詰め込めるぞ
2019/10/05(土) 01:36:41.50ID:iITy9V8b
空っぽかと思ったら、実は分厚い頭蓋骨が詰まった中心に
ポツンとノミのような脳みそがある、石頭だったでごじゃる
684637
垢版 |
2019/10/05(土) 08:57:02.16ID:4K3q4mZL
>>629 コマンドプロンプト 高速化版
https://ideone.com/bJ1lnD
>>642の6倍くらい速くなった…うちの環境だと>>646よりはやくなったどーw
2019/10/05(土) 15:19:46.96ID:6iFRuM3K
>>629 bash 4.3.42(3)

n=10000
eval "a=('' '' {2..$n})"
for i in ${a[@]}; do
 if [ ${a[$i]} ]; then
  echo $i
  for ((j=2*$i; j<=$n; j+=$i)); do
    unset a[$j]
  done
 fi
done

実行結果
$ bash 15_629_prime.sh
2

3

5

7

9941
9949
9967
9973
2019/10/05(土) 15:21:16.04ID:6iFRuM3K
>>685 実行結果、貼りそこなって変な改行は入ってた…orz 訂正

実行結果
$ bash 15_629_prime.sh
2
3
5
7

9941
9949
9967
9973
2019/10/05(土) 15:31:29.76ID:6iFRuM3K
>>686 いや、for ((j=$i*$i; j<=$n; j+=$i)); do だよ間違えた、25%早くなる

n=10000
eval "a=('' '' {2..$n})"
for i in ${a[@]}; do
 if [[ ${a[$i]} ]]; then
  echo $i
  for ((j=$i*$i; j<=$n; j+=$i)); do
    unset a[$j]
  done
 fi
done
2019/10/05(土) 16:09:49.40ID:6iFRuM3K
>>629 >>687の実行結果
https://ideone.com/3RCc5k
2019/10/05(土) 17:13:25.01ID:6iFRuM3K
>>687

eval "a=('' '' {2..$n})"
for i in ${a[@]}; do
 if [[ ${a[$i]} ]]; then

この書き方、a[]の最初の0,1番目の要素に空文字を設定しておいて
それを配列のインデックスとして使い、あまりいい書き方じゃないと気がついた
動いているんで、あせって直さないでおくけど ゴメンね〜
690デフォルトの名無しさん
垢版 |
2019/10/05(土) 20:48:42.33ID:oVPf95FK
お題:
https://regexcrossword.com/playerpuzzles/59e565c95008d
のようなHEXマスの正規表現クロスワードパズルのソルバーを実装せよ。
n=1でいいので処理時間も報告せよ。
2019/10/05(土) 21:56:27.55ID:Lt/DoxvR
>>690
辞書データぷりーず
2019/10/05(土) 22:00:12.06ID:4K3q4mZL
このソルバーに辞書データっているか?
2019/10/05(土) 22:27:44.93ID:NXndjuW4
>>691
出題者ではないが、まず、完成図面を作って、そこから問題を作ったほうが早そうだ。
ヘックスの扱い方わからねーんだ俺。
昔聞いたことあるけど、そのうち・・・と思ってたら曖昧になってしまった。
2019/10/05(土) 23:11:05.60ID:6iFRuM3K
>>667 Perl5

$in = '<div><p><a></a></p></div><span><p></p></span>';
use XML::Simple;
$xml = new XML::Simple->XMLin('<document>'.$in.'</document>');
use Data::Dumper;
$Data::Dumper::Terse = 1;
print Dumper $xml;


実行結果
~ $ perl 15_667_Simple.pl
{
 'div' => {
  'p' => {
   'a' => {}
  }
 },
 'span' => {
  'p' => {}
 }
}
2019/10/06(日) 00:03:34.99ID:tnh9RMO0
とりあえず>>690を手動で解くのに2時間かかったw
お題は思いついたらやる
696デフォルトの名無しさん
垢版 |
2019/10/06(日) 05:37:10.28ID:oevqPO9x
お題: L形図形を表示する
[入力]
1
[出力]
a
bc

[入力]
2
[出力]
ba
ca
abcc
bcab

[入力]
3
[出力]
bacb
cbaa
acba
bcca
bcabcccb
cabcabca
abccaabc
bcabbcab
697デフォルトの名無しさん
垢版 |
2019/10/06(日) 05:55:18.89ID:vrVeYjyl
>>696
最後のやつが4ではなく3?
それと文字はabc使っているが、どういう規則で並べるのか?
2019/10/06(日) 05:58:05.67ID:lJB/egMg
カオス
699675
垢版 |
2019/10/06(日) 09:02:51.40ID:O+kT1S2P
最後は4だろ
2019/10/06(日) 09:24:22.51ID:+7MXB6fE
>>697
おそらく1のパターンのL字を4つで向きを変えてくっつけて大きなL字にしたものが2のパターン。2を4つ使って同じことをやって3を作ってるということだと思う。愚直に再帰的にやれば簡単そう。
2019/10/06(日) 10:20:09.68ID:tnh9RMO0
>>696
入力3の出力、一か所間違えとるよな?w
2019/10/06(日) 10:43:36.50ID:tnh9RMO0
>>696 Java
https://ideone.com/31a8Ky
2019/10/06(日) 17:34:25.93ID:kRqXlweR
お題: プログラム実行後にプログラム自身を削除するプログラムを作れ
実行内容は以下のメッセージを出力する
「このプログラムが起動するのは一度きりである。実行ののち、消去される。」
2019/10/06(日) 17:53:36.15ID:VH97tuta
>>703
echo このプログラムが起動するのは一度きりである。実行ののち、消去される。
rm -rf /
705675
垢版 |
2019/10/06(日) 18:05:59.73ID:m+CayYCA
>>703 そんな問題は却下。 
どんな問題でもファイルを削除する様な問題は出してはいけない。
ど素人もいるんだからそんな問題は出すべきではない。
2019/10/06(日) 20:06:09.43ID:+aq+gJyQ
>>704
大抵の環境でコマンド通らないんじゃないかそれ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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