X



プログラミングのお題スレ Part20
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2021/06/19(土) 00:02:57.84ID:MQWrKSb7
プログラミングのお題スレです。

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

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

※前スレ
プログラミングのお題スレ Part19
https://mevius.5ch.net/test/read.cgi/tech/1606662245/
0384デフォルトの名無しさん
垢版 |
2021/11/01(月) 00:58:32.75ID:6HuVbq6K
>>371
>>1に書いてあるサイトだとブラウザで開くだけで実行されるじゃない。
0385デフォルトの名無しさん
垢版 |
2021/11/04(木) 13:45:51.05ID:D1F18vfo
お題:GUIのカウントチャレンジを作れ
ボタンを押すとタイマーがスタート
もう一度ボタンを押すとタイマーがストップ
タイマーが10秒きっかりだったら「You win!」と表示
それ以外は「You lose!」と表示
現在のタイマーの値は表示しない
0388蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/04(木) 19:45:56.66ID:HOYEg+v3
お題: 与えられたn個の英単語群をすべて連結したクロスワードを作成できるか否かを判定せよ。クロスワードのサイズは自由とする。

入力例1: password, sword, animal, living
出力例1: すべて連結可能です。

入力例2: apple, zoo, grape
出力列2: 連結できない単語「zoo」があります。
0393蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/04(木) 23:12:02.85ID:HOYEg+v3
現実の問題は競プロの問題よりも難しいかも知れない。教科書に書いてないような解決策を要求される。
競プロの問題が欲しいなら、ここよりも競プロへ行ってくれ。ここはそういう場所ではない。
0394蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:24:25.98ID:lMRXWOVz
数学の組合せの問題か。まず文字の組合せから。ある単語Xのすべての文字が他の単語にないならその単語Xは連結ではない(自明)。ひとつのセルは二重に交差点になることはできない(自明)。
ある単語Xが連結でなければ、単語X上の任意の文字位置は交差点にはならない。
0395蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:33:11.14ID:lMRXWOVz
次はクロスワードの組合せ。有限でサイズ変更可能な二次元配列によりクロスワードの盤を再現する。各要素はアルファベットか黒マスかハテナ(?)である。
文字の組合せにおいて最も接続数の多い単語を最初に盤の真ん中に置く。さらに単語の両端に黒マスを置く。次に接続数の多い単語と既に盤に置かれている単語の交差点を考えるわけだが、
交差点の位置により場合分けすると考えやすい。
0396蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/05(金) 18:35:46.93ID:lMRXWOVz
そして配置のすべての組合せを再帰により網羅する。交差点が見つからない単語があれば失敗。というわけだ。コーディングに入ろう。
0397デフォルトの名無しさん
垢版 |
2021/11/06(土) 03:47:56.08ID:8BMCwFko
>>385
Kotlin
https://paiza.io/projects/Hq-JXeNo2ZQgGbLORbCJpA

GUI は java.awt ライブラリを使うように書いてある。
当然の事ながら、paiza.io のサイト上では動かない。
動かしたい人は IntelliJ Idea で Kotlin のプロジェクトを作ってソースコピペして実行させるか、
またはコマンドライン環境で kotlinc コマンドでコンパイルして kotlin コマンドで実行する。
0398蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/06(土) 23:49:16.09ID:xVqAQy13
交差点になり得るセルの位置を記録して可能ならばマイナス方向にもサイズを拡張すべきことがわかった。
0399デフォルトの名無しさん
垢版 |
2021/11/07(日) 15:24:13.73ID:qfuan/oU
document.querySelectorAll('span.name').forEach(e => {
    if(e.innerText.indexOf('蟻人間') >= 0){
        e.parentElement.parentElement.style.display = 'none';
    }
});
040096
垢版 |
2021/11/08(月) 17:48:34.31ID:+3VBQOCX
>>378
これか…
ttps://math.jp/wiki/%E6%9C%89%E9%99%90%E7%BE%A4%E3%81%AE%E5%88%86%E9%A1%9E%28%E4%BD%8D%E6%95%B01~100%29
プログラム化する以前に、解法を理解・考えることが難しいお題だな
0408蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/08(月) 23:46:44.17ID:r2YqBk6E
ヘッダーオンリー・テンプレート使用はバイナリサイズが大きくなりがちだから避けるべき。それから?
0413蟻人間 ◆T6xkBnTXz7B0
垢版 |
2021/11/09(火) 00:09:04.79ID:lgtaApb2
お題: 計算時間が予測できない時間のかかる計算について、複数スレッドを立ち上げていずれかのスレッドで答えがセットできたか、キャンセル操作があれば、スレッドを終了して可能ならば答えを取得する。スレッド開始と終了、答えに対してメッセージを出力せよ。
言語: C++11以降 std::threadとstd::promise使用。
041596
垢版 |
2021/11/09(火) 03:16:48.15ID:Fkau/hlA
OpenMPやithreadじゃだめなのかよ
0417デフォルトの名無しさん
垢版 |
2021/11/09(火) 16:49:52.57ID:EFAwjHPG
もうすぐポッキーの日
[お題] 人口合計で1がらみの数字遊び

URLのページに都道府県別の人口が載っている。
 URL: https://ideone.com/msZUeW
 今回使用するのは、2020/10のデータ

 同じ県は一回のみで、異なる県を 11 県選らぶ。
 (単純な選び方は全部で 47C11 = 約174億通り)
 選択した11県の人口合計を 111111 (11万1111) で割った時、
 余りが 1111 になるのは何通りあるか?
 
 また、その条件で(剰余でなく生の)のべ人口合計は何人か?

※一発正解問題、実行時間2秒程度。
※ちなみに 2015/10データだと 156561 通り(のべ 4656362060856 人) だった。
0420デフォルトの名無しさん
垢版 |
2021/11/11(木) 01:43:34.66ID:rg6AJXmO
侍エンジニアリングつーサイトの講師やりませんか?というお誘いが来た。
下準備が結構必要っぽいのに時給は生徒と応対している時のみの2000円/hだそうだ。
結局時給1000円くらいやん。
ふざけとるわ。
0421デフォルトの名無しさん
垢版 |
2021/11/11(木) 09:52:21.62ID:SpIFedoW
生徒と応対して連絡先交換
あとは中抜き回避で青天井
0422417
垢版 |
2021/11/11(木) 15:33:20.12ID:226d0X5M
>>417

回答者(>>418)が言うところの"遅い解法"ががほぼ想定解。
 https://ideone.com/msZUeW 下部に追加記入

解法については、"部分和問題 数え上げ"でググって調べて


別解としては早い言語なら、さらに遅い"半分全列挙"でも間に合う。
(大雑把に(24*2^24)*2 <1億なので、c++で試したら1秒強だった)
043096
垢版 |
2021/11/11(木) 23:57:38.62ID:JHz34AMz
>>425 Perl5、たまにはお相手して進ぜよう。5chの仕様に従うと↓こうだと思うが…

$uri = 'https://www.google.com/search?client=firefox-b-e&;q=%E8%9F%BB%E4%BA%BA%E9%96%93+%E3%83%8F%E3%82%B2';
use URI::Split qw(uri_split uri_join);
@a = uri_split($uri);
$a[1] = 'jump.5ch.net';
$a[2] = '/';
$a[3] = $uri;
print uri_join(@a), "\n";
0431デフォルトの名無しさん
垢版 |
2021/11/12(金) 20:37:34.22ID:Y4pYQLN1
”2021”というフォルダがある
"2020"というフォルダもある
 :
"1950"というフォルダもある
そしてそれぞれに"01"〜"12"のサブフォルダがあって
そしてそのそれぞれに"01"〜"31"というサブフォルダがあって
更に"00"〜"23"という・・・・

つまり、1時間ごとのフォルダがあって
そこには多くのファイルが詰まっている

そのファイルのタイムスタンプに変化があったら
「どこのファイルが書き換えられたぞ」と検出するプログラムを作りたい
片っ端からタイムスタンプを調べるしかないのか
これはファイルシステムの問題でしょうが
なんとか、前回調べてから変化があったか、短時間で検出できる方法はありませんか

ファイルに変化があったら、フォルダのタイムスタンプを変えてくれればいいんだけどね
0432デフォルトの名無しさん
垢版 |
2021/11/12(金) 21:45:17.50ID:gsBkkV8P
そういう検出機能はOSかハードウェアかについてなかったか 忘れたが
0433デフォルトの名無しさん
垢版 |
2021/11/12(金) 21:49:29.72ID:gsBkkV8P
NTFSの USN とは?
USN ジャーナルとは
NTFSのUSN機能とはNTFSボリュームに対しての変更の記録です。
Cドライブ、Dドライブ、Eドライブごとなど、ドライブごとに加えられた変更を記録したものです。

USNとはUpdate Sequence Number Journalの略称です。
主に以下の目的で使用されます。
・FRS(File Replication Service)によるファイル複製時の差分洗い出し。
・スナップショットバックアップ時の差分洗い出し。
・ウィルス対策ソフトによるファイル検査。
・インデックスサービス向け。

http://tooljp.com/qa/what-is-USN-36BE.html
0434デフォルトの名無しさん
垢版 |
2021/11/12(金) 22:31:42.38ID:M7lyd7nj
Ruby では、文字列の中から、URL を抜き出す関数が非推奨になった。
頻繁に規格が変わるからかな?

正規表現でも多分、何万行も掛かる。
作るのに10年ぐらい掛かるので、誰も作らない

今あるものでも、正しく判定されるかどうか、分からない
0435デフォルトの名無しさん
垢版 |
2021/11/12(金) 22:39:57.54ID:M7lyd7nj
>>430
5ch のバグで、

そのURL をプログラム板全体で見た時は、&q とつながっているのに、

個別のスレッドで見ると、&;q と、&の直後に、;が入って、
リンクが&までになってしまう
0436デフォルトの名無しさん
垢版 |
2021/11/13(土) 02:42:42.42ID:p75HzwR9
>>433
ドライブごとに加えられた変更がログに保存されているとは知りませんでした
データドライブに分けているので、ログから探すのも速いかもしれません
ありがとうございました
0439デフォルトの名無しさん
垢版 |
2021/11/23(火) 21:56:09.59ID:WrxNeBf5
age
0441ハノン ◆QZaw55cn4c
垢版 |
2021/11/24(水) 20:41:27.64ID:CmhCtKru
>>440
もう codepad はおしまい、codepad にアップした私のコードも永遠に失われました…
044296
垢版 |
2021/12/02(木) 04:03:51.64ID:EE6BdDDo
元のソースをローカルに保存しておかなかったのか
0443デフォルトの名無しさん
垢版 |
2021/12/02(木) 12:54:02.17ID:adrEDszf
短いもんだから直接打ち込んじゃったんじゃないかな。
そして消滅。
0444デフォルトの名無しさん
垢版 |
2021/12/02(木) 16:48:13.78ID:BMPRSKoA
>>442
デスクトップで書いたものはローカルのどこかに残っている(と思う)
ノートで書いたものはノートPCごとどこかにいってしまった…
いや、まあ、最初から書き捨てでしたけど、惜しいと思うものも多少ありますね
044596
垢版 |
2021/12/02(木) 21:30:16.60ID:m0u4nXXp
いま
http://codepad.org/
復活してない?

サンプルURLとして前々スレの過去の回答

プログラミングのお題スレ Part18
http://mevius.5ch.net/test/read.cgi/tech/1594702426/174
>174 名前:デフォルトの名無しさん[] 投稿日:2020/08/04(火) 19:24:17.96 ID:lImhU2CT
> >>173
> あーアホだったw
> タブ消去の仕様だとPythonだと分けわからんことになるなw
> ↓貼り直した
> http://codepad.org/BWRzr8fW
> ※会員未登録の為、一定期間後に自動消去

も表示されたし。

保持しておきたいcodeがあれば今のうちにsaveするか、
Internet archiveに記録しとくのも手だよ。
0446デフォルトの名無しさん
垢版 |
2021/12/08(水) 14:07:00.92ID:Bws6ftLO
お題が出なくなったので全く実用性がないと思われる頭の体操的なやつを一つ。

お題: 与えられた数値の配列の 1 になっているビットをカウントする。

例えばC言語で unsigned char の配列とか使って、処理する関数はポインタで渡された所から何要素みたいに指定されるようにする。。

それで例えば 0xde, 0x96 (11011110, 10010110) なら答えは 10。
0448デフォルトの名無しさん
垢版 |
2021/12/08(水) 17:44:20.69ID:/InaUbpT
お題: 日付が与えられるので4月ならtrueを出力しなさい

< 2021/04/01
> true

< 04/01
> true

< 2021/04
> true

< 2021/05/01
> false
0449デフォルトの名無しさん
垢版 |
2021/12/08(水) 19:09:00.93ID:nFeiLLyh
>>446
最適なコードが環境に大きく依存するからなあ
シフトの速度とか専用命令有無とか

あまり良いお題じゃないし荒れそう
0452デフォルトの名無しさん
垢版 |
2021/12/09(木) 13:38:41.08ID:ZoIDn0OR
逆に、年2桁の時は、
その数値で年月日が特定できるか問題があった。

02 12 29 --> 12年02月29日 と 29年02月12日 の2通りがある
02 13 29 --> 13年02月29日はないので、29年02月13日のみ
0454デフォルトの名無しさん
垢版 |
2021/12/09(木) 14:42:16.44ID:b/vm8aBu
そういえば食品の賞味期限がどう読んだらいいか分からなかったことがあったなあ。

11/02/13

2013年2月11日なのか、それとも2013年11月2日なのか、まさか2011年2月13日だったりしたらどうしよう、みたいな。
普通に輸入されているものなら日本語ラベルがあるから分かるだろうけど、友達が現地のお土産屋で買ってきた
お菓子みたいなものだとそのまんまだったりする(まあ、アメリカかアメリカ以外かで考えればだいたいは大丈夫
なのかも知れないが)。
日本の元号みたいな独自年号まで使われているのが混在していたら余計に分からないよな。今の日本では
あまりないだろうけど昭和の頃はあったような気がするなあ。
0457デフォルトの名無しさん
垢版 |
2021/12/10(金) 00:33:54.80ID:Uh57IFJZ
>>446
C
https://paiza.io/projects/YQ8ORfELqUt1xkKqmysViQ

入力を配列に入れてからカウントさせている。(uint32_t 型の配列)
カウント部分は>>456に似てる。しかし最初に引くのは思いつかなかった。
0459デフォルトの名無しさん
垢版 |
2021/12/10(金) 09:12:55.36ID:rDACCx1y
>>446

Haskell

sumCntBits = id
. length
. filter odd
. ( >>= ( takeWhile ( /= 0 ) . iterate ( flip div 2 ) ) )

main = do
print $ sumCntBits [ 0xde, 0x96 ]
print $ sumCntBits [ 0x12345, 0x6789a,0xbcdef ]

----
10
32
0461デフォルトの名無しさん
垢版 |
2021/12/11(土) 20:38:05.35ID:LF8J+dNV
>>446
Kotlin
https://paiza.io/projects/7hQyycMNf5nuV5HcBg6iQg

普通に作るのは出尽くした感があるのでちょっと変わったやり方にした。
入力から Int の List を作り、それを 1 ビットづつの Boolean のリスト(というか Iterator) にしてから true のみをカウントしている。
0463デフォルトの名無しさん
垢版 |
2021/12/14(火) 17:40:23.45ID:kbrFI/m0
もうすぐ、2022年
[お題] 2022は"x3y1数"(造語)?

以下の二つを満たす正の整数を"x3y1数"と呼ぶ
・各桁の数値が、二種類のみの数字からなる
・上の二数の個数比は 3:1

 該当例:1112, 2212, 2022, 32222223, 999999999888
 ダメな例:2213(種類), 4444(種類), 33232(個数比), 0222(先頭ゼロ)

 整数A,Bが与えられる。A以上B以下の"x3y1数"はいくつあるか?
 制約: 0 < A <= B <= 10^18

1) 2923 3311 --> 8
  該当は [2999, 3000, 3033, 3111, 3133, 3222, 3233, 3303]
2) 2021 77977796 --> 2022
3) 3000 6666566566566555 --> ?
4) 999999999889 1000000000000110 --> ?
5) 1 1000000000000000000 --> ?

※実行時間:上の5問をクエリーとし全部を2秒程度
0464デフォルトの名無しさん
垢版 |
2021/12/16(木) 03:59:00.84ID:p3cQ7gqk
お題:自分用double-double演算ライブラリ
最低限、通常のdoubleとの相互変換は可能であること。それに加えて、
1)加減算
2)加減算 + 乗算
3)四則演算
数字が大きいもの程上級者向けです。

演算子のオーバーロードなどは任意とします。
0468デフォルトの名無しさん
垢版 |
2021/12/16(木) 20:39:48.12ID:iDMhxZSI
>>466
double の演算を自分で実装するという意味ですか?
sum(double, double)
diff(double, double)
mul(double, double)
div(double, double)
を自分で実装する、という話でいいですか?
あと double のフォーマットは IEEE754 でいいですか?
0469デフォルトの名無しさん
垢版 |
2021/12/16(木) 20:57:05.50ID:Y2CVy/MB
問題が説明不足では?
0470デフォルトの名無しさん
垢版 |
2021/12/16(木) 21:53:18.15ID:B45/3FnD
お題: テキストを読み込みそれをクリスマスツリーにして出力しなさい
クリスマスツリーに見えれば形は自由とする

入力

本日は良いお日柄ですね

出力

___本
__日は
_良いお
日柄です
___ね
0474デフォルトの名無しさん
垢版 |
2021/12/17(金) 04:20:32.14ID:QblDDO27
二種類のみの数字からなり個数比は 3:1
引数の範囲は 1-10^18 = 1001-9999999999998888(16桁)
以下の範囲に限られる
1000-9998
1000 0001-9999 9988
1000 0000 0011-9999 9999 9888
1000 0000 0000 0111-9999 9999 9999 8888

「二種類のみの数字からなる」を計算式で判定する方法ある?
0475デフォルトの名無しさん
垢版 |
2021/12/17(金) 05:36:58.41ID:5DT5Lvck
1([\d&&[^1]])\1{2} 最上位桁が比1
111[\d&&[^1]],11[\d&&[^1]]1,1[\d&&[^1]]11 最上位桁が比3
一般化 (\d)(?!\1)(\d)\2{2}|(\d)\1{2}(?!\1)\d|(\d)\1(?!\1)\d\1|(\d)(?!\1)\d\1{2}
4桁ならこれでもいいけど8桁以上になると複雑化するし
地道に数えるより 4の倍数桁,数字2種,比率1:3 のルールで生成する方が速そう
0476463
垢版 |
2021/12/17(金) 16:22:06.93ID:ssQAe3ef
>>463
 https://ideone.com/xTDtME

 想定解は、事前に4,8,12,16桁の"x3y1"数を全列挙して作っておく。
 プログラミング的には、各言語の順列や組合せを使って、作れるだろう。
 (想定解例では組合せは2ベキとpopcountから作っている)

 「それは、全列挙数が小さいとわかっているからでは..?」に対して
 プログラムで出すのなら、雑に最も大きい16桁が4つあるとして計算
  10P2 * 16C4 * 4 < 70万 なので、全列挙可能
 まじめに計算すると 10P2 * (16C4 + 12C3 + 8C4 + 4C1) * 9 /10 = 167,832

 列挙済みならば、クエリー5件程度なら、16.7万*5 チェックで間に合う。
 ちゃんとやるなら、ソートして二分探索すれば、数千単位のクエリーに対応できる。
 (想定解例では後者でやっている)
0478467
垢版 |
2021/12/17(金) 20:31:12.28ID:llvCqHRj
>>463 c
https://ideone.com/bmYThw
・Ruby版の移植
・組み合わせの列挙方法は丸パクリ
・Ralph William Gosper Jr. 氏に感謝
■ このスレッドは過去ログ倉庫に格納されています

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