X



プログラミングのお題スレ Part18
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2020/07/14(火) 13:53:46.47ID:jW5p6F/e
プログラミングのお題スレです。

【出題と回答例】
1 名前:デフォルトの名無しさん
  お題:お題本文

2 名前:デフォルトの名無しさん
  >>1 使用言語
  回答本文
  結果がある場合はそれも

【ソースコードが長くなったら】 (オンラインでコードを実行できる)
https://ideone.com/
http://codepad.org/
http://compileonline.com/
http://rextester.com/runcode
https://runnable.com/
https://code.hackerearth.com/
http://melpon.org/wandbox
https://paiza.io/

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

※前スレ
プログラミングのお題スレ Part17
https://mevius.5ch.net/test/read.cgi/tech/1584031367/
0003蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 06:35:35.70ID:Tv2xtriA
前スレ996の三次元タートルグラフィックス。
懸賞WebMoney5000円です。早い者勝ち。
0006デフォルトの名無しさん
垢版 |
2020/07/16(木) 11:35:02.71ID:6HbDCmR4
普通にドン引き
なんか作って欲しいツールの作成依頼スレになりそう
出題者は解答を持ち合わせておくべきだな
0007デフォルトの名無しさん
垢版 |
2020/07/16(木) 12:31:42.58ID:II7vBdwc
短期間に複数の出題をするのはいかがなものか
前の出題を締め切ってからするべきだろう

中には解答に数ヶ月を要するものもあるので

http://itest.5ch.net/mevius/test/read.cgi/tech/1584031367/10
>0010 蟻人間 ◆T6xkBnTXz7B0 2020/03/15 04:20:
>10
>お題: 一辺2000メートルの正方形の平面上にランダムに動く物体5個がある。

http://itest.5ch.net/mevius/test/read.cgi/tech/1584031367/801
>0801 デフォルトの名無しさん 2020/06/03 15:52:13
>10 js
>能力低すぎて3か月もかかってしまった
>https://codepen.io/as124680/full/Bajapro





出題者はちゃんと評価と解答の解説を責任持って投稿下さい
0008蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 17:15:09.36ID:Tv2xtriA
【防衛システムに関する解説】
この出題は平面上の幾何学的な事象として論じられる。よって数学のベクトルの知識が必須である。
自機は中央にあり動かないのであるから、これを原点としてもよい。レーダー電波は放射状の電磁波であり、明らかに光速で直進する。
レーダーの直線の方程式は角度thetaのときr*(cos(theta), sin(theta))と書ける。すなわちレーダー角に触れれば探知される。
敵機はアニメーションの原理で動く。よってタイマーを使って一定時間ごとに位置を変化させれば動いているように見える。
位置や速度に特に指定はない。よって乱数などで決めることになる。
続く。
0009蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 17:24:04.86ID:Tv2xtriA
それぞれの敵機の位置ベクトルと速度ベクトルがあり、それらは時間の変数によって変化する。敵機の速度ベクトルを推定するために、位置ベクトルを記録せねばならない。
レーダーは360度回るのであるから、隠れ場所がなければ特定の角度となり、必ず見つかる。位置は一定時間ごとに必ずわかるはずである。
位置の変位を経過時間で割れば速度ベクトルが推定できる。位置がわかれば3平方の定理で距離がわかる。距離が近ければミサイルを
発射せねばなるまい。ミサイルを撃つ方向はatan2関数を使用すれば求められる。
【解説終わり】
0011蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 18:19:03.86ID:Tv2xtriA
【SQLサイン関数出題の解説】
ウェブや深層学習などの進展につれて、今や巨大データの扱いは、ありふれた作業となってきている。巨大データを扱う場合、データベースを使うとアクセス能力や利便性を向上できる。中でも特に一般的なSQLについて出題することにした。

しかし、SQLは方言が多くて、細かい調整はマニュアルを読まないとわからないことが多い。さらに、アクセス方法やインターフェイスが多様すぎて、こちらで解析するのは困難である。

よって採点は行わない。各自で自ら結果を確認して採点してほしい。SQLを始めるなら、まず入門書から入って、次に使用するデータベースのマニュアルを読んでもらいたい。
続く。
0012蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 18:37:28.47ID:Tv2xtriA
「精度は構わない」といったはずだ。最悪でもnearest neighborhoodを選んでも正解にした。サイン関数は波形のグラフをとる代表的な三角関数だから、高校生以上なら知ってるはずだ、知名度は高いと判断した。 周期性があるので有限のテーブル(表)で近似できる。

「SQLのみを使う」とも言っていない。SQLの外部でサイン関数の数値を計算しても正解とする。しかしテーブルは作成しなければならない。すでに作成済みの場合に備えてまず「DROP TABLE ...」する。

次にテーブルの仕様を設計して「CREATE TABLE ...」する。細かいことは...で省略するが、わからないときは入門書かマニュアルを参照して下さいな。

テーブルの行を追加するには「INSERT INTO ...」する。テーブルからサイン関数の値を問い合わせる場合は「SELECT ... FROM ... WHERE ...」する。これが実際のサイン関数の値に常識的に近ければ正解とする。
【解説終わり】
0014デフォルトの名無しさん
垢版 |
2020/07/16(木) 20:27:21.79ID:6HbDCmR4
>>12
-πから+πまでのsin関数表を元に-∞から+∞までのsin関数をNN法を使って完成させろという意味だったのか
0016蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 21:05:05.23ID:Tv2xtriA
>>8
訂正。
(誤) 方程式はr*(cos(theta), sin(theta))と書ける。
(正) 方程式は(x, y) == r*(cos(theta), sin(theta))と書ける。
0017デフォルトの名無しさん
垢版 |
2020/07/16(木) 21:10:19.03ID:6HbDCmR4
提出済みのコードに
x_hat%(2*π)-π
を加えれば絶対値が大きな任意の数にも対応出来る
0018デフォルトの名無しさん
垢版 |
2020/07/16(木) 21:11:26.01ID:6HbDCmR4
>>17
はsin関数の問題の話ね
0019デフォルトの名無しさん
垢版 |
2020/07/16(木) 21:27:56.16ID:Zj8FcZKn
>>8
敵機?
ランダムに動く物体でしょ
慣性が働くとも書いてないし連続で動くとも書いてない
各瞬間ランダム位置に出現なのかもしれない

>>9
ランダムに動く物体5個を区別出来るなんて書いてない
距離と方向がわかるとだけ

予測した位置と移動速度、移動方向から推測してミサイルを打つ方向を決める必要がある
その方向決めという重要な部分が書いてない

0点
0021デフォルトの名無しさん
垢版 |
2020/07/16(木) 21:44:35.29ID:Zj8FcZKn
>>17
任意のは言い過ぎ
値が大きいと有効桁ゼロになる

精度は問わないといっても有効桁ゼロはさすがにダメと思う
0022蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 21:54:34.68ID:Tv2xtriA
物体の現在位置: (px, py)
物体の推定速度: (vx, vy)
ミサイルの速さ: mv
距離:sqrt(px**2+py**2)
到達にかかる時間: t_star==sqrt(px**2+py**2)/mv
到達までにかかる時間を加味した物体の予想位置:
(px+t_star*vx, py+t_star*vy)
ここまでの計算を繰り返し、誤差を減少させる。
結果の衝突予想位置にatan2に施すとミサイルの発射方向が得られる。
0023デフォルトの名無しさん
垢版 |
2020/07/16(木) 22:05:54.70ID:6HbDCmR4
>>21
はいすみません
x_hatがπ以上の正の場合
x_hatが-π以下の負の場合
それ以外の場合で式を分ける必要がありそう
0027蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 22:32:18.70ID:Tv2xtriA
昔はモンキーハンティングとかのシミュレーションやったよ
0031蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 22:37:12.00ID:Tv2xtriA
他に剛体球の衝突とか、太陽系の表示とか、万有引力とか。
0032蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/16(木) 23:19:59.45ID:Tv2xtriA
高校レベルの数学でごめんね.

v:ミサイルの速さ。
d:ミサイルの方向ベクトル。
t: 時刻。
P: 物体の現在位置。
V: 物体の推定速度。
方程式v*d*t==P+V*t.
移項して
(v*d - V)*t==P.
t==P・(v*d - V)/||v*d - V||**2.
0033デフォルトの名無しさん
垢版 |
2020/07/17(金) 04:33:22.78ID:MbWzFU1J
>>17
訂正

まず、0〜2*πのsin関数表を作成する
その後、
x_hat>=0 の場合: x_hat%(2*π)
x_hat<0の場合: 2*π + x_hat%(-2*π)
という式でx_hatを変換して上書きする
0035デフォルトの名無しさん
垢版 |
2020/07/17(金) 08:57:31.48ID:ICqzduEx
解答側だと頭悪いと煽られるから出題側に回ってたわけか
まあ出題も頭悪そうだったが
0036デフォルトの名無しさん
垢版 |
2020/07/17(金) 09:13:31.04ID:TqoFz7RF
回答例用意してなくても出題していいと思う
でもニッチすぎる問題で知識ひけらかしてるみたいな出題は例出してくれ
0037蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 10:03:37.90ID:+x+SJT9l
P + V*t==v*d*t.
二乗すればdが消えて
|P|**2 + 2*P・V*t + |V|**2*t**2 == (v*t)**2.
これはtの二次方程式であるから整理して解の公式で解ける。
t<0のときは過去になるので除外する。
0038デフォルトの名無しさん
垢版 |
2020/07/17(金) 10:05:01.15ID:2gsvlStU
>>1 スレ一覧

1: https://toro.5ch.net/test/read.cgi/tech/1354393458/
2: https://toro.5ch.net/test/read.cgi/tech/1357191974/
3: https://peace.5ch.net/test/read.cgi/tech/1390525149/
4: https://peace.5ch.net/test/read.cgi/tech/1402622093/
5: https://peace.5ch.net/test/read.cgi/tech/1411227287/
6: https://peace.5ch.net/test/read.cgi/tech/1418278634/
7: https://peace.5ch.net/test/read.cgi/tech/1429195275/
8: http://echo.5ch.net/test/read.cgi/tech/1444216746/
9: https://mevius.5ch.net/test/read.cgi/tech/1480579110/
10: https://mevius.5ch.net/test/read.cgi/tech/1514772904/
11: https://mevius.5ch.net/test/read.cgi/tech/1524570314/
12: https://mevius.5ch.net/test/read.cgi/tech/1538096947/
13: https://mevius.5ch.net/test/read.cgi/tech/1549160513/
14: https://mevius.5ch.net/test/read.cgi/tech/1558168409/
15: https://mevius.5ch.net/test/read.cgi/tech/1564310397/
16: https://mevius.5ch.net/test/read.cgi/tech/1573948822/
17: https://mevius.5ch.net/test/read.cgi/tech/1584031367/
0040蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 11:00:53.76ID:+x+SJT9l
三次元タートルで臓器を描画したら、レオナルド・ダ・ヴィンチのような天才になれるかもよ。
今、3Dプリンタのブームで三次元タートルグラフィックスは需要があるから、面白いことになるよ。
0044蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 12:50:28.20ID:+x+SJT9l
レーダー角の順番に物体をソートし、各物体に番号を付ける。レーダー角において物体が重なれば重複する恐れがあるが、とくに問題ではない。重複した物体が離れたときに、新規の物体の出現と見なせばいい。

前回と前々回の観測により、位置と速度が推測できる。次に予想される出現位置に一番近い物体を選択し、番号を関連付ければ同定できる。
0045デフォルトの名無しさん
垢版 |
2020/07/17(金) 13:19:51.15ID:MbWzFU1J
>>36
チューリングマシンは現場でバリバリ使える調べて覚えるだけの価値がある技術だ
規則が連続している場合上の方を取ってくるとか2つの数値を比較して大小関係をルールにするといったことが出来る
正規表現で数値を取ってきてプログラミング言語で比較処理するより構造的に書ける
だから解答を用意した上でまずは簡単なお題から出して、次は少し難易度を上げるようなお題を考えながら待っていたが誰も解答しなかった
0046デフォルトの名無しさん
垢版 |
2020/07/17(金) 13:33:42.70ID:TqoFz7RF
>>45
どの言語でも使えるアルゴリズム?設計パターンなの?
理論だから賞味期限の長い知識なのはわかるけど優先的に教えられないのはなぜ?
0049デフォルトの名無しさん
垢版 |
2020/07/17(金) 13:40:10.41ID:Jbjf6afq
CFGのクラスのものを例題にしたから意図したような回答がなかったんじゃないかと
0050デフォルトの名無しさん
垢版 |
2020/07/17(金) 14:08:20.12ID:x8K2tEcw
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
0052蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 15:18:45.55ID:+x+SJT9l
ステルス機とか、超音速機とか、プラズマ兵器とかのことか。

それらは想定外だよ。
0053蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 15:23:09.49ID:+x+SJT9l
プラズマ兵器は、実戦で使われた記録はないし、超音速でもレーダー網からは捕捉出来る。

ステルスは想定外。
0054蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 16:57:04.24ID:+x+SJT9l
防衛システムの歯無しは終わり。

次は三次元タートルグラフィックス。位置と向きの情報を持ったタートル(亀)を操作して、面白い図形を描こうというお話。平面じゃないよ、立体だよ。

レンダリングを何にするか。OpenGLは終わったし、DirectDrawは初心者には難しいし。そうだ、JavaScriptのThree.jsにしよう。これならスマホでも確認できるね。使ったことないけど。
0057蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 18:31:00.92ID:+x+SJT9l
さて、亀は三次元の座標データP=(x, y, z)と三次元の方向ベクトルD=(dx, dy, dz) (単位ベクトルとする)で表せる訳だが、
線分を一つ引くごとに、線分を指定した位置に世界に追加する。世界の観測者の視点であるカメラは、テキトーな位置と方向で設置しておく。
描画ルーチンは、世界に追加された線分群をまとめて描く。描画エンジンは遠近法により、奥行きを持った映像を完成する。
0058蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 18:35:56.95ID:+x+SJT9l
小さなお題: Three.jsで三次元空間に線分を一本描画せよ。
0059デフォルトの名無しさん
垢版 |
2020/07/17(金) 20:07:34.26ID:Q6g2SqxJ
だめだ
何をいっているのだか私にはさっぱり
0061◆QZaw55cn4c
垢版 |
2020/07/17(金) 20:39:05.23ID:zSX7HXP2
>>60
NGワードなんてスルー能力の足りない人が使うものですよ、私は全然使いませんね、だって必要ないし…
0064蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/17(金) 21:29:05.44ID:hZ0JaeyU
これを応用すれば、スマホでも動作するブラウザゲームを自分で作って
ゲーム会社を立ち上げることができるかも。

Three.jsがどんなものかは、

https://threejs.org/

を見ればたぶんわかる。三次元を描画するものだ。
0066デフォルトの名無しさん
垢版 |
2020/07/18(土) 00:01:47.57ID:tp8HW1uL
ついに蟻人間は、3次元まで行ってしまったか

その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw
0067デフォルトの名無しさん
垢版 |
2020/07/18(土) 00:03:54.77ID:wH8oKg8v
>>58
分かり難いけど、描けました。
https://i.imgur.com/XZgoOTV.gif
P0(0,0,0)-P1(100,100,100)です。

//形状オブジェクトの宣言と生成
var geometry3 = new THREE.Geometry();

geometry3.vertices.push( new THREE.Vector3(0, 0, 0) );

geometry3.vertices.push( new THREE.Vector3(100, 100, 100) );

//材質オブジェクトの宣言と生成
var material3 = new THREE.LineBasicMaterial({ color: 0xFFFFFF, transparent:true,
linewidth: 8,
opacity:0.5 });
//線オブジェクトの生成
lines = new THREE.LineSegments(geometry3, material3);
//線オブジェクトのシーンへの追加
scene.add(lines);
0068デフォルトの名無しさん
垢版 |
2020/07/18(土) 06:18:45.66ID:yeg1h1ii
お題:何らかの数式のグラフとしてハート形を出力せよ。
使用する言語は問わない。
0069デフォルトの名無しさん
垢版 |
2020/07/18(土) 10:23:44.89ID:Z+cMIoZ7
>>68
HTML5,JavaScript
<canvas id="cv" width="360" height="360"></canvas>
<script>
var ctx = document.getElementById("cv").getContext("2d");
ctx.lineWidth = 5; //線の太さ
ctx.strokeStyle = "red";
ctx.beginPath();
var r=10;var x0=0,y0=0;

for(i=0;i<=360;i+=5){

var d = i*Math.PI/180;

x0= r*(16*Math.sin(d)*Math.sin(d)*Math.sin(d));
y0= r*(13*Math.cos(d)-5*Math.cos(2*d)-2*Math.cos(3*d)-Math.cos(4*d));
ctx.lineTo(w+x0,h-y0);
}

ctx.stroke();
</script>

https://i.imgur.com/9tjfBmv.png
0070デフォルトの名無しさん
垢版 |
2020/07/18(土) 10:47:53.29ID:zLRZfcZE
>>68 Lua
for y=1.5,-1.5,-0.1 do
for x=-2,2,0.1 do
if (x^2+y^2-1)^3-x^2*y^3<0 then
io.write("@@")
else
io.write("__")
end
end
print()
end
0072デフォルトの名無しさん
垢版 |
2020/07/18(土) 11:55:01.11ID:n7a2F8Nj
>>45
このスレでは誰もお題に答えないということがよくある
俺もお題出したことがあるがそういう時があった
0075デフォルトの名無しさん
垢版 |
2020/07/18(土) 12:41:40.41ID:55gPHPOJ
>>71
どこらへんが問題なのかを言わないと次も同じ問題を起こす可能性がある
0076デフォルトの名無しさん
垢版 |
2020/07/18(土) 12:45:26.81ID:55gPHPOJ
すぐに論破されることを言う奴って何が目的なんだろう
5chを見下してるのかもしれないな
こんなサイトみてる奴は大したことないって思ってるから油断して非論理的な発言をするのかと思った
0077デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:00:12.87ID:Gf2oPXpD
どこに問題があるかなんて前スレでさんざん言われてただろ
あれで理解できないなら一生理解できないだろうね
0079デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:06:42.15ID:55gPHPOJ
>>77
指摘された問題点はすべて返信していてその返信に対する返信はない
つまり指摘された問題点はすべて間違っていて問題点は見つかっていない
>>78
Pythonで20行弱で書けることは伝えている
となると難易度がこのスレの住人には高すぎたということか...
0080デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:09:37.97ID:LD7t+FRX
イキり臭ただようコメントですね
0081デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:14:16.81ID:LD7t+FRX
問題の良し悪しよりも出題者の態度が気に入らないから取り組まない人がいるんじゃないかな
自分の正当性を主張するだけではダメで回答者のモチベーションを上げる方向に導かないと
コミュニケーションが未熟なだけだと思いました
0082デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:17:55.61ID:LD7t+FRX
線形拘束オートマトンでこの問題解いてみて!
線形拘束オートマトンはこういう仕組みで、こういうところでも活用できるから知ってると便利だよ!
みたいにポジティブアゲアゲでいかないと
0083デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:20:22.31ID:55gPHPOJ
>>81
なるほどーそれは>>1に書いとくべきだな
皆んなから好かれる人の出題しか解答しませんよって
出題にも手間がかかるわけだからそういうのは普通に不誠実だと思う
0085デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:23:11.61ID:55gPHPOJ
>>82
仕組みというか解説は書けるなら書きたかったな
悩んだがそんなに難しくないと思ったから止めといた
0086デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:02:48.54ID:LD7t+FRX
>>83
ルールとして決める必要はなくて
一般的なコミュニケーションのとり方としてレスポンスが欲しいなら
自分の正当性だけを主張するやり方だと難しいよってこと
自分がこんなに頑張って問題書いたんだ、答えがないのは不誠実だ、そんな自己中発揮してたらレスポンスなくて当然かと
0087デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:06:16.09ID:LD7t+FRX
線形拘束オートマトンが実装できるってすごいことだから
模範解答示したら良いと思うよ
0088デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:14:52.95ID:ICGznoJS
>>83
難度がうんぬんよりも問題文読んだ時点で作問者の頭が悪そう(使ってる言葉の意味わかってなさそう)って思ってスルーしたわ
ここのコテハンも同じ理由でスルー
ただ、面白そうなら気まぐれで解くこともある
解く方も出す方も好きにしたら良い
0089デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:36:05.17ID:55gPHPOJ
>>86
答えがないから不誠実なのではなくて
出題者に伝えておくべき情報が>>1に書かれていないのならそれは不誠実ということ

>>71は次のように言っている
「皆んながお前の出題に問題があると思っている」
俺は今後のためにも当然次の疑問が生まれ、それを伝えた「どこらへんが?難易度が高すぎた?」
そこで君が「難易度よりむしろマナーに問題がある」という趣旨の発言をした
そうなると俺は「>>1にマナーの具体的な内容を書くべき」
そうしないと同じ問題を起こしてしまうから
0090デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:41:12.58ID:LD7t+FRX
>>89
ルールとして書くまでもなく一般的なコミュニケーションのことだから
>>1に書かれてなくても良いし、それが無いがゆえにできなかったのだという
態度が自己中ってこと
0091デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:42:30.19ID:LD7t+FRX
問題を起こしてしまうの主語は君がってことだよね? 君がコミュニケーション能力を身につければ解決すると思うのだけれども
0092デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:42:36.88ID:vTEAacne
解いてみたいと思えない内容の上に長文でうざい
っていう感情論に近いものを明文化すんのはちょっと難しいね
0093デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:50:16.06ID:LD7t+FRX
客観的に難易度は高いと思うよ
少なくとも僕は実装したこと無い
有限オートマトンが精一杯

自分で「難易度がこのスレの住人には高すぎたということか」と言ってしまうのはイキりだと思った
難易度+高慢な態度 ってところかと
0094デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:08:41.26ID:n7a2F8Nj
あるいは進行形で解いてるやつがいるかもしれないな
なんたってこのスレの最長解答時間は3ヵ月だからなw
0095デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:10:20.71ID:LD7t+FRX
レーダーのお題でしょ、あれは感動した
0096デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:12:42.37ID:LD7t+FRX
チューリングマシンのお題は、僕も解いて見ようと思ってWikipedia読んでる
0097デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:13:54.80ID:LD7t+FRX
最高のチューリングマシンを見せてやるぜ、必ず帰ってくるからな、帰ったら結婚しよう
0099デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:29:31.73ID:Bt+NBO6d
>>83
気に入らない奴は相手にされないなんて、人と人とのコミュニケーションが発生する場所なら何処でもそうだろう。仕事などの個人の感情よりやるべきことを優先すべき場面を除いては。
書かれてないから知らないなんて、小学生の屁理屈にも劣る反応だな。
0100デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:34:22.37ID:55gPHPOJ
新しいことを学ぶのは素晴らしいと思うけど今まで2週間以上同じスレに居たことがないから責任持てないなぁ
現場でバリバリ使う為にはε-非決定性オートマトンとかも知っとかないと実用的じゃなくなるから学習に意味を見いだすのはかなり難しいと思うよ
0101◆QZaw55cn4c
垢版 |
2020/07/18(土) 15:41:54.65ID:KIRMqycZ
>>100
非決定オートマトンを決定性オートマトンにする、とかいうお題は、やっぱりマニアックすぎますかね?
今そういう本をよんでポチポチコードを書いているので、需要があるようなら出題&採点してもいいかなって思ってます
0102デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:47:29.51ID:55gPHPOJ
>>101
需要があるかは分からないけどとてもいいと思うよ
0104デフォルトの名無しさん
垢版 |
2020/07/18(土) 16:51:46.46ID:2TKjWEFt
sedでいいんじゃね
0105デフォルトの名無しさん
垢版 |
2020/07/18(土) 18:01:09.47ID:k5pKf1DO
>>81
まあしかし何かが出題されたら必ず誰かが解かねばならないわけでもないしな。義務は何もないからこうでなければいけないという事もない。
010669
垢版 |
2020/07/18(土) 19:43:00.59ID:BZh66Ti/
>>74
ありがとう❣、チャレンジして良かったよ!
出題者からはなんの評価も解説もされないので
そういう反応が返って来ると嬉しい。
また、次のモチベーションに繋がる。

教科書とか勉強中のコラムとかコーヒーブレイクみたいな
息抜き程度の頭の体操になるような手軽なお題の方が答えやすいね。
結局は出題者も回答者も自己満足でしか無いから、
初級〜中級者向けくらいが丁度良いかも?
0107デフォルトの名無しさん
垢版 |
2020/07/18(土) 20:06:14.32ID:tp8HW1uL
>>69
こういうコードを見ると、jagarikin の「スーパー鳥スロット」を思い出すw

画像ファイルが1つもなく、こういうコードばっかりだったw
0108デフォルトの名無しさん
垢版 |
2020/07/18(土) 20:44:45.69ID:naIVYT0v
>>107
コードのキレイさなら>>70かもしれませんが
お題はコードを出力するのではなくハート形を出力せよとのことでしたから
初心者がチャレンジしたコードなのでスマートな書き方でないのは御勘弁下さいorz
010968
垢版 |
2020/07/18(土) 21:39:17.47ID:yeg1h1ii
いろんな回答を見たかったので早期の論評は控えてました。
>>69の出力は出題者もきれいだなって思います。
想定していたコードはどちらかいうと>>70に近くて
http://codepad.org/ICpm3J6j
こんな感じの簡単な式(x^2+y^2<100-|x|y)でも充分かなと思ってました。

ハート形を生成できる式はいくつか知られているので、バリエーションを探ってみるのはいいかなと思います。
0111蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 14:05:25.72ID:GV3E92FC
>>110 答え:
function koch(degree, step) {
  if (degree == 0) {
    walk(step);
  } else {
    koch(degree - 1, step/3);
    turn_angle(60);
    koch(degree - 1, step/3);
    turn_angle(-120);
    koch(degree - 1, step/3);
    turn_angle(60);
    koch(degree - 1, step/3);
  }
}
function draw() {
  set_pos(0, 0, 0);
  set_dir(100, 0, 0);
  koch(5, 75);
}
0112蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 14:45:30.46ID:GV3E92FC
小さなお題: >>110 の(1)のturn_dir関数とturn_angle関数を3次元に拡張し、
3次元タートルグラフィックスを可能にせよ。

ただし、turn_dirの引数は長さ1の方向ベクトルとし、turn_angleの引数は角度とする。
turn_dirは、引数dzが0のとき、変更前と同じ動作にせよ。
また、turn_angleの引数にもう一つの角度を追加し、追加した角度がゼロのとき、
変更前と同じ動作にせよ。

ヒント:四元数
0113デフォルトの名無しさん
垢版 |
2020/07/19(日) 14:48:01.51ID:EiEVeWaP


66 名前:デフォルトの名無しさん[sage] 投稿日:2020/07/18(土) 00:01:47.57 ID:tp8HW1uL [1/2]
ついに蟻人間は、3次元まで行ってしまったか

その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw
0115デフォルトの名無しさん
垢版 |
2020/07/19(日) 21:45:13.46ID:h5vFOzT4
頭が悪いことがばれたからって
必死に数学の知識を見せようと頑張ってる

でも頭の悪さが随所に滲み出てる
自覚のないアホ
0116蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 21:56:49.40ID:GV3E92FC
>>115 数学出来るなら手伝ってくれよ。。。これから面白くなるから。

function turn_angle(angle1, angle2) {
// x-y平面上のangle1度の方向ベクトル(dx, dy)。
var dx = Math.cos(angle1 * Math.PI / 180);
var dy = Math.sin(angle1 * Math.PI / 180);

// (dx, dy, 0)をx軸を中心にangle2度回転したものを(dx, dy, dz)とする。
...(ここに何か書く)...

// 実際に回転させる。
turn_dir(dx, dy, dz);
}
0117デフォルトの名無しさん
垢版 |
2020/07/19(日) 21:57:24.56ID:5kiTFqsE
誰もイキらずに淡々と問題と答えのレスだけ並んでく雰囲気は良さを感じたけど
やっぱクソコテって怖いな
0118蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 22:06:51.03ID:GV3E92FC
>>116
dz = dy * Math.sin(angle2 * Math.PI / 180);
dy *= Math.cos(angle2 * Math.PI / 180);

次は、三次元のturn_dirね。数学、スゴクデキルんでしょ?
0119蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 22:12:10.73ID:GV3E92FC
お題: JavaScript
function turn_dir(dx, dy, dz) {
// (dx, dy, dz)は長さ1の方向ベクトル。
// 長さ1の方向ベクトル(turtle_dx, turtle_dy, turtle_dz)を(dx, dy, dz)だけ回転させる。
...(ここに何か書く)...
}
0120蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 22:16:20.98ID:GV3E92FC
♪はい、コーディングいってみよー!

はいはいはい、はいはいはい!
0121蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/19(日) 23:32:08.26ID:T8vbWyFG
俺はそういう悪評トリックに引っ掛からないよ。間違いは的確に指摘頂きたい。
0122デフォルトの名無しさん
垢版 |
2020/07/20(月) 06:57:18.16ID:P7t0RBc6
>>110-121
(1)のソースにオービットコントロールを付けると楽しいですよ。

<!-- OrbitControls.jsファイルソース読込 -->
<script src="./three.js-master/examples/js/controls/OrbitControls.js"></script>

//controls変数宣言追加
var scene, renderer, camera, controls;

function init() {//イニシャライズの
・・・
camera.lookAt(0, 0, 0);

//controlsインスタンス生成してカメラとレンダラー渡すだけ
controls = new THREE.OrbitControls( camera, renderer.domElement );

scene = new THREE.Scene();

//ついでに座標軸表示もおすすめ
scene.add( new THREE.AxisHelper(50) );

}
https://i.imgur.com/uFIgx6x.png
0123デフォルトの名無しさん
垢版 |
2020/07/20(月) 07:42:33.17ID:ozWDjdlg
>>118
やってみたよ
function turn_angle(angle1, angle2) {
if( !angle2 || angle2==0){
turn_dir(Math.cos(angle1 * Math.PI / 180), Math.sin(angle1 * Math.PI / 180), 0);
}else{
// x-y平面上のangle1度の方向ベクトル(dx, dy)。
var dx = Math.cos(angle1 * Math.PI / 180);
var dy = Math.sin(angle1 * Math.PI / 180);

// (dx, dy, 0)をx軸を中心にangle2度回転したものを(dx, dy, dz)とする。
var dz = dy * Math.sin(angle2 * Math.PI / 180);
//dy *= Math.cos(angle2 * Math.PI / 180);
turtle_dz = dz;
// 実際に回転させる。
turn_dir(dx, dy, dz);
}

}
function draw() {
set_pos(0, 0, 0);
set_dir(0, 100, 0);
for (var i = 0; i < 18; ++i) {
walk(15);
//turn_angle(45);
turn_angle(45, 20);
}
}
https://i.imgur.com/CdQvIDR.png

https://i.imgur.com/G4HUVBh.png
0125デフォルトの名無しさん
垢版 |
2020/07/20(月) 16:08:13.13ID:UHinuGOV
お題じゃなくて作成依頼ですか?w
0126蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/20(月) 16:16:33.54ID:6GFyBW1T
こういうのは数学が鬼ズバできる猛者に任せたい所だが。。。
報酬は出しちゃいかんのか。
0128デフォルトの名無しさん
垢版 |
2020/07/20(月) 17:58:58.92ID:8mFfSXNu
いや、そういう猛者がいるところに依頼してこいよ
報酬出すんならランサーズとかにでも行ってこい
なんでここで話題にするんだ
0132蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/20(月) 23:47:38.07ID:6GFyBW1T
やろうとしてるのは、三次元フラクタルと臓器の実体化だから、超複雑な図形を再帰で描くことになる。再帰が多ければ確かに計算量は爆発するよ。
0134アンスタ7.2日目 ◆mqSs/N.hZs
垢版 |
2020/07/20(月) 23:54:27.58ID:5ka8Ymx5
>>124
https://i.imgur.com/Kkti3xQ.gif
タートルグラフィックスTreeの平面化
https://i.imgur.com/hNNvsE0.gif
3次元にしたいのか平面にしたいのかどっちなんだか。。。
変更箇所↓
function turn_angle(angle1, angle2=0) {
 var dx = Math.cos(angle1 * Math.PI / 180);
 var dy = Math.sin(angle1 * Math.PI / 180);
 angle2 += turtle_spin;
 var dz = dy * Math.sin(angle2 * Math.PI / 180);
 //dy *= Math.cos(angle2 * Math.PI / 180);
 turtle_z = dz;
 turn_dir(dx, dy, dz);
}
function draw() {
 //set_pos(0, 0, 0);
 set_dir(0, 100, 0);
 //koch(6, 50);
 set_pos(0, 0, 0);
 //set_dir(0, 100, 100);
 tree(10, 40, 10);
}
0137デフォルトの名無しさん
垢版 |
2020/07/22(水) 22:25:22.87ID:ILXZvJ+B
「1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍」
…が、なんとなく成り立っているように感じられるプログラムを作って発表せよ。
0138デフォルトの名無しさん
垢版 |
2020/07/22(水) 22:30:15.48ID:IwIxQ1Ze
お題: ランダムな整数が格納された長さNの配列から、偶数の要素のみを抜き出せ
Nは任意とする
0144デフォルトの名無しさん
垢版 |
2020/07/24(金) 00:24:32.57ID:F0SZWNxk
>>138 Python
import random
N = 10
MAX = 100
[x for x in random.sample(range(MAX), N) if x % 2 == 0]
0145デフォルトの名無しさん
垢版 |
2020/07/24(金) 03:32:41.61ID:6ZonvnML
>>137
なんとなく結果を2進数(あるいは通常の10進数以外の表現)で出せば良いだけのような気がするが・・・

Perl だとこんな感じで 10 が出る。

printf "%b\n", 1 + 1;
0146デフォルトの名無しさん
垢版 |
2020/07/24(金) 03:47:06.33ID:6ZonvnML
>>138
Kotlin 及び Kotlin Script ではこんな風になる(a が元の配列または List)。

val b = a.filter { (it % 2) == 0 }

もちろん比較部分は (it and 1) == 0 等でも良い。it が偶数の時に true になりさえすればなんでも良い。

配列の要素数の N についてはここでは考える必要なし。
要素の型が Int かどうかも考える必要なしだが、% 2 の計算ができないとか結果が Int の 0 と比較できなければコンパイルエラー、または Script なら読んだ直後の文法チェック時にエラーだと思う。
0147デフォルトの名無しさん
垢版 |
2020/07/25(土) 07:02:03.31ID:j1aQFTSL
>>138Julia
a=1:10
a[iseven.(a)]
0149デフォルトの名無しさん
垢版 |
2020/07/26(日) 11:42:26.03ID:467XWCJo
>>138
ランダムは副作用なので、ちと面倒臭い。
(厳密には擬似乱数を作る為の種(newStdGen)だけが副作用)

Haskell

import System.Random

main = f 10 >>= print

f :: Int -> IO [Int]
f n = newStdGen >>= return.filter even.take n.randomRs (1,100)

実行結果

[56,70,100]

型指定しないと型推論が働かない。
(生成される乱数が整数とは限らない為)

戻り値は型で分かる通り、普通のリストでは無くIOなリスト。
newStdGenを使っているので、IOな値を返さないといけない。
(printもIO ()を返すのでreturnをprintに置き換えて直接出力も可能ではある)

randomRs (1,100) で1から100までの乱数の無限リストを生成。
後はtakeで無限リストから任意の個数を取り出してfilterするだけ。
(takeとfilterは順番が逆だと乱数の無限リストから偶数を任意の個数取り出すので問題の意図と違ってしまう)

問題が「出力しろ」では無く「抜き出せ」なので、あえてprintは関数の外に置いた。
0152デフォルトの名無しさん
垢版 |
2020/07/26(日) 12:16:01.64ID:yLhsD6tn
>>151
まあね。
安全なコードを書き易いと取るか、面倒くさいと取るかやね。
0153デフォルトの名無しさん
垢版 |
2020/07/26(日) 12:31:12.02ID:XQciIU0B
お題
2つの文字列の差を[]で囲って出力してください

例1
入力:abc adc
出力:a[b]c

例2
入力:abc acd
出力:a[bc]

例3
入力:abc bcc
出力:[ab]c
0154デフォルトの名無しさん
垢版 |
2020/07/26(日) 15:30:12.41ID:yLhsD6tn
>>153

Haskell

一応、長さが違う場合、短い方に合わせる様にしてみた。
テストし切れてないかもなので、バグに気付いたら教えて下しあ。

main = putStrLn $ g "abcdefrh" "acdgefggn"

f False [] _ =[]
f False _ [] =[]
f True [] _ = "]":[]
f True _ [] = "]":[]
f flg (x:xs) (y:ys) | flg == True && x == y = ("]" ++ [x]):f False xs ys
f flg (x:xs) (y:ys) | x == y = [x]:f False xs ys
f flg (x:xs) (y:ys) | flg == False = ("[" ++ [x]):f True xs ys
f flg (x:xs) (y:ys) | flg == True = [x]:f flg xs ys

g xs = concat.f False xs

実行結果

"a[bcd]ef[rh]"
0155デフォルトの名無しさん
垢版 |
2020/07/26(日) 17:41:12.51ID:1PJx+gwa
やっぱフラグしかないのか?
0156デフォルトの名無しさん
垢版 |
2020/07/26(日) 19:21:26.42ID:+ODzYEeD
>>153 Ruby
def resolve( s )
f = true
ss = s.split.map{|w| w.chars }
ss[0].zip( ss[1] ).inject(''){|r, (c,d)|
r << ( (f)? '[': ']' ) if (c == d) != f
f = c == d
r << c
} + ((f)? '' : ']')
end

[ "abc adc", "abc acd", "abc bcc" ].each{|s|
puts "入力:#{s}"
puts "出力:#{resolve( s )}\n\n"
}
0157デフォルトの名無しさん
垢版 |
2020/07/26(日) 23:12:10.92ID:3QUkzPB/
>>155

確かこんなのあったな〜・・・と、inword/outword関数の相互再帰で書いてみた。

Haskell

main = (putStrLn.f "abcdefrt") "acdgefgg"

f xs ys | g xs ys =[]
f (x:xs) (y:ys) | x == y = outword (x:xs) (y:ys)
f xs ys = inword xs ys

inword xs ys | g xs ys = ']':[]
inword (x:xs) (y:ys) | x == y = ']':x:outword xs ys
inword (x:xs) (_:ys) = x:inword xs ys

outword xs ys | g xs ys = []
outword (x:xs) (y:ys) | x == y = x:outword xs ys
outword (x:xs) (_:ys) = '[':x:inword xs ys

g xs ys = or [null xs, null ys]
0158デフォルトの名無しさん
垢版 |
2020/07/29(水) 09:26:50.38ID:yJ6wpcWu
お題1
じゃんけんを実装してください
1 = ぐー
2 = ちょき
3 = ぱー

入力: 1
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです

お題2
あなたの勝率を指定できるようにしてください
勝率は0.0〜1.0で入力します

入力: 1 0.7
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです
0159デフォルトの名無しさん
垢版 |
2020/07/29(水) 22:59:47.88ID:tovqwAmw
>>158 Ruby

JANKEN = %w[Goo Chocky Parr]
KEKKA = %w[Win Lose Draw]

#お題1
odai1 = -> n do
    r = rand(3)
    'You: %s, Com: %s. %s' % [JANKEN[n - 1], JANKEN[(n + r) % 3], KEKKA[r]]
end

puts odai1[1] # => You: Goo, Com: Chocky. Win
puts odai1[2] # => You: Chocky, Com: Goo. Lose
puts odai1[3] # => You: Par, Com: Par. Draw

#お題2
odai2 = -> (n, p) do
    r = rand < p ? 0 : rand(2) + 1
    'You: %s, Com: %s. %s' % [JANKEN[n - 1], JANKEN[(n + r) % 3], KEKKA[r]]
end

puts odai2[1, 0] # => You: Goo, Com: Par. Lose
puts odai2[2, 1] # => You: Goo, Com: Chocky. Win
puts odai2[3, 0.3] # => You: Par, Com: Chocky. Lose
puts odai2[3, 0.3] # => You: Par, Com: Goo. Win
puts odai2[3, 0.3] # => You: Par, Com: Par. Draw
puts odai2[3, 0.3] # => You: Par, Com: Chocky. Lose
0163蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/07/29(水) 23:42:09.78ID:hGtKVe2E
子ども国会で、グー、チョキ、パーのつづりを次のように閣議決定しました。

グーはgoo、
チョキはchoki、
パーはpar、
ジャンケンはJankenとする。
0165デフォルトの名無しさん
垢版 |
2020/07/30(木) 15:16:52.35ID:cH8Va6i2
自然数AとBがあります
A * B ではない方法で、AとBを掛けた結果を求めなさい。
ただし、AとBは4バイトの数値型で、どのような値が入ってきても
実施してからなるべく近い時間で計算終了する方が高得点とします。
0166デフォルトの名無しさん
垢版 |
2020/07/30(木) 15:58:10.10ID:aEaasmNp
>>165 Ruby
def multiply( a, b )
ans = 0
while a > 0
ans += b if a.odd?
a >>= 1
b <<= 1
end
ans
end

multiply( 0x12345678, 0x87654321 ) #=> 693779765864729976
0167デフォルトの名無しさん
垢版 |
2020/08/01(土) 20:01:40.49ID:eF75V+Af
>>165

import Math;

int kakezan(a, b) {
int min, max = Math.sort([a, b]);
if(min == 0) return 0;
return Math.square(min) + kakezan(min, max - min);
}

printf(kakezan(0x12345678, 0x87654321)); // 693779765864729976
0168デフォルトの名無しさん
垢版 |
2020/08/01(土) 21:52:47.76ID:xRTQ61eG
>>165
function mul(a, b) {
let prod = 0;
const unit = Math.sign(a) + Math.sign(b) ? 1 : -1;
for (let i = 0; i < Math.abs(a); i++)
for (let j = 0; j < Math.abs(b); j++)
prod += unit;
return prod;
}
console.log(mul(-6, -7)); //=> 42
console.log(mul(-6, 7)); //=> -42

低得点ww
0169デフォルトの名無しさん
垢版 |
2020/08/04(火) 03:43:27.41ID:DYgISIVe
お題: 文字列の格納された配列から重複した文字列を削除し昇順にソートせよ

['apple', 'banana', 'apple', 'chikuwa']

['apple', 'banana', 'chikuwa']
0171デフォルトの名無しさん
垢版 |
2020/08/04(火) 05:05:40.50ID:YeoxtHaI
>>153 Ruby

def resolve( str )
res = String.new # 戻り値
flag = false # [ だけを付けて、まだ ] で閉じていない状態が、true
ary = str.split # 空白で、2つに分離する

ary[ 0 ].chars.zip( ary[ 1 ].chars ) do |c0, c1| # 1文字ずつ比較する
if c0 == c1
if flag
res = res + ']' + c0
flag = false
else
res += c0
end

else
if flag
res += c0
else
res = res + '[' + c0
flag = true
end
end
end
res += ']' if flag # もし閉じていない場合は、閉じる
res
end

[ "abc adc", "abc acd", "abc bcc" ].each{ |str|
print "入力: #{ str }\n" + "出力: #{ resolve( str ) }\n\n"
}
0172デフォルトの名無しさん
垢版 |
2020/08/04(火) 18:06:57.21ID:Bm48LwqI
>>169
Kotlin または Kotlin script でのやり方

a が Array<String> または List<String> でそこに元の文字列が入っているとすると。

val b = a.toSortedSet()

でbに重複削除されてソートされたSetができる。
これを List<String> にしたい場合はこうする。

val c = b.toList()
0173デフォルトの名無しさん
垢版 |
2020/08/04(火) 18:45:38.06ID:lImhU2CT
>>165 チューリングマシン(Python3)
#チューリングマシン本体(不受理の場合例外が発生する)
def turingMachine(tape, state_function, current_state, final_state):
i=0
n = len(tape)
while i < n:
sf = state_function[current_state]
symbol = tape[i] if i >= 0 else None
(current_state, rsymbol, is_right) = sf[symbol]
if i >= 0:
tape[i] = rsymbol
if current_state == final_state:
return True
i += 1 if is_right else -1
return False

def TmMul(a, b):
#1000000の箇所はメモリ容量に合わせて適当に増やす
tape = ["0"] * a + ["1"] + ["0"] * b + ["1"] + [None] * 1000000
trans = [{"0":(6, None, True)},
{"0":(2, "X", True), "1":(4, "1", False)},
{"0":(2, "0", True), "1":(2, "1", True), None:(3, "0", False)},
{"0":(3, "0", False), "1":(3, "1", False), "X":(1, "X", True)},
{"X":(4, "0", False), "1":(5, "1", True)},
{"0":(5, "0", False), "1":(7, "1", False)},
{"0":(6, "0", True), "1":(1, "1", True)},
{"0":(8, "0", False), None:(7, None, True), "1":(9, None, True)},
{"0":(8, "0", False), None:(0, None, True)},
{"0":(9, None, True), "1":(10, None, True)}]
turingMachine(tape, trans, 0, 10)
return len(list(filter(lambda x: x != None, tape)))
print(TmMul(3, 8)) #=>24
0174デフォルトの名無しさん
垢版 |
2020/08/04(火) 19:24:17.96ID:lImhU2CT
>>173
あーアホだったw
タブ消去の仕様だとPythonだと分けわからんことになるなw
↓貼り直した
http://codepad.org/BWRzr8fW
※会員未登録の為、一定期間後に自動消去
0177デフォルトの名無しさん
垢版 |
2020/08/04(火) 20:43:45.04ID:ZgraBKAX
筆算じゃないの

101 b
110 a (+
---------
0
1010
10100
---------
11110
0178蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/04(火) 20:47:15.02ID:pnjegpbT
お題: 総務省統計局の1990〜2019年までの人口データを使用して2020〜2024年の日本の人口の推計値を求めよ。人口データ以外は使用しないものとする。
0179蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/04(火) 21:14:16.49ID:pnjegpbT
これは電子政府の使い勝手のテストである。だれも解けないなら、電子データは活かされていないと判断する。
0180デフォルトの名無しさん
垢版 |
2020/08/04(火) 21:16:21.27ID:02jYvMNw
>>175
aの偶奇によって↓の計算してaがちっちゃくなったら終わりってしてるだけだぞ

(2a' + 1)b = b + a' * (2b)
(2a') * b = a' * (2b)
0181デフォルトの名無しさん
垢版 |
2020/08/04(火) 21:26:04.52ID:lImhU2CT
チューリングマシンを使って重くて複雑な乗算を再現して何の意味があるのかと思ってそうだな
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている
0182デフォルトの名無しさん
垢版 |
2020/08/04(火) 21:58:22.27ID:JHqDXk92
お題を出して解くスレで電子データは活かされていないとかどうでもいいんですが…
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ
0184デフォルトの名無しさん
垢版 |
2020/08/04(火) 23:36:46.28ID:L0dS0CTZ
お題
両替をしてください
貨幣は次の文字列で表されます
1円 = (1)
5円 = (5)
10円 = (10)
50円 = (50)
100円 = (100)
500円 = (500)


入力: (1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)
出力: (10)(10)(1)(1)(1)(1)

入力: (5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)
出力: (100)(50)(10)(10)(10)(10)(5)(1)(1)(1)
0186デフォルトの名無しさん
垢版 |
2020/08/05(水) 02:29:32.18ID:prJIGLTT
>>175
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
0187デフォルトの名無しさん
垢版 |
2020/08/05(水) 02:55:46.54ID:wv4r4oF2
>>184 Ruby
def change( coin )
sum = coin.split(/[^\d]+/)[1..].inject(0){|r,c| r + c.to_i }
ret = ''
[500,100,50,10,5,1].each{|c|
next unless sum >= c
r, sum = sum.divmod( c )
ret << "(#{c})" * r
}
ret
end

[ '(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)',
'(5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)' ].each{|coin|
puts "入力: #{coin}"
puts "出力: #{change( coin ) }\n\n"
}
0188デフォルトの名無しさん
垢版 |
2020/08/05(水) 11:37:38.85ID:kVNaCqIg
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py", line 23, in <module>
my_data = genfromtxt('SingleECG.csv')

File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\npyio.py", line 1772, in genfromtxt
fid = np.lib._datasource.open(fname, 'rt', encoding=encoding)

File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 269, in open
return ds.open(path, mode, encoding=encoding, newline=newline)

File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 623, in open
raise IOError("%s not found." % path)

グラフをプロットしたらこのエラーが出ました。対処法を教えてください
0190デフォルトの名無しさん
垢版 |
2020/08/05(水) 12:16:18.65ID:IZQzbQjk
>>188<対処法を教えるお題
一行目と最後の行IOError("%s not found." % path) から
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py"
のパスが間違えていると思われるので
temp.pyを添付するか確認するように進言します
0191デフォルトの名無しさん
垢版 |
2020/08/05(水) 14:35:10.99ID:xKYyZvTf
心電図装置に繋がってるデバイスが機能停止したんだろ
0193デフォルトの名無しさん
垢版 |
2020/08/05(水) 16:44:00.29ID:73CDpa/5
ふむ。コイン切れの対処もし易いな。
0194蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/05(水) 17:59:02.96ID:TWR5sasY
お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。

ダミーのfeedは、次のようなプログラムとする:

- 現在日時と「えさをやりました。」を出力する。
0195蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/05(水) 18:08:26.66ID:UZ8wPONY
>>194 C++/Win32
#include <windows.h>
int main(void) {
for (;;) {
Sleep(60 * 60 * 1000);
ShellExecuteA(NULL, NULL, "feed.exe", NULL, NULL, SW_SHOWNORMAL);
}
}

// feed.cpp
#include <windows.h>
#include <stdio.h>
int main(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%04d.%02d.%02d %02d:%02d:%02d えさをやりました。\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
0196デフォルトの名無しさん
垢版 |
2020/08/05(水) 19:40:23.44ID:VitQNdTl
は、はやい・・・
0197デフォルトの名無しさん
垢版 |
2020/08/05(水) 20:19:52.45ID:wv4r4oF2
>>194 Ruby (Windows)
# feed_ignition.rb
loop do
system( 'start "" feed.rb' )
sleep 60*60
end

# feed.rb
puts "#{Time.new.strftime('%Y/%m/%d %T')} えさをやりました。"
sleep 3 # 表示確認用
0198デフォルトの名無しさん
垢版 |
2020/08/05(水) 23:41:13.11ID:prJIGLTT
>>194
Linux 等の UNIX系OS だったら普通なら crond が動いているので crontab 設定すると楽だ。
(Windows の場合はタスクの設定で似たような事ができる)。

例えばこのようにすると毎時0分に feed コマンドが実行される。

0 * * * * feed

ただ問題はこのままだと標準出力がリダイレクトされていないのでその出力がcrondからメールで送られて来る事になる。
(見たい場合は mail コマンドを使って見る)。


コマンドラインから直接やるとしたら watch コマンドというのもある。これは実行するたびに出力が変化する
ようなコマンドを定期的に動かしてその出力を画面上に表示するためのコマンドだが毎回出力が同じでも
あるいは何も出力しなかったとしても問題はない。1時間ごとに動かすならこうなる。

watch -n 3600 feed

もっと単純にシェルでループさせて実現する方法もある。(これだとようやっとプログラムっぽい見た目になる)

sh -c 'while : ; do feed ; sleep 3600 ; done'


feed コマンドについてはシェルスクリプトなら例えばこうしておけば良い。

#!/bin/sh
echo 'えさをやりました。'
0199デフォルトの名無しさん
垢版 |
2020/08/05(水) 23:51:48.40ID:prJIGLTT
>>198はfeedで現在の日付を出すのを忘れた。

日付付けるなら例えばこうする。

#!/bin/sh
echo `date` 'えさをやりました。'

date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。

#!/bin/sh
date '+%F %T えさをやりました。'
0200蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/06(木) 18:50:53.87ID:mzjhTFla
お題: 現実世界でコイにえさをやるプログラム。

できるのか?
0201デフォルトの名無しさん
垢版 |
2020/08/06(木) 19:02:17.87ID:nx4HEXSE
>>200
始めからPLCのプログラム限定って書け>>194
0202デフォルトの名無しさん
垢版 |
2020/08/06(木) 19:06:41.72ID:cHZDAcP7
>>200
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。

ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。
0203蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/06(木) 19:21:15.27ID:mzjhTFla
ハードウェアだとソフトウェア制御できない。成長を細かく制御したい。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。
0204デフォルトの名無しさん
垢版 |
2020/08/06(木) 19:23:23.77ID:nx4HEXSE
>>203
ピ・タ・ゴ・ラ・スイッチ
0205デフォルトの名無しさん
垢版 |
2020/08/06(木) 19:37:26.52ID:/QKQvkvR
なぜ何度ツッコまれてもスレタイからずれようとするんですか?
学習できないんですか?
0206蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/06(木) 19:46:21.15ID:mzjhTFla
>>205
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会
0209デフォルトの名無しさん
垢版 |
2020/08/06(木) 20:18:11.34ID:nx4HEXSE
【お題】正解にたどり着くようにアシストした得点を算出するプログラムを作れ
スケールは1点以上100点未満とする
0212デフォルトの名無しさん
垢版 |
2020/08/06(木) 20:53:50.09ID:O/aURmUk
>>203
その手の目的には Raspberry Pi がおすすめです
最近流行っているから多くのノウハウが容易に見つかりますよ
0213蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/06(木) 21:07:24.02ID:mzjhTFla
>>212
ありがとうございます。使えそうなハードでかなりお買い得ですね。

三菱やパナソニックは、、、破壊的イノベーションができない連中か。。。
0218蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/06(木) 23:02:55.51ID:mzjhTFla
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。

(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
0219デフォルトの名無しさん
垢版 |
2020/08/07(金) 00:08:41.77ID:TzYKRTqH
よく、ラズパイコンテストでやってる

水槽の中の金魚に、エサをやる装置とか
0221デフォルトの名無しさん
垢版 |
2020/08/07(金) 12:51:36.49ID:lb7vo/Jy
お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください

入力: D a B c d c C A E c e B b
出力: (a A) (B B b) (c c C c) (D d) (E e)
0222デフォルトの名無しさん
垢版 |
2020/08/07(金) 13:43:57.69ID:uQ4nbdFf
>>221 js
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"

const charVal = c => c.toUpperCase().charCodeAt()

function groupCharSort(str) {
const chars = str.split(" ")
const groups = {}
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return Object.values(groups).sort((g1, g2) => charVal(g1[0]) - charVal(g2[0])).map(cs => `(${cs.join(" ")})`).join(" ")
}

const resultStr = groupCharSort(inputStr)

console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)
0223デフォルトの名無しさん
垢版 |
2020/08/07(金) 13:48:23.69ID:uQ4nbdFf
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"

const charVal = c => c.toUpperCase().charCodeAt()

function groupCharSort(str) {
const chars = str.split(" ")
const groups = []
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return groups.filter(Boolean).map(cs => `(${cs.join(" ")})`).join(" ")
}

const resultStr = groupCharSort(inputStr)

console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)


sort いらなかった
0224デフォルトの名無しさん
垢版 |
2020/08/07(金) 14:51:48.30ID:5vmbSLbR
>>221 Ruby
# その 1
def igrouping( str )
gList = {}
str.split.each{|ch|
k = ch.downcase
gList[ k ] ||= []
gList[ k ] << ch
}
gList.keys.sort.map{|k| '(' + gList[ k ].join(' ') + ')' }.join(' ')
end

instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
0225デフォルトの名無しさん
垢版 |
2020/08/07(金) 14:52:06.69ID:5vmbSLbR
>>221 Ruby
# その 2
def igrouping( str )
i = 0
'(' + str.split.sort_by{|x| [ x.downcase, i += 1 ] }.join(' ').gsub( /(\w) (?!\1)/i ){"#{$1}) (#{$2}"} + ')'
end

instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"
0227デフォルトの名無しさん
垢版 |
2020/08/07(金) 19:28:59.75ID:P4+Ga4Bm
>>221 Ruby

$><<gets.split.group_by{|c| c.ord % 32}.sort.map{|a| "(#{a.last.join ' '})"}.join(' ')


# => (a A) (B B b) (c c C c) (D d) (E e)
0228デフォルトの名無しさん
垢版 |
2020/08/08(土) 00:04:29.62ID:b55CcwAR
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い

Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式

そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
0230デフォルトの名無しさん
垢版 |
2020/08/08(土) 07:26:45.92ID:u/td9dv4
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
0231デフォルトの名無しさん
垢版 |
2020/08/08(土) 09:18:46.19ID:b55CcwAR
>>221
Elixir

input_str = "D a B c d c C A E c e B b"

list = input_str
|> String.split # 文字列を空白で分割して、配列化する
|> Enum.group_by( &String.downcase/1 ) # 小文字へ変換して、グループ化する
|> Map.values # 値を取り出す
|> Enum.map( fn list -> Enum.join( list, " " ) end ) # 各要素を空白でつなげて、1つの文字列にする
|> Enum.map( fn str -> "(" <> str <> ")" end ) # 文字列を、( ) で囲む

# IO.inspect list

Enum.join( list, " " ) # 各要素を空白でつなげて、1つの文字列にする
|> IO.puts
0233デフォルトの名無しさん
垢版 |
2020/08/08(土) 14:58:00.03ID:gFRxrH0y
>>221
perl

$input = "D a B c d c C A E c e B b";
map{push @{$h{uc $_}}, $_}(split / /, $input);
print map{map{"(".(join" ", @$_).")"}$h{$_}} sort{uc $a cmp uc $b} keys %h;


>>232
オブ脳ならぬラムダ脳なんだろうなぁ
同値でグループ化、代表元でソート、出力、これを関数でやってる

それかワンライナーへの偏執的な愛
0235デフォルトの名無しさん
垢版 |
2020/08/08(土) 16:11:32.49ID:yUCBpeXj
>>232
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
https://ideone.com/Tsio0O
0236デフォルトの名無しさん
垢版 |
2020/08/08(土) 17:07:51.92ID:HH2BebFt
>>232
Pythonだとどうしても短くはならないな。
https://ideone.com/iFc6eL
groupbyのところは、defaultdictで書く方法もあるけど大差なし。
0240231
垢版 |
2020/08/08(土) 22:49:25.00ID:b55CcwAR
関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから

Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる

str = "a b c"

# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )

str
|> String.split
|> IO.inspect

出力は、どちらも
["a", "b", "c"]
0241231
垢版 |
2020/08/08(土) 22:54:29.83ID:b55CcwAR
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ

Python の内包表記みたいなのは、可読性が悪い
0242デフォルトの名無しさん
垢版 |
2020/08/08(土) 23:09:35.53ID:n6UBlQy6
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
0247デフォルトの名無しさん
垢版 |
2020/08/09(日) 02:47:46.35ID:Mt0Kh35r
>>221
c#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var input = "D a B c d c C A E c e B b";

foreach (var itm in input.Split(" ").GroupBy(p => p.ToUpper()).OrderBy(p => p.Key))
{
Console.Write("(" + string.Join(" ", itm) + ") ");
}
}
}
0249デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:07:42.42ID:HZ7sqguG
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる

2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください

入力: abcde deabc
出力: true

入力: abcde cdeba
出力: false
0250デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:42:31.20ID:/K790vfJ
>>249 js

const isRotateStr = (a, b) => (a + a).indexOf(b) != -1

console.log(isRotateStr("abcde", "deabc"))
// true

console.log(isRotateStr("abcde", "cdeba"))
// false
0251デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:56:20.10ID:DzMx1xPb
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
0252デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:59:23.64ID:Uo9rXbdx
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
0253253
垢版 |
2020/08/09(日) 19:01:45.47ID:UiQUiAYf
>>221 Perl5

push(@{$h{uc$_}}, $_) for qw{D a B c d c C A E c e B b};
print map{"(@{$h{$_}}) "} sort keys %h;

実行結果

~ $ perl 18_221_NCS_sort_grp.pl
(a A) (B B b) (c c C c) (D d) (E e)
0254253
垢版 |
2020/08/09(日) 19:17:23.16ID:A1LNtpwx
>>249 Perl5

use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 say "出力 ", "$a$a" =~ /$b/ ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};

実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
0257253
垢版 |
2020/08/09(日) 22:27:07.62ID:iNMqPGBy
>>253 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正

>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 @a = "$a$a" =~ /^(.*)($b)(.*)$/;
 say "出力 ", (@a and "$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};

実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
入力 aaaaa aaa
出力 false
0259253
垢版 |
2020/08/09(日) 23:21:31.30ID:dFp53gtH
>>221 Python3

s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
  u = c.upper()
  if u in d: d[u] += ' ' + c
  else: d[u] = c
ks = sorted(d.keys())
print(' '.join(map(lambda x: '(%s)' % d[x], ks)))

実行結果
~ $ py 18_221_NCS_sort_grp.py
(a A) (B B b) (c c C c) (D d) (E e)
0260デフォルトの名無しさん
垢版 |
2020/08/09(日) 23:56:04.43ID:DzMx1xPb
Perlだとこの程度でも正規表現使わないといかんのか?
0261253
垢版 |
2020/08/10(月) 00:02:07.64ID:5Aj+dIHX
>>259 を少し簡略化

>>221 Python3

s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
  u = c.upper()
  d[u] = d[u]+' '+c if u in d else c
print(' '.join(map(lambda x: '(%s)' % d[x], sorted(d.keys()) )))
0262253
垢版 |
2020/08/10(月) 00:03:02.27ID:5Aj+dIHX
>>260
substrとかでも書ける
0263253
垢版 |
2020/08/10(月) 01:07:06.98ID:mTkq56mc
>>260
>>257は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので

>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 @a = split "$b", "$a$a", 3;
 say "出力 ", ("$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};

…でもsplitも実は正規表現で分離する機能を持つので、起きていることは実は>>257と一緒なんだよね
0264253
垢版 |
2020/08/10(月) 01:18:32.03ID:mTkq56mc
>>263 ゴメン、$a[2]$a[0]はbug、訂正

>>249 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 @a = split $b, "$a$a", 3;
 say "出力 ", ("$a[1]$a[0]") eq $b ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
0265253
垢版 |
2020/08/10(月) 01:58:56.02ID:5YDTUTIu
>>264 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;
0268デフォルトの名無しさん
垢版 |
2020/08/10(月) 08:49:19.32ID:SwBLGnEH
>>267 Ruby

require 'open-uri'
str = open('https://raw.githubusercontent.com/pablojorge/brainfuck/master/programs/hello.bf').read

M = 256
i = p = s = 0
h = Hash.new(0)
m = [0] * M
while i < str.length
  case str[i]
  when ?+ then m[p] += 1
  when ?- then m[p] -= 1
  when ?[ then h[s += 1] = i
  when ?] then m[p].zero? ? s -= 1 : i = h[s]
  when ?> then p += 1
  when ?< then p -= 1
  when ?. then $><<m[p].chr
  when ?, then m[p] += $<.getc.ord
  end
  i += 1
end

# => Hello World!
0272デフォルトの名無しさん
垢版 |
2020/08/10(月) 18:01:14.12ID:Z7zFlWuQ
>>267
Kotlin

とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。

https://paiza.io/projects/q8vkgGoAei9W2gfLA4xP4Q

こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)

$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
0274デフォルトの名無しさん
垢版 |
2020/08/10(月) 21:10:04.86ID:EfqLUS40
>>249 Python3
def f(a, b): return len(a) == len(b) and a in b + b
0280デフォルトの名無しさん
垢版 |
2020/08/11(火) 01:50:50.24ID:RwCZynCZ
>>277
知らんけど >>279 は出来るように作った。
>>272 のやつはコンバータだが Kotlin が出来るので出来る。(というか出来ないように作る方が面倒かな?)
0282デフォルトの名無しさん
垢版 |
2020/08/11(火) 14:40:27.33ID:psN1NwFJ
こんなに暑いと座禅プログラムで涼みたい。
0283デフォルトの名無しさん
垢版 |
2020/08/12(水) 10:55:20.81ID:WiVroiaz
警策を上から振り下ろす動作の機械を作り、そこにマイコンを接続。更に行ったり
来たりするルンバのようなものの上にそれを乗せ、そこにもマイコンを接続。
そのマイコンのコントロールプログラムを作成。
0286デフォルトの名無しさん
垢版 |
2020/08/12(水) 19:58:36.03ID:j5y8ZKQl
お題
Brainfuckのの'+','-','.'の 3つの命令のみで
特定の文字列を表示するBrainfucの
ソースコードを生成するプログラム。
0287デフォルトの名無しさん
垢版 |
2020/08/12(水) 20:07:13.01ID:kGuev0jH
>>286 Ruby

puts "Hello, World!\n".codepoints.unshift(0).each_cons(2).map{|a, b| '%s.' % ((b > a ? ?+ : ?-) * (b - a).abs)}*''

# =>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.+++++++..+++.[略]
0289デフォルトの名無しさん
垢版 |
2020/08/13(木) 01:08:54.66ID:TUx4JMNp
>>286
Perl5

プログラムの構造は >>287 と同じだがワンライナー。
行単位で標準入力から入力して標準出力に出力する。入力の最後の改行は削除している。行ごとに直前の文字は0にリセットしている。
見易くするために '.' の後には改行を出力している。

以下は Linux のシェルのコマンドラインで実行して abc と Hello, world. を入力した時のコピペ。

$ perl -ne 'BEGIN{$o=0}chomp;for(split //){$c=ord($_);print((($o < $c ? "+" : "-") x abs($o - $c)) . ".\n");$o=$c}$o=0'
abc
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+.
+.
Hello, world.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
--------.
+++.
------.
--------.
------------------------------------------------------.
$
0294デフォルトの名無しさん
垢版 |
2020/08/13(木) 12:37:03.85ID:8zEuDtsy
なるほどbrainfuckでは[-]で現在指してるメモリの値を0クリアできるのか
0296デフォルトの名無しさん
垢版 |
2020/08/14(金) 03:17:07.09ID:cCFmHkiX
>>295 Ruby
# 初期化だけ
a = b = c = 2**31 - 1

# 初期化して表示
p *(a,b,c = [2**31-1] * 3) #=> 2147483647\n2147483647\n2147483647\n
0297デフォルトの名無しさん
垢版 |
2020/08/14(金) 07:01:38.27ID:cCFmHkiX
>>295 Ruby
お題とずれるけど INT32_MAX, INT32_MIN を普通の演算以外で作ってみた

# 定数 0,1 から INT32_MAX, INT32_MIN
[~0].pack('l').unpack('L').first >> 1 #=> 2147483647
[~0].pack('l').unpack('N').first >> 1 #=> -2147483648

# 定数 1 から INT32_MAX, INT32_MIN
[~1].pack('l<').unpack('b*').pack('B*').unpack('l>').first #=> 2147483647
[1].pack('l<').unpack('b*').pack('B*').unpack('l>').first #=> -2147483648
0299デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:17:19.00ID:jifd8sPx
>>295 C++
int32_t max = 1 << 31;
int32_t min = ~max;
0300デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:18:37.41ID:jifd8sPx
あ maxとminが逆だった
0301デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:20:39.60ID:jifd8sPx
しかもお題と関係ない スマソ
0303デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:38:19.44ID:jifd8sPx
>>295 C++(訂正)
#include <iostream>
#include <tuple>

int main() {
int32_t max = ~(1 << 31);
const auto [a, b, c] = [&]() { return std::tie(max, max, max); }();
std::cout << a << std::endl;
std::cout << b << std::endl;
std::cout << c << std::endl;
}
0304デフォルトの名無しさん
垢版 |
2020/08/14(金) 09:05:58.49ID:jifd8sPx
const auto [a, b, c] = std::tie(max, max, max);
これだけでよかったorz
0305デフォルトの名無しさん
垢版 |
2020/08/14(金) 14:02:54.65ID:9qHjnK+i
お題:任意文字列を含むビットコインアドレスを生成するスクリプト

BitCoinDescriptionAddress

1BitCoinDescriptionAddressadTvGDH
0306デフォルトの名無しさん
垢版 |
2020/08/15(土) 16:58:24.79ID:gFfdk9Ij
>>295
Kotlin 及び Kotlin script

普通にただ Int.MAX_VALUE を代入するだけだとつまらないので List 使ってまとめて代入。

val (a, b, c) = listOf(Int.MAX_VALUE, Int.MAX_VALUE, Int.MAX_VALUE)

この形式は実際には a に List のインスタンスの component1() メソッドを実行して結果を代入、
b に component2() の結果を代入、c に component3() の結果を代入という具合に componentN()
のメソッドを呼び出しているだけだ。(コンパイラが自動でそういう風にしてくれる。但し定数の代入
だったら最終的にはうまい事最適化してくれてただの値の代入になっているんじゃないかと思う)。

それで、List インターフェースには component5() までしかないのでそのままだと 5 個の変数にしか
代入できない。しかし自分で下記のように component6() という拡張関数を作れば 6 個目の変数への
代入ができるようになる。

fun <T> List<T>.component6() = get(5)

val (a, b, c, d, e, f) = listOf(Int.MAX_VALUE, Int.MAX_VALUE, Int.MAX_VALUE, 1, 2, 3)

これで f には 3 が代入される。

まあしかしこのような形式でまとめて複数の変数を初期化をするのは変数が多くなればなるほど
見辛くなってどれがどれに代入されるか分かり辛くなるのであまりお勧めする気は起きない。
0308デフォルトの名無しさん
垢版 |
2020/08/15(土) 17:57:15.54ID:uqmyrozg
お題
長さNの順列を全列挙してください

入力: N
出力: N!行の1からNの整数を用いた順列


入力: 3
出力:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
0311デフォルトの名無しさん
垢版 |
2020/08/15(土) 19:24:16.43ID:4GsEJ4Sf
お題
HTMLドキュメントをwebブラウアザ上に表示するプログラムを作りなさい。

内容は、html、head、meta、title、body、h1 を含み、
UTF-8で表示するものとする、

Hello World!
0313デフォルトの名無しさん
垢版 |
2020/08/15(土) 20:22:45.39ID:BUqVCKAW
>>311 Ruby
require 'webrick'

BrowserPath = 'C:/Program Files/Mozilla Firefox/firefox.exe'

srv = WEBrick::HTTPServer.new( {BindAddress: '127.0.0.1', Port: 55080} )
trap("INT"){ srv.shutdown }

srv.mount_proc('/') do |req, res|
html = <<_EOT_
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Title</title></head>
<body>
<h1>Hello World!</h1>#{Time.now.strftime('%y/%m/%d %T')}<br></body></html>
_EOT_
res.body = html.encode( Encoding::UTF_8 )
res['Content-Type'] = 'text/html'
end

Thread.new { sleep 1; system( %Q{"#{BrowserPath}" http://127.0.0.1:55080/} ) }

srv.start
0314デフォルトの名無しさん
垢版 |
2020/08/15(土) 20:34:31.85ID:BUqVCKAW
>>312 Ruby
def i2b( x )
if x.is_a?( Integer )
return false if x == 0
return true if x == 1
end
x
end

[ 'foo', 7, 1, 1.0, [], true, false, 0, {} ].each{|x|
puts "%5p : %5p" % [x, i2b( x )]
}
# =>
"foo" : "foo"
7 : 7
1 : true
1.0 : 1.0
[] : []
true : true
false : false
0 : false
0 : false
{} : {}
0315314
垢版 |
2020/08/15(土) 20:37:12.09ID:BUqVCKAW
>>314
0 : false
が一行余分に付いてしまった
0319デフォルトの名無しさん
垢版 |
2020/08/15(土) 23:19:07.77ID:gFfdk9Ij
>>312
Kotlin 及び Kotlin Script

まず、こういう拡張関数を定義しておく。

fun Int.toBoolean() = this != 0

この後は Int 型のインスタンスに対して .toBoolean() で 0 なら false, 0 以外なら true が返る。


0.toBoolean() は false になる。
1.toBoolean() は true になる。
x.toBoolean() は x の型が Int で 0 なら false, 0 以外なら true になる。x がその他の型だとコンパイルエラー。
0321デフォルトの名無しさん
垢版 |
2020/08/16(日) 10:54:19.77ID:DGzsHTxH
Python

>>312
bool(n)

>>308
from itertools import permutations
N = 3
print([x for x in permutations(range(1, N+1))])
0324蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 19:41:54.77ID:GwA/W8AI
お題: 浮動小数点数の区間演算の加減乗除(+、-、*、/)を実現しなさい。開区間は丸カッコを、閉区間は角カッコを使う。
区間はカッコで囲まれた数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。

例)
[1, 3) + 2 → [3, 5).
[2, 8] - [1, 2] → [0, 7].
(-3, 2] * (1, [2, 3)) → (-9, 6).
0325デフォルトの名無しさん
垢版 |
2020/08/16(日) 19:47:13.56ID:WQRWSQYc
>>324
ほんとクソだなお前
なんで数と区間が何の説明もなく比較可能な状態になってんだよ
教養レベルの位相と集合の知識身に付けてから出直せハゲ
0326蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 19:54:55.84ID:GwA/W8AI
>>325
入力の計算式において単一の数は同等の閉区間と見なすことにする。
2 → [2, 2].
0327デフォルトの名無しさん
垢版 |
2020/08/16(日) 19:59:26.75ID:WQRWSQYc
>>326
任意の区間に対してどのように順序を定義して全順序集合を構成するのか考えてから言えよクソ雑魚が
0328デフォルトの名無しさん
垢版 |
2020/08/16(日) 20:01:44.11ID:5GlLVozn
そもそも 2 と [2, 2] が同じだと思ってる時点でやばいよ
ペアノ系で 0 = 1 って言ってるようなもんだぞ
0329蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 20:08:52.13ID:GwA/W8AI
>>327
任意の[x, y]についてx<=yと仮定する。

[a, b] + [c, d] == [a+c, b+d].
[a, b] - [c, d] == [a-d, b-c].
[a, b] * [c, d] == [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] == [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].
0330デフォルトの名無しさん
垢版 |
2020/08/16(日) 20:11:24.43ID:WQRWSQYc
>>329
順序の定義しろっつってんだろクソが
「(1, [2, 3))」かつ「対の最初の要素は対の最後の要素以下とする」って言ってるってことは
[1, 1] <= [2, 3) なんだろ?
任意の区間の間で矛盾なく順序を定義しろや
0331蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 20:24:24.91ID:GwA/W8AI
>>330
すみません。カッコの入れ子はややこしいので止めます、、、

というのは簡単だが、あえて考える。

b<=cならば、間違いなく[a, b] <= [c, d]は真。
d<aならば、[a, b] <= [c, d]は偽。
それ以外は[a, b] <= [c, d]の論理値は不定とし、実行時エラーを発生させる。
0332デフォルトの名無しさん
垢版 |
2020/08/16(日) 20:32:34.77ID:WQRWSQYc
>>331
完全律すら成り立たない順序ってなんだよ
「カッコの入れ子はややこしい」とかそういうレベルじゃねえんだよ

だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
お前群論なめてんのか
0333デフォルトの名無しさん
垢版 |
2020/08/16(日) 20:34:23.06ID:1lLvvYB6
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね
0335蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 20:54:18.06ID:GwA/W8AI
>>332

> だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど

[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。
0336デフォルトの名無しさん
垢版 |
2020/08/16(日) 20:57:11.13ID:rY4w2Ca/
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ
0337デフォルトの名無しさん
垢版 |
2020/08/16(日) 21:13:43.55ID:WQRWSQYc
where 0 < a < b
0 = 0 * [0, 1]
= ([a, b] + [-a, -b]) * [0, 1]
= [a, b] * [0, 1] + [-a, -b] * [0, 1]
= [0, b] + [-b, 0]
= [-b, b]
!= [0, 0] = 0

矛盾
死ね
消えろ
0340デフォルトの名無しさん
垢版 |
2020/08/16(日) 21:34:29.96ID:1lLvvYB6
[0, 1]*[0, 1] = [0, 1]
<=> [0, 1]*([0, 1] - 1) = 0
<=> [0, 1]*[-1, 0] = 0
<=> [-1, 0] = 0
流石にひどいって
0341蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 21:48:28.85ID:GwA/W8AI
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則
0342蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 22:04:28.19ID:GwA/W8AI
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。

すみません、取り下げます。
0346蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/16(日) 22:46:06.78ID:GwA/W8AI
やり直し。

お題: 区間と演算子によって構成される計算式が入力として与えられる。下記に従って浮動小数点数の区間に対する二項演算(+、-、*、/)を実現し、計算後の区間を出力しなさい。入力される区間は閉区間のみとする。

閉区間は角カッコで囲まれた浮動小数点数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。すなわち[a, b]という式があればa<=bでなければならない。

式が正当でないか、ゼロ除算があれば、実行時エラーを発生させること。

演算の定義:
[a, b] + [c, d] := [a+c, b+d].
[a, b] - [c, d] := [a-d, b-c].
[a, b] * [c, d] := [min(a*c, b*c, a*d, b*d), max(a*c, b*c, a*d, b*d)].
[a, b] / [c, d] := [min(a/c, b/c, a/d, b/d), max(a/c, b/c, a/d, b/d)].

例)
[1, 3] + [2, 2] → [3, 5].
[2, 8] - [1, 2] → [0, 7].
[-3, 2] * [1, 3] → [-9, 6].
0347デフォルトの名無しさん
垢版 |
2020/08/16(日) 22:58:27.46ID:bYLilpPQ
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない

かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが
0349253
垢版 |
2020/08/16(日) 23:50:47.82ID:G5r8RAij
>>308 Perl5

use Data::Dump 'dump';
sub fn {
 my ($le, $pv, @ri) = @_;
 defined $pv ? map {[$pv, @$_]} fn([], @$le, @ri) : ([])
  ,
 @ri ? fn([@$le, $pv], @ri) : ()
}
$N = 3;
@a = 1..$N;
print dump(fn [], @a);


実行結果
$ perl 18_308_N_permutation.pl
([1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1])
0350デフォルトの名無しさん
垢版 |
2020/08/17(月) 01:49:55.07ID:Nup7rIuH
前の書き方だとやる気が出ないみたいなので再掲

お題 任意文字列を含む有効なビットコインアドレスを生成するにはどうすればいいか

ビットコインアドレスの形式は
[プレフィックス 1バイト] [本体データ 160ビット] [チェックサム 4バイト]
をbase58(58進数)で表現したもの

プレフィックスは0x00とする
チェックサムはプレフィックス+本体データをsha256に二回かけた後の先頭4バイト

詳細
https://www.tottemoyasashiibitcoin.net/entry/2018/02/04/165300

例:
1BitCoinDescriptionAddressadTvGDH
1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC

これはどっちも有効なビットコインアドレスになってる
https://chainflyer.bitflyer.com/Address/1BitCoinDescriptionAddressadTvGDH
https://chainflyer.bitflyer.jp/Address/1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC
0354デフォルトの名無しさん
垢版 |
2020/08/17(月) 09:11:51.56ID:CGaaR/Ic
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
0355デフォルトの名無しさん
垢版 |
2020/08/17(月) 11:17:26.81ID:2KNIyB/f
ブルートフォースアタックしか思い浮かばない。
0356デフォルトの名無しさん
垢版 |
2020/08/17(月) 18:12:59.56ID:Nup7rIuH
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
0357デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:37:06.53ID:4e6PsksO
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
0358デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:45:01.16ID:Nup7rIuH0
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
0360デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:47:24.50ID:4e6PsksO
>>359
お前が死ね
0363デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:56:52.65ID:4e6PsksO
>>361
じゃあ俺が死ぬよ
0367デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:20.89ID:4e6PsksO
>>366
全然おもんないやんけ
もう一回チャンスをやろう
0368デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:35.92ID:4e6PsksO
じゃあ俺が死ぬよ
0369デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:59.92ID:4e6PsksO
くるよくるよ
0370デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:06:13.27ID:4e6PsksO
ドキドキ
0371デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:35.54ID:4e6PsksO
逃げたか
0372デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:58.23ID:4e6PsksO
笑いから逃げるな
0373デフォルトの名無しさん
垢版 |
2020/08/18(火) 00:15:03.77ID:/+dAg+CW
お題: 二人の煽り耐性から「死ね」と言い合うプログラム

煽り耐性 0.1〜1
死ねと言い返す確率 (1-煽り耐性) * 100%
最初に死ねと言うのはA
入力 {Aの煽り耐性} {Bの煽り耐性}

> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
0375デフォルトの名無しさん
垢版 |
2020/08/18(火) 01:35:33.42ID:Vl5MoMXT0
>>350 js

const input = "programmingodaisure"

let tmp_str = input;
let tmp_hex = new Uint8Array();

do {
tmp_str += "X";
tmp_hex = [0x00, ...Base58.decode(tmp_str)];
} while (tmp_hex.length < 25)

const prefix_and_data = tmp_hex.slice(0, -4);

const doubleSha256 = sha256.digest(sha256.digest(prefix_and_data))
const checkSum = doubleSha256.slice(0, 4);

const result_hex = new Uint8Array([...prefix_and_data, ...checkSum]);
const result_str = Base58.encode(result_hex);

console.log(result_str);

→ "1programmingodaisureXXXXXXXZHx9sj"

https://chainflyer.bitflyer.jp/Address/1programmingodaisureXXXXXXXZHx9sj

BASE58とSHA256のライブラリ
https://cdn.jsdelivr.net/npm/base-58@0.0.1/Base58.min.js
https://cdn.jsdelivr.net/npm/js-sha256@0.9.0/src/sha256.min.js
0376デフォルトの名無しさん
垢版 |
2020/08/19(水) 16:18:46.79ID:ltFkDVN7
>>364

#!/bin/sh
rm $0
0377デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:40:23.70ID:d4bqPFA7
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
0378デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:45:07.34ID:OrygHj4v
略して示唆トン。
0379デフォルトの名無しさん
垢版 |
2020/08/20(木) 11:35:09.25ID:nWR09WFB
>>249
Elixir

# 蓄積変数 set は、すべての文字列の集合。abcde, bcdea などの5つ。
# word は、1文字ずらした文字列

src_word = 'abcde'

%{ set: set } = Enum.reduce_while( 1..length( src_word ), %{ set: MapSet.new, word: src_word }, fn _count, acc ->

[ head | tail ] = acc.word
next_word = tail ++ [ head ] # 1文字ずらす
acc = %{ acc | word: next_word }

if MapSet.member?( acc.set, next_word ) do
{ :halt, acc } # 既に存在すれば、break
else
acc = %{ acc | set: MapSet.put( acc.set, next_word ) }
{ :cont, acc } # ループを続ける
end
end )

# IO.inspect set

# 文字列が、集合の中に含まれているか?
[ 'deabc', 'cdeba' ]
|> Enum.map( fn str -> MapSet.member?( set, str ) end )
|> IO.inspect # [true, false]
0380デフォルトの名無しさん
垢版 |
2020/08/23(日) 18:52:15.52ID:kIX3/Jw/
お題:
縦H、横Wの迷路が与えられます。
スタートからゴールに至る道順の個数を求めてください。

迷路は通路から通路へ、上下左右の4方向へのみ移動できます。
ただし、一度通った通路を引き返すような道順は無効です。
また、スタートとゴールは通路です。

1行目に迷路の高さと幅を表す整数H、Wが与えられます。
2行目からH行にわたって、迷路を表す長さWの文字列が与えられます。
文字列は 'S' 'G' '.' '#' の文字のみからなり、それぞれスタート、ゴール、通路、壁です。

例1:
入力:
5 5
S....
##.#.
...#.
##.#.
....G
出力:
2
例2:
入力:
5 5
S....
##.#.
...#.
...#.
....G
出力:
12
0383蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/29(土) 20:44:46.53ID:GYyhmMZY
お題: ロシアンルーレット。

リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
0384デフォルトの名無しさん
垢版 |
2020/08/29(土) 21:04:26.78ID:KxRf/0sH
>>383
仕様がわからない
0386蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/29(土) 21:24:48.99ID:GYyhmMZY
>>383-384 こんな感じか?

最初にリボルバーを回します。
(弾丸の位置を設定)
こめかみor天井?(K/t) K
1回目: 不発
もう一度リボルバーを回しますか? (Y/n) Y
(弾丸を回転)
こめかみor天井?(K/t) K
2回目: 不発
もう一度リボルバーを回しますか? (Y/n) n
こめかみor天井?(K/t) K
3回目: バーン!
あなたの負けです。
0388デフォルトの名無しさん
垢版 |
2020/08/29(土) 22:14:20.91ID:bYj4gZFd
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
0390デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:12:55.70ID:yG/yQHuO
>>383

https://repl.it/@vip0/bullet#index.js

// 0-5
const rand6 = () => Math.floor(Math.random() * 6);

const gun = (() => {
let pos = 0;
const shuffle = () => (pos = rand6());
shuffle();
const shut = () => pos-- === -1
return { shuffle, pos, shut }
})()

// mock 1/2 rand
const readDoShuffleAsync = () => {
const y = Math.random() >= 0.5
console.log(y ? "y" : "n")
return y
}

let i = 1;
while (true) {
console.log("リボルバーを回しますか?");
if (readDoShuffleAsync()) gun.shuffle()
const bomb = gun.shut();
console.log(`${i}回目: ${bomb ? "バーン!" : "不発"}`);
i++;
if (bomb) break
}
0391デフォルトの名無しさん
垢版 |
2020/08/29(土) 23:34:19.24ID:2f/XylsB
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される

var a = 1
a // 1 と表示される
0393デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:02:17.18ID:xjthqQ7x
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください


入力: 1
出力: [1]

入力: 3
出力: [1, 2, 2, 3, 3, 3]
0394デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:33:41.99ID:xjthqQ7x
お題
配列をソートする関数を受け取って安定ソートか否かを判定する
プログラムを作成してください
0395デフォルトの名無しさん
垢版 |
2020/08/30(日) 06:49:46.06ID:a0VCHWdX
お題: splitを実装せよ(ただし組み込みやライブラリのsplitは使ってはならない)

例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
0396デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:02:58.80ID:Ui9A3dkW
>>393 J
f =: #~ @: >: @ i.
0397デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:40:37.84ID:rD3R6mry
>>393 Ruby

(0..3).each{|n| p (1..n).reduce([]){|s, a| s + [a] * a}}

# =>
[]
[1]
[1, 2, 2]
[1, 2, 2, 3, 3, 3]


>>395 Ruby

p 'abc:def:ghi'.scan(/[^:]+/) # => ["abc", "def", "ghi"]
0399デフォルトの名無しさん
垢版 |
2020/08/30(日) 09:43:25.32ID:pWMgwPJi
>>395
JS

let minSplit = (string, separator) => {
let array = [];
let splitter = (st, sp) => {
let pos = st.indexOf(sp);
if (pos == -1) {return [st,void(0)]} else {return [st.slice(0,pos),st.slice(pos+1)]}
}
while (true) {
if (string.length == 0) {array.push(string); break}
let temp = splitter(string, separator)
if (temp[1] == void(0)) {array.push(temp[0]); break}
else {array.push(temp[0]); string = temp[1]}
}
return array
}

let minSplit2 = (string, separator) => {
let reg = new RegExp(`[^(${separator})]+${separator}?`, "g");
return `${string} `.match(reg).map(x=>x.slice(0,-1))
}
0402デフォルトの名無しさん
垢版 |
2020/08/30(日) 18:55:27.84ID:uG01djUi
>>395 js
const replaceAll = (s, from, to) => s.replace(new RegExp(from, "g"), to)
const split = (str, sep) => JSON.parse(`["${replaceAll(str, sep, '","')}"]`)

split('abc:def:ghi', ':')
// [ 'abc', 'def', 'ghi' ]
ずるいしダブルクォート対応できてないけど思いつき
0403デフォルトの名無しさん
垢版 |
2020/08/30(日) 19:52:13.41ID:KMqOjvFr
>>395 Ruby
# セパレーターの仕様が文字か文字列か分からなかったので文字列にした
def split( str, sep )
res = []
(str + sep).scan( /(.*?)#{Regexp.escape(sep)}/ ){ res << $1 }
res
end

split('abc:def:ghi', ':') #=> ["abc", "def", "ghi"]
0406デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:23:11.11ID:OKCM85cL
operator[]がconstexprなのはC++17以降らしいね
0407デフォルトの名無しさん
垢版 |
2020/08/31(月) 00:36:58.36ID:Sr2UUXBk
宇宙創生から現在まで【宇宙の歴史@(過去編)】
https://www.youtube.com/watch?v=1qUrdcRkRLc
期待値が無限大な賭け(サンクトペテルブルクのパラドックス)
https://www.youtube.com/watch?v=B__gzT-rQjw
もしも生徒が全員予備校講師だったら
https://www.youtube.com/watch?v=Lk
eが超越数であることの証明
https://www.youtube.com/watch?v=_DJfeP0cmI8
【受験生へ】勉強のモチベーションをあげる3つの方法
https://www.youtube.com/watch?v=4MAPBivBEhM
線を描くだけ!万能視覚的かけ算【インド式計算】
https://www.youtube.com/watch?v=Sj6Y43D76GA
全受験生が理解するべき!偏差値とは何か
https://www.youtube.com/watch?v=Xt7VN0xCbt8
楽しいことを増やそう!科学の眼鏡をかけた1日とは【ヨビノリたくみ特別公演】
https://www.youtube.com/watch?v=u5al7kwy64k
数学の魅力とは?中田敦彦と人気教育系YouTuberヨビノリたくみ先生が初コラボ
https://www.youtube.com/watch?v=qxiAyyotAM0
0408デフォルトの名無しさん
垢版 |
2020/08/31(月) 08:12:50.04ID:o+KAewBM
>>393 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
0411デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:15:43.55ID:0jcGZySh
\(._. \)
0412蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 13:37:09.03ID:tSOV4fJk
お題: 覆面算パズルをランダムに自動生成せよ。

単語は大文字のアルファベットのみとする。
各単語は自然数を表している。
単語の各文字は数字を表している。
各単語の先頭はゼロではない。
同じ文字は同じ数字が入る。文字が違えば、数字も違う。
各単語は、3文字以上6文字以下とする。
答えは一つでなければいけない。
今回は、簡単な足し算のみとする。

例)
SEND+MORE=MONEY.
BASE+BALL=GAMES.

単語リスト:https://gist.github.com/deekayen/4148741
0413蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 13:41:36.35ID:tSOV4fJk
お題:覆面算パズルを解くプログラム。

例)
SEND+MORE=MONEY
→9567+1085=10652.

BASE+BALL=GAMES
→7483+7455=14938.
0414デフォルトの名無しさん
垢版 |
2020/08/31(月) 14:49:18.65ID:7ZWcUsrI
>>393
Elixir

# 再帰で、蓄積リスト・ary に、連結していく

defmodule MyList do
def add( num ), do: _add( num, [ ] )

defp _add( 0, ary ) do
ary
end

defp _add( num, ary ) when num > 0 do
_add( num - 1, List.duplicate( num, num ) ++ ary )
end
end

ary = MyList.add 3
IO.inspect ary #=> [1, 2, 2, 3, 3, 3]
0417蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/08/31(月) 16:24:48.19ID:lWn/zYPT
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
0421デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:18:49.49ID:J48xi6fS
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
0422デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:23:55.64ID:fdwPQ6pV
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
https://sunasunax.hatenablog.com
0423デフォルトの名無しさん
垢版 |
2020/08/31(月) 21:02:28.99ID:Sr2UUXBk
デキる人ほどフリーランス化する?★働き方改革
https://www.youtube.com/watch?v=ALflcwYOJtQ
年収890万円以下は社会のお荷物★騙される労働者
https://www.youtube.com/watch?v=CAp-ZrJpF54
騙されたくなかったら勉強しろ★他人のルールは損をする
https://www.youtube.com/watch?v=s176O6qKuPw
底辺の99%は一生底辺★10年後が見えない同僚たち
https://www.youtube.com/watch?v=4Mfiwn2sPD8
稼ぎたければ働くな★4千万円ぽっちも稼げないのはなぜ?
https://www.youtube.com/watch?v=Fi7bILN4wes
サラリーマン思考では儲からない理由
https://www.youtube.com/watch?v=iW6oAo0q0ZI
で、無職は稼いでるの?★YouTube収益はアホにも分かりやすい
https://www.youtube.com/watch?v=md0WPAsfarY
「で、年収は?」と聞くバカとは合わない社長業
https://www.youtube.com/watch?v=nEELEUhBLDk
0424253
垢版 |
2020/08/31(月) 21:47:00.41ID:Mm8nXRhv
>>393 Perl5

use feature qw{signatures};
sub f($n) {
 $n ? (f($n-1), ($n) x $n) : ()
}
@a = f(3);
print "@a\n";


実行結果
~ $ perl 18_393_inc_ary.pl
The signatures feature is experimental at 18_393_inc_ary.pl line 2.
1 2 2 3 3 3
0425253
垢版 |
2020/08/31(月) 21:54:06.64ID:pmRcaHIk
>>393 Perl5、単にmapで値個数要素のリストに展開

$n = 3;
@a = map{($_) x $_} 1..$n;
print "@a\n";


j実行結果
~ $ perl 18_393_inc_ary_map.pl
1 2 2 3 3 3
0429デフォルトの名無しさん
垢版 |
2020/09/01(火) 14:16:37.60ID:3qKfeSqF
全く知らない構文の言語でカンでいじっても構文エラーも止められずに
動かない機械ガチャガチャしてるだけ感すごいよな
0430蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/01(火) 18:47:08.83ID:4meeAMMW
お題: テキストファイル「input.txt」の中の" dot "を"."に置換し、さらに" at "を"@"に置換したときに、RFCに従ったメールアドレスになる部分文字列を抽出し、そのメールアドレスのリストを改行区切りで出力せよ。
0431デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:47:54.44ID:Y09tsFBY
>>393 Ruby
def f(n)
(1..n*(n+1)/2).map{|x| ((x*2)**0.5+0.5).to_i}
end
0432デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:48:39.88ID:PZXbhIm5
>>430
テスト用のinput.txtちょーだい!
0433蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/01(火) 18:54:57.84ID:4meeAMMW
>>432
「これはテキトーなテキストデータである。
例えば
user at example dot com
とか
user at example dot co dot jp
とか
katayama dot hirofumi dot mz at example dot net
とかあるでしょ。
詐欺メールに引っ掛からないためには、URLのドメインを確認することが一番。
google.com
google.co.jp
まあ、いろいろあるっしょ。」
0434デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:57:45.00ID:PZXbhIm5
>>433
あざーす!
0439253
垢版 |
2020/09/02(水) 00:54:35.54ID:GpxOT2yi
>>393 Python3

(n, a) = (3, [])
for i in range(1, n+1):
  a.extend([i] * i)
print(a)


実行結果
~ $ python 18_393_incary.py
[1, 2, 2, 3, 3, 3]
0442デフォルトの名無しさん
垢版 |
2020/09/03(木) 16:10:13.26ID:dE9fk8zR
>>395 Ruby

def f(s,d)
eval("['"+s.gsub(d,"','")+"']")
end
p f("1 2 3 4"," ")

実行結果
["1", "2", "3", "4"]
0443蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/03(木) 19:41:51.27ID:0EoV326K
お題: バイナリファイルを読み込んで各バイトの各ビットについて、上位ビットから順に、ゼロをシフトJISの半角カナの「タ」に、いち(1)を同じくの「ヒ」に変換する変換器。
0445デフォルトの名無しさん
垢版 |
2020/09/03(木) 21:11:58.06ID:97aiR77+
>>443 Ruby
Fpath = 'test.bin'
File.open( Fpath, 'wb' ){|fh| fh.write "Hello word\n" }

Tbl10 = "\xC0\xCB".force_encoding(Encoding::BINARY)
tb = (0..255).to_a.map{|x| ('%08b' % x).tr( '10', Tbl10 ) }
buff = File.open( Fpath, 'rb' ).each_byte.map{|x| tb[x] }
puts buff.join().encode( Encoding::UTF_8, Encoding::CP932 )

print buff.map{|x| x.tr( Tbl10, '10' ).to_i(2).chr }.join

#=> ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
#=> Hello word
0446デフォルトの名無しさん
垢版 |
2020/09/03(木) 23:01:51.02ID:ZdR77D/Z
>>442

f("'", ?,)
# =>SyntaxError: (eval):1: unterminated string meets end of file
[''']
   ^
(eval):1: syntax error, unexpected end-of-input, expecting ']'
0447253
垢版 |
2020/09/04(金) 00:01:38.15ID:7q8p4uRD
>>443 Perl5

print map{qw(ヒ タ)[$_]} map{split '', sprintf '%08b', ord} split'','Hello word';

実行結果
~ $ perl 18_443_タヒ.pl
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒ
0449253
垢版 |
2020/09/04(金) 00:04:27.06ID:gbrpP/bR
>>447
>>444 逆変換機もか…忘れてた
まいいや
0450デフォルトの名無しさん
垢版 |
2020/09/04(金) 14:52:11.79ID:Wl7qFIBb
>>443
Elixir。CP932 が無いので、途中までしか出来ません!

# 8桁・2進数・0埋め

_ = 'abc'
|> Enum.map( fn char -> :io.format( "~8.2.0B", [ char ] ) end )

# 01100001_01100010_01100011
0451デフォルトの名無しさん
垢版 |
2020/09/04(金) 23:27:10.30ID:1jfeDIRi
>>443
POSIX sh

変換 (https://paiza.io/projects/Yk6wcUtik7BZZ0AHspdZFw?language=bash)
for _b in $(od -v -A n -t d1); do
printf '%b' \
"\\$(( $_b & 128 ? 300 : 313 ))" \
"\\$(( $_b & 64 ? 300 : 313 ))" \
"\\$(( $_b & 32 ? 300 : 313 ))" \
"\\$(( $_b & 16 ? 300 : 313 ))" \
"\\$(( $_b & 8 ? 300 : 313 ))" \
"\\$(( $_b & 4 ? 300 : 313 ))" \
"\\$(( $_b & 2 ? 300 : 313 ))" \
"\\$(( $_b & 1 ? 300 : 313 ))"
done

逆変換 (https://paiza.io/projects/AN6vfPgtdJODnYL9jW8MDQ?language=bash)
od -v -A n -t o1 |
fold -b -w 32 |
while read _b8 _b7 _b6 _b5 _b4 _b3 _b2 _b1; do
printf '%b' "\\$((
($_b8 == 300 ? 200 : 0) +
($_b7 == 300 ? 100 : 0) +
($_b6 == 300 ? 40 : 0) +
($_b5 == 300 ? 20 : 0) +
($_b4 == 300 ? 10 : 0) +
($_b3 == 300 ? 4 : 0) +
($_b2 == 300 ? 2 : 0) +
($_b1 == 300 ? 1 : 0) ))"
done
0452253
垢版 |
2020/09/04(金) 23:39:14.02ID:tinAGSqp
>>443>>444 Perl5、バイナリコード(ln)を含むデータをファイルから読み込み、変換》逆変換

undef $/; # slurp
$s = <>;

@b = map{qw(ヒ タ)[$_]} split'', unpack 'B*', $s;
print @b, "\n";

%h = qw(ヒ 0 タ 1);
$t = pack 'B*', join '', map{$h{$_}} @b;
print $t;



実行結果

$ od -xc Hello_world_ln.txt
0000000 6548 6c6c 206f 6f77 6c72 0a64
H e l l o w o r l d \n

$ cat Hello_world_ln.txt
Hello world

$ perl 18_443_444_ヒタ.pl < Hello_world_ln.txt
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒタタヒヒヒタタヒヒタヒヒヒヒヒヒタヒタヒ
Hello world
0453デフォルトの名無しさん
垢版 |
2020/09/05(土) 15:41:23.97ID:dAk5cbFF
お題

UTF-8 は以下のように、先頭ニブル・4ビットで、1〜4バイト文字を判別しています。
この法則を使って、この文字列のバイト数を求めよ

あaθ💀xΩ死🄫

1バイト文字: 0000〜0111: 0〜7

多バイト文字の2バイト目以降
1000〜1011: 8〜11(8〜B)

2バイト文字: 1100〜1101: 12〜13(C〜D)
3バイト文字: 1110: 14(E)
4バイト文字: 1111: 15(F)

Unicode
https://seiai.ed.jp/sys/text/csd/cf14/c14a070.html
0454デフォルトの名無しさん
垢版 |
2020/09/05(土) 15:42:06.74ID:gCThzAly
お題:
左から右へ、1から10までの番号が付いたマスが順番に隙間なく並んでいます。
今日、訪問者N人があなたに会いにやってきます。各訪問者i(1≦i≦N)は時刻TiにマスPiを訪れます。
ここで、あなたが時刻TiにマスPiに居たのならば「訪問者iは満足した」とします。
最大で何人の訪問者を満足させられるか求めてください。
制約:
最初、時刻は0とする。
あなたは最初、マス1にいる。
あなたは隣り合うマスへの移動手段しか持たない。
1マス移動した場合にも、移動せずに現在マスに留まった場合にも時間1を消費する。
Ti == Tj で Pi == Pj ならば i == j
1≦N ≦10^5
1≦Ti≦10^5
1≦Pi≦10
入力:
N
T1 P1
T2 P2
...
TN PN
出力:
(最大で何人を満足させられるか)
例1:
入力:
5
5 4
2 3
3 2
3 4
4 4
出力:
4
0455デフォルトの名無しさん
垢版 |
2020/09/05(土) 15:55:10.03ID:gCThzAly
前回のお題はC++の方からしか回答を頂けなかったので、他の言語の方も考えていただけると嬉しいです
0456デフォルトの名無しさん
垢版 |
2020/09/05(土) 17:01:13.99ID:4vfoT7Xn
Tが10^5のそれぞれのマスにいたときの点数を求める(客がいた場合1、いなかったら0)
Tが10^5-1のときのマスの点数を求める(そこに客がいたなら1、いなかったら0
更にそこから次の時間に移動可能なマスの最大の点数のものを加える)
Tが1までくり返す
これで良さそうな気がするけど書くのがめんどくさい
0457デフォルトの名無しさん
垢版 |
2020/09/05(土) 17:35:24.39ID:s0GYNWbk
>>453
「この文字列の文字数を求める」んじゃないの?
バイト数だったらUTF-8だろうがSJISだろうが関係なく,
バイトの個数を数えればいいだけになってしまうが……。
0458デフォルトの名無しさん
垢版 |
2020/09/05(土) 18:43:21.60ID:EHHCviTW
文字コードまわりの難しさにぶつかったことないから何が何やら
0459デフォルトの名無しさん
垢版 |
2020/09/05(土) 19:37:20.09ID:PsWvtVS4
>>453 Ruby
文字数とバイト数を適当に出力
require "cgi"
require "cgi"
str = CGI.unescapeHTML( "あaθ💀xΩ死🄫" )
sbs = str.bytes
i = n = 0
while i < sbs.size
case sbs[i] >> 4
when 0..7; i += 1
when 8..11; warn "Error"
when 12,13; i += 2
when 14; i += 3
when 15
case sbs[i] & 0xF
when 0..7; i += 4
when 8..11; i += 5
when 12,13; i += 6
else warn "Error"
end
end
n += 1
end
puts "#{n} chars\n#{str.size} chars"
puts "#{str.force_encoding( Encoding::BINARY ).size} bytes\n#{sbs.size} bytes"
puts str.bytes.map{|x| '%02X' % x }.join(' ')
#=>
8 chars
8 chars
20 bytes
20 bytes
E3 81 82 61 CE B8 F0 9F 92 80 78 CE A9 E6 AD BB F0 9F 84 AB
0460デフォルトの名無しさん
垢版 |
2020/09/05(土) 19:47:45.16ID:EHHCviTW
普通に処理系がchar配列にしたときサイズを入れてくれるからそれでわかっちゃうw
0461453
垢版 |
2020/09/05(土) 21:41:42.84ID:dAk5cbFF
書いてある条件だけで、求めて下さい!

他の方法では、簡単すぎるので
0463デフォルトの名無しさん
垢版 |
2020/09/05(土) 22:24:40.63ID:s0GYNWbk
>>461
もう一度訊くけど,
ほんとに「バイト数」を求めたいの?

だったら
$ echo ' あaθ💀xΩ死🄫 ' | wc -c
これで一瞬だけど。

文字数なら,UTF-8を扱える言語で数えるか,
POSIX shでやるなら……面倒だな……。
https://gist.github.com/cmplstofB/0b0ce2bf052b3bb64d091fc83504fc32#file-u8dec-sh
こういうの使えばいいかな。
なお,wc -mはPOSIXでは必ずしも
UTF-8文字列を扱えるとは既定されていないので今回の目的には適さない。
0466253
垢版 |
2020/09/06(日) 00:11:00.10ID:Lo+HJN6n
>>380 Perl5

($H, $W) = split' ',<DATA>; @a = map{[split/\s*/]} <DATA>;
for $h (0..$H-1) { for $w (0..$W-1) {
 $c = $a[$h][$w];
 $S = "$h,$w" if $c eq 'S'; $G = "$h,$w" if $c eq 'G';
 if ($c ne '#') {
  $e{($h-1).",$w $h,$w"}++ if $h and $a[$h-1][$w] =~ /[.SG]/;
  $e{"$h,".($w-1)." $h,$w"}++ if $w and $a[$h][$w-1] =~ /[.SG]/;
 }}}
use feature qw{current_sub say}; no warnings 'experimental';
sub {
 my $p = @_[-1];
 for my $q (map{s/ *$p *//; $_} grep{/$p/} keys %e) {
  if ($q eq $G) { $h{"@{[@_, $q]}"}++ }
  else { __SUB__->(@_, $q) unless grep{/$q/} @_ }
 }
}->($S);
say scalar keys %h;
__DATA__
5 5
S....
##.#.
...#.
...#.
....G


実行結果
~ $ perl 18_380_maze_paths.pl
12
0467253
垢版 |
2020/09/06(日) 00:30:27.55ID:WEZ/j7UH
>>466
今思うとエッジの表現は無向ではなく二重の有効グラフにしたほうが簡潔なコードになったかもしれない
まぁいいや…二度書く気は起きない…
0468デフォルトの名無しさん
垢版 |
2020/09/06(日) 00:34:53.48ID:T9SJW9BR
>>395
Kotlin
https://paiza.io/projects/N9X2CVAQj3NJ0RXPrk7i0g

区切りは文字列で指定出来るとか、大文字小文字無視とか、最大分割数を決められるだとか、色々と機能を追加してしまった。
0469デフォルトの名無しさん
垢版 |
2020/09/06(日) 03:34:19.13ID:0eLnTbkJ
お題
4999の逆数を小数点 以下48桁まで求める。
0475デフォルトの名無しさん
垢版 |
2020/09/06(日) 10:58:30.52ID:5MBR0P77
1京くらいのループで解けるなら実用性はかろうじてある
競技性は無い
0478デフォルトの名無しさん
垢版 |
2020/09/06(日) 11:29:22.40ID:r+7yP+3C
>>476
いや,総当たりなら,3^(10^5)。
時刻が1--10^5までの間に,
「留まる」「右/左に移動する」の計3通りを
互いに独立に(以前の行動に影響されずに)
行うから。

書いていて思ったけど,端に居るときは
行動可能性が2通りに減るけど,
それでも2^N通りでは済まない。
0479253
垢版 |
2020/09/06(日) 12:24:42.87ID:cAaPNRIA
>>474

>>466>>380への回答なので
その計算量の推定議論には該当しません
0480デフォルトの名無しさん
垢版 |
2020/09/06(日) 12:31:12.27ID:OF7UMaiS
>>478
1人が満足することで1点得るとする
点数の最大値は入力されたnの数しかないからn点で
それぞれについて1点得るか得ないかの2^nしかない
あとはそれを実現できるか移動があるかどうかが焦点になる
なので全移動経路を総当りする必要性はない
0481デフォルトの名無しさん
垢版 |
2020/09/06(日) 13:12:26.24ID:GcXxHJb3
>>469 C++
#include <iostream>
int main(){
const int d = 4999;
int n = 1;
std::cout << "0b0.";
for( int i = 1; i <= 48; ++ i ){
n <<= 1;
if( n >= d ){
n -= d;
std::cout << '1';
} else {
std::cout << '0';
}
}
std::cout << std::endl;
return 0;
}
// STDOUT
0b0.000000000000110100011100000111010100101011010001
0483デフォルトの名無しさん
垢版 |
2020/09/06(日) 15:12:48.21ID:JPL9qi8o
>>480
2^nも必要ないよ
それぞれの時刻でホストが取れる状態はどのマスにいるかということだけ
だから時刻xマスの数が全状態数
0484デフォルトの名無しさん
垢版 |
2020/09/06(日) 15:20:10.24ID:JPL9qi8o
でその状態数の方が全経路数より圧倒的に少ないので
経路に沿ってではなくて状態について解いていく
0486デフォルトの名無しさん
垢版 |
2020/09/06(日) 16:34:17.02ID:r+7yP+3C
>>483
ん?
ホストは隣合うマスにしか移動できないから,
単純にその場面での状態を考えるだけでは駄目なんでは?
0489デフォルトの名無しさん
垢版 |
2020/09/06(日) 17:02:55.61ID:JPL9qi8o
>>465のコードは多分バグがある気がする

51行目と57行目を
a = score[j-1] + bit_test(timeline + i, j);
a = score[j+1] + bit_test(timeline + i, j);
こう変えて
43行目を
for(i = last_time-1; i >= 0; i--){
こうするのが正しいと思う
0490253
垢版 |
2020/09/06(日) 18:02:02.21ID:EhLQImvS
>>454 Perl5、人の訪問を待ち受け得るすべての場合を愚直に総当りで最大満足数を探す

$T = <DATA>;
use feature qw{signatures say}; no warnings 'experimental';
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p, $s) {
 if ($t++ < $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep/$p/, @{$p{$t}};
   $s += max(f($t, $p-1, $s), f($t, $p, $s), f($t, $p+1, $s))
  }
  return $s
 }
0
}
say f(0, 1, 0);
__DATA__
5
5 4
2 3
3 2
3 4
4 4

~ $ perl 18_454_N_vztr.pl
4
0492デフォルトの名無しさん
垢版 |
2020/09/06(日) 18:13:41.84ID:65q5IvB9
>>490
perl読めないから間違ってたらごめんだが、
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
の入力で20を返してくる。(答えは5)
0493253
垢版 |
2020/09/06(日) 18:20:26.24ID:EhLQImvS
>>492
はい、バグってました。投稿してから気がついた
時間あったら直します
0494253
垢版 |
2020/09/06(日) 19:04:52.54ID:EhLQImvS
>>490 Perl5、>>489 のBug Fix、同じ所を何度も通るので漸化式かメモ化使って動的計画法で解けるようにできるかもしれない

use feature qw{signatures say}; no warnings 'experimental';
$T = <DATA>; chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p) {
 my $s = 0;
 if ($t <= $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep{$_ eq $p} @{$p{$t}};
   $t++;
   $s += max(f($t, $p-1), f($t, $p), f($t, $p+1));
  }
 }
 $s
}
say f(0, 1);
__DATA__
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
0495253
垢版 |
2020/09/06(日) 19:13:46.76ID:EhLQImvS
>>494 誤記スマソ
× >>489 のBug Fix
>>490 のBug Fix
0496465
垢版 |
2020/09/06(日) 20:59:44.84ID:I1QXsub5
>>489
ご指摘の通りバグってたので再投稿します。
https://ideone.com/VxDLwz

やりたかったことは>>456が言っていることと全く同じです。
イメージとしてはhttps://imgur.com/j0azhSf.jpg (※お題を考えたい人は閲覧注意)
>>465のコードは大抵の場合なぜかうまくいくコードのようです。
0497253
垢版 |
2020/09/06(日) 21:09:12.93ID:loE/lDca
>>454 Perl5、>>494 を動的計画法で解くように改良(但し再帰呼び出しを使っているので10^5など規模が大きい問題を解くなら下から上に計算してくる単純ループに書き換えた方が良い)

no warnings 'experimental';
use feature qw{signatures say};
$T = <>;
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<>;
use List::Util 'max';
sub f($t, $i) {
 my $s = 0;
 if (0 < $i and $i < 11) {
  return $m[$t][$i] if defined $m[$t][$i];
  $s++ if grep{$_ == $i} @{$p{$t}};
  $s += max(f($t+1, $i-1), f($t+1, $i), f($t+1, $i+1))
   if $t < $T;
  $m[$t][$i] = $s;
 }
 $s
}
say f(0, 1);
0498253
垢版 |
2020/09/06(日) 21:11:43.16ID:loE/lDca
>>497 の実行結果

~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | perl 18_454_N_vztr_DP_rec.pl
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | perl 18_454_N_vztr_DP_rec.pl
5
0499253
垢版 |
2020/09/07(月) 00:59:21.14ID:5qB4CD7g
>>469 Perl5、小数点以下48桁で「丸め」

use bignum(p=>-48);
print 1/4999, "\n";


実行結果
$ perl 18_468_1_4999-48p.pl
0.000200040008001600320064012802560512102420484097
0500453
垢版 |
2020/09/07(月) 18:47:15.23ID:IF51aHwX
>>453
Elixir

ary = for << byte <- "あaθ💀xΩ死🄫" >> do # 1バイトずつ、ループ
<< nibble::size( 4 ), _::size( 4 ) >> = << byte >> # 先頭の4ビット

case nibble do
n when n in 0..7 -> 1
n when n in 8..11 -> 0
n when n in 12..13 -> 2
14 -> 3
15 -> 4
end
end

res = Enum.reject( ary, fn n -> n == 0 end ) # 0 を削除する
IO.inspect res
# [3, 1, 2, 4, 1, 2, 3, 4]

IO.puts( length res ) # 8文字
IO.puts( Enum.sum res ) # 20バイト
0502253
垢版 |
2020/09/08(火) 23:15:40.17ID:TMzoRSJV
>>454 go 動的計画法

package main
import ( "fmt" )
var m [][]int
func v(t int, p int) int {
 if 1 <= p && p <= 10 { return m[t][p] }; return 0 }
func max3(n1 int, n2 int, n3 int) int {
 n := n1; if n < n2 { n = n2 }; if n < n3 { n = n3 }; return n }
func main() {
 var n, t, p, i, T int
 fmt.Scan(&n)
 var a [][]int = make([][]int, n)
 for i=0; i<n; i++ {
  fmt.Scanf("%d %d", &t, &p)
  a[i] = []int{ t, p }
  if t > T { T = t }
 }
 m = make([][]int, T+1)
 for t=0; t<=T; t++ {
  m[t] = make([]int, 11)
  for p=1; p<=10; p++ { m[t][p] = 0 }
 }
 for i=0; i<n; i++ { m[a[i][0]][a[i][1]] = 1 }
 for t=T-1; 0<=t; t-- {
  for p=1; p<=10; p++ {
   m[t][p] += max3(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
  }
 }
 fmt.Println(m[0][1])
}
0503253
垢版 |
2020/09/08(火) 23:16:27.70ID:TMzoRSJV
>>502 の実行結果

~ $ cat 18_454_ex1.txt
5
5 4
2 3
3 2
3 4
4 4
~ $ cat 18_454_ex1.txt | go run 18_454_N_vztr_DP.go
4
~ $ cat 18_454_ex2.txt
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
7 10
~ $ cat 18_454_ex2.txt | go run 18_454_N_vztr_DP.go
5
0504253
垢版 |
2020/09/09(水) 09:03:14.92ID:GqQ7+Mc6
>>454 Python3

n = int(input())
a = [list(map(int, input().split())) for i in range(n)]
T = max([a[i][0] for i in range(n)])
m = [[0] * 11 for t in range(T+1)]
for i in range(n):
   m[a[i][0]][a[i][1]] = 1
def v(t, p):
  return m[t][p] if 0 < p and p < 11 else 0
for t in reversed(range(T)):
  for p in range(1, 11):
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
print(m[0][1])


実行結果 (>>503 と同じテキストファイル 18_454_ex1.txt, 18_454_ex2.txt を入力に使用)
~ $ cat 18_454_ex1.txt | python 18_454_N_vztr_DP.py
4
~ $ cat 18_454_ex2.txt | python 18_454_N_vztr_DP.py
5
0505253
垢版 |
2020/09/09(水) 09:34:15.87ID:GqQ7+Mc6
>>504
  for p in range(1, 11):
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))

  for p in range(1, 11):
    if t+1 < p: continue
    m[t][p] += max(v(t+1, p-1), v(t+1, p), v(t+1, p+1))
とか書くと、右上三角の不要な計算を省けるが10^5などtが大きいと大勢に影響はないな…
0507453
垢版 |
2020/09/10(木) 16:14:51.93ID:ypm5ktrY
お題

>>453
のルールに基いて、以下の3つの10進数のバイト列を、先頭(1バイト目)からチェックしていく時、
最初にルール違反となるのは、何バイト目か

129 130
120 169
240 159 146 206 184
0512蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/13(日) 22:12:25.49ID:p9JSm0uj
お題: 「ジャンケンすたじあむ オンライン」というソーシャルゲームのウェブサイト、もしくはソフトウェアパッケージを制作・運営せよ。

ジャンケンをしたい人が集まって、ひたすらジャンケンをして、勝ち数を競うというソーシャルゲーム。

ジャンケン試合は2人組になり、お互いに出す手を事前に申告し、両者が申告したところでシステムが自動で勝敗を判定する。
0514デフォルトの名無しさん
垢版 |
2020/09/13(日) 22:22:25.86ID:lu6eiMc4
動的計画法ってちゃんと勉強しないとなかなか思いつかないよな
0515デフォルトの名無しさん
垢版 |
2020/09/14(月) 12:06:08.48ID:u8/qg5cq
>>509
Haskell

f x = head [ d | d <- [(ceiling $ sqrt $ fromInteger x)..], mod x d == 0]
main = mapM_ print [(x,f x) | x<-[100..130]]
0516蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/14(月) 14:12:59.44ID:/Fwk/gkb
お題: 沖縄の名物「シークワーサー」のことが書かれた記事のUTF-8日本語テキストファイル「input.txt」がある。
しかし、記事の執筆に多数の編集者が関わったため、シークワーサーの表記がぶれていることが分かった(次のリンクを参照)。

https://ja.m.wikipedia.org/wiki/%E3%82%B7%E3%83%BC%E3%82%AF%E3%83%AE%E3%83%BC%E3%82%B5%E3%83%BC

表記のぶれを「シークワーサー」に表記を統一したテキストファイル「output.txt」を出力せよ。
0517デフォルトの名無しさん
垢版 |
2020/09/14(月) 17:05:19.85ID:xV8mpaUY
エンジニアが書いてるならシークワーサだな
間違いない
0518蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/14(月) 17:29:10.23ID:yesAwSRz
>>516 input.txtの中身:

「シークヮーサーは、別名シイークワシャーと呼ばれ、シークヮーサーの香りがするシークヮーシャーのような柑橘系の果物である。シィークアーサーはアーサー王とは関係がないと思われる。」
0520蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/14(月) 20:32:57.79ID:/Fwk/gkb
お題: お使いのプログラム言語で、COBOLに負けない最強の通貨型を設計せよ。

任意の桁数の10進整数を扱えること。
任意の有効桁数の10進小数を扱えること(10進浮動小数点数)。
加減乗除、剰余、任意桁での切り捨て・切り上げ・四捨五入が可能。
10進数表記で入出力できること。
比較的高速に演算できること。
0522デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:04:18.95ID:I0h6BMX6
割り算するときに桁数していするだけっしょ
0523デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:07:19.27ID:I0h6BMX6
蟻人間さんにお題:銀行丸めを整数型のみを使用して実装してください
0525デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:24:52.09ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
0526デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:26:17.95ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
0530デフォルトの名無しさん
垢版 |
2020/09/15(火) 00:21:13.43ID:2J2Mo0F/
>>516

sed -r 's/シ([イィ]ー?|ー)ク[アァワヮ]ー?(サ|シャ)ー/シークワーサー/g'

-r は拡張正規表現を使うオプション。
これで >>518 の文を変換するとこうなる。

「シークワーサーは、別名シークワーサーと呼ばれ、シークワーサーの香りがするシークワーサーのような柑橘系の果物である。シークワーサ ーはアーサー王とは関係がないと思われる。」
0531蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/09/15(火) 02:31:45.89ID:39uvi0pE
現実問題では、long double型で十分な精度が出るから、独自の浮動小数点数は必要なさそう。

残りは四捨五入とか銀行丸めなどの端数処理。
0533デフォルトの名無しさん
垢版 |
2020/09/15(火) 14:07:27.97ID:2J2Mo0F/
bc コマンド使えば良い。
他の言語から使いたい場合はライブラリをリンクするか、またはこっそり裏で fork(), exec() してパイプで繋いで計算させるw
0539デフォルトの名無しさん
垢版 |
2020/09/16(水) 10:06:16.52ID:eJDvfDFO
ぶぶ漬けどうぞと言われて、美味しくいただいてさらに食レポまで始めてるような状態かな
0543デフォルトの名無しさん
垢版 |
2020/09/17(木) 07:37:06.63ID:Lu9ZyyRf
お題: (複数行のバックグラウンド、座標テキスト、座標)から合成テキストを返す関数を作れ
座標テキストとバックグラウンドは同じサイズ(とりあえず横4縦3とする)

background
┏┓┏┓
┃┗┛┃
┗━━┛

座標テキスト
ab23
9014
8765

座標が
0なら
┏┓┏┓
┃*┛┃
┗━━┛
6なら
┏┓┏┓
┃┗┛┃
┗━*┛
11なら
┏*┏┓
┃┗┛┃
┗━━┛
あまり綺麗な実装が出来なかったから問題にした https://repl.it/@vip0/analogclock#index.js
0544デフォルトの名無しさん
垢版 |
2020/09/17(木) 08:03:03.74ID:dVFtUKnH
>>543 Ruby
def analogClockStr( h, bg, positions )
(clockStr = bg.dup)[ positions.index( h.to_s(16) ) ] = '*'
clockStr
end

background = '
┏┓┏┓
┃┗┛┃
┗━━┛
'.strip.freeze

positions = '
ab23
9014
8765
'.strip.freeze

puts analogClockStr( 0, background, positions )
puts analogClockStr( 6, background, positions )
puts analogClockStr( 11, background, positions )
0546デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:17:16.17ID:GTUBgTcD
>>543
問題の意味がわからない。
0548デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:34:08.96ID:Lu9ZyyRf
ほんとにどの問題よりもクソみたいな問題だと思っています
本当にすいませんでした
0549デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:42:30.73ID:Lu9ZyyRf
ただ私は純粋にプログラミングが好きで
全く質問したかったわけじゃないのはわかってほしい
二次配列じゃないと処理できないものだと勘違いしていたのが甘いしシンプルにしすぎて問題が破綻してしまった
0550デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:48:33.25ID:Lu9ZyyRf
純粋にここにいる人たちが解法として書くコードは好きだし
たまに驚くべき角度から解を出す人もいるしマイナーなアルゴリズムも知れて尊敬してる
今回もスマートなコードが見れるんじゃないかと純粋に期待して問題にしてみたんだ
スレも今流れ遅かったし
0551デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:50:39.09ID:Lu9ZyyRf
しかしお前らは牙を向いた
純粋に問題作成初心者の心を無碍にして
鋭い刃のような言葉を投げつけてきた
お前らは今日から敵とみなす

あばよ😎✋絶望しな
0552◆QZaw55cn4c
垢版 |
2020/09/17(木) 19:40:19.09ID:+AujTTfU
>>551
奏ちゃん「自意識過剰なんじゃないですか?」
0553デフォルトの名無しさん
垢版 |
2020/09/17(木) 22:33:12.99ID:H8Ldt8Jg
お題:文字列の末尾の数字をインクリメントしてください

入力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS
出力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
0555デフォルトの名無しさん
垢版 |
2020/09/17(木) 23:01:20.65ID:ockp6LF+
>>553 Ruby

$><<gets.sub(/\d+(?=\D+$)/, &:succ)

# => IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoim
M3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOn
xhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfP
sQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuu
UBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
0556デフォルトの名無しさん
垢版 |
2020/09/18(金) 01:44:05.02ID:hhldwLbP
>>553
Perl

コマンドラインで以下のように入力後に標準入力から文字列を読ませると標準出力に出力される。

perl -pe 's/(\d+)(\D+)$/($1+1).$2/ge'

あるいはファイルに内容を入れておいてそのファイルを指定する。
0559デフォルトの名無しさん
垢版 |
2020/09/18(金) 06:53:31.48ID:5l49iFOd
>>511
その場合の良いアルゴリズムって
「素因数分解を早く解くアルゴリズム」
よね。
それがもし思いついたらフィールズ賞ものではw
0562デフォルトの名無しさん
垢版 |
2020/09/18(金) 21:54:28.27ID:WsEcPr9A
>>553
haskell

theStr = "B0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS"

f x = let
(a,b) = span (\x-> (x<'0') || (x>'9')) $ reverse x
c = show $ (+1) $ read $ return $ head b
in reverse $ a++c++(tail b)

main = do
print $ f theStr
0563デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:21:52.09ID:hhldwLbP
>>558
そうだった。 + じゃなくて * だったな。
0564253
垢版 |
2020/09/18(金) 23:34:45.95ID:/yEGF/vF
>>559
素因数分解まで行かない。
素でなくてもいいので因数のうちイチバン大きいもの。
なんかいい解法見つけられないか、考えているけどいまのところ見出せていない
0565253
垢版 |
2020/09/18(金) 23:36:27.35ID:/yEGF/vF
いや、違うな…
因数のうちイチバン大きいものでは、ダメだわ
0568デフォルトの名無しさん
垢版 |
2020/09/19(土) 12:14:05.54ID:iLwsU5Ay
初出題
数学板の問題より

5つのサイコロの1〜6の面がそれぞれ赤白黄青緑にそれぞれ

["byrbwg", "yrgwbb", "gbrwwy", "gyrbww", "gbrybw"]

と塗り分けられている
この状態では1-6を天地の軸として2〜5の側面にはそれぞれ

["yrbyb","rgrrr","bwwby","wbwwb"]

となっている
それぞれのサイコロを適当に回転させて全ての側面にrwybgがちょうど一回ずつとなるようにしたい
そのような回転の組み合わせは何通りか
本質的に同じものを重複して数えるのを避けるために最初のサイコロの回転は
・動かさない
・1→2,2→3,3→1,4→6,5→4,6→5
・1→3,2→1,3→2,4→5,5→6,6→4
の3つのうちどれかのみを許すとする
(出力)
["yrbgbw","gbybrw","bgwryw","bygwwr","bwrygb"]
["yrbgbw","gbybrw","wywrgb","rwgwyb","bgrywb"]
["rbywgb","gyrbbw","wwgyrb","ygbrww","brwgyb"]
["rbywgb","wybrbg","wwgyrb","wgrbwy","brwgyb"]
0571デフォルトの名無しさん
垢版 |
2020/09/19(土) 16:29:35.90ID:HLFklpM8
>>568
君が何を言わんとしているのかが全くわからない。
0572253
垢版 |
2020/09/19(土) 17:15:41.66ID:6KnxgpBj
>>509 Perl5、>>567にヒントを貰った通り√を使ってnaiveに書くと…

use POSIX 'ceil';
for $n (81, 87, 91) {
 $r = ceil sqrt $n;
 for ($r..$n) {
  $i = $_;
  last until $n % $_;
 }
 print "$n => $i\n"
}

実行結果
~ $ perl 18_509_99_naive.pl
81 => 9
87 => 29
91 => 13

計算量の少ないもう少しカッチョイイ方法を見出せればなぁ…
0576デフォルトの名無しさん
垢版 |
2020/09/19(土) 21:46:21.17ID:HX0Lirqs
イヤnが素数の場合に√nから上むきに探索すると計算量はnになるけど下向きなら√nになる
√n以上の約数と√n以下の約数は同数だけど整数そのものは下側には√nしかなく、上にはn-√nあるので下向きに探していった方が速い
0577デフォルトの名無しさん
垢版 |
2020/09/20(日) 00:25:54.87ID:ZGoKBb8Y
ポラード・ロー法使えばもっと計算量は減る
素数判定と組み合わせればモンテカルロ法ではなくラスベガス法になるから、正当性も担保される
0578デフォルトの名無しさん
垢版 |
2020/09/20(日) 01:39:54.18ID:wHMtOvf4
素因数分解利用するなら素因数分解そのものが手早くできてもダメでしょ?
それを何個か使って最も√nに近いもの探すのはかなり難しいんじゃなかったっけ?
つまり素因数分解n=Πpi^eiが与えられたとして、つぎは
0≦xi≦eiを動かすときΣxi log(pi) が1/2 log(n)に最も近くなるものを決定しなければならない
コレなんか名前ついてる問題で指数オーダーのアルゴリズムしか見つかってないんじゃなかったっけ?
素因子の数はlog(n)のオーダーで増えていくから、結局exp(c log(n)) のオーダーになって、cがどれくらいに収められるか、そもそも指数オーダー必要なのかも未解決なんじゃなかったっけ?
0580デフォルトの名無しさん
垢版 |
2020/09/20(日) 10:19:03.22ID:mk/D54YH
>>579
√n以上の最小の約数をdとして上むき探索に必要な時間はすうがく/d-√n\、下向き探索のそれは\√n-n/d/ (/〜\と\〜/はfloorとceiling)
差は/d-√n\-\√n-n/d/ =\d+n/d-2√n/はam≧gmと\〜/の広義単調性から0以上で上むき探索は素数であるか否かに限らず常に計算量は同じかそれ以上
素数であるか予備検査しても結局上向きに探索したら計算量は同じ以上かかる
0581デフォルトの名無しさん
垢版 |
2020/09/20(日) 10:50:48.99ID:g28HruB5
あ、間違えた
上向き探索の探索量はd-/√n\+1=/d-√n+1\で/~\はceiling
下向き探索の探索量は\√n/-n/d+1=\√n-n/d+1/で\~/はfloor
まぁ常に上向きの方が計算量は増える
まぁもちろんnをまともに素因数分解して>>578みたいな方法で√nオーダーより真に早いのがあるなら上向きも下向きもないけど、もうそこまで行ったら研究者レベルの話でしかない気がする
0582デフォルトの名無しさん
垢版 |
2020/09/20(日) 11:23:17.24ID:MLu0Cj9r
>>550-551
短いこの間でダークサイドに堕ちてて草
0583デフォルトの名無しさん
垢版 |
2020/09/20(日) 11:58:05.82ID:FaUtZa6z
>>582
お詫び→弁解→言い訳→逆ギレ
冷静に書いてたつもりが書いてくうちに興奮して見事なコンボを決めたようだ
0584デフォルトの名無しさん
垢版 |
2020/09/20(日) 12:47:09.77ID:MLu0Cj9r
感情豊かでかわいいw
0585デフォルトの名無しさん
垢版 |
2020/09/20(日) 12:59:00.77ID:wHMtOvf4
気分を変えてまた数学板より

自然数nに対して格子点の集合{(a,b) | a,bは1〜nの整数}の中の相異なる4点の組みで同一円周上に並ぶものの個数を数え上げよ
n:1〜8では
[0,1,14,194,826,2491,6364,14564]
のハズ
0586デフォルトの名無しさん
垢版 |
2020/09/20(日) 13:05:52.02ID:wHMtOvf4
>>585
ちなみにn=3の場合の14個は
1×1の正方形:4個
2×2の正方形:1個
√2×√2の正方形:1個
2×1の長方形:4個
4辺が1,1,√2,2√2の等脚台形:4個
の14個
0591デフォルトの名無しさん
垢版 |
2020/09/20(日) 22:46:33.41ID:9sb+TTLg
>>585
問題がわからない。
0592デフォルトの名無しさん
垢版 |
2020/09/21(月) 00:11:09.46ID:ZXxiMs6i
>>591
n=3だと

●●◯ ◯●● ◯◯◯ ◯◯◯
●●◯ ◯●● ●●◯ ◯●●
◯◯◯ ◯◯◯ ●●◯ ◯●●

●◯● ◯◯◯ ●●◯ ◯●●
●◯● ●◯● ◯◯◯ ◯◯◯
◯◯◯ ●◯● ●●◯ ◯●●

●●◯ ◯●● ◯◯● ●◯◯
◯◯● ●◯◯ ◯◯● ●◯◯
◯◯● ●◯◯ ●●◯ ◯●●

●◯● ◯●◯
◯◯◯ ●◯●
●◯● ◯●◯

の14通り
0593デフォルトの名無しさん
垢版 |
2020/09/21(月) 11:36:08.07ID:VFD1LGbi
>>585のお題は、
平面上に4点を選んだとき、その4点をすべて含む円周が存在する場合としない場合がある
xy平面上に、x,yの各座標が1〜nの整数であるような、互いに異なる点を4つ選んだとき、4点すべてを含む円周が存在するものがいくつあるか?
n=1〜8についてそれぞれ数え上げよ
(註:n=1のときは異なる4点を選べないので、解は0でよい)

ってことでいいかな?
0595デフォルトの名無しさん
垢版 |
2020/09/21(月) 14:54:29.54ID:/KyZWHiy
>>594
正解だと思う
おそらくn=9までは

[0,1,14,184,762,2257,5704,13040,25996]

今作ってるのはC[n^2,4]を全数検査してるのでO(n^8)で計算量増えるので二桁以上はしんどいorz
0596デフォルトの名無しさん
垢版 |
2020/09/22(火) 00:03:46.43ID:jIz1rAqD
誰かフォルダにパスワード駆ける方法教えてくれ
0597253
垢版 |
2020/09/22(火) 02:15:18.79ID:jDcMk3G3
対象性を考慮する以外の計算量の削減手段はないのかねこの手の問題は
解決すべき課題は計算量の削減ばかりではないだろうけれどさ
0598デフォルトの名無しさん
垢版 |
2020/09/22(火) 09:28:15.64ID:yucbsR+t
まぁ何に重きを置くかですな
数学板でこの手のプログラムが必要になるのは誰も答え持ってなくて、一応答えは出てるけど確認したいときとか
その時は速度より“確実に正しい”事の方が重要になる
この場合も対称性やら、明らかに無駄な可能性を排除すれば速度は上がるけど“確実に正しい”のかは怪しくなってしまう
実務でプログラム使う人もその辺のtpoは意識してるのでは?、
コード汚くても高速な奴も募集中
0599デフォルトの名無しさん
垢版 |
2020/09/22(火) 11:56:55.93ID:LgsCAwYw
>>594に挙げられている184通りのうち、その3/4にあたる138通りが、直径が√10のものである
そのうち、円の中心が図の中央にあるものは、候補となる点が8個あるので、8C4 = 70 通りある。
図の中央から(±1,0)または(0,±1)ずれたものは、候補となる点が6個なので4×(6C4)=60通り
図の中央から(±2,0)または(0,±2)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
図の中央から(±1,±1)ずれたものが、候補となる点が4個なので4×(4C4)=4通り
合わせて 70+60+4+4=138 通りと数え上げることができる

図の中央を基準にすることができるものばかりとは限らないところには注意が必要だが
総当たりよりは効率化が見込めると思われる。
0600253
垢版 |
2020/09/28(月) 22:51:28.57ID:mT2w1+AU
>>509 Python3, >>576を参考に計算量を√nに減らした解法

import math
for n in [81, 87, 91, 13]:
  s = math.sqrt(n)
  f = n
  for i in reversed(range(2, 1 + math.floor(s))):
    q, m = divmod(n, i)
    if m == 0: f = q; break
  print(n, '=>', f)


実行結果
~ $ python 18_509_99_rootn.py
81 => 9
87 => 29
91 => 13
13 => 13

もっとスマートな解法を考えていると双曲線を意識した解法を意識してしまうが、
簡単には解けない数学の問題に突き当たると思う
0601253
垢版 |
2020/09/28(月) 22:53:47.02ID:mT2w1+AU
>>600
× 意識した解法を意識してしまうが、
○ 意識した解法を思い浮かべてしまうが、
0605デフォルトの名無しさん
垢版 |
2020/10/01(木) 01:25:55.75ID:cJ6xF5hb
お題:
アッカーマン関数の引数が与えられるので、計算過程を1ステップずつ出力してください

入力:
2 1

出力:
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5
0606デフォルトの名無しさん
垢版 |
2020/10/01(木) 11:20:33.49ID:iee67Noq
>>605
Haskell

astr m n = "A(" ++ m ++ "," ++ n ++ ")"
ack' 0 n = (n+1, [astr (show 0) (show n), (show $ n+1)])
ack' m 0 = let
(val, ss) = ack' (m-1) 1
in (val, (astr (show m) (show 0)) : ss)
ack' m n = let
(val1, ss1) = ack' m (n-1)
(val2, ss2) = ack' (m-1) val1
ss = [astr (show $ m-1) s | s <-ss1] ++ (tail ss2)
in (val2, (astr (show m) (show n)):ss)
ack m n = map (++"\n") $ snd $ ack' m n

main = do
[x,y]<-(return.(map read).words)=<<getLine
mapM_ putStr $ ack x y
0607デフォルトの名無しさん
垢版 |
2020/10/01(木) 12:09:11.51ID:OaA9a4hN
Haskellでもこんな長くなるの?
0608デフォルトの名無しさん
垢版 |
2020/10/01(木) 12:15:24.40ID:O+PWz9pR
>>607
いや、上手な人ならもっと上手くやるはず
アホほどライブラリがあってそれ使えば楽々のハズだけど修行中の身ではこんなもんorz
0609デフォルトの名無しさん
垢版 |
2020/10/01(木) 14:04:34.18ID:Am+nhG+G
>>606
ちょっとチューンナップ
達人なら***とか>>>とか意味わからん演算子使ってもっとスッキリ書くんだろうけどアホほどあって使いこなせんorz

haskell
----
astr m s = "A(" ++ (show m) ++ "," ++ s ++ ")"
ack 0 n = [astr 0 $ show n, show $ n+1]
ack m 0 = (astr m $ show 0) : ack (m-1) 1
ack m n = let
ss1 = ack m (n-1)
in [astr m $ show n]
++ (map (astr (m-1)) ss1)
++ (tail $ ack (m-1) (read $ last ss1))

main = do
[x,y]<-(return.(map read).words)=<<getLine
mapM_ ((putStr).(++"\n")) $ ack x y
0610蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/02(金) 19:50:35.06ID:gQLwfaGp
お題: 野球のボールの動きを物理シミュレートして、ピッチャーの投げてきたボールをより遠くにかっ飛ばすバッターAIを開発せよ。
0612253
垢版 |
2020/10/02(金) 21:41:56.95ID:kl4hmyt8
>>610

─┼─┐─┼─  /  ,.           `゙''‐、_\ | / /
  │  │─┼─/| _,.イ,,.ィ'    ─────‐‐‐  *  ←>>蟻人間
  │  |ツ │    |  |  | イン /´⌒`ヽ    // | \
                     {,    リ)  / ./ |  \
               __ /}从、 リ( /  /  |
      ,. ,. -‐===‐- `つ/ ,.イ ’^ソハノリ   / ∵|:・.
    〃〃〃〃      //ミノ__  /´   /∴・|∵’
ヽ_I__I__I__I__I_I     __ノ_/ /    ヽミ、、   .∵.;|∵’:;
ー{____,,二二二ニ) ノΘ(__   )  ゙ 、∵.;|∵’,
 /I I I I I I     .^^^'   \ !  ̄フ    ゙ 、 |∴
                   ソ  /      `
                  ノ⌒ヽ')
                / ノ/ /
               /\/ ∧/   /       ',
              / /  ノ./   ./        ',
             ノ/   ヘ__、  ./ / ̄ ̄ ̄ヽ .',
            ヘ_'_,       /  \   /  ',
                     /    \/    ',
            ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙             ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙
0615253
垢版 |
2020/10/03(土) 01:10:19.52ID:io8Ij0O0
>>605 Perl5

use feature qw{signatures say}; no warnings 'experimental';
sub A($m, $n, $l, $r) {
 say "${l}A($m, $n)$r";
 $m ? $n
  ? A($m-1, A($m, $n-1, "${l}A(".($m-1).', ', ")$r"), "${l}A(".$m.', ', ")$r")
  : A($m-1, 1, "${l}A(".($m-1).', ', ")$r") : $n + 1;
}
say A(2, 1, '', '');


実行結果
~ $ perl 18_605_Ackermann_func.pl
A(2, 1)
A(1, A(2, 0))
A(1, A(1, A(1, 1)))
A(1, A(1, A(0, A(1, 0))))
A(1, A(1, A(0, A(0, A(0, 1)))))
A(1, A(1, A(1, A(0, 2))))
A(2, A(1, 3))
A(2, A(0, A(1, 2)))
A(2, A(0, A(0, A(1, 1))))
A(2, A(0, A(0, A(0, A(1, 0)))))
A(2, A(0, A(0, A(0, A(0, A(0, 1))))))
A(2, A(0, A(0, A(1, A(0, 2)))))
A(2, A(0, A(1, A(0, 3))))
A(2, A(1, A(0, 4)))
5
0616253
垢版 |
2020/10/03(土) 01:13:51.37ID:io8Ij0O0
なんかBugってる…orz
0620デフォルトの名無しさん
垢版 |
2020/10/03(土) 12:46:20.34ID:ul2MWjNf
そうなのよね
入力もらって表示→ワンステップだけ展開して戻る
の繰り返しが1番楽なんだけどなぁ
0621253
垢版 |
2020/10/03(土) 14:01:25.06ID:5WkJC33J
>>605 Perl5、>>615 を修正。 >>617 あら正規表現で書けちゃうのかイナ…
use feature qw{signatures say}; no warnings 'experimental';
sub A($m, $n) {
 $m ? $n
  ? do{ my ($m2, $n2) = ($m-1, $n-1);
     push @$l, "A($m2, "; push @$r, ')';
     say @$l, "A($m, $n2)", @$r; A($m2, A($m, $n2)) }
  : do{ my ($m2, $n2) = ($m-1, 1);
     say @$l, "A($m2, $n2)", @$r; A($m2, $n2)}
  : do{ my $s = $n + 1; say @$l, $s, @$r; pop @$l; pop @$r; $s };
}
($m, $n) = (2, 1);
say "A($m, $n)";
A($m, $n);

実行結果
$ perl 18_605_Ackermann_func.pl
A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5
0622デフォルトの名無しさん
垢版 |
2020/10/03(土) 18:00:38.18ID:WWjeAKvH
>>605 ocaml
https://ideone.com/dqTO60
let (>>) f g x = g (f x)
let rec a m n p =
let () = p (Printf.sprintf "A(%d, %d)" m n) in
if m = 0 then n + 1
else if n = 0 then a (m - 1) 1 p
else a (m - 1) (a m (n - 1) (Printf.sprintf "A(%d, %s)" (m - 1) >> p)) p
let () = print_int (a 2 1 print_endline)

A(2, 1)
A(1, A(2, 0))
A(1, A(1, 1))
A(1, A(0, A(1, 0)))
A(1, A(0, A(0, 1)))
A(1, A(0, 2))
A(1, 3)
A(0, A(1, 2))
A(0, A(0, A(1, 1)))
A(0, A(0, A(0, A(1, 0))))
A(0, A(0, A(0, A(0, 1))))
A(0, A(0, A(0, 2)))
A(0, A(0, 3))
A(0, 4)
5
0623デフォルトの名無しさん
垢版 |
2020/10/07(水) 20:33:26.90ID:0TsEuxhN
>>605 octave
https://ideone.com/50i12U
function c = a(m, n, p)
p(sprintf('A(%d, %d)', m, n));
if m == 0
c = n + 1;
elseif n == 0
c = a(m - 1, 1, p);
else
c = a(m - 1, a(m, n - 1, @(s) p(sprintf('A(%d, %s)', m - 1, s))), p);
end
end
disp(a(2, 1, @disp));
0624253
垢版 |
2020/10/08(木) 02:27:24.66ID:Gy7CYzaJ
藻前ら、なかなかやるなー
気に入った。
0625蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/08(木) 13:59:34.65ID:N89hoMl4
お題: ax**2+b*x+c==0という形の二次方程式を解き、全ての実数解と実数解の個数を表示する。
0626デフォルトの名無しさん
垢版 |
2020/10/08(木) 15:03:23.36ID:eK30Q5Ei
実数解はルートを含んだ形でいいのか?
あるいは小数点以下何桁まで正確に求めるのか?
0628デフォルトの名無しさん
垢版 |
2020/10/08(木) 21:36:29.64ID:Q4ykcHSC
>>624
∧_∧  / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
(    )  \_____
| | |
(__)_)
0629蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/09(金) 13:26:20.64ID:pUAVGuih
お題:計算ができる文章テンプレートを実装し、つるかめ算を自動生成せよ。

文章テンプレートの例:
「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。
足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。
カメは何匹いますか。」

変数は「$(変数名)」のように表し、その具体的な値は入力として与えられる。
計算式は{ }で囲って表す。
計算式は変数や定数、加減乗除の演算子、または丸カッコを含むことができる。

入力の例:「ツルの数=3, カメの数=4」
0630デフォルトの名無しさん
垢版 |
2020/10/09(金) 14:02:14.80ID:/NdRCF04
>>625 js
function quadraticWithCount(a, b, c) {
const inSqrt = b ** 2 - 4 * a * c
if (inSqrt < 0) return [[], 0]
const l = - b / (a * 2)
if (inSqrt === 0) return [[l], 1]
const r = Math.sqrt(inSqrt) / (a * 2)
return [[l - r, l + r], 2]
}

console.log(quadraticWithCount(3, -2, -1))
console.log(quadraticWithCount(3, 6, 3))
console.log(quadraticWithCount(1, 2, 3))

// [ [ -0.3333333333333333, 1 ], 2 ]
// [ [ -1 ], 1 ]
// [ [], 0 ]
0632デフォルトの名無しさん
垢版 |
2020/10/09(金) 14:14:59.57ID:/NdRCF04
>>625 js 改善
function quadratic(a, b, c) {
const rt = Math.sqrt(b ** 2 - 4 * a * c)
return [(-b + rt) / (2 * a), (-b - rt) / (2 * a)]
}

function quadraticReal(...abc) {
const ans = quadratic(...abc)
const [a1, a2] = ans
if (isNaN(a1)) return []
if (a1 === a2) return [a1]
return ans
}

const quadraticRealWithCount = (...abc) => addCount(quadraticReal(...abc))

const addCount = a => [a, a.length]

console.log(quadraticRealWithCount(3, -2, -1))
// [ [ 1, -0.3333333333333333 ], 2 ]
console.log(quadraticRealWithCount(3, 6, 3))
// [ [ -1 ], 1 ]
console.log(quadraticRealWithCount(1, 2, 3))
// [ [], 0 ]
0633デフォルトの名無しさん
垢版 |
2020/10/09(金) 17:52:52.10ID:gniylpO4
>>629 Ruby
ツルの数 = 3
カメの数 = 4
Template =<<_EOT_
「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。
足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。
カメは何匹いますか。」
_EOT_

puts Template.gsub( /\{(.*?)\}/ ){ eval $1.gsub( /\$\((.*?)\)/ ){ $1 } }
0634253
垢版 |
2020/10/09(金) 22:43:14.04ID:/QeZd0d9
>>629 Perl5

use utf8;
no warnings 'utf8';
$ツルの数 = 3;
$カメの数 = 4;
print <<EOF
「ツルとカメが合わせて@{[${ツルの数}+${カメの数}]}います。
足の合計本数が@{[${ツルの数}*2+${カメの数}*4]}本です。
カメは何匹いますか。」
EOF


実行結果
~ $ perl 18_633_ツルの数+カメの数.pl
「ツルとカメが合わせて7います。
足の合計本数が22本です。
カメは何匹いますか。」
0635蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/09(金) 23:14:45.18ID:LR5flFjI
お題: 2つのRGBカラーが#RRGGBB形式で与えられる(RRGGBBは六桁の十六進数とする)。
2つの中間色を#RRGGBB形式で出力せよ。
可能ならばこれら3つの色をカラーバーとして表示せよ。
0637デフォルトの名無しさん
垢版 |
2020/10/09(金) 23:55:14.23ID:ACx6TREf
>>635,636
自明な入力例だけを示しても、出力例も出さないと意味ないだろう。
2色の中間色ってのが曖昧じゃね?
単にR,G,Bそれぞれの平均を取るだけなのか、赤と紫の中間が赤紫になるように循環する色相で中間をとるのかとか。
0640デフォルトの名無しさん
垢版 |
2020/10/10(土) 07:45:17.48ID:nh4sk35x
お題: 20201010と出力してください。ただしコードに使っていい数字は1のみです。
0642デフォルトの名無しさん
垢版 |
2020/10/10(土) 10:53:30.16ID:nh4sk35x
>>640 自分で js
const t = `
`.charCodeAt()
console.log(t + t + "" + (t + t) + t + t)

const m = "ϲ".charCodeAt()
console.log(m + m + "" + m)
0644デフォルトの名無しさん
垢版 |
2020/10/10(土) 14:54:47.61ID:iOujIiR/
>>638
×こんごう
○こんこう
0648デフォルトの名無しさん
垢版 |
2020/10/10(土) 18:54:45.98ID:V01gi3BN
>>647
Windowsでもそのままでいけるのか?
0651デフォルトの名無しさん
垢版 |
2020/10/10(土) 19:46:18.01ID:LCYuVeVr
haskell

import Data.Maybe
main = print $ product $ map ((fromJust).(flip lookup (zip ['\t'..] [1..]))) "&myC"
0652デフォルトの名無しさん
垢版 |
2020/10/10(土) 21:44:48.33ID:0z4oJBva
>>649 js
var ctx = new window.AudioContext
var osc = ctx.createOscillator()
osc.type = 'sine'
osc.frequency.value = 1000
osc.connect(ctx.destination)
osc.start()
osc.stop(1)
0657デフォルトの名無しさん
垢版 |
2020/10/11(日) 08:58:57.96ID:luIvAMCe
>>640 J
smoutput ,&":/ 'amp' i. 'papamama'
0658デフォルトの名無しさん
垢版 |
2020/10/11(日) 11:20:41.53ID:eXVrSXVr
>>640 bash
aa=1; bb=$((aa-aa)); cc=$aa$bb$aa$bb; printf "%d" $((cc+cc)) $cc; echo
0662デフォルトの名無しさん
垢版 |
2020/10/11(日) 19:36:20.38ID:eYi6TEVp
これは良いこと聞いた
0667蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/11(日) 23:57:26.40ID:4cQ/GxGI
お題: 整数0〜10の一様分布の乱数を百回発生させて、その統計結果を基に各整数を横軸、回数を縦軸とする棒グラフ(ヒストグラム)を描画し(棒の最大幅32字)、ほぼ一様であることを確かめなさい。
0668デフォルトの名無しさん
垢版 |
2020/10/11(日) 23:59:14.77ID:B+MSoWxK
paiza.io は、text, html, json で出力できるのか

html も、部分的なタグだけを書いても動くのか
0669蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/12(月) 00:01:01.03ID:rx5xRSFU
>>667 訂正。

(誤)各整数を横軸、回数を縦軸とする棒グラフ
(正)各整数を縦軸、回数を横軸とする棒グラフ
0670デフォルトの名無しさん
垢版 |
2020/10/12(月) 01:06:07.97ID:eqKg5iqj
haskell


import Data.List
import System.Random

trial records = do
x <- randomRIO (0, 1) :: IO Double
return $ (truncate $ x * 11) : records

experience = iterate (>>= trial) (return [0..10])
showrecord (x,y) = let
clsstr = id
$ reverse
$ take 2
$ ( ++ (repeat '0'))
$ reverse
$ show x
barstr = replicate y '*'
in concat [ clsstr," ", barstr,"\n"]

main = do
records <- experience !! 100
putStr $ id
$ concat
$ map showrecord
$ map (\x -> (head x, length $ tail x))
$ group
$ sort
$ records
0672デフォルトの名無しさん
垢版 |
2020/10/12(月) 08:18:41.49ID:fHHXzdlp
>>667
二項分布になるんじゃないかなあ
0673デフォルトの名無しさん
垢版 |
2020/10/14(水) 15:32:12.46ID:M1NONSBM
>>649 オーディオ系はシステム依存度が高いから余りサンプルが出てこないね。 WindowsやMacOSなら簡単そうだが
1kHz の音源ファイルを使うのは違反かな?
0680デフォルトの名無しさん
垢版 |
2020/10/14(水) 19:30:29.09ID:pZU5VHHG
試すと音が出て煩そうだから試す気になれない。
0683デフォルトの名無しさん
垢版 |
2020/10/15(木) 01:18:37.79ID:fqrOjoDi
結局このスレで盛り上がるのは環境によらず言語によらず、でも多少は骨のあるようなお題なんだよな
へぇその言語ならそんなにキレイに書けるのかとか普段自分が使ってない言語ではどうやって実現できるのか眺めたりするのが面白い
音鳴らすなんてお題として面白いわけがない
0685デフォルトの名無しさん
垢版 |
2020/10/15(木) 11:44:28.12ID:cDg3UiVL
蟻人間さんへのお題:
文字列を受け取って、RFC 5322にしたがってSubjectヘッダを出力してください(MUST、SHOULDを満たすこと)
文字コードはUTF-8、エンコーディングはBエンコードを使用してください
0686蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/15(木) 13:28:00.67ID:s1gNbcw/
>>685 Python
text = 'Re: Re: This is a subject text. This is a subject text. This is a subject text.'
if text[0:4] == 'Re: ':
__while text[0:4] == 'Re: ':
____text = text[4:]
__text = 'Re: ' + text
import base64
text = 'Subject: ' + base64.b64encode(text.encode('utf-8')).decode('ascii');
ary = []
while len(text) > 78:
__ary.append(text[0:78])
__text = text[78:]
ary.append(text)
import platform
if platform.system() == 'Windows':
__for item in ary:
____print(item)
else:
__for item in ary:
____print(item, end="\r\n")
0688デフォルトの名無しさん
垢版 |
2020/10/15(木) 14:30:46.93ID:cDg3UiVL
>>686
いろいろ違うので・・・メールのソース眺めたが良いです
0690デフォルトの名無しさん
垢版 |
2020/10/15(木) 19:22:03.88ID:cDg3UiVL
そんなことないと思うけどな
あまり他人の悪口言わない方が良いよ
0693デフォルトの名無しさん
垢版 |
2020/10/15(木) 19:38:14.90ID:QzXinxJa
ウェブアプリつくれだのGUIアプリつくれだの酷い事散々言いまくってるじゃん
◆QZaw55cn4cの方がまだマシ
0695デフォルトの名無しさん
垢版 |
2020/10/16(金) 19:48:26.76ID:2tllxc0n
お題
自然数nを 2進数にした時、 1が連続する個数の最大値を求める。

20201016 -> 5
0696デフォルトの名無しさん
垢版 |
2020/10/16(金) 20:25:28.88ID:YQH8/KbW
haskell

import Data.List

maxConsOne = maximum . map length . filter ((==1).head) . group . unfoldr (\n ->if n == 0 then Nothing else Just (mod n 2, div n 2))

main = print $ maxConsOne $ 20201016
----
5
0698デフォルトの名無しさん
垢版 |
2020/10/16(金) 21:35:06.98ID:XtprH8ZD
>>695 JavaScript
const f = (n = 0) => Math.max(...(n.toString(2).match(/1+/g) ?? ['']).map(m => m.length))

console.log(f(20201016)) //=> 5
0699253
垢版 |
2020/10/16(金) 23:46:14.30ID:5gS0lg4h
>>695 Perl5

use List::Util max;
print max map{length} sprintf('%b', 20201016) =~ /(1+)/g;


実行結果
$ perl 18_695_bin1.pl
5
0700デフォルトの名無しさん
垢版 |
2020/10/17(土) 00:12:43.05ID:7ct7R1y+
>>695 Ruby

p 20201016.to_s(2).split("0").max.size
0701デフォルトの名無しさん
垢版 |
2020/10/17(土) 00:24:53.85ID:u2s9P3C4
haskell
無名関数というインチキ使ってしまったので再挑戦バージョン

import Data.List

main = print $ maximum . map sum . group . map (flip mod 2) . takeWhile (/=0) . iterate (flip div 2) $ 20201016
0707703
垢版 |
2020/10/17(土) 09:22:46.57ID:S6LboNFt
>>704
自分の >>703
- nl = 0
+ nc = nl = 0
0711デフォルトの名無しさん
垢版 |
2020/10/17(土) 19:11:03.54ID:wXdm0x1E
>>710
うまいやり方だな。それには気付かなかった。
0712デフォルトの名無しさん
垢版 |
2020/10/17(土) 19:29:10.40ID:wXdm0x1E
>>695
Kotlin script

2進数文字列に変換してから 0 を区切り文字にして分割してその中の一番長い文字列の長さを出すというやり方。

fun max1(n: Int) = n.toString(2).split('0').map { it.length }.max()

println(max1(20201016))

これで 5 が出る。

同じやり方を perl5 で(特にモジュール使わずに)やるとこんな感じ。

perl -e '$n=20201016; $m = (sort { $b <=> $a } map { length($_) } (split /0+/, sprintf("%b", $n)))[0]; print "$m\n"'

同じく5が出る。
0717デフォルトの名無しさん
垢版 |
2020/10/18(日) 00:42:32.49ID:nYmbGZmV
ハトにエサを与えないで下さい
0718デフォルトの名無しさん
垢版 |
2020/10/18(日) 01:06:12.01ID:qT62bbHa
QZは自分の頭が悪いのをわざわざ周知してもらうためにクソコードを晒すのか
ドMだな
0722デフォルトの名無しさん
垢版 |
2020/10/18(日) 05:53:44.51ID:28u9FaXE
うん。速そうだね。数値計算しかしてないし。
0723デフォルトの名無しさん
垢版 |
2020/10/18(日) 10:06:25.57ID:ARbR7jXS
20201016みたいに桁数が少ないならそうだけど桁数が増えるとルーブが答え×桁数回だからアルゴリズムそのものは遅い
桁数が少ないうちは内部関数しか使ってない利点で早いとは思うけど
0725◆QZaw55cn4c
垢版 |
2020/10/18(日) 15:53:00.51ID:xUpUEWAV
>>693
残念ながら、私の出題もイマイチ人気がありませんでした‥‥
0730デフォルトの名無しさん
垢版 |
2020/10/18(日) 22:45:56.62ID:F/EhVBet
>>724
x = n
while x != 0
x &= x << 1
i += 1
end
ruby知らないから適当に書いたけど
こんな感じにしないと二回目以降nが0でやってるっぽい
こうすると22倍くらいの差だった
0731デフォルトの名無しさん
垢版 |
2020/10/18(日) 22:54:22.98ID:F/EhVBet
連続してるビット数が多いときはこの方が速くなったけど
すごいごちゃごちゃになった

i = 0
s = 1
x = n
while x != 0
t = x & (x << s)
if t == 0 then
if s == 1 then
i += 1
break
end
s = 1
else
x = t
i += s
s = (s << 1)
end
end
0735デフォルトの名無しさん
垢版 |
2020/10/19(月) 17:41:48.20ID:Sd7Rn+fr
お題
2^(1/3)を百桁表示せよ

出力
1.2599210498948731647672106072782283505702514647015079800819751121552996765139594837293965624362550941543102560356156652593990240

参考 
a(n+3) = 3*a(n+2) + 3*a(n+1) + an
a(1) = 3, a(2)=3, a(3)=15
で決まる数列について
min (a(n)/a(n+1), a(n+1)/a(n+2), a(n+3)/a(n+3) )
. < 2^(1/3)-1
. max (a(n)/a(n+1), a(n+1)/a(n+2), a(n+2)/a(n+3) )
で lim a(n)/a(n+1) = 2^(1/3)-1となる
0737デフォルトの名無しさん
垢版 |
2020/10/19(月) 22:00:17.27ID:gq9726ze
>>735 Bash

$ echo "scale=100;e(l(2) / 3)" | bc -l
1.25992104989487316476721060727822835057025146470150
79800819751121552996765139594837293965624362550940
0738デフォルトの名無しさん
垢版 |
2020/10/19(月) 22:30:56.87ID:14xSvmON
>>735 dc
dcには平方根の演算子はあるが立方根はないので
c^(1/3) = sqrt(c/sqrt(c/sqrt(c/...)))
と変形して適当に反復

100k[2z333>av/]dsaxp

1.2599210498948731647672106072782283505702514647015079800819751121552\
996765139594837293965624362550941
0739デフォルトの名無しさん
垢版 |
2020/10/19(月) 23:54:32.40ID:mPlPc+C9
>>735
参考を誰も参考にしてくれないのにワロタ
参考を元に作ったコード
Haskell

https://ideone.com/ywJPjx

ちなみにrubyのpi.rbが同じテクニック使ってます
そっちは定数係数でない三項間関係の漸化式パージョン
0742デフォルトの名無しさん
垢版 |
2020/10/20(火) 21:07:35.93ID:hsuNVmIy
お題:ぼくがかんがえたさいきょうのちょうわへいきん
2変数調和平均 f(x, y) = 2 / (1 / x + 1 / y)
但し xまたはyがゼロの時、f(x, y) == 0
の計算を考える。
Cのdoubleに相当する精度で計算する際に、理論値(≒多倍長精度で計算したものを
double相当に丸めたもの)と一致しない割合(エラー率)をモンテカルロ法で求めよ。
x, yは、正規分布N(0, 1)の絶対値に従うものとする。

発展的なお題:
前掲の調和平均の式を変形し、エラー率の変化を調べよ。例えば、
f(x, y) = 2 * x * y / (x + y)
のエラー率は、前掲の式と比較してどうだろうか?
また、2 / (1 / x + 1 / y)よりエラー率が低い式は在るだろうか?

発展的なお題その2:
x, yがベンフォードの法則に従う場合はどうなるか。
正規分布N(0, 1)の絶対値の場合と比べて、エラー率の順位は入れ替わるだろうか?
0744253
垢版 |
2020/10/23(金) 09:17:13.74ID:7L0FHKID
正規乱数をモンテカルロ法で算出して
doubleと多倍長浮動小数点でそれぞれ計差した2変数調和平均に
差がある率を求めれば良いの?
正規乱数なら書かなくともライブラリにあるんだよね。
あるいは誤り率の計算そのものにモンテカルロ法を使うようなやり方なのかな
0746デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:02:36.14ID:Vzf4XOui
お題
乱数を使ってシミュレーションしてください

ジョーカーを除くトランプ52枚から1枚抜き取って箱に入れました
その後、残った51枚から3枚引いて確認したら3枚ともダイヤでした
では最初に抜き取った箱の中が1枚がダイヤである確率はいくらか?
0747デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:27:24.17ID:LovVc5SM
>>746 Ruby

DECK = [*0..51]

def hoge
a, *b = DECK.sample(4) until b&.all?{|v| v % 4 == 0}
a % 4 == 0
end

def fuga(n)
1.0 * n.times.count{hoge} / n
end

p fuga(1e6) # => 0.20414
p 10 / 59 # => 0.20408163265306123
0748デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:46:02.34ID:LovVc5SM
途中で送信してしまった

99%信頼区間は 0.20414±0.0010382 => [0.2031018, 0.2051782]
理論値は 10/49 = 0.20408163265306123
0749デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:49:11.91ID:5NWyTruo
確認前後での確率変動を出せ、っていうお題じゃねえのコレ
0750デフォルトの名無しさん
垢版 |
2020/10/24(土) 01:58:03.71ID:6bv42JD2
お題
ジョーカー除く52枚のカードがある
スートを表すS,H,D,Cと、A,K,Q,J,X,9,8,7,6,5,4,3,2との2文字からなる文字列でカードの柄を表すこととする。
当然ながら52枚のうちどの2枚も同じ柄でない

この一組のカードを使ってポーカーゲームをする。
すなわち、初手のカード5枚を配られたプレイヤーは、そのうち0枚以上5枚以下のカードを場に捨てて、同じ枚数のカードを残りの山札47枚から引くことができる。
このときどのカードが選ばれるかは無作為であり、プレイヤーは選択できない。

さて、プレイヤーは、初手のカード5枚に対して、最終的に手に残る5枚のカードをポーカーのルールで評価して得られる配点の期待値が最も高くなるように捨て札を決めたい。
入力としてカード5枚が与えられたとき、そのような捨て札の組み合わせを求めるプログラムを記述せよ。

ここで、ポーカーの役と配点の対応はプログラムのパラメータとして組み込んで良い。
0754デフォルトの名無しさん
垢版 |
2020/10/25(日) 10:49:49.59ID:zd7LSfWt
3が1枚来てて、3が3枚残ってるなら、
・手元の3を捨てると、3が来ても何も起こらない
・手元に3を残すと、3が来るとワンペアになる

つまり、残りのカードを引けるかどうか、になる
>>746の亜種
0755デフォルトの名無しさん
垢版 |
2020/10/25(日) 11:44:16.63ID:c/nOQwtG
746はシミュレーションも何もただの引っ掛け問題でしょ
モンティホール問題の方が引っ掛け問としては出来が良い
0757デフォルトの名無しさん
垢版 |
2020/10/25(日) 14:14:17.31ID:tOCt4zCM
52枚トランプの束で2枚目から4枚目までがダイアであるような場合に限定してその内先頭もダイアであるような場合は全体の何バーセントかを問う問題
0758742
垢版 |
2020/10/26(月) 01:17:42.67ID:LimhPZzI
>>744
正規乱数自体は既存のライブラリで(Pythonならnumpy.random.randnとか)。
例えば、最初のお題(2/(1/x+1/y)で計算するやつ)は、34%位のエラー率になります。
0759253
垢版 |
2020/10/27(火) 00:51:04.61ID:uqMOOUWw
そうすると俺にはモンテカルロ法をわざわざ使うところが
どこかよく分からないんだよね…
0760デフォルトの名無しさん
垢版 |
2020/10/27(火) 23:07:51.35ID:9NNPSda/
結局>>742は数学的にはどういう意味なんやろ
x,yがN(0,1)に従う独立確率変数、
ρ:R→RがDouble型に丸める関数(Doubleのレンジに入らない確率はほとんど0だから無視)、
h(x,y)=2xy/(x+y)
としたとき
P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%
って事?
0761253
垢版 |
2020/10/28(水) 00:01:38.74ID:Jno143Es
面白い記号だなそれ。
だが、他の人にも伝わるように書いた方が話が広がってよいよ。
どんなに数学が得意な人でも本当に優秀な人はそうすることができると思う
0764253
垢版 |
2020/10/28(水) 00:30:53.43ID:Jno143Es
>>762
マジレスしようと思ったが、そういう問題じゃないんだよ
言葉で書きゃー2,3行のことなんだから
言葉で人に伝わるように書けばいいだろ


と、突き放しちゃ実も蓋も無いので少しマジレスすると
ρ:R→R が写像なのは分かる。
がしかしだ

P(ρ(h(ρ(x),ρ(y))) ≠ ρ(h(x,y))) ≒ 34%

って、お前の教室のホワイトボードじゃねんだぞ。

そんなんでどうっやって世の人と付き合ってんだか…
0765253
垢版 |
2020/10/28(水) 00:40:32.18ID:Jno143Es
大体、P()てのは何の関数だ。
どこにでもあるような関数名だが、一般的な関数か?
いや、そんなことの説明は要らない

お前の言いたいことはそんな自己流の式よりも
手短な読んで分かる日本語で書けるはずだ

いいやP()に限らない、お前のレスは一事が万事そんな感じ
一からからやり直せ
そしたら相手してやる
0767253
垢版 |
2020/10/28(水) 00:43:23.90ID:Jno143Es
>>766
それ関数じゃないだろ。何で関数として書くんだ。
どういう関数空間なんだ?
0768253
垢版 |
2020/10/28(水) 00:47:05.09ID:Jno143Es
簡単なことを
わざわざ難しいことのように書くのは
有能な人のすることではない
0769デフォルトの名無しさん
垢版 |
2020/10/28(水) 00:51:02.28ID:n11gpLQR
>>767
落ち着けよお前
P(事象A) := 事象Aが起こる確率 なんて高校数学の範疇だぞ
>>760が殊更ペダンチックには感じない
0771253
垢版 |
2020/10/28(水) 01:15:04.26ID:Jno143Es
結局 >>760

2 / (1 / x + 1 / y)をdoubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合

この一行をわざわざ他の人に分かりにくい式で再度書いているだけのこと

繰り返しだし分かりにくいし
意味(doubleで計算した値と倍長精度で計算したものをdouble相当に丸めたものが一致しない割合)
が欠落している

そういうことに気づきな
0772デフォルトの名無しさん
垢版 |
2020/10/28(水) 01:17:27.13ID:6h0Rpnv/
多分ですけど、あなた以外はそこまでわかりにくい表現だとは感じていないのだと思いますよ
0773253
垢版 |
2020/10/28(水) 01:19:14.69ID:Jno143Es
まじかw
そしたら回答山盛りだ

お前もさんも回答よろしくな
0775253
垢版 |
2020/10/28(水) 01:20:47.31ID:Jno143Es
蛇足だが、あの式で意味がわかった上で
まさか回答できなかったら、単なる無能だからな
0776253
垢版 |
2020/10/28(水) 01:27:14.39ID:Jno143Es
>>774
参考までにあなたは今までどのような回答を投稿されましたか?
0778253
垢版 |
2020/10/28(水) 01:30:24.94ID:Jno143Es
ふふ、それは
ヒ・ミ・ツ
0780253
垢版 |
2020/10/28(水) 01:56:33.39ID:Jno143Es
ゆとり以降だなそりゃ
0782253
垢版 |
2020/10/28(水) 02:16:39.09ID:FRCNqyyj
じゃあ何か自慢の回答でもしてよ
0783742
垢版 |
2020/10/28(水) 05:10:48.17ID:MEeLXnFm
>>760
2/(1/x+1/y)

2*x*y/(x+y)
と変形した場合だと、36%位です(100万回試行してみた)。
0785742
垢版 |
2020/10/28(水) 12:23:39.00ID:jim4KuYP
>>784
h0の計算は、xdやxdをlong doubleにcastする感じで!
>double h0 = ( xl == 0. || yl == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));
0786742
垢版 |
2020/10/28(水) 13:16:35.16ID:jim4KuYP
間違えました
double h0 = ( xd == 0. || yd == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));
0787デフォルトの名無しさん
垢版 |
2020/10/29(木) 00:16:48.93ID:GFOWX4AY
お題:言語機能のみを使い単方向リストを実装しメソッドpushとpopを実装せよ
pushはリスト末尾にノードをプッシュし、popはリスト末尾からノードをポップする
ノードの持つ値は整数とする
0788デフォルトの名無しさん
垢版 |
2020/10/29(木) 00:52:01.80ID:wtq/xrTf
複数pushできるの?
popも個数指定できるの?一個ずつ?
pushの戻り値はリスト自身?入れた値?成否?
0790デフォルトの名無しさん
垢版 |
2020/10/29(木) 10:47:03.25ID:jsAu6jIB
>>787 js
入出力のサンプルケース書いてないやつ絶対自分はやってないだろ

class SinglyLinkedList {
push(value) {
this.head = { next: this.head, value }
}
pop() {
if (!this.head) return
this.head = this.head.next
}
str() {
let { head } = this, s = ""
while (head) {
s += head.value + ", "
head = head.next
}
return s
}
}
0793デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:16:22.08ID:95aSRVZj
オレもこの「言語機能のみを使い」がわからなかった
「ライブラリ関数使うな」か「文字列操作関数のみを使い」かどっちかかなと
わからんから様子見
0794デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:18:16.67ID:GFOWX4AY
>>792
>>790
は787の仕様としてただしかったわ
すまんな
こっちのお題の定義があいまいすぎたらしい
言語機能は問題ない
0795デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:21:59.18ID:GFOWX4AY
>>793
ライブラリ使うなって言いたかった
あとお題提出前の実装については>>790に比べるとかなり冗長な実装をしてある
ここに晒す気はないが
0796デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:33:09.26ID:AOpu1Zek
stdlib.h使わずに作るの?
0798デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:50:57.59ID:GFOWX4AY
>>797
こっちの実装したコードに比べるとそっちのコードはえらくシンプルなんだよな
軽くショックだわ
>>791みたいな口きいてすまんかったな
0801デフォルトの名無しさん
垢版 |
2020/10/29(木) 15:09:10.20ID:dNWGwdex
Haskellみたいな純粋関数だとそもそも標準ライブラリだけだと“状態”を作るのも難しいんだよな
同じ表現は永遠に同じ答えを返すからスタックの“状態”を変化させるというのがそもそもできない
それをなんとかするのに“モナド”というのがあるんだけど状態を処理する“ステートモナド”は標準ライブラリではないんだよな
ほとんど“準標準”だけど
0802デフォルトの名無しさん
垢版 |
2020/10/29(木) 16:24:06.73ID:95aSRVZj
State モナドを“準標準”と認めてもらえるなら簡単
Haskell

import Control.Monad.State

pop :: State [a] a
pop = do
a <- get
modify tail
return $ head a

push :: a -> State [a] ()
push x = do
modify ((x :))
return ()

test = do
push 1
push 2
push 3
a <- pop
b <- pop
c <- pop
return ([a,b,c])

main = print $ evalState test []
---
出力
[3,2,1]
0803◆QZaw55cn4c
垢版 |
2020/10/29(木) 19:01:42.56ID:7aED6VYA
>>787
双方向リストの方が、後々いろいろ流用できてありがたいんですけど、それでも端方向リストでインプリしないといけないのですか?
0804デフォルトの名無しさん
垢版 |
2020/10/29(木) 19:02:59.18ID:c1P6mcgH
持て余すくらいなら「なるべく使わない」とか評価基準を示すだけにしとけばいいのに
0808デフォルトの名無しさん
垢版 |
2020/10/29(木) 20:59:03.61ID:zgfLAX1f
>>787
push,popってリストじゃなくてスタックの機能じゃ?
リストにさせるなら、先頭に追加してく方が速くて楽なのに。
push xs a = a:xs
pop (x:xs) = (xs,x)
反転させたいなら最後の最後にすべきだよ。

Haskell

― 使用例用main関数
main = do pushlist <- (return.push (Cons 1 (Cons 2 Null))) 3
(poplst, popval) <- (return.pop) pushlist
print pushlist
print popval
print poplst

― ここからお題のコード(整数に限定じゃないとダメならdataのList a/Cons aのaをIntに)
data List a = Null | Cons a (List a) deriving (Show)

push xs a = xs +++ (Cons a Null)

pop xs = (myinit xs, mylast xs)

Null +++ ys = ys
(Cons x xs) +++ ys = Cons x (xs +++ ys)

myinit (Cons x Null) = Null
myinit (Cons x xs) = Cons x (myinit xs)

mylast (Cons x Null) = x
mylast (Cons _ xs) = mylast xs
0809デフォルトの名無しさん
垢版 |
2020/10/29(木) 21:10:47.05ID:wtq/xrTf
>>787 JavaScript
class List {
#data = []
push(n) {
this.#data = [n, this.#data]
return this
}
pop() {
const [head, tail] = this.#data
if (tail) this.#data = tail;
return head
}
toArray() { return this.#data.flat(Infinity) }
toString() { return String(this.toArray()) }
toJSON() { return this.toArray() }
}

const list = new List
list
.push(0)
.push(7)
.push(2)
console.log('文字列: ' + list) //=> 文字列: 2,7,0
console.log('JSON: ' + JSON.stringify(list))
//=> JSON: {"test":[2,7,0]}
list.pop() //=> 2
list.pop() //=> 7
list.pop() //=> 0
list.pop() //=> undefined
0811デフォルトの名無しさん
垢版 |
2020/10/29(木) 23:09:01.60ID:MaNQDMIt
>>803
お題
双方向リストをC89で実装してください
0813デフォルトの名無しさん
垢版 |
2020/10/29(木) 23:24:39.19ID:3o7XtB23
>>787 ocaml
https://ideone.com/8ceFxk
type 'a _list = Nil | Cons of 'a * 'a _list
exception EmptyListException
let push xs x = Cons(x, xs)
let pop = function Nil -> raise EmptyListException | Cons (x, c) -> (x, c)
let rec each f = function Nil -> () | Cons (x, xs) -> f x; each f xs
let x, xs = pop (push (push (push Nil 1) 2) 3)
let () = print_int x; each print_int xs
0815デフォルトの名無しさん
垢版 |
2020/10/30(金) 00:06:20.24ID:aDtUVDPI
>>802を改良?
State [Int] だとあらかじめ用意した一個のstackしか使えない
噂に聞いたことあつたST monadで複数のスタック使えるように改造
Haskell

import Control.Monad
import Control.Monad.ST
import Data.STRef

data Stack a = Empty | N { car :: a, cdr :: Stack a } deriving (Show)

push stk val = modifySTRef stk (N val)
pop stk = car <$> readSTRef stk <* modifySTRef stk cdr

main = print $ runST $ do
sA <- newSTRef Empty
sB <- newSTRef Empty
push sA 'o' >> push sA 'o' >>push sA 'f'
push sB 'r' >> push sB 'a' >> push sB 'b'
a1<-pop sA
a2<-pop sA
a3<-pop sA
b1<-pop sB
b2<-pop sB
b3<-pop sB
return [a1,a2,a2,b1,b2,b3]
----
出力
"foobar"
0816253
垢版 |
2020/10/30(金) 00:07:47.66ID:hMjmzAXb
>>787 Perl5

公式マニュアルに書かれている通りsplice関数を使ってpush, popを記述できる。
 splice(@a,@a,0,$x); # push(@a, $x)
 splice(@a,-1);    # pop(@a)
なんだけどspliceを使わず言語のstatementだけでpush, pop関数を記述すると…こんな感じ

use v5.18;
use feature 'signatures';
no warnings "experimental::signatures";
sub Push($a, $x) {
 @$a = (@$a, $x);
}
sub Pop($a) {
 my @a = @$a;
 my $b = $a[-1];
 @$a = @a[0..$#a-1];
 $b;
}
my @s = (1,2,3); # test main
Push(\@s, 4);
say "@s";
my $y = Pop(\@s);
say $y;


実行結果
~ $ perl 18_787_push_pop.pl
1 2 3 4
4
1 2 3
0817253
垢版 |
2020/10/30(金) 00:09:56.81ID:hMjmzAXb
>>816
say $y;
の下に書いてあった最後の行
say "@s";
をコピペしそびれた…orz
0818253
垢版 |
2020/10/30(金) 00:22:38.86ID:hMjmzAXb
>>816 Pop関数はこっちの方がいいな、無駄なコピーもないし。

sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
 $b;
}
0819253
垢版 |
2020/10/30(金) 00:32:51.98ID:hMjmzAXb
>>818 deleteは削除したスカラー値を返すわ。だから以下でいいんだ

sub Pop($a) {
 my $b = @$a[-1];
 delete @$a[-1];
}
0820253
垢版 |
2020/10/30(金) 00:34:30.90ID:hMjmzAXb
>>819 my $b = @$a[-1]; 不要だった…orz

sub Pop($a) {
 delete @$a[-1];
}
0825デフォルトの名無しさん
垢版 |
2020/10/31(土) 13:49:55.42ID:QnYm1bfS
お題
与えられた文字列を一文字ずつ見ていき"trick"と"treat"の5文字でどちらが先に揃うか判定してください(順序込み)
どちらもヒットしないときは考慮しなくていいです

treakOrTreat("trick or treat")
// => trick
treakOrTreat(". tr ick")
// => trick
treakOrTreat("ttrriecatk")
// => treat
treakOrTreat("tri kc eat")
// => treat
treakOrTreat("my money")
// => none
0826デフォルトの名無しさん
垢版 |
2020/10/31(土) 13:51:26.24ID:QnYm1bfS
>>825 js(self)
function treakOrTreat(text) {
const [tri] = /t.*r.*i.*c.*k/.exec(text) || []
const [tre] = /t.*r.*e.*a.*t/.exec(text) || []
if (!tri && !tre) return 'none'
if (!tri) return 'treat'
if (!tre) return 'trick'
return tri.length < tre.length ? "trick" : "treat"
}
0830デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:33:31.91ID:I05R+wBh
相変わらずキモいなあ、いつもの勝手に認定キッズ
ミュートにしてるという情報から相手が雑魚であるというぶっ飛んだ推論をする知性の欠片も持ち合わせない負け組
0831デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:36:09.16ID:DmLmDhBA
>>825 Common Lisp
https://ideone.com/qHuipq

>>829は無駄な条件判定(二つめの (null a))があったので修正
0832デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:44:11.18ID:pGrSKCPz
>>825 JavaScript
function trickOrTreat(str = '') {
const trick = [...'trick']
const treat = [...'treat']
let result = 'none'
for (const c of str) {
if (c === trick[0]) trick.shift()
if (c === treat[0]) treat.shift()
if (!trick.length || !treat.length) {
result = trick.length ? 'treat' : 'trick'
break;
}
}
console.log(result)
}
0838デフォルトの名無しさん
垢版 |
2020/10/31(土) 21:58:58.47ID:t2sIU1o6
>>825 Ruby
def trickOrTreat( str )
trick = str.match( /\A.*?t.*?r.*?i.*?c.*?k/ )
treat = str.match( /\A.*?t.*?r.*?e.*?a.*?t/ )
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick[0].size < treat[0].size)? 'trick' : 'treat'
end

[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}
0839デフォルトの名無しさん
垢版 |
2020/10/31(土) 22:19:45.63ID:B0ELcd4k
>>834
改定
やはりHaskellerがこのお題でparsec使わないのはダメという事で

Haskell

import Text.ParserCombinators.Parsec

makeP cs = foldl1 (<>) $ map (\c -> (many $ noneOf [c]) <> (return <$> anyChar) ) cs :: Parser String

first xs ys = case (runParser (makeP xs) () "" ys) of
Left _ -> (1, 0)
Right x -> (0, length x)

trickOrTreat x = case compare (first "trick" x) (first "treat" x) of
LT -> "trick"
GT -> "treat"
otherwise -> "Happy Halloween"

main = do
mapM_ (print.trickOrTreat) ["trick or treat", ". tr ick","ttrriecatk","tri kc eat","my money"]
0840デフォルトの名無しさん
垢版 |
2020/10/31(土) 22:49:38.34ID:pe+8/Oyn
>>825
C

#include<stdio.h>

char* trickOrTreat(char*s, char*tk, char*tt){
if(!*tk)return "trick";
if(!*tt)return "treat";
if(!*s) return "none";

if(*s == *tk)tk++;
if(*s == *tt)tt++;

return trickOrTreat(s+1, tk, tt);
}

int main(void){
char* str[] = {"trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",};
const int size = sizeof(str)/sizeof(str[0]);

char tk[] = "trick";
char tt[] = "treat";

int i;
for(i=0; i<size; i++){
printf("%s\n", trickOrTreat(str[i], tk, tt));
}

return 0;
}
0841253
垢版 |
2020/10/31(土) 22:58:55.98ID:i+h07tFB
>>825 Perl5

for (<DATA>) {
 chomp;
 %h = map{$_ => [split'']} qw{trick treat};
 $k = 'none';
 for $c (split'') {
  for (keys %h) {
   $r = $h{$_};
   shift(@$r) if $c eq $$r[0];
   unless (@$r) { $k = $_; goto L }
  }
 }
L: print "$_ -> $k\n";
}
__DATA__
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money

実行結果
~ $ perl 18_825_trickOrTreat.pl
trick or treat -> trick
. tr ick -> trick
ttrriecatk -> treat
tri kc eat -> treat
my money -> none
0843253
垢版 |
2020/10/31(土) 23:20:38.29ID:i+h07tFB
>>842 IPアドレスがたまに変わるのと自分のレスを見分けやすくするため。固定ではなく番号はたまに変えてる
気にしないで
0846253
垢版 |
2020/10/31(土) 23:32:26.70ID:i+h07tFB
>>845
IPアドレスが変わったり日にちがたった自分のレスを簡単に表示し分けられる専ブラで良いのある?
出来ればLinuxで。ちなStyleは好みではない
0847253
垢版 |
2020/10/31(土) 23:38:27.89ID:i+h07tFB
>>844
教科書に載っているようなきれいなコード書くね
0848デフォルトの名無しさん
垢版 |
2020/10/31(土) 23:54:01.35ID:OVAIfmUR
>>847
サンクスコ

でも、引数の評価順については正直お行儀悪いんで
勉強してるみんなはそのへん各自ぐぐってみてね
0849デフォルトの名無しさん
垢版 |
2020/11/01(日) 00:59:27.52ID:KABEK1ar
>>825
Ruby

text = <<'TEXT'
trick or treat
. tr ick
ttrriecatk
tri kc eat
my money
TEXT

# 配列化
Trick = "trick".chars
Treat = "treat".chars

次へ続く
0850849
垢版 |
2020/11/01(日) 01:00:32.73ID:KABEK1ar
>>849
の続き

def find_index( str, original )
idx_2 = 0

str.each_char.with_index do |char, idx| # 1文字ずつ処理する
idx_2 += 1 if char == original[ idx_2 ]
return idx if idx_2 == original.length # すべての文字が一致
end
nil
end

results = text.each_line.map do |line|
trick = find_index( line, Trick )
treat = find_index( line, Treat )

if !( trick || treat ) then "none"
elsif !trick then "treat"
elsif !treat then "trick"
elsif trick < treat then "trick"
elsif trick > treat then "treat"
else "same"
end
end

p results
#=> ["trick", "trick", "treat", "treat", "none"]
0853838
垢版 |
2020/11/01(日) 12:58:01.92ID:g/v4ZA9S
>>825 Ruby
正規表現を捨てて index+inject に
def trickOrTreat( str )
trick = 'trick'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
treat = 'treat'.chars.inject(-1){|r,ch| break r unless r = str.index( ch, r+1 ); r }
return 'none' unless trick or treat
return 'trick' unless treat
return 'treat' unless trick
return (trick < treat)? 'trick' : 'treat'
end

[ "trick or treat", ". tr ick", "ttrriecatk", "tri kc eat", "my money",
"treat or trick", "treat or trick t",
].each{|s|
puts trickOrTreat( s )
}
0854蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/11/01(日) 14:40:36.23ID:wOVD56Lv
お題:大阪都構想が実現すると、現在の大阪市は消滅すると予想される。都構想実現前の住所を実現後の住所に変換しなさい。
0859253
垢版 |
2020/11/01(日) 16:54:48.84ID:I8lyxV1q
>>858
やろうとしたことはあるがまだ未経験
何か受験勉強みたいになっちゃってるコンテストには魅力を感じない
でも世界トップレベルは年間4000万くらい賞金稼ぐとい話をきいてそういうのにはちょっと惹かれる
0861デフォルトの名無しさん
垢版 |
2020/11/01(日) 17:18:29.18ID:EgIfcLXC
バカにしてるのはおまえ
他所の住所変更地の状況知らんのか?50年前の住所でも年賀届くわ
数年〜十数年或いはそれ以上旧住所で配送可能。舐めすぎ
0862デフォルトの名無しさん
垢版 |
2020/11/01(日) 17:31:11.77ID:+nQAPqAx
>>860
ここでそのお題といても大混乱が回避できるわけでもなし
そういう問題じゃなくてそろそろ自分にいい問題作るセンスがない事自覚すべき
0871デフォルトの名無しさん
垢版 |
2020/11/02(月) 04:45:05.89ID:BfD57ecO
"trick"と"treat"を受理するオートマトンを作って
入力文字列から1文字ずつ与えて状態遷移(または待機)させていく
末尾まで先に受理されたほうを答えとする
みたいなことだけ考えた
0874デフォルトの名無しさん
垢版 |
2020/11/02(月) 10:41:03.91ID:5JhQS2vf
正規表現で表現できる⇔オートマトンで受理できる
でしょ?
今回なら入力xに対し出力がtrickである場合を

[^t]*t[^r]*r[^ie]*i[^ce]*c[^ke]*k.*
|[^t]*t[^r]*r[^ie]*i[^ce]*c[^ke]*e[^ka]*k.*
...
(10パターン)
....

と正規表現だけで表現できてしまう
0875蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/11/02(月) 12:23:25.05ID:iXWhExA8
お題:パラボラアンテナが理論上の焦点に電波を集めることを示しなさい。

パラボラアンテナの半径を100とし、原点を中心にx軸上に焦点が来るように配置する。x軸と平行に電波がアンテナに入ってきて、入射角と反射角が等しくなるように電波が反射する。
このとき、どの場所で反射しても、反射した電波を表す直線が理論上の焦点に十分近づくことを示せ。
0879デフォルトの名無しさん
垢版 |
2020/11/02(月) 14:26:45.62ID:vIueiXdU
>>825 .bat
@echo off &setlocal enabledelayedexpansion
if "%~1"=="" echo none&exit /b
set "STR=%~1"
set TRICK=trick
set TREAT=treat
set /a n=0, k=0, t=0
:WHILE
if /i "!STR:~%n%,1!"=="!TRICK:~%k%,1!" if %k% LSS 4 ( set /a k+=1 ) else echo trick&exit /b
if /i "!STR:~%n%,1!"=="!TREAT:~%t%,1!" if %t% LSS 4 ( set /a t+=1 ) else echo treat&exit /b
set /a n+=1
if not "!STR:~%n%,1!"=="" goto :WHILE
echo none&exit /b
0880デフォルトの名無しさん
垢版 |
2020/11/02(月) 18:10:30.68ID:Ac4tp6ZL
>>825
Haskell
https://ideone.com/wg9JbO

iimport Text.ParserCombinators.Parsec

makeP = mconcat . map ( manyTill anyChar . char )

lastInd x s = case ( runParser ( makeP x ) () "" s ) of
Left _ -> ( [ 2, 0 ] , x )
Right y -> ( [ 0, length $ x ++ y ], x )

trickOrTreat x = snd $ minimum [
lastInd "trick" x,
lastInd "treat" x,
( [1,0], "Happy Halloween" ) ]

main = mapM_ ( print . trickOrTreat ) [
"trick or treat",
". tr ick",
"ttrriecatk",
"tri kc eat",
"my money" ]
0881デフォルトの名無しさん
垢版 |
2020/11/02(月) 19:01:54.49ID:hORytTpS
>>825
#include <stdio.h>
#include <string.h>

static void
tot (char *p)
{
int i = 0, j = 0;
if ((p = strchr (p, 't')) && (p = strchr (p + 1, 'r')))
while (*++p && !(*p == "ick"[i] && ++i == 3) && !(*p == "eat"[j] && ++j == 3)) ;
printf ("%s\n", (i == 3) ? "trick" : ((j == 3) ? "treat" : "none"));
}

int
main ()
{
tot ("trick or treat");
tot (". tr ick");
tot ("ttrriecatk");
tot ("tri kc eat");
tot ("my money");
}
0882デフォルトの名無しさん
垢版 |
2020/11/02(月) 19:55:30.38ID:0Q72CsT7
お題
アスペクト比X:Y、L[inch]のディスプレイの
幅Wと高さHをcm単位でそれぞれ求めよ

[入力]
X Y L

[出力]
W H ※cm単位で小数第1位まで出力

[例]
16 9 40
=> 88.6 49.8

64 27 29
=> 67.9 28.6

3 4 10.2
=> 15.5 20.7
0890デフォルトの名無しさん
垢版 |
2020/11/02(月) 23:19:41.46ID:ZpVsHyOp
>>882 JavaScript
const f=(x, y, l) => [x, y].map(i => (i * 2.54 * l / Math.sqrt(x ** 2 + y ** 2)).toFixed(1))
console.log(...f(16, 9, 40))
console.log(...f(64, 27, 29))
console.log(...f(3, 4, 10.2))
0891デフォルトの名無しさん
垢版 |
2020/11/03(火) 00:18:12.81ID:1BjkDVvF
>>882

Hadkell

cmpin =2.54
r10 = (/10).fromInteger.round.(*10)
toWH (x, y, sz) = let
arg = atan2 y x
diag = sz * cmpin
in ( r10 $ (cos arg) * diag , r10 $ (sin arg) * diag )

main = mapM_ ( print . toWH) [
(16, 9, 40),
(64,27,29),
(3,4, 10.2) ]
0892デフォルトの名無しさん
垢版 |
2020/11/03(火) 01:33:31.56ID:psuX0FGw
お題
{1,2,3,4,5,6,7,8}
を幾つかの共通部分を持たない空でない集合にわけるやり方を完全列挙
例えば
{1,6}+{2,8}+{3,4,5,7}

{2,8}+{1,6}+{3,4,5,7}
は同じやり方になるので二重カウントしないこと
0893デフォルトの名無しさん
垢版 |
2020/11/03(火) 02:32:26.13ID:yN+x511c
>>892
[1..8]は流石にtoo large
haskell

import Data.List

parts [] = [ [ ] ]
parts [x] = [ [ [x] ] ]
parts ( x : xs ) = [ (x : ys) : zs |
ys <- subsequences xs,
zs <- parts $ xs \\ ys ]

main = do
print $ parts [2,3]
print $ parts [1,2,3]
print $ length $ parts [1..8]
----
[[[2],[3]],[[2,3]]]
[[[1],[2],[3]],[[1],[2,3]],[[1,2],[3]],[[1,3],[2]],[[1,2,3]]]
4140
0895デフォルトの名無しさん
垢版 |
2020/11/03(火) 09:07:39.02ID:psuX0FGw
A:={1,2,3,4,5,6,7,8};
A_1:={A};
A_2:={ {a,b} \subset 2^A | a+b=A,~a+~b=A };
A_3:={ {a,b,c} \subset 2^A | a+b+c=A,~a+~b+~c=A };
A_4:={ {a,b,c,d} \subset 2^A | a+b+c+d=A,~a+~b+~c+~d=A };
A_5:={ {a,b,c,d,e} \subset 2^A | a+b+c+d+e=A,~a+~b+~c+~d+~e=A };
A_6:={ {a,b,c,d,e,f} \subset 2^A | a+b+c+d+e+f=A,~a+~b+~c+~d+~e+~f=A };
A_7:={ {a,b,c,d,e,f,g} \subset 2^A | a+b+c+d+e+f+g=A,~a+~b+~c+~d+~e+~f+~g=A };
A_8:={ {a,b,c,d,e,f,g,h} \subset 2^A| a+b+c+d+e+f+g+h=A,~a+~b+~c+~d+~e+~f+~g+~h=A};
B:=A_1+A_2+A_3+A_4+A_5+A_6+A_7+A_8;
count[expand B];

1:{{1},{2},{3},{4},{5},{6},{7},{8}}
2:{{1},{2},{3},{4},{5},{6},{7,8}}
3:{{1},{2},{3},{4},{5},{7},{6,8}}
4:{{1},{2},{3},{4},{5},{8},{6,7}}
5:{{1},{2},{3},{4},{5},{6,7,8}}
6:{{1},{2},{3},{4},{6},{7},{5,8}}
7:{{1},{2},{3},{4},{6},{8},{5,7}}
8:{{1},{2},{3},{4},{6},{5,7,8}}
9:{{1},{2},{3},{4},{5,6},{7,8}}
10:{{1},{2},{3},{4},{7},{8},{5,6}}
11:{{1},{2},{3},{4},{7},{5,6,8}}
12:{{1},{2},{3},{4},{5,7},{6,8}}
...中略....
4135:{{2,7,8},{1,3,4,5,6}}
4136:{{3,7,8},{1,2,4,5,6}}
4137:{{4,7,8},{1,2,3,5,6}}
4138:{{5,7,8},{1,2,3,4,6}}
4139:{{6,7,8},{1,2,3,4,5}}
4140:{{1,2,3,4,5,6,7,8}}
0896デフォルトの名無しさん
垢版 |
2020/11/03(火) 09:10:16.73ID:psuX0FGw
美しさだけなら某集合論用処理系に勝る
ものはないと思うが....
>>891の短時間回答能力とHaskelの潜在能力は
驚嘆すべきかも
0897デフォルトの名無しさん
垢版 |
2020/11/03(火) 09:15:47.91ID:psuX0FGw
間違ってたときのコード貼ってしまったw
~a+~b=A
とかは要らなかったw
a+b=A
とかだけでよかった
a \cup bが普通の和集合ね。
0898デフォルトの名無しさん
垢版 |
2020/11/03(火) 21:04:35.96ID:eC8ouzxK
>>882 bat
:: 引数は整数限定。結果は少数第2位を四捨五入。0〜0.04の時のみ少数第2位まで表示
:: 少し大き目の値を与えるとoverflow
@echo off &setlocal enabledelayedexpansion
set /a "x=%1*100, y=%2*100, z=0, d=%3*254, s=x*x+y*y, a=s>>1"
:WHILE
if %a% NEQ %z% set /a "z=a, a=(a+s/a)>>1" &goto :WHILE
set /a w=x*d/a, h=y*d/a
for %%G in (w h) do (
if !%%G:~-1! GEQ 5 set /a %%G+=10
if !%%G! GEQ 100 ( set %%G=!%%G:~0,-2!.!%%G:~-2,1!
) else if !%%G! GEQ 10 ( set %%G=0.!%%G:~-2,1!
) else if !%%G! GEQ 1 ( set %%G=0.0!%%G!
) else if !%%G! EQU 0 ( set %%G=0.00
) else echo ERROR: %%G=!%%G!
)
echo=%w% %h%
0899デフォルトの名無しさん
垢版 |
2020/11/04(水) 00:20:20.72ID:rxWDSDf0
>>882 Lua
function f(x, y, l)
local a =2.54 * l / (x * x + y * y)^0.5
return x * a , y * a
end
print(string.format("%.1f , %.1f", f(16, 9, 40)))
実行結果
88.6 , 49.8
0903デフォルトの名無しさん
垢版 |
2020/11/05(木) 20:02:28.58ID:pDv0veJc
お題
'□'(正方形)と'_'(空白)で表される図形を45度回転して描画せよ。

[例1]


/\
\/


[例2]
___□
□□_□
_□□□

/\
\/\
/\/ /\
\/\/\/
 \/\/
  \/
0910253
垢版 |
2020/11/06(金) 13:23:23.40ID:1EHNC/LO
>>892 Perl5

use feature qw{current_sub say};
use Data::Dump 'dump';
@a = sub{
 my $l = pop;
 @_ ? ( map{
  sub{
   map{
    sub{
     sub{
      push @{$_[$_]}, $l;
      [@_]
     }->(map{[@$_]} @_);
    }->(@_)
   } 0..@_
  }->(@$_)
 } __SUB__->(@_) ) : [[$l]];
}->(1..8);
say dump @a;
say scalar @a;

実行結果
~ $ perl 18_892.pl
(
[[1 .. 8]],
[[1 .. 7], [8]],
… 中略
[[1], [2], [3], [4], [5], [6], [7, 8]],
[[1], [2], [3], [4], [5], [6], [7], [8]],
)
4140
0912デフォルトの名無しさん
垢版 |
2020/11/07(土) 15:16:17.29ID:dGj5mxP2
sed 's/□/◇/g'

あ、いや、なんでもないです。忘れてください。
0913デフォルトの名無しさん
垢版 |
2020/11/07(土) 15:50:17.56ID:0+q2MsjY
>>903 bat
@echo off &setlocal enabledelayedexpansion
if "%~1"=="" set "this=%~0" &"%~0" "□"
set /a n=0, Hmax=0
:GET_ARG
set "arg%n%=%~1"
set "arg%n%=!arg%n%:_=0 !"
set "arg%n%=!arg%n%:□=1 !"
shift
if not "%~1"=="" set /a n+=1 &goto :GET_ARG
for /L %%i in (0,1,%n%) do ( set h=0
for %%b in (!arg%%i!) do set /a a[%%i;!h!]=%%b, h+=1
if !h! GTR !Hmax! set /a Hmax=h
)
set /a t=n+Hmax, Hmax-=1
for /L %%a in (0,1,%t%) do for /L %%b in (0,1,%t%) do set R[%%a;%%b]=0
for /L %%a in (0,1,%n%) do for /L %%b in (0,1,%Hmax%) do (
set /a A=%%a+%%b, B=a+1, C=n+%%b-%%a, D=c+1
set /a "R[!A!;!C!]|=a[%%a;%%b], R[!A!;!D!]|=a[%%a;%%b], R[!B!;!C!]|=a[%%a;%%b], R[!B!;!D!]|=a[%%a;%%b]"
REM orをxorに替えればアウトライン表示
)
:: for /L %%A in (0,1,%t%) do (for /L %%B in (0,1,%t%) do set "P%%A=!P%%A!!R[%%A;%%B]!") &echo !P%%A!
for /L %%A in (0,1,%t%) do (
for /L %%B in (0,1,%t%) do (
set /a "M=%%A+%%B, M%%=2"
if "!R[%%A;%%B]!"=="0" (set "S%%A=!S%%A! ") else if "!M!"=="0" (set "S%%A=!S%%A!/") else set "S%%A=!S%%A!\"
)
echo=!S%%A!
)
endlocal
if not "%~0"=="_□□□" "%this%" "___□" "□□_□" "_□□□"
pause &exit /b
0919デフォルトの名無しさん
垢版 |
2020/11/08(日) 00:15:55.29ID:ct8WHwWl
バッチよくやってるな
batにトランスパイルできるもっといい感じの構文の言語とかないの
0921デフォルトの名無しさん
垢版 |
2020/11/08(日) 02:34:25.46ID:HKu5GaPi
>>917
このコードZen2までのAMDのCPUだと多分とんでもなく遅くなる
ここで使ってるpdep命令がintelのやZen3と比べて100倍以上遅いから
0923デフォルトの名無しさん
垢版 |
2020/11/08(日) 03:56:26.07ID:YnyAcD/m
>>919
こんなのならあった
https://github.com/imachug/BatchBuilder

moduleサポート:
export say_hello
echo Hello, %1!
end export
でエクスポート
import say_hello Takashi
でインポート(というかecho Hello, Takashi!に置き換わる)

値返却 (return) サポート:
export ask q
set /p result=%q%?
return %result%
end export

export delete_dir
import -> agree ask "Delete %1"
if "%agree%" == "yes" (
rmdir /S /Q %1
)
end export

globalキーワード:
module内の変数はデフォでlocal。
global変数にしたいときはglobalキーワードを使う。
global my_var=hogehoge
0924デフォルトの名無しさん
垢版 |
2020/11/08(日) 03:57:27.82ID:YnyAcD/m
>>923 の続き

再帰サポートのための2つのディレクティブ:
@safe_recursion
@follow_local

クラスとオブジェクト:
クラス作成
class ClassTest
export say_hello
echo Hello, %1!
end export
export say_bye
echo Bye, %1!
end export
end class

オブジェクト生成
new -> my_class ClassTest

メソッド呼び出し
import %my_class%.say_hello Takashi
import %my_class%.say_bye Takashi

他、クラスフィールドやマジックメソッドなど
0925デフォルトの名無しさん
垢版 |
2020/11/08(日) 04:20:05.05ID:YnyAcD/m
>>919
もうひとつ。
https://github.com/kerrgavin/Transpiler-DSL-to-Windows-Batch-Script

>>923 がbatの拡張といったおもむきなのに対して、こちらは専用DSLからのトランスパイラ。Python製。

二値の平均:
avg(arg1, arg2, average)
fun avg {
num a = larg1 + larg2
num a = a/2
"echo" a
}
以下にトランスパイルされる
@echo off
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
call :avg %1,%2,%average%
@EXIT /B 0
:avg
set /a a=%~1 + %~2
set /a a=%a% / 2
echo %a%
EXIT /B 0

0から9999まで表示:
for (num i = 0;i < 10000;i+1){
"echo" i
}
トランスパイル結果略
0926デフォルトの名無しさん
垢版 |
2020/11/08(日) 05:03:48.08ID:YnyAcD/m
>>919
シェルスクリプトからの変換系:
https://github.com/daniel-sc/bash-shell-to-bat-converter
https://github.com/sagiegurari/shell2batch

あと専用言語からのトランスパイル系でもうひとつ凄いのがあった。
https://github.com/batsh-dev-team/Batsh
タイプ的には >>925 と同じような感じなんだけどbatにもシェルスクリプトにもコンパイルできる。
こっちは凄いねスター4,000超えてるわ。
なんでこれが最初に見つからんのや…
プレイグラウンド( https://batsh.org/ )もあってサンプルロード・コンパイルもできるから試してみて。
文法はオーソドックスなC系ですね。
0929デフォルトの名無しさん
垢版 |
2020/11/09(月) 23:19:00.95ID:biYC5NlX
もうすぐポッキーの日
[お題] 人口合計でオール1

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

 同じ県は一回のみで、異なる県を何県でも選んでよい。
 (つまり選び方は全部で 2^47 種類)
 人口合計が"1"のみの数字となる選び方は何種類あるか?
 (実質、1111万1111人, 1億1111万1111人になる選び方)

※一発正解問題、実行時間3秒程度。
 同ページの他の年月人口でも計算できる程度のクオリティでok
※ちなみに 2015/10データだと916(40+876)種類だった。
0933デフォルトの名無しさん
垢版 |
2020/11/10(火) 00:45:23.62ID:qJS2/p90
とりあえず
Haskell

spp19 = (小さいもの順に並べた元データ)

findSum :: Int -> [Int] -> Int
findSum x ys = case ys of
[] -> 0
( z : zs ) | z > x -> 0
( z : zs ) | z == x -> 1
( z : zs ) | otherwise ->
( findSum x zs )
+ ( findSum ( x - z ) zs )

main = do
print $ findSum 15105031 spp19
print $ findSum 11111111 spp19

----
650
43
0936デフォルトの名無しさん
垢版 |
2020/11/10(火) 13:44:24.83ID:3xGJBleZ
典型的なdp問題じゃねえの
0937929
垢版 |
2020/11/10(火) 17:29:30.75ID:q5cN/btj
>>929

・想定解はDPの数え上げ
 さすがに1.1億×47は苦しいので、
 1.1億に関しては、(全人口 - 1.1億)で計算する。
 そうすれば、1600万×47の計算量で済む。
 
 https://ideone.com/R4PCiQ
  下にpython(numpy)で想定解追加
0938253
垢版 |
2020/11/11(水) 00:47:47.87ID:vox+S3u3
(´・ω・`)
0939デフォルトの名無しさん
垢版 |
2020/11/11(水) 18:19:57.16ID:NMl7/e2v
暇つぶしに>>933がどれくらい再帰呼び出し読んでるか数えてもらった

findSum' x ys = let ( z : zs ) = ys in case ys of
[ ] -> 0
_ | z >= x -> 0
otherwise -> ( findSum' x zs ) + ( findSum' ( x - z ) zs ) + 2
----
2021619696
20億回ちょい
dpだと15,105,031×47=709,936,457で7億回ちょいだから35%ほどになるのか
勉強になった
0940デフォルトの名無しさん
垢版 |
2020/11/12(木) 15:39:00.87ID:VX9X1ew1
お題1
1〜nまでの偶数をランダムに出力してください

お題2
[開始の数] [増分] [終了の数]を入力として受け取りランダムに出力してください


入力: 1 2 10
出力:
1
1
3
9
1
7
5
0942デフォルトの名無しさん
垢版 |
2020/11/12(木) 16:04:34.29ID:VX9X1ew1
書き手の問題だと思うよ
0944デフォルトの名無しさん
垢版 |
2020/11/12(木) 19:26:25.71ID:VX9X1ew1
ふーけゆくー秋の夜ー
0945デフォルトの名無しさん
垢版 |
2020/11/12(木) 19:34:08.43ID:nzp5rNOe
>>940 Ruby

p rand(2..$_.to_i) & -2 # => 32 while gets

-*- input -*-
2
10
100

-*- output -*-
2
6
78

p eval$_.gsub(/\s+/,'%s')%%w[.step(*[ , ].rotate).to_a.sample]while gets

-*- input -*-
1 2 10
1 2 10
10 5 99


-*- output -*-
7
1
85
0946デフォルトの名無しさん
垢版 |
2020/11/12(木) 23:53:28.13ID:HU5jtk1k
そゆいみか
入力パースするとこは略して

Haskell

import System.Random
import Control.Monad

randomABC a b c = let
r = [ a, a+b .. c ]
in ( r !! ) <$> ( randomRIO ( 0, length r - 1 ) :: IO Int )

main = do
print =<< ( replicateM 20 $ randomABC 1 2 10 )
print =<< ( replicateM 20 $ randomABC 5 7 40 )
----
[1,1,9,7,9,7,7,9,7,5,7,7,7,3,7,1,5,9,5,7]
[33,26,26,26,12,19,40,40,12,33,19,26,19,26,26,33,19,5,5,33]
0947デフォルトの名無しさん
垢版 |
2020/11/13(金) 20:43:02.05ID:3cTZftC0
>>940 bat
@echo off &setlocal
set /a n=8 &REM 出力個数
echo -3 9
for /L %%i in (1,1,%n%) do call :RAND_A2B -3 9
echo=&echo 3 -5
for /L %%i in (1,1,%n%) do call :RAND_A2B 3 -5
echo=&echo 4 4
for /L %%i in (1,1,%n%) do call :RAND_A2B 4 4
echo=&echo -5 2 2
for /L %%i in (1,1,%n%) do call :RAND_SiE -5 2 2
echo=&echo 2 -3 -12
for /L %%i in (1,1,%n%) do call :RAND_SiE 2 -3 -12
echo=&echo 2 3 -4
for /L %%i in (1,1,%n%) do call :RAND_SiE 2 3 -4
pause &exit /b
:: 1〜n間の偶数をrandom出力 => a〜b間の偶数をrandom出力
:RAND_A2B
setlocal
set /a "f=%1&1"
if %1 EQU %2 ( if %f% EQU 0 echo %1) &exit /b
if %1 LSS %2 set /a a=%1+1, b=%2
if %1 GTR %2 set /a a=%2+1, b=%1
set /a "c=b-a+1, r=((%random%<<15)+%random%)%%c+a, r&=~1"
echo %r%&exit /b
:: [開始の数] [増分] [終了の数] を引数として条件を満たす値をrandom出力
:RAND_SiE
setlocal
if %2 NEQ 0 ( set /a "a=(%3-%1)/%2" ) else set /a a=0
if %a% LSS 0 set /a a=0
set /a "r=%random%%%(a+1)*%2+%1"
echo %r%&exit /b
0953デフォルトの名無しさん
垢版 |
2020/11/15(日) 18:33:50.31ID:UMNa3GdF
お題
天気のデータを読み取って翌日の天気は前日と同じと予測しそれが当たる確率を求めてください

入力: 曇,晴,曇,曇,晴,曇,曇,雨,雨,雨,曇,曇,晴,曇,雨,曇,雨,曇,曇,曇,晴,曇,雨,晴,晴,晴,晴,曇,晴,曇,晴
0955デフォルトの名無しさん
垢版 |
2020/11/15(日) 18:41:22.95ID:UMNa3GdF
はやいな
0956デフォルトの名無しさん
垢版 |
2020/11/15(日) 20:20:51.56ID:8j4ATkh0
>>953 JavaScript
let hits = 0
const input = '曇,晴,曇,曇,晴,曇,曇,雨,雨,雨,曇,曇,晴,曇,雨,曇,雨,曇,曇,曇,晴,曇,雨,晴,晴,晴,晴,曇,晴,曇,晴'.split `,`
input.reduce((acc, v) => (hits += acc == v ? 1 : 0, v))
console.log(hits / (input.length - 1))
//=> 0.3333333333333333
0959デフォルトの名無しさん
垢版 |
2020/11/16(月) 00:51:51.08ID:lyH8UsEw
>>947
@echo off &setlocal enabledelayedexpansion
for /f "delims=:" %%A in ('findstr /en ARGS "%~0"') do set /a L=%%A, n=12 &REM nは出力個数
for /f "usebackq skip=%L% delims=" %%A in ("%~0") do set "i="&(for %%B in (%%A) do set /a i+=1)&echo %%A&set "S="&(for /L %%D in (1,1,%n%) do call :RAND!i! %%A&(if defined r set "S=!S! !r!" &set "r="))&echo=!S!&echo=
set /p<nul=終了&pause >nul &exit /b

:: a〜b間の偶数をrandom出力
:RAND2
setlocal &REM VAR= a b c r f
if %1 NEQ %2 ((if %1 LSS %2 (set /a a=%1+1, b=%2) else set /a a=%2+1, b=%1) &set /a "c=b-a+1, r=((%random%<<15)+%random%)%%c+a, r&=~1") else set /a "f=%1&1" &if !f! EQU 0 set r=%1
endlocal &set "r=%r%" &exit /b

:: [開始の数] [増分] [終了の数] を引数として条件を満たす値をrandom出力
:RAND3
setlocal &REM VAR= a r
if %2 NEQ 0 set /a "a=(%3-%1)/%2" &if !a! LSS 0 set "a=" &REM [ else set "a="] 省略:上位環境でaが使用されている場合には必要
set /a "r=((%random%<<15)+%random%)%%(a+1)*%2+%1" &REM set /aでは存在しない変数は0として扱われる
endlocal &set "r=%r%" &exit /b
:: ARGS
-3 9
3 -5
4 4
5 5
1 0 2
-5 2 2
2 -3 -12
2 3 -4
-256 040 0x100
0400 ~0x1F ~0xff
0960デフォルトの名無しさん
垢版 |
2020/11/16(月) 03:31:51.13ID:apQPm4KR
>>954
haskell

import Data.List

str = "曇,晴,曇,曇,晴,曇,曇,雨,雨,雨,曇,曇,晴,曇,雨,曇,雨,曇,曇,曇,晴,曇,雨,晴,晴,晴,晴,曇,晴,曇,晴"

accuracy x = let
pairs = id
. map ( take 2 . reverse ) -- [ "BA", "CB", "DC",..]
. drop 2 -- [ "AB", "ABC",..]
. inits -- [ "", "A", "AB",..]
. filter ( /= ',' ) -- "ABCD.."
$ x
successes = filter ( \x -> head x == last x ) pairs
nP = genericLength pairs
nS = genericLength successes
in nS / nP

main = print $ accuracy str
0961デフォルトの名無しさん
垢版 |
2020/11/16(月) 03:32:04.47ID:lyH8UsEw
>>953 bat
@echo off &setlocal enabledelayedexpansion
set /a i=-1, match=0
for %%A in (曇,晴,曇,曇,晴,曇,曇,雨,雨,雨,曇,曇,晴,曇,雨,曇,雨,曇,曇,曇,晴,曇,雨,晴,晴,晴,晴,曇,晴,曇,晴) do (
set /a i+=1
if "!S!"=="%%A" set /a match+=1
set s=%%A
)
:: echo 一致数/比較回数 : %match%/%i%
set /a a=match, b=i
:EUCLID_GCD
if %a% NEQ 0 set /a "c=a, a=b%%a, b=c" &goto :EUCLID_GCD
set /a match/=b, i/=b
if %match% NEQ 0 (echo 確率 : %match%/%i%) else echo 確率 : 0
pause
0963とくめい
垢版 |
2020/11/24(火) 01:34:45.23ID:SQQDs1Pp
kakeruyamasato@gmail.comこのメアドを悪用してみせて
0967デフォルトの名無しさん
垢版 |
2020/11/27(金) 01:08:20.91ID:bIFui41M
>>966
なんていう言語?
0969デフォルトの名無しさん
垢版 |
2020/11/27(金) 19:31:40.66ID:Pnsgs34G
rubyだったか。
0971デフォルトの名無しさん
垢版 |
2020/11/28(土) 07:20:49.13ID:mYohOVrw
お題
以下を表示する
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
0972デフォルトの名無しさん
垢版 |
2020/11/28(土) 07:34:45.42ID:CtkueG9H
>>971 bat
@echo.以下を表示する
@echo.Monday
@echo.Tuesday
@echo.Wednesday
@echo.Thursday
@echo.Friday
@echo.Saturday
@echo.Sunday
0975デフォルトの名無しさん
垢版 |
2020/11/28(土) 09:00:26.43ID:2Muxtrov
>>966
問題の解釈違わねえ?
0976デフォルトの名無しさん
垢版 |
2020/11/28(土) 09:12:26.58ID:nEfgRBi9
>>971 js
const range = v => [...Array(v).keys()]
const DAY_MS = 24 * 60 * 60 * 1000

const weekday = d => d.toLocaleString('en', { weekday: 'long' })

console.log(range(7).map(i => weekday(new Date((i + 4) * 24 * 60 * 60 * 1000))).join("\n"))
0980977
垢版 |
2020/11/28(土) 14:12:40.28ID:FGpMIdZG
ruby -e 'p ( ( 1..5 ) % 2 ).to_a'
#=> [1, 3, 5]

2 は、各ステップの大きさ
0985デフォルトの名無しさん
垢版 |
2020/11/28(土) 17:30:47.77ID:FGpMIdZG
漏れは、Windows 10, WSL, Ubuntu 18.04 で、
VSCode の拡張機能、Remote WSL も使う

Linux側には、日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv を使って、
ruby 2.6.6, node 12.16.2 を入れた

対応している言語を表示すると、
anyenv install --list

Renv, crenv, denv, erlenv, exenv
goenv, hsenv, jenv, jlenv, luaenv
nodenv, phpenv, plenv, pyenv, rbenv
sbtenv, scalaenv, swiftenv, tfenv

Julia のjlenv も追加された。
anyenvと同様のツールに、asdf もある
0987デフォルトの名無しさん
垢版 |
2020/11/28(土) 18:01:21.11ID:myGQAvEM
とりあえず自分で打ち込んで試した
shuffleはランダムに並べ替えみたいだからちょっと違うかな
0989デフォルトの名無しさん
垢版 |
2020/11/29(日) 06:10:23.39ID:LsAPFm47
>>971 bat
:: 年月日を元に曜日を返す。 No args validation. 引数が無ければシステム時間
@echo off &setlocal enabledelayedexpansion
if not "%~1"=="" set "date=%~1"
:: set "date=2020.09.09"
set i=0
for %%a in (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Y,M,D) do set "wd!i!=%%a"&set /a i+=1
set i=7
for /f "tokens=1-3 delims==/-.:,;()_・年月日 " %%a in ("%date%") do for %%d in (%%a %%b %%c) do for /f "tokens=* delims=0" %%e in ("%%d") do for /f %%i in ("!i!") do set /a !wd%%i!=%%e,i+=1
:: echo=%Y%,%M%,%D%,
set /a h=(365*Y+(Y-1)/4-(Y-1)/100+(Y-1)/400+(M+7)/10*(30*(M-3)+(3*M-7)/5+59+D-1)+(1/(Y%%4+1)-1/(Y%%100+1)+1/(Y%%400+1)+(M+7)/10)/2)%%7
echo=!wd%h%!
pause&exit /b
0990デフォルトの名無しさん
垢版 |
2020/11/29(日) 12:05:03.89ID:POmPIOqu
>>971 Julia
using Dates
for w=1:7
println(Dates.format(Date(1,1,w), "E"))
end
0991デフォルトの名無しさん
垢版 |
2020/11/29(日) 14:25:29.24ID:KxupmnON
>>971
Kotlin script

println(java.text.DateFormatSymbols(java.util.Locale.ENGLISH).getWeekdays().let { wd -> ((2..6) + 1).map { wd[it] } }.join
ToString("\n"))

Javaのライブラリをそのまま使ってやってるので1が日曜で7が土曜になってしまい、
それを並び替えてから出力する必要があって少し複雑になった。
0992253
垢版 |
2020/11/29(日) 15:02:42.80ID:onV9IrOo
>>971Perl5

use Time::Piece;
use Time::Seconds;
$t = Time::Piece->strptime('210201','%y%m%d');
for (0..6) { print $t->fullday."\n"; $t += ONE_DAY }


実行結果
~ $ perl 18_971_fullday.pl
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
0993253
垢版 |
2020/11/29(日) 17:21:11.49ID:onV9IrOo
>>971 Perl5、>>992 のもうチョイ手抜き版

use Time::Piece;
for (1..6,0) { print Time::Piece::fullday([(0)x6, $_])."\n" }

~ $ perl 18_971_fullday.pl
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
0995デフォルトの名無しさん
垢版 |
2020/11/29(日) 20:39:34.37ID:idUZlJAo
お題
配列を入力として受け取り
値が連続するサブ配列のうち、合計が最大のものを出力してください


入力:[−2, 1, −3, 4, −1, 2, 1, −5, 4]
出力:[4, −1, 2, 1]
0996◆QZaw55cn4c
垢版 |
2020/11/29(日) 21:07:17.97ID:POdKASdd
>>995
>サブ配列
の定義を教えてください
0998デフォルトの名無しさん
垢版 |
2020/11/29(日) 21:21:35.35ID:idUZlJAo
>>996
教えません

>>997
[1, 4, 2, 1, 4]
とか
0999デフォルトの名無しさん
垢版 |
2020/11/29(日) 21:26:09.30ID:sOEBQUsx
[4, −1, 2, 1]は値が連続するサブ配列で
[1, 4, 2, 1, 4]は値が連続しないサブ配列?
連続の定義は?
1000デフォルトの名無しさん
垢版 |
2020/11/29(日) 21:34:10.34ID:idUZlJAo
>>999
教えません
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 138日 7時間 40分 24秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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