プログラミングのお題スレ Part11
■ このスレッドは過去ログ倉庫に格納されています
鈴木貫太郎 灘中 https://youtu.be/BnS7vMsVV2s 6桁の整数、ABCDEF の一番上の位のAを、 一の位へ移動した数、BCDEFA が、元の数の3倍になるとき、 この条件を満たす、元の数をすべて(2つ)答えよ ヒント。x = BCDEF とおいて考える 答え、142857, 285714 >>744 Ruby 43 bytes #!ruby -pa $_='%.2f'%eval('1e4/'+$F*'**2*') >>750 3 * ABCDEF = BCDEFA ∧ A != 0 <=> 42857 * A = BCDEF ∧ A != 0 <=> 42857 * A = BCDEF ∧ A = 1, 2 <=> ABCDEF = 142857, 285714 お題: 1.BINGOカードを作る 2.BINGO抽選機を作る ここで使われるビンゴカードは5x5のマス目に1から75までの数字が ランダムに配置されており、数字が見つけやすいように左の列から B列(1〜15), I列(16〜30), N列(31〜45), G列(46〜60), O列(61〜75)が 配置された一般的によく使われるタイプ。 5x5のマスの中央はFree(すでに開いた状態)。 出力例:https://ideone.com/R6eADP (この形に従う必要はないです) 回答例(C言語): カード作成 https://ideone.com/aJBJ9v 抽選機 https://ideone.com/NuIRYm >>750 Kotlin https://paiza.io/projects/BFd9v2qeKaNcdssTQuj5Jw これも力業だな。ただループして調べているだけ。 尚、最上位桁が0の場合も含めると0も該当する値になる。 お題:【構造のあるテキストの処理】各項目の内容をそれぞれソートして元のテキストに埋め込め。 ====== 標準入力 ========== * Fruit apple banana orange banana * Animal dog cat penguin ====== 標準出力 ========== * Fruit apple banana orange * Animal cat dog penguin 条件:ソートには外部コマンドを用いること。 ソートに外部コマンドを使うのは、テキストの処理を取り替える拡張を想定しています。 例えば sort -u コマンドを tr '[a-z]' '[A-Z]' に置き換えて * Fruit APPLE のようにできるようにしたい。 UNIXプログラミング質問スレにて、 このような処理はシェルスクリプトには荷が重く Powershell や Ruby が向いている、みたいなことを伺いました。 ぜひ回答を参考にしたいです。 >>758 Ruby ext_cmd = 'sort -u' ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m) str = ary.map.with_index do |s, i| temp_fname = "temp#{i}" File.write(temp_fname, s[/\n\K.*/m]) heading = s[/\A.*/] execed = `#{ext_cmd} #{temp_fname}` File.delete(temp_fname) [heading, execed] * $/ end puts str * $/ catを使うように修正 catのヒアドキュメントさえ使えれば一時ファイル作らなくて済むんだけど ext_cmd = 'tr a-z A-Z' ary = $<.read.scan(/\*.*?\n(?:(?=\n)|\z)/m) str = ary.map.with_index do |s, i| temp_fname = "temp#{i}" File.write(temp_fname, s[/\n\K.*/m]) heading = s[/\A.*/] execed = `cat #{temp_fname}|#{ext_cmd}` File.delete(temp_fname) [heading, execed] * $/ end puts str * $/ >>758 zsh setopt rcquotes; sed -n '/^*/h; /^*/!{x;p;x;p;}' | paste - - \ | awk -F' ' -v OFS=' ' '$2 { print $1,$2 } ! $2 { printf "%c",0 }' \ | xargs -0 -n 1 -I@ -- zsh -c 'echo ''@'' | tee >(read -e | cut -f 1) | sed ''$d;'' | cut -f 2 | sort -u ;echo' null区切りでチャンク分け。構造がもっと複雑になるとこの方針では対応できない。 単純に、別々のファイルに、分割すれば良いのでは? * Fruit のファイル * Animal のファイル 各ファイルを、sort, unique する 一旦、別々のファイルにしたなら、PowerShell で、 cat .\test.txt | sort | gu gu は、Get-Unique のエイリアス。 漏れのPowerShell では、uniq のエイリアスは使えない >>767 Linuxのディストリビューションでは最初からインストールされてるのがよくあってある程度有名で、sh互換でshしか知らなくても書けるからではないかな。 それとWebの実行環境があるというのも理由かも。こういう所で公開するのには都合が良い。 >>769 そうなんですね! みんなの回答見てると正規表現や少ないコードや難しい表現でコーディングできてて関心します‥ 自分にはとても到達出来ない‥ >>758 zsh setopt rcquotes; sed -E -e 's:^(\* .*):{ echo ''\1''; sort -u; echo } << *:' -e 's:^$:*:' | zsh xargsの区切り文字の辛さからは開放されたが、echo ''\1'' がイマイチだ。 なるほど、構造のあるデータはむしろファイル階層として表現したほうが自然か… >>758 Vim $ cat odai-pt11-758.input | vim -es '+:g /\%(^\*.*\n\)\@<=/,/[ \t\n]*\%(\n\*.*\|\%$\)/ !sort | tr a-z A-Z | nl' '+%p' '+:q!' /dev/stdin * Fruit 1 APPLE 2 BANANA 3 BANANA 4 ORANGE * Animal 1 CAT 2 DOG 3 PENGUIN $ 64ビットWindows10 なら、WSL で、Ubuntu を入れると、 bash, vim, Python は最初から入っている WindowsのExplorer では、BOMなしUTF-8 のファイルは検索できないから、 WSL でLinux側から、grep で検索している シェルスクリプトの欠点は、パイプラインがテキスト渡しになる。 オブジェクトの型が無くなって、すべて文字列になる 一方、PowerShell ではオブジェクト渡しだから、オブジェクトの構造・型が維持できる >>758-759 外部コマンドを切り替えるという抽象的な処理を、処理間にはさむのは難しい。 すべての処理の冒頭か最後で、一括でフィルターする方がバグらない >>773 なるほど… Powershellでの完全な回答例を見せていただけませんか? 標準入力からファイルに落として出力に吐くまで。オブジェクト渡しの雰囲気を感じたいです。 Set-PSDebug -Strict # 変数宣言を強制する $file = ( cat in.txt ) # 入力ファイル $dat_basenames = @() # 拡張子なしのファイル名の配列 foreach ( $line in $file ) { # 各行 if( $line.Length -eq 0 ){ continue } # 空行は処理しない if ( $line.Substring( 0, 1 ) -eq '*' ) { # 1文字目が、* なら $fname = $line.Substring( 2 ) $dat_basenames += $fname # 追加 $fname += '.dat' # 拡張子つき } else { Add-Content $fname $line # 追記 } } foreach ( $dbname in $dat_basenames ) { # 各 .dat ファイル $fname = $dbname + '.dat' # 拡張子つき $str = "* ${dbname}`r`n" $tmp = cat $fname | sort | gu # sort, unique $str += ( $tmp -join "`r`n" ) # 改行区切り echo $str } PowerShell で作った。 cd で、作業フォルダへ移動してから実行して 入力ファイル、in.txt から、各ファイルへ分割する。 分割後のファイル名を、Fruit.dat, Animal.dat として、各ファイルを処理した 点が10個一直線に並んでおり、各点が他の点との右方向の距離をいくつか知っている時、最も左にある点を求めよ 最も左にある点が求められない時はあと何の情報があれば求められるのかを最低個数で列挙すること 例1 a,b,cの点がある。 a点はb点が30右にあることを知っている。 b点は何も知らない。 c点はb点が-40右にあることをしっている。 結果 最も左にある点はa点 例2 a,b,c,dの点がある。 a点はb点が30右にあることを知っている。 b点は何も知らない c点はd点が20右にあることを知っている。 d点は何も知らない。 結果 求められない。必要な情報は a点からc点までの距離 >>776 実際に自分で書いてみて、求められたら解答例を提示できる? 「知っている」の主語が点に見えるけど そうじゃないよね? なんでそういう文にしたの? 連結リストを使って、出来上がったグラフが連結なら求められる つまり、出来上がったグラフが二つ三つそれ以上に分かれている非連結グラフになってると、距離は分からない ……直感的には多分こうだが、何かしらの証明は必要 「連結グラフだが距離が分からない」反例があればいい >>776 点が10個あるなら例1,2両方とも判断不能。どっちもあと最低7個必要 しかも直線がRなのかR∪∞∪-∞なのかで解が変わるから提示しろ あと出力はともかくデータの与えられ方くらい提示しろ text = File.read 'in.txt' # 入力ファイル header = "" str_hash = { } result = [ ] def sort_string ( head, hash, res ) res.push head Hash[ hash.sort ].each_key { |key| res.push key } # sort hash.clear # 空にする end text.each_line do |line| # 各行 line.chomp! # 末尾の改行を削除する next if line.empty? # 空文字は処理しない if line.start_with? '*' # 先頭文字が、* なら sort_string( header, str_hash, result ) unless str_hash.empty? # 空でなければ header = line else str_hash[ line ] = true end end sort_string( header, str_hash, result ) puts result Ruby で作った。 PowerShell よりは断然、作りやすい。 ただ、sort_string( ) を2か所で呼ぶのが、ダサイ お題 将棋の初期状態の駒40枚を 利き筋に他の駒がないように配置する 明記されてない条件は好きにしていいのがこのスレのルールですよ お題を出す前に出題者は自分の解答を(解くことが可能かの確認も兼ね)作っておくのもルールだ 適切な入出力例や問題文にあるべき条件が抜けてるっていうのはそれをやってない証拠 >>782 有名な作品がいくつかあるね 全て同じ方向を向いたヤツも >>783 全ての組み合わせを数えた人がいるの? トランプの配置についてのアルゴリズムを考えてます。 トランプの横幅をX トランプの高さをYとし 並べるトランプは偶数枚 全てのトランプを配置した時の全体を、トランプ配置と呼ぶとして トランプ配置の横幅と縦幅の割合を、おおよそX:Yとしたい この場合、アルゴリズムはどう考えたらいいでしょうか? ゴリ押しの総当たり 並べる枚数横にx縦にyが無尽蔵に大きくなれば比率に近づく 並べるトランプの上限が決まって無くて偶数枚だけが条件なら延々と並べる枚数を増やせばいい 一兆枚くらい並べれば比率はX/Yに近づく 1000000000億兆枚くらいのトランプを使えば横幅X高さYなんて充分に蟲出来るから全体の割合を調整するのは枚数が多ければ多いほどラク 10那由多ほど並べれば、本当にカードは点くらいなもので、縦横比率はx、yの枚数だけで決まる >>787 おおよそとかいまいちよくわからん 例を示して >>788 バカなの? > 並べるトランプの上限が決まって無くて偶数枚だけが条件 なら、縦横2枚ずつ(計4枚)並べればいいだけ n枚をnX nYの長方形の対角線上に斜めにならべれば X:Yになるけど 問題あってる? >>787 ┌─┐ │ ?│ └─┘ これを偶数枚並べて縦横比同じにするなら こうだよね ↓ ┌─┬─┐ │ ?│ ?│ ├─┼─┤ │ ?│ ?│ └─┴─┘ アルゴリズムもクソもないように思うのだが? 問題の書き方間違ってない? 枚数nに対して p * q = n を満たす正の整数 p, q の内 |p - q| / |p^2 + q^2| が最小になる組み合わせを求めるだけでしょ? https://mevius.5ch.net/test/read.cgi/tech/1480579110/981 に引き続いて、現に困ってしまった問題を出題 windows コマンドラインの xcopy コマンドを実装せよ コマンドラインから「xcopy パス1 パス2」 と入力すると パス1 以下にあるファイルをすべてパス2以下にコピーするようにせよ ディレクトリについては、再帰的にコピーせよ ・現実の xcopy コマンドには色々なオプションがあるが、それは実装しなくてもよい ・読み込み対象のファイルの属性については考慮しなくてよい、読み込めるファイルのみ所定のパスにコピーできればそれでよい ・その他、コピーに問題のある状態が発生したときには、標準エラー出力にエラー内容を表示すればそれでいい Windows Update の度にPCが激遅になるのに堪えかねて、C ドライブを SSD に換えることにしました。OS は再度インストールしなおすつもりです。 現在の C ドライブの内容は別途コピーしておいて、困ったときには参照できるようにしたいと思いました。 ところが、「xcopy c: x:/tmp」とすると、「メモリーが足りなくなった」といって途中で止まるのです…困りました… >>795 条件を追加します ハードリンクやシンボリックリンクは考えなくともよい xcopy パス1 パス2 のパス2 がパス1 の下にある場合、実装がまずいと永遠にコピーし続ける困ったことになるが、それも考慮しなくてもよい (今回やりたいことは、「xcopy c: x:/tmp」であるので、これが問題なく動けばそれでよい…) >>795 Windowsならエクスプローラ使ってただコピーするのでは何か不都合があるのか? まあ、お題としてそういうのなしで作れというのはアリだが、なんとなくWindowsの場合はエクスプローラが使っているのと同じライブラリ関数を一回呼び出すだけで終わってしまいそうな気がしてならない。 xcopy ではなく、robocopy を使えば? >>792 他の人も勘違いしてるけど、横縦比をx:yにする問題だよ。おおよそらしいけど。 >>802 トランプの横幅がYで高さがXでしょ? で、偶数枚並べてX:Yにするんでしょ? 4枚でなるじゃん。およそどころかぴったりX:Yに。 >>795-796 https://mevius.5ch.net/test/read.cgi/tech/1434079972/52 >>799 有用な情報ありがとうございます なるほど、256バイト以上のパスは受け付けない、ですか… MSDN https://msdn.microsoft.com/ja-jp/library/cc429198.aspx なんかをみると、「この関数の Unicode 版を呼び出し、パスの前に "\\?\" という接頭辞を追加してください。」と書いてありますね でも、C++ でユニコードバージョンに対応させるってどうするのだろう?#define UNICODE だけではダメみたいだし… >>809 >適切なスレ って、あなたはどこを想定しているのですか? >>805 流石に与えられた枚数は全て使うだろ アスペかよw とりあえず>>787 はちゃんと問題書くか取り下げるかしろよ… >>813 近似値も想定している文意から汲めないならアスペ >>816 ぱっと見て カードの数nとカードの縦と横の長さx, yが与えられたときに 総てのカードを並べて作った矩形の縦と横の長さをX, Yとして |X/Y - x/y|が最小になるような(X, Y)を求める問題かと思ったんだけど というか>>787 は言葉足らず過ぎるしアスペ云々は言い過ぎだったわすまん n枚を矩形になるように並べる なんてことは書いてないけど あと 『|X/Y - x/y| が最小』 は数学的センスが無い x,yを入れ替えても値が変わらない誤差の定義にしたい >>818 矩形じゃないと縦幅と横幅が定義できないからそこはいいんでない? >『|X/Y - x/y| が最小』は数学的センスが無い はその通りだね m := min{x, y}, M := max{x, y}, λ_x = X, λ_y = Y として として |m/M - λ_m/λ_M|の最小値を求めるべきだね >>819 前半 どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある >>819 後半 さらにセンスが無い >>820 『どんな形に並べても縦と横の方向が決まっていれば縦幅と横幅はある』 これは偽 少しは検討してから書き込んだらどうなんだ 後半が理解できないなら「テンソル」で調べてね 横方向をx軸、縦方向をy軸としたx, y平面上に トランプを並べるとする 有限サイズ(>0)のトランプを有限枚(>0)並べるので トランプは有界で非空 xの上限 - xの下限 = 横幅 yの上限 - yの下限 = 縦幅 >>822 勝手な距離空間持ち出してこないでくれませんかねぇ 勝手な距離空間www 後に引けなくなってさらに痛くなる はいはい。頭いいね坊や 今度からは算数をきちんと勉強してからレスしてね お題:標準入力から(で始まり)で終わる顔文字が与えられる。この顔文字を太らせて標準出力に出力しなさい。 >>830 ちげーよ、出題者ならまともな条件追加してるわw 自分では何も提示しないのに難癖つけてくるアホがうざったいだけ トランプを並べる問題で 非ユークリッド空間を前提にしちゃう 頭がおかしい人 頓珍漢なオレオレ解釈提示してドヤってる方がウザいわ >>787 並べるのが矩形に限らないのであれば >>791 のとおり任意の枚数で可能 矩形に並べるとして 枚数が与えられないなら>>792 のとおり4枚で可能 与えられるなら>>794 のとおり 与えられた自然数を最も僅差の2つの自然数の積で表す問題と同値 ただこの場合、問題文の不備を不問にしても >並べるトランプは偶数枚 って条件がなぜ必要になるのか疑問が残るが… いずれにしても問題としては終わってるので これ以上長引かせるのは不毛 × 問題としては終わってる ○ 人間としては終わってる どこからも 矩形に隙間なく並べる とは読めないのだけど 書かれていない条件は勝手に解釈すればいい その条件の問題を解くのが楽しいと感じるならその条件で回答すればいいだけ グダグダと問題自体を統一する必要は無い >>839 「問題を解く」という言葉がふさわしいような条件が見つからないから困っているわけで >>247 java pastebin,com/7cnjtkNG >>846 変数宣言を増やせばいくらでも行けるけどこれが限界かも リフレクションはやっぱりクソだな >>247 Squeak Smalltalk, インスタンス変数で254個まで | obj n limit | obj := Object new assureUniClass. n := 0. [[obj addInstanceVarNamed: 'i', (n := n + 1) asString withValue: n] repeat] ifError: []. limit := obj class instSize. "=> 254 " obj instanceVariableValues asArray = (1 to: limit) asArray "=> true " 自然数nに対して 3Σ_{k = 0}^{2n}(-2)^k / (2n + 1)^2 が整数となるnを総て求めよ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる