プログラミングのお題スレ 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/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
大抵の環境でコマンド通らないんじゃないかそれ
2019/10/06(日) 20:12:57.33ID:XBuBF2Rc
#!/bin/sh
echo このプログラムが起動するのは一度きりである。実行ののち、消去される。
\rm -f $0
2019/10/06(日) 20:16:32.32ID:lJB/egMg
lol $0 じゃなくて / にしてるのかwww
2019/10/06(日) 20:19:37.81ID:bPt7YQEe
>>707みて、できなくはないが、やりたくない気分になった。
http://www.t-net.ne.jp/~cyfis/c/stdlib/system.html
上記を使えば、PGからコマンドラインに干渉できる。が!ねぇ・・・。
場所もargc[0]に書いてあるんだけどねぇ・・・。

WA.
710デフォルトの名無しさん
垢版 |
2019/10/06(日) 21:19:08.41ID:QZjIPE+j
シェルスクリプト総合 その31
https://mevius.5ch.net/test/read.cgi/tech/1565446670/
711デフォルトの名無しさん
垢版 |
2019/10/07(月) 13:22:48.77ID:lSqRbxbA
>>703
Linux等のUNIX系OS

at now +1 min

などとやって at job が一分後に動くようにして次の1行を入力してから Ctrl+D で終了させる。

echo 'このプログラムが起動するのは一度きりである。実行ののち、消去される。'

その後1分待つと上記文言の出力後 at job は削除される。

ただし通常の出力先である標準出力はないことになっているのでatによって拾われてメールでエラーメッセージと共に送られてくる。
それを見たい場合はmailコマンドで送られてきたメールの内容を見る等する。
2019/10/07(月) 18:38:53.78ID:tyyduGK2
>>703 C++/Win32

#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
printf("このプログラムが起動するのは一度きりである。実行ののち、消去される。\n");
FILE *fp = fopen("delete-me.bat", "w");
fprintf(fp, "@echo off\n");
fprintf(fp, ":retry\n");
fprintf(fp, "del \"%s\"\n", argv[0]);
fprintf(fp, "if exist \"%s\" goto retry\n", argv[0]);
fprintf(fp, "del delete-me.bat\n");
fclose(fp);
ShellExecuteA(NULL, NULL, "cmd", "/c delete-me.bat", NULL, SW_HIDE);
return 0;
}
2019/10/07(月) 22:21:05.16ID:aU+ghkHH
>>703 Perl5

print "このプログラムが起動するのは一度きりである。実行ののち、消去される。\n";
unlink $0;


実行結果
~ $ perl 15_703.pl
このプログラムが起動するのは一度きりである。実行ののち、消去される。
~ $ ls -o 15_703.pl
/usr/bin/ls: cannot access 15_703.pl: No such file or directory


嫌なプログラミンッグだな、一歩書き間違がや大参事。
こういうお題はご遠慮願いたいものだ…
2019/10/07(月) 22:32:50.62ID:aU+ghkHH
すまぬ >>713 は題意とは違うな。
プログラムの実行が終了してから削除されるわけか…

>>703 bash

(sleep 4; rm -f $0)&
echo このプログラムが起動するのは一度きりである。実行ののち、消去される。

実行結果
$ bash 15_703.sh
… 数秒後
$ ls -o 15_703.sh
ls: 15_703.sh にアクセスできません: No such file or directory
2019/10/07(月) 22:35:14.10ID:aU+ghkHH
>>714 実行結果貼りそこなったorz

$ bash 15_703.sh
このプログラムが起動するのは一度きりである。実行ののち、消去される。
$ ls -o 15_703.sh
-rw-r--r-- 1 ******** 98 10月 7 22:29 15_703.sh
… 数秒後
$ ls -o 15_703.sh
ls: 15_703.sh にアクセスできません: No such file or directory
2019/10/07(月) 23:18:10.62ID:Hq5Oz5C1
MSX BASIC
10 print"オハヨウフェルペスクン,コンカイノキミノニンムダガイカリャクナオコノテープハジドウテキニショウメツスル"
20 new
2019/10/07(月) 23:48:42.06ID:ti3U/Qjr
>>703
https://ideone.com/B5bVTK
C++。自分ができるのはここま・・・で・・・だ。。。

うぼぁあああああああ。
2019/10/07(月) 23:54:31.61ID:9cpaLYwd
実行時にexeにロックがかかるから、実行終了を待つsystem関数では消せないんだ、これが。
2019/10/08(火) 00:32:11.48ID:LPLIE15X
拡張子.batはコマンドプロンプトのバッチファイルを表す。
2019/10/08(火) 01:09:42.27ID:LQA6uDl1
https://ideone.com/ABzMBS
C++&.
2019/10/08(火) 01:10:33.04ID:LQA6uDl1
>>720
C++&Windows.
おかしなキーコンビネーションで投稿してしまったが、それは置いといて。
結構な沼だったわ。
2019/10/08(火) 01:14:29.28ID:LQA6uDl1
あ、数秒後にタスクを実行したかったが、分単位にしかならないようだ。
2019/10/08(火) 01:31:36.46ID:YlPtBjRn
どM乙。
2019/10/08(火) 02:43:45.63ID:LQA6uDl1
https://ideone.com/s1OxbV
C++&Windows. 結局バッチ作ってバッチを削除するようにした。
2019/10/08(火) 02:45:57.47ID:LQA6uDl1
C++で書いている意味があまりないなぁ。
頭がこんがらがってくるわ。
2019/10/08(火) 03:07:50.37ID:LQA6uDl1
タスクスケジューラには一個のタスクしか持たせることができません。
タスクスケジューラの健康のために削除タスクと削除タスクをkillするタスクを入れたという欲が出ました。
さて、どうすればよかったのでしょうか・・・。
2019/10/08(火) 03:25:53.77ID:LQA6uDl1
https://ideone.com/8DBn1u
チョットシンプルになった。
けど、ただスケジュールしてバッチファイル作るだけになっちゃった・・・。Orz

ううううううぼぉぉぉおあぁぁぁあああ。。。
2019/10/08(火) 18:18:17.33ID:9WsdIwSr
おしい
2019/10/08(火) 22:43:05.75ID:8UaWwWzr
「インターネットには戦力外通告とかが無いから頭の悪い人がいつまでも打席に立って三振し続ける」
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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