20/07/14 21:06:03.54 5wYEuLp1.net
%W[> > 1 \ o t s u].each(&:display)
# => >>1 otsu
3:蟻人間 ◆T6xkBnTXz7B0
20/07/16 06:35:35 Tv2xtriA.net
前スレ996の三次元タートルグラフィックス。
懸賞WebMoney5000円です。早い者勝ち。
4:デフォルトの名無しさん
20/07/16 07:00:51 Rw1l0Cvs.net
>>3
スレチ
消えろ
5:蟻人間
20/07/16 07:12:16.72 Tv2xtriA.net
宿題ではありません。
6:デフォルトの名無しさん
20/07/16 11:35:02.71 6HbDCmR4.net
普通にドン引き
なんか作って欲しいツールの作成依頼スレになりそう
出題者は解答を持ち合わせておくべきだな
7:デフォルトの名無しさん
20/07/16 12:31:42.58 II7vBdwc.net
短期間に複数の出題をするのはいかがなものか
前の出題を締め切ってからするべきだろう
中には解答に数ヶ月を要するものもあるので
URLリンク(itest.5ch.net)
>0010 蟻人間 ◆T6xkBnTXz7B0 2020/03/15 04:20:
>10
>お題: 一辺2000メートルの正方形の平面上にランダムに動く物体5個がある。
URLリンク(itest.5ch.net)
>0801 デフォルトの名無しさん 2020/06/03 15:52:13
>10 js
>能力低すぎて3か月もかかってしまった
>URLリンク(codepen.io)
出題者はちゃんと評価と解答の解説を責任持って投稿下さい
8:蟻人間
20/07/16 17:15:09.36 Tv2xtriA.net
【防衛システムに関する解説】
この出題は平面上の幾何学的な事象として論じられる。よって数学のベクトルの知識が必須である。
自機は中央にあり動かないのであるから、これを原点としてもよい。レーダー電波は放射状の電磁波であり、明らかに光速で直進する。
レーダーの直線の方程式は角度thetaのときr*(cos(theta), sin(theta))と書ける。すなわちレーダー角に触れれば探知される。
敵機はアニメーションの原理で動く。よってタイマーを使って一定時間ごとに位置を変化させれば動いているように見える。
位置や速度に特に指定はない。よって乱数などで決めることになる。
続く。
9:蟻人間
20/07/16 17:24:04.86 Tv2xtriA.net
それぞれの敵機の位置ベクトルと速度ベクトルがあり、それらは時間の変数によって変化する。敵機の速度ベクトルを推定するために、位置ベクトルを記録せねばならない。
レーダーは360度回るのであるから、隠れ場所がなければ特定の角度となり、必ず見つかる。位置は一定時間ごとに必ずわかるはずである。
位置の変位を経過時間で割れば速度ベクトルが推定できる。位置がわかれば3平方の定理で距離がわかる。距離が近ければミサイルを
発射せねばなるまい。ミサイルを撃つ方向はatan2関数を使用すれば求められる。
【解説終わり】
10:蟻人間
20/07/16 17:36:30.92 Tv2xtriA.net
これでいいか?
11:蟻人間
20/07/16 18:19:03.86 Tv2xtriA.net
【SQLサイン関数出題の解説】
ウェブや深層学習などの進展につれて、今や巨大データの扱いは、ありふれた作業となってきている。巨大データを扱う場合、データベースを使うとアクセス能力や利便性を向上できる。中でも特に一般的なSQLについて出題することにした。
しかし、SQLは方言が多くて、細かい調整はマニュアルを読まないとわからないことが多い。さらに、アクセス方法やインターフェイスが多様すぎて、こちらで解析するのは困難である。
よって採点は行わない。各自で自ら結果を確認して採点してほしい。SQLを始めるなら、まず入門書から入って、次に使用するデータベースのマニュアルを読んでもらいたい。
続く。
12:蟻人間
20/07/16 18:37:28.47 Tv2xtriA.net
「精度は構わない」といったはずだ。最悪でもnearest neighborhoodを選んでも正解にした。サイン関数は波形のグラフをとる代表的な三角関数だから、高校生以上なら知ってるはずだ、知名度は高いと判断した。 周期性があるので有限のテーブル(表)で近似できる。
「SQLのみを使う」とも言っていない。SQLの外部でサイン関数の数値を計算しても正解とする。しかしテーブルは作成しなければならない。すでに作成済みの場合に備えてまず「DROP TABLE ...」する。
次にテーブルの仕様を設計して「CREATE TABLE ...」する。細かいことは...で省略するが、わからないときは入門書かマニュアルを参照して下さいな。
テーブルの行を追加するには「INSERT INTO ...」する。テーブルからサイン関数の値を問い合わせる場合は「SELECT ... FROM ... WHERE ...」する。これが実際のサイン関数の値に常識的に近ければ正解とする。
【解説終わり】
13:デフォルトの名無しさん
20/07/16 18:53:35.79 CQUy/8Mn.net
解説と解説に沿った解答例のコードを貼れ
14:デフォルトの名無しさん
20/07/16 20:27:21 6HbDCmR4.net
>>12
-πから+πまでのsin関数表を元に-∞から+∞までのsin関数をNN法を使って完成させろという意味だったのか
15:デフォルトの名無しさん
20/07/16 20:37:51.51 Zj8FcZKn.net
精度は構わないなら
0, 1, -1 の3択でも正解か
16:蟻人間
20/07/16 21:05:05.23 Tv2xtriA.net
>>8
訂正。
(誤) 方程式はr*(cos(theta), sin(theta))と書ける。
(正) 方程式は(x, y) == r*(cos(theta), sin(theta))と書ける。
17:デフォルトの名無しさん
20/07/16 21:10:19.03 6HbDCmR4.net
提出済みのコードに
x_hat%(2*π)-π
を加えれば絶対値が大きな任意の数にも対応出来る
18:デフォルトの名無しさん
20/07/16 21:11:26.01 6HbDCmR4.net
>>17
はsin関数の問題の話ね
19:デフォルトの名無しさん
20/07/16 21:27:56.16 Zj8FcZKn.net
>>8
敵機?
ランダムに動く物体でしょ
慣性が働くとも書いてないし連続で動くとも書いてない
各瞬間ランダム位置に出現なのかもしれない
>>9
ランダムに動く物体5個を区別出来るなんて書いてない
距離と方向がわかるとだけ
予測した位置と移動速度、移動方向から推測してミサイルを打つ方向を決める必要がある
その方向決めという重要な部分が書いてない
0点
20:デフォルトの名無しさん
20/07/16 21:34:34.55 Rw1l0Cvs.net
クソコテはどっちも出題がクソ
存在もクソ
21:デフォルトの名無しさん
20/07/16 21:44:35.29 Zj8FcZKn.net
>>17
任意のは言い過ぎ
値が大きいと有効桁ゼロになる
精度は問わないといっても有効桁ゼロはさすがにダメと思う
22:蟻人間
20/07/16 21:54:34.68 Tv2xtriA.net
物体の現在位置: (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に施すとミサイルの発射方向が得られる。
23:デフォルトの名無しさん
20/07/16 22:05:54.70 6HbDCmR4.net
>>21
はいすみません
x_hatがπ以上の正の場合
x_hatが-π以下の負の場合
それ以外の場合で式を分ける必要がありそう
24:デフォルトの名無しさん
20/07/16 22:06:42.91 Zj8FcZKn.net
>>22
頭悪い方法ですね
25:蟻人間
20/07/16 22:09:47.34 Tv2xtriA.net
スマートな方法は軍事秘密なんだよ
(方程式を使う)
26:デフォルトの名無しさん
20/07/16 22:28:50.69 Zj8FcZKn.net
簡単な二次方程式になるわけだけど
27:蟻人間
20/07/16 22:32:18.70 Tv2xtriA.net
昔はモンキーハンティングとかのシミュレーションやったよ
28:デフォルトの名無しさん
20/07/16 22:34:22.52 Zj8FcZKn.net
頭悪い方法で?
29:デフォルトの名無しさん
20/07/16 22:35:58.48 Zj8FcZKn.net
>>22から頭の悪さがにじみ出てる
30:デフォルトの名無しさん
20/07/16 22:36:41.77 Rw1l0Cvs.net
頭悪いのがにじみ出てて読んでてイライラする
31:蟻人間
20/07/16 22:37:12.00 Tv2xtriA.net
他に剛体球の衝突とか、太陽系の表示とか、万有引力とか。
32:蟻人間
20/07/16 23:19:59.45 Tv2xtriA.net
高校レベルの数学でごめんね.
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.
33:デフォルトの名無しさん
20/07/17 04:33:22 MbWzFU1J.net
>>17
訂正
まず、0〜2*πのsin関数表を作成する
その後、
x_hat>=0 の場合: x_hat%(2*π)
x_hat<0の場合: 2*π + x_hat%(-2*π)
という式でx_hatを変換して上書きする
34:デフォルトの名無しさん
20/07/17 06:25:20.74 CFzyXZw3.net
>>32
本当頭悪いね
それでどうやって解くつもり?
高校生ならもっとスマートに解く
35:デフォルトの名無しさん
20/07/17 08:57:31 ICqzduEx.net
解答側だと頭悪いと煽られるから出題側に回ってたわけか
まあ出題も頭悪そうだったが
36:デフォルトの名無しさん
20/07/17 09:13:31 TqoFz7RF.net
回答例用意してなくても出題していいと思う
でもニッチすぎる問題で知識ひけらかしてるみたいな出題は例出してくれ
37:蟻人間
20/07/17 10:03:37.90 +x+SJT9l.net
P + V*t==v*d*t.
二乗すればdが消えて
|P|**2 + 2*P・V*t + |V|**2*t**2 == (v*t)**2.
これはtの二次方程式であるから整理して解の公式で解ける。
t<0のときは過去になるので除外する。
38:デフォルトの名無しさん
20/07/17 10:05:01.15 2gsvlStU.net
>>1 スレ一覧
1: スレリンク(tech板)
2: スレリンク(tech板)
3: スレリンク(tech板)
4: スレリンク(tech板)
5: スレリンク(tech板)
6: スレリンク(tech板)
7: スレリンク(tech板)
8: スレリンク(tech板)
9: スレリンク(tech板)
10: スレリンク(tech板)
11: スレリンク(tech板)
12: スレリンク(tech板)
13: スレリンク(tech板)
14: スレリンク(tech板)
15: スレリンク(tech板)
16: スレリンク(tech板)
17: スレリンク(tech板)
39:デフォルトの名無しさん
20/07/17 10:57:50 IMrokyul.net
>>37
えらい時間がかかったね
君、出題者だよね?
40:蟻人間 ◆T6xkBnTXz7B0
20/07/17 11:00:53 +x+SJT9l.net
三次元タートルで臓器を描画したら、レオナルド・ダ・ヴィンチのような天才になれるかもよ。
今、3Dプリンタのブームで三次元タートルグラフィックスは需要があるから、面白いことになるよ。
41:蟻人間
20/07/17 11:24:00.61 +x+SJT9l.net
臓器売買をなくすには、臓器を作ればいい。
ふふん。
42:デフォルトの名無しさん
20/07/17 11:55:47.46 vGVdpt19.net
>>37
で、5個の物体の
43:デフォルトの名無しさん
20/07/17 11:56:18.93 vGVdpt19.net
区別はどうするの?
44:蟻人間
20/07/17 12:50:28.20 +x+SJT9l.net
レーダー角の順番に物体をソートし、各物体に番号を付ける。レーダー角において物体が重なれば重複する恐れがあるが、とくに問題ではない。重複した物体が離れたときに、新規の物体の出現と見なせばいい。
前回と前々回の観測により、位置と速度が推測できる。次に予想される出現位置に一番近い物体を選択し、番号を関連付ければ同定できる。
45:デフォルトの名無しさん
20/07/17 13:19:51.15 MbWzFU1J.net
>>36
チューリングマシンは現場でバリバリ使える調べて覚えるだけの価値がある技術だ
規則が連続している場合上の方を取ってくるとか2つの数値を比較して大小関係をルールにするといったことが出来る
正規表現で数値を取ってきてプログラミング言語で比較処理するより構造的に書ける
だから解答を用意した上でまずは簡単なお題から出して、次は少し難易度を上げるようなお題を考えながら待っていたが誰も解答しなかった
46:デフォルトの名無しさん
20/07/17 13:33:42.70 TqoFz7RF.net
>>45
どの言語でも使えるアルゴリズム?設計パターンなの?
理論だから賞味期限の長い知識なのはわかるけど優先的に教えられないのはなぜ?
47:デフォルトの名無しさん
20/07/17 13:35:45.21 vGVdpt19.net
>>44
各フレーム物体がランダム位置で出現する場合には使えません
48:デフォルトの名無しさん
20/07/17 13:37:37.60 vGVdpt19.net
>>45
チューリングマシンの実用性はゼロと思うけど
完全に学問用
49:デフォルトの名無しさん
20/07/17 13:40:10 Jbjf6afq.net
CFGのクラスのものを例題にしたから意図したような回答がなかったんじゃないかと
50:デフォルトの名無しさん
20/07/17 14:08:20.12 x8K2tEcw.net
学術の巨大掲示板群 - アルファ・ラボ URLリンク(x0000.net)<)
☆ malloc / free を実装してみた (C#)
URLリンク(up.x0000.net)
51:蟻人間
20/07/17 14:59:38.30 +x+SJT9l.net
>>47
UFOじゃあるまいし、そんな物体が地球上にあるわけない。
52:蟻人間
20/07/17 15:18:45.55 +x+SJT9l.net
ステルス機とか、超音速機とか、プラズマ兵器とかのことか。
それらは想定外だよ。
53:蟻人間
20/07/17 15:23:09.49 +x+SJT9l.net
プラズマ兵器は、実戦で使われた記録はないし、超音速でもレーダー網からは捕捉出来る。
ステルスは想定外。
54:蟻人間
20/07/17 16:57:04.24 +x+SJT9l.net
防衛システムの歯無しは終わり。
次は三次元タートルグラフィックス。位置と向きの情報を持ったタートル(亀)を操作して、面白い図形を描こうというお話。平面じゃないよ、立体だよ。
レンダリングを何にするか。OpenGLは終わったし、DirectDrawは初心者には難しいし。そうだ、JavaScriptのThree.jsにしよう。これならスマホでも確認できるね。使ったことないけど。
55:デフォルトの名無しさん
20/07/17 17:49:54.25 vGVdpt19.net
>>51
出題文を読みかえしてみろ
56:デフォルトの名無しさん
20/07/17 17:51:07.65 vGVdpt19.net
ランダムに動く物体5個
57:蟻人間
20/07/17 18:31:00.92 +x+SJT9l.net
さて、亀は三次元の座標データP=(x, y, z)と三次元の方向ベクトルD=(dx, dy, dz) (単位ベクトルとする)で表せる訳だが、
線分を一つ引くごとに、線分を指定した位置に世界に追加する。世界の観測者の視点であるカメラは、テキトーな位置と方向で設置しておく。
描画ルーチンは、世界に追加された線分群をまとめて描く。描画エンジンは遠近法により、奥行きを持った映像を完成する。
58:蟻人間
20/07/17 18:35:56.95 +x+SJT9l.net
小さなお題: Three.jsで三次元空間に線分を一本描画せよ。
59:デフォルトの名無しさん
20/07/17 20:07:34.26 Q6g2SqxJ.net
だめだ
何をいっているのだか私にはさっぱり
60:デフォルトの名無しさん
20/07/17 20:36:03.22 RwfCcdVI.net
>>59
NGワードに糞コテを登録すればOKということだけ理解してれば大丈夫。
61:
20/07/17 20:39:05.23 zSX7HXP2.net
>>60
NGワードなんてスルー能力の足りない人が使うものですよ、私は全然使いませんね、だって必要ないし…
62:デフォルトの名無しさん
20/07/17 21:03:37.05 CFzyXZw3.net
クソコテスレ
63:蟻人間 ◆T6xkBnTXz7B0
20/07/17 21:18:41 hZ0JaeyU.net
こんな感じでHTMLを書けばThree.jsで三角形が描ける。
URLリンク(gist.github.com)
64:蟻人間
20/07/17 21:29:05.44 hZ0JaeyU.net
これを応用すれば、スマホでも動作するブラウザゲームを自分で作って
ゲーム会社を立ち上げることができるかも。
Three.jsがどんなものかは、
URLリンク(threejs.org)
を見ればたぶんわかる。三次元を描画するものだ。
65:デフォルトの名無しさん
20/07/17 21:32:26.43 C5ummCR0.net
スレタイからずれすぎ
66:デフォルトの名無しさん
20/07/18 00:01:47.57 tp8HW1uL.net
ついに蟻人間は、3次元まで行ってしまったか
その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw
67:デフォルトの名無しさん
20/07/18 00:03:54.77 wH8oKg8v.net
>>58
分かり難いけど、描けました。
URLリンク(i.imgur.com)
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);
68:デフォルトの名無しさん
20/07/18 06:18:45.66 yeg1h1ii.net
お題:何らかの数式のグラフとしてハート形を出力せよ。
使用する言語は問わない。
69:デフォルトの名無しさん
20/07/18 10:23:44 Z+cMIoZ7.net
>>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>
URLリンク(i.imgur.com)
70:デフォルトの名無しさん
20/07/18 10:47:53 zLRZfcZE.net
>>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
71:デフォルトの名無しさん
20/07/18 10:50:14 dRuMQkW5.net
>>45
出題が糞過ぎたから誰も答えなかったんだぞ
72:デフォルトの名無しさん
20/07/18 11:55:01 n7a2F8Nj.net
>>45
このスレでは誰もお題に答えないということがよくある
俺もお題出したことがあるがそういう時があった
73:デフォルトの名無しさん
20/07/18 12:04:26.22 Z+cMIoZ7.net
>>68
❤♡🤎🧡🤍🖤❤❣💟💜💚💛💙💗
♥ &#9825; &#10084;
74:デフォルトの名無しさん
20/07/18 12:35:48.94 xMoPei8m.net
>>69
きれい
75:デフォルトの名無しさん
20/07/18 12:41:40.41 55gPHPOJ.net
>>71
どこらへんが問題なのかを言わないと次も同じ問題を起こす可能性がある
76:デフォルトの名無しさん
20/07/18 12:45:26.81 55gPHPOJ.net
すぐに論破されることを言う奴って何が目的なんだろう
5chを見下してるのかもしれないな
こんなサイトみてる奴は大したことないって思ってるから油断して非論理的な発言をするのかと思った
77:デフォルトの名無しさん
20/07/18 13:00:12.87 Gf2oPXpD.net
どこに問題があるかなんて前スレでさんざん言われてただろ
あれで理解できないなら一生理解できないだろうね
78:デフォルトの名無しさん
20/07/18 13:01:12.49 n7a2F8Nj.net
>>75
たぶん問題が難しいか、手間がかかるからじゃないかな
79:デフォルトの名無しさん
20/07/18 13:06:42.15 55gPHPOJ.net
>>77
指摘された問題点はすべて返信していてその返信に対する返信はない
つまり指摘された問題点はすべて間違っていて問題点は見つかっていない
>>78
Pythonで20行弱で書けることは伝えている
となると難易度がこのスレの住人には高すぎたということか...
80:デフォルトの名無しさん
20/07/18 13:09:37.97 LD7t+FRX.net
イキり臭ただようコメントですね
81:デフォルトの名無しさん
20/07/18 13:14:16.81 LD7t+FRX.net
問題の良し悪しよりも出題者の態度が気に入らないから取り組まない人がいるんじゃないかな
自分の正当性を主張するだけではダメで回答者のモチベーションを上げる方向に導かないと
コミュニケーションが未熟なだけだと思いました
82:デフォルトの名無しさん
20/07/18 13:17:55.61 LD7t+FRX.net
線形拘束オートマトンでこの問題解いてみて!
線形拘束オートマトンはこういう仕組みで、こういうところでも活用できるから知ってると便利だよ!
みたいにポジティブアゲアゲでいかないと
83:デフォルトの名無しさん
20/07/18 13:20:22.31 55gPHPOJ.net
>>81
なるほどーそれは>>1に書いとくべきだな
皆んなから好かれる人の出題しか解答しませんよって
出題にも手間がかかるわけだからそういうのは普通に不誠実だと思う
84:デフォルトの名無しさん
20/07/18 13:21:40.49 n7a2F8Nj.net
>>83
落ち着けよ
お題に解答が全く付かないなんてよくあることだって
85:デフォルトの名無しさん
20/07/18 13:23:11.61 55gPHPOJ.net
>>82
仕組みというか解説は書けるなら書きたかったな
悩んだがそんなに難しくないと思ったから止めといた
86:デフォルトの名無しさん
20/07/18 14:02:48.54 LD7t+FRX.net
>>83
ルールとして決める必要はなくて
一般的なコミュニケーションのとり方としてレスポンスが欲しいなら
自分の正当性だけを主張するやり方だと難しいよってこと
自分がこんなに頑張って問題書いたんだ、答えがないのは不誠実だ、そんな自己中発揮してたらレスポンスなくて当然かと
87:デフォルトの名無しさん
20/07/18 14:06:16.09 LD7t+FRX.net
線形拘束オートマトンが実装できるってすごいことだから
模範解答示したら良いと思うよ
88:デフォルトの名無しさん
20/07/18 14:14:52.95 ICGznoJS.net
>>83
難度がうんぬんよりも問題文読んだ時点で作問者の頭が悪そう(使ってる言葉の意味わかってなさそう)って思ってスルーしたわ
ここのコテハンも同じ理由でスルー
ただ、面白そうなら気まぐれで解くこともある
解く方も出す方も好きにしたら良い
89:デフォルトの名無しさん
20/07/18 14:36:05.17 55gPHPOJ.net
>>86
答えがないから不誠実なのではなくて
出題者に伝えておくべき情報が>>1に書かれていないのならそれは不誠実ということ
>>71は次のように言っている
「皆んながお前の出題に問題があると思っている」
俺は今後のためにも当然次の疑問が生まれ、それを伝えた「どこらへんが?難易度が高すぎた?」
そこで君が「難易度よりむしろマナーに問題がある」という趣旨の発言をした
そうなると俺は「>>1にマナーの具体的な内容を書くべき」
そうしないと同じ問題を起こしてしまうから
90:デフォルトの名無しさん
20/07/18 14:41:12.58 LD7t+FRX.net
>>89
ルールとして書くまでもなく一般的なコミュニケーションのことだから
>>1に書かれてなくても良いし、それが無いがゆえにできなかったのだという
態度が自己中ってこと
91:デフォルトの名無しさん
20/07/18 14:42:30.19 LD7t+FRX.net
問題を起こしてしまうの主語は君がってことだよね? 君がコミュニケーション能力を身につければ解決すると思うのだけれども
92:デフォルトの名無しさん
20/07/18 14:42:36.88 vTEAacne.net
解いてみたいと思えない内容の上に長文でうざい
っていう感情論に近いものを明文化すんのはちょっと難しいね
93:デフォルトの名無しさん
20/07/18 14:50:16.06 LD7t+FRX.net
客観的に難易度は高いと思うよ
少なくとも僕は実装したこと無い
有限オートマトンが精一杯
自分で「難易度がこのスレの住人には高すぎたということか」と言ってしまうのはイキりだと思った
難易度+高慢な態度 ってところかと
94:デフォルトの名無しさん
20/07/18 15:08:41.26 n7a2F8Nj.net
あるいは進行形で解いてるやつがいるかもしれないな
なんたってこのスレの最長解答時間は3ヵ月だからなw
95:デフォルトの名無しさん
20/07/18 15:10:20.71 LD7t+FRX.net
レーダーのお題でしょ、あれは感動した
96:デフォルトの名無しさん
20/07/18 15:12:42.37 LD7t+FRX.net
チューリングマシンのお題は、僕も解いて見ようと思ってWikipedia読んでる
97:デフォルトの名無しさん
20/07/18 15:13:54.80 LD7t+FRX.net
最高のチューリングマシンを見せてやるぜ、必ず帰ってくるからな、帰ったら結婚しよう
98:デフォルトの名無しさん
20/07/18 15:20:47.20 n7a2F8Nj.net
死亡フラグね
99:デフォルトの名無しさん
20/07/18 15:29:31.73 Bt+NBO6d.net
>>83
気に入らない奴は相手にされないなんて、人と人とのコミュニケーションが発生する場所なら何処でもそうだろう。仕事などの個人の感情よりやるべきことを優先すべき場面を除いては。
書かれてないから知らないなんて、小学生の屁理屈にも劣る反応だな。
100:デフォルトの名無しさん
20/07/18 15:34:22.37 55gPHPOJ.net
新しいことを学ぶのは素晴らしいと思うけど今まで2週間以上同じスレに居たことがないから責任持てないなぁ
現場でバリバリ使う為にはε-非決定性オートマトンとかも知っとかないと実用的じゃなくなるから学習に意味を見いだすのはかなり難しいと思うよ
101:
20/07/18 15:41:54.65 KIRMqycZ.net
>>100
非決定オートマトンを決定性オートマトンにする、とかいうお題は、やっぱりマニアックすぎますかね?
今そういう本をよんでポチポチコードを書いているので、需要があるようなら出題&採点してもいいかなって思ってます
102:デフォルトの名無しさん
20/07/18 15:47:29.51 55gPHPOJ.net
>>101
需要があるかは分からないけどとてもいいと思うよ
103:デフォルトの名無しさん
20/07/18 15:58:37.25 n7a2F8Nj.net
>>102
いなくなるかもしれないなら解答例貼っておいてよ
104:デフォルトの名無しさん
20/07/18 16:51:46.46 2TKjWEFt.net
sedでいいんじゃね
105:デフォルトの名無しさん
20/07/18 18:01:09.47 k5pKf1DO.net
>>81
まあしかし何かが出題されたら必ず誰かが解かねばならないわけでもないしな。義務は何もないからこうでなければいけないという事もない。
106:69
20/07/18 19:43:00.59 BZh66Ti/.net
107:rel="noopener noreferrer" target="_blank" class="reply_link">>>74 ありがとう❣、チャレンジして良かったよ! 出題者からはなんの評価も解説もされないので そういう反応が返って来ると嬉しい。 また、次のモチベーションに繋がる。 教科書とか勉強中のコラムとかコーヒーブレイクみたいな 息抜き程度の頭の体操になるような手軽なお題の方が答えやすいね。 結局は出題者も回答者も自己満足でしか無いから、 初級~中級者向けくらいが丁度良いかも?
108:デフォルトの名無しさん
20/07/18 20:06:14.32 tp8HW1uL.net
>>69
こういうコードを見ると、jagarikin の「スーパー鳥スロット」を思い出すw
画像ファイルが1つもなく、こういうコードばっかりだったw
109:デフォルトの名無しさん
20/07/18 20:44:45.69 naIVYT0v.net
>>107
コードのキレイさなら>>70かもしれませんが
お題はコードを出力するのではなくハート形を出力せよとのことでしたから
初心者がチャレンジしたコードなのでスマートな書き方でないのは御勘弁下さいorz
110:68
20/07/18 21:39:17.47 yeg1h1ii.net
いろんな回答を見たかったので早期の論評は控えてました。
>>69の出力は出題者もきれいだなって思います。
想定していたコードはどちらかいうと>>70に近くて
URLリンク(codepad.org)
こんな感じの簡単な式(x^2+y^2<100-|x|y)でも充分かなと思ってました。
ハート形を生成できる式はいくつか知られているので、バリエーションを探ってみるのはいいかなと思います。
111:蟻人間
20/07/19 13:58:11.60 GV3E92FC.net
(1) URLリンク(gist.github.com)
二次元タートルグラフィックスで八角形を描けたよ。
お題: (1)と(2)のリンクを参考にコッホ曲線を描画せよ。
(2) URLリンク(www.f.waseda.jp)
112:蟻人間
20/07/19 14:05:25.72 GV3E92FC.net
>>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);
}
113:蟻人間
20/07/19 14:45:30.46 GV3E92FC.net
小さなお題: >>110 の(1)のturn_dir関数とturn_angle関数を3次元に拡張し、
3次元タートルグラフィックスを可能にせよ。
ただし、turn_dirの引数は長さ1の方向ベクトルとし、turn_angleの引数は角度とする。
turn_dirは、引数dzが0のとき、変更前と同じ動作にせよ。
また、turn_angleの引数にもう一つの角度を追加し、追加した角度がゼロのとき、
変更前と同じ動作にせよ。
ヒント:四元数
114:デフォルトの名無しさん
20/07/19 14:48:01.51 EiEVeWaP.net
草
66 名前:デフォルトの名無しさん[sage] 投稿日:2020/07/18(土) 00:01:47.57 ID:tp8HW1uL [1/2]
ついに蟻人間は、3次元まで行ってしまったか
その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw
115:蟻人間
20/07/19 21:17:44.37 T8vbWyFG.net
さて、解けた者は挙手したまえ。
116:デフォルトの名無しさん
20/07/19 21:45:13.46 h5vFOzT4.net
頭が悪いことがばれたからって
必死に数学の知識を見せようと頑張ってる
でも頭の悪さが随所に滲み出てる
自覚のないアホ
117:蟻人間
20/07/19 21:56:49.40 GV3E92FC.net
>>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);
}
118:デフォルトの名無しさん
20/07/19 21:57:24.56 5kiTFqsE.net
誰もイキらずに淡々と問題と答えのレスだけ並んでく雰囲気は良さを感じたけど
やっぱクソコテって怖いな
119:蟻人間
20/07/19 22:06:51.03 GV3E92FC.net
>>116
dz = dy * Math.sin(angle2 * Math.PI / 180);
dy *= Math.cos(angle2 * Math.PI / 180);
次は、三次元のturn_dirね。数学、スゴクデキルんでしょ?
120:蟻人間
20/07/19 22:12:10.73 GV3E92FC.net
お題: JavaScript
function turn_dir(dx, dy, dz) {
// (dx, dy, dz)は長さ1の方向ベクトル。
// 長さ1の方向ベクトル(turtle_dx, turtle_dy, turtle_dz)を(dx, dy, dz)だけ回転させる。
...(ここに何か書く)...
}
121:蟻人間
20/07/19 22:16:20.98 GV3E92FC.net
♪はい、コーディングいってみよー!
はいはいはい、はいはいはい!
122:蟻人間
20/07/19 23:32:08.26 T8vbWyFG.net
俺はそういう悪評トリックに引っ掛からないよ。間違いは的確に指摘頂きたい。
123:デフォルトの名無しさん
20/07/20 06:57:18.16 P7t0RBc6.net
>>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) );
}
URLリンク(i.imgur.com)
124:デフォルトの名無しさん
20/07/20 07:42:33.17 ozWDjdlg.net
>>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);
}
}
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
125:蟻人間
20/07/20 15:09:49.43 rHNryQzp.net
傾けた木が平面にならない。
URLリンク(github.com)
(4) URLリンク(github.com)
URLリンク(twitter.com)
何でだろ。
URLリンク(github.com) からダウンロードして下さい
126:。 お題: (4) を修正して木が平面になるようにせよ。 (deleted an unsolicited ad)
127:デフォルトの名無しさん
20/07/20 16:08:13.13 UHinuGOV.net
お題じゃなくて作成依頼ですか?w
128:蟻人間
20/07/20 16:16:33.54 6GFyBW1T.net
こういうのは数学が鬼ズバできる猛者に任せたい所だが。。。
報酬は出しちゃいかんのか。
129:デフォルトの名無しさん
20/07/20 17:25:48.10 uvZgkaZD.net
出ないならやらない
130:デフォルトの名無しさん
20/07/20 17:58:58.92 8mFfSXNu.net
いや、そういう猛者がいるところに依頼してこいよ
報酬出すんならランサーズとかにでも行ってこい
なんでここで話題にするんだ
131:デフォルトの名無しさん
20/07/20 17:59:50.36 8mFfSXNu.net
そういう意味不明な言動を繰り返すから糞コテ呼ばわりされるって気付いて
132:蟻人間
20/07/20 18:37:44.48 rHNryQzp.net
寺へ行きました。すみません。
133:デフォルトの名無しさん
20/07/20 23:40:32.05 5ka8Ymx5.net
>>124
なにこれ激重。1~3はIEでも動くけど4はクロームでも少し時間かかる。
URLリンク(i.imgur.com)
舞フレームごとに書き出してるんかな?
3Dオブジェクトコンテナにでも入れた方がいいのかな?
134:蟻人間
20/07/20 23:47:38.07 6GFyBW1T.net
やろうとしてるのは、三次元フラクタルと臓器の実体化だから、超複雑な図形を再帰で描くことになる。再帰が多ければ確かに計算量は爆発するよ。
135:デフォルトの名無しさん
20/07/20 23:52:17.88 /f9oEP+1.net
いい加減IE捨てろよ
136:アンスタ7.2日目
20/07/20 23:54:27.58 5ka8Ymx5.net
>>124
URLリンク(i.imgur.com)
タートルグラフィックスTreeの平面化
URLリンク(i.imgur.com)
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);
}
137:デフォルトの名無しさん
20/07/20 23:57:55.33 5ka8Ymx5.net
>>133
クロームより軽いから、捨てられなくて。。。
138:蟻人間
20/07/21 00:03:34.18 iLwMnecK.net
>>134
その事例についてはteratailに移動しましたので、ここでは打ち切りとさせて下さい。
URLリンク(teratail.com)
139:デフォルトの名無しさん
20/07/22 22:25:22.87 ILXZvJ+B.net
「1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍」
…が、なんとなく成り立っているように感じられるプログラムを作って発表せよ。
140:デフォルトの名無しさん
20/07/22 22:30:15.48 IwIxQ1Ze.net
お題: ランダムな整数が格納された長さNの配列から、偶数の要素のみを抜き出せ
Nは任意とする
141:デフォルトの名無しさん
20/07/22 22:57:06.83 EawLE7Sy.net
>>138 Ruby
p gets.split.map(&:to_i).select(&:even?)
142:デフォルトの名無しさん
20/07/23 00:07:39.47 DuCdQo+y.net
>>137
面白いものができてしまったわ
class Integer
def +(other) 200 end
def /(other) 10 end
end
p "1+1は2じゃないぞ。オレたちは1+1で#{1 + 1}だ!#{rate = 200 / 2}倍だぞ#{rate}倍"
# => "1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍"
URLリンク(repl.it)
143:デフォルトの名無しさん
20/07/23 10:38:13.83 bJ7HfHNw.net
>>138 ocaml
URLリンク(ideone.com)
>>138 octave
URLリンク(ideone.com)
144:デフォルトの名無しさん
20/07/23 22:03:16.45 VBywRp49.net
>>138 Perl5
@b = grep{$_ ^ 1} @a;
145:デフォルトの名無しさん
20/07/23 23:12:54.26 QnunbgyT.net
>>138
Java
URLリンク(paiza.io)
146:デフォルトの名無しさん
20/07/24 00:24:32 F0SZWNxk.net
>>138 Python
import random
N = 10
MAX = 100
[x for x in random.sample(range(MAX), N) if x % 2 == 0]
147:デフォルトの名無しさん
20/07/24 03:32:41.61 6ZonvnML.net
>>137
なんとなく結果を2進数(あるいは通常の10進数以外の表現)で出せば良いだけのような気がするが・・・
Perl だとこんな感じで 10 が出る。
printf "%b\n", 1 + 1;
148:デフォルトの名無しさん
20/07/24 03:47:06.33 6ZonvnML.net
>>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 なら読んだ直後の文法チェック時にエラーだと思う。
149:デフォルトの名無しさん
20/07/25 07:02:03.31 j1aQFTSL.net
>>138Julia
a=1:10
a[iseven.(a)]
150:デフォルトの名無しさん
20/07/25 11:32:49.78 vIjhxGJs.net
大抵の言語でfilter modulo一発だよね。
お題www
151:デフォルトの名無しさん
20/07/26 11:42:26.03 467XWCJo.net
>>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は関数の外に置いた。
152:デフォルトの名無しさん
20/07/26 11:54:08.47 arqbmdN/.net
Haskellのコード見たいと思ってた
153:デフォルトの名無しさん
20/07/26 11:55:36.48 Lwmxod4b.net
流行らなかった訳が分かった
154:デフォルトの名無しさん
20/07/26 12:16:01.64 yLhsD6tn.net
>>151
まあね。
安全なコードを書き易いと取るか、面倒くさいと取るかやね。
155:デフォルトの名無しさん
20/07/26 12:31:12.02 XQciIU0B.net
お題
2つの文字列の差を[]で囲って出力してください
例1
入力:abc adc
出力:a[b]c
例2
入力:abc acd
出力:a[bc]
例3
入力:abc bcc
出力:[ab]c
156:デフォルトの名無しさん
20/07/26 15:30:12.41
157:yLhsD6tn.net
158:デフォルトの名無しさん
20/07/26 17:41:12.51 1PJx+gwa.net
やっぱフラグしかないのか?
159:デフォルトの名無しさん
20/07/26 19:21:26.42 +ODzYEeD.net
>>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"
}
160:デフォルトの名無しさん
20/07/26 23:12:10.92 3QUkzPB/.net
>>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]
161:デフォルトの名無しさん
20/07/29 09:26:50.38 yJ6wpcWu.net
お題1
じゃんけんを実装してください
1 = ぐー
2 = ちょき
3 = ぱー
入力: 1
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです
お題2
あなたの勝率を指定できるようにしてください
勝率は0.0~1.0で入力します
入力: 1 0.7
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです
162:デフォルトの名無しさん
20/07/29 22:59:47.88 tovqwAmw.net
>>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
163:デフォルトの名無しさん
20/07/29 23:09:16.98 tovqwAmw.net
下から5行目タイポ
puts odai2[2, 1] # => You: Chocky, Com: Parr. Win
164:デフォルトの名無しさん
20/07/29 23:11:53.00 z6Fnx3oM.net
Parr
出たか連続校正レス君
165:デフォルトの名無しさん
20/07/29 23:15:30.50 zhbinuHB.net
別にええやろ
166:蟻人間
20/07/29 23:42:09.78 hGtKVe2E.net
子ども国会で、グー、チョキ、パーのつづりを次のように閣議決定しました。
グーはgoo、
チョキはchoki、
パーはpar、
ジャンケンはJankenとする。
167:デフォルトの名無しさん
20/07/30 00:20:11 aEaasmNp.net
Unicode の \u270A \u270B \u270C
168:デフォルトの名無しさん
20/07/30 15:16:52 cH8Va6i2.net
自然数AとB
169:があります A * B ではない方法で、AとBを掛けた結果を求めなさい。 ただし、AとBは4バイトの数値型で、どのような値が入ってきても 実施してからなるべく近い時間で計算終了する方が高得点とします。
170:デフォルトの名無しさん
20/07/30 15:58:10.10 aEaasmNp.net
>>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
171:デフォルトの名無しさん
20/08/01 20:01:40.49 eF75V+Af.net
>>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
172:デフォルトの名無しさん
20/08/01 21:52:47.76 xRTQ61eG.net
>>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
173:デフォルトの名無しさん
20/08/04 03:43:27.41 DYgISIVe.net
お題: 文字列の格納された配列から重複した文字列を削除し昇順にソートせよ
['apple', 'banana', 'apple', 'chikuwa']
↓
['apple', 'banana', 'chikuwa']
174:デフォルトの名無しさん
20/08/04 03:55:23.60 gT//RRjC.net
>>169 Ruby
['apple', 'banana', 'apple', 'chikuwa'].uniq.sort #=> ["apple", "banana", "chikuwa"]
175:デフォルトの名無しさん
20/08/04 05:05:40.50 YeoxtHaI.net
>>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"
}
176:デフォルトの名無しさん
20/08/04 18:06:57 Bm48LwqI.net
>>169
Kotlin または Kotlin script でのやり方
a が Array<String> または List<String> でそこに元の文字列が入っているとすると。
val b = a.toSortedSet()
でbに重複削除されてソートされたSetができる。
これを List<String> にしたい場合はこうする。
val c = b.toList()
177:デフォルトの名無しさん
20/08/04 19:17:32.13 w83j0BiFE
[お題] “(16 + (8 - 4)) / 2” のような文字列を入力として,
その評価結果(この場合は10)を出力するプログラムを作成してください.
178:デフォルトの名無しさん
20/08/04 18:45:38.06 lImhU2CT.net
>>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
179:デフォルトの名無しさん
20/08/04 19:24:17 lImhU2CT.net
>>174
あーアホだったw
タブ消去の仕様だとPythonだと分けわからんことになるなw
↓貼り直した
URLリンク(codepad.org)
※会員未登録の為、一定期間後に自動消去
180:デフォルトの名無しさん
20/08/04 20:26:47.42 BW/Lg1/b.net
>>166
この魔法が気になる
181:蟻人間
20/08/04 20:33:41.16 pnjegpbT.net
>>176
奇数ならば最下位ビットが1であることを利用している。
182:デフォルトの名無しさん
20/08/04 20:43:45.04 ZgraBKAX.net
筆算じゃないの
101 b
110 a (+
---------
0
1010
10100
---------
11110
183:蟻人間
20/08/04 20:47:15.02 pnjegpbT.net
お題: 総務省統計局の1990~2019年までの人口データを使用して2020~2024年の日本の人口の推計値を求めよ。人口データ以外は使用しないものとする。
184:蟻人間 ◆T6xkBnTXz7B0
20/08/04 21:14:16 pnjegpbT.net
これは電子政府の使い勝手のテストである。だれも解けないなら、電子データは活かされていないと判断する。
185:デフォルトの名無しさん
20/08/04 21:16:21 02jYvMNw.net
>>176
aの偶奇によって↓の計算してaがちっちゃくなったら終わりってしてるだけだぞ
(2a' + 1)b = b + a' * (2b)
(2a') * b = a' * (2b)
186:デフォルトの名無しさん
20/08/04 21:26:04 lImhU2CT.net
チューリングマシンを使って重くて複雑な乗算を再現して何の意味があるのかと思ってそうだな
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている
187:デフォルトの名無しさん
20/08/04 21:58:22.27 JHqDXk92.net
お題を出して解くスレで電子データは活かされていないとかどうでもいいんですが…
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ
188:デフォルトの名無しさん
20/08/04 22:11:15.82 02jYvMNw.net
片山博文MZ◆NveQN6OtcI
189:デフォルトの名無しさん
20/08/04 23:36:46 L0dS0CTZ.net
お題
両替をしてください
貨幣は次の文字列で表されます
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)
190:デフォルトの名無しさん
20/08/05 00:05:23.10 DlE2lfwB.net
書きたいけど寝たい
191:デフォルトの名無しさん
20/08/05 02:29:32 prJIGLTT.net
>>176
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
192:デフォルトの名無しさん
20/08/05 02:55:46.54 wv4r4oF2.net
>>185 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"
}
193:デフォルトの名無しさん
20/08/05 03:57:36.76 NljdtI5zt
>>153 C++
URLリンク(ideone.com)
>>169 C++
URLリンク(ideone.com)
194:デフォルトの名無しさん
20/08/05 11:37:38.85 kVNaCqIg.net
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)
グラフをプロットしたらこのエラーが出ました。対処法を教えてください
195:デフォルトの名無しさん
20/08/05 12:05:51.48 DlE2lfwB.net
斬新なお題だなNEC-PCuserさん
196:デフォルトの名無しさん
20/08/05 12:27:47.54 NljdtI5zt
>>185 C++
URLリンク(ideone.com)
197:デフォルトの名無しさん
20/08/05 12:16:18.65 IZQzbQjk.net
>>190<対処法を教えるお題
一行目と最後の行IOError("%s not found." % path) から
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py"
のパスが間違えていると思われるので
temp.pyを添付するか確認するように進言します
198:デフォルトの名無しさん
20/08/05 14:35:10 xKYyZvTf.net
心電図装置に繋がってるデバイスが機能停止したんだろ
199:デフォルトの名無しさん
20/08/05 15:30:05.18 prJIGLTT.net
>>185
Kotlin
URLリンク(paiza.io)
最初は割り算したり余り出したりしてやろうと思ったんだけど、よく考えたらこの場合はその計算は無駄な感じがしたので合計から引けたらその貨幣を出すのを繰り返すようにした。
200:デフォルトの名無しさん
20/08/05 16:44:00.29 73CDpa/5.net
ふむ。コイン切れの対処もし易いな。
201:蟻人間 ◆T6xkBnTXz7B0
20/08/05 17:59:02 TWR5sasY.net
お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。
ダミーのfeedは、次のようなプログラムとする:
- 現在日時と「えさをやりました。」を出力する。
202:蟻人間
20/08/05 18:08:26.66 UZ8wPONY.net
>>197 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);
}
203:デフォルトの名無しさん
20/08/05 19:40:23.44 VitQNdTl.net
は、はやい・・・
204:デフォルトの名無しさん
20/08/05 20:19:52.45 wv4r4oF2.net
>>197 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 # 表示確認用
205:デフォルトの名無しさん
20/08/05 23:41:13.11 prJIGLTT.net
>>197
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 'えさをやりました。'
206:デフォルトの名無しさん
20/08/05 23:51:48.40 prJIGLTT.net
>>201はfeedで現在の日付を出すのを忘れた。
日付付けるなら例えばこうする。
#!/bin/sh
echo `date` 'えさをやりました。'
date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。
#!/bin/sh
date '+%F %T えさをやりました。'
207:デフォルトの名無しさん
20/08/06 14:26:19.33 HoaabIeAf
>>138 Rust
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let mut vec : Vec<u8> = Vec::new();
for _ in 1..20 {
vec.push(rng.gen::<u8>());
}
let result: Vec<u8> = vec.iter().filter(|&x| x % 2u8 == 0u8).cloned().collect();
for v in result {
println!("{}", v);
}
}
208:デフォルトの名無しさん
20/08/06 16:22:14.55 HoaabIeAf
>>138 C++
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
auto vec = std::vector<int>{};
for (int i = 0; i < 20; ++i) {
vec.push_back(rand() % 10 + 1);
}
auto result = std::vector<int>{};
std::copy_if(vec.begin(), vec.end(), std::back_inserter(result),
[](int v) { return v % 2 == 0; });
for (auto v : result) {
std::cout << v << std::endl;
}
}
209:蟻人間
20/08/06 18:50:53.87 mzjhTFla.net
お題: 現実世界でコイにえさをやるプログラム。
できるのか?
210:デフォルトの名無しさん
20/08/06 19:02:17 nx4HEXSE.net
>>205
始めからPLCのプログラム限定って書け>>197
211:デフォルトの名無しさん
20/08/06 19:06:41 cHZDAcP7.net
>>205
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。
ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。
212:蟻人間
20/08/06 19:21:15.27 mzjhTFla.net
ハードウェアだとソフトウェア制御できない。成長を細かく制御したい。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。
213:デフォルトの名無しさん
20/08/06 19:23:23.77 nx4HEXSE.net
>>208
ピ・タ・ゴ・ラ・スイッチ
214:デフォルトの名無しさん
20/08/06 19:37:26 /QKQvkvR.net
なぜ何度ツッコまれてもスレタイからずれようとするんですか?
学習できないんですか?
215:蟻人間 ◆T6xkBnTXz7B0
20/08/06 19:46:21 mzjhTFla.net
>>210
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会
216:デフォルトの名無しさん
20/08/06 19:58:03 AWtnj9QL.net
CDトレイを開閉するソフトを作りそれで餌やり器のボタンを押せ
217:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:01:30 mzjhTFla.net
>>212
正解。次のお題お願いします。
218:デフォルトの名無しさん
20/08/06 20:18:11.34 nx4HEXSE.net
【お題】正解にたどり着くようにアシストした得点を算出するプログラムを作れ
スケールは1点以上100点未満とする
219:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:28:14 mzjhTFla.net
>>214
それは人間しかできないんで内科医?
220:デフォルトの名無しさん
20/08/06 20:37:37 sjF+gr/I.net
クソコテ死ねよマジで
221:デフォルトの名無しさん
20/08/06 20:53:50 O/aURmUk.net
>>208
その手の目的には Raspberry Pi がおすすめです
最近流行っているから多くのノウハウが容易に見つかりますよ
222:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:07:24 mzjhTFla.net
>>217
ありがとうございます。使えそうなハードでかなりお買い得ですね。
三菱やパナソニックは、、、破壊的イノベーションができない連中か。。。
223:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:16:15 mzjhTFla.net
IchigoJamというのもあるみたい。
224:デフォルトの名無しさん
20/08/06 21:29:05.63 8sSWlLgK.net
スレチ
◆QZaw55cn4c はうせろ
225:
20/08/06 22:26:16.70 L4WiFaHt.net
>>220
突然、どうしたのですか?
226:デフォルトの名無しさん
20/08/06 22:38:17.00 8sSWlLgK.net
>>221
呼んでねえよハゲ消えろ
227:蟻人間
20/08/06 23:02:55.51 mzjhTFla.net
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。
(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。
228:デフォルトの名無しさん
20/08/07 00:08:41.77 TzYKRTqH.net
よく、ラズパイコンテストでやってる
水槽の中の金魚に、エサをやる装置とか
229:デフォルトの名無しさん
20/08/07 11:29:33 uQ4nbdFf.net
債務が多い
230:デフォルトの名無しさん
20/08/07 12:51:36 lb7vo/Jy.net
お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください
入力: 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)
231:デフォルトの名無しさん
20/08/07 13:43:57.69 uQ4nbdFf.net
>>226 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)
232:デフォルトの名無しさん
20/08/07 13:48:23.69 uQ4nbdFf.net
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 いらなかった
233:デフォルトの名無しさん
20/08/07 14:51:48.30 5vmbSLbR.net
>>226 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 )}"
234:デフォルトの名無しさん
20/08/07 14:52:06.69 5vmbSLbR.net
>>226 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 )}"
235:デフォルトの名無しさん
20/08/07 16:23:53.54 uQ4nbdFf.net
<<=って演算子ほしいな
236:デフォルトの名無しさん
20/08/07 19:28:59 P4+Ga4Bm.net
>>226 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)
237:デフォルトの名無しさん
20/08/08 00:04:29 b55CcwAR.net
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い
Lodash ではたまに「インスタンス.メソッド」の形にならない関数がある。
関数(オブジェクト)の形式
そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
238:デフォルトの名無しさん
20/08/08 00:46:24.94 R/FWJxxqi
>>226 C++
URLリンク(wandbox.org)
C++で無理やりメソッドチェーンしてみた
239:デフォルトの名無しさん
20/08/08 07:24:36.17 u/td9dv4.net
lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど
240:デフォルトの名無しさん
20/08/08 07:26:45.92 u/td9dv4.net
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
241:デフォルトの名無しさん
20/08/08 09:18:46 b55CcwAR.net
>>226
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
242:デフォルトの名無しさん
20/08/08 14:04:33 JvTsLjL+.net
>>226
Python3
URLリンク(ideone.com)
全然短くならなかったんだけど皆どういう脳みそしてるの
243:デフォルトの名無しさん
20/08/08 14:58:00 gFRxrH0y.net
>>226
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;
>>238
オブ脳ならぬラムダ脳なんだろうなぁ
同値でグループ化、代表元でソート、出力、これを関数でやってる
それかワンライナーへの偏執的な愛
244:デフォルトの名無しさん
20/08/08 15:53:05 xsg1wzC9.net
>>226 Ruby
gets.split.group_by(&:upcase).sort.map{|_,v|$><<"(#{v*' '}) "}
245:デフォルトの名無しさん
20/08/08 16:11:32.49 yUCBpeXj.net
>>238
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
URLリンク(ideone.com)
246:デフォルトの名無しさん
20/08/08 17:07:51.92 HH2BebFt.net
>>238
Pythonだとどうしても短くはならないな。
URLリンク(ideone.com)
groupbyのところは、defaultdictで書く方法もあるけど大差なし。
247:デフォルトの名無しさん
20/08/08 21:09:30.55 JvTsLjL+.net
>>239
Rubyの人もワンライナーだな
Rubyってショートコーディングに向いてるのかな?
>>241,238
なるほど
248:デフォルトの名無しさん
20/08/08 21:20:24 bf+w2Xl6.net
code golfなら基本はperlで、次点がRubyじゃないですかね
249:デフォルトの名無しさん
20/08/08 21:56:24 JvTsLjL+.net
>>244
そういうものなのね
250:231
20/08/08 22:49:25 b55CcwAR.net
関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから
Elixir では関数の第一引数を、前のチェーンからの戻り値として渡せる
str = "a b c"
# 文字列を空白で分割して、配列化する
IO.inspect String.split( str )
str
|> String.split
|> IO.inspect
出力は、どちらも
["a", "b", "c"]
251:231
20/08/08 22:54:29 b55CcwAR.net
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ
Python の内包表記みたいなのは、可読性が悪い
252:デフォルトの名無しさん
20/08/08 23:09:35.53 n6UBlQy6.net
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
253:デフォルトの名無しさん
20/08/08 23:14:07.63 ifN2bgU4.net
>>185
Java
URLリンク(paiza.io)
254:デフォルトの名無しさん
20/08/08 23:32:15 ifN2bgU4.net
>>226
Java
URLリンク(paiza.io)
255:デフォルトの名無しさん
20/08/09 00:15:33.89 cPfQFxYQ8
Ruby上達したら便利そう
理想的なスクリプト言語だな
256:デフォルトの名無しさん
20/08/09 00:17:54.90 /K790vfJ.net
javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな
257:デフォルトの名無しさん
20/08/09 00:24:15.31 cPfQFxYQ8
これとかすげえ
URLリンク(www.youtube.com)
258:デフォルトの名無しさん
20/08/09 00:41:46.15 uywZ9h5A.net
>>185
Python3
URLリンク(ideone.com)
259:デフォルトの名無しさん
20/08/09 02:47:46 Mt0Kh35r.net
>>226
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) + ") ");
}
260: } }
261:デフォルトの名無しさん
20/08/09 04:58:28 bQgrv4ZF.net
>>226
Kotlin
URLリンク(paiza.io)
262:デフォルトの名無しさん
20/08/09 16:07:42 HZ7sqguG.net
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる
2つの文字列を入力として受け取り
2つの文字列が一致するか、または、文字列を回転させて一致した場合はtrueを返してください
さもなくばfalseを返してください
入力: abcde deabc
出力: true
入力: abcde cdeba
出力: false
263:デフォルトの名無しさん
20/08/09 16:42:31.20 /K790vfJ.net
>>257 js
const isRotateStr = (a, b) => (a + a).indexOf(b) != -1
console.log(isRotateStr("abcde", "deabc"))
// true
console.log(isRotateStr("abcde", "cdeba"))
// false
264:デフォルトの名無しさん
20/08/09 16:56:20.10 DzMx1xPb.net
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
265:デフォルトの名無しさん
20/08/09 16:59:23.64 Uo9rXbdx.net
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
266:253
20/08/09 19:01:45.47 UiQUiAYf.net
>>226 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)
267:253
20/08/09 19:17:23 A1LNtpwx.net
>>257 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
268:デフォルトの名無しさん
20/08/09 20:09:27.60 sb6ynJ/q.net
Jニキも披露してくれよ
269:デフォルトの名無しさん
20/08/09 22:00:05.82 BOQzPYI8.net
>>226 octave
URLリンク(ideone.com)
>>257 octave
URLリンク(ideone.com)
270:253
20/08/09 22:27:07 iNMqPGBy.net
>>261 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正
>>257 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
271:デフォルトの名無しさん
20/08/09 22:40:05 /K790vfJ.net
octave文法好みだけど結構古い言語なんだな
272:253
20/08/09 23:21:31.30 dFp53gtH.net
>>226 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)
273:デフォルトの名無しさん
20/08/09 23:56:04.43 DzMx1xPb.net
Perlだとこの程度でも正規表現使わないといかんのか?
274:253
20/08/10 00:02:07 5Aj+dIHX.net
>>267 を少し簡略化
>>226 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()) )))
275:253
20/08/10 00:03:02 5Aj+dIHX.net
>>268
substrとかでも書ける
276:253
20/08/10 01:07:06.98 mTkq56mc.net
>>268
>>265は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので
>>257 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も実は正規表現で分離する機能を持つので、起きていることは実は>>265と一緒なんだよね
277:253
20/08/10 01:18:32.03 mTkq56mc.net
>>271 ゴメン、$a[2]$a[0]はbug、訂正
>>257 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};
278:253
20/08/10 01:58:56.02 5YDTUTIu.net
>>272 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;
279:
20/08/10 02:53:12.35 JYoLJZbs.net
>>257 C
スレリンク(tech板:68番)
280:デフォルトの名無しさん
20/08/10 05:44:26 SKFyjjt9.net
お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください
入力: URLリンク(github.com)
出力: "Hello World!"
281:デフォルトの名無しさん
20/08/10 08:49:19.32 SwBLGnEH.net
>>275 Ruby
require 'open-uri'
str = open('URLリンク(raw.githubusercontent.com)').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!
282:デフォルトの名無しさん
20/08/10 08:49:26.47 OSJh6/O/.net
>>275 Ruby
URLリンク(ideone.com)
283:デフォルトの名無しさん
20/08/10 17:10:10.24 Z7zFlWuQ.net
>>257
Kotlin
簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。
URLリンク(paiza.io)
284:デフォルトの名無しさん
20/08/10 17:10:16.38 SKFyjjt9.net
>>275 C++
URLリンク(ideone.com)
285:デフォルトの名無しさん
20/08/10 18:01:14 Z7zFlWuQ.net
>>275
Kotlin
とりあえず簡単そうだったので Kotlin へのコンバータを作った(コンバータなのでKotlinのソースを出力するだけ)。
実行したい場合はその出力を Kotlin コンパイラに読ませてコンパイルしてから Java VM で動かす必要がある。
URLリンク(paiza.io)
こちらの Linux 環境でコマンドラインの kotlinc を使ってやった時はこうやった。(BF2Kotlin.kt がコンバータ。hello.bf はダウンロードしたプログラム)
$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!
286:デフォルトの名無しさん
20/08/10 18:43:36.36 TsKVv45J.net
>>257
Python3
URLリンク(ideone.com)
287:デフォルトの名無しさん
20/08/10 21:10:04.86 EfqLUS40.net
>>257 Python3
def f(a, b): return len(a) == len(b) and a in b + b