[過去ログ] プログラミングのお題スレ Part21 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(4): 2022/11/13(日)19:00 ID:ZCYlhUwL(1) AAS
プログラミングのお題スレです。
【出題と回答例】
1 名前:デフォルトの名無しさん
お題:お題本文
2 名前:デフォルトの名無しさん
>>1 使用言語
回答本文
結果がある場合はそれも
【ソースコードが長くなったら】 (オンラインでコードを実行できる)
外部リンク:ideone.com
省11
903: 638 2023/07/08(土)22:09 ID:fDz284w7(3/4) AAS
四則演算の式評価なら1数十stepでParserを手書きできるということでそれもありじゃね?
904: 2023/07/08(土)22:12 ID:+KTtE1Ht(2/2) AAS
うーん、まぁそれはそうも言えるかな
しかしその手の話は結局“車輪の再発明”してるだけだからな
parsingみたいに重たい処理は可能なら既存の実績のあるparser generator使えるならそれ使うのか本筋な気はするけどね
初学者がparsingの基礎の練習問題として使うのはありかな
905: 638 2023/07/08(土)22:16 ID:fDz284w7(4/4) AAS
GCCやCLangも何とparserはyaccなど使わずに手書きなんだそうだ。
理由は下記サイトなど参照。きめ細かいエラー処理など可能になるかもしれないがコードはとても込み入って大変そうだわ。
c - Are GCC and Clang parsers really handwritten? - Stack Overflow
外部リンク:stackoverflow.com
906: 2023/07/09(日)07:12 ID:LeSv46FO(1/2) AAS
まぁ物によるだろうけどほとんどのプログラミング言語は最低でも文脈依存文法以上を解析できるパーサーでないと解析できない
ましてや今日のコンパイラは何行目の何文字目がおかしいのか、それがどんな間違いなのかも示して修正案まで出してくれる、そこまでの作業を一般的なパーサー生成機に落とし込むこと1から考えるよりはパーサーそのもの自分で作る方が早いかもしれんわな
ただ今回のは四則演算とカッコだけなんだから文脈自由文法の解析機で解析できるから素人が作った解析機を使わない意味は実用上はまずない、まさに車輪の再発明の典型になってしまう
しかしまぁここはある意味“再発明を楽しむスレ”でもあるからなw
907: 2023/07/09(日)07:18 ID:LeSv46FO(2/2) AAS
専門家の作った解析機を使わない意味はないだorz
まぁただパーサー生成機の作ったパーサーはもちろん「どんな文法でも対応できる」ために効率を犠牲にする場合もあるので速度とかをギチギチにチューンするつもりなら意味はあるか
実際今回のも()と+,-,×だけやからな
908(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/09(日)09:04 ID:S0HvsOQY(1) AAS
お題: 飛翔体のシミュレーション。
クレムリン(北緯55度東経37度)から東京(北緯35度東経139度)に向けて初速12[km/s]、重量30[kg]の飛翔体が発射される。
地球は半径6378[km]の球体と仮定し、重力加速度を9.8[m/s^2]とする。
飛翔体は噴射せず自由落下すると仮定する。空気抵抗は考慮しない。
発射時刻をt=0[s]とするとき、t=120とt=240のときの飛翔体の座標[deg^2]を求めよ。
(この情報はフィクションであり、架空のものです。実際の軍事情報とは関係ありません)
909: 2023/07/09(日)15:00 ID:x2TUQyIt(1) AAS
最後の注意書きが寒い
だったら最初から固有名詞出さなきゃ良いのに
910: 蟻人間 ◆T6xkBnTXz7B0 2023/07/09(日)16:39 ID:vyR210yR(1) AAS
>>908
防衛装備移転三原則に反する恐れがあるので、このお題は撤回致します。回答しないで下さい。
911: 2023/07/09(日)18:30 ID:trhah0Kt(1) AAS
自分の書き込みにそんなに勝ちがあると思ってるのかこいつ
スベってるよ
912: 2023/07/09(日)18:54 ID:GCtDZZpJ(1) AAS
>>875
Kotlin
外部リンク:paiza.io
913: 2023/07/09(日)21:17 ID:HwvqYkKm(1) AAS
>>884
haskell
外部リンク:ideone.com
914: 638 2023/07/10(月)15:31 ID:FUofuCtL(1) AAS
>>897 Perl5、見やすくするためインデントは全角スペースに置換してあります。
たまには回答して進ぜるけど、もしかして回答欲しくて簡単なお題だしたん?
use Math::Trig qw{pi deg2rad spherical_to_cartesian};
use constant ra => 6378;
for (<DATA>) {
($lo, $la) = map{deg2rad($_)} /(-?\d+)/g;
# 球面→cartesian座標変換library使用
$phy = pi / 2.0 - $lo;
($x, $y, $z) = spherical_to_cartesian(ra, $la, $phy);
printf "L) (%.3f, %.3f)[rad] -> (%.1f, %.1f, %.1f)\n", $lo, $la, $x, $y, $z;
省20
915(14): 2023/07/11(火)15:24 ID:zBgA5NaS(1) AAS
お題:神経質なipow10()
整数を引数とし、その10のべき乗を浮動小数点数で返す関数を書け。
結果が浮動小数点数で厳密に表現出来ない場合(10の-1乗=0.1とか)、
浮動小数点数として、(結果を)厳密に最近値に丸めた値を返すこと。
916: 2023/07/11(火)15:51 ID:nXEJ21bU(1) AAS
高校時代全く数学できなかったんだろうなぁ
917: 915 2023/07/12(水)01:10 ID:OtxkddAG(1) AAS
正の整数の範囲だけなら、CPythonのmath.pow()もそう悪くないんだ…
(10**23と10**210が外れ)。
外部リンク:sagecell.sagemath.org
918: 2023/07/12(水)09:36 ID:OzccPY9R(1) AAS
この手の計算ライブラリではあるある
真値が無理数の場合次善策として“最近の値”を出す事、当然それ出してくれると思いがちだけどそんな値出してくれるライブラリなどほとんどない
原理的に出せないわけではない、適当にレジスタの精度を設定して上から、下からの近似値を出す、求める桁数まで一致してればそれが“最近”、一致してなければ精度上げて再計算‥を繰り返せば必ず最後は一致する‥でもそのために貴重な時間リソースが無駄になる、なので普通は“精度は±××、上からの近似の中では最良”くらいが関の山、それすら守ってなくても普通、ましてや“小数第何位までは確実に合ってる”などとは全く期待できない
そのあたりの“実用上それで十分、それ以上の事やって誰得?”と割り切れるまでが一週目
919(1): 915 2023/07/12(水)15:28 ID:6VP/LOOe(1) AAS
"1e23" とかの文字列を構成して、Cのstrtod()やsscand()的な関数を使って変換する分には誤差が出ないっぽいのですけど
(これの誤差が出るライブラリは駆逐されたらしい)、
これはこれで「負け」た気分になるのが…w
920: 915 2023/07/12(水)15:35 ID:9l9n30C9(1) AAS
>>919
sscanfですたorz
921: 2023/07/12(水)17:47 ID:MwP3bMsR(1) AAS
分母が2べきでない限り内部的に分母が2べきの有理数で保持するタイプの浮動小数は“定数”を10進のリテラルで与えるとそこで誤差が出たり、あるいはその逆もある、いわゆる基数変換誤差
多くの場合、基数変換誤差は計算の最初と最後でしかでないのでそもそもあまり話題にはならない、大昔のインタプリタ言語とかだったら計算結果を毎回10進表示に変換して文字列として保持してるようなやつもあっただろうけど、もう流石にそのタイプは駆逐されてるんじゃなかろか
大体そもそも他の組み込み関数の誤差評価がもっと大甘なのにそこだけ頑張っても意味がない
922: 2023/07/12(水)18:35 ID:wgfcR5Sc(1) AAS
COBOLはまだまだ健在ですよ
923: 915 2023/07/13(木)05:18 ID:102DBCHI(1/2) AAS
何で「負け」なのかと云うと、
IEEE754的な意味での「再現性」を担保する為に
(binary64の数値を有効桁17桁で10進文字列に変換して、
それをstrtod()とかするとbit perfectで元に戻るってやつ)、
strtod()とかは内部で多倍長演算をやってるので…。
(glibcの実装(GNU MPに丸投げ?)と、ルーセントの中の人
が書いたやつ(そのほか)の2系統あり)。
…なんとかズル出来ないのか?w
924: 915 2023/07/13(木)05:22 ID:102DBCHI(2/2) AAS
要するに牛刀割鶏感がでかい
いまさら気にしても仕方がなくもないけど
925(1): 2023/07/13(木)05:46 ID:UahP4Rhb(1) AAS
そもそもコレ変数へ値をそんな自由に“セット”する方法がないんだよな
例えば値が10^(-30)として二進展開して
2^(-30)
=1.100_0010_1000_0010_0101_1111_...×2^(-103)
という巡回小数になる
単精度での内部表示は
0_00011000_100_0010_1000_0010_0110_0000
になる、なるとわかってもこの値を変数にセットす方法がない
おそらく整数0xc68660をセットして2^24で割ればいける時もあるかもしれないけどそれとて言語の保証外、浮動小数点型の変数に何か値をセットしてそれを2べきの整数で割ったとて、いくら“割る数”が2べきであっても仮数部わ変わらず指数部だけ変わってくれる保証をしてる言語の方が少ない
実験すればそれでうまくいくかどうかわかるかもしれないけどregulationでそれでうまくいくと保証されてるわけではない、せいぜい“多分うまく行ってる”くらいしかわからない
省1
926: 2023/07/13(木)06:10 ID:FkuVPs5p(1) AAS
0xc28260÷2^24乗ね
この計算をさせて本当に内部的に変数に0_00011000_100_0010_1000_0010_0110_0000
がセットされたかどうか確認する方法もない
もう一回2^24かけて0xc28260かけて戻ってくるかチェックするとかして間接的に確かめるしかない
Cとかputhonとかならできるのかもしれないけど
927(7): 蟻人間 ◆T6xkBnTXz7B0 2023/07/13(木)21:54 ID:pFytGTyV(1/2) AAS
お題: 入力として32ビット整数のビットマスクが与えられる。
ビットマスクに含まれる有効なビットの組み合わせをブルートフォースせよ。
例)
0x13
→(0x1, 0x2, 0x3, 0x10, 0x11, 0x12, 0x13).
0x45
→(0x1, 0x4, 0x5, 0x40, 0x41, 0x44, 0x45).
0x92C
→???
928(1): 2023/07/13(木)22:05 ID:zo6OijSK(1) AAS
>>927
>→(0x1, 0x2, 0x3, 0x10, 0x11, 0x12, 0x13).
0x0 は含まないルール?
929: 蟻人間 ◆T6xkBnTXz7B0 2023/07/13(木)22:06 ID:pFytGTyV(2/2) AAS
>>928
あ、ゼロ忘れてた。ゼロもお願いします。
930: 2023/07/13(木)23:34 ID:Gk3QqB7S(1) AAS
>>927
Haskell
外部リンク:ideone.com
931(1): 2023/07/13(木)23:41 ID:qsjHWAGp(1) AAS
sort意味なしorz
932: 2023/07/14(金)00:29 ID:iQAPuZ6f(1/2) AAS
>>927
R
外部リンク:www.ideone.com
933(3): 蟻人間 ◆T6xkBnTXz7B0 2023/07/14(金)12:13 ID:i4ROjxmQ(1/2) AAS
AA省
934(2): 蟻人間 ◆T6xkBnTXz7B0 2023/07/14(金)13:10 ID:i4ROjxmQ(2/2) AAS
>>933
出力は題意のコマンドリスト2つです。
回答例)
((2, 2, 0, 0, 1, 4, 4, 2, 2), (1, 1, 3, 3, 1))
935(1): 638 2023/07/14(金)16:41 ID:9h33JNqm(1/2) AAS
>>927 Perl5
for (qw(0x13 0x45 0x92C)) {
$n = eval;
@a = map{sprintf "0x%x", $_} grep{($_ & $n) == $_} 0..$n;
print "$_: @a\n";
}
※インデントは全角スペースに置換してあります。
実行結果
$ perl 21_927.pl
0x13: 0x0 0x1 0x2 0x3 0x10 0x11 0x12 0x13
省2
936: 638 2023/07/14(金)18:16 ID:9h33JNqm(2/2) AAS
>>935 これだとコード書くの安直で楽だけど、効率悪いんだよね、特に値が大きいとき。
効率に配慮すると、こうか↓
sub f {
if (@_) {
my $b = shift;
@_ ? map{$_, $_ | 2**$b} f(@_) : ($_, $_ | 2**$b);
}
}
for (qw(0x13 0x45 0x92C)) {
$n = eval;
省10
937: 915 2023/07/14(金)19:28 ID:Q8y8QZ/7(1) AAS
仕事で書いたら怒られるやつw
(プラットホームや、ライブラリのバージョンとかに依存する可能性があるから)
外部リンク:sagecell.sagemath.org
938(1): 2023/07/14(金)22:15 ID:iQAPuZ6f(2/2) AAS
>>933
・を「一つ待つ」として、最短のコマンドリストは>>934の
R: →→・・←↓↓→→
S: ←←↑↑←
の他にも、Sは同上で
R: →・・→←↓↓→→
R: →↓↑→←↓↓→→
R: →→←→←↓↓→→
R: →→→←←↓↓→→
もあり、あまりすっきりしない問題なので解く気が起きないな。
939(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/14(金)22:26 ID:PGyidJ8C(1/3) AAS
>>938
移動量も最短にした方がいいか?
940(2): 蟻人間 ◆T6xkBnTXz7B0 2023/07/14(金)22:31 ID:PGyidJ8C(2/3) AAS
>>939
移動量も最短にする。また、動けるとき、かつ待てるときは待つよりも先に動く方を優先するという条件を追加します。
941(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/14(金)22:44 ID:PGyidJ8C(3/3) AAS
>>940
さらに次の3つの条件を追加します。
西か東か迷った場合は西を優先します。
北か南か迷った場合は北を優先します。
南/北の向きか東/西の向きかを迷った場合は東/西の向きを優先します。
942: 2023/07/15(土)03:29 ID:deBIZu3e(1) AAS
>>927 Ruby
def solution( mk )
mb = 1
a = [0]
print "0x%X\n→(" % mk
while mk > 0
a.dup.each{|b| a << b + mb } if mk.odd?
mb <<= 1
mk >>= 1
end
省6
943(1): 2023/07/15(土)08:05 ID:DpclFvGX(1) AAS
>>925
ツッコミどころが多すぎる
正しくはこうでは?
10^(-30)
=1.010_0010_0100_0010_0101_1111_...×2^(-100)
さらに、...部分は1111...と続くので、単精度にするなら切り上げになって、
1.010_0010_0100_0010_0110_0000×2^(-100)
よって、単精度での内部表示は
省9
944: 915 2023/07/15(土)10:11 ID:HHeu+C79(1/3) AAS
今からIEEE754に準拠してない処理系が制作される事は無いでしょうから
(ホビーや学習用途は別ね)、
今日の処理系で、2のべき乗での割り算で仮数部が変わるって事は
無いと思われます(アンダーフローやオーバーフローは除外)。
…IBM hexadecimal floating-pointって基数が16だったな。
(仮数部が変わらないのは16のべき乗での乗除算のみ)
あれを常用してる人ってまだ居るのか?w
>>943
FORTRANならEQUIVALENCE文で…
945: 2023/07/15(土)16:01 ID:STkOcJIm(1/2) AAS
外部リンク:www.wolframalpha.com
を3ビット移動
946(1): 2023/07/15(土)16:07 ID:STkOcJIm(2/2) AAS
そもそも浮動小数点ライブラリなら
x^y = exp( y * log 2 )
で実装してるんじゃないかな
そもそものexpやlogが“最近値”を与えてくれることなど規格にはないやろ
それは数値計算の理論勉強してたらすぐわかる、メチャクチャ難しくてほとんど実装不能になってしまう
だから規格上は“±その周辺の値で表示できる値の中では最良”、すなわち“表現可能な上界の最小値または表現可能な下界の最大値”、それならギリギリ実用可能な速度くらいは出せるけど、それとて難しい、そこまで今のライブラリが保証してくれてるかあやしい
まぁその手のライブラリ使わずに“最近値”を出すことはメチャクチャ手間かかるけどできなくはない、しかしそれが限界、その値を変数に確実にセットする方法がない
947: 2023/07/15(土)16:25 ID:P30TlPMe(1) AAS
x^y = exp( y log (x))ね
この計算に入る前に「x=2, yが整数であるかどうか検査する、その場合には仮数部は弄らず指数部だけyに応じて増減させる」なんて処理してるライブラリはないやろ
有無を言わさずy log(x)計算、→exp計算、丸め誤差上等でやってるやろ、そこで単精度計算ならちょっと余裕もってビット幅大きめのアキュムレータに入れてるかもしれんけどどんなに大きな精度のアキュムレーターを用意したとて出てくる値が“最近値”になる保証はない、そこまで保証しようとすると恐ろしくコストがかかってしまう
汎用の数値計算ライブラリでそこまで保証されてるわけないと思う、単精度計算なら±2^(-24)=単精度の内部表現で可能な幅までは保証するのが限界だと思う、それとてかなりコストがかかるし
まぁどのみち2^(-23)以上の精度が必要ならそもそも言語の標準ライブラリなんか使わんからな
948: 915 2023/07/15(土)18:15 ID:HHeu+C79(2/3) AAS
>>946
規格で正確な値(を最近値に丸めたもの)を求められてるのは
加減乗除とsqrt()とfma()でしたっけ?
pow()は、glibcが誤差0.523ulpとか(0.5ulpが限界値)、
イイ線行ってるそうですね。
外部リンク[pdf]:members.loria.fr
949(1): 2023/07/15(土)21:46 ID:0NaOek0L(1) AAS
おお、llvmすげぇ
950: 915 2023/07/15(土)23:31 ID:HHeu+C79(3/3) AAS
>>949
llvmの多くの項目がNA(non available)なのは、
実装されてないからではないかと。
この中では、OpenLibmがfdlibmの「血」を残してる方なのかな?
外部リンク:www.netlib.org
951(1): 2023/07/16(日)00:22 ID:Cy0F/L8f(1) AAS
うん、多分実装されてない分は自分でやれと
実装されてるところは軒並み0.5
まぁこれも本当に確率100%で必ず最近値出すんではなくて外れる確率が0.000001%とかなんだろうな
例えば単精度演算は毎回倍精度にキャストして計算してから丸めればほぼほぼ最近値にならない確率0.0000001%とかになるからな
逆に言えば他のライブラリはその手のキャストも何もしないで“丸め誤差上等”でやってるんやろな
952: 915 2023/07/16(日)01:29 ID:34tdZpnq(1/5) AAS
>>951
ちゃんとやろうとすると、CRlibmみたいに、部分的にでも
6倍精度とかで計算しないとならないっぽいです。
glibcのexp()は768bitで計算する場合があるそうで。
…世間的には、それ程の精度を求めない用途もあって、
実際、libmのhypot()(じゃなくてもいいのですが)が遅いので自分で
実装しますたと云う報告がネット上でも散見されます
(もちろん精度は落ちる)
953(1): 2023/07/16(日)08:49 ID:Q2/lNXhi(1) AAS
まじですか
768bitって何をどう計算してるんやろ?
結果が24bitで768bitなら求める答えの72倍のアキュムレーター使うのかな?
そんな事ないよな、アキュムレータは48bitくらいで36回計算するからのべ768bitとかいう事なのかな?
まぁそれだけの事やって「末尾の最後の1ビットの正確性を求める意味あんのか問題」は発生するわな
”みんなが使う汎用ライブラリ”だとどうしてもそういう“誰も求めてない精度”に無意味にこだわってしまう部分があるんかも
954(1): 915 2023/07/16(日)10:57 ID:34tdZpnq(2/5) AAS
>>953
丸めて切り上げ/切り捨てのぎりぎりのとこを精査するのに
768bitで計算する場合もあるそうです(そういう
ぎりぎりのとこでない場合はやらないので、それなりに速い)。
955(1): 2023/07/16(日)11:52 ID:YiXq44MV(1) AAS
>>954
まじですか?
そんな最後の1ビット正確に決定するために768bitもの無駄な計算するくらいなら誤差±2^(-23)でいいからとっとと値返してくれた方がいいのに
なので当然通常“最後の1ビット”の正確性までは規格に入れてないんだよな、それでもライブラリ作成者は自己満のために誰も求めない“最後の1ビット”にこだわる
これは高校くらいまでの近似計算の「小数第××位まで求めよ」のノリが抜けてない事の現れでもあるんだよな
もう計算論の近似計算の世界ではゲームチェンジが起こってる事に気づけてない
956: 915 2023/07/16(日)12:36 ID:34tdZpnq(3/5) AAS
>>955
誤差なし(±0.5ulp以内)を追及する人達(CORE-MATH)も居れば、
double-double演算とかの「飛び道具」を使うのをよしとしない人達も居て、
えーっと、みんな違ってみんないい(こなみ)
957(1): 2023/07/16(日)13:03 ID:nweoM3+S(1) AAS
まぁしかし“払うコスト”に対する“リターン”が少なすぎる気はする
例えば内部表現の精度が2^24まである単精度の計算をする場合、もちろん理想は“誤差±1/2×2^(-24)”で返してくれるとありがたい
しかし現実できるか?
例えばアキュムレータをを32ビット用意して計算する、マクローリン展開で求めるとして100回で打ち切るとする、打ち切り誤差は入力のサイズによるけど十分小さい、丸め誤差は2^(-32)×100で誤差トータルは2^(-25)程度、返すのが24bitだから丸められる2^8の可能性のうち真値のポジションから最大100ずれたところでウロチョロしてるわけでその“ウロチョロ”が二項分布、真値の分布が256個の箱の一様分布として外れ値になるの確率がどのくらいやろ?暗算ではできないけど言うほどない、この言うほどない誤差を返さないただそれだけのために768bitも計算繰り返すとかどうなんって感じ
958: 915 2023/07/16(日)13:09 ID:34tdZpnq(4/5) AAS
>>957
768bitの話は、倍精度(53bit精度)のexp()の過去のバージョンでした。
glibcでも問題になったんでしょう(たぶん)
959(1): 2023/07/16(日)14:04 ID:JCFIIFPR(1) AAS
でしょうね
流石に768bitはない
せめてそこまで行けば完全に最近値が決定できるならともかくそこまで行っても最近値を100%決めるのは無理なんじゃないでしょうか?
24ビットの値返すのに768bitまで計算するなら744bit、2^744の可能性につきあってそこまで行っても両端の100通りの可能性は残り、最近値を返せない可能性は0にはなってない、まぁほとんど0だけど
多分llvmの実装は単精度でも最初からアキュムレータに64bit(レジスタ2個分)で計算するんやろな、あまりのビットが40bitあって100/2^40とか1000/2^40とかはほとんど0だからほぼ確率1で最近値返しますよ、それで十分でしょって実装なのではなかろかと、実際それで十分
最近のcpuはなんかレジスタ2個分に分けて計算してもレジスタ1個で計算するのと時間大して変わらないという話もききますしね
960: 915 2023/07/16(日)14:30 ID:34tdZpnq(5/5) AAS
>>959
以前は最近値だったそうです(その代わり遅い)
外部リンク:sourceware.org
961: 2023/07/16(日)15:00 ID:8Io8J2M0(1) AAS
その記事はglibcで色々実験してみたの報告ですね
どっかに“旧glibcは最近値をとことんまで出す”って別資料の記事見かけました?
もちろん入力された有理数xに対してexp(x)を時間無制限ならその与えられた桁数までの最近値を計算するアルゴリズムはすぐ作れるので(一般にGaussの超幾何関数からくる連分数表示が可能な実数ならそのような事が可能)そういうライブラリを実装するのはまぁ無理ではないんですけどね
実際円周率をリソースが食い尽くされるまで延々と計算し続けるプログラムとかよくネットで転がってますし、確か昔のrubyのサンプルプログラムにも収録されてたような
962(1): 2023/07/20(木)22:27 ID:VHXXslhm(1) AAS
>>933-934
R
外部リンク:ideone.com
>>940-941の条件はやっぱり面倒なので省略した。
963(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/21(金)02:40 ID:qmbYiZJ4(1) AAS
>>962
難しいお題だったので、簡単に解説お願いします。
964(1): 2023/07/21(金)07:58 ID:XtiUJMX6(1/2) AAS
>>927
Rust
fn foo(input: u32) -> impl Iterator<Item = u32> {
(0..=input).filter(move |n| n & input == *n)
}
ただしこれではループがO(n)
ループをO(log N)にするならこちら
fn foo(input: u32) -> impl Iterator<Item = u32> {
let table: Vec<u32> = bits_iter(input).map(|p| 1 << p).collect();
(0..(1 << table.len())).map(move |bits| bits_iter(bits).map(|p| table[p as usize]).sum())
省12
965: 2023/07/21(金)08:19 ID:XtiUJMX6(2/2) AAS
>>964
rustfmtがギリギリ2行にまとめてしまうが見にくいので手動で以下へ補正
(改行の違いだけでコード自体は同じです)
fn foo(input: u32) -> impl Iterator<Item = u32> {
let table: Vec<u32> = bits_iter(input)
.map(|p| 1 << p)
.collect();
(0..(1 << table.len()))
.map(move |bits| {
bits_iter(bits)
省4
966(1): 2023/07/21(金)13:18 ID:p6hqStjf(1) AAS
見やすさどうこうならオンラインの実行環境に入れたほうが見やすい
967(1): 2023/07/21(金)20:43 ID:eNxuBSnx(1) AAS
>>963
まず
?Rを自由に動かしてコマンドリストを得てから、SをRと衝突しないように動かしてコマンドリストを得る。
次に優先権を逆転させ、
?Sを自由に動かしてコマンドリストを得てから、RをSと衝突しないように動かしてコマンドリストを得る。
そして、?と?でコマンドリストが短い方を解として採用する。
コマンドリストを得る方法は基本的には>>856と同じ幅優先探索だが、>>856のように2次元の数値配列を作り
各マスへ最短何個のコマンドで到達できるかを記録するだけでは今回の問題の複雑な動きには対処できないから、
3次元の論理配列を作り1個のコマンドで各マスへ到達できるか否か、2個のコマンドで各マスへ到達できるか否か、
3個のコマンドで〜、…を記録していくように変えた。
省4
968: 蟻人間 ◆T6xkBnTXz7B0 2023/07/21(金)21:36 ID:GfD0zzOH(1) AAS
>>967
三次元の論理配列。。。なんかすごい。
これって衝突回避システムに応用できるかな?
969: 2023/07/22(土)07:20 ID:Ya5NOP1D(1) AAS
AA省
970: 2023/07/22(土)11:35 ID:YLqzZrt5(1) AAS
デスクトップアプリで5ch専ブラを造れ
971: 2023/07/23(日)12:51 ID:g/6/koRD(1) AAS
山下の乱で速攻作ったのがCUIのやつだった
GUIにしたらこんなんだろうな
画像リンク[jpg]:i.imgur.com
972: 2023/07/23(日)22:13 ID:5wwn3n8Y(1) AAS
スレ違いなんだけど今回の騒動出遅れてよくわからんのわけとこの山下ってのが5chに対して反乱分子起こしたん?
それは何故?
もうニュー速+とかでも過去の話でスレも立ってないしググっても出てこない
何がどうなったん?
973: 2023/07/25(火)09:52 ID:dyNDjhLG(1) AAS
トーク過疎ってんな
こりゃクーデター失敗かな
974: 2023/07/25(火)14:53 ID:iTChcdyR(1) AAS
本能寺が変
975(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/26(水)21:23 ID:vhd+IIfp(1) AAS
お題: 化学の共有結合。
x, y, zをそれぞれ任意の自然数とする。入力(x, y, z)に対して炭素原子(C)x個、酸素原子(O)y個、水素原子(H)z個のすべてを
共有結合で連結するときの連結結果の組み合わせをすべて出力するプログラムを書け。
出力形式は自由とする。
入力例)
(0, 1, 2)→?
(1, 1, 4)→?
(1, 0, 4)→?
976: 2023/07/27(木)09:04 ID:GoQM94Wc(1) AAS
H2O2ってなんていう結合だっけ
977: 2023/07/27(木)12:12 ID:/bGsBsBb(1/2) AAS
>>931
ごめんなさい、わからない
例えば上の例ではFooは単相型なの?
具体的に何型?
ちょっと昔からのweb情報ではできないと書いてあるページはあるけど上の例ではできてるでしょ?
978: 2023/07/27(木)12:13 ID:/bGsBsBb(2/2) AAS
誤爆orz
979: 2023/07/27(木)15:18 ID:gIycSMlB(1) AAS
まず共有結合とはどんなものなのかを調べてからでないと作れないが、今のところ調べてまで作りたいとは思わない。
980: 638 2023/07/27(木)17:33 ID:DBsU1Ttt(1) AAS
>>975
結果を図で表すのがマンドクセ
981: 2023/07/28(金)06:23 ID:dM/IOnaa(1) AAS
情報科学的元素共有結合の勝手な定義を書いとかなければ問題にならない
982: 蟻人間 ◆T6xkBnTXz7B0 2023/07/28(金)12:57 ID:EWzuT5tC(1) AAS
共有結合について高校化学でよく言われるのは、次の通り。
炭素原子は「結合の手」を4個持っている。
酸素原子は「結合の手」を2個持っている。
水素原子は「結合の手」を1個持っている。
結合の手を余らさないように連結する。
分子の右手型左手型の区別は考えなくてよい。
連結のときの他の原子との重なりは考えなくてもよい。
983(1): 蟻人間 ◆T6xkBnTXz7B0 2023/07/30(日)17:36 ID:x27rHRHa(1) AAS
お題: パソコン、スマホ、またはタブレットに大きな顔を表示して、音声入力と
音声出力で会話ができるようにする。
984(1): 2023/07/31(月)02:56 ID:aNRF9KkN(1) AAS
>>983
1. Skype をインストールする。
2. 友達と動画で通話する。
ただし、掛ける相手が居ない場合は実現できない。
985: 2023/07/31(月)10:04 ID:8wbRk2dY(1/2) AAS
H2Oってなんで真っすぐじゃなくてくの字に折れてるんだろ
986: 2023/07/31(月)10:05 ID:8wbRk2dY(2/2) AAS
>>984
スマホが2台あれば解決
PC+スマホでもOK
987: 蟻人間 ◆T6xkBnTXz7B0 2023/07/31(月)14:11 ID:utupSPZZ(1/2) AAS
お題: 気体の状態方程式より温度を求める。
半径ゼロで70000個の水素分子のみが底面半径4[cm]、高さh[cm]の円すい形の密閉空間内をまんべんなく飛び回る。
密閉空間の高さh[cm]を入力とするとき、圧力P=1.013*10^5 [Pa]、密閉空間の体積V[m^3]、水素分子の物質量n[mol]、気体定数R=8.31について、
気体の状態方程式PV=nRTより導かれる絶対温度T[K]を出力せよ。
入力例)
10→?
20→?
50→?
988(1): 2023/07/31(月)14:46 ID:sgBBFIN2(1) AAS
70000個ってどうやって数えたん?
989: 蟻人間 ◆T6xkBnTXz7B0 2023/07/31(月)14:55 ID:utupSPZZ(2/2) AAS
>>988
そりゃあ、一つ一つ丁寧にピンセットでつまんで容器に入れたんでしょう。
990: 2023/07/31(月)18:09 ID:Pczz8g0N(1) AAS
現代の地球人の技術力ではT=0にでもしないと無理そうだし
もしそうなら水素は固体化してて
Vの大部分は真空でPはほぼ0なんじゃないかな
991: 2023/08/01(火)07:02 ID:jESfOyT1(1) AAS
はいはい unsafe { 未定義動作 }
992: 638 2023/08/01(火)07:13 ID:FpN06ruh(1) AAS
なぜ中高理科の試験問題をここで…
993: 2023/08/01(火)10:53 ID:AvEKEx5a(1) AAS
T = PV/nR
= 1.013*10^5 * (4.000)^2*3.142*h/1000
/( 70000*8.314 * 6.022*10^23 *10^3 )
= 1.453*10^(-29)*h ( K )
994: 蟻人間 ◆T6xkBnTXz7B0 2023/08/01(火)12:37 ID:NTrANRpP(1) AAS
分子が多すぎて現実的なシミュレーションは難しいね。
995: 2023/08/01(火)13:12 ID:oNEwqf/W(1) AAS
T = PV/nR
= 1.013*10^5 * (4.000)^2*3.142*h/1000
/( 70000 / (6.022*10^23) *10^3 * 8.314 )
= 5.269*10^18*h ( K )
996: 2023/08/02(水)09:29 ID:4pI1Wfnv(1) AAS
h=0で誤動作する罠
997: 2023/08/02(水)23:17 ID:sBo1wUiw(1) AAS
そもそも分子の運動をシュミレーションしてp,v,nTの関係を調べさせるつもりなら出題がおかしい
それなら入力が温度、分子量、体積で出力が圧力やろ
998: 2023/08/03(木)03:48 ID:/xW45k0z(1) AAS
シミュレーション
999: 2023/08/03(木)13:32 ID:Lr04Zjag(1/2) AAS
PV=nRTは高校物理
1000: 2023/08/03(木)13:32 ID:Lr04Zjag(2/2) AAS
熱力学は
ヘンリーの法則
ラウールの法則
に従う
1001(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 262日 18時間 32分 12秒
1002(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
省4
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.291s*