お題
1. URLエンコード
次の文字列をURLエンコード(パーセントエンコーディング)せよ。
但しURLエンコード専用ライブラリだけは使わない事。
‘日 本’
( 全角2文字の間に半角スペースが一つ入ってる.)
元の文字コードはUTF8とする。 この場合は7バイト。
パーセントエンコードとは、バイトの並びについて各バイトを「%XX」(XXは十六進法)という文字列への変換である。 バイト列への変換はライブラリを使っても良い。
正解(アルファベットは小文字も可)
%E6%97%A5%20%E6%9C%AC
2. URLデコード
1でURLエンコードされたものをURLデコードせよ。
URLデコード用ライブラリがあれば使う事。
正解 日 本
>>5 python
from urllib.parse import unquote #,quote
url = '日 本'
urle = ''.join([ '%{:x}'.format(b) for b in url.encode('UTF-8') ])
print(urle) # encode same #print(quote(url))
print(unquote(urle)) # decode
''' # 出力
%e6%97%a5%20%e6%9c%ac
日 本
''' 何も考えないバカはすぐに飛びつくなぁ
これお題に見せかけた課題か宿題だろw
>>7
出題者本人が回答しているだけだろ。
何も考えない以下略 各桁を足し合わせたら引数で与えられた数になるものを5個返す関数を作れ。
例:
sumnum 12
> [39,48,57,66,75] <- 3 + 9 = 12, 4 + 8 = 12, 5 + 7 = 12, 6 + 6 = 12, 7 + 5 = 12
お題
(0,0)(0,999)(999,0)(999,999)のx,y 座標系の中の問題
次の20個の数値を先頭から2個ずつ取ってのx,y の位置に 10個のポイントがあるとする。
[136, 577, 110, 927, 472, 199, 157, 808, 388, 598, 94, 31, 388, 157, 325, 409, 787, 897, 850, 598]
(136,577) (110,927) 〜(850,598) 10ポイント
問題1 外側の正方形
全てのポイントが正方形の内側にあり、正方形の面積が一番小さくなる正方形の4点の座標を示せ。 但し正方形の座標は(999,999)の範囲内とする。
正方形は斜めもあり得る。 正方形の辺は必ず2点以上ポイントに重なっている。
問題2 内側の正方形
全てのポイントが正方形の外側にあり、正方形の面積が一番大きくなる4点の座標を示せ。
正方形は斜めもあり得る。 正方形の辺は必ず2点以上ポイントに重なっている。
問題を難しく感じる人は、斜めの正方形は考えないとしても良い。その旨回答に書いておいてください。
>>12 おいおい、金儲けにするんかい。 ま、金を払う人がいるなら良いが。 学生の宿題に需要があるかな?
しかしこんなところで宣伝すんな。 >>15 93 だけは正しいけど他は違うだろと思ったが、0を足しても結果は変わらないから詐欺に近いな。
しかしこう言う指摘は、プログラムには重要。
こう言う考え方をするなら、129 12342 なども該当するな。
あまりにも組み合わせが多すぎるから、条件をつけないとな。
問題の条件として各桁に0は含まないとしたり数字は2桁以内とするとか、答えは一番大きな数字を上から順に5つ示せとか。 出題するときには、答えが一意になる様にした方が良い。
回答する方も戸惑うし、正解が何かも判りづらくなる。
出来るだけ正解は少ない方が良い。 理想的には一つ。
0 -> 1
1 -> 11
2 -> 101
3 -> 1111
4 -> 10001
5 -> 110011
6 -> 1010101
7 -> 11111111
8 -> 100000001
9 -> 1100000011
10 -> 10100000101
11 -> 111100001111
12 -> 1000100010001
13 -> 11001100110011
14 -> 101010101010101
15 -> 1111111111111111
この0から15までを隙間なく並べる
隙間なく並べるとは例えばこの0から2までなら
0 -> 1
1 -> 11
2 -> 101
---1
11
--101
11111
このように1同士がぶつからずにそして0がなくなるように並べる
この場合の解答は0番を3つ右にずらして2番を右に二つずらしているので
(0,3)(1,0)(2,2)となる
詐欺は酷くないか
要件は満たしてるし、何より解が存在する全ての値に対して正しい解を出力するだろ
sumnum 1についても対応しようとしたらこれが綺麗な解法の1つであることは疑いようもない事実のはず
>>20 と思ったが俺が間違ってた
相違なる数と言われてないから、sumnum 0に対しても[0,0,0,0,0]が解を満たすわな、すまんかった >>18 リンク先に書いてあるじゃん、金払えと。
>>19 さっぱりわからん。 何のための説明をしてるの? どんな問題に関係してるの? お題
ペアノの公理、及びペアノに依る加法の定義に従って 128 + 256 を計算せよ。
>>25 だったら何で金を要求するサイトへのリンクを貼るんだよ。 ビットコインを稼ぎたいための宣伝だろ?
下心がないのなら直接 ideon のリンクを貼れば良いじゃないか。 面倒臭いし。 >>26
自分の書いたコードを一箇所に固めているだけですよ
これわりと便利で、3年前のコードなんかすっかり忘れてしまっているのを呼び出せるのです、ああ、あのとき N クイーンやったよね、とか
自分のローカルは一つのディレクトリに放り込んでいるだけだから grep でも検索困難… 練習問題のコードなんて使い捨てでいいじゃない。 俺も最初の頃は記録してたけど、もうやめた。
要は必要なときに必要なコードが書けなければそれまでなんだから、最初から勉強し直しても同じ。
昔のコードを見ても自分が理解していないんだから同じ。
沢山練習した方が良い。 基本から見直す事でより理解が深くなる。
>>28
ええ、まったくの使い捨てでここ十年くらいやってますが、特定のスレに ideone/codepad のリンクを貼っていたのが、十年たってみると、当初は意図していなかった効用をもたらしてくれているんですね >>23
自己愛性パーソナリティ障害の朝鮮人は相手にすんなよ >>5 Squeak Smalltalk
'日 本' encodeForHTTP "=> '%E6%97%A5%20%E6%9C%AC' "
'%E6%97%A5%20%E6%9C%AC' unescapePercents "=> '日 本' " >>32 但しURLエンコード専用ライブラリだけは使わない事。 >>9
Haskell
import Data.Char
main = (print.sumnum) 12
sumnum 0 = [0]
sumnum n |n < 0 = error "Please n >= 0 number"
sumnum n = take 5 [x | x <- [0..], n == sum [read [a]| a <- show x]] >>36
いいことを教えてもらいました、Java って uft-16 だけかとおもっていました… >>33
組み込みメソッドの使用禁止とかばかげてる 正直言ってここに出てくるお題よりAtCoderのお題の方がレベル高いよね
漏れなんて、書き捨てのRuby のファイルが、100もある
いつも、Windows10 で、WSL, Ubuntu16.04 から、grep してる
お題
Excelのカラム名でHELLOからWORLDまで表示する
>>11 問題1の斜めにしない直行正方形までは出た。
xの範囲= (94, 31) (850, 598) 差 756
yの範囲= (94, 31) (110, 927) 差 896
1辺= 896
直行正方形 (94, 31) (990, 31) (94, 927) (990, 927)
次はこれを傾けていくんだな。これがムズイ。 >>11 x,y座標は 0〜999までの整数 辺の長さは斜めになった時は整数とは限らない。 ランク付けならmap使うと楽、O(NlogN)が想定解
前スレの場合、みんなハッシュ(set)かソート使ってたじゃん
>>53 コンパクトなコーディングはみんなほぼ同じだったね。
python smalltalk java
なんかプログラミング言語を見直しはじめたよ。
複雑にせずに根本を見つめるコーディングが出来る言語というのは素晴らしい。 >>前スレ988 Perl5
http://2chb.net/r/tech/1549160513/988
sub p {
$h = int $n/2;
for ($i=2; $i<=$h; $i++) {
$s[$i] = 1 unless exists $s[$i];
do {$s[$i*$_] = 0 for 2..int $h/$i} if $s[$i];
}
@p = grep{$s[$_]} 2..$h;
}
sub f {
my $i = shift;
my $h = int $i/2;
for $j (grep{$_ <= $h} @p) {
return ($j, f($i/$j)) if 0 == $i % $j;
}
$i
}
for $n (qw{28 2002 216653}) {
p;
my %f; $f{$_}++ for f($n);
@f = map{$_ . (1 < $f{$_} and "^$f{$_}")} sort{$a<=>$b} keys %f;
$" = '+';
print "$n => @f\n";
}
実行
~ $ perl 13_988.pl
28 => 2^2+7
2002 => 2+7+11+13
216653 => 216653 setにぶちこんで重複削除、リストにしてソートしてマップの値の方にインデックス入れて最後にそのマップ使って出して完成
ゆっくり書いてたら間にたくさんの書き込みが入った。
俺のことは忘れてくれ。
>>56 スマソ、ケアレスミスった、繋ぐ演算子は+ => *だた…orz
sub p {
$h = int $n/2;
for ($i=2; $i<=$h; $i++) {
$s[$i] = 1 unless exists $s[$i];
do {$s[$i*$_] = 0 for 2..int $h/$i} if $s[$i];
}
@p = grep{$s[$_]} 2..$h;
}
sub f {
my $i = shift;
my $h = int $i/2;
for $j (grep{$_ <= $h} @p) {
return ($j,f($i/$j)) if 0 == $i % $j;
}
$i
}
for $n (qw{28 2002 216653}) {
p;
my %f; $f{$_}++ for f($n);
@f = map{$_ . (1 < $f{$_} and "^$f{$_}")} sort{$a<=>$b} keys %f;
$" = '*';
print "$n => @f\n";
}
実行
~ $ perl 13_988.pl
28 => 2^2*7
2002 => 2*7*11*13
216653 => 216653 あなたが解けない C/C++/Java/C#/JavaScript の問題を有償で片付けるスレッドです
有償で片付けるスレッドに貼り付けるのはよろしくないね
有償で片付けてほしくて出題してるわけじゃないでしょ
問題の窃盗だよ
>>59
Perlは配列に対するexistsやdefinedは呼び出せるが振る舞いは不明確で「強く」非推奨となっているので
この場合では問題なくとも@pはリストではなく代わりにハッシュ%pを使って実装するべきだった >>65
ハッシュにしたほうが良いのは@pじゃなくて@sの方だったわ >>64
バカチョンには何を言っても無駄だと思うよ
聞く耳持たない分からず屋の馬鹿だからバカチョンなんだから >>64
>>27に理由が書かれていたが、一ヶ所に纏めておくと便利だなんてのは個人の都合であって、他の人にはわざわざ間接参照を強いることになるのだから、ほんとに身勝手な奴だと思う。
>>27
纏めておくのは他所で勝手にやれ、このスレにはコードだけを貼れよ。お前の手間なぞ知ったことではない。 >>62 折角まとめるんなら、回答の方も >> でリンクを貼って欲しいな。 >>70
それは絶対にやらないんじゃね
奴は自分のことしか考えてないから
だから自己愛
永遠に人から煙たがられる存在 >>11 は、多角形の中のドットの内外判定問題と言うのが確立されてるみたいね。
色んな方法があるみたいだが、簡単なのは、
Crossing Number Algorithm
らしい、ググってみると結構コンパクトなコード。
他も見てみたが、問題は境界線上にある点は多角形外と判定する事。
だから、そのままのロジックに手を入れないとした場合、使う側としてどう解決したら良いんだろう。
直行正方形を1ドットずつ大きくしてから回転させる?
それとも、多角形の中の多角形問題の方が適してるのかな?
この問題は結構勉強になる。 問題のイメージを掴むために、図形表示までやり始めたよ。 表示するとより楽しくなる。 >>71 そこまで悪い人間では無さそうだけどな、おだてれば猿も木に登るタイプだとみた。
高い木に登ってもらおう。 ググラないで考えようとしていたけど、
ヒントを目にしてしまった気分
いやべつにいいけどさ
Q. クソ問題とは何ですか?
A. 問題の解釈を巡って議論や煽り合いが10レス以上続く、バカが投稿した不備のある問題のことです。
>>47 Ruby
("HELLO".."WORLD").each{|v| puts v} >>9 Ruby
def sumnum(n)
(0..4).map{|i| ("1"*n +"0"*i).to_i}
end 凸包が求められれば、頂点の並びも整列するので
形状を分割して余弦定理とかから導けないかなって思ったんだよね
ちなみに、最小を求めるだけならある角度から見た凸包の一次元への投影と、直交する角度からの一次元への投影を180度回しながら調べれば出せると思うけど、分割の粒度の問題で、本当に最小が取れる保証はないね
>>76
試しに Perl でも 文字列 .. 文字列 をやってみたらできたよ。
こんなことできたとは。知らないまま20年以上使ってたよ。w >前スレの920
頭を使った。Ruby で、
str = "-6 3 9 5 3 -7"
original_ary = str.split.map!( &:to_i ) # 各要素は整数型
hash = original_ary.each_with_object( { } ) { | num, h | h[ num ] = true }
sorted_ary = hash.sort # キーでソートする
#=> [[-7, true], [-6, true], [3, true], [5, true], [9, true]]
# Enumerator#with_index(offset = 0)
sorted_hash = sorted_ary.each.with_index( 1 ) { | elem, idx | elem[ 1 ] = idx }.to_h
# p sorted_ary
#=> [[-7, 1], [-6, 2], [3, 3], [5, 4], [9, 5]]
# p sorted_hash
#=> {-7=>1, -6=>2, 3=>3, 5=>4, 9=>5}
results = original_ary.map{ | num | sorted_hash[ num ] }
puts results.join( " " ) #=> 2 3 5 4 3 1
>>70-71
アンカーが多すぎると投稿できないのです、ただそれだけです >>73
>おだてれば猿も木に登るタイプだとみた。
痛いところを突きますね… >2 3 5 4 3 1
これが、
2 3 6 5 3 1
みたいに、4 が無くなる・飛ばされるランキングだと、もっとややこしい!w
前スレの920 Ruby
def f(a)
b={}
a .dup.sort.each{|v|b[v]=b.size+1 if not b.key v}
a.map{|v|b[v]}
end
p f([-6,3,9,5,3,-7])
[2, 3, 5, 4, 3, 1]
>>34
>>79
一休さんみたいなトンチの効いた回答で、それはそれで楽しめました。
改めて問題を書き直します。
各桁を足し合わせたら引数で与えられた数になる数の集合全体から小さい順に(可能なら=0対策)5個返す関数を作れ。
例:
sumnum 12
> [39,48,57,66,75] <- 3 + 9 = 12, 4 + 8 = 12, 5 + 7 = 12, 6 + 6 = 12, 7 + 5 = 12 苗字で漢字の「口」を「くち」ではなく「ぐち」と読むのは
井口、矢口、田口の3つだけ
これマメな
>>90
Haskell
import Data.Char要らんかった。
take 5も問題と違うけど外に追い出した方が応用効きそう。
main = (print.take 5.sumnum) 12
sumnum 0 = [0]
sumnum n |n < 0 = error "Please n >= 0 number"
sumnum n = [x | x <- [1..], n == sum [read [a]| a <- show x]]
>>95
OCamlで無限リスト処理どうすんだろと疑問だったので、後で精読させて頂きますm(_ _)m >>97 もう相手にすんな。お題にするなら、
その9つの名前の読み仮名のあいうえお順に並べよ。
谷口・関口・合口・相口・藍口・青口・赤口・秋口・明口
読み仮名を持ってくるのが難しそうだけどな。 aを要素の型がIntである長さNの配列、k、cを型がIntである変数とする。
{P}a[a[k]]=c;{a[a[k]]!=c}
Hoare tripleが成立するためのなるべく弱いPを示せ
>>99
教えてください
P は何ですか?
{ } とは何を表しているのですか?
>{P}a[a[k]]=c;{a[a[k]]!=c} sumnum、引数に10000とか与えたら答え返ってこなさそう
引数に1億とかは文字列長が千万とかになるから無理でも仕方ないけど、1万位は対応したいね
>>103 知らない言語ばかりでよく読めてないんだが、今までの提出って1から順に試してね?
それだと当然結果が返ってこないが
違ったらすまん >>92は「必ずレスがもらえるレス」として有名な文らしいな
案の定わんさかレスの付いてること >>108 この凸包図を眺めてると、正解の正方形は 左辺の一番長い線を1辺とした正方形になりそうだが、それをどうやって求めるのか。
How to find the minimum-area-rectangle (MAR) fitted on the given points?
https://gis.stackexchange.com/questions/22895/finding-minimum-area-rectangle-for-given-points
最初に書いた人は、凸包を求めて重心を中心として1度ずつ回転させるやり方を考えたらしいが、下の方で良い解法のコメントが付いてた。
少しずつ回転させるのではなくて、長方形の1辺は必ず凸包の辺のどれかと重なってるはずだから、凸包の辺の角度だけをとって試せば良いとのこと。
これなら重心を求める必要もないし、時間はかからない。
長方形が求まったら、座標系の中に入る正方形にすれば良いがはみ出してたら、参考解かな。
このアルゴリズムは、
The algorithm you are looking for is known in polygon generalisation as "smallest surrounding rectangle".
凸包最小長方形の解法とでも言えば良いのかな。 >>109
正方形を求める場合で凸包がひし形の場合、その方法はうまくいかないきがす? 今回のアルゴリズムは、最小の正方形を求める方法だけじゃなくて、グラフの境界との交差判定もあるから
最小の求め方だけではなく、2番め以降についても正しく判定できないといけない上に、回答が一つに定まらない可能性もあるんだよね
与えられた点を全て含む凸包全体からなる集合の濃度は明らかに連続体濃度なんだから2番目なんて存在しないぞ
>>112
書いててあれ?と思てったけど、たしかにそうだ。
俺では解けなさそうだ。 >>111 1辺から正方形を作る場合は、その正方形が全ての凸包の頂点を全て含むような大きさでなければならない。
この場合6辺あるから、そのような6つの正方形を作ってその中の最小のものを求めることになる。
面倒なのはそれが座標系に入らないといけないから場合によっては辺に平行移動しないといけないかも知れない。
すると、>>112 の言うように正方形の位置は変わるかもしれないけど、辺の長さが合ってれば正解だろうね。
(この場合は座標系に入るだろうからとりあえずは平行移動は考えないでも良いかも) >>110 どんな凸包体でも求まるよ。 1辺の長さが凸包体の辺の長さと一致させるわけじゃないよ。
全ての頂点を含む直方体を作る。 この求め方も工夫が必要そう。
1辺を伸ばした直線上に全ての頂点から垂線を引いて、一番外の距離を直方体の1辺とするんだろうな。
同じように他辺も求める。 >>116
雑な書き殴りですまん
さらにややこしいのは、凸包の頂点が正方形の辺上に位置して、
頂点に存在しないことのほうが多いのも難くする要因の一つ >>11 色々見たけど、画像認識の境界を探す為にある程度人気のある話題みたいだが、完全を求めるのではなく、だいたいで良いからスピードの速いのが良いとしてるみたいだね。 境界自体があやふやなものだし。
厳密にやるとしても、長方形と正方形ではかなり条件が違う。
全ての点が正方形に入るのなら、一つの候補は凸包の対角上の点が一番離れているところを正方形の対角とした正方形が一つの候補ではないだろうか。
直交正方形が最大だからそこまでを調べれば良いけど、それだけをしらみつぶしに調べてどれだけ時間がかかるかだな。
それをはみ出る点がある場合にどうゴニョゴニョするかだけど、条件が絞れればスピードは速くなる。
一般的にはポイント数は膨大な数だから、条件を絞り込む方法が重要になりそう。
しかし、こんな例題はどこにでもありそうで殆どサンプルがないのは時間がかかりすぎて簡単に試せないのかな、今回はポイント数が少ないからそれほどではないとは思うけど。 >>119 文章が変な順になっててごめん。
全ての点が正方形に入るのなら、一つの候補は凸包の対角上の点が一番離れているところを正方形の対角とした正方形が一つの候補ではないだろうか。
それをはみ出る点がある場合にどうゴニョゴニョするかだけど、条件が絞れればスピードは速くなる。
直交正方形が最大だからそこまでを調べれば良いけど、それだけをしらみつぶしに調べてどれだけ時間がかかるかだな。 計算両を優先するなら、座標軸を基準にとって大雑把に取るべきじゃないのかな
これなら、ゲームのコリジョン検出で使われる方法そのままだし
点の数は関係なくね?
任意の3点を選んでその内部にある点は無いものとして考えても同じなんだから
いや、関係あるか
頂点のめちゃくちゃ多い凸多角形になったら計算量明らかに増えるもんな
>>11 なんかかなりの難問に思えてきたな。 解法への足がかりが見えない。 凸包までは比較的簡単にたどり着いたけどそれからが闇の中。
凸包の重心が何か使えるだろうか?
最小包含円 という言葉もあるようだが、少なくとも 正方形の辺はこの円の直径以下。 >>124 取り敢えずこの問題を 『凸包正方形 』
とでも呼びますか。 >>112
連続体濃度でかつ二番目に小さな値のある集合
{0, 1} ∪ (2, ∞) >>11
ポイントが(136,577), (110,927)の2つだけならどうなる? 以下はオレなりに考えた仮説
1)2点で正方形の内側に接するのは何らかの平べったい形、対角にて頂点が接するので45°
2)3点で接するのは、細長い三角形あるいはそれに準じた形、角度の計算は…?不明
または凸包の一辺が正方形の辺に接する形
3)4点で接するのは、細長い三角形あるいはそれに準じた形、角度の計算は…?不明
または凸包の一辺が正方形の辺に接する形
4)5点以上で接する場合は、凸包の一辺が正方形の辺に接する
「対角にて頂点が接する形の角度は45°」
「凸包の一辺が正方形の辺に接する形は凸包の辺の角度」
これらは角度が分かるので回転変化・逆変換を使って
外側の最小の斜め正方形の候補を探索することは可能だが、
角度が良く分からない形の解法が、まだ見出せていない
凸包の一辺が正方形の辺に接するおよび二点が対角に接する場合に限った解法
なら難しくないんだがな…
>>129
それは正方形が(0,0)-(999,999)からはみでてまうな >>11 外側の正方形 Perl5、但し>>130>>131の「凸包の一辺が正方形の辺に接する」または「細い菱形のような形が
正方形の対角2点で接する」場合について求てみた。凸包を求める処理は略し、二点間の辺を総当りで計算している。
use List::Util qw{min max pairkeys pairvalues};
@s=qw{136 577 110 927 472 199 157 808 388 598 94 31 388 157 325 409 787 897 850 598};
@X = pairkeys @s; @Y = pairvalues @s;
sub sp {$_[0]*$_[2] + $_[1]*$_[3]}
sub rt {
@e = (cos $th, -sin $th); @f = (sin $th, cos $th);
my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X;
my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y;
@x = (min(@x), max(@x)); @y = (min(@y), max(@y));
$h = (max $x[1] - $x[0], $y[1] - $y[0]) / 2;
$cx = ($x[1] + $x[0]) / 2; $cy = ($y[1] + $y[0]) / 2;
@x = ($cx - $h, $cx + $h); @y = ($cy - $h, $cy + $h);
($e[1], $f[0]) = (-$e[1], -$f[0]);
@x = map{sp @e, $x[$_], $y[$_]} 0..1;
@y = map{sp @f, $x[$_], $y[$_]} 0..1;
@x = (min(@x), max(@x)); @y = (min(@y), max(@y));
(\@x, \@y, 2*$h) }
for $i (0..@X-2) { for $j ($i+1..$#X) {
($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]);
($dx, $dy) = (-$dx, -$dy) if $dx < 0;
$l = sqrt($dx*$dx + $dy*$dy);
$th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy);
($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
$th += 3.14159265358979/4; ($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
} }
@t = sort{$a->{w}<=>$b->{w}} grep{0<=$_->{X}[0]and$_->{X}[1]<=999 and 0<=$_->{Y}[0]and$_->{Y}[1]<=999} @t;
do {@x = @{$t[$_]->{X}}; @y = @{$t[$_]->{Y}};
printf"%d: (%7.3f, %7.3f)-(%7.3f, %7.3f): w=%3.3f\n",$_+1,$x[0],$y[0],$x[1],$y[1],$t[$_]->{w}} for 0..5; >>133 の実行例
~ $ perl 14_11.pl
1: ( 48.607, 27.043)-(863.062, 983.177): w=891.576
2: ( 45.920, 20.484)-(869.713, 849.356): w=892.353
3: ( 32.627, 29.170)-(901.066, 949.457): w=895.142
4: ( 24.000, 31.000)-(920.000, 927.000): w=896.000
5: ( 24.000, 31.000)-(920.000, 927.000): w=896.000
6: ( 14.845, 32.823)-(931.567, 907.397): w=896.130
検算してないので、もしバグっていたらゴメンチャイ、(ゝω・) テヘペロ >>133 スマソ、「正方形の4点の座標を示せ」と書かれていたので、出力処理を少し修正
use List::Util qw{min max pairkeys pairvalues};
@s=qw{136 577 110 927 472 199 157 808 388 598 94 31 388 157 325 409 787 897 850 598};
@X = pairkeys @s; @Y = pairvalues @s;
sub sp {$_[0]*$_[2] + $_[1]*$_[3]}
sub rt {
@e = (cos $th, -sin $th); @f = (sin $th, cos $th);
my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X;
my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y;
@x = (min(@x), max(@x)); @y = (min(@y), max(@y));
$h = (max $x[1] - $x[0], $y[1] - $y[0]) / 2;
$cx = ($x[1] + $x[0]) / 2; $cy = ($y[1] + $y[0]) / 2;
@x = ($cx - $h, $cx + $h); @y = ($cy - $h, $cy + $h);
($e[1], $f[0]) = (-$e[1], -$f[0]);
@x = map{sp @e, $x[$_], $y[$_]} 0..1;
@y = map{sp @f, $x[$_], $y[$_]} 0..1;
@x = (min(@x), max(@x)); @y = (min(@y), max(@y));
(\@x, \@y, 2*$h) }
for $i (0..@X-2) { for $j ($i+1..$#X) {
($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]);
($dx, $dy) = (-$dx, -$dy) if $dx < 0;
$l = sqrt($dx*$dx + $dy*$dy);
$th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy);
($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
$th += 3.14159265358979/4; ($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
} }
@t = sort{$a->{w}<=>$b->{w}} grep{0<=$_->{X}[0]and$_->{X}[1]<=999 and 0<=$_->{Y}[0]and$_->{Y}[1]<=999} @t;
do {@x = @{$t[$_]->{X}}; @y = @{$t[$_]->{Y}};
printf"%d: (%6.3f, %6.3f), (%7.3f, %6.3f), (%6.3f, %7.3f), (%7.3f, %7.3f): w=%3.3f\n",
$_+1,$x[0],$y[0],$x[1],$y[0],$x[0],$y[1],$x[1],$y[1],$t[$_]->{w}} for 0..5; >>135 実行結果
~ $ perl 14_11.pl
1: (48.607, 27.043), (863.062, 27.043), (48.607, 983.177), (863.062, 983.177): w=891.576
2: (45.920, 20.484), (869.713, 20.484), (45.920, 849.356), (869.713, 849.356): w=892.353
3: (32.627, 29.170), (901.066, 29.170), (32.627, 949.457), (901.066, 949.457): w=895.142
4: (24.000, 31.000), (920.000, 31.000), (24.000, 927.000), (920.000, 927.000): w=896.000
5: (24.000, 31.000), (920.000, 31.000), (24.000, 927.000), (920.000, 927.000): w=896.000
6: (14.845, 32.823), (931.567, 32.823), (14.845, 907.397), (931.567, 907.397): w=896.130
検算してないので、もしバグっていたらゴメンチャイ、(ゝω・) テヘペロ >>136
なんか変、バグってるスマソ、直すことが出来たら書き込みます >>11 外側の正方形 Perl5 凸包の辺が正方形の辺に接するまたは対角二点で接する場合、>>135の露骨なバグ一個修正
use List::Util qw{min max pairkeys pairvalues};
@s=qw{136 577 110 927 472 199 157 808 388 598 94 31 388 157 325 409 787 897 850 598};
@X = pairkeys @s; @Y = pairvalues @s;
sub sp {$_[0]*$_[2] + $_[1]*$_[3]}
sub rt {
@e = (cos $th, -sin $th); @f = (sin $th, cos $th);
my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X;
my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y;
@x = (min(@x), max(@x)); @y = (min(@y), max(@y));
$h = (max $x[1] - $x[0], $y[1] - $y[0]) / 2;
$cx = ($x[1] + $x[0]) / 2; $cy = ($y[1] + $y[0]) / 2;
@x = ($cx - $h, $cx + $h, $cx - $h, $cx + $h);
@y = ($cy - $h, $cy - $h, $cy + $h, $cy + $h);
($e[1], $f[0]) = (-$e[1], -$f[0]);
@x = map{sp @e, $x[$_], $y[$_]} 0..3;
@y = map{sp @f, $x[$_], $y[$_]} 0..3;
(\@x, \@y, 2*$h) }
for $i (0..@X-2) { for $j ($i+1..$#X) {
($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]);
($dx, $dy) = (-$dx, -$dy) if $dx < 0;
$l = sqrt($dx*$dx + $dy*$dy);
$th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy);
($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
$th += 3.14159265358979/4; ($X, $Y, $w) = &rt;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,l,$l,th,$th,X,$X,Y,$Y,w,$w};
} }
@t = sort{$$a{w}<=>$$b{w}} grep{0<=min@{$_->{X}}and max@{$_->{X}}<=999 and 0<=min@{$_->{Y}}and max@{$_->{Y}}<=999} @t;
do {@x = @{$t[$_]{X}}; @y = @{$t[$_]{Y}};
printf"%d: (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f): w=%7.3f, th=%7.3f°\n",
$_+1,$x[0],$y[0],$x[1],$y[1],$x[2],$y[2],$x[3],$y[3],$t[$_]{w},$t[$_]{th}*180/3.14159265358979} for 0..4; >>138 実行例
~ $ perl 14_11.pl
1: ( 32.627, 29.170), (927.382, 55.475), ( 6.310,923.152), (901.066,949.457): w=895.142, th= -1.685°
2: (920.000,927.000), ( 24.000,927.000), (920.000, 31.000), ( 24.000, 31.000): w=896.000, th=180.000°
3: ( 24.000, 31.000), (920.000, 31.000), ( 24.000,927.000), (920.000,927.000): w=896.000, th= 0.000°
4: ( 14.845, 32.823), (910.733, 11.994), ( 35.680,928.226), (931.567,907.397): w=896.130, th= 1.332°
5: ( 18.819, 32.332), (914.819, 16.335), ( 34.819,928.046), (930.819,912.049): w=896.143, th= 1.023°
ちゃんと検算してないので、もしまだバグがいたらゴメンチャイ、(ゝω・) テヘペロ
検算方法考えた方がいいのかも。ちなみにwは正方形の幅、thは回転各[deg]
>>11 の内側の正方形についてはまだ考えていない。 >>11 おもろいな、初級問題だと文法の練習としてそれなりに勉強になる。
こう言うのはそれを超えていろんなパッケージ/ライブラリを駆使することになるから一皮剥けて勉強になる。
解けるか解けないか判らないけど楽しんでる。
勿論こう言うのは、言語の問題ではなく、ロジックの問題だと解っているんだが、ヒントとなる数字を出せるのは言語の力にもよるからそれはそれなりに面白い。
図形は直感的に推論が正しいかどうか判るから面白い。
凸包の重心は使えなさそうだな。
>>139 なんとなく変に感じるんだが。
この場合の正方形の一辺は、左側の凸包の線そのものになると思うんだけど。
つまり、左下端が、( 94,31 )、上端が(110,927) にならないかな? >>140 ごめん、同じ画像を二つ上げてしまった。 >>140 図をありがとう
scriptを(94, 31) - (110, 927)の辺に傾けてこの角度における最小の正方形だけを計算するようなおして
計算したら
5: ( 18.819, 32.332), (914.819, 16.335), ( 34.819,928.046), (930.819,912.049): w=896.143, th= 1.023°
になりました。 >>144 それはおかしい。 直行正方形の辺の長さが896だから、896以下にならなければならない。 >>11 1)のみ やってみた。
図 https://codepen.io/dokokade/full/WBzgrZ
※ 途中で完全にJavaScriptのお遊びになってしまった。
(計算は別プログラムで、そのログを図にした)
一辺 = 890.70993168302
四点
x: [ 0.8027676391, 82.9114960624, 969.828819782, 887.7200913596]
y: [916.8907759982, 29.9734522778, 112.082180701, 998.9995044215] >>146 あ、でも 右上の頂点は y = 998.9995044215 となってるけど、
正確には y=999 とぶつからなければいけないよね。 少し誤差が大きすぎるような気がするけどこんなもの? >>140
この図の(388,157)は(388,598)の誤記? >>149 間違っていないでしょ。
両方あるよ。
xys [[136 577]
[110 927]
[472 199]
[157 808]
[388 598] ***
[ 94 31]
[388 157] ***
[325 409]
[787 897]
[850 598]]
>>145 凸包の一辺(94,31)-(110,927)のみに着目し、この辺が垂直となる様に座標を1.023°回転して
から点郡を囲む矩形領域を求め、その長方形を正方形になるように短い辺を伸ばす処理は省いて
長方形のまま元の座標系に逆変換し4頂点座標を見たところ、
use List::Util qw{min max};
use Math::Trig;
@X = qw{94 110}; # 787 850 472 388};
@Y = qw{31 927}; # 897 598 199 598};
sub sp {$_[0]*$_[2] + $_[1]*$_[3]}
for $i (0..@X-2) { for $j ($i+1..$#X) {
($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]);
($dx, $dy) = (-$dx, -$dy) if $dx < 0;
$th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy);
@e = (cos $th, -sin $th); @f = (sin $th, cos $th);
my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X;
my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y;
@x = (min(@x), max @x); @y = (min(@y), max @y);
$w = max($x[1] - $x[0], $y[1] - $y[0]);
($e[1], $f[0]) = (-$e[1], -$f[0]);
@x = map{sp @e, $x[$_], $y[$_]} 0,1,0,1;
@y = map{sp @f, $x[$_], $y[$_]} 0,0,1,1;
#next if min@x<0 or 999<max@x or min@y<0 or 999<max@y;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,th,$th,X,[@x],Y,[@y],w,$w} } }
@t = sort{$$a{w}<=>$$b{w}} @t;
do {@x = @{$_->{X}}; @y = @{$_->{Y}};
printf"%d: (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f): w=%7.3f, th=%7.3f°\n",
++$k,$x[0],$y[0],$x[1],$y[1],$x[2],$y[2],$x[3],$y[3],$$_{w},rad2deg $$_{th}} for @t;
~ $ perl 14_11_2.pl
1: ( 94.000, 30.990), (110.000, 30.990), ( 94.000,926.704), (110.000,926.704): w=896.143, th= 1.023°
となったので、今のところ計算は合っていると思う。おかしく感じたのは長方形を正方形になるように短い辺を伸ばした座標の
シフトによるものだと思う。しかし、この長方形⇒正方形補正が曲者で、より小さい正方形であるにもかかわらず長方形の
短辺を両側に均等に伸ばすと頂点が0〜999の範囲をこえてしまうものがあるらしく、不均等に伸ばすようにすれば
より小さい正方形を見出せるかもしれない。 >>150 外接円を描いてみたけど、利用方法を見つけられなかった。
むしろ [ 94 31] [787 897] の対角を直径とする最小包含円 からかな? 以下は試作実験programと結果
@凸包の辺の角度にのみ傾ける(それ以外の角度は略) A長方形⇒正方形補正は略 B頂点座標が0〜999の範囲外も出力
use List::Util qw{min max}; use Math::Trig;
@X = qw{94 110 787 850 472 388}; @Y = qw{31 927 897 598 199 157};
sub sp {$_[0]*$_[2] + $_[1]*$_[3]}
for $i (0..@X-2) { for $j ($i+1..$#X) {
($dx, $dy) = ($X[$j] - $X[$i], $Y[$j] - $Y[$i]);
($dx, $dy) = (-$dx, -$dy) if $dx < 0;
$th = $dx > abs($dy) ? -atan2($dy, $dx) : atan2($dx, $dy);
@e = (cos $th, -sin $th); @f = (sin $th, cos $th);
my @x = map{sp @e, $X[$_], $Y[$_]} 0..$#X;
my @y = map{sp @f, $X[$_], $Y[$_]} 0..$#Y;
@x = (min(@x), max @x); @y = (min(@y), max @y);
$w = max($x[1] - $x[0], $y[1] - $y[0]);
($e[1], $f[0]) = (-$e[1], -$f[0]);
@x = map{sp @e, $x[$_], $y[$_]} 0,1,0,1;
@y = map{sp @f, $x[$_], $y[$_]} 0,0,1,1;
#next if min@x<0 or 999<max@x or min@y<0 or 999<max@y;
push @t, +{i,$i,j,$j,dx,$dx,dy,$dy,th,$th,X,[@x],Y,[@y],w,$w} } }
@t = sort{$$a{w}<=>$$b{w}} @t;
do {@x = @{$_->{X}}; @y = @{$_->{Y}};
printf"%d: (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f), (%7.3f,%7.3f): w=%7.3f, th=%7.3f°\n",
++$k,$x[0],$y[0],$x[1],$y[1],$x[2],$y[2],$x[3],$y[3],$$_{w},rad2deg $$_{th}} for @t[0..4];
1: (752.170,710.324), ( 94.000,710.324), (752.170, -8.662), ( 94.000, -8.662): w=873.451, th=168.102°
2: ( 70.342, 31.983), (863.100, 31.983), ( 70.342,891.839), (863.100,891.839): w=895.830, th= 2.537°
3: ( 94.000, 30.990), (855.637, 30.990), ( 94.000,913.391), (855.637,913.391): w=896.143, th= 1.023°
4: (699.348,547.478), ( 94.000,547.478), (699.348,-34.520), ( 94.000,-34.520): w=945.899, th=160.148°
5: ( 94.000, 29.184), (671.086, 29.184), ( 94.000,1007.681), (671.086,1007.681): w=978.102, th=-23.199°
真の極小解は中途半端な角度にあるのか…
>>154
これ、凸包の辺の角度にのみ傾けてない、凸包の全頂点の組み合わせエッジの角度に傾けている。
まいいや、大差ない >>155 無理を言ってごめん、答えの誤差をなくすために、最終座標は整数の xy 座標に出来るかな。 中心からの距離を切り上げて整数にする感じになると思うけど。 こういう問題って、極小・最小解にいたる連続的な解空間形成してなけりゃ収束計算もできないし
かといって解析的あるいはロジカルな求解法が見出せなけりゃ、最後はヒューリスティックあるいはランダムwalk
あるいはRISMみたいな外挿的に探索するしかないのだろうか…
ないんだろうなたぶん。そんなきがす
>>159 現実の世界でも、求める解は整数にすることが多いと思う。
画面のドット精度、工作機械の精度など整数と考えた方が良い。
現実的には整数解が求められないと、角を切り落としたりしかねない。
(許容誤差を加えた範囲を求めるのでも良いけど)
整数解にした方が、試行錯誤の時間も少なくなると思うからより現実的だと思う。 答えが一律に決まるし。 >>153 このケースの場合の最小包含円は外接円と一致するんだな。 素因数分解する関数を作れ。
ただし2より小さい数は空のリスト(又は配列)を返す事とする。
例: factorization 150
>[2,3,5,5]
>>164 Perl5、>>59 で書いたroutineを流用しています。
sub prime {
$h = int $n/2;
for ($i=2; $i<=$h; $i++) {
$s[$i] = 1 unless exists $s[$i];
do {$s[$i*$_] = 0 for 2..int $h/$i} if $s[$i];
}
@p = grep{$s[$_]} 2..$h;
}
sub factorization {
my $i = shift;
my $h = int $i/2;
for $j (grep{$_ <= $h} @p) {
return ($j, factorization($i/$j)) if 0 == $i % $j;
}
1 < $i ? $i : ();
}
$"=',';
for $n ((0, 1, 2, 150)) {
prime;
@f = factorization $n;
print"$n => [@f]\n";
}
実行結果
~ $ perl 14_164.pl
0 => []
1 => []
2 => [2]
150 => [2,3,5,5] >>164
一応Haskell載せときます。
main = (print.factorization) 150
factorization n | n < 2 = []
factorization n = f n primes
where
f n (x:_) |n == x = [x]
f n (x:xs)|n `mod` x == 0 = x:f (n `div` x) (x:xs)
f n (_:xs) = f n xs
primes = sieve [2..]
where sieve (p:xs) = p:sieve [x | x <- xs, x `mod` p /= 0] 既に既出
馬から落馬
歌を歌う
舞を舞う
ダンスをダンスる
eをネイピア数とした時
e^(iθ) ≠ cosθ + i sinθ
となる事を証明せよ
>>175
exp(iθ)=cosθ+isinθだけど(2.71828...)^(iθ)は多値関数だよ お題:テーブル方式でcos/sin関数をテキトーに自作セヨ。
>>179
cos := (1 0)(round abs fdivmod 2 * $a Math.PI) * (sgn $a);
sin := (0 1)(round abs fdivmod 2 * $a Math.PI) * (sgn $a); 複素数の指数関数や対数関数は多価関数だろ
馬鹿はお前だ
>>183
寝言はねえから言えよクズ
z^w := exp(w * log(z))
log(z) が多価関数なんだから一般にz^wも多価関数だっつーの
死ねよ雑魚が
https://en.wikipedia.org/wiki/Exponential_function
> We can then define a more general exponentiation:
>
> {\displaystyle z^{w}=e^{w\log z}} z^{w}=e^{w\log z}
> for all complex numbers z and w. This is also a MULTIVALUED function, even when z is real. >>184
出典がwikiとかありえねーよwww
wikiにそう書いてあるからってそれが正しいとは限んねえだろバーカ >>184
第一の意味での指数関数、つまり f′(z) = f(z), f(0)=1 を満たす f(z) = exp(z) は当然多価関数じゃない。
第二の意味での「指数関数」、つまり複素数の複素数乗 f(z, w) = z^w は、引用してくれたとおり exp の「逆関数」 log を使って f(z, w) = exp(w log z) と定義するけど、
log は主値を取るものとして(つまり定義域を制限した exp の真の意味での逆関数として)定義すれば log w も f(z, w) もちゃんとした関数になる。そうでなければどちらも多価関数になる。
多価関数って要は関数じゃない(写像ではない)から、少なくとも一般的な計算には使わないよね。多価の asin x や多価の √x なんて使わないでしょ? >>186
主値を取る場合はLogなりp.v. fなりきちんと明示するのが少なくとも解析屋の間ではルールだよ
他の分野の人は知らないけど >>170
> 歌を歌う
歌うには「歌を」と言う意味は含まれてないから歌を歌うと言うのは別におかしくないよ
> 舞を舞う
も同様 >>164 Python sympy
from sympy import *
print(factorint(150))
#{2: 1, 3: 1, 5: 2} 2*3*5**2 を示す >>188
和語として語源同一なんだけど。
意外なものでは「くさい」と「くそ」「明かり」と「開ける」も同一語源。 数学の問題なんて、センター入試問題でも解いてこいよ。 手を抜きすぎだぞ。 もっと面白くひねれよ。
面白いお題がないかと文句を言う前に
進んで面白いお題を書きましょう
>>192 python sympy
from sympy import *
import time
time_sta = time.perf_counter()
ans=factorint(13999)
time_end = time.perf_counter()
print(ans,'{:.7f}ms'.format((time_end-time_sta)*1000))
#{13999: 1} 0.0283330ms
同じpython でも餅は餅屋なんだろうな。
因みに、13999**2 を求めると
#{13999: 2} 0.4635000ms
iPhone Xs Max Pythonista3.2 Python3.6.5 sympy 0.4.7.1 >>192 は >>164向けの回答としては問題ない。
しかし、一般的な素因数分解としては問題が。
大きな素数が対象のとき、実行時間がひどい結果になっている。
たとえば有名な素数1000000007(10億7)をやると....
(前スレ988の制約範囲内くらい、普通にできる形が望ましい)
pythonで手を抜いた一般的な素因数分解でも
10^12くらいは1秒以内に出る。(10^12+39が近場の素数) >>196 python sympy
{1000000007: 1} 0.2255000ms >>196 同一環境での比較。
n= 13999 ans= {13999: 1} time=0.0135830ms
>>192 を実行
n= 13999 ans= [13999] time=152.4304170ms >>198
192の解が一般解としてはひどいすぎるってことでしょ。
10億7どころか、百万台の素数もキツイ。 お題:↓の画像のようにコンソール画面に雨を降らせなさい
>>185
Wikiが正しいとは限らないからと言って、wikiが間違っている前提で反論するバカの見本 >>201 jupyter で測ってみた。結構早い。
[1000000007]
CPU times: user 2.28 ms, sys: 0 ns, total: 2.28 ms
Wall time: 2.25 ms
[1000000000039]
CPU times: user 99.8 ms, sys: 0 ns, total: 99.8 ms
Wall time: 107 ms
[2, 3, 3, 5, 7, 11, 13, 17, 29]
CPU times: user 76 µs, sys: 0 ns, total: 76 µs
Wall time: 78.7 µs
[2, 3, 3, 5, 7, 11, 13, 17, 29, 1000000007]
CPU times: user 3.53 ms, sys: 0 ns, total: 3.53 ms
Wall time: 3.54 ms 素数は、平方根までの素数で割って、割り切れなければ素数だろ
[2,3,5,7,11,13...] みたいに、素数表に追加していく途中で、
例えば、103 なら、11 までの素数で割って、割り切れなければ素数
13以降の素数で割る必要はない
もし13で割り切れるなら、13 * n = 103
となり、n は、√103 よりも、小さくなるから、既に割り切れているはず!
>>205
例のRubyバカはこのスレにも出没するのか >>185
間違いとも限らない。
書かれていることを鵜呑みにするのは間違いだが見もしないで頭ごなしに間違いと決めつけるのも間違い。 >>205
なるほど。暇があったらそれも考慮しよう。 【速報】金券五百円分とすかいらーく優侍券をすぐもらえる
@ スマホでたいむばんくを入手
A 会員登録を済ませる
B マイページへ移動する
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)
今なら更に4日18時までの登録で2倍の600円の紹介金を入手
クオカードとすかいらーく優待券を両方ゲットできます。
かんたんに入手できますのでご利用下さい >>200 Ruby
# エスケープシーケンスが有効な環境
print "\e[1;1;H\e2" # "\ec"
while true
print 79.times.inject(''){|s| s += (rand(20) >= 19)? '|' : ' ' }, "\n\e[1T\eM"
sleep 0.1
end お題:2次元関数を図示したとき網目状になる関数を示せ。
網目状になったら普通それは関数とは言わないんですが
>>200
エスケープシーケンスのコードが行方不明だったので書き直した。
C++で書いたけど、ベターCですなぁ。 >>215
それは数学のお題では?関数の方を求めるんでしょ?図を画面に出すとかではなく。 >>200 Ruby
# 水はねを追加
require 'io/console'
Crow, Ccol = STDOUT.winsize
print "\e[0;0H"
lines = []
while true
line = ' ' * Ccol
rand(Ccol).div(8).times{ line[rand(Ccol)] = '|' }
lines << line
print "\e[0;0H#{line}\n\e[0;0H"
if lines.size >= Crow
line = lines.shift.tr('|','w')
print "\e[#{Crow};0H#{line}\e[0;0H"
end
sleep 0.1
print "\e[0;0H\eM"
end お題
1/x + 1/2y + 1/3z = 4/3
を満たす、整数( x, y, z )の組み合わせを求めろ
ただし、x, y, z の範囲は、1 <= x, y, z <= 4 とする
答え
[ 1, 2, 4 ], [ 1, 3, 2 ], [ 2, 1, 1 ]
これは数学と言うより、コンピュータの問題じゃないかな。
IEEE754の理解が必要になると思う。
有理数・Rational クラスを使えば?
式を6倍しても良いけど
というか知的障害者でも64回回せば終わる問題だよな
>>222
> IEEE754の理解が必要になると思う。
釣りか? >>215
sin(x + y)*sin(x - y)=0 >>226
誤差収束しないといけないからだと思う。
コンピュータは1/3を計算するとき工夫がいる。 >>228
> コンピュータは1/3を計算するとき工夫がいる。
だからその工夫が>>223の言う
> 有理数・Rational クラスを使えば?
とか
> 式を6倍しても良いけど
だろ
数学的な問題は実数使っても解けないことが多いぞ 等式を6xyz倍して、4の3乗通りの整数の組み合わせを代入して単純に比較するだけの話だよね
>>233
まあそう言うことだわな
> 1/x + 1/2y + 1/3z = 4/3
6yz + 3xz + 2xy = 8xyz
整数演算だけでいい お題:相異なる25個の英大文字が与えられるので、足りない1個を出力せよ
BCDEFGHIJKLMNOPQRSTUVWXYZ -> A
YIZFOADLMWCRUTGSVQKJEHNBP -> X
>>235 ruby
$><<([?A..?Z]-gets.split('')) typo
>>235 ruby
$><<([*?A..?Z]-gets.split('')) >>235 Perl5
for $s (BCDEFGHIJKLMNOPQRSTUVWXYZ, YIZFOADLMWCRUTGSVQKJEHNBP) {
@a = grep{0>index$s,$_} A..Z;
print "$s -> @a\n";
}
$ perl 14_235.pl
BCDEFGHIJKLMNOPQRSTUVWXYZ -> A
YIZFOADLMWCRUTGSVQKJEHNBP -> X >>238 Pler5 >>238 よりもう少しコンパクトでsimpleに書けた
for $s (BCDEFGHIJKLMNOPQRSTUVWXYZ, YIZFOADLMWCRUTGSVQKJEHNBP) {
print "$s -> ", grep{0>index$s,$_} A..Z, "\n";
} >>220
kotlinc
6倍して計算
>>> (1..4).forEach { x -> (1..4).forEach { y -> (1..4).forEach { z -> if (6.0/x+3*y+2*z==8.0) println("[$x, $y, $z]") }}}
[2, 1, 1]
>>>
答え一つだけのようだが、>>220の下に書いてある答えはなんだ? >>240
スペース無しの1/2yを1/2*yって解釈する人間を初めて見たわ
悪意か? >>223
>式を6倍しても良いけど
間違い!
6xyz 倍する
x, 2y, 3z が、分母です! 最初から曖昧な式を書いてる出題者が最大の悪意だろ
もう無視しろよこんなサイコパス
えぇ……どこが曖昧なんだよ
無知だからって開き直るのは格好悪いわ
>>241
悪意と言うより6.0/xとか見る限りちょっと抜けてるんだと思う >>235 Pharo/Squeak Smalltalk
| alphabet |
alphabet := Character alphabet asUppercase.
alphabet difference: 'BCDEFGHIJKLMNOPQRSTUVWXYZ'. "=> 'A' "
alphabet difference: 'YIZFOADLMWCRUTGSVQKJEHNBP'. "=> 'X' " >>220 Pharo/Squeak Smalltalk
| set exp |
set := Set new.
(1 to: 4) asDigitsToPower: 3 do: [:combi |
combi permutationsDo: [:permu | set add: permu copy]
].
exp := [:x :y :z | 1/x + (1/(2*y)) + (1/(3*z))].
set select: [:permu | (exp valueWithArguments: permu) = (4/3)]
"=> a Set(#(2 1 1) #(1 3 2) #(1 2 4)) " >>235 python
import string
A26 = set(string.ascii_uppercase)
print(A26.difference(set('BCDEFGHIJKLMNOPQRSTUVWXYZ')).pop()) #-> A
print(A26.difference(set('YIZFOADLMWCRUTGSVQKJEHNBP')).pop()) #-> X >>241
え?なんで?括弧なしで続けて書いたらそういう解釈にしかならんと思うが?
そうでないならその部分どう解釈するのが正解なの? >>235
AからZの文字コードの数値の総和から入力文字列の各文字の文字コードの総和を引けばいいね むしろプログラマの世界で数式を書くなら、
1/(2*y) だろうな。
1/2y と書けば、普通は、(1/2) * y だろ。
数学習った時も掛け算記号は省略できるとか習った覚えが。
あと、割り算と掛け算混ぜたときの結果は項の順番によらないかった覚えが。
寝る。
>>261
コード書いたわけじゃなくて普通の数式やがな
それをコードに直すのがプログラマ >>263
数式でも人が紙に書いたかのような表現が使えず1行に無理に押し込める形式にするのならそれなりの工夫が必要だ まず普通の人はあの表記を見ても迷わない
一京歩譲ったとして仮に迷ったとしても与えられた答えを代入すれば猿でも分かる
つまりいちゃもんつけてるのは猿未満
>>220
Ruby で、
ary = ( 1..4 ).to_a
# 直積・3重ループ
p ary.product( ary, ary ).select { |( x, y, z )|
Rational( 1, x ) + Rational( 1, 2 * y ) + Rational( 1, 3 * z ) == 4/3r }
#=> [[1, 2, 4], [1, 3, 2], [2, 1, 1]] >>263 >コード書いたわけじゃなくて普通の数式やがな
普通の数式ってどこの世界での普通なんだ? 普通の数式ならそんな書き方はしないからな。
1/2y を普通の数式として解釈すれば、(1/2) * y が普通の解釈だろ。 左から順に演算されるのが普通(と言うかルール)だからな。 左からやって普通は1割る2yだろ
普通の数式で1÷2yってあってそう解釈するか?
割る記号の変わりだろ/は
プログラムのコードじゃないぞ
一個目の1/xがないならまだわからんでもないけど
>>270 お前の普通の根拠を示してみろや。
記号が書かれてれば掛ける記号が略されてるとみなすのが普通
1/2y は1/2*y と等価 1割る2は、0.5 これが普通。 >>270 お前の異常なところは、2y が優先演算されると思い込んでいるところ。
そこが大きな間違い。 教養のない(1/2)派が暴れてて最高に笑えるわ
馬鹿は馬鹿らしく謙虚でいろよ
普通とかほざくゴミまで出てきたってことは一番最初の出題者はやっぱりサイコパスだろ
解釈の分れる書き方をワザとしてんだよ
>>273 だからお前の言う普通の文字式が書かれてるところを示してみろよ。
最も中学では、1/2のような書き方はしないから、そんな問題はないと思うが。
兎に角プログラミングスレで、
1/2x と書けば、(1/2)*x という解釈しかありえない。
もう一度 >>267 を見てこい。 ID:OSjRKT39 こいつ、仕事もできねえんだろうな
同情するわ……こいつの同僚にw
>>278
具体例も挙げてきちんと論証してるじゃん まあ理系なら数式見慣れてるし、数式だと 2x でセットと見るから
2x/3y を (2*x*y)/3 と解釈するアホはいないと思う
理系以外にも優しくするのはいいとして馬鹿に優しくする必要は無いだろ
無能な猿が思い上がるだけ
>>282
仕事もできねえ、馬鹿、アホという人格否定で自分を正しく見せようという
幼稚な人より100倍マシだと思いましたよ >>286
たとい俺より百万倍マシだったとしてもお前がクズな現実は変わらない >>284
一般的な例を挙げて論証する人を馬鹿だとは思わないなあ
むしろ相手の人格を貶めることばかりに終始してる君のほうが・・・ >>280 理系ならwolfram ( mathematica ) を知らないわけないだろ。
>>281 をよく見ろ。 世界中の数学者はこう計算するというのが数学の世界なんだぞ。
お前は世界中の数学者をアホ呼ばわりするのか? で、結局論証ってなんのこと?
どこに論理的な推論があったわけ。
>>293
一般的で具体的な例を上げて説明してたよ >>294
一般的で具体的な例を上げて説明することは「論証」とは言いません
そんな的はずれな事言ってたらヴィトゲンシュタインが泣きますよ >>297
立派な論証だよ
ウィトゲンシュタインもうなずいてるよ >>293 論証じゃなくて、wolfram やgoogle の計算の実証を挙げてるのに全くそんなのを無視しておいて何を今更。
なんにせよ、プログラマスレではプログラマとして動け。 問題としては落第。 wolframやgoogleでのレクシコンが今の議論に一体何の関係があるのだらうか!?
全くの荒唐無稽だと言っておきませうせうせう
>>300
一般的にどう解釈されるかを示す具体例として挙げられてるよ
どうして歴史的仮名遣いなのさ!? >>301
君はいい人そうだから強く生きていきませう >>302
どうして歴史的仮名遣いなの?
君の思う論証ってどういうもの?
他人の発言を的外れとまで言ったんだからきちんと説明していただきたい >>300 自分の論証はどこに有る? 例を出せと言ってるのに出せないんだろ? おいお前ら、俺たちのバックにはグーグルがいるんだぞ
物理などの世界では並置優先ルールが有る。
1/ab は、1(a*b) 1/2yは1/(2y)
しかし一般的なプログラミング(コンピュータ)の世界では、並置は存在しないから並置優先ルールもない。
ab は、a、b とは別変数となる。
プログラミングのお題としては、プログラミングルールに従った出し方にすべき。
1.出題者が複数の解釈のできる曖昧な書き方(1/2y)をした。
2.多くの回答者は曖昧さを理解した上で自然に取れる解釈(1/(2y))をした。
3.一部の回答者はプログラミングや数学的な記法の厳密な解釈として((1/2)y)であるべきとした。
4.3と3を煽る奴らのどうでもいい喧嘩←今ここ
お題をみてそれにあわせたコードをかくのがプログラミングだろ
お題は文章なり数式でプログラミングのルールにのっとる必要はないじゃん
表現が曖昧で複数にとれるようなものは出題者に確認するだけの話だと思うけど
ゴミみたいな書き方する出題者がそもそも悪いでしょ
そういうヤツは除外しなきゃ
叩いて叩いて叩きまくればいいんだよ
>>307
> 物理などの世界では並置優先ルールが有る。
そういうルールを知らなかった奴が引っ込みつかなくなってるだけでしょ >>308
> 2.多くの回答者は曖昧さを理解した上で自然に取れる解釈(1/(2y))をした。
多く?そもそも回答者がほとんどいないのでは?
それでもどちらかの解釈で回答した人は居るが、その回答はどちらの解釈が多かった? >>307
それならばそのようなルールで書くと断りを入れてから書くべきだな。 >>313 並置優先ルールがない世界に、並置優先ルールが有るものだと言う前提で問題を出せば混乱するに決まってる。
そんな仕様書を書いたら即座に首だろ。
(唯一の救いはこの場合答えがあるから、確認することはできたが、確認せずに回答した人がいることも忘れてはならない)
プログラムの世界は、1点の曇りもあってはならない。 曖昧さも糞も無いだろ
答えまで書かれてたんだからそれで確認するのが正常な頭脳の持ち主
数学できない阿呆が噛み付いてるだけ
惨めだからもうやめときな
単なる匿名掲示板で仕様書ガーとかw
バカにされて悔しいのはわかるけど流石にそろそろアキラメロン
お題:Hello, World!を二進数で出力せよ
>>320 Perl5
print map{sprintf'%b ',ord}split'','Hello, World!';
実行
~ $ perl 14_320.pl
1001000 1100101 1101100 1101100 1101111 101100 100000 1010111 1101111 1110010 1101100 1100100 100001 お題
x=1から始めて一度のステップで
・xに1を足す
・xを2倍する
のいずれかを行うことができます。
正の整数Nが与えられるので、
x=Nに到達するのに必要な最小ステップ数を求めなさい。
N=34
=> 6 (1 -> 2 -> 4 -> 8 -> 16 -> 17 -> 34)
N=1
=> 0
N=10000
=> 17
>>322
シフト回数と1足した回数調べりゃいいんじゃないの
10000 (10) = 10011100010000 (2)
34 (10) = 100010 (2) >>325
桃白白改めミスターポポ改めピラフ改めピッコロさんには少し難しかったかな >>320 Python
print( ['{:08b}'.format(ord(s) ) for s in 'Hello, World!' ] )
# ['01001000', '01100101', '01101100', '01101100', '01101111', '00101100', '00100000', '01010111', '01101111', '01110010', '01101100', '01100100', '00100001'] >>322 Ruby
f=->n{n.digits(2).sum+n.bit_length-2}
p f[34] # => 6
p f[1] # => 0
p f[10000] # => 17 # >>322 Python 取り敢えずオーソドックスに
def step(n):
for cnt , _ in enumerate( range(n ) ):
if n == 1 : break
n = n//2 if n%2 == 0 else n-1
return cnt
print(step(34)) #6
print(step(10000)) #17
print(step(1)) #0 >>322 Python >>328を真似して
f = lambda n: bin(n).count('1') + n.bit_length()-2
print(f(34)) #6
print(f(10000)) #17
print(f(1)) #0 >>322 Squeak Smalltalk
| fn |
fn := [:n | n bitCount + (n numberOfDigitsInBase: 2) - 2].
fn value: 34. "=> 6 "
fn value: 1. "=> 0 "
fn value: 10000. "=> 17 " >>322
以下みたいに、すべてのステップ数を記録する、表を作っていくのか?
0 step : 1
1 : 2
2 : 3, 4
3 : 4, 6 | 5, 8 => 4, 5, 6, 8
4 : 5, 8 | 6, 10 | 7, 12 | 9, 16 => 5, 6, 7, 8, 9, 10, 12, 16 表を作らなくても、これで良いのか
1. 偶数なら、2で割る
2. 奇数なら、1を引いてから、1へ行く
>>335
そいついつも人の話を聞かない奴だからスルーしとけばいいよ >>337 1足す2が3であることを証明しろと言うのか?
まあいいや、最小ステップは2倍が最大回数になればよいだけの話。 >>322
kotlinスクリプト
>>> fun f(n: Int) = println("N=$n\n=> ${n.toString(2).map { it - '0' + 1 }.sum() - 2}")
>>> f(34)
N=34
=> 6
>>> f(1)
N=1
=> 0
>>> f(10000)
N=10000
=> 17 >>322
Ruby で、
def f( n )
n_2 = n.to_s( 2 ) # 2進数
# 2進数の桁数 + 1の個数 - 2
n_2.length + n_2.count( "1" ) - 2
end
p [ 1, 34, 10_000 ].map { |n| f( n ) }
#=> [0, 6, 17] >>235 Io
f := method(s,
((65+90)*26/2 - s sum)asCharacter
)
Io> f("BCDEFGHIJKLMNOPQRSTUVWXYZ")
==> "A" 何かと思ったら'A'から'Z'の総和か、その求め方は草
お題:特定ドライブ配下の*.jpgファイルを削除し、そのjpgファイルが格納されていたフォルダも削除する
何にせよ良い子は、>>344 なんてお題は無視するように。
いろんな人間がいるのに、ファイルを削除とかディレクトリを削除とか言う問題は危険すぎる。
せめてrename で済ませるべき。
経験のある人間でも、テストでいきなり削除なんてしないぞ。 怖くてできるわけがない。
>>344 の問題は却下。 >>350
回答という形での投票行動がもっとも自然な見解なのでは? Ruby には、FileUtils::DryRun みたいに、
実際には実行されなくて、どうなるかだけを見るモードがある
PowerShell の、-WhatIf もそう
>>346
は、あちこちで、rm -rf /
を書いてる荒らしだから、実行しないように! >>352 dry run はいろんなツールにもあるけど、良い子の皆がそんな事に気付く訳ないじゃないか。
危険なものには近づかないのが一番。
>>344 は、単にアホな問題というだけ。 無視虫蒸し >>344
Linux や UNIX 系 OS で良く使われる find コマンドの場合は次のようにできる。
find '対象のディレクトリ' \( -type f -name '*.dir' -o -type d \) -delete
-delete が使えない find の場合は
find '対象のディレクトリ' -depth -type f -name '*.jpg' -exec rm {} \; -o -type d -exec rmdir {} \;
但し *.jpg 以外のファイルがあったら削除されないのでそのディレクトリの削除はできない。
Windows の場合でも WSL の Linux 環境か、Cygwin環境等では同じやり方が使える。
素の Windows だと find.exe という同名の全く違う動きをするコマンドがあるので同じやり方はできない。 >>352
あれだけ周りから荒らし認定されても全く態度を改めないお前が、他人を荒らしだなどとよく言えるな。 >>355
「jpegファイルが入っていたディレクトリの」削除になっていないですよ >>322
Haskellでオーソドックスに。
main = mapM_ (print.f) [1,34,10000,0]
f = length.f'
where
f' n | n < 1 = error "Please n > 0 number."
f' 1 = []
f' n | even n = n:f' (n `div` 2)
f' n = n:f' (n - 1)
Out:
0
6
17
Program error: Please n > 0 number. >>235
Haskellで正規表現知らん奴が。。。
import Data.List
main = mapM_ (print.f) ["BCDEFGHIJKLMNOPQRSTUVWXYZ", "YIZFOADLMWCRUTGSVQKJEHNBP"]
f = f' ['A'..'Z']
where
f' [x] _ = x
f' az (x:xs) = f' (delete x az) xs
Out:
'A'
'X' >>357
ああ。入ってなくても空だと消されるか。
じゃあもう一捻り必要だな。 お題
実行すると1から6までの数字のどれか1つを返すサイコロのプログラム
表示可能なら以下の文字列を使っても良い
⚀⚁⚂⚃⚄⚅
>>362 Ruby
def dice
n = [0, 0, 0, 0, 0, 0]
1000000.times do n[(0...6).to_a.sample] += 1 end
p n
n.rindex(n.max) + 1
end
puts dice お題: トランプのハートの1〜mとダイヤの1〜mの合計2m枚(1≦m≦9)を使って神経衰弱ゲームをするプレーヤーを実装し、n人のプレーヤーで神経衰弱ゲームをシミュレーションせよ。
カードは横一列に並べられる。最初は全て裏面でランダムな並びとする。
プレーヤーはカード番号の並びを文字列として読み取ることができる(裏面はゼロと見なす)。
>>362 Pharo/Squeak Smalltalk
#('⚀' '⚁' '⚂' '⚃' '⚄' '⚅') atRandom. "=> '⚁' " >>362
puts Time.now.sec % 6 + 1 >>368
出力例。
000000
プレーヤー1が開きました。
100200
不一致。閉じます。
000000
プレーヤー2が開きました。
110000
一致。プレーヤー2は計2枚獲得。
プレーヤー2が開きました。
110202
一致。プレーヤー2は計4枚獲得。
プレーヤー2が開きました。
113232
一致。プレーヤー2は計6枚獲得。
プレーヤー2の勝ち。 >>368
補足。文字列でも配列でもいい。
一枚ずつでも二枚ずつでもいい。
プレーヤーは >>362
Kotlin スクリプト
Unicode の DIE FACE-1 〜 6 を使う場合はこれ。
println((0x2680 + kotlin.random.Random.nextInt(6)).toChar())
ASCII の数字(所謂半角の数字)にしたい場合はこれ。
println(('0' + kotlin.random.Random.nextInt(6)).toChar())
漢数字にしたければこれ。(これにサイコロの文字を割り当てても良い)
println("一二三四五六"[kotlin.random.Random.nextInt(6)]) あ、ASCII の場合は何も考えずに1足してただ出力すれば良いだけだった。
まあいか。
>>362 なんでそんなの出すんだよ。、問題になってないじゃないか。
解答 ⚄ ダイスってトライグラフじゃねーか!!
色々変換かけないと出せなくて苦しい。@C++。
ちなみにトライグラフの仕様は削除されました。
>>362 R
cat(sample(1:6,1)) >>362 Python
import random
for _ in range(10) : print(random.choice("⚀⚁⚂⚃⚄⚅"), end=' ')
# ⚅ ⚅ ⚁ ⚃ ⚀ ⚃ ⚁ ⚄ ⚂ ⚀ 神経衰弱を作っていたが、VC2019が仮想関数をうまく扱ってくれない感じで大爆死。
>>384 前の方からの VC++ の人かな?
なんでそんなに苦労してるのかが理解できない。
使った事ないから知らないけど。
でも、貼るんだったらzip は辞めようよ。 怖くて開けない。 ソースだけなら動かなくてもideon に張り付ければ良いじゃん。 >>385
ソースが2分割されててまとめたほうがいいかと思ったけど。
ZIPって脆弱性あるの?
張りなおすわ。 お題:
a, b, c, d, e, f, g, h, i, j, x は正の整数で
a^3 - b^3 = c^3 - d^3 = e^3 - f^3 = g^3 - h^3 = i^3 - j^3 = x
を満たす.
条件を満たす最小x と対応する a, b, c, d, e, f, g, h, i, j を求めよ
NervousBreakdown って名前はユーモアでそうしてるだけ?
カードゲームの神経衰弱って、(一部の)日本人しか連想できなさそうな名前だけど
>>391
グーグルで翻訳かけたらそれが出たので脳死で採用。
英語下手なんだ。 ゲーム名とかは翻訳に掛けるんじゃなくてwikipediaとかで調べればいいと思うよw
>>393
concentration または memory ではないかな。 >>395
ウィキペディアには、前者が書いてあった。
ローカルの直しておくかな。
イデオンは編集可能期限が過ぎてる。 >>388
条件を追加します、a, b, c, d, e, f, g, h, i, j は互いに異なる正の整数です
試算では
x = 1412774811
になりました >>398
どうして、あるいはどういう点によって、これは宿題だと思ったのですか? お題: 入力からC言語の整数リテラルもしくは浮動小数点数リテラルを読み取り、型の種類、実際の値の十進表現、そして型のバイトサイズを出力するプログラム。
入力が不正な場合はERRORと出力せよ。
前後の空白は読み飛ばすこと。
>>397
数字が異なるモノであることをチェックするのが面倒だなぁ。字数多くて。 >>388,397
俺も適当に回したもので1412774811が出たが、
それが正しいかどうか調べるのは21701までの総当たりで1412774811より小さい条件を満たすものが無けりゃええんよな?
21702^3 - 21701^3が1412865307になって1412774811を超えるけーの >>368 Squeak/Pharo Smalltalk
| m scores turn cards mask print |
m := 3.
scores := #(0 0).
cards := ((1 to: m), (1 to: m)) shuffled.
Transcript open; clear.
(print := [:val | Transcript cr; show: val]) value: cards * (mask := Array new: m*2 withAll: 0).
turn := 1.
[mask includes: 0] whileTrue: [
| player choice prevMask pair |
player := turn - 1 \\ 2 + 1.
choice := (mask negated + 1 * (1 to: m * 2) copyWithout: 0) shuffled first: 2.
prevMask := mask copy.
pair := choice collect: [:pos | mask at: pos put: 1. cards at: pos].
print value: 'プレーヤー', player asString, 'が開きました。'; value: cards * mask.
pair asSet size caseOf: {
[2] -> [print value: '不一致。閉じます。'; value: (mask := prevMask) * cards. turn := turn + 1].
[1] -> [print value: ('一致。プレーヤー{1}は計{2}枚獲得。' format: {player. scores at: player incrementBy: 2})]
}
].
print value: (scores asSet size = 1
ifTrue: ['引き分け。']
ifFalse: ['プレーヤー', (scores indexOf: scores max) asString, 'の勝ち。']) >>397 >>388
お、なんか簡単に出来なさそうだから、やってみるかな。 たまたま記号計算の勉強中だから、やってみるがそっちの勉強の方が難しすぎて答えまでたどり着けるかどうかわからんが、良い練習問題になる。 お題: あなたは完全予約制の映画館の運営責任者だ。映画館にある10x10席について予約アプリを作ることになった。
仕様:
2桁の座席番号で空いてる席を予約できる。
「おまかせ」ボタンで席を決めてくれる。
席が決まったら、整理券を発券する。
「印刷」ボタンで予約状況を印刷できる。
「売上」ボタンで売上を計算できる。
>>402
問題文が悪いようですね、ごめんなさい
言いたいことは
任意の正の整数 a, b, の三乗差 a^3 - b^3 で表される整数について、これが 5 通りの三乗差で表現できる最小の整数を求めよ
のつもりだったのです
4通りの三乗差で表現できる最小の数は
165^3-93^3=162^3-111^3=178^3-63^3=678^3-3^3=4118877
です。
>>403
最悪 (10進4桁)^3 でなんとかなると思っていましたが… >>409
こちらで書いた試行プログラムにバグが見つかりました
4通りの三乗差で表現できる最小数は
165^3-72^3=162^3-51^3=178^3-115^3=678^3-675^3=4118877
20年ぶりにバグ出ししてしまった…てへぺろ いっっっつも問題修正してるじゃん。
雑なんだよ。センスも能力も無いのでは?
>>411
はい、能力もセンスもありませんので、こちらで胸を借りようかと(宿題スレもあわせて)10年くらい書き続けてこの様だったりするのです… >>362 なでしこ
(6 の 乱数) + 1 を 表示 プログラム板にキチガイ降臨中!botに一晩も反応する異常さ
一般人(学校恩師)に殺害予告をしているのでスレ建て通報してください。
http://2chb.net/r/tech/1559872586/
142 名前:a4 ◆700L1Efzuv 投稿日:2019/06/18(火) 05:29:55 ID://qVkzO
>>141
名古屋の人な 俺ね、君の問題を大橋先生と混ぜないことにする。つまりね、
片桐孝洋のことをボコろうと思う。普通に顎の骨を折る。これくらいで警察来るか?
一般市民とかさ、普通にさ、俺らの秘密なんだけどさ、日本人なんて復活ねーから。 >>417 Squeak/Pharo Smalltalk
1000 / 999 squared asScaledDecimal: 300
"=> 0.001002003004005006007008009010
011012013014015016017018019020
<snip>
081082083084085086087088089090
091092093094095096097098099100s300 " >>417
Kotlin スクリプト
こういうのアリか?
println((1..100).joinToString()) >>417
pythonなら超簡単に書けそう。
俺は書かないけど。 >>417 そもそもなんのためにこんな小汚いコーディングしてるのか理解不能。 >>417 の出題者の目的はなんだ?
Python for loop 無しというルールがわからん
これはループしてないだろ?
print( [i for i in range(1,101) ] ) パズルとか頓智とかゴルフとかそういう系統でしょ
あなたにはおそらく今後5年間は理解できそうにないからわざわざ首を突っ込まなくていいんじゃない?
それとそのコードだとforを使ってることになるからダメだよ
「なんでダメなの?」と聞かれてもその手の遊びを本当に理解できない物体がいるのでコミュニケーション不可能だから答える必要はない
printで1から100まで出力したらダメですかw
>>424
別にいいけど、受けないとわかってるギャグを言う時と同じくらい恥ずかしいと感じるんじゃないかな >>423 ま、いいけどさ、for という言葉が嫌いなら
>>417 Python
print(list(range(1,101)))
結果
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100] >>397
2分46秒で答えが出た。このくらいで答えが出るはいいお題。 >>427 何なら良いんだよ。まさかgoto 文以外はダメだとか言わないだろうな。
もう一度聞くが、for と range 以外なら良いのか? >>417 >>427 >>419 kotlin と、>>421 commonLisp もダメなんだな?
とにかく自動生成される数列は許さないんだろ?
かつループも、再帰コールも、goto も使うなと。
やーめた。 >>417 Perl5
print "@{[1..100]}\n";
実行結果
$ perl 14_417.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
89 90 91 92 93 94 95 96 97 98 99 100 言い訳するんやったら、ループじゃなくて、掛け算です。
と、言ってみる。
>>431
ダメってことはないけど「お!」って思わせる意外さや面白さはないよね?
>>417は「およそ誰もが最初に思いつく方法(つまりループ等)以外で
1から100までを表示するコードをひねくり出してみてください」
という知性やユーモアを問うゲーム クソ問出しといて面白い回答でオレ様を感心させろとか言う厚顔無恥なクズ
だから言ったじゃん
その手のユーモアを全く理解できない物体がいて、そいつらとはコミュニケーション不可能だ、って
わざわざ首を突っ込んできてクソ呼ばわり、害悪そのものだ
「理解不可能」「出題者の目的」「ルールが分からん」と三拍子揃ってるからコミュニケーション不可能の異質な生物だと思った方がいい
for rangeのを出して来て「ループしてないだろ?」と聞く時点でもはやコミュニケーション不可能、価値感が根本から違う
表面だけは人間の姿形をしてるが中身は全然違う物体で、そいつらとはコミュニケーションや意志疎通は出来ない
絶望的に話が合わないし価値感も全く違うので、人語を解するコミュニケーション不可能な人型生物、程度に見ておいた方がいい
>>417 javascript
console.log(Array.from({length:100},(_,i)=>i+1).join`\n`) >>388
a^n-b^nの因数分解を眺めていたらnが素数の時はa-bの項しかないようだ。そして項数が素数になっている。 >>433
そのコードを見て1から100までを表示するプログラムだと
仕様を解釈するのは困難、
何のためにコードを書いてるのか意義が…
ドカタから脱却しなよ >>417 phi
print(oneToHundredSeparatedBySpace()) >>417 PHP
1
0999999999988888888887777777777666666666655555555554444444444333333333322222222221111111111
0987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654354321
縦書きなので右から左へ。 >>450
何のためにって、お題に対して面白い解き方をするコードを挙げているのだから、コードから仕様を解釈するのが困難だなんて指摘は的外れだろうよ >>417
スクリプトか、それに準ずる文法持ってる言語有利やな。
Haskell
main = print [1..100]
それは1ー100のリストやろ言うなら
main = mapM print [1..100]
とか改行無しなら
main = mapM (putStr.show) [1..100]
“,”で区切れデコ助野郎言うなら
main = (putStrLn.init.concat.map ((++ ",").show)) [1..100] >>450
書いた人間だけど。
5個表示するのが5個あったら25個表示出来て、それを4個並べて100個!
完璧な作戦じゃないですか!!!!遂行するのが不可能ということもない。
5*5*4=100!! >>417 はループ禁止とか言いながら、プログラムの外でループしてるだけのプログラムじゃないか。
プログラムにループかなくて繰り返しなんてあり得ない事がわからないバカなんだろうな。 そういう意味ではソフトから見て最小単位であるアセンブラのブロック転送命令もマイクロコードでループしてるわね。
と言う訳で、解なしが正解かな?
あからさまなループ禁止でループ完全な禁止じゃないでしょそもそも
こんなドカタの力仕事の訓練しても何にもならない、こんなので楽しめるなんて ドM だろ。
綺麗なプログラムは許さない。できるだけ小汚いプログラムしかダメ。 いかに小汚くプログラム出来るかのコンテストです。
>>463 屁理屈だな。map や range などは明らかなループじゃないだろ。 明らかなループってなんだ?
1行で書かれた綺麗なプログラムは許しませんと言えよ。 人の持つ適度さっていうのを裁量してるともとれるし。
mapだめって言ってるのが出題者どうかもわかんねえじゃん
あと解きたくないなら解きたくないでいいしほっとけばいい
曖昧だと思うなら質問すればいい
あと訓練するためのスレでもない
>>466 出題者は聞いたって答えないじゃんか。 ま、クソ問題でしかない。 >>457
あからさまの定義は何?
map内部でループ使ってるからダメってなら、printf内部でループ使ってたらダメって言ってるのと一緒じゃん。
Haskell
main = sequence_ [print x | x <- [1..100]] >>471 1行で書けるものは嫌いなんだってさ。
[1..100] なんて大っ嫌いだってさ。 自動生成される数字は全て反則だって。 一応、どの辺がプリミティブかっていうのはあると思うぞ。
オブジェクト指向と手続き型と関数型で均質なプリミティブとはいったい・・・。
ごごご・・・...,,,
>>474 よう解らんけど、それらはループの塊らしいよ。
要はプログラムの中で完結してる解は、全てループが入ってるはず。 プログラムの外でループさせろという趣旨の問題じゃないのかな?
>>428
試算プログラムでは40秒でした
個人的には ideone で実行結果まで出るくらいには高速化したいと思っています、ある程度高速化した上でのこの要求はかなり厳しいです >>475
ん、そんなことは誰もいっとらんとおもうけど?
shiroさんの解、良いじゃないか!
rangeはさておき、rangeをmapしてたらそれはもうループ処理だろう… お題:犬作りましょう。(自由回答)
サンプル:https://ideone.com/jimp7B
人口無能・ドッグを作りましょう。
どこまで作りこむかはあなた次第。
なるべくビジュアライズして見せられるようにすると高得点です。
おひとついかがですか? >>417 JavaScript
var n=1,t=setInterval(function(){console.log(n++);if(n>100){clearInterval(t);}},0);
>>451をJavaScriptで書き換えてみたけど明らかにループでしょこれ >>474 がループだとか難癖つけてる土方は
このコードが何やってんのか理解出来てんの? >>481 出題者がループの定義をしていないんだから解らんよ。
format もループといえばループだろ。 繰り返しが入ってるものは全てループ。 いやいやformatはループじゃないだろ、頭湧いてるのか
出題者か外野か知らないけど、ループの定義に拘ってこれはループだとかいうのはほっとけばいいんじゃないか?
そいつらの解釈なんか気にするより、他の誰かが見て感心や納得させられるような物を思い付いたら挙げてみた方が面白い。
>>483
やっていることを理解できているかを問われているのにそれじゃ答えになってないよ
それともformatしかわからなかったという敗北宣言? >>428
制約論理プログラムやデーモン型ソルバー使うと短く書けて面白い。
QR = (CSint **)malloc(STP * sizeof(CSint *));
for(i = 0; i < STP; i++){
QR[i] = cs_createCSint(1, DMIN);
}
xcost = cs_createCSint(1, XMAX);
CSint *sub[STP/2], *add[STP/2], *add1[STP/2];
for(i = 0; i < STP/2; i++) {
sub[i] = cs_Sub(QR[2*i], QR[2*i+1]);
add[i] = cs_Add(QR[2*i], QR[2*i+1]);
add1[i] = cs_Sub(cs_Mul(add[i], add[i]), cs_Mul(QR[2*i], QR[2*i+1]));
cs_Eq(cs_Mul(sub[i], add1[i]), xcost);
cs_GT(sub[i], 0);
}
for(i = 0; i < STP/2 - 1; i++) {
cs_Gt(sub[i], sub[i+1]);
cs_Lt(add1[i], add1[i+1]);
}
cs_AllNeq(&QR[0], STP);
cs_minimize(&QR[0], STP, cs_findFreeVarNbElements, xcost, cost_printSolution); >>417
書き込み制限で途中改行入れたが、もうこれが正解で良いんじゃね?
prinft("1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 "
"51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100"); 写経のように一文字一文字手で入力する事が大切なのです。
>>417
再帰、ループ、ループ代わりに使う関数使用禁止だと、
副作用前提なのでファイルやGUI部品(テキストボックスなど)とやり取りするしかない。
Haskell
import System.Exit
import System.Process
-- Windows ver. is String "notloop"(compile source file "notloop.hs)
main = f >> system "./notloop"
f = readFile "count.txt" >>= f'
where
f' "101" = exitWith ExitSuccess
f' n | n == "1\n" = putStr n >> wf n
f' n = putStrLn n >> wf n
wf = writeFile "count.txt".show.(+1).read
ただ、そうなると外と内で相互再帰してるみたいな感覚を覚える。
main = f1 1
f1 101 = return ()
f1 n = print n >> f2 (n + 1)
f2 n = print n >> f1 (n + 1) #!/bin/sh
echo '1から100まで入力してください。'
read n
echo $n
>>417
屁理屈ではあるが、自分自身を呼び出すのでは無く、
別の関数の引数に渡しているので厳密には再帰では無い。
かと言って相互再帰でも無い。
Haskell
main = f 1
f = fa f
fa _ 101 = return ()
fa fb n = print n >> fb (n + 1) >>498
何にしてもインクリメントしてる時点でループ的な繰り返しを期待しているわけだから
まあ負けだよね(負けでも面白くはできる。為念) >>500
>>417のネタバレ見ても6個中5個はインクリメントかデクリメント使ってるんだが。。。
・再帰は使ってない
・関数faも、fa (print.even) 1とすると
1
True(2は偶数なのでTrue)
と表示して終わるだけなので、それ単体ではmapの様なループの代わりの関数では無い
・ループ命令はHaskellにそもそも無い
十分条件は充してる。 必死だなでも負けは負けだそして何より面白さが皆無なのが致命的
厳密には再帰ではないが実質再帰と同じ効果を狙ってんだろ
それ以前に自身も屁理屈だといっちゃってる時点で、語るに落ちてるよ
>>417
#!/bin/sh
echo '1から100まで' お題:プログラミングのお題が与えられるので、それに対する解答を回答するプログラ厶を作りなさい。
>>512 Perl5
%h = ('プログラミングのお題' => 'それに対する解答');
while (<>) {
chomp;
$a = $h{$_};
print $a ? "$a\n" : "しらんがな…(´・ω・`)ショボーン\n";
}
実行例
$ echo プログラミングのお題 | perl 14_512.pl
それに対する解答
~ $ echo たわけ | perl 14_512.pl
しらんがな…(´・ω・`)ショボーン
~ $ echo たいがいにせいよ | perl 14_512.pl
しらんがな…(´・ω・`)ショボーン
~ $ (出題者側、回答者側のいずれに問題があるにせよ)
題意が汲み取れずくだらないお題だと思うのなら
回答せずにスルーすればいいやんというのがここのルール
回答した以上は特に題意を汲み取っていない的外れな回答の場合、
相応の批判にさらされることはある程度覚悟しないと
>>514 出題者が質問に答えずに、出題の意味も説明できずに罵声を浴びせるだけと言う態度は問題だと思うけどな。 出題者かどうかわからんのが問題だしトリでもつけとけばいいんちゃう
>>516
「ひげダンス」と聞いて調べずすぐにわかる人がここに何人いるかなあ・・・ >>507>>508
「このはし渡るべからず」を見た時の一休さんの気持ちが少しわかった。 >>417
#pragma INTERRUPT int00
static int i = 0;
void int00(void)
{
if( i <= 100 ){
printf("%d\n", i++ );
}
}
あとは割り込みのテーブルに登録するだけ >>514
> 回答せずにスルーすればいいやんというのがここのルール
勝手にルールを作るな。 >>524
基本的なルールも知らん新参者はしばらくロムってろとw part6くらいからこのスレ見てるけどそんな不文律知らんぞ
>>417
数値に(+1)の代わりに次の値を求めるsuccに変えるだけじゃインクリメントと同じになるので、
文字列でインクリメント相当の処理を実現してみた。
(succ 1 = 2, succ 'a' = 'b', succ False = True)
リストが全部'9'か見るのにand関数使った方が行数減らせるが、
and関数も再帰と見做せるので使わなかった。
('9'と同じ数だけ'0'を用意する処理も、リスト内包表記やlength関数が再帰やループに当たる)
Haskell
main = f "1"
f = fa f
― f n = fa f n を部分適用で見掛け上の変数を減らした
fa _ "101" = return ()
fa fb "9" = putStrLn "9" >> fb "10"
fa fb "99" = putStrLn "99" >> fb "100"
fa fb "100" = putStrLn "100" >> fb "101"
fa fb [x,'9'] = putStrLn [x,'9'] >> fb [succ x,'0']
fa fb [x,y] = putStrLn [x,y] >> fb [x,succ y]
fa fb [y] = putStrLn [y] >> fb [succ y] >>417
bb=1;echo $bb >/tmp/gg; watch -n 0.5 "bb=\`cat /tmp/gg\`; echo \$bb; if [ \$bb -eq 100 ]; then exit; fi; bb=\$((bb+1)); echo \$bb >/tmp/gg; " >>527
では君はいままで自分がわからない問題が出題されたときは
問題にケチをつけてたのかね? そういうのやめてくれないかね
ちなみに僕はPart0のころからいるいわばこのスレの主だ >>531 自分で無視しろと言っておいて人の投稿に難癖つけるのも同じだろ。 無視してろよ。 >>532
同じじゃないよ
何でもかんでも一緒にするんじゃない
ケツを出せお尻ペンペンだ! 議論を整理しよう
主の意見
・問題がわからなかったら問題が悪いと言うんじゃなくて無視しよう
木偶の坊の回答者の意見
・問題がわからなかったら問題に文句言うんだ <= これがダメ
>>531
桃白白改めミスターポポ改めピラフ改めピッコロさん、いい加減にしろ >>534 問題が解らなければ出題者に聞くのがまず第一だろ。 そして出題者は質問に答える義務がある。 >>537
じゃあこれはあからさま?
var n=1,t=setInterval(()=>{if(n<=100){console.log(n);n++;}else{clearInterval(t);}},0); >>540 どうでもいいんじゃない? 自分がこれで良いと思えば良いんだよ。
誰にもあからさまと言う基準は作れない。 プログラムの中のループと言えばそうなるけどな。
ただ、サンプルの中でもイベントを使う方法は載ってたからOK なんじゃないのかな。
もうどうでも良いよ。 >>538
あからさまではないんや!!
>>540
それもあからさまにループしてない良いコードと言えます >>539
義務なんてない
会話の裁量はケースバイケースや >>542 何で出題者でもないお前が仕切ってるんだよ。
それともお前が出題者? 全部のコードをいちいち見てないし、二番煎じということを指摘するには十分だろ
>>545
桃白白改めミスターポポ改めピラフ改めピッコロさん、いい加減にしろ ID:PuD19qMM は多分クソみたいな出題してボロカスに叩かれたことがあるんでしょ
叩かれたこと無いって多分レスすると思うけど、きっとあるんでしょ
>>531
> ちなみに僕はPart0のころからいるいわばこのスレの主だ
明記しとけ
つかスレの主ちがうじゃん お題
1) √2 を小数点以下 1000 桁算出せよ
2) n ∈Z, 1 <= n <= 100 を与えたとき√n を小数点以下1000 桁算出せよ
>>555 Squeak Smalltalk
(PolygonMorph
shapeFromPen: [:pen |
| factor |
factor := Float pi / 100.
pen place: 0@0.
0 to: 200 do: [:x | pen goto: x @ ((x * factor) sin / factor)]]
color: Color transparent
borderWidth: 2
borderColor: Color red) makeOpen; position: Display center; openInWorld >>557 Pharo/Squeak Smalltalk
| sqrt |
sqrt := [:n :m |
| a b nDigits intDigits str |
a := 5 * n. b := 5.
nDigits := m + (intDigits := (n sqrt log + 1) asInteger )+ 1.
[:exit | [
a >= b ifTrue: [a := a - b. b := b + 10] ifFalse: [
b log > nDigits ifTrue: [exit value] ifFalse: [
a := a * 100. b := b // 10 * 100 + (b \\ 10)
]
]
] repeat] valueWithExit.
((str := b asString) first: intDigits), '.', ((str allButFirst: intDigits) first: m)
].
((1 to: 100) collect: [:n | n -> ((sqrt value: n value: 1000) contractTo: 30)]) asStringWithCr
"=> 1->'1.000000000000...0000000000000'
2->'1.414213562373...8229518488472'
3->'1.732050807568...8363954959381'
4->'2.000000000000...0000000000000'
5->'2.236067977499...0407072278724'
6->'2.449489742783...7009535324726'
7->'2.645751311064...4698120004300'
<snip>
97->'9.848857801796...5854929396030'
98->'9.899494936611...7606629419304'
99->'9.949874371066...6373124778344'
100->'10.00000000000...0000000000000' " >>553 あのさ、何か言いたいのはわかるけど、リンクくらいまともに貼ろうよ、
カンマで区切られたスレなんて俺のブラウザでは辿れないし、リンク先のページもどれがなんなのかわからないし、自分が勝手に思ってても人には伝わらないよ。
よくそんなのでプログラムの世界で生きてるね。 クビにならないことを祈るよ。 >>557
bc
scale=1000
sqrt(2)
for (n = 1; n <= 100; n++) sqrt(n) >>555 Python sympy
from sympy import Symbol, sin , plot
x = Symbol('x')
plot(sin(x),(x,0,10)) >>555 Python numpy , matplotlib
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
こっちの方が良いね
>>555
C++で書いてみたよ。
画像生成は自作コード。
面クラス作ってwindows bitmap 用に書き込みした。
趣味で色キチにしてある。 >>555
ChromeのURLバーに叩き込む
javascript:document.innerHTML='<svg><path d="M0 50 C 40 10 60 10 100 50 C 140 90 160 90 200 50 Z">'
スクショ
だんだん難しくなるよ。
お題: 8の字曲線を描画せよ。
お題: ベルトコンベヤで左から右へチーズケーキが不定期に断続的に供給される。Aさん、Bさん、Cさんは右から順番にチーズケーキを食べる。
ただし、AさんはBさんより食べる速度が早い。BさんはCさんより食べる速度が早い。お腹一杯になるとしばらく食べられない。
これをマルチスレッドで再現せよ。
>>570 Squeak Smalltalk
(PolygonMorph
shapeFromPen: [:pen |
| lemniscate factor |
lemniscate := [:θ | θ cos / (1 + θ sin squared) @ (θ sin * θ cos / (1 + θ sin squared))].
factor := 100.
pen up.
0 to: 360 do: [:deg | pen goto: (lemniscate value: deg degreesToRadians) * factor; down]]
color: Color transparent
borderWidth: 2
borderColor: Color red) position: Display center; openInWorld
"=>
" お題: あなたは宇宙時代の靴屋さんだ。宇宙人の足底の形状データが二次元多角形ベクトルデータとして与えられる。多角形が円に収まるように円形の靴の底を設計せよ。
>>561
>自分が勝手に思ってても人には伝わらないよ。
ほう、私の記述が不十分というわけですか?
しかし、
>カンマで区切られたスレなんて俺のブラウザでは辿れないし
これは特に「アンカー」というのですよ。「アンカー」、この単語をご存知なかったのですか?
>カンマで区切られたスレなんて俺のブラウザでは辿れないし
私の専用ブラウザでは十分にたどれますよ、おま環でしょう、おま環、おま環(爆笑)
>リンク先のページもどれがなんなのかわからないし、
QZ 専用スレのことですか
そもそも専用スレを持っているということ自体が特筆に値するでしょう
あなたも専用スレを作ってみたらいい、一発で削除されますよ
それに、そこでは私は、私が何を目的に何を書いたのか一目瞭然ですね
必要にして十分とはまさにこのことでしょう
過去ログはお布施をすれば自由に取り込めます、おま環、おま環(爆笑)
>よくそんなのでプログラムの世界で生きてるね。 クビにならないことを祈るよ。
あなたが5ch で不自由な制約のもとにあるのはよくわかりました、ひとことでいってお布施が足りない、まずはお布施をすることですね
私は職業プログラマでないので、すでにプログラムの世界ではクビになっています、ついでに現在の職業もクビになりそうです…いや、ラプラス変換の部分分数展開の計算が合わなくて苦労しているのですよ
部分分数展開については、近いうちにこのスレのお題にしますよ、乞うご期待! >>570 Python sympy
from sympy import symbols , sin
from sympy.plotting import plot_parametric
t = symbols('t')
x=sin(t); y=sin(2*t)
p = plot_parametric(x, y, autoscale=True, title='8 Graph', show=False)
p.show()
お題: 辞書のように頭文字を何文字か入力すると該当する単語の意味を調べられるようなシステムのことを「辞書型エキスパートシステム」と言います。
あなたの得意分野に関する辞書型エキスパートシステムを作りなさい。
例) HTML辞書システム
>>577
お?リサージュ使ったのか、やるなお主。 面白いシューティングゲーム作るなら、数式とグラフの知識は必須だからな。
x→yという対応によるx-yグラフがあれば、
時刻t→(x, y)という対応によるグラフもある。多分高校で習うから安心しろ。
>>576 やはり思った通りの人物像だったな。 自分の勝手な思い込みで人に伝わると思ってる。
そりゃどんな所に勤めても長続きしないだろうな。 相手の事を思いながら会話しないとダメなんだよ。
自分は何も悪くない、悪いのは相手だと言うのが最大の欠点。 多分病気だと思うから一度病院に行ってみたら?
ラプラス変換なんて持ち出せば相手は黙るだろうとか思ってる馬鹿さ加減。
あんな簡単な物で躓いてるのは多分高校の数学で落ちこぼれてたんだろうな。 いや中学の算数が解っていないのかも。
計算を楽にするためにラプラス変換があるのに。 トリップ付けてる人にまともな人なんているわけがないじゃないか
ギリギリ8?これ、屁理屈だわー。 >>585 悪かった、本物とはさすがに思わなかった。 お大事に。
むしろこんな所にも出入りしない方が良いと思うけどな。
所で今 5ch サーバーがおかしいね。 >>590
浅はかな理解ですね、そもそもここに出入りしている時点で重大な問題を孕んでいることに気がつかないとでもいうのですか? あーQZはまともに相手しないで放置すればいいよ
こいつ複素解析も知らない癖に留数定理がどうのこうのとか騙ってて
突っ込まれると「全然知りません」と開き直るような奴だからな
それに日本人じゃないらしい
>>592
懐かしいな
以前、複素数にまで拡張された指数関数が一般に多価関数になるということが解らなくて
わざわざ他の板まで行って醜態を晒してたなこいつ >>592
それは記憶違いでは?
当時「計算練習として複素関数論をやればいいのでは?」という意見に対して「留数定理は忘れた」と発言しただけですよ、実際もう忘れましたし、それにしても昔のことをよく覚えていますよね、この執念はいったいなんなんでしょうか?
>>594
このスレのお題「e^z = -1 たる z ∈C を求めよ」にてずいぶんと勉強させていただきましたが、それもこのスレだけの話で、わざわざ他のスレや他の板に行った覚えはありませんね、証拠を出せますか?
>>593
ラプラス変換の教科書に当時メモ書きした式変形ですら、もう自分でも理解できなくなっているのは認めましょう… >>595
確か数学板で聞いてただろお前
そのリンクをこのスレに貼ってたはずだから気になるなら自分で調べろ お題
7月中の、3人の空いている日のリストがあります。
3人の内、2人以上が空いている日と、名前を求めよ
A
2019/07/05
2019/07/10
2019/07/15
2019/07/20
B
2019/07/08
2019/07/10
2019/07/20
C
2019/07/15
2019/07/20
2019/07/25
書式は、どうでも良い。
こんな感じで
2019/07/10 A B
2019/07/10, A, B
Hash使うとすごく簡単にできると思うが、Hashへの値のセットをプログラム中に書こうとすると、それがそのまま答えになってしまいそうな予感w
>>573 Python3.6 ideonのpython は3.5で動かないが、下の方に出力サンプルを張り付けてあるからそれを見てください。
https://ideone.com/JqcYMA
出力サンプルを少しだけここに張り付け
開店時間= 0.0
Aの取皿開始 speed=0.7 kosu=0 時刻は 0.0
Bの取皿開始 speed=1.0 kosu=0 時刻は 0.01
Cの取皿開始 speed=1.4 kosu=0 時刻は 0.02
★★マグロ が出来た時刻=0.03 作成間隔 t=0.30
Cがマグロを食った 作成時刻=0.03
★★カッパ が出来た時刻=0.33 作成間隔 t=0.10
Aがカッパを食った 作成時刻=0.33
★★ウニ が出来た時刻=0.43 作成間隔 t=0.10
★★上トロ が出来た時刻=0.53 作成間隔 t=0.10
Cがウニを食った 作成時刻=0.43
Cが満腹 休むよ 時刻=0.63
Aが上トロを食った 作成時刻=0.53
★★エンガワ が出来た時刻=0.64 作成間隔 t=0.10
★★マグロ が出来た時刻=0.74 作成間隔 t=0.10
Bがエンガワを食った 作成時刻=0.64
Bがマグロを食った 作成時刻=0.74
★★マグロ が出来た時刻=0.74 作成間隔 t=0.10
Bがエンガワを食った 作成時刻=0.64Bがマグロを食った 作成時刻=0.74
★★カッパ が出来た時刻=0.84 作成間隔 t=0.10
★★ウニ が出来た時刻=0.94 作成間隔 t=0.10
★★上トロ が出来た時刻=1.04 作成間隔 t=0.10
Aの取皿開始 speed=0.7 kosu=1 時刻は 1.11
Aがカッパを食った 作成時刻=0.84
★★エンガワ >>600 Pharo/Squeak Smalltalk
| data dic |
data := {
#A -> #('2019/07/05' '2019/07/10' '2019/07/15' '2019/07/20').
#B -> #('2019/07/08' '2019/07/10' '2019/07/20').
#C -> #('2019/07/15' '2019/07/20' '2019/07/25')
}.
dic := Dictionary new.
data do: [:assoc |
assoc value do: [:date | (dic at: date ifAbsentPut: [OrderedCollection new]) add: assoc key].
].
dic associations sort
select: [:assoc | assoc value size >= 2]
thenCollect: [:assoc | assoc value: assoc value asArray]
"=> {'2019/07/10'->#(#A #B) . '2019/07/15'->#(#A #C) . '2019/07/20'->#(#A #B #C)} " >>575
テストデータ(各自で用意すること): 長方形、星形、ハート形 #!/usr/bin/env perl
use List::MoreUtils;
@A = qw( 2019/07/05 2019/07/10 2019/07/15 2019/07/20);
%A = map {$_, 1} @A;
@B = qw( 2019/07/08 2019/07/10 2019/07/20);
%B = map {$_, 1} @B;
@C = qw( 2019/07/15 2019/07/20 2019/07/25);
%C = map {$_, 1} @C;
SEARCH:
for ( List::MoreUtils::uniq (@A, @B, @C) ){
if ($A{$_} && $B{$_} && $C{$_}){
print "everyone is free at $_\n";
next SEARCH;
}
if ($A{$_} && $B{$_} ){
print "A and B is free at $_\n";
}
if ($B{$_} && $C{$_}){
print "B and C is free at $_\n";
}
if ($A{$_} && $C{$_}){
print "A and C is free at $_\n";
}
}
>>605
やはり辞書型がくみこまれてる言語は綺麗だね
数が増えたときでも問題ないかんじ ハート型って多角形だったのかー
こらノーベル賞ものの発見だな!
>>600
>607はあまりにも酷かったので、修正
#!/usr/bin/env perl
use List::MoreUtils;
@A = qw( 2019/07/05 2019/07/10 2019/07/15 2019/07/20 );
%A = map {$_, A} @A;
@B = qw( 2019/07/08 2019/07/10 2019/07/20 );
%B = map {$_, B} @B;
@C = qw( 2019/07/15 2019/07/20 2019/07/25 );
%C = map {$_, C} @C;
for $date ( List::MoreUtils::uniq (@A, @B, @C) ){
for $someone_is_free_at (\%A, \%B, \%C){
push(@free_men, $$someone_is_free_at{$date}) if $$someone_is_free_at{$date};
}
print "@free_men are free at $date\n" if (@free_men > 1);
@free_men = ();
}
出力
A B are free at 2019/07/10
A C are free at 2019/07/15
A B C are free at 2019/07/20 ユーチューブのおかげで誰でも動画を投稿してお金を稼げる時代になった。
自分のアイデアをvisualizeし、面白い動画にして投稿すれば、収益化できる。
プログラミングをマルチメディアやGUIに対応させることは当たり前。
あなたもテック系ユーチューバーになろう。
動画は変化する静止画の連続であり、スクリーンショットで一枚一枚画像を撮ってテキトーなツールでつなげれば動画に出来る。
>>612
手頃で簡単な動画コンテナ知らない?
AVIのフォーマット調べたらRIFF吐かないといけなくて、そこからかよ!って感じだった。 お題: あみだくじを解け。n本の縦線を上下に平行に引き、上から順番に二つの縦線を結ぶ形でいくつかm本の横線を引く。下側の縦線の端の一つにゴールを設定するとき、あみだくじの
ルールに従ってゴールに到達する縦線の端のスタート地点を求めよ。
>>614
連番でビットマップ吐けばフリーソフトでつなげられるだろよ。 >>616 おいこら、出題ペースが早すぎるぞ。解答もほとんど出ていない状態で次のなんて出すなよ。 面白い動画たーくさん作って早く労働者階級を卒業しよっぜ。
>>575 >>623 それって、>>11 の入口問題だな。 俺も>>11 関連で知ったが、最小包含円って言葉は、このスレで何度か出てきてるぞ、
具体的な宇宙人の足跡データが、>>11 として最小包含円を求めよとした方がより具体的だな。 いくつか答えが出てるけど。
具体的なデーターを示さないと答えがバラバラになるぞ。 蟻人間の問題ってあやふやなのが多いな。 >>600 Perl5
@a = map{sprintf"2019/07/%02d",$_} 1..31;
$h{$_}{A}=1 for qw{2019/07/05 2019/07/10 2019/07/15 2019/07/20};
$h{$_}{B}=1 for qw{2019/07/08 2019/07/10 2019/07/20};
$h{$_}{C}=1 for qw{2019/07/15 2019/07/20 2019/07/25};
@b = grep{1<keys %{$h{$_}}} @a;
print "$_ @{[keys %h{$_}]}\n" for @b;
実行結果
~ $ perl 14_600.pl
keys on reference is experimental at 14_600.pl line 6.
2019/07/10 B A
2019/07/15 C A
2019/07/20 B A C >>615
n=3
m=5
として横線は
(0, 1)
(1, 2)
(1, 2)
(0, 1)
(1, 2)
としよう。 >>625 スマソ「keys on reference is experimental at 14_600.pl line 6.」が出ちゃってた…orz
>>600 Perl5 チョット修正
@a = map{sprintf"2019/07/%02d",$_} 1..31;
$h{$_}{A}=1 for qw{2019/07/05 2019/07/10 2019/07/15 2019/07/20};
$h{$_}{B}=1 for qw{2019/07/08 2019/07/10 2019/07/20};
$h{$_}{C}=1 for qw{2019/07/15 2019/07/20 2019/07/25};
@b = grep{1<keys %{$h{$_}}} @a;
print "$_ @{[keys %{$h{$_}}]}\n" for @b;
実行結果
~ $ perl 14_600.pl
2019/07/10 B A
2019/07/15 A C
2019/07/20 B C A >>628
旧仮名なら「日本と云(い)ふ」だろボケカス >>555
さて、そろそろわしの出番のようぢゃな。
#!/bin/sh
echo 'サインカーブ' 整数が複数与えられて、そのうちの5つの積が最大になるものってどうやって選べばいいの?
絶対数でソートしても、負数が奇数個だとマイナスだし頭がこんがらがる
正数の大きい方から5個
正数の大きい方から3個と負数の絶対数の大きい方から2個
正数の大きい方から1個と負数の絶対数の大きい方から4個
で比較すれば?
別に正数とか負数とか気にしないでも良いか
ソートして、上から5個 上から3個と下から2個 上から1個と下から4個 の中で最大のものを選べば
>>634
全て負の値の場合は?
それと気になるのが0。 >>632
思考停止して全パターン出して最大値を取る。
あえて5個以下だとエラー。
対策するなら関数fで長さが5個以下か判定すれば良い。
昔、似た様な問題でリスト内包表記と再帰を組み合わせて、
スマートな方法を誰か書いてたの見たけど忘れた。
Haskell
main = f [(-1),4,(-2),1,3,2]
f xs = maximum [product [a,b,c,d,e]|
a <- xs, b <- xs, c <- xs, d <- xs, e <- xs,
a /= b, a /= c, a /= d, a /= e, b /= c, b/= d, b /= e, c /= d, c /= e, d /= e] >>637 おいおい、いくつの中から5個取り出すかわからないんだぞ。 100000個の中から5個取り出すと結構な時間がかかるだろ。
どんだけの組み合わせになるんだよ。 >>638
だから思考停止っって書いてるんよ^^; >>632
Listモジュールに関数あった。。。
Haskell
import Data.List
main = print $ f [(-1),4,(-2),1,3,2]
f = maximum.map product.permutations 全部負なら、必ず答えも負になるんだから選ぶのは上から5個で良くないか
つまり634で合ってると思う
0も問題無いな、どこにあっても網羅されてる
>>600
perl5 ワンライナー
perl -ne 'if(/^(.*?),(.*)$/){$d{$2}{$1}=1}END{for(sort keys%d){if(keys%{$d{$_}}>=2){print"$_ ".join(",",sort keys%{$d{$_}})."\n"}}}'
入力
A,2019/07/05
A,2019/07/10
A,2019/07/15
A,2019/07/20
B,2019/07/08
B,2019/07/10
B,2019/07/20
C,2019/07/15
C,2019/07/20
C,2019/07/25
出力
2019/07/10 A,B
2019/07/15 A,C
2019/07/20 A,B,C >>635
oh...全て負の場合は数値が大きい方(絶対値が小さい方)から5個だな >>637
試した限りじゃ上手く動いてる。
もっとスマートな書き方出来ないものか。。。
Haskell
import Data.List
main = (print.f) [9,(-5),3,2,1,8,(-4)]
f xs |(odd.length) b && (length.filter (<0)) xs > 1 =
promax
((map snd.f') a ++ (map snd.take (5 - (length.f') a)) b')
((map snd.take 5.abslst) xs)
where
a = (filter ((>=0).snd).take 5.abslst) xs
a' = (filter ((>=0).snd).abslst) xs
b = (filter ((< 0).snd).take 5.abslst) xs
b' = (filter ((< 0).snd).abslst) xs
f' xs |length a > length b = init xs
f' _ = (take (5 - (length.init) b)) a'
f xs = promax ((take 5.reverse.sort) xs) ((map snd.take 5.abslst) xs)
promax xs ys |product xs > product ys = xs
promax _ ys = ys
abslst xs = reverse.sort $ zip (map abs xs) xs promax xs ys |product xs > product ys = xs
promax _ ys = ys
abslst xs = reverse.sort $ zip (map abs xs) xs
>>632 Sqeueak Smalltalk
| data stream selection set numNegs |
data := #(9 -5 -3 2 1 8 -4).
stream := ((data copyWithout: 0) sortBy: #abs descending) readStream.
set := Set with: (selection := (stream next: 5) asArray).
numNegs := selection count: #negative.
(numNegs > 0 and: [numNegs odd]) ifTrue: [
| nextNeg nextPos lastPosIdx lastNegIdx |
nextNeg := nextPos := nil.
lastPosIdx := selection findLast: #positive.
lastNegIdx := selection findLast: #negative.
[(nextNeg isNil or: [nextPos isNil]) and: [stream atEnd not]] whileTrue: [
| next |
next := stream next.
(lastPosIdx > 0 and: [nextNeg isNil] and: [next negative])
ifTrue: [set add: (selection copyWithoutIndex: lastPosIdx), {nextNeg := next}].
(lastNegIdx > 0 and: [nextPos isNil] and: [next positive])
ifTrue: [set add: (selection copyWithoutIndex: lastNegIdx), {nextPos :=next}]
].
].
set detectMax: [:xs | xs reduce: #*]
"=> #(9 8 -5 -4 2) "
Pharo Smalltalk版 → http://ws.stfx.eu/OK6PHG96QEY8 >>632 haskell
import Data.List
f xs = if length xs < 5 then undefined else (maximumBy(\ x y ->compare(product x)(product y))$zipWith(++)(reverse.inits.(take 5).reverse.sort$xs)(inits.(take 5).sort$xs))
f [9,-5,-3,2,1,8,-4]
-- > [9,8,2,-5,-4] お題: Hello, World!が入力されるのでHelloとWorldを入れ替えて表示せよ
あまりにも簡単すぎる問題は控えて欲しいな、たまになら休憩として良いけど。
printed("World, Hello!");
>>651 Perl5 簡単だけれども、解いてみた
<>=~/(\w+)(\W+)(\w+)(\W+)/;
print "$3$2$1$4\n";
実行結果
~ $ echo 'Hello, World!' | perl 14_651.pl
World, Hello!
※英単語部は任意です fは2^N → Rでいいの?
2^Nは自然数の冪集合ね
てか括弧内で全射が無視されてんのが謎
echo Hello, World! | perl -pe 's/ (\w+) , \N{SPACE} (\w+) ! /$2, $1!/x'
World, Hello!
>>656
f(x)=x/1e4+42 但し xは整数で x∈[-10000, 10000]
とかの、もっと単純なヤツです(この例だとn=6)。
f(x)=10^x
とかだと、n=1なのは自明だし、
f(x)=c 但し cは任意の実定数
とかだと解は存在しないので、これらは除外して下さい。 >>659
任意の整数域を定義域とする関数に、なんで整数渡してんの? お題
与えられた画像ファイルを
適当なサイズに縮小・拡大
しモノクローム画像に変換
しアスキーアートに変換す
る
ss = "Hello, World!".split(', ')
print( f'{ss[1]}, {ss[0]}' )
# World!, Hello
split のたぐいだと ! の位置がおかしなことになるんだよな
>>663 おかしいかどうか知らんよ。 問題が細かな事を言っていないんだから。 >>664 悪い悪い、問題を読み直したら、単語の入れ替えだけで記号の位置はそのままというような感じだな。 >>664
はあ?
> HelloとWorldを入れ替えて表示せよ
余計なことしちゃだめだろ >>362 : 367 369 370 371 374 379 380 382 414
>>368 : 390
>>388 : 487 (488) 553 559
>>400 : 401
>>408 :
>>417 : 418 419 421 426 432 433 436 438 442 446 451 452 456 471 474 480 482 489 492 495 498 528 530 540
>>479 :
>>555 : 556 558 564 565
>>557 : 560 562 568 569
>>570 : 574 577
>>573 : 604 622
>>600 : 605 607 611 613 627
>>615,626 :
>>632 : 637 640 645 649 650 >>669 安静にしてた方が良いと思うよ。 反発のない世界で触れ合うのは良いと思うけど、2ch/5ch みたいなところに出てくると、傷つくのは目に見えてる。
みるのが楽しければ、みるだけにとどめるとか。 1 のテンプレを順守してればこのコードの漏れはなくなる
>>667
お前個人の備忘録なんてホントにチラシの裏にでも書いとけよ >>651のお題は
> お題: Hello, World!が入力されるのでHelloとWorldを入れ替えて表示せよ
なので、Hello, World!以外が入力されたら無視するかエラーを出すのが正しいのでは?w >>675
それは過剰な設計では?
Hello, World! 以外が入力されたときにどう振舞うべきかについて >>651 には何らの記載がないので、何ら拘束されることがない
言い換えると、入力が Hello, World! 以外の場合には「どうふるまってもいい」と解釈するのが、論理学的に妥当…@だと思います
@:論理式「偽→真」=真、「偽→偽」=真からの類推です >>677
> お題: Hello, World!が入力されるので
とあるから入力されるまで待つ処理がない>>653は失格 >>677 Lua
a,b,c,d=io.read(5,2,5,1)
print (c..b..a..d) >>678
アホかお前
勝手にオリジナルルール作るなよ お題
#1234→◆gdyb21LQTc
#abcd→◆4vxxTEcn7p
#あいうえお→◆rXz1zlMT-L
左のトリップキーから右のトリップを返すアルゴリズムを探せ
>>683
$ head text hash.sedscr
==> text <==
#1234→◆gdyb21LQTc
#abcd→◆4vxxTEcn7p
#あいうえお→◆rXz1zlMT-L
左のトリップキーから右のトリップを返すアルゴリズムを探せ
==> hash.sedscr <==
s/#1234/◆gdyb21LQTc/
s/#abcd/◆4vxxTEcn7p/
s/#あいうえお/◆rXz1zlMT-L/
$ cat text | sed -f hash.sedscr
◆gdyb21LQTc→◆gdyb21LQTc
◆4vxxTEcn7p→◆4vxxTEcn7p
◆rXz1zlMT-L→◆rXz1zlMT-L
左のトリップキーから右のトリップを返すアルゴリズムを探せ >>678 Perl5(組合せ計算のモジュールはCPANにあるが言語処理系に標準で含まれるCOREモジュールではないので使わずに実装した)
@a=sort{$b<=>$a} qw{9 -5 -3 2 1 8 0 -4 -1 4 -2 1 3 2};
@b=splice @a,0,5;
splice @a,0,-4;
@c=(@b, @a); # 大きい方から5個と小さい方から4個,計最長9個
sub combi { # 組合せ
my @s;
if (my $n = shift) {
while ($n <= @_) {
my $t = shift;
push @s, map{[$t, @$_]} combi($n - 1, @_);
}
} else {
@s = ([]);
}
@s
}
@d = combi(5, @c); # 126個
use List::Util 'product';
@e = sort{$$b[0]<=>$$a[0]} map{[product(@$_), $_]} @d;
print "@{$e[0][1]} => $e[0][0]\n";
実行結果
~ $ perl 14_632.pl
9 8 4 -4 -5 => 5760 >>632 Perl5 (CPANのMath::Combinatoricsモジュール使用)
use Math::Combinatorics;
use List::Util 'product';
@a=sort{$b<=>$a} qw{9 -5 -3 2 1 8 0 -4 -1 4 -2 1 3 2};
@b=splice @a,0,5;
splice @a,0,-4;
@c=(@b, @a);
@d=combine 5, @c;
@e=sort{$$b[0]<=>$$a[0]} map{[product(@$_), $_]} @d;
実行結果
~ $ perl 14_632_2.pl
9 4 8 -5 -4 => 5760 >>689
最後のstatement
print "@{$e[0][1]} => $e[0][0]\n";
が抜けてた…Orz >>600
Ruby で、
require 'date'
ary_A = %w(2019/07/05 2019/07/10 2019/07/15 2019/07/20)
ary_B = %w(2019/07/08 2019/07/10 2019/07/20)
ary_C = %w(2019/07/15 2019/07/20 2019/07/25)
# 文字列の配列から、ハッシュを作る。Date#jd は、ユリウス日。整数型
def make_hash( ary, name )
ary.each_with_object( { } ) {
| str, h | h[ Date.parse( str ).jd ] = [ str, name ] }
end
# ハッシュをマージする。h_1 を上書きする。slice で、位置1 から、1つだけ
def merge_hash( h_1, h_2 )
h_1.merge!( h_2 ) { |key, v_1, v_2| v_1 + v_2.slice( 1, 1 ) }
end
hash_A = make_hash( ary_A, "A" )
hash_B = make_hash( ary_B, "B" )
hash_C = make_hash( ary_C, "C" )
merge_hash( hash_A, hash_B )
merge_hash( hash_A, hash_C )
hash_A.select { |k, v| v.length >= 3 }.sort.each { |elem|
puts elem.last.join( ", " ) } お題
直線状の(配列を使った)ライフゲームがある。ルールは、
1. 両隣が生きていれば、暑苦しいので死ぬ
2. 両隣が死んでいれば、寂しいので死ぬ
3. 両隣の内、片方だけが生きていれば、生きる
4. 両端の2つについては、隣が生きていれば生きるし、隣が死んでいれば死ぬ
5. すべてのマスの状態の変更は、同時にすること
下の初期値(1 ターン目)から初めて、状態が変わらなくなるのは、何ターン目か?
nターン目と、( n + 1 )ターン目が同じなら、nターン目を答える
ただし、漏れは検証していないので、100ターンを超えたら、終了してくださいw
* は生、. は死を表す
.*...**.*.***..
>>695 Pharo/Squeak Smalltalk
| map next turn |
map := '.*...**.*.***..' asArray collect: [:x | (x = $*) asBit].
next := [map allButFirst, {0} + ({0}, map allButLast) collect: [:x | (x = 1) asBit]].
turn := 1.
[map = (map := next value) or: [(turn := turn + 1) >= 100]] whileFalse.
^turn "=> 13 " プログラムしてないけど、そういう結果になると思う。
>>695 ruby 13ターンで全滅
life = ' .*...**.*.***.. '
puts "%4d %s" % [1, life]
100.times{|gene|
life2 = ' ' * life.size
(life.size-2).times{|i| life2[i+1] = ((life[i] == '*') ^ (life[i+2] == '*'))? '*' : '.' } # rule 1, 2, 3, 4
break if life == life2
puts "%4d %s" % [gene+2, life2]
life = life2 # rule 5
} プログラム組むまでもなく3ターンで終わりなんだけど解釈間違ってんのかな
生きるとは、新たに誕生する場合も、含めてください!
居ないときは両隣が生きていれば生まれる
(生きているときは 1. に従い死ぬ)
とかの方がいいんじゃない?
お題: コマンド「stack」を実装しなさい
stackの仕様
$ stack push hoge
で文字列hogeをスタックにプッシュする
$ stack pop
hoge
でスタックに積んだ文字列をポップする
スタックが空の場合は何も表示しない
ライフゲームだけど、生まれる話は聞いてないなぁ。
主が生まれる条件書いてねー気がする。
>>695,704 Perl5
sub f {
@a = map{'*' eq $_} split '', '.*...**.*.***..';
for ($t = 2; $t <= 100; $t++) {
@b = $_[0]->();
$t--, last if "@b" eq "@a";
@a = @b;
}
@a = map{$_ ? '*' : '.'} @b;
}
f(sub{$a[1], (map{$a[$_] and ($a[$_-1] xor $a[$_+1])} 1..$#a-1), $a[$#a-1]});
print "生存のみ $t: ", @a, "\n";
f(sub{$a[1], (map{$a[$_-1] xor $a[$_+1]} 1..$#a-1), $a[$#a-1]});
print "誕生あり $t: ", @a, "\n";
実行結果
~ $ perl 14_695.pl
生存のみ 3: .....**........
誕生含む 13: ............... >>711 ゴメン実行結果貼り間違えた
~ $ perl 14_695.pl
生存のみ 3: .....**........
誕生あり 13: ............... >>711 たびたびゴメン、微妙に間違えていた、この入力の場合答えは変わらないけど
sub f {
@a = map{'*' eq $_} split '', '.*...**.*.***..';
for ($t = 2; $t <= 100; $t++) {
@b = $_[0]->();
$t--, last if "@b" eq "@a";
@a = @b;
}
@a = map{$_ ? '*' : '.'} @b;
}
f(sub{map{$a[$_] and ($a[$_-1] xor $a[$_+1])} 0..$#a});
print "生存のみ $t: ", @a, "\n";
f(sub{$a[1], (map{$a[$_-1] xor $a[$_+1]} 1..$#a-1), $a[$#a-1]});
print "誕生あり $t: ", @a, "\n";
~ $ perl 14_695.pl
生存のみ 3: .....**........
誕生あり 13: ............... >>695 ruby 13ターンで全滅 (>>701 bit演算化)
life = '.*...**.*.***..'
bord = life.tr('.*','01').to_i(2)
mask = 2 ** life.size - 1
fmt = "%%0%db" % life.size
100.times{|gene|
puts "%5d %s" % [gene+1, (fmt % bord).tr('01','.*')]
bord2 = ((bord<<1)^(bord>>1)) & mask # rule 1, 2, 3, 4
break if bord == bord2
bord = bord2
} >>706
>1. 両隣が生きていれば、暑苦しいので死ぬ
これを変形して、
1a. 自マスが生きている場合、両隣が生きていれば、暑苦しいので死ぬ
1b. 自マスが死んでいる場合、両隣が生きていれば、生きる(新たに誕生する)
1c. ただし、両端の2つのマスについては、1a, 1b を適用せず、ルール4 で良い。
4. 両端の2つについては、隣が生きていれば生きるし、隣が死んでいれば死ぬ
つまり、両端の2つについては、そのマスの両隣の内、
存在しないマスを死んでいるものとして扱うと、常に、1a, 1bには該当しない
興味があれば、この変形ルールでも、やってみてください!
ただし、漏れは、どうなるのか知りませんがw
>>707
確かに、ルール90 と同じです 【7ピンN枚の河内塔の最短手順問題】
初期状態では帽子はピン0
にあり、ピン6にすべて移す
までの最小手順の回数を求める
例:
N=3 5回
0->4
0->5
0->6
5->6
4->6
>>716 ruby 63ターン以降2周期ループ(62,63,62,63,,,)
life = '.*...**.*.***..'
bord = life.tr('.*','01').to_i(2)
mask = 2 ** life.size - 1
fmt = "%%0%db" % life.size
bords = {bord=>true}
100.times{|gene|
puts "%5d %s" % [gene+1, (fmt % bord).tr('01','.*')]
bord2 = (bord<<1 ^ bord>>1 | bord<<1 & bord>>1 & ~bord) & mask # rule >>706, >>716
break if bords[bord2]
bord = bord2
bords[bord] = true
} >>718
循環しましたか?
循環を発見するには、すべてのターンを記録して照合しないといけないから、大変! >>720
3. 両隣の内、片方だけが生きていれば、生きる
元々、生きるには、誕生する事も含むから、3a, 3b は、必要ない
ただ、
>>706
の提案で、1a, 1b の所だけを変えてみたのが、
>>716 #>>716 ruby # Rule を配列化。 (L C R) 3bit 0..7 の状態 >>659なら [0,1,0,1,1,0,1,0]
Rule = [0,1,0,1,1,1,1,0] # rule >>706, >>716
life = '.*...**.*.***..'
lifeBit = life.size
bord = life.tr('.*','01').to_i(2)
fmt = "%%0%db" % lifeBit
bords = {bord=>true}
100.times{|gene|
puts "%5d %s" % [gene+1, (fmt % bord).tr('01','.*')]
bord <<= 1
bord2 = 0
lifeBit.times{|bit|
bord2 |= Rule[bord & 7] << bit
bord >>= 1
}
bord = bord2
break if bords[bord]
bords[bord] = true
} >>716 Pharo/Squeak Smalltalk
| map next seq start |
map := '.*...**.*.***..' asArray collect: [:x | (x = $*) asBit].
seq := OrderedCollection with: map.
next := [ | acc |
acc := map + (map allButFirst, {0}) + ({0}, map allButLast).
((#(1 2) collect: [:x | acc collect: [:elem | (elem = x) asBit]]) * {map negated + 1. 1}) sum
].
[(start := seq indexOf: (map := next value)) > 0 or: [seq size >= 100]] whileFalse: [seq add: map].
(start = 0 or: [start = seq size]) ifTrue: [seq size] ifFalse: [start to: seq size]
"=> (62 to: 63) " >>722だけど間違ってたら、教えて。
今みんな何やってるのか把握してない。 >>716 Perl5、5で止まる。>>720>>721の解釈違い?それともオレのBug?
%s = qw(. 0 * 1);
@a = map{$s{$_}} split '', '.*...**.*.***..';
$t = 1;
%h = ("@a" => $t);
printf "%2d: @a\n", $t;
for ($t = 2; $t <= 100; $t++) {
@b=($a[1] ? $a[0] : 0,
(map{
($a[$_-1] xor $a[$_+1]) ? $a[$_] :
(($a[$_-1] and $a[$_+1]) ? ($a[$_]?0:1) : 0)
} 1..$#a-1),
$a[-2] ? $a[-1] : 0
);
printf "%2d: @b\n", $t;
@a = @b;
$t--, last if exists $h{"@a"};
$h{"@a"} = $t;
}
@c = map{$_ ? '*' : '.'} @a;
printf "%d => @c\n", $t;
実行結果
~ $ perl 14_716.pl
1: 0 1 0 0 0 1 1 0 1 0 1 1 1 0 0
2: 0 0 0 0 0 1 1 1 0 1 1 0 1 0 0
3: 0 0 0 0 0 1 0 1 1 1 1 1 0 0 0
4: 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0
5: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
6: 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
5 => . . . . . . * * . . . . . . . (- (expt 2 n) 1) ぐらいの手数増加がやばいやつか
たった64枚で移し終えると世界が滅びるらしいぞw
>>733
えーっと、そのこーどだけど、死んでるセルの隣に生きてるセルがいたら生まれてるんだけどあってる? >>733
示唆してくれてありがとう。言い忘れてた。 >>727
>>716
>確かに、ルール90 と同じです
wikipediaのルール90 を確認してみて >>733 ご指摘ありがとう。 >>721 の
> 3. 両隣の内、片方だけが生きていれば、生きる
> 元々、生きるには、誕生する事も含むから、3a, 3b は、必要ない
を、「3.自マスが死んでいる場合、両隣の何れかでも生きていれば、生まれる。」
と言う意味と捕らえなおして、>>713を書き換えたら、63でloopしたよ。
>>716 に
>1b. 自マスが死んでいる場合、両隣が生きていれば、生きる(新たに誕生する)
と誕生条件が書いてあったので、3の条件は「生まれる」条件も含むとは考えず、
「3.両隣の内、片方だけが生きていれば、自マスが生きていれば生きる(し、死んでいれば死んだまま)。」
と解釈して >>713 を作ったのが63でloopしなかった原因だと分かった。 >>716,721 Perl5
%s = qw(. 0 * 1);
@a = @a = map{$s{$_}} split '', '.*...**.*.***..';
$t = 1;
%h = ("@a" => $t);
@h = ("@a");
for ($t = 2; $t <= 100; $t++) {
@b=($a[1] ? 1 : 0,
(map{
($a[$_-1] xor $a[$_+1]) ? 1 :
(($a[$_-1] and $a[$_+1]) ? ($a[$_]?0:1) : 0)
} 1..$#a-1),
$a[-2] ? 1 : 0
);
@a = @b;
push @h, "@a";
$t--, last if exists $h{"@a"};
$h{"@a"} = $t;
}
$i = $h{"@a"};
print $_ - 1, ": $h[$_-1]\n" for $i..@h;
実行結果
~ $ perl 14_716_721.pl
61: 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
62: 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0
63: 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 >>716,721 Perl5、ゴメン、結果は0 1じゃなくて.*のstringで表示すべきだったので修正させていただきます
@a = split '', '.*...**.*.***..';
@h = ("@a");
@a = map{'*' eq $_ ? 1 : 0} @a;
$t = 1;
%h = ("@a" => $t);
for ($t = 2; $t <= 100; $t++) {
@b=($a[1] ? 1 : 0,
(map{
($a[$_-1] xor $a[$_+1]) ? 1 :
(($a[$_-1] and $a[$_+1]) ? ($a[$_]?0:1) : 0)
} 1..$#a-1),
$a[-2] ? 1 : 0
);
push @h, join'',map {$_ ? '*' : '.'} @b;
@a = @b;
$t--, last if exists $h{"@a"};
$h{"@a"} = $t;
}
$i = $h{"@a"};
print $_ - 1, ": $h[$_-1]\n" for $i..@h;
実行結果
~ $ perl 14_716_721.pl
61: *.*.*.*.*.*.*.*
62: .*.*.*.*.*.*.*.
63: *.*.*.*.*.*.*.* >>362 : 367 369 370 371 374 379 380 382 414
>>368 : 390
>>388 : 487 (488) 553 559
>>400 : 401
>>408 :
>>417 : 418 419 421 426 432 433 436 438 442 446 451 452 456 471 474 480 482 489 492 495 498 528 530 540
>>479 :
>>555 : 556 558 564 565
>>557 : 560 562 568 569
>>570 : 574 577
>>573 : 604 622
>>600 : 605 607 611 613 627 691
>>615,626 :
>>632 : 637 640 645 649 650 687 689-690 だから、誕生という概念を作ると、説明が難しいから、「生死」の状態だけにした。
生死だけなら、前の状態に関係ない、前の状態と切れているから
誕生という概念を使うと、
a. 前の状態が死んでいる時と、
b. 前の状態が生きている時で、
処理が変わってくるから複雑になって、勘違いする人も出てくるから
>>747
その「だから」は何につながってるのか読めない。 >>747
状態が関係ないと実装の工夫のしどころが失われて面白みが半減すると思うよ
最初の何ターンかを例として示せば済むはなしだし
手元で実装を試していればなおさら何の苦もないことかと
細かい事を言うと、本当に実装を試さずに出題しているのならそれはルール違反なんだよね
(チューリングの泥沼問題回避や宿題の丸投げ防止) >>749
出題者が実装をひとつは持っておく、というのは努力目標でいいんじゃないかな?お題が面白ければ私は許容しますね
まあ自分のお題は面白くないので実装をひとつくらいは持つようにしていますが… お題: 生徒の氏名、身長、体重の3つからなる複数のレコードが与えられる。氏名とBMIを左揃えのテキストの表にせよ。
単位はMKS単位系、テキストはASCIIおよび等幅フォントが使われると仮定してよい。
Tanaka Naoki 15kg 2m
Inoue Ken 280g 32cm
Akai Ryusei 1mg 3km
お題: MKS単位系の単位を変換する関数またはクラスを作れ。
1kg:g
→1000g
2m:cm
→200cm
>>753
C++なら、ユーザー定義リテラルで横着できるんだけど、入力解析が嫌な感じだ。 物理シミュレーションが人間の手から離れて自由自在にならなければ、火星への仮想移住もできない。MKS単位系の計算術は重要だ。
トリップ付きは大学の教養課程の知識すらない阿呆しかいないのかね
長さの単位、質量の単位、そして時間の単位の3つがある。これにキロ、ミリ、マイクロなどが前に付く。
変換方法は複数あり、何から何への変換方法はデータとして与えられ、それらは追加可能でなければ不便。
先生!質問です!
重さの規準は kg ですか?それとも g ですか?え?kg?おっかしーなー?kg の kって単なる接頭辞 prefix なのでは?
長さ1センチの鼻毛を鉛直方向に1ニュートンの力で引っ張り、抜いたときに感じる痛みは1ハナゲ
>>763
質量は J に等価交換できても長さや時間は無理なのでは? >>765
natural unitも知らねえのか タブ区切りの文字列の置換リストがあって、そのとおりにテキストファイルファイルを置換したい
そういうソフトありますか?
見つからないので自作しようとおもったけどここへ書いてみた
置換リスト例
ああああ うううう
aaaaa QQQQQ
コマンドラインでGREPと置換できるソフトはあるんだけど。
DOSの文字制限と、正規表現の制限で、
置換したい文字の設定がややこしい。あと複数同時にできない。
文字を加工せずできれば便利だなと。
>>767
Perlでも使えば?文字列置換楽だよ。 >>767
perl5 が最高だとおもうよ
もともとそういう分野に特化した言語だ >>766
時間や長さを J で統一することは自然単位系でもできませんね… Ruby では変換表を使って、置換できる
hash = { 'ab' => 'あ', 'xy' => 'ん' }
p re = Regexp.union( hash.keys ) #=> /ab|xy/
p "9xy9ab9xyx".gsub( re, hash )
#=> 9ん9あ9んx
gsub(pattern, hash) -> String
文字列中の pattern にマッチした部分をキーにして、hash を引いた値で置き換える
hash = {'b'=>'B', 'c'=>'C'}
p "abcabc".gsub(/[bc]/){hash[$&]} #=> "aBCaBC"
p "abcabc".gsub(/[bc]/, hash) #=> "aBCaBC"
rubyの宣伝とはいえ、宿題に餌やるなら、問われている事柄に応えてやったらどうかと思う。
宣伝意識が前面に出すぎて目的を忘れるなかれ、って感じ。
| \
| ('A`) ギシギシ
/ ̄ノ( ヘヘ ̄ ̄ アンアン/
[ 弘前大 ]
和が406 で、最小公倍数が2,660 である、2つの整数を求めよ
答え
14 * 10 = 140
14 * 19 = 266
整数問題は脳死でこう叩く
(loop for x from 1 to 1000 do (loop for y from 1 to 1000 when (and (eq (+ x y) 406) (eq (lcm x y) 2660)) do (format t "~a ~a~%" x y)))
140 266
266 140
和が406 ですよ
1〜405 を確認すれば十分!
大学の入試問題の大半 8割ぐらいは1000までローラーすればいい
だから経験上1000やっちゃうんだよね
最適化してくなら for y from x
とかも効かすけど
3乗算決めるぐらいまでは問題ない速度が出てる(loop x(loop y(loop z
>>781
和なんだから最適化利かすならyは406からx引けよw >>782
煽るだけではねえ…時間や長さを J に統一するために自然単位系がどう使えるのか書けるのですか? 壮大な話やなぁ。
その時間系に所属する人の仕事量を全部計算するんかいな??
アホだからこんなこと思うわ。
私は頭は良いのだが知識がないため君らが何を言っているのかがよくわからない。
>>778
Ruby で、
require 'prime'
sum = 406 # 和
lcm = 2_660 # 最小公倍数。least common multiple
# 最大公約数。greatest common divisor
gcd = sum.gcd( lcm ) # 14
# 最大公約数で割ったもの
sum_2 = sum / gcd # 29
lcm_2 = lcm / gcd # 190
# 半分(1〜15)まで、ループする。ary は、10
ary = ( 1..( sum_2 + 1 ) / 2 ).each.select {
|num| num * ( sum_2 - num ) == lcm_2 }
# 14 * 10 = 140, 14 * 19 = 266
p gcd * ary.first, gcd * ( sum_2 - ary.first ) お題、聖光学院中学校入試問題
1〜10 の10枚のカードの内、4枚を取り出して、a〜d に入れて、
下の式を満たす置き方は、何通りあるか?
( a + b ) * ( c + d ) = 100
答え、48通り
やってから気づいたけど、forで回したほうが早いな。
それと、ネクストコンビネーションがほしいのじゃー。
>>778
sum := 406, lcm := 2660
c := gcd(sum, lcm)
(c * t_-, c * t_+) = (140, 266) where t_± = (sum ± √(sum^2 -4c * lcm)) / 2c = (29 ± 9) / 2 >>789
n := 10
(n / 2 - 1)_P_2 * 2^2 = 4_P_2 * 4 = 48 >>789
4P4 = 12 がなかったので暗算埋め込みしてしまった
(loop with i = 0 for a from 1 to 10 do (loop for b from (1+ a) to 10 do (loop for c from (1+ b) to 10 do (loop for d from (1+ c) to 10 when (eq 100 (+ (* a b) (* c d))) do (incf i)))) finally (print (* 12 i)))
48 >>569
遅レスだが
innerHTML はヤメロ
appendChild にしとけ…今回のケースでは問題にならないっちゃならないが… >>362 : 367 369 370 371 374 379 380 382 414
>>368 : 390
>>388 : 487 (488) 553 559
>>400 : 401
>>408 :
>>417 : 418 419 421 426 432 433 436 438 442 446 451 452 456 471 474 480 482 489 492 495 498 528 530 540
>>479 :
>>555 : 556 558 564 565
>>557 : 560 562 568 569
>>570 : 574 577
>>573 : 604 622
>>600 : 605 607 611 613 627 691
>>615,626 :
>>632 : 637 640 645 649 650 687 689-690 回答は容易に手繰れるのではっきり言って無用だし迷惑です
どうしてもまとめたいなら
例えば、どんな言語でどのお題に回答しているか整理したものとか付加価値を付けるべきでしょう
>>802
ご意見ありがとうございます、参考にいたします >>803
前に何度も不要だ、邪魔だと指摘されたはずだが一向に改めなかったのはなぜ? 本当にクズだよな。出す問題もゴミばかり。まるで使用済みティッシュ
お題
ミニミニなパスカルの三角形を表示する
1
11
121
1331
14641
>>807 Ruby
pascal = -> n {n > 0 ? [0, *pascal(n-1), 0].each_cons(2).map(&:sum) : [1]}
(0..9).map{|i| puts pascal[i].join(?\ )} # =>
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1 typo
pascal = -> n {n > 0 ? [0, *pascal[n - 1], 0].each_cons(2).map(&:sum) : [1]}
>>807 Perl5
for (1..5) {
@a = (1, map{$a[$_] + $a[$_+1]} 0..$#a);
print @a,"\n";
}
実行結果
$ perl 14_807.pl
1
11
121
1331
14641 >>807 python3
#!/usr/bin/python3
fractal_width = 19
xs = [1]
for i in range(1, fractal_width +1):
for x in xs:
print(x, "", end="") #xs sequence
print("")
xs.insert(0, 0)
xs.append(0)
xs = [ (xs[i] + xs[i +1]) for i in range(len(xs) -1)] 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
結果はいいけどコードのほうが酷い
print(x, "", end... あたりが最悪
>>807 Perl5, 無名関数のtail recursion版
use feature qw'say current_sub';
sub {
say @_;
__SUB__->(1, (map{$_[$_-1] + $_[$_]} 1..$#_), 1) if 5 > @_;
}->(1);
実行結果
$ perl 14_807.pl
1
11
121
1331
14641
※ Y-combinator版はマンドクせーので(ry >>807 Squeak Smalltalk
| pascal grow |
pascal := OrderedCollection with: #(1).
grow := [pascal add: {1}, (pascal last overlappingPairsCollect: #+), {1}].
7 timesRepeat: grow.
(pascal collect: [:each | each joinSeparatedBy: ' ']) asStringWithCr
"=>'1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1' " 時事通信は中立的でもっとも正確。朝日新聞は若干、旧民主党寄りの予想を出した。産経新聞は若干、自民党寄りの予想を出した。
それでもこの3つの分析には大差がない。東京選挙区はほぼ確定した。
当選者は自民党現職の丸川(台本がないと何を言うかわからないぶっとび女)、
自民党現職の武見(いつものハゲじじいもう5回シコシコ)、
公明党現職の山口公明党代表(誰もやりたがらない創価学会内の仕事を押し付けられているかわいそうな人)、
立憲民主党の塩村(東京で人気のいまでもオカズになるヌける熟女)、
共産党の吉良(共産党の女性アイドル、もう年だがまだまだエロオヤジに人気)、
立憲民主党の山岸(元朝日新聞政治部のメガネ、前頭ハゲ進行中)。
与党側3人当選、野党側3人当選で東京選挙区は与野党引き分け。
落選者で得票数第1位は維新の会の音喜多(東京都北区の区長選で落ちたのは悪口が書かれたせいだとして裁判で争っている最中のクズ、小池百合子都知事の元小間づかい、寄生できそうな政党につく虫)。
以上
お題
年金AI化をする
設計を考えよ
どの部分を人間にしてどの部分を機械にするか
っていうだけだと思うけど
すごい初級プログラマーでも作れちゃうほど簡単じゃねと気になった
あまりにかんたんで民間年金ですでにありそうだが
>>818 Ruby
nenkin = 'A PENSION'
puts nenkin.split.tap{|o| o.last.replace(o.last[x.size >> o.first.size])}.join
# => AI 入金
銀行データ紹介
入金人数と金額確認 ←入力 新規入力者の確認 人力目視
↓
出金人数と出勤額
みたいなかんじ
>>807 R
cat(11^(0:4),sep="\n") >>807 Pharo Smalltalk
(11 ** (0 to: 4)) rounded asStringWithCr
"=> '1
11
121
1331
14641' " お題:y=(1-x)(1+x)のx=-1〜1の区間を数値積分せよ。
>>824
Integrate[(1-x)(1+x), {x, -1, 1}]
4/3
wolframcloud
ちょっと感動 >>824 Ruby
require 'polynomial'
require 'polynomial/calculus'
expr = Polynomial.new(1, -1) * Polynomial(1, 1)
puts expr.integrate(-1..1)
# => (4/3) typo
> expr = Polynomial.new(1, -1) * Polynomial.new(1, 1)
>>824 Squeak Smalltalk
(#(1 -1) collect: [:x | {0. 1. 0. -1/3} polynomialEval: x]) reduce: #-
"=> (4/3) " >>829
small talkは何でもあんのな
毎回驚かされるわ ありがとな >>824 >>825 Perl5
#(x-1)(x+1)⇒1-x^2
#∫(1-x^2)⇒x-(x^3/3)
# [x-(x^3/3)] {-1, 1} ⇒ -1-(-1/3) + 1-(1/3)
# ⇒1 -1/3 - (-1+1/3) ⇒ 2 - 2/3 ⇒ 4/3
# 暗算でも定積分値を求めることはできるが、代わりに
# 幅0.01の台形法による数値計算で解を計算すると…
use List::Util sum;
$s = sum map{.01*(1-($_/100)**2)} -99..99;
print "$s\n";
実行結果
$ perl 14_824.pl
1.3333 >>830
せっかく驚いてくれているのに水を差すようで恐縮なのだけど
誤解があるといけないので念のため補足しておきますと
これは>>826-828みたいに数式処理をしているわけではなく
定積分の筆算を式にしただけ(つまり 1-x^2 の積分である
x-(1/3)x^3 に 1 を代入したときの値から -1 を代入した値を引いただけ)です
もとより #(a b c d) polynomialEval: x "=> a*x^0 + b*x^1 + c*x^2 + ..." みたいな機能が
組み込みで用意されている点では、
こういうとき式を書かずに済んで便利ではありますが^^; お題: マルバツゲームを作れ。
_1_2_3
1O|_|_
_ー+ー+ー
2_|X|_
_ー+ー+ー
3_|_|_
(出力例)
プレーヤー1が先攻です。
プレーヤー1は何番に置きますか? 1
プレーヤー2は何番に置きますか? 5
...
プレーヤー2の勝ち。
O|2|3
ー+ー+ー
4|X|6
ー+ー+ー
7|8|9
マルバツゲームに便乗して…
お題:
3×3のマルバツゲームで両者がランダムな手を打つとき
先手の勝率、後手の勝率をそれぞれ求めよ。
今、こういうお題を考えています
Ruby などの遅い言語でも解けるように、
盤面の大きさを、9*9 〜 13*13 ぐらいで考えていますが、どうでしょうか?
1. 開始点S(座標、0行0列)から終了点E までの、最小コストを求める。
2. S, E 双方から、E, S へ目指す場合に、最小コストで出会う座標と、その時のコストを求める
1ターンで、縦横1つ隣へ移動できる。
同じマスは、1回しか通らない。
数字が各マスへの移動コストで、_ は、単なる目印で無関係です
S2953_9413
71546_7988
83411_2946
23716_5426
47385_736E
問題側が手加減してあげないと解けないポンコツ言語なんて放っとけば?
>>836
ルールを修正
1. 開始点S(座標、0行0列)から終了点E までの、最小コストを求める。
2. S, E 双方から、双方が出会うように移動する時、最小コストで出会う座標と、その時のコストを求める。
この時の最小コストは、双方のコストを足したものです
1ターンで、縦横1つ隣のマスへ、必ず移動する。
自分が通ったマスは、1回しか通らないが、相手が通ったマスは、通れます
数字が各マスへの移動コストで、_ は、単なる目印で無関係です
この2は、かなり難しいのかな?
最小コストが求まるのかな?
漏れにも、わからない >>838
迷惑だからちゃんと整理して解ける問題か確認してから書き込め。説明も下手すぎるからちゃんと推敲しろ。 だから自分で一度書いて動くのを確認してから出題しろと何度言えば…
>>834
common lisp
https://pastebin.com/TjpFVgBk
> (OX-game)
123/456/789 to write OX
|789|
|456|
|123|
| |
| |
| |
player-1 writing O to ...
1
| |
| |
|O |
player-2 writing X to ...
...
|XX |
| O |
|O |
player-1 writing O to ...
9
player-1 win
|XXO|
| O |
|O | 続き
player-2 writing X to ...
2
|X O|
|OOX|
|XXO|
player-1 writing O to ...
8
it's draw! finish a game without either one winning
2chのレイアウト変更を忘れてた
こうなる
>>836
最小重み経路問題かな?
軽く書いてみたけど、最短経路問題の3倍位難しい。
出直してくるわ。 >>362 : 367 369 370 371 374 379 380 382 414
>>368 : 390
>>388 : 487 (488) 553 559
>>400 : 401
>>408 :
>>417 : 418 419 421 426 432 433 436 438 442 446 451 452 456 471 474 480 482 489 492 495 498 528 530 540
>>479 :
>>555 : 556 558 564 565
>>557 : 560 562 568 569
>>570 : 574 577
>>573 : 604 622
>>600 : 605 607 611 613 627 691
>>615,626 :
>>632 : 637 640 645 649 650 687 689-690 迷惑だからやめろ
やるなら言語別集計とか少しでも付加価値を入れろ
留数定理も知らないくせにしゃしゃりでてんじゃねえぞクソコテ白痴クロッチロット野郎が
>>852
>言語別集計
次スレで採用しようと思います、このスレでよく使われる言語とその程度を棒グラフ的に認識したくなりました >>854
本当に申し訳ないんですがここに貼るないでもらっていいですか 認識したいのならご自由にでも迷惑だからここには貼らないで
>>848
本当に迷惑だからやめろ
工夫なんか一切しなくていいから金輪際やめろ お題: できるだけ少ない回数で1から1000の数を判定しろ
例
入力: 775
出力 n==755
入力: 2,4, ...., 1000
出力 n%2
入力: 3,4,5,6, 10
出力 : n-3<=3 ||n==10
あっ。あっ。頭が!爆発!!しちゃうーーーーーーーー!!!
>>859
> 入力: 2,4, ...., 1000
> 出力 n%2
これ間違えてね? 桃白白改めミスターポポ改めピラフ改めピッコロさんは毎回適当に出題してるからね
>>859
xy座標で y = xのn-1次以下の式が
n個の点があたえられると導けるから
その出力の一意性に疑問がある お題
正の整数nと、正の整数のリスト2つ
a_1, ..., a_k
b_1, ..., b_k
が与えられる。
これに対して以下の操作を繰り返す。
操作: n*a_i/b_iが整数になる最初のa_i/b_iをnに掛ける
この操作ができなくなる時が来るかどうか判定してください。
>>865
lisp
(loop for a in '(1 4 3 4 5 6) for b in '(7 8 9 10 11 12) with n = 14 when (integerp (* (/ a b) n)) do (return (format t "a:~a b:~a" a b)) finally (princ "not found"))
a:1 b:7
(loop for a in '(1 4 3 4 5 6) for b in '(7 8 9 10 11 12) with n = 13 when (integerp (* (/ a b) n)) do (return (format t "a:~a b:~a" a b)) finally (princ "not found"))
not found >>853
頭のおかしいガイジのくせに数学を語ってんじゃねぇよ
ぶっ殺すぞガイジ
実関数もわかってねぇくせに複素関数を語ってんじゃねぇよ
おめえの腸を掘り出して排水溝に捨てるぞ >>866
説明が足りなかった
iを見つけたら
n = n*a_i/b_i
として同じことを繰り返す >>848
そのまとめ、専ブラ(ChMate)使ったら何も加工せずにより良い結果を表示できる
ってか、あんたの投稿で出題に無関係なレスもピックアップされてしまう
百害あって一利なし、なのでヤメてくれ ◆QZaw55cn4c のまとめ(と称した自己満足)は本当に迷惑だからやめてほしい
>>873
おまえも一応プログラマだろ
本当に自分でそれ書けないのか? >>876
回避策も何も、お前が書き込みをやめればすむだけの話だ なんで手間暇かけて他人の嫌がる余計なことするのかね
ろくな回答書けないなら黙ってROMってろって思うわ
>>865
問題かよくわからない。a_i/b_iをnに掛けた結果をどうするのか?何かに代入するのか? n*a_i/b_iが整数になったらnにそれを代入して、もう一度頭から繰り返すんじゃろ
で、無限にその操作を繰り返せるのか途中で終わるのかを判定する
>>873
スレッドURLにも対応してる、しつこいよあんた QZとか言う馬鹿は自分がやっている事がことごとく嫌がらせになっているというのにも
全く気づいてないんだろうなあ
良かれと思ってやったのに迷惑だと言われる
千羽づるみたいだなって思いました
>>889
千羽鶴なら日本の文化だからまだいいよ
QZのは明らかに異国の匂いがする >>889
千羽鶴なら独善ではあっても善意のつもりだというのは分かるが、QZのは他人のためでなく自分がそうしたいというだけの理由だから、より嫌われる お題・ルールは、
>>838
のままで良いです
マスは、11 * 11 で、やってみましょう!
空行・_ は、単に見やすくしただけなので、無視してください
S2953_94137_3
71546_79881_4
83411_29465_2
23716_54268_4
47385_73638_9
55263_74296_1
34945_87362_5
96755_42186_7
14893_12472_6
71911_47852_1
29437_95134_E >>892
問い2は道順取れてるので頭と尻尾から配列なめてけば一応、かち合う場所が取れるよ。 S66
996
19E
超単純化した↑の場合
問1の場合はコスト18
問2の場合は座標(0,2) コスト19
で良いんだよな?
ホンダがらったフンだがらったヘンだがらった!フンフン!!
いでよ、主催者!!!
>>897
ここには特に主催している人は居ないし、そもそも組織になっていない。各個人か勝手にお題を出して解きたい人が解いてるだけ。
おそらく常連は居るだろうが基本的に匿名で誰が誰だかよくわからず、人か入れ替わっていてもわからない。 問2 について考えてみた
最短ターンでは、10ターンで、双方が出会うけど、
その時の双方を足したコストが、最小とは限らない!
だから迂回路の場合、つまり、11ターン以上で出会うマスも、すべて考慮して、
その中から最小コストを選ぶ必要がある
例えば、あるマスが、S・E 双方から12ターンなど
その際、双方からのターン数が異なる場合は、関係ない。
例えば、あるマスが、Sから11ターンで、Eから13ターンなど
>>899
ダイクストラ法で良い。
漏れは、総当たりでやってみる >>896
問1 は、6 + 6 + 6 = 18
問2 は、左下の1 の所で出会うのなら、
S から、9 + 1 = 10
E から、9 + 1 = 10
で、合計20
出会うマスのコストを2回足しているけど、これで良いか >>898
あ、それはわかってるよ。
問題の主催者(>>836)を呼びたかった。
やってきたので召喚成功だ。
ふふ。 Sは左上、Eは右下、盤面は正方形で良いのか?それともそれ以外のパターンも考慮しなきゃいけないのか
>>903
正方形ではなく、長方形だね
マスの座標は、行列の順で、開始点は( 行0, 列0 )
漏れは、盤面の周囲に、番兵を置いて、考えてます >>901
うん、ぼけてた
コスト20やなw
問2で盤面サイズが奇数x偶数とかの場合はゴールはどう考えればいいの? 同時移動だとすれ違っちゃうが
Sが常に先に動く (Eが居るところで合流)
Eが常に先に動く (Sが居るところで合流)
SとE好きな方が先に動く (コストが低いマスの方で合流)
SとEが同時に動く (すれ違って合流できない? 中間点で合流? その場合のコストは?)
たとえば S12E とかの場合 盤面のサイズが偶数では、問2 は無理
必ず、奇数×奇数
>>906
偶数×偶数も行けるやろ
偶数×奇数、奇数×偶数は無理だが 任意の整数を引数に取り、フィボナッチ数か判別するisfib関数を作れ。
なお、フィボナッチ数では無い場合任意の整数と-1の組(Cなどは代わりの物)を、
フィボナッチ数ならフィボナッチ数=任意の整数とそれがフィボナッチ数列の何番めかを表す数の組を返す事。
例:
isfib 0 = (0,1)
isfib 1 = (1,2)
isfib 2 = (2,4)
isfib 3 = (3,5)
isfib 4 = (4,-1)
isfib 5 = (5,6)
>>910 Perl5
sub isfib {
$v = shift;
%h = map{$_ => $_} @s = (0,1);
do {
$f = $s[-2] + $s[-1];
push @s, $f;
$h{$f} //= @s;
} while $f < $v;
($v, $h{$v} // -1);
}
printf "isfib $_ = (%d,%d)\n", isfib $_ for 0..5;
実行結果
$ perl 14_910_isfib.pl
isfib 0 = (0,0)
isfib 1 = (1,1)
isfib 2 = (2,4)
isfib 3 = (3,5)
isfib 4 = (4,-1)
isfib 5 = (5,6) >>910 Lua
function isFib(n)
local a, b, c = 0, 1, 1
while a < n do
a, b, c = b, a + b, c + 1
end
if a ~= n then c = -1 end
return n, c
end >>908-909
確かに、偶数×偶数は、
同じターンで、同じマスに入れますね!
S1
2E
S12
34E >>910
戻り値がbooleanじゃないのが気持ち悪い >>913
4のとき
isfib 4 = (5,-1)
にならない? 「何番目かを返す」ってのが地味に難しいな
そこまでの全てのフィボナッチ数を求めないと無理じゃね?
>>916 勘違いした
isfib 4 = (4,-1)
になる。合っている。 お題: 水素原子、酸素原子、炭素原子からなる分子の化学式が与えられる。原子の種類と個数から考えられる分子構造をデータ構造で表現し、コンソール画面に可能なかぎり表示しなさい。
(例)
H2O --> H - O - H
CO2 --> O = C = O
CH4 -->
H
|
H- C - H
|
H
(例2) 図式化が難しければ、データ構造だけでもいい。
CO2 → (C, O, O), ((0, 1), (0, 2)).
H2O → (H, H, O), ((0, 2), (1, 2)).
CH4 → (C, H, H, H), ((0, 1), (0, 2), (0, 3)).
>>921
訂正。
CH4 → (C, H, H, H, H), ((0, 1), (0, 2), (0, 3), (0, 4)). >>920
ベンゼン寒とかシクロヘキサン
3、5つあたりも鬼門か? 図式化は不可能に近いようだ。データ構造だけでOK.
備考。
ここでは単純のために「結合の手」を使ったモデルで考える。
原子によって結合の手の個数は決まっている(Cは4個、Oは2個、Hは1個)。
結合の手が余らないような分子構造のみを考える(一酸化炭素COのような構造は除外する)。
電荷を持たない分子だけを対象とする。イオンではない。
ヨーク考えて、出題するレベルに練りあがってから出直したらどうですか
うわーおQZってまだ生きてたのか
昔NG推奨にしてスレ立てたような気がしたんだが
>>917
一般項 f(n) = (φ^n - (-φ)^(-n)) / sqrt(5) はnに対して狭義単調増加なので逆写像 fi(n) が存在して当然 fi・f(n) = n が成り立つ。
従って「そこまでの全てのフィボナッチ数を求めないと無理」は偽である。 >>920
化学式と分子構造は一対一対応してねえよ
そんなの今日日高校生ですら理解してるわ
二度と書き込むな お題
非負整数m, nに対し、
f(m, n)= n+1 if m==0
f(m, n) = f(m-1, 1) if n == 0
f(m, n) = f(m-1, f(m, n-1)) otherwise
なるf(m, n)の値を求めよ
f(2, 1) = ?
f(4, 1) = ?
>>932
あのさ、簡単に言うけどその逆関数は複素関数になるぞ
そこまで言うなら逆関数を使ってnを求めるプログラムを書いてみろ
ここはム板だ お題と回答
5 : 6 10 32 36 44
9 : 15 34 35 79
11=575 : 48 (78) 138-139 (140) 142 146 151 154
19 :
50, http://2chb.net/r/tech/1549160513/920 : 4 85 89
http://2chb.net/r/tech/1549160513/988 == 164 : 59 61 167 169 189 192 201 202
90 : 95 96
99 :
200 : 214 219
215 : 227
220 : 232 240 248 256 268
235 : 236 237 238 239 247 249 259 342 353
320 : 321 323 327 330 340
322 : 325 328 329 331 332 339 341 358 359
362 : 367 369 370 371 374 379 380 382 414
368 : 390
388 : 487 (488) 553 559
400 : 401
408 :
417 : 418 419 421 426 432 433 436 438 442 446 451 452 456 471 474 480 482 489 492 495 498 528 530 540
479 :
555 : 556 558 564 565
557 : 560 562 568 569
570 : 574 577
573 : 604 622
600 : 605 607 611 613 627 691
615,626 :
632 : 637 640 645 649 650 687 689-690
651 : 654 657 662 679 682 655 :
661 :
683 : 685
695,704,716,721 : 696 697 701 703 711 713 714 715 718 722 723 724 727 740-741
708 : 714
717 :
752 :
753 : (760)
767 : 775
778 : 779 788 (792) 794
789 : 790 (793)
807 : 810 811 812 814 815 816 821 823
824 : 826 827-828 829 831
833 : 841
835 :
836,838,892 : 847 880 881 893 895
865,868 : 866 868
910 : 911 912 913 935
934 : 936 938 939
>>937
論点ずらすな
「〜は無理」って言ってるからそれを否定しただけ
ただ 1 <= n <= 2 で狭義単調増加じゃないからそこだけは訂正しておくが
てかどんな頭で考えたらこの逆関数が複素関数になるんだか
可哀そうだから答え書いといてあげるけどさ
fi(x) = (log(sqrt(5) * x + sqrt(5 * x^2 - 4 * (-1)^((x + 1) % 3))) - log(2)) / log(φ) >>948
CやC++で ^ はXOR演算子なんだが ファイが何を指しているか・・・わからない・・・。
その定数5のいみがわからない。
そんな、ホラー。
動物園かよここは……
黄金比 φ := (1 + sqrt(5)) / 2
>>949
お前は一生クワス算でもやってろ >>951
そんなもん知ってるわアホ
上から目線で偉そうに >>952
意味不明すぎてくっそ笑ったwww
自らの頭の悪さにキレててウケる おおかた、数学的には反論できなくて悔しくなってc++では〜などという難癖をつけたのだろう
これ以上はスレチだからどっかよそでやれ
数学(?)の話してんのにCやC++で ^ はXOR演算子なんだがとかいうやつ初めて見たわ
無能アピールだとしたらこれ以上ないくらいに効果出てるな
>そこまで言うなら逆関数を使ってnを求めるプログラムを書いてみろ!
どうせ無理だと思ってタンカを切ったら相手にあっさり答えを書かれてしまう(ついでに自分の間違いまで指摘されてしまう)
もし俺がこいつだったら、恥ずかしくなりすぎてXOR演算子云々で話をうやむやにする気持ちもわかるぞ
作ってて思ったのはね。
片方の関数は、フィボナッチ数知らないと動作しないのじゃないかということ。
片方の関数は、フィボナッチ数もとめにいくんだけど。
んで、鳥と卵の問題に見えるので、どういう風に使えばよいのかわからない。
あの逆関数?を単純に放りこんだら解けなかった
一筋縄じゃいかないね
Solve[(Log(Sqrt(5) * x + Sqrt(5 * x^2 - 4 * (-1)^((x + 1) % 3))) - Log(2)) *2/(1 + Sqrt(5)) ==5,x]
Solve::nsmet: This system cannot be solved with the methods available to Solve.
() [] に上の式を正しくなおしたがやはりだめだ
しかしまー、数式で可逆式まで考えられるモノなのだねぇ。感心するわ。。。
>>972
大体、求まってるね。
あなたつよいわ〜。
ここまで出来たら、あとは見せ方。 念のため言っておくと、ideonは実行後コードと同じページにstdoutを表示する。
>>972
三項演算子は、返す型が同じじゃないとエラーを吐く。
doubleとchar[]になってる。 お、動いたか。
とりあえず、この辺で抜けるわ。
まったねー。
>>934
アッカーマン関数であることにやっと気がつきました… お題
括弧のネストの深さの最大値を求めよ
括弧の対応が取れていない場合は-1を出力せよ
"{}" => 1
"}{" => -1
"" => 0
"{{{}{}}}{}" => 3
>>981 Ruby
f = -> str {s = -str; (0..1.0/0).each{|i| s.gsub!('{}', '') || (break s.size.zero? ? i : -1)}}
['{}', '}{', '', '{{{}{}}}{}'].each{|e| puts "%p => %d" % [e, f[e]]}
# =>
"{}" => 1
"}{" => -1
"" => 0
"{{{}{}}}{}" => 3 >>981 Perl5
use List::Util 'max';
%h = qw({ 1 } -1);
for ('{}', '}{', '', '{{{}{}}}{}') {
($l, $m) = (0, 0);
for (map{$h{$_}} split'') {
$l += $_;
$m = max $l, $m;
last if $l < 0;
}
$m = -1 if $l;
print "'$_' => $m\n";
}
実行結果
$ perl 14_981.pl
'{}' => 1
'}{' => -1
'' => 0
'{{{}{}}}{}' => 3 >>979-980
もともと提示されてたのは式だけだし、式自体に誤差はないじゃん。アホなの?
てかさ、(-1)^((x+1)%3)で場合分けを吸収してるところは素直に上手いなぁとは思うけど元のフィボナッチ数列の式からの変形自体は高校生レベルじゃんこれ
「自分で考えたの?」てお前アホなの?
誰が解いても上の部分以外は同じになるっつーの
「2次方程式の解の公式で解きました!」
「その公式って自分で考えたの?」
くらい間抜けでアホ馬鹿丸出し生きる価値無し短小包茎白癬菌 >>417
13694289/134217728
を使えば満足するだろうか?なぜなら
(rational
0.102030405060708090
10011012013014015016
01701801902002102202
30240250260270280290
30031032033034035036
03703803904004104204
30440450460470480490
50051052053054055056
05705805906006106206
30640650660670680690
70071072073074075076
07707807908008108208
30840850860870880890
90091092093094095096
0970980990100
)
13694289/134217728 mmp
lud20191019185219ca
このスレへの固定リンク: http://5chb.net/r/tech/1558168409/ヒント:5chスレのurlに
http://xxxx.5ch
b.net/xxxx のように
bを入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像
↓「プログラミングのお題スレ Part14 ->画像>47枚 」を見た人も見ています:
・プログラミングのお題スレ Part8
・プログラミングのお題スレ Part7
・プログラミングのお題スレ Part19
・プログラミングのお題スレ Part10
・プログラミングのお題スレ Part13
・プログラミングのお題スレ Part22
・プログラミングのお題スレ
・最も美しいプログラミング言語は? Part6
・関数型プログラミング言語Haskell Part26
・関数型プログラミング言語Haskell Part32
・関数型プログラミング言語Haskell Part31
・WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part22
・WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21
・WPF(.NET, WinUI) GUIプログラミング Part30
・WPF(.NET, WinUI) GUIプログラミング Part29
・WPF(.NET, WinUI) GUIプログラミング Part26
・WPF(.NET4.x, .NET Core) GUIプログラミング Part24
・WPF(.NET4.x, .NET Core) GUIプログラミング Part23
・【プログラミング】Omega Crafter Part1【サバイバル】
・プログラミング詐欺?情報商材屋マナブ(ねずみ男・アル中)ってどうよ? Part2
・【プログラミング商材12万】情報商材屋マナブってどうよ? Part5【ブログ商材2万】
・サウンドプログラミング5
・プログラミング用フォント
・42Tokyo【プログラミング学校】
・プログラミング言語 Rust 4【ワッチョイ】
・プログラミング言語 Rust 4【ワッチョイ】
・誰でもプログラミングを学べるサイトを作成しようぜ
・ネットワークプログラミング相談室 Port27
・ネットワークプログラミング相談室 Port31
・標準的なオフィス環境だけでできるプログラミング
・大卒フリーターにオススメのプログラミング教室
・サーバー使ったプログラミングの勉強したいからお題だしてください
・Bitcoin Core ビットコインコアの重大なプログラミング欠陥
・家庭用ゲーム機でピアノやシンセ等16種類の楽器の音を選んで組合わせることが出来る専用ソフト使い作曲 ← プログラミングの授業らしい
・Mathematicaプログラミング質問箱その2 (16)
・Gtkプログラミング on Windows!!! (478)
・プログラミング学習サイトについて語るスレ (11)
・マルチプラットフォーム プログラミング言語 haXe (271)
・【マウスだけで】Scratch【プログラミング】その1 (152)
・日本語プログラミング言語『なでしこ』スレ6.1&#169;2ch.net (155)
・大学生のプログラミング雑談スレ [無断転載禁止]&#169;2ch.net (63)
・お前らプログラミング言語どうやって覚えたんや? [転載禁止]©2ch.net (635)
・自動プログラミング
・OpenMPプログラミング
・プログラミング飽きた
・OpenCLプログラミング#1
・elm(プログラミング言語)
・最強のプログラミング言語とは
・プログラミング初心者なんだが
・プログラミング始めたいんやが
・AIプログラミング技法全般
・0からプログラミング始めたい
・Maximaプログラミング質問箱
・エクセル指向プログラミング
・「数学」をプログラミングするには
・プログラミングを未経験からやるなら
・プログラミング言語 クリトリス
・暇でプログラミングするからすれ立てる。
・プログラミングを勉強したいんだけど
・プログラミングの勉強方法を30秒にまとめた
・プログラミング言語、次は何を学ぶ?
・プログラミング未経験→月4万
・MVCを意識してプログラミングをするべき
04:20:02 up 5 days, 2:23, 3 users, load average: 83.20, 96.35, 97.79
in 0.021860837936401 sec
@[email protected] on 101617
|