プログラミングのお題スレ Part15
■ このスレッドは過去ログ倉庫に格納されています
>>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 >>685 実行結果、貼りそこなって変な改行は入ってた…orz 訂正 実行結果 $ bash 15_629_prime.sh 2 3 5 7 … 9941 9949 9967 9973 >>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 >>687 eval "a=('' '' {2..$n})" for i in ${a[@]}; do if [[ ${a[$i]} ]]; then この書き方、a[]の最初の0,1番目の要素に空文字を設定しておいて それを配列のインデックスとして使い、あまりいい書き方じゃないと気がついた 動いているんで、あせって直さないでおくけど ゴメンね〜 お題: https://regexcrossword.com/playerpuzzles/59e565c95008d のようなHEXマスの正規表現クロスワードパズルのソルバーを実装せよ。 n=1でいいので処理時間も報告せよ。 >>691 出題者ではないが、まず、完成図面を作って、そこから問題を作ったほうが早そうだ。 ヘックスの扱い方わからねーんだ俺。 昔聞いたことあるけど、そのうち・・・と思ってたら曖昧になってしまった。 >>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' => {} } } とりあえず>>690 を手動で解くのに2時間かかったw お題は思いついたらやる お題: L形図形を表示する [入力] 1 [出力] a bc [入力] 2 [出力] ba ca abcc bcab [入力] 3 [出力] bacb cbaa acba bcca bcabcccb cabcabca abccaabc bcabbcab >>696 最後のやつが4ではなく3? それと文字はabc使っているが、どういう規則で並べるのか? >>697 おそらく1のパターンのL字を4つで向きを変えてくっつけて大きなL字にしたものが2のパターン。2を4つ使って同じことをやって3を作ってるということだと思う。愚直に再帰的にやれば簡単そう。 >>696 入力3の出力、一か所間違えとるよな?w お題: プログラム実行後にプログラム自身を削除するプログラムを作れ 実行内容は以下のメッセージを出力する 「このプログラムが起動するのは一度きりである。実行ののち、消去される。」 >>703 echo このプログラムが起動するのは一度きりである。実行ののち、消去される。 rm -rf / >>703 そんな問題は却下。 どんな問題でもファイルを削除する様な問題は出してはいけない。 ど素人もいるんだからそんな問題は出すべきではない。 >>704 大抵の環境でコマンド通らないんじゃないかそれ #!/bin/sh echo このプログラムが起動するのは一度きりである。実行ののち、消去される。 \rm -f $0 >>707 みて、できなくはないが、やりたくない気分になった。 http://www.t-net.ne.jp/ ~cyfis/c/stdlib/system.html 上記を使えば、PGからコマンドラインに干渉できる。が!ねぇ・・・。 場所もargc[0]に書いてあるんだけどねぇ・・・。 WA. >>703 Linux等のUNIX系OS at now +1 min などとやって at job が一分後に動くようにして次の1行を入力してから Ctrl+D で終了させる。 echo 'このプログラムが起動するのは一度きりである。実行ののち、消去される。' その後1分待つと上記文言の出力後 at job は削除される。 ただし通常の出力先である標準出力はないことになっているのでatによって拾われてメールでエラーメッセージと共に送られてくる。 それを見たい場合はmailコマンドで送られてきたメールの内容を見る等する。 >>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; } >>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 嫌なプログラミンッグだな、一歩書き間違がや大参事。 こういうお題はご遠慮願いたいものだ… すまぬ >>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 >>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 MSX BASIC 10 print"オハヨウフェルペスクン,コンカイノキミノニンムダガイカリャクナオコノテープハジドウテキニショウメツスル" 20 new >>703 https://ideone.com/B5bVTK C++。自分ができるのはここま・・・で・・・だ。。。 うぼぁあああああああ。 実行時にexeにロックがかかるから、実行終了を待つsystem関数では消せないんだ、これが。 拡張子.batはコマンドプロンプトのバッチファイルを表す。 >>720 C++&Windows. おかしなキーコンビネーションで投稿してしまったが、それは置いといて。 結構な沼だったわ。 あ、数秒後にタスクを実行したかったが、分単位にしかならないようだ。 https://ideone.com/s1OxbV C++&Windows. 結局バッチ作ってバッチを削除するようにした。 C++で書いている意味があまりないなぁ。 頭がこんがらがってくるわ。 タスクスケジューラには一個のタスクしか持たせることができません。 タスクスケジューラの健康のために削除タスクと削除タスクをkillするタスクを入れたという欲が出ました。 さて、どうすればよかったのでしょうか・・・。 https://ideone.com/8DBn1u チョットシンプルになった。 けど、ただスケジュールしてバッチファイル作るだけになっちゃった・・・。Orz ううううううぼぉぉぉおあぁぁぁあああ。。。 「インターネットには戦力外通告とかが無いから頭の悪い人がいつまでも打席に立って三振し続ける」 お題: TCPデータグラムが流れてくるのでFINフラグが立っていたら「切断します」と出力せよ >>729 IT分野の実社会では、単価にそれほど差がないのをいいことに パーフォマンダウンによる差額で利ざやを稼ごうという 商売が横行して、結果としてIT分野が廃れている だから。こまけーこたー いいんだよ >>733 手では解いた 総当たり以外に思い浮かばん いやお題はパズルを解けじゃなくてパズルのソルバーの実装だからwww 古典的な人工知能の探索アルゴリズムを研究すれば、この程度のソルバーは作れる。 >>735 だから総当たり以外思い浮かばなかったって言ってるだろ いや総当たりでも出来たなら貼ってくれや。 別に総当たりでも恥ずかしくもなんともないと思うが… 貼りたくねえ 総当たり出できたものを他人のために見せる必要性もないし >>744 https://ideone.com/pEdgoA C++。最初サンプルと違う答えになってビビったけど、俺のコードがバグっていた・・・。Orz >>744 これって0~9999じゃなくて任意の2つの数字入力させてとかだと愚直に計算するしかない? >>748 うまくやれば出来そうだがまだ思いつかん >>744 Pharo/Squeak Smalltalk | bag | bag := Bag new. (0 to: 9) asDigitsToPower: 4 do: [:digits | bag add: digits sum]. ^ bag sortedElements "=> {0->1 . 1->4 . 2->10 . 3->20 . 4->35 . 5->56 . 6->84 . 7->120 . 8->165 . 9->220 . 10->282 . 11->348 . 12->415 . 13->480 . 14->540 . 15->592 . 16->633 . 17->660 . 18->670 . 19->660 . 20->633 . 21->592 . 22->540 . 23->480 . 24->415 . 25->348 . 26->282 . 27->220 . 28->165 . 29->120 . 30->84 . 31->56 . 32->35 . 33->20 . 34->10 . 35->4 . 36->1} " >>750 @Mathematica Range[0, 9999] // Map[IntegerDigits, #] & // Map[Total, #] & // Tally {{0, 1}, {1, 4}, {2, 10}, {3, 20}, {4, 35}, {5, 56}, {6, 84}, {7, 120}, {8, 165}, {9, 220}, {10, 282}, {11, 348}, {12, 415}, {13, 480}, {14, 540}, {15, 592}, {16, 633}, {17, 660}, {18, 670}, {19, 660}, {20, 633}, {21, 592}, {22, 540}, {23, 480}, {24, 415}, {25, 348}, {26, 282}, {27, 220}, {28, 165}, {29, 120}, {30, 84}, {31, 56}, {32, 35}, {33, 20}, {34, 10}, {35, 4}, {36, 1}} >>744 perl use List::Util qw(sum); $h{sum(split"")}++ for(0..9999); map{print"$_ $h{$_}\n"}sort{$a<=>$b}keys%h; >>748 言われた通りの改定問題 X,Yが与えられる。 X以上Y以下の連続する整数で、数字和の頻度。 もっとも大きい頻度はいくつか。 制約 0 <= X < Y <= 5000億 1) 0 9999 --> 670 合計18が、670ある。>>744 の入力値 2) 1234567 9876543 --> 459034 3) 1 500000000000 --> 20406732610 4) 12345678909 498765432123 --> 20000965162 ※Y-Xが MAX5000億なので愚直(力技)はきつい。 ※頻度表は"桁数*9"程度あるので、最高値出力のみに変更 頻度の階差を取った 0~9999だと三角数 0~99999だと三角錐数 になる >>740 >>741 じゃねーけど総当りもどきで解いてみた https://ideone.com/nZqnpN https://i.imgur.com/3esPPr0.jpg さすがにフルに総当りするととても終わりそうにないのでちょっとズルして各マスに入る文字を正規表現に使われている"ABCDEFGHMNORXYZ"に限定した (ソースの217行目) Celeron 1005M 1.9GHzのしょぼいノートPCで1,386秒(23分)程度だった >>754 Perl5、計算量を減らしたアルゴリズム sub f { @s = @_; for $l (1..9) { $s[$_ + $l] += $_[$_] for 0..$#_; } @s } @b = f f f f 1; print "$_,$b[$_] " for 0..$#b; 実行結果 ~ $ perl 15_774_digit_sum_1.pl 0,1 1,4 2,10 3,20 4,35 5,56 6,84 7,120 8,165 9,220 10,282 11,348 12,415 13,480 14,540 15,592 16,633 17,660 18,670 19,660 20,633 21,592 22,540 23,480 24,415 25,348 26,282 27,220 28,165 29,120 30,84 31,56 32,35 33,20 34,10 35,4 36,1 もっと減らしたアルゴリズムを考えたい気もするけど、 これで一回投稿 >>759 アンカーしくった、>>744 だった…ゴメンね 白状すると単にrubyで書きたいだけのお題だったんだけど (Array#repeated_permutationを使いたいだけ) みんな色々面白いこと考えるもんだね お題: ストップウォッチを作れ。 最初にEnterキーを押すとスタート。 次にEnterキーを押すとストップ。 経過した時間を表示する。 >>744 Python https://ideone.com/v1nrdn ―――- import pandas as pd array = [] for i in range(0,10000): array.append(sum(list(map(int,str(i))))) srv =pd.Series(array).value_counts().sort_index() print(srv) >>762 https://ideone.com/B1ShSB C++。ストップウオッチ自体は大分前にC#をパクって作ってあったありあわせだ。 >>755 C http://ideone.com/qdx79j 一応Y = LLONG_MAXまでできる、あってるか知らんが ただのスパゲッティになってしもた >>762 Kotlin まずは仕様通りのもの。 fun main() { val br = System.`in`.bufferedReader() br.readLine() val t0 = System.nanoTime() br.readLine() val t1 = System.nanoTime() val t = t1 - t0 println("%d.%09d".format(t / 1000000000L, t % 1000000000)) } しかしこれでは途中経過が出てこなくてつまらない。ということでこれ。 fun main() { val br = System.`in`.bufferedReader() br.readLine() val t0 = System.nanoTime() while (true) { if (br.ready()) { val c = br.read() if (c == '\n'.toInt()) break } val t1 = System.nanoTime() val t = t1 - t0 print("%d.%09d\r".format(t / 1000000000L, t % 1000000000)) } println() } >>770 511 = 7 * 73 だから 2^511 - 1 は素数ではない >>771-772 それは 2^511-1 は 2^7-1 でも割り切れることを主張しているのですか? >>773 2^511-1 = 2進数で1が511個 = 2進数で1111111が73個並んだ形 2^511-1を2^7-1で割ったら2進数で0000001が73個並んだ形 ってことじゃろ >>774-775 2^{ab}-1 = (2^a-1)(1 + 2a + 2^2a + 2^3a + ... + 2^(b-1)a) と因数分解できるんですね… thx a lot. もう何処かのチャレンジ問題を議論するスレでも良いのでは? お題: お題スレの過去スレからお題をランダムに選択し出力するプログラムを作成せよ >>755 python http://ideone.com/caxm7I ほぼ典型っぽいので、桁DPで解く。 遊びで (X,Y)=(0, 10^100)を実行してみる ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる