プログラミングのお題スレ Part18

レス数が1000を超えています。これ以上書き込みはできません。
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/
2020/07/14(火) 21:06:03.54ID:5wYEuLp1
%W[> > 1 \ o t s u].each(&:display)

# => >>1 otsu
2020/07/16(木) 06:35:35.70ID:Tv2xtriA
前スレ996の三次元タートルグラフィックス。
懸賞WebMoney5000円です。早い者勝ち。
2020/07/16(木) 07:00:51.32ID:Rw1l0Cvs
>>3
スレチ
消えろ
2020/07/16(木) 07:12:16.72ID:Tv2xtriA
宿題ではありません。
6デフォルトの名無しさん
垢版 |
2020/07/16(木) 11:35:02.71ID:6HbDCmR4
普通にドン引き
なんか作って欲しいツールの作成依頼スレになりそう
出題者は解答を持ち合わせておくべきだな
7デフォルトの名無しさん
垢版 |
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





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

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

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

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

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

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

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

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

0点
2020/07/16(木) 21:34:34.55ID:Rw1l0Cvs
クソコテはどっちも出題がクソ
存在もクソ
2020/07/16(木) 21:44:35.29ID:Zj8FcZKn
>>17
任意のは言い過ぎ
値が大きいと有効桁ゼロになる

精度は問わないといっても有効桁ゼロはさすがにダメと思う
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に施すとミサイルの発射方向が得られる。
23デフォルトの名無しさん
垢版 |
2020/07/16(木) 22:05:54.70ID:6HbDCmR4
>>21
はいすみません
x_hatがπ以上の正の場合
x_hatが-π以下の負の場合
それ以外の場合で式を分ける必要がありそう
2020/07/16(木) 22:06:42.91ID:Zj8FcZKn
>>22
頭悪い方法ですね
2020/07/16(木) 22:09:47.34ID:Tv2xtriA
スマートな方法は軍事秘密なんだよ


(方程式を使う)
2020/07/16(木) 22:28:50.69ID:Zj8FcZKn
簡単な二次方程式になるわけだけど
2020/07/16(木) 22:32:18.70ID:Tv2xtriA
昔はモンキーハンティングとかのシミュレーションやったよ
2020/07/16(木) 22:34:22.52ID:Zj8FcZKn
頭悪い方法で?
2020/07/16(木) 22:35:58.48ID:Zj8FcZKn
>>22から頭の悪さがにじみ出てる
2020/07/16(木) 22:36:41.77ID:Rw1l0Cvs
頭悪いのがにじみ出てて読んでてイライラする
2020/07/16(木) 22:37:12.00ID:Tv2xtriA
他に剛体球の衝突とか、太陽系の表示とか、万有引力とか。
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.
33デフォルトの名無しさん
垢版 |
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を変換して上書きする
2020/07/17(金) 06:25:20.74ID:CFzyXZw3
>>32
本当頭悪いね
それでどうやって解くつもり?
高校生ならもっとスマートに解く
2020/07/17(金) 08:57:31.48ID:ICqzduEx
解答側だと頭悪いと煽られるから出題側に回ってたわけか
まあ出題も頭悪そうだったが
2020/07/17(金) 09:13:31.04ID:TqoFz7RF
回答例用意してなくても出題していいと思う
でもニッチすぎる問題で知識ひけらかしてるみたいな出題は例出してくれ
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のときは過去になるので除外する。
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/
2020/07/17(金) 10:57:50.39ID:IMrokyul
>>37
えらい時間がかかったね
君、出題者だよね?
2020/07/17(金) 11:00:53.76ID:+x+SJT9l
三次元タートルで臓器を描画したら、レオナルド・ダ・ヴィンチのような天才になれるかもよ。
今、3Dプリンタのブームで三次元タートルグラフィックスは需要があるから、面白いことになるよ。
2020/07/17(金) 11:24:00.61ID:+x+SJT9l
臓器売買をなくすには、臓器を作ればいい。
ふふん。
2020/07/17(金) 11:55:47.46ID:vGVdpt19
>>37
で、5個の物体の
2020/07/17(金) 11:56:18.93ID:vGVdpt19
区別はどうするの?
2020/07/17(金) 12:50:28.20ID:+x+SJT9l
レーダー角の順番に物体をソートし、各物体に番号を付ける。レーダー角において物体が重なれば重複する恐れがあるが、とくに問題ではない。重複した物体が離れたときに、新規の物体の出現と見なせばいい。

前回と前々回の観測により、位置と速度が推測できる。次に予想される出現位置に一番近い物体を選択し、番号を関連付ければ同定できる。
45デフォルトの名無しさん
垢版 |
2020/07/17(金) 13:19:51.15ID:MbWzFU1J
>>36
チューリングマシンは現場でバリバリ使える調べて覚えるだけの価値がある技術だ
規則が連続している場合上の方を取ってくるとか2つの数値を比較して大小関係をルールにするといったことが出来る
正規表現で数値を取ってきてプログラミング言語で比較処理するより構造的に書ける
だから解答を用意した上でまずは簡単なお題から出して、次は少し難易度を上げるようなお題を考えながら待っていたが誰も解答しなかった
2020/07/17(金) 13:33:42.70ID:TqoFz7RF
>>45
どの言語でも使えるアルゴリズム?設計パターンなの?
理論だから賞味期限の長い知識なのはわかるけど優先的に教えられないのはなぜ?
2020/07/17(金) 13:35:45.21ID:vGVdpt19
>>44
各フレーム物体がランダム位置で出現する場合には使えません
2020/07/17(金) 13:37:37.60ID:vGVdpt19
>>45
チューリングマシンの実用性はゼロと思うけど
完全に学問用
2020/07/17(金) 13:40:10.41ID:Jbjf6afq
CFGのクラスのものを例題にしたから意図したような回答がなかったんじゃないかと
50デフォルトの名無しさん
垢版 |
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
2020/07/17(金) 14:59:38.30ID:+x+SJT9l
>>47
UFOじゃあるまいし、そんな物体が地球上にあるわけない。
2020/07/17(金) 15:18:45.55ID:+x+SJT9l
ステルス機とか、超音速機とか、プラズマ兵器とかのことか。

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

ステルスは想定外。
2020/07/17(金) 16:57:04.24ID:+x+SJT9l
防衛システムの歯無しは終わり。

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

レンダリングを何にするか。OpenGLは終わったし、DirectDrawは初心者には難しいし。そうだ、JavaScriptのThree.jsにしよう。これならスマホでも確認できるね。使ったことないけど。
2020/07/17(金) 17:49:54.25ID:vGVdpt19
>>51
出題文を読みかえしてみろ
2020/07/17(金) 17:51:07.65ID:vGVdpt19
ランダムに動く物体5個
2020/07/17(金) 18:31:00.92ID:+x+SJT9l
さて、亀は三次元の座標データP=(x, y, z)と三次元の方向ベクトルD=(dx, dy, dz) (単位ベクトルとする)で表せる訳だが、
線分を一つ引くごとに、線分を指定した位置に世界に追加する。世界の観測者の視点であるカメラは、テキトーな位置と方向で設置しておく。
描画ルーチンは、世界に追加された線分群をまとめて描く。描画エンジンは遠近法により、奥行きを持った映像を完成する。
2020/07/17(金) 18:35:56.95ID:+x+SJT9l
小さなお題: Three.jsで三次元空間に線分を一本描画せよ。
59デフォルトの名無しさん
垢版 |
2020/07/17(金) 20:07:34.26ID:Q6g2SqxJ
だめだ
何をいっているのだか私にはさっぱり
2020/07/17(金) 20:36:03.22ID:RwfCcdVI
>>59
NGワードに糞コテを登録すればOKということだけ理解してれば大丈夫。
2020/07/17(金) 20:39:05.23ID:zSX7HXP2
>>60
NGワードなんてスルー能力の足りない人が使うものですよ、私は全然使いませんね、だって必要ないし…
2020/07/17(金) 21:03:37.05ID:CFzyXZw3
クソコテスレ
2020/07/17(金) 21:18:41.06ID:hZ0JaeyU
こんな感じでHTMLを書けばThree.jsで三角形が描ける。
https://gist.github.com/katahiromz/cc182b4aaeaf2c7b5902238212c0f3f1
2020/07/17(金) 21:29:05.44ID:hZ0JaeyU
これを応用すれば、スマホでも動作するブラウザゲームを自分で作って
ゲーム会社を立ち上げることができるかも。

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

https://threejs.org/

を見ればたぶんわかる。三次元を描画するものだ。
2020/07/17(金) 21:32:26.43ID:C5ummCR0
スレタイからずれすぎ
2020/07/18(土) 00:01:47.57ID:tp8HW1uL
ついに蟻人間は、3次元まで行ってしまったか

その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw
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);
2020/07/18(土) 06:18:45.66ID:yeg1h1ii
お題:何らかの数式のグラフとしてハート形を出力せよ。
使用する言語は問わない。
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
70デフォルトの名無しさん
垢版 |
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
2020/07/18(土) 10:50:14.98ID:dRuMQkW5
>>45
出題が糞過ぎたから誰も答えなかったんだぞ
2020/07/18(土) 11:55:01.11ID:n7a2F8Nj
>>45
このスレでは誰もお題に答えないということがよくある
俺もお題出したことがあるがそういう時があった
2020/07/18(土) 12:04:26.22ID:Z+cMIoZ7
>>68
❤♡🤎🧡🤍🖤❤❣💟💜💚💛💙💗
&hearts; &#9825; &#10084;
2020/07/18(土) 12:35:48.94ID:xMoPei8m
>>69
きれい
75デフォルトの名無しさん
垢版 |
2020/07/18(土) 12:41:40.41ID:55gPHPOJ
>>71
どこらへんが問題なのかを言わないと次も同じ問題を起こす可能性がある
76デフォルトの名無しさん
垢版 |
2020/07/18(土) 12:45:26.81ID:55gPHPOJ
すぐに論破されることを言う奴って何が目的なんだろう
5chを見下してるのかもしれないな
こんなサイトみてる奴は大したことないって思ってるから油断して非論理的な発言をするのかと思った
2020/07/18(土) 13:00:12.87ID:Gf2oPXpD
どこに問題があるかなんて前スレでさんざん言われてただろ
あれで理解できないなら一生理解できないだろうね
2020/07/18(土) 13:01:12.49ID:n7a2F8Nj
>>75
たぶん問題が難しいか、手間がかかるからじゃないかな
79デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:06:42.15ID:55gPHPOJ
>>77
指摘された問題点はすべて返信していてその返信に対する返信はない
つまり指摘された問題点はすべて間違っていて問題点は見つかっていない
>>78
Pythonで20行弱で書けることは伝えている
となると難易度がこのスレの住人には高すぎたということか...
80デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:09:37.97ID:LD7t+FRX
イキり臭ただようコメントですね
81デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:14:16.81ID:LD7t+FRX
問題の良し悪しよりも出題者の態度が気に入らないから取り組まない人がいるんじゃないかな
自分の正当性を主張するだけではダメで回答者のモチベーションを上げる方向に導かないと
コミュニケーションが未熟なだけだと思いました
82デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:17:55.61ID:LD7t+FRX
線形拘束オートマトンでこの問題解いてみて!
線形拘束オートマトンはこういう仕組みで、こういうところでも活用できるから知ってると便利だよ!
みたいにポジティブアゲアゲでいかないと
83デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:20:22.31ID:55gPHPOJ
>>81
なるほどーそれは>>1に書いとくべきだな
皆んなから好かれる人の出題しか解答しませんよって
出題にも手間がかかるわけだからそういうのは普通に不誠実だと思う
2020/07/18(土) 13:21:40.49ID:n7a2F8Nj
>>83
落ち着けよ
お題に解答が全く付かないなんてよくあることだって
85デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:23:11.61ID:55gPHPOJ
>>82
仕組みというか解説は書けるなら書きたかったな
悩んだがそんなに難しくないと思ったから止めといた
86デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:02:48.54ID:LD7t+FRX
>>83
ルールとして決める必要はなくて
一般的なコミュニケーションのとり方としてレスポンスが欲しいなら
自分の正当性だけを主張するやり方だと難しいよってこと
自分がこんなに頑張って問題書いたんだ、答えがないのは不誠実だ、そんな自己中発揮してたらレスポンスなくて当然かと
87デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:06:16.09ID:LD7t+FRX
線形拘束オートマトンが実装できるってすごいことだから
模範解答示したら良いと思うよ
2020/07/18(土) 14:14:52.95ID:ICGznoJS
>>83
難度がうんぬんよりも問題文読んだ時点で作問者の頭が悪そう(使ってる言葉の意味わかってなさそう)って思ってスルーしたわ
ここのコテハンも同じ理由でスルー
ただ、面白そうなら気まぐれで解くこともある
解く方も出す方も好きにしたら良い
89デフォルトの名無しさん
垢版 |
2020/07/18(土) 14:36:05.17ID:55gPHPOJ
>>86
答えがないから不誠実なのではなくて
出題者に伝えておくべき情報が>>1に書かれていないのならそれは不誠実ということ

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

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

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

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

ハート形を生成できる式はいくつか知られているので、バリエーションを探ってみるのはいいかなと思います。
2020/07/19(日) 13:58:11.60ID:GV3E92FC
(1) https://gist.github.com/katahiromz/694763e2060d4a004452875bebc04ee3
二次元タートルグラフィックスで八角形を描けたよ。

お題: (1)と(2)のリンクを参考にコッホ曲線を描画せよ。

(2) http://www.f.waseda.jp/sakas/java/JavaGraphicsSample.html
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);
}
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の引数にもう一つの角度を追加し、追加した角度がゼロのとき、
変更前と同じ動作にせよ。

ヒント:四元数
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
2020/07/19(日) 21:17:44.37ID:T8vbWyFG
さて、解けた者は挙手したまえ。
2020/07/19(日) 21:45:13.46ID:h5vFOzT4
頭が悪いことがばれたからって
必死に数学の知識を見せようと頑張ってる

でも頭の悪さが随所に滲み出てる
自覚のないアホ
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);
}
2020/07/19(日) 21:57:24.56ID:5kiTFqsE
誰もイキらずに淡々と問題と答えのレスだけ並んでく雰囲気は良さを感じたけど
やっぱクソコテって怖いな
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ね。数学、スゴクデキルんでしょ?
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)だけ回転させる。
...(ここに何か書く)...
}
2020/07/19(日) 22:16:20.98ID:GV3E92FC
♪はい、コーディングいってみよー!

はいはいはい、はいはいはい!
2020/07/19(日) 23:32:08.26ID:T8vbWyFG
俺はそういう悪評トリックに引っ掛からないよ。間違いは的確に指摘頂きたい。
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
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
2020/07/20(月) 15:09:49.43ID:rHNryQzp
傾けた木が平面にならない。
https://github.com/katahiromz/3D
(4) https://github.com/katahiromz/3D/blob/master/4.html
https://twitter.com/katahiromz/status/1285093638557466624/photo/1
何でだろ。

https://github.com/katahiromz/3D からダウンロードして下さい。
お題: (4) を修正して木が平面になるようにせよ。
https://twitter.com/5chan_nel (5ch newer account)
125デフォルトの名無しさん
垢版 |
2020/07/20(月) 16:08:13.13ID:UHinuGOV
お題じゃなくて作成依頼ですか?w
2020/07/20(月) 16:16:33.54ID:6GFyBW1T
こういうのは数学が鬼ズバできる猛者に任せたい所だが。。。
報酬は出しちゃいかんのか。
2020/07/20(月) 17:25:48.10ID:uvZgkaZD
出ないならやらない
2020/07/20(月) 17:58:58.92ID:8mFfSXNu
いや、そういう猛者がいるところに依頼してこいよ
報酬出すんならランサーズとかにでも行ってこい
なんでここで話題にするんだ
2020/07/20(月) 17:59:50.36ID:8mFfSXNu
そういう意味不明な言動を繰り返すから糞コテ呼ばわりされるって気付いて
2020/07/20(月) 18:37:44.48ID:rHNryQzp
寺へ行きました。すみません。
2020/07/20(月) 23:40:32.05ID:5ka8Ymx5
>>124
なにこれ激重。1〜3はIEでも動くけど4はクロームでも少し時間かかる。
https://i.imgur.com/Kkti3xQ.gif
舞フレームごとに書き出してるんかな?
3Dオブジェクトコンテナにでも入れた方がいいのかな?
2020/07/20(月) 23:47:38.07ID:6GFyBW1T
やろうとしてるのは、三次元フラクタルと臓器の実体化だから、超複雑な図形を再帰で描くことになる。再帰が多ければ確かに計算量は爆発するよ。
2020/07/20(月) 23:52:17.88ID:/f9oEP+1
いい加減IE捨てろよ
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);
}
2020/07/20(月) 23:57:55.33ID:5ka8Ymx5
>>133
クロームより軽いから、捨てられなくて。。。
2020/07/21(火) 00:03:34.18ID:iLwMnecK
>>134
その事例についてはteratailに移動しましたので、ここでは打ち切りとさせて下さい。

https://teratail.com/questions/279115
2020/07/22(水) 22:25:22.87ID:ILXZvJ+B
「1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍」
…が、なんとなく成り立っているように感じられるプログラムを作って発表せよ。
2020/07/22(水) 22:30:15.48ID:IwIxQ1Ze
お題: ランダムな整数が格納された長さNの配列から、偶数の要素のみを抜き出せ
Nは任意とする
2020/07/22(水) 22:57:06.83ID:EawLE7Sy
>>138 Ruby

p gets.split.map(&:to_i).select(&:even?)
2020/07/23(木) 00:07:39.47ID:DuCdQo+y
>>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倍"



https://repl.it/@vip0/override-plus-1#main.rb
2020/07/23(木) 10:38:13.83ID:bJ7HfHNw
>>138 ocaml
https://ideone.com/qCUADD

>>138 octave
https://ideone.com/3xMvgA
2020/07/23(木) 22:03:16.45ID:VBywRp49
>>138 Perl5

@b = grep{$_ ^ 1} @a;
143デフォルトの名無しさん
垢版 |
2020/07/23(木) 23:12:54.26ID:QnunbgyT
>>138
Java
https://paiza.io/projects/BNpQRglb7E1lGKawVZRBCg
144デフォルトの名無しさん
垢版 |
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]
2020/07/24(金) 03:32:41.61ID:6ZonvnML
>>137
なんとなく結果を2進数(あるいは通常の10進数以外の表現)で出せば良いだけのような気がするが・・・

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

printf "%b\n", 1 + 1;
146デフォルトの名無しさん
垢版 |
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 なら読んだ直後の文法チェック時にエラーだと思う。
147デフォルトの名無しさん
垢版 |
2020/07/25(土) 07:02:03.31ID:j1aQFTSL
>>138Julia
a=1:10
a[iseven.(a)]
2020/07/25(土) 11:32:49.78ID:vIjhxGJs
大抵の言語でfilter modulo一発だよね。
お題www
149デフォルトの名無しさん
垢版 |
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は関数の外に置いた。
2020/07/26(日) 11:54:08.47ID:arqbmdN/
Haskellのコード見たいと思ってた
2020/07/26(日) 11:55:36.48ID:Lwmxod4b
流行らなかった訳が分かった
152デフォルトの名無しさん
垢版 |
2020/07/26(日) 12:16:01.64ID:yLhsD6tn
>>151
まあね。
安全なコードを書き易いと取るか、面倒くさいと取るかやね。
153デフォルトの名無しさん
垢版 |
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
154デフォルトの名無しさん
垢版 |
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]"
155デフォルトの名無しさん
垢版 |
2020/07/26(日) 17:41:12.51ID:1PJx+gwa
やっぱフラグしかないのか?
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"
}
157デフォルトの名無しさん
垢版 |
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]
158デフォルトの名無しさん
垢版 |
2020/07/29(水) 09:26:50.38ID:yJ6wpcWu
お題1
じゃんけんを実装してください
1 = ぐー
2 = ちょき
3 = ぱー

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

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

入力: 1 0.7
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです
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
2020/07/29(水) 23:09:16.98ID:tovqwAmw
下から5行目タイポ
puts odai2[2, 1] # => You: Chocky, Com: Parr. Win
2020/07/29(水) 23:11:53.00ID:z6Fnx3oM
Parr
出たか連続校正レス君
2020/07/29(水) 23:15:30.50ID:zhbinuHB
別にええやろ
2020/07/29(水) 23:42:09.78ID:hGtKVe2E
子ども国会で、グー、チョキ、パーのつづりを次のように閣議決定しました。

グーはgoo、
チョキはchoki、
パーはpar、
ジャンケンはJankenとする。
2020/07/30(木) 00:20:11.92ID:aEaasmNp
Unicode の \u270A \u270B \u270C
2020/07/30(木) 15:16:52.35ID:cH8Va6i2
自然数AとBがあります
A * B ではない方法で、AとBを掛けた結果を求めなさい。
ただし、AとBは4バイトの数値型で、どのような値が入ってきても
実施してからなるべく近い時間で計算終了する方が高得点とします。
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
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
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
2020/08/04(火) 03:43:27.41ID:DYgISIVe
お題: 文字列の格納された配列から重複した文字列を削除し昇順にソートせよ

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

['apple', 'banana', 'chikuwa']
2020/08/04(火) 03:55:23.60ID:gT//RRjC
>>169 Ruby
['apple', 'banana', 'apple', 'chikuwa'].uniq.sort #=> ["apple", "banana", "chikuwa"]
171デフォルトの名無しさん
垢版 |
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"
}
172デフォルトの名無しさん
垢版 |
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()
173デフォルトの名無しさん
垢版 |
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
174デフォルトの名無しさん
垢版 |
2020/08/04(火) 19:24:17.96ID:lImhU2CT
>>173
あーアホだったw
タブ消去の仕様だとPythonだと分けわからんことになるなw
↓貼り直した
http://codepad.org/BWRzr8fW
※会員未登録の為、一定期間後に自動消去
2020/08/04(火) 20:26:47.42ID:BW/Lg1/b
>>166
この魔法が気になる
2020/08/04(火) 20:33:41.16ID:pnjegpbT
>>175
奇数ならば最下位ビットが1であることを利用している。
177デフォルトの名無しさん
垢版 |
2020/08/04(火) 20:43:45.04ID:ZgraBKAX
筆算じゃないの

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

(2a' + 1)b = b + a' * (2b)
(2a') * b = a' * (2b)
181デフォルトの名無しさん
垢版 |
2020/08/04(火) 21:26:04.52ID:lImhU2CT
チューリングマシンを使って重くて複雑な乗算を再現して何の意味があるのかと思ってそうだな
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている
2020/08/04(火) 21:58:22.27ID:JHqDXk92
お題を出して解くスレで電子データは活かされていないとかどうでもいいんですが…
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ
2020/08/04(火) 22:11:15.82ID:02jYvMNw
片山博文MZ◆NveQN6OtcI
184デフォルトの名無しさん
垢版 |
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)
2020/08/05(水) 00:05:23.10ID:DlE2lfwB
書きたいけど寝たい
186デフォルトの名無しさん
垢版 |
2020/08/05(水) 02:29:32.18ID:prJIGLTT
>>175
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
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"
}
188デフォルトの名無しさん
垢版 |
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)

グラフをプロットしたらこのエラーが出ました。対処法を教えてください
2020/08/05(水) 12:05:51.48ID:DlE2lfwB
斬新なお題だなNEC-PCuserさん
190デフォルトの名無しさん
垢版 |
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を添付するか確認するように進言します
191デフォルトの名無しさん
垢版 |
2020/08/05(水) 14:35:10.99ID:xKYyZvTf
心電図装置に繋がってるデバイスが機能停止したんだろ
2020/08/05(水) 15:30:05.18ID:prJIGLTT
>>184
Kotlin
https://paiza.io/projects/cVm9G2FkQCosaGf9_fQz-Q

最初は割り算したり余り出したりしてやろうと思ったんだけど、よく考えたらこの場合はその計算は無駄な感じがしたので合計から引けたらその貨幣を出すのを繰り返すようにした。
193デフォルトの名無しさん
垢版 |
2020/08/05(水) 16:44:00.29ID:73CDpa/5
ふむ。コイン切れの対処もし易いな。
2020/08/05(水) 17:59:02.96ID:TWR5sasY
お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。

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

- 現在日時と「えさをやりました。」を出力する。
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);
}
196デフォルトの名無しさん
垢版 |
2020/08/05(水) 19:40:23.44ID:VitQNdTl
は、はやい・・・
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 # 表示確認用
198デフォルトの名無しさん
垢版 |
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 'えさをやりました。'
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 えさをやりました。'
2020/08/06(木) 18:50:53.87ID:mzjhTFla
お題: 現実世界でコイにえさをやるプログラム。

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

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

三菱やパナソニックは、、、破壊的イノベーションができない連中か。。。
2020/08/06(木) 21:16:15.64ID:mzjhTFla
IchigoJamというのもあるみたい。
2020/08/06(木) 21:29:05.63ID:8sSWlLgK
スレチ
◆QZaw55cn4c はうせろ
2020/08/06(木) 22:26:16.70ID:L4WiFaHt
>>215
突然、どうしたのですか?
2020/08/06(木) 22:38:17.00ID:8sSWlLgK
>>216
呼んでねえよハゲ消えろ
2020/08/06(木) 23:02:55.51ID:mzjhTFla
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。

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

水槽の中の金魚に、エサをやる装置とか
2020/08/07(金) 11:29:33.41ID:uQ4nbdFf
債務が多い
221デフォルトの名無しさん
垢版 |
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)
222デフォルトの名無しさん
垢版 |
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)
223デフォルトの名無しさん
垢版 |
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 いらなかった
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 )}"
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 )}"
2020/08/07(金) 16:23:53.54ID:uQ4nbdFf
<<=って演算子ほしいな
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)
2020/08/08(土) 00:04:29.62ID:b55CcwAR
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い

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

そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ
2020/08/08(土) 07:24:36.17ID:u/td9dv4
lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど
2020/08/08(土) 07:26:45.92ID:u/td9dv4
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど
231デフォルトの名無しさん
垢版 |
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
2020/08/08(土) 14:04:33.02ID:JvTsLjL+
>>221
Python3
https://ideone.com/6VvEbi

全然短くならなかったんだけど皆どういう脳みそしてるの
233デフォルトの名無しさん
垢版 |
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
オブ脳ならぬラムダ脳なんだろうなぁ
同値でグループ化、代表元でソート、出力、これを関数でやってる

それかワンライナーへの偏執的な愛
2020/08/08(土) 15:53:05.60ID:xsg1wzC9
>>221 Ruby

gets.split.group_by(&:upcase).sort.map{|_,v|$><<"(#{v*' '}) "}
2020/08/08(土) 16:11:32.49ID:yUCBpeXj
>>232
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
https://ideone.com/Tsio0O
236デフォルトの名無しさん
垢版 |
2020/08/08(土) 17:07:51.92ID:HH2BebFt
>>232
Pythonだとどうしても短くはならないな。
https://ideone.com/iFc6eL
groupbyのところは、defaultdictで書く方法もあるけど大差なし。
2020/08/08(土) 21:09:30.55ID:JvTsLjL+
>>233
Rubyの人もワンライナーだな
Rubyってショートコーディングに向いてるのかな?

>>235,232
なるほど
2020/08/08(土) 21:20:24.22ID:bf+w2Xl6
code golfなら基本はperlで、次点がRubyじゃないですかね
2020/08/08(土) 21:56:24.61ID:JvTsLjL+
>>238
そういうものなのね
240231
垢版 |
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"]
241231
垢版 |
2020/08/08(土) 22:54:29.83ID:b55CcwAR
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ

Python の内包表記みたいなのは、可読性が悪い
2020/08/08(土) 23:09:35.53ID:n6UBlQy6
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw
243デフォルトの名無しさん
垢版 |
2020/08/08(土) 23:14:07.63ID:ifN2bgU4
>>184
Java
https://paiza.io/projects/__QcFHuBny33chXSMMTA4Q
244デフォルトの名無しさん
垢版 |
2020/08/08(土) 23:32:15.70ID:ifN2bgU4
>>221
Java
https://paiza.io/projects/20JVV_t6hmPUha0B9AuKOA
2020/08/09(日) 00:17:54.90ID:/K790vfJ
javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな
2020/08/09(日) 00:41:46.15ID:uywZ9h5A
>>184
Python3
https://ideone.com/1aordC
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) + ") ");
}
}
}
248デフォルトの名無しさん
垢版 |
2020/08/09(日) 04:58:28.52ID:bQgrv4ZF
>>221
Kotlin
https://paiza.io/projects/zR3XGW4DaUAMXfqNq1oZ8A
249デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:07:42.42ID:HZ7sqguG
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる

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

入力: abcde deabc
出力: true

入力: abcde cdeba
出力: false
250デフォルトの名無しさん
垢版 |
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
251デフォルトの名無しさん
垢版 |
2020/08/09(日) 16:56:20.10ID:DzMx1xPb
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。
2020/08/09(日) 16:59:23.64ID:Uo9rXbdx
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?
253253
垢版 |
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)
254253
垢版 |
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
2020/08/09(日) 20:09:27.60ID:sb6ynJ/q
Jニキも披露してくれよ
2020/08/09(日) 22:00:05.82ID:BOQzPYI8
>>221 octave
https://ideone.com/qHkxnH

>>249 octave
https://ideone.com/oKqnrA
257253
垢版 |
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
2020/08/09(日) 22:40:05.17ID:/K790vfJ
octave文法好みだけど結構古い言語なんだな
259253
垢版 |
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)
260デフォルトの名無しさん
垢版 |
2020/08/09(日) 23:56:04.43ID:DzMx1xPb
Perlだとこの程度でも正規表現使わないといかんのか?
261253
垢版 |
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()) )))
262253
垢版 |
2020/08/10(月) 00:03:02.27ID:5Aj+dIHX
>>260
substrとかでも書ける
263253
垢版 |
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と一緒なんだよね
264253
垢版 |
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};
265253
垢版 |
2020/08/10(月) 01:58:56.02ID:5YDTUTIu
>>264 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;
2020/08/10(月) 02:53:12.35ID:JYoLJZbs
>>249 C
https://mevius.5ch.net/test/read.cgi/tech/1434079972/68
267デフォルトの名無しさん
垢版 |
2020/08/10(月) 05:44:26.44ID:SKFyjjt9
お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください

入力: https://github.com/pablojorge/brainfuck/blob/master/programs/hello.bf
出力: "Hello World!"
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!
2020/08/10(月) 08:49:26.47ID:OSJh6/O/
>>267 Ruby
https://ideone.com/A0JIsc
270デフォルトの名無しさん
垢版 |
2020/08/10(月) 17:10:10.24ID:Z7zFlWuQ
>>249
Kotlin

簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。

https://paiza.io/projects/TxupVLPTStBv7o1MiTuDEQ
271デフォルトの名無しさん
垢版 |
2020/08/10(月) 17:10:16.38ID:SKFyjjt9
>>267 C++
https://ideone.com/Lpmngq
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!
2020/08/10(月) 18:43:36.36ID:TsKVv45J
>>249
Python3
https://ideone.com/DvaLMh
274デフォルトの名無しさん
垢版 |
2020/08/10(月) 21:10:04.86ID:EfqLUS40
>>249 Python3
def f(a, b): return len(a) == len(b) and a in b + b
2020/08/10(月) 22:32:27.25ID:tDeKMBiv
>>249 c
https://ideone.com/BcT5su
276デフォルトの名無しさん
垢版 |
2020/08/10(月) 23:41:40.77ID:SKFyjjt9
>>249 C++
https://ideone.com/p6Y7W4
2020/08/10(月) 23:46:58.70ID:lJp+wmfa
bfってループの入れ子できたっけ?
2020/08/10(月) 23:47:11.22ID:SwBLGnEH
>>277
できる
279272
垢版 |
2020/08/11(火) 01:47:49.41ID:RwCZynCZ
>>267
Kotlin

これはインタープリタ版。

https://paiza.io/projects/J-pCgNSAEcATixwsNPmyGQ
2020/08/11(火) 01:50:50.24ID:RwCZynCZ
>>277
知らんけど >>279 は出来るように作った。
>>272 のやつはコンバータだが Kotlin が出来るので出来る。(というか出来ないように作る方が面倒かな?)
2020/08/11(火) 07:40:40.35ID:RSsrE9PW
>>249
>>273をリファクタリング
https://ideone.com/gR6WqL
282デフォルトの名無しさん
垢版 |
2020/08/11(火) 14:40:27.33ID:psN1NwFJ
こんなに暑いと座禅プログラムで涼みたい。
283デフォルトの名無しさん
垢版 |
2020/08/12(水) 10:55:20.81ID:WiVroiaz
警策を上から振り下ろす動作の機械を作り、そこにマイコンを接続。更に行ったり
来たりするルンバのようなものの上にそれを乗せ、そこにもマイコンを接続。
そのマイコンのコントロールプログラムを作成。
284デフォルトの名無しさん
垢版 |
2020/08/12(水) 11:07:50.98ID:WiVroiaz
既にこんなの作ってる人が居た。

座禅で動いたら棒で叩かれるやつを全自動化する
https://dailyportalz.jp/kiji/zazen-bou-automation
285デフォルトの名無しさん
垢版 |
2020/08/12(水) 16:50:07.72ID:xjprAYba
令和のコペルニクス
https://youtu.be/7DbdPKWhrpY
286デフォルトの名無しさん
垢版 |
2020/08/12(水) 19:58:36.03ID:j5y8ZKQl
お題
Brainfuckのの'+','-','.'の 3つの命令のみで
特定の文字列を表示するBrainfucの
ソースコードを生成するプログラム。
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)}*''

# =>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.+++++++..+++.[略]
2020/08/12(水) 23:55:21.87ID:WiVroiaz
差分出すっていうと ADPCM の圧縮を思い出すな。
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.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
--------.
+++.
------.
--------.
------------------------------------------------------.
$
2020/08/13(木) 01:49:54.11ID:CZu90IWX
>>286 Ruby
"Hello World!\n".codepoints.inject(''){|r,c| r << '+' * c + '.[-]' }
2020/08/13(木) 03:32:09.93ID:CZu90IWX
>>286 Ruby
"Hello World!\n".codepoints.map{|c| '+' * c + '.' }.join( '[-]' )
2020/08/13(木) 05:51:07.18ID:CZu90IWX
>>286
>>290,291 は出題条件の「'+','-','.'の 3つの命令のみ」を忘れてましたご免なさい
2020/08/13(木) 06:48:39.25ID:9ZM4Lmsz
>>286 Ruby

gets.each_char{|c|d=$.-$.=c.ord;$><<(d<0? ?+*-d:?-*d)+?.}
294デフォルトの名無しさん
垢版 |
2020/08/13(木) 12:37:03.85ID:8zEuDtsy
なるほどbrainfuckでは[-]で現在指してるメモリの値を0クリアできるのか
2020/08/14(金) 01:20:11.50ID:CuxcYYZ5
お題:変数a, b, cを32ビット符号付き整数の最大値で初期化、または代入せよ。

octave
https://ideone.com/62dSzC

ada95
https://ideone.com/26IGLZ
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
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
2020/08/14(金) 08:01:01.07ID:sgFs/qSh
>>295 JavaScript
a=b=c=-1>>>1
299デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:17:19.00ID:jifd8sPx
>>295 C++
int32_t max = 1 << 31;
int32_t min = ~max;
300デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:18:37.41ID:jifd8sPx
あ maxとminが逆だった
301デフォルトの名無しさん
垢版 |
2020/08/14(金) 08:20:39.60ID:jifd8sPx
しかもお題と関係ない スマソ
2020/08/14(金) 08:21:04.21ID:hpI++Bi7
>>295 Python では整数に制限がないからnumpyで、

import numpy as np
a=b=c=np.iinfo(np.int32).max
303デフォルトの名無しさん
垢版 |
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;
}
304デフォルトの名無しさん
垢版 |
2020/08/14(金) 09:05:58.49ID:jifd8sPx
const auto [a, b, c] = std::tie(max, max, max);
これだけでよかったorz
305デフォルトの名無しさん
垢版 |
2020/08/14(金) 14:02:54.65ID:9qHjnK+i
お題:任意文字列を含むビットコインアドレスを生成するスクリプト

BitCoinDescriptionAddress

1BitCoinDescriptionAddressadTvGDH
306デフォルトの名無しさん
垢版 |
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 が代入される。

まあしかしこのような形式でまとめて複数の変数を初期化をするのは変数が多くなればなるほど
見辛くなってどれがどれに代入されるか分かり辛くなるのであまりお勧めする気は起きない。
307295
垢版 |
2020/08/15(土) 17:28:56.25ID:nnj+MvqH
>>295 octave
https://ideone.com/FgfsWd
単に[a, b, c] = deal(intmax)でよかった
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
2020/08/15(土) 18:04:12.38ID:WnA8LB9O
>>308 Ruby

[*1..gets.to_i].permutation{|a| puts a*' '}
2020/08/15(土) 18:07:06.59ID:nnj+MvqH
>>308 octave
https://ideone.com/dC1LGs
f = @(n) perms(1:n);
f(3)
2020/08/15(土) 19:24:16.43ID:4GsEJ4Sf
お題
HTMLドキュメントをwebブラウアザ上に表示するプログラムを作りなさい。

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

Hello World!
2020/08/15(土) 20:07:59.51ID:nR02Shr3
お題: 整数の0,1を真偽値のfalse,trueに変換しなさい
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
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
{} : {}
315314
垢版 |
2020/08/15(土) 20:37:12.09ID:BUqVCKAW
>>314
0 : false
が一行余分に付いてしまった
2020/08/15(土) 20:49:55.10ID:WnA8LB9O
>>312 Ruby

n.nonzero?
2020/08/15(土) 20:59:34.51ID:nnj+MvqH
>>312 ocaml
https://ideone.com/nSKbMo
let f = function 0 -> false | 1 -> true
let () = Printf.printf "%B %B" (f 0) (f 1)

>>312 c++
https://ideone.com/Dm4QrP
#include <iostream>
#include <iomanip>
int main() {
std::cout << std::boolalpha << 0 << !!0 << 1 << !!1 << std::endl;
return 0;
}
2020/08/15(土) 21:22:21.80ID:v9cGseLQ
>>312
0, 1以外の時の挙動が書いてない
単体テストできねーだろ、やり直し!
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 がその他の型だとコンパイルエラー。
2020/08/16(日) 02:10:15.75ID:aQEvXwVj
>>308 C
https://ideone.com/1EStFG
321デフォルトの名無しさん
垢版 |
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))])
322デフォルトの名無しさん
垢版 |
2020/08/16(日) 11:17:36.83ID:x8ZjthFZ
>>308 C++
https://ideone.com/vnmcwl
323デフォルトの名無しさん
垢版 |
2020/08/16(日) 19:28:34.07ID:Stgr85a5
>>308
Kotlin
https://paiza.io/projects/m-rh9LUdWqgBDV_7xXtTdA

なんとなく以前作ったような気もするがまた作った。
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).
2020/08/16(日) 19:47:13.56ID:WQRWSQYc
>>324
ほんとクソだなお前
なんで数と区間が何の説明もなく比較可能な状態になってんだよ
教養レベルの位相と集合の知識身に付けてから出直せハゲ
2020/08/16(日) 19:54:55.84ID:GwA/W8AI
>>325
入力の計算式において単一の数は同等の閉区間と見なすことにする。
2 → [2, 2].
2020/08/16(日) 19:59:26.75ID:WQRWSQYc
>>326
任意の区間に対してどのように順序を定義して全順序集合を構成するのか考えてから言えよクソ雑魚が
2020/08/16(日) 20:01:44.11ID:5GlLVozn
そもそも 2 と [2, 2] が同じだと思ってる時点でやばいよ
ペアノ系で 0 = 1 って言ってるようなもんだぞ
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)].
2020/08/16(日) 20:11:24.43ID:WQRWSQYc
>>329
順序の定義しろっつってんだろクソが
「(1, [2, 3))」かつ「対の最初の要素は対の最後の要素以下とする」って言ってるってことは
[1, 1] <= [2, 3) なんだろ?
任意の区間の間で矛盾なく順序を定義しろや
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]の論理値は不定とし、実行時エラーを発生させる。
2020/08/16(日) 20:32:34.77ID:WQRWSQYc
>>331
完全律すら成り立たない順序ってなんだよ
「カッコの入れ子はややこしい」とかそういうレベルじゃねえんだよ

だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
お前群論なめてんのか
2020/08/16(日) 20:34:23.06ID:1lLvvYB6
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね
2020/08/16(日) 20:50:12.97ID:5EzRC1Sr
>>331
死ねカス
2020/08/16(日) 20:54:18.06ID:GwA/W8AI
>>332

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

[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。
2020/08/16(日) 20:57:11.13ID:rY4w2Ca/
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ
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

矛盾
死ね
消えろ
2020/08/16(日) 21:16:32.00ID:GwA/W8AI
>>337
0 < a < bのときは、[-a, -b]は定義されない。
2020/08/16(日) 21:29:26.85ID:WQRWSQYc
>>338
順序の定義が矛盾してるんだから[-a, -b]は定義可能であっても良い
本当頭わりいな
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
流石にひどいって
2020/08/16(日) 21:48:28.85ID:GwA/W8AI
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則
2020/08/16(日) 22:04:28.19ID:GwA/W8AI
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。

すみません、取り下げます。
2020/08/16(日) 22:08:12.76ID:WQRWSQYc
>>342
それ以前の問題だっつーのアホ
任意の数 a, b に対して容易に a = b が成立するクソ
2020/08/16(日) 22:16:18.77ID:UYHP6Cr3
問題を解くスキル<<<<<解ける問題を作るスキル
だったりするかも
345デフォルトの名無しさん
垢版 |
2020/08/16(日) 22:26:48.34ID:Nztll5gc
>>308
Java
https://paiza.io/projects/mS3LllUfo8J5zcCeI_m8qQ
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].
2020/08/16(日) 22:58:27.46ID:bYLilpPQ
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない

かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが
2020/08/16(日) 23:34:04.85ID:kJzMyvlv
>>308 C
https://ideone.com/wbwxg3
349253
垢版 |
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])
350デフォルトの名無しさん
垢版 |
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
2020/08/17(月) 06:10:10.64ID:sRZ0bbBO
>>346
消えろカス
2020/08/17(月) 08:34:59.13ID:4e6PsksO
>>351
お前うざいよ
2020/08/17(月) 09:10:13.06ID:CGaaR/Ic
どうすればいいか?ってのがよくわからない
2020/08/17(月) 09:11:51.56ID:CGaaR/Ic
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?
355デフォルトの名無しさん
垢版 |
2020/08/17(月) 11:17:26.81ID:2KNIyB/f
ブルートフォースアタックしか思い浮かばない。
356デフォルトの名無しさん
垢版 |
2020/08/17(月) 18:12:59.56ID:Nup7rIuH
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる
357デフォルトの名無しさん
垢版 |
2020/08/17(月) 19:37:06.53ID:4e6PsksO
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん
2020/08/17(月) 19:45:01.16ID:Nup7rIuH0
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう
2020/08/17(月) 22:43:06.44ID:sRZ0bbBO
>>352
お前がうぜえよ死ね
360デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:47:24.50ID:4e6PsksO
>>359
お前が死ね
2020/08/17(月) 22:50:53.21ID:3fwftKf8
よし俺がしぬよ
2020/08/17(月) 22:53:16.60ID:UMcd904E
夏だなあ
363デフォルトの名無しさん
垢版 |
2020/08/17(月) 22:56:52.65ID:4e6PsksO
>>361
じゃあ俺が死ぬよ
2020/08/17(月) 22:57:17.04ID:3fwftKf8
お題: 『死』を表現せよ
2020/08/17(月) 22:57:32.35ID:3fwftKf8
>>363
どうぞうどうぞ
2020/08/17(月) 22:58:07.77ID:sRZ0bbBO
>>363
じゃあ死ねよ
367デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:20.89ID:4e6PsksO
>>366
全然おもんないやんけ
もう一回チャンスをやろう
368デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:35.92ID:4e6PsksO
じゃあ俺が死ぬよ
369デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:05:59.92ID:4e6PsksO
くるよくるよ
370デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:06:13.27ID:4e6PsksO
ドキドキ
371デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:35.54ID:4e6PsksO
逃げたか
372デフォルトの名無しさん
垢版 |
2020/08/17(月) 23:39:58.23ID:4e6PsksO
笑いから逃げるな
2020/08/18(火) 00:15:03.77ID:/+dAg+CW
お題: 二人の煽り耐性から「死ね」と言い合うプログラム

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

> 0.1 0.8
A「死ね」
B「死ね」
A「死ね」
2020/08/18(火) 01:25:39.14ID:IZwRntbA
if (>>373{A}%3 ==0.1&&0.8<<373{B}) print "オモロー" & "アキラ" *100% ;
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
376デフォルトの名無しさん
垢版 |
2020/08/19(水) 16:18:46.79ID:ltFkDVN7
>>364

#!/bin/sh
rm $0
2020/08/19(水) 18:40:23.70ID:d4bqPFA7
「生」の読みはたくさんあるのに、
「死」の読みはひとつだけ。
示唆に富んでいる。
378デフォルトの名無しさん
垢版 |
2020/08/19(水) 18:45:07.34ID:OrygHj4v
略して示唆トン。
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]
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
381デフォルトの名無しさん
垢版 |
2020/08/24(月) 04:30:51.55ID:qrCNAVcy
>>380 C++
https://ideone.com/Omaaxj
2020/08/24(月) 11:49:18.16ID:2DIU31aQ
>>380 C++
https://wandbox.org/permlink/H36ha1xPEFeE4KXQ
2020/08/29(土) 20:44:46.53ID:GYyhmMZY
お題: ロシアンルーレット。

リボルバーを回しますか? (Y/n) Y
1回目: 不発
リボルバーを回しますか? (Y/n) Y
2回目: 不発
リボルバーを回しますか? (Y/n) n
3回目: バーン!
384デフォルトの名無しさん
垢版 |
2020/08/29(土) 21:04:26.78ID:KxRf/0sH
>>383
仕様がわからない
2020/08/29(土) 21:07:51.24ID:GYyhmMZY
ロシアンルーレット
https://ja.m.wikipedia.org/wiki/%E3%83%AD%E3%82%B7%E3%82%A2%E3%83%B3%E3%83%AB%E3%83%BC%E3%83%AC%E3%83%83%E3%83%88

回転式拳銃(リボルバー)
https://ja.m.wikipedia.org/wiki/%E5%9B%9E%E8%BB%A2%E5%BC%8F%E6%8B%B3%E9%8A%83
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回目: バーン!
あなたの負けです。
2020/08/29(土) 22:00:32.12ID:GYyhmMZY
えっ、拳銃見たことないの?
2020/08/29(土) 22:14:20.91ID:bYj4gZFd
銃の弾数と空砲/実包の割合とか
オートマとリボルバーどっちかとか特定してからにしてくれ
2020/08/29(土) 22:51:06.10ID:yG/yQHuO
jsインタラクティブ入力に弱い
390デフォルトの名無しさん
垢版 |
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
}
2020/08/29(土) 23:34:19.24ID:2f/XylsB
VSCode の拡張機能、Quokka.js を使えば?
変数を書くだけで、内容が表示される

var a = 1
a // 1 と表示される
2020/08/29(土) 23:41:03.13ID:yG/yQHuO
swift playgroundとかjestのinlineSnapshotみたいな感じか
使うときがあるか微妙
393デフォルトの名無しさん
垢版 |
2020/08/30(日) 01:02:17.18ID:xjthqQ7x
お題
nを受け取って1からnまでインクリメントされた配列を返してください
インクリメントするごとに値の数だけ配列に値を追加してください


入力: 1
出力: [1]

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

例:
>> split('abc:def:ghi', ':')
>> ['abc', 'def', 'ghi']
396デフォルトの名無しさん
垢版 |
2020/08/30(日) 08:02:58.80ID:Ui9A3dkW
>>393 J
f =: #~ @: >: @ i.
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"]
2020/08/30(日) 09:41:22.98ID:ka/TVb/i
>>393 octave
https://ideone.com/wQ0EMk
f = @(n) repelem(1:n, 1:n);
f(3)
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))
}
2020/08/30(日) 17:51:57.01ID:9TpSDH8X
>>395 octave
f = @(s, d) arrayfun(@(b, e) {s(b:e)}, [1 find(s == d) + 1], [find(s == d) - 1 numel(s)]);
f('abc:def:ghi', ':')
401400
垢版 |
2020/08/30(日) 18:29:58.33ID:9TpSDH8X
一応url
https://ideone.com/Ni9DPI
402デフォルトの名無しさん
垢版 |
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' ]
ずるいしダブルクォート対応できてないけど思いつき
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"]
404デフォルトの名無しさん
垢版 |
2020/08/30(日) 19:55:11.73ID:OKCM85cL
>> 393 C++
https://ideone.com/ztBnmn

>> 394 C++
https://ideone.com/8YhzWh
合ってるか分からない
(とりあえずバブルソートが安定だからそれと比較した)

>> 395 C++
https://ideone.com/lmYLkx
2020/08/30(日) 23:05:46.03ID:HaB2mhSL
>>393 C++
https://wandbox.org/permlink/LxzMc7UHa1lbhcX1

コンパイル時にできる
406デフォルトの名無しさん
垢版 |
2020/08/30(日) 23:23:11.11ID:OKCM85cL
operator[]がconstexprなのはC++17以降らしいね
407デフォルトの名無しさん
垢版 |
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
408デフォルトの名無しさん
垢版 |
2020/08/31(月) 08:12:50.04ID:o+KAewBM
>>393 Ruby
def f(n)
(1..n).map{|v| [v]*v}.flatten
end
2020/08/31(月) 09:50:22.54ID:3l02ZOhc
>>396
何やってんのか分かんねぇ…
2020/08/31(月) 12:53:04.32ID:DeTlQxvW
f#(@:m:@ )顔文字にしか見えん
411デフォルトの名無しさん
垢版 |
2020/08/31(月) 13:15:43.55ID:0jcGZySh
\(._. \)
2020/08/31(月) 13:37:09.03ID:tSOV4fJk
お題: 覆面算パズルをランダムに自動生成せよ。

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

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

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

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

BASE+BALL=GAMES
→7483+7455=14938.
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]
2020/08/31(月) 16:10:16.99ID:lWn/zYPT
>>413, >>412の順に解いてね。

ヒント要る?
2020/08/31(月) 16:12:08.02ID:lWn/zYPT
ヒント: 各文字を変数とした連立方程式。
2020/08/31(月) 16:24:48.19ID:lWn/zYPT
文字の数が少ないんだから、ブルートフォースでも解けるか。。。
2020/08/31(月) 18:26:24.52ID:qQr3mFGF
間違えてなければO(10!)のはずだから充分多いのでは
2020/08/31(月) 18:26:56.47ID:qQr3mFGF
ごめん10!はめちゃくちゃ小さかった
2020/08/31(月) 18:43:24.02ID:hr5jjNmH
この手の問題は総当りしたほうが速いことすらある
2020/08/31(月) 19:18:49.49ID:J48xi6fS
しかもとっさにcombination用意できなければ(vimなどで)for文10個書いたほうが早いまである
422デフォルトの名無しさん
垢版 |
2020/08/31(月) 19:23:55.64ID:fdwPQ6pV
覆面算を制約論理プログラム iZ-Cを使って解きます。の記事があります。
https://sunasunax.hatenablog.com
423デフォルトの名無しさん
垢版 |
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
424253
垢版 |
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
425253
垢版 |
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
2020/08/31(月) 23:33:38.47ID:0jcGZySh
>>393
Kotlin
https://paiza.io/projects/A_eQfaut9aEoIRjfwbkN8Q
2020/09/01(火) 00:01:02.40ID:1mY8ta+4
>>393
C
https://paiza.io/projects/wwsivStn5Eq4vN7-XA5ShQ
2020/09/01(火) 00:18:24.24ID:vTrOzHSW
>>393
python
lambda x: [int(i) for i in "".join(f"{y}"*y for y in range(1,x+1))]
429デフォルトの名無しさん
垢版 |
2020/09/01(火) 14:16:37.60ID:3qKfeSqF
全く知らない構文の言語でカンでいじっても構文エラーも止められずに
動かない機械ガチャガチャしてるだけ感すごいよな
2020/09/01(火) 18:47:08.83ID:4meeAMMW
お題: テキストファイル「input.txt」の中の" dot "を"."に置換し、さらに" at "を"@"に置換したときに、RFCに従ったメールアドレスになる部分文字列を抽出し、そのメールアドレスのリストを改行区切りで出力せよ。
431デフォルトの名無しさん
垢版 |
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
432デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:48:39.88ID:PZXbhIm5
>>430
テスト用のinput.txtちょーだい!
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
まあ、いろいろあるっしょ。」
434デフォルトの名無しさん
垢版 |
2020/09/01(火) 18:57:45.00ID:PZXbhIm5
>>433
あざーす!
2020/09/01(火) 19:10:04.73ID:y/wdSyKD
>>430
Mail::RFC822::Address: regexp-based address validatio
http://www.ex-parrot.com/~pdw/Mail-RFC822-Address.html
2020/09/01(火) 20:18:24.49ID:4meeAMMW
ヒント: 文字列置換と正規表現
437デフォルトの名無しさん
垢版 |
2020/09/01(火) 22:43:25.27ID:PZXbhIm5
>>430
Java
https://paiza.io/projects/50iQ0JnPk_R404qr8Db80w
438デフォルトの名無しさん
垢版 |
2020/09/01(火) 22:55:31.34ID:PZXbhIm5
>>393
Java
https://paiza.io/projects/qDtcIJeOUdsMkEIxaXEf9w
439253
垢版 |
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]
440デフォルトの名無しさん
垢版 |
2020/09/02(水) 23:08:34.85ID:KTyhBksd
>>394
Java
https://paiza.io/projects/PGljCEpf6PlEcYw0xzNBVQ
441デフォルトの名無しさん
垢版 |
2020/09/02(水) 23:31:10.43ID:KTyhBksd
>>395
Java
https://paiza.io/projects/nGioH2f50H9y8EHZkISTOg
442デフォルトの名無しさん
垢版 |
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"]
2020/09/03(木) 19:41:51.27ID:0EoV326K
お題: バイナリファイルを読み込んで各バイトの各ビットについて、上位ビットから順に、ゼロをシフトJISの半角カナの「タ」に、いち(1)を同じくの「ヒ」に変換する変換器。
2020/09/03(木) 19:46:20.91ID:0EoV326K
>>443
追記。逆変換器も作って動作することを確認せよ。
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
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 ']'
447253
垢版 |
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
ヒタヒヒタヒヒヒヒタタヒヒタヒタヒタタヒタタヒヒヒタタヒタタヒヒヒタタヒタタタタヒヒタヒヒヒヒヒヒタタタヒタタタヒタタヒタタタタヒタタタヒヒタヒヒタタヒヒタヒヒ
448デフォルトの名無しさん
垢版 |
2020/09/04(金) 00:03:39.28ID:0wfgbo8M
>>444
Java
https://paiza.io/projects/w8Q5NbodI6iRfjcBWA1Nqg
449253
垢版 |
2020/09/04(金) 00:04:27.06ID:gbrpP/bR
>>447
>>444 逆変換機もか…忘れてた
まいいや
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
451デフォルトの名無しさん
垢版 |
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
452253
垢版 |
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
453デフォルトの名無しさん
垢版 |
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
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
2020/09/05(土) 15:55:10.03ID:gCThzAly
前回のお題はC++の方からしか回答を頂けなかったので、他の言語の方も考えていただけると嬉しいです
2020/09/05(土) 17:01:13.99ID:4vfoT7Xn
Tが10^5のそれぞれのマスにいたときの点数を求める(客がいた場合1、いなかったら0)
Tが10^5-1のときのマスの点数を求める(そこに客がいたなら1、いなかったら0
更にそこから次の時間に移動可能なマスの最大の点数のものを加える)
Tが1までくり返す
これで良さそうな気がするけど書くのがめんどくさい
2020/09/05(土) 17:35:24.39ID:s0GYNWbk
>>453
「この文字列の文字数を求める」んじゃないの?
バイト数だったらUTF-8だろうがSJISだろうが関係なく,
バイトの個数を数えればいいだけになってしまうが……。
458デフォルトの名無しさん
垢版 |
2020/09/05(土) 18:43:21.60ID:EHHCviTW
文字コードまわりの難しさにぶつかったことないから何が何やら
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
460デフォルトの名無しさん
垢版 |
2020/09/05(土) 19:47:45.16ID:EHHCviTW
普通に処理系がchar配列にしたときサイズを入れてくれるからそれでわかっちゃうw
461453
垢版 |
2020/09/05(土) 21:41:42.84ID:dAk5cbFF
書いてある条件だけで、求めて下さい!

他の方法では、簡単すぎるので
2020/09/05(土) 21:46:41.80ID:qef5ttAc
それだったら宿題スレで頼みなよ
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文字列を扱えるとは既定されていないので今回の目的には適さない。
2020/09/05(土) 22:25:44.48ID:s0GYNWbk
>>454
これ結構難しい。
まず普通に算法を考える段階で行き詰まってるw
頭悪いな〜
2020/09/05(土) 22:49:41.81ID:BjVkDMA6
>>454 C
https://ideone.com/X5mYh3
466253
垢版 |
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
467253
垢版 |
2020/09/06(日) 00:30:27.55ID:WEZ/j7UH
>>466
今思うとエッジの表現は無向ではなく二重の有効グラフにしたほうが簡潔なコードになったかもしれない
まぁいいや…二度書く気は起きない…
468デフォルトの名無しさん
垢版 |
2020/09/06(日) 00:34:53.48ID:T9SJW9BR
>>395
Kotlin
https://paiza.io/projects/N9X2CVAQj3NJ0RXPrk7i0g

区切りは文字列で指定出来るとか、大文字小文字無視とか、最大分割数を決められるだとか、色々と機能を追加してしまった。
469デフォルトの名無しさん
垢版 |
2020/09/06(日) 03:34:19.13ID:0eLnTbkJ
お題
4999の逆数を小数点 以下48桁まで求める。
2020/09/06(日) 07:27:16.04ID:+WaXk/Ri
>>469 例外だけどbcコマンド
scale=48
1/4999
.000200040008001600320064012802560512102420484096
2020/09/06(日) 08:14:24.88ID:CxoRMtYI
>>469 Ruby

puts ('%0.49f' % (1r/4999)).chop

# => 0.000200040008001600320064012802560512102420484096
472デフォルトの名無しさん
垢版 |
2020/09/06(日) 09:37:57.61ID:yqdZF37w
>>453 C++
https://ideone.com/uulTGM
2020/09/06(日) 10:17:30.08ID:uXWEOXeO
>>454 C++
https://wandbox.org/permlink/TMrsTWgUWvzHktjh
2020/09/06(日) 10:30:03.37ID:r+7yP+3C
>>465
>>466
これって二つとも総当たりで解いてる?
そうすると最悪3^(10^5)くらいの回数廻さないといけなくない?
475デフォルトの名無しさん
垢版 |
2020/09/06(日) 10:58:30.52ID:5MBR0P77
1京くらいのループで解けるなら実用性はかろうじてある
競技性は無い
2020/09/06(日) 11:04:38.70ID:OF7UMaiS
最悪でも2^n組みしかなくね
2020/09/06(日) 11:07:12.07ID:uXWEOXeO
>>465 はlast_time(10^5)回のループの中でCOL(10)回ループ入れてるし、10^6では?
2020/09/06(日) 11:29:22.40ID:r+7yP+3C
>>476
いや,総当たりなら,3^(10^5)。
時刻が1--10^5までの間に,
「留まる」「右/左に移動する」の計3通りを
互いに独立に(以前の行動に影響されずに)
行うから。

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

>>466>>380への回答なので
その計算量の推定議論には該当しません
2020/09/06(日) 12:31:12.27ID:OF7UMaiS
>>478
1人が満足することで1点得るとする
点数の最大値は入力されたnの数しかないからn点で
それぞれについて1点得るか得ないかの2^nしかない
あとはそれを実現できるか移動があるかどうかが焦点になる
なので全移動経路を総当りする必要性はない
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
2020/09/06(日) 13:48:19.34ID:r+7yP+3C
>>480
I see! Thanks.
2020/09/06(日) 15:12:48.21ID:JPL9qi8o
>>480
2^nも必要ないよ
それぞれの時刻でホストが取れる状態はどのマスにいるかということだけ
だから時刻xマスの数が全状態数
2020/09/06(日) 15:20:10.24ID:JPL9qi8o
でその状態数の方が全経路数より圧倒的に少ないので
経路に沿ってではなくて状態について解いていく
485デフォルトの名無しさん
垢版 |
2020/09/06(日) 16:31:54.76ID:SNogxihD
>>469
Java
https://paiza.io/projects/h9FWf0PGwBt60EOR_U48YA
2020/09/06(日) 16:34:17.02ID:r+7yP+3C
>>483
ん?
ホストは隣合うマスにしか移動できないから,
単純にその場面での状態を考えるだけでは駄目なんでは?
2020/09/06(日) 16:57:26.53ID:JPL9qi8o
だから遡って計算していくときは隣り合うマスの結果しか参照しないよ
488デフォルトの名無しさん
垢版 |
2020/09/06(日) 17:01:50.06ID:SNogxihD
>>453
Java
https://paiza.io/projects/IpbujQ_C5ZYHEAYAbnRtzQ
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--){
こうするのが正しいと思う
490253
垢版 |
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
2020/09/06(日) 18:12:25.67ID:OF7UMaiS
>>454
python
https://ideone.com/5qz7G8
満足させる人数の多い順から実現可能か探索する
既に不可能だと分かっている移動が含まれる場合は直ちに打ち切る
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)
493253
垢版 |
2020/09/06(日) 18:20:26.24ID:EhLQImvS
>>492
はい、バグってました。投稿してから気がついた
時間あったら直します
494253
垢版 |
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
495253
垢版 |
2020/09/06(日) 19:13:46.76ID:EhLQImvS
>>494 誤記スマソ
× >>489 のBug Fix
>>490 のBug Fix
496465
垢版 |
2020/09/06(日) 20:59:44.84ID:I1QXsub5
>>489
ご指摘の通りバグってたので再投稿します。
https://ideone.com/VxDLwz

やりたかったことは>>456が言っていることと全く同じです。
イメージとしてはhttps://imgur.com/j0azhSf.jpg (※お題を考えたい人は閲覧注意)
>>465のコードは大抵の場合なぜかうまくいくコードのようです。
497253
垢版 |
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);
498253
垢版 |
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
499253
垢版 |
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
500453
垢版 |
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バイト
501デフォルトの名無しさん
垢版 |
2020/09/08(火) 22:13:29.34ID:r41CjiKh
>>169
Java
https://paiza.io/projects/PnHRZftzs0HY5QfVuWDFxQ
502253
垢版 |
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])
}
503253
垢版 |
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
504253
垢版 |
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
505253
垢版 |
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が大きいと大勢に影響はないな…
506デフォルトの名無しさん
垢版 |
2020/09/10(木) 01:27:25.37ID:8z9ZctT6
>>350
Java
https://paiza.io/projects/o_tTbIG0iHXwP75rs5ayzQ
507453
垢版 |
2020/09/10(木) 16:14:51.93ID:ypm5ktrY
お題

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

129 130
120 169
240 159 146 206 184
508デフォルトの名無しさん
垢版 |
2020/09/10(木) 22:23:57.36ID:8z9ZctT6
>>507
Java
https://paiza.io/projects/CZXrL_xceE8JIzpnqc9uCA
2020/09/12(土) 21:24:36.97ID:2KEhs3KT
お題:自然数nが現れる九九の表の最小サイズを求めよ

octave
https://ideone.com/JyIBOD
510デフォルトの名無しさん
垢版 |
2020/09/13(日) 00:20:13.60ID:OR+CcCGz
>>509
Java
https://paiza.io/projects/brUcg8fsPPrD3ERaUkVOUA
511デフォルトの名無しさん
垢版 |
2020/09/13(日) 00:35:46.34ID:42xWDo9L
>>509
Kotlin
https://paiza.io/projects/SEi0xU2p5t0WDBvQdAUh3A

良いアルゴリズムが思いつかなかったのでほとんど力技。
2020/09/13(日) 22:12:25.49ID:p9JSm0uj
お題: 「ジャンケンすたじあむ オンライン」というソーシャルゲームのウェブサイト、もしくはソフトウェアパッケージを制作・運営せよ。

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

ジャンケン試合は2人組になり、お互いに出す手を事前に申告し、両者が申告したところでシステムが自動で勝敗を判定する。
2020/09/13(日) 22:17:50.99ID:phcl8RYj
>>512
消えろ
514デフォルトの名無しさん
垢版 |
2020/09/13(日) 22:22:25.86ID:lu6eiMc4
動的計画法ってちゃんと勉強しないとなかなか思いつかないよな
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]]
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」を出力せよ。
517デフォルトの名無しさん
垢版 |
2020/09/14(月) 17:05:19.85ID:xV8mpaUY
エンジニアが書いてるならシークワーサだな
間違いない
2020/09/14(月) 17:29:10.23ID:yesAwSRz
>>516 input.txtの中身:

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

任意の桁数の10進整数を扱えること。
任意の有効桁数の10進小数を扱えること(10進浮動小数点数)。
加減乗除、剰余、任意桁での切り捨て・切り上げ・四捨五入が可能。
10進数表記で入出力できること。
比較的高速に演算できること。
2020/09/14(月) 20:55:28.62ID:/Fwk/gkb
1÷3をどう扱うかという問題があるようだ。
522デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:04:18.95ID:I0h6BMX6
割り算するときに桁数していするだけっしょ
523デフォルトの名無しさん
垢版 |
2020/09/14(月) 21:07:19.27ID:I0h6BMX6
蟻人間さんにお題:銀行丸めを整数型のみを使用して実装してください
2020/09/14(月) 21:08:24.84ID:SHGAz9ig
>>517
2020/09/14(月) 21:24:52.09ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
2020/09/14(月) 21:26:17.95ID:6FD493+N
昔から思っているんだけど、分数で持っていて最後に一回だけ割り算するんじゃなんでいけないのかな?
2020/09/14(月) 21:49:38.28ID:SHGAz9ig
分子や分母に分数が入ってきた場合
精度の面で面倒なことになるぞ
2020/09/14(月) 23:12:41.48ID:yesAwSRz
>>523

https://ideone.com/sRja3A
今日はここまで。
2020/09/14(月) 23:41:27.65ID:5nyvo7WN
>>528
一生ここまでにしろ
530デフォルトの名無しさん
垢版 |
2020/09/15(火) 00:21:13.43ID:2J2Mo0F/
>>516

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

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

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

残りは四捨五入とか銀行丸めなどの端数処理。
2020/09/15(火) 09:10:08.88ID:gc4PCUOV
工エエェェ(´д`)ェェエエ工
2020/09/15(火) 14:07:27.97ID:2J2Mo0F/
bc コマンド使えば良い。
他の言語から使いたい場合はライブラリをリンクするか、またはこっそり裏で fork(), exec() してパイプで繋いで計算させるw
2020/09/15(火) 21:40:23.58ID:9dtbuAF3
>>528
https://github.com/katahiromz/Currency
今日はここまで。足し算、引き算、掛け算を実装。
銀行丸めはもうちょっと待ってね。
2020/09/15(火) 21:59:54.94ID:ky+PawN1
>>534
誰も待ってないから一生滞ってろ
2020/09/15(火) 22:50:58.78ID:i370J0Ri
>>535
スレチ
2020/09/15(火) 22:54:46.37ID:i370J0Ri
>>535
とりあえずまあソースコードを読んで頂いてクレヨン。
2020/09/15(火) 22:56:56.50ID:ky+PawN1
ここはお前の日記帳じゃねぇっての
スレチはお前
2020/09/16(水) 10:06:16.52ID:eJDvfDFO
ぶぶ漬けどうぞと言われて、美味しくいただいてさらに食レポまで始めてるような状態かな
2020/09/16(水) 21:28:53.90ID:XXyygoNj
嫌味なことするなよ
2020/09/17(木) 00:07:22.39ID:jOQPl4C7
京都のおっかさんも口あんぐりやで
2020/09/17(木) 01:09:05.65ID:FJaokp+J
>>520 Python decimal でできるだろ。

https://docs.python.org/ja/3/library/decimal.html
543デフォルトの名無しさん
垢版 |
2020/09/17(木) 07:37:06.63ID:Lu9ZyyRf
お題: (複数行のバックグラウンド、座標テキスト、座標)から合成テキストを返す関数を作れ
座標テキストとバックグラウンドは同じサイズ(とりあえず横4縦3とする)

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

座標テキスト
ab23
9014
8765

座標が
0なら
┏┓┏┓
┃*┛┃
┗━━┛
6なら
┏┓┏┓
┃┗┛┃
┗━*┛
11なら
┏*┏┓
┃┗┛┃
┗━━┛
あまり綺麗な実装が出来なかったから問題にした https://repl.it/@vip0/analogclock#index.js
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 )
2020/09/17(木) 08:08:23.20ID:Lu9ZyyRf
げっ確かに行ごとにreplace必要ないじゃん
何やってんだ俺
ありがとう
546デフォルトの名無しさん
垢版 |
2020/09/17(木) 13:17:16.17ID:GTUBgTcD
>>543
問題の意味がわからない。
2020/09/17(木) 13:30:29.78ID:/h1W7gqa
>>543
くだらない質問スレか初心者質問スレ行け
2020/09/17(木) 13:34:08.96ID:Lu9ZyyRf
ほんとにどの問題よりもクソみたいな問題だと思っています
本当にすいませんでした
2020/09/17(木) 13:42:30.73ID:Lu9ZyyRf
ただ私は純粋にプログラミングが好きで
全く質問したかったわけじゃないのはわかってほしい
二次配列じゃないと処理できないものだと勘違いしていたのが甘いしシンプルにしすぎて問題が破綻してしまった
2020/09/17(木) 13:48:33.25ID:Lu9ZyyRf
純粋にここにいる人たちが解法として書くコードは好きだし
たまに驚くべき角度から解を出す人もいるしマイナーなアルゴリズムも知れて尊敬してる
今回もスマートなコードが見れるんじゃないかと純粋に期待して問題にしてみたんだ
スレも今流れ遅かったし
2020/09/17(木) 13:50:39.09ID:Lu9ZyyRf
しかしお前らは牙を向いた
純粋に問題作成初心者の心を無碍にして
鋭い刃のような言葉を投げつけてきた
お前らは今日から敵とみなす

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

入力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO7PVcUS
出力
IB0AAYR8ZZcUXLxKmL1ow8RxZAAUCS1j6pYOJo9n52mwITWoimM3UArCpKAGzSRZrA1vUpAerENynuJXTYuJb9HlO9NZvHdpFvCMsThVOnxhgx3T5jCfRhanH4bJJOvjoaTMdixKg4TC90zOCwyeVKJ62KAgv47P72sfPsQaH8jaG8yWnqbwtyv0OeKZa7qISm6g2MHrOlNb8RVzt36jau1hYCqKuuUBGLGuFToYptzqjkfdAoxAqqmeQO8PVcUS
2020/09/17(木) 22:56:25.54ID:ockp6LF+
>>553 vim

?\d<CR><C-a>
2020/09/17(木) 23:01:20.65ID:ockp6LF+
>>553 Ruby

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

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

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

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

あるいはファイルに内容を入れておいてそのファイルを指定する。
2020/09/18(金) 03:22:29.90ID:Pz26zoiQ
js
window.prompt().replace(/\d(?=\D+$)/,i=>i*1+1)
2020/09/18(金) 06:23:31.29ID:QICqPxzN
>>556
行末が数字のときに対応できない
perl -pe 's/(\d+)(\D*)$/($1+1).$2/e'
のほうがよくないかな
2020/09/18(金) 06:53:31.48ID:5l49iFOd
>>511
その場合の良いアルゴリズムって
「素因数分解を早く解くアルゴリズム」
よね。
それがもし思いついたらフィールズ賞ものではw
560デフォルトの名無しさん
垢版 |
2020/09/18(金) 21:10:31.47ID:JxxZTRpA
>>553
Java
https://paiza.io/projects/X0KHD9cQEH8LTka6nmDd_w
561デフォルトの名無しさん
垢版 |
2020/09/18(金) 21:36:05.11ID:JxxZTRpA
>>544
Java
https://paiza.io/projects/ka8qfAJFIag1eovg263vzg
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
563デフォルトの名無しさん
垢版 |
2020/09/18(金) 23:21:52.09ID:hhldwLbP
>>558
そうだった。 + じゃなくて * だったな。
564253
垢版 |
2020/09/18(金) 23:34:45.95ID:/yEGF/vF
>>559
素因数分解まで行かない。
素でなくてもいいので因数のうちイチバン大きいもの。
なんかいい解法見つけられないか、考えているけどいまのところ見出せていない
565253
垢版 |
2020/09/18(金) 23:36:27.35ID:/yEGF/vF
いや、違うな…
因数のうちイチバン大きいものでは、ダメだわ
566デフォルトの名無しさん
垢版 |
2020/09/19(土) 00:05:40.30ID:HLFklpM8
>>553
C

https://paiza.io/projects/IEDhYc83EDXZuCbsxf_QUg

正規表現を使わずに行末から一文字づつ行頭に向かって検索してやっている。
2020/09/19(土) 00:59:21.89ID:HX0Lirqs
√n以上の最小の約数
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"]
2020/09/19(土) 15:12:41.86ID:BWMKzapi
https://rio2016.5ch.net/test/read.cgi/math/1598637093/133-
わけわからん問題文にするなよ・・・
2020/09/19(土) 16:07:21.18ID:wSOXcncc
全然違って草
571デフォルトの名無しさん
垢版 |
2020/09/19(土) 16:29:35.90ID:HLFklpM8
>>568
君が何を言わんとしているのかが全くわからない。
572253
垢版 |
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

計算量の少ないもう少しカッチョイイ方法を見出せればなぁ…
2020/09/19(土) 21:37:57.70ID:HX0Lirqs
>>568です
やはりちょっと伝わらないですね
>>568
は取り下げます
2020/09/19(土) 21:39:46.15ID:HX0Lirqs
>>572
計算量減らすなら√n以下の最大の約数d求めてn/dを出力すれば計算量は減るな
2020/09/19(土) 21:40:46.29ID:wSOXcncc
減るというかそもそも計算量が同じというか
2020/09/19(土) 21:46:21.17ID:HX0Lirqs
イヤnが素数の場合に√nから上むきに探索すると計算量はnになるけど下向きなら√nになる
√n以上の約数と√n以下の約数は同数だけど整数そのものは下側には√nしかなく、上にはn-√nあるので下向きに探していった方が速い
2020/09/20(日) 00:25:54.87ID:ZGoKBb8Y
ポラード・ロー法使えばもっと計算量は減る
素数判定と組み合わせればモンテカルロ法ではなくラスベガス法になるから、正当性も担保される
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がどれくらいに収められるか、そもそも指数オーダー必要なのかも未解決なんじゃなかったっけ?
2020/09/20(日) 06:22:49.81ID:OZ4qNDWZ
>>576
素数判定はそもそも計算量少ない
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以上で上むき探索は素数であるか否かに限らず常に計算量は同じかそれ以上
素数であるか予備検査しても結局上向きに探索したら計算量は同じ以上かかる
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オーダーより真に早いのがあるなら上向きも下向きもないけど、もうそこまで行ったら研究者レベルの話でしかない気がする
582デフォルトの名無しさん
垢版 |
2020/09/20(日) 11:23:17.24ID:MLu0Cj9r
>>550-551
短いこの間でダークサイドに堕ちてて草
2020/09/20(日) 11:58:05.82ID:FaUtZa6z
>>582
お詫び→弁解→言い訳→逆ギレ
冷静に書いてたつもりが書いてくうちに興奮して見事なコンボを決めたようだ
584デフォルトの名無しさん
垢版 |
2020/09/20(日) 12:47:09.77ID:MLu0Cj9r
感情豊かでかわいいw
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]
のハズ
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個
2020/09/20(日) 18:36:43.29ID:XyOg3AIQ
>>585
https://ideone.com/L3IoWm
{0,1,14,184,762,2257,5704,13040}と出たんだが
どっちが合ってる?
2020/09/20(日) 18:44:44.75ID:XyOg3AIQ
一直線上にある4点の組を余分に数えたところ >>585 の解と一致した
https://ideone.com/GUZoZL
2020/09/20(日) 18:56:48.73ID:wHMtOvf4
あ、ホントだ失礼しました
2020/09/20(日) 19:10:27.22ID:wHMtOvf4
[0,1,14,184,762,2257,5704,13040]
が正解ですね

https://ideone.com/YULQQ4
591デフォルトの名無しさん
垢版 |
2020/09/20(日) 22:46:33.41ID:9sb+TTLg
>>585
問題がわからない。
2020/09/21(月) 00:11:09.46ID:ZXxiMs6i
>>591
n=3だと

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

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

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

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

の14通り
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でよい)

ってことでいいかな?
2020/09/21(月) 13:45:14.08ID:tVxoOCVr
>>592
n=4 のときの184通り
http://imgur.com/GNuPa4z.png
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
596デフォルトの名無しさん
垢版 |
2020/09/22(火) 00:03:46.43ID:jIz1rAqD
誰かフォルダにパスワード駆ける方法教えてくれ
597253
垢版 |
2020/09/22(火) 02:15:18.79ID:jDcMk3G3
対象性を考慮する以外の計算量の削減手段はないのかねこの手の問題は
解決すべき課題は計算量の削減ばかりではないだろうけれどさ
2020/09/22(火) 09:28:15.64ID:yucbsR+t
まぁ何に重きを置くかですな
数学板でこの手のプログラムが必要になるのは誰も答え持ってなくて、一応答えは出てるけど確認したいときとか
その時は速度より“確実に正しい”事の方が重要になる
この場合も対称性やら、明らかに無駄な可能性を排除すれば速度は上がるけど“確実に正しい”のかは怪しくなってしまう
実務でプログラム使う人もその辺のtpoは意識してるのでは?、
コード汚くても高速な奴も募集中
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 通りと数え上げることができる

図の中央を基準にすることができるものばかりとは限らないところには注意が必要だが
総当たりよりは効率化が見込めると思われる。
600253
垢版 |
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

もっとスマートな解法を考えていると双曲線を意識した解法を意識してしまうが、
簡単には解けない数学の問題に突き当たると思う
601253
垢版 |
2020/09/28(月) 22:53:47.02ID:mT2w1+AU
>>600
× 意識した解法を意識してしまうが、
○ 意識した解法を思い浮かべてしまうが、
2020/09/29(火) 18:23:40.44ID:TPx3FsW2
お題: バブルソートを実装せよ
603253
垢版 |
2020/09/29(火) 23:24:18.49ID:219xwwXO
>>602
プログラミングのお題スレ Part13
http://mevius.5ch.net/test/read.cgi/tech/1549160513/231
2020/09/30(水) 20:15:38.19ID:rtPyMlCZ
古参はここで「番兵おけやボケェ!」と言う
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
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
607デフォルトの名無しさん
垢版 |
2020/10/01(木) 12:09:11.51ID:OaA9a4hN
Haskellでもこんな長くなるの?
2020/10/01(木) 12:15:24.40ID:O+PWz9pR
>>607
いや、上手な人ならもっと上手くやるはず
アホほどライブラリがあってそれ使えば楽々のハズだけど修行中の身ではこんなもんorz
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
2020/10/02(金) 19:50:35.06ID:gQLwfaGp
お題: 野球のボールの動きを物理シミュレートして、ピッチャーの投げてきたボールをより遠くにかっ飛ばすバッターAIを開発せよ。
2020/10/02(金) 20:54:50.29ID:tP403VLl
カーブやシュートも再現しろよ
612253
垢版 |
2020/10/02(金) 21:41:56.95ID:kl4hmyt8
>>610

─┼─┐─┼─  /  ,.           `゙''‐、_\ | / /
  │  │─┼─/| _,.イ,,.ィ'    ─────‐‐‐  *  ←>>蟻人間
  │  |ツ │    |  |  | イン /´⌒`ヽ    // | \
                     {,    リ)  / ./ |  \
               __ /}从、 リ( /  /  |
      ,. ,. -‐===‐- `つ/ ,.イ ’^ソハノリ   / ∵|:・.
    〃〃〃〃      //ミノ__  /´   /∴・|∵’
ヽ_I__I__I__I__I_I     __ノ_/ /    ヽミ、、   .∵.;|∵’:;
ー{____,,二二二ニ) ノΘ(__   )  ゙ 、∵.;|∵’,
 /I I I I I I     .^^^'   \ !  ̄フ    ゙ 、 |∴
                   ソ  /      `
                  ノ⌒ヽ')
                / ノ/ /
               /\/ ∧/   /       ',
              / /  ノ./   ./        ',
             ノ/   ヘ__、  ./ / ̄ ̄ ̄ヽ .',
            ヘ_'_,       /  \   /  ',
                     /    \/    ',
            ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙             ゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙゙
2020/10/02(金) 21:46:15.88ID:JDxjQVnw
ナイス
2020/10/02(金) 22:04:39.76ID:jsz+6t1Q
>>612
くっそワロタ
615253
垢版 |
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
616253
垢版 |
2020/10/03(土) 01:13:51.37ID:io8Ij0O0
なんかBugってる…orz
2020/10/03(土) 12:07:42.48ID:xbar0BlH
>>605 perl5
https://ideone.com/pRMAjA
s///e でいける
2020/10/03(土) 12:20:08.70ID:nr2+4P+J
perlの正規表現マジック恐ろしや
2020/10/03(土) 12:37:17.41ID:MOu6VxbM
>>617
すげえな
ほとんどワンライナーだ
2020/10/03(土) 12:46:20.34ID:ul2MWjNf
そうなのよね
入力もらって表示→ワンステップだけ展開して戻る
の繰り返しが1番楽なんだけどなぁ
621253
垢版 |
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
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
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));
624253
垢版 |
2020/10/08(木) 02:27:24.66ID:Gy7CYzaJ
藻前ら、なかなかやるなー
気に入った。
2020/10/08(木) 13:59:34.65ID:N89hoMl4
お題: ax**2+b*x+c==0という形の二次方程式を解き、全ての実数解と実数解の個数を表示する。
2020/10/08(木) 15:03:23.36ID:eK30Q5Ei
実数解はルートを含んだ形でいいのか?
あるいは小数点以下何桁まで正確に求めるのか?
2020/10/08(木) 15:04:48.84ID:N89hoMl4
>>626
浮動小数点数でいいよ。
2020/10/08(木) 21:36:29.64ID:Q4ykcHSC
>>624
∧_∧  / ̄ ̄ ̄ ̄ ̄
( ´∀`)< オマエモナー
(    )  \_____
| | |
(__)_)
2020/10/09(金) 13:26:20.64ID:pUAVGuih
お題:計算ができる文章テンプレートを実装し、つるかめ算を自動生成せよ。

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

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

入力の例:「ツルの数=3, カメの数=4」
630デフォルトの名無しさん
垢版 |
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 ]
2020/10/09(金) 14:14:06.07ID:LR5flFjI
>>629
追記: パーサーを作れない人はevalを用いても構わない。
632デフォルトの名無しさん
垢版 |
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 ]
2020/10/09(金) 17:52:52.10ID:gniylpO4
>>629 Ruby
ツルの数 = 3
カメの数 = 4
Template =<<_EOT_
「ツルとカメが合わせて{$(ツルの数)+$(カメの数)}います。
足の合計本数が{$(ツルの数)*2+$(カメの数)*4}本です。
カメは何匹いますか。」
_EOT_

puts Template.gsub( /\{(.*?)\}/ ){ eval $1.gsub( /\$\((.*?)\)/ ){ $1 } }
634253
垢版 |
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本です。
カメは何匹いますか。」
2020/10/09(金) 23:14:45.18ID:LR5flFjI
お題: 2つのRGBカラーが#RRGGBB形式で与えられる(RRGGBBは六桁の十六進数とする)。
2つの中間色を#RRGGBB形式で出力せよ。
可能ならばこれら3つの色をカラーバーとして表示せよ。
2020/10/09(金) 23:26:06.11ID:LR5flFjI
>>635
入力例1: #112233, #99AAFF
入力例2: #AD03ff, #a39e75
2020/10/09(金) 23:55:14.23ID:ACx6TREf
>>635,636
自明な入力例だけを示しても、出力例も出さないと意味ないだろう。
2色の中間色ってのが曖昧じゃね?
単にR,G,Bそれぞれの平均を取るだけなのか、赤と紫の中間が赤紫になるように循環する色相で中間をとるのかとか。
2020/10/10(土) 02:56:37.74ID:KFXrJR76
問題が玉石混合だなぁ
2020/10/10(土) 07:06:51.16ID:PdovQueR
>>634
>変数は「$(変数名)」のように表し、
2020/10/10(土) 07:45:17.48ID:nh4sk35x
お題: 20201010と出力してください。ただしコードに使っていい数字は1のみです。
2020/10/10(土) 08:25:49.31ID:qt6u2bFw
>>640 python

a=1;b=a+a;c=a-a
print(b,c,b,c,a,c,a,c,sep='')
#出力20201010
642デフォルトの名無しさん
垢版 |
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)
2020/10/10(土) 12:06:27.17ID:0z4oJBva
>>640
js本日限定
new Date().toLocaleDateString().split(/-|\//).join``
//=> "20201010"
644デフォルトの名無しさん
垢版 |
2020/10/10(土) 14:54:47.61ID:iOujIiR/
>>638
×こんごう
○こんこう
645デフォルトの名無しさん
垢版 |
2020/10/10(土) 14:57:00.84ID:iOujIiR/
>>640
Java
https://paiza.io/projects/8QZuxNJ_iMGrfafT8HlLGw
2020/10/10(土) 15:40:40.94ID:Duwb5Fsi
>>645
012にOIZ使うのセンスある
647デフォルトの名無しさん
垢版 |
2020/10/10(土) 18:37:22.80ID:jNM1f0U4
>>640 C
https://ideone.com/5BGavX
648デフォルトの名無しさん
垢版 |
2020/10/10(土) 18:54:45.98ID:V01gi3BN
>>647
Windowsでもそのままでいけるのか?
2020/10/10(土) 19:24:31.52ID:c6WyhNHP
お題: 振動数1000Hzの音を1秒間発振せよ。
2020/10/10(土) 19:32:24.80ID:53GLINoh
>>640 c
https://ideone.com/DbqsXs
2020/10/10(土) 19:46:18.01ID:LCYuVeVr
haskell

import Data.Maybe
main = print $ product $ map ((fromJust).(flip lookup (zip ['\t'..] [1..]))) "&myC"
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)
2020/10/10(土) 23:07:21.98ID:t1LUP7rm
>>640
haskell 改良

unicode = length . tail . (enumFromTo minBound)
main = print $ product $ map unicode "ാᝇ"
654デフォルトの名無しさん
垢版 |
2020/10/10(土) 23:18:40.46ID:iOujIiR/
>>635
Java
https://paiza.io/projects/taHgDigIq_C5KjS66xaCfQ
https://dotup.org/uploda/dotup.org2277678.png
2020/10/11(日) 00:16:06.04ID:6GsmNhIZ
>>640 JavaScript
[1+1,1-1,1+1,1-1,1,1-1,1,1-1].reduce((acc,n)=>acc+n,'')
656デフォルトの名無しさん
垢版 |
2020/10/11(日) 01:54:01.50ID:eYi6TEVp
>>605
Java
https://paiza.io/projects/IVaRnsx6lYLlO1CcbniO-Q
657デフォルトの名無しさん
垢版 |
2020/10/11(日) 08:58:57.96ID:luIvAMCe
>>640 J
smoutput ,&":/ 'amp' i. 'papamama'
658デフォルトの名無しさん
垢版 |
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
659デフォルトの名無しさん
垢版 |
2020/10/11(日) 17:59:24.67ID:/6XslNRS
>>629
Perl
https://paiza.io/projects/wfQXB4arB2zbu4DNYEiU5w

eval が使えて楽なので、つい。
660デフォルトの名無しさん
垢版 |
2020/10/11(日) 18:12:54.16ID:eYi6TEVp
>>602
Java
https://paiza.io/projects/2bTy71EhJJcVemamRx8IPA
661デフォルトの名無しさん
垢版 |
2020/10/11(日) 19:16:59.76ID:/6XslNRS
>>635
Kotlin
https://paiza.io/projects/O1eUwROYKRQepDq3N-VyUA

paiza.io はHTMLで出力させてブラウザに表示できるのでカラーバーも出してみました。
662デフォルトの名無しさん
垢版 |
2020/10/11(日) 19:36:20.38ID:eYi6TEVp
これは良いこと聞いた
663デフォルトの名無しさん
垢版 |
2020/10/11(日) 19:48:34.94ID:ki6dTuuo
>>640 Common Lisp (SBCL, 処理系依存)
https://ideone.com/nImAgj
2020/10/11(日) 20:05:13.72ID:FQjAt+Dq
>>663
かわいい
2020/10/11(日) 20:30:57.80ID:vt3DXswM
>>640 brainfuck

>+++++++[<+++++++>-]<+.--.++.--.+.-.+.-.
2020/10/11(日) 23:30:32.44ID:A2vGg89g
>>605
C(C++) https://mevius.5ch.net/test/read.cgi/tech/1434079972/70
2020/10/11(日) 23:57:26.40ID:4cQ/GxGI
お題: 整数0〜10の一様分布の乱数を百回発生させて、その統計結果を基に各整数を横軸、回数を縦軸とする棒グラフ(ヒストグラム)を描画し(棒の最大幅32字)、ほぼ一様であることを確かめなさい。
2020/10/11(日) 23:59:14.77ID:B+MSoWxK
paiza.io は、text, html, json で出力できるのか

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

(誤)各整数を横軸、回数を縦軸とする棒グラフ
(正)各整数を縦軸、回数を横軸とする棒グラフ
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
671デフォルトの名無しさん
垢版 |
2020/10/12(月) 01:14:47.03ID:hVCmG980
>>640
Kotlin
https://paiza.io/projects/32aoQfPBUWZ0tnk2E5fg2g

ちょっと変わった感じにしようと思ってこうした。
672デフォルトの名無しさん
垢版 |
2020/10/12(月) 08:18:41.49ID:fHHXzdlp
>>667
二項分布になるんじゃないかなあ
2020/10/14(水) 15:32:12.46ID:M1NONSBM
>>649 オーディオ系はシステム依存度が高いから余りサンプルが出てこないね。 WindowsやMacOSなら簡単そうだが
1kHz の音源ファイルを使うのは違反かな?
2020/10/14(水) 17:27:12.50ID:TNR/wFHW
>>649 C/C++ with Win32
#include <windows.h>
int main(void)
{
Beep(1000, 1000);
}
2020/10/14(水) 17:57:41.59ID:qOYZdiW9
答え出てきても試しようがない
2020/10/14(水) 18:19:22.34ID:TNR/wFHW
>>649 Python with Windows
import winsound
winsound.Beep(1000, 1000);
2020/10/14(水) 18:24:27.45ID:TNR/wFHW
>>649 Python with Mac
import os
os.system('play -n synth 1 sin 1000');
2020/10/14(水) 18:36:34.21ID:Azmo5ss/
シェル経由でSoX playコマンド呼んでるだけやんけ
Pythonもmacも関係ねぇわ
2020/10/14(水) 19:17:28.35ID:Y0U/d7P+
OSにつく前置詞はwithじゃなくてonだろハゲ
680デフォルトの名無しさん
垢版 |
2020/10/14(水) 19:30:29.09ID:pZU5VHHG
試すと音が出て煩そうだから試す気になれない。
2020/10/14(水) 19:50:02.82ID:TNR/wFHW
テレビの自主規制音と同じ音だよ。
https://ja.wikipedia.org/wiki/%E8%87%AA%E4%B8%BB%E8%A6%8F%E5%88%B6%E9%9F%B3
2020/10/15(木) 00:45:55.69ID:BUh584nA
>>678 iOS じゃ、play コマンドがなさそうなんだよな。
2020/10/15(木) 01:18:37.79ID:fqrOjoDi
結局このスレで盛り上がるのは環境によらず言語によらず、でも多少は骨のあるようなお題なんだよな
へぇその言語ならそんなにキレイに書けるのかとか普段自分が使ってない言語ではどうやって実現できるのか眺めたりするのが面白い
音鳴らすなんてお題として面白いわけがない
2020/10/15(木) 01:40:28.46ID:S6IC+plr
ヒント:出題者
685デフォルトの名無しさん
垢版 |
2020/10/15(木) 11:44:28.12ID:cDg3UiVL
蟻人間さんへのお題:
文字列を受け取って、RFC 5322にしたがってSubjectヘッダを出力してください(MUST、SHOULDを満たすこと)
文字コードはUTF-8、エンコーディングはBエンコードを使用してください
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")
2020/10/15(木) 13:49:36.74ID:IXtC9lOP
>>686 訂正。

(誤) while len(text) > 78:
(正) while len(text) >= 78:
688デフォルトの名無しさん
垢版 |
2020/10/15(木) 14:30:46.93ID:cDg3UiVL
>>686
いろいろ違うので・・・メールのソース眺めたが良いです
2020/10/15(木) 19:14:52.90ID:QzXinxJa
頭の悪いお題を連投してるやつはやっぱり頭悪いんだな
690デフォルトの名無しさん
垢版 |
2020/10/15(木) 19:22:03.88ID:cDg3UiVL
そんなことないと思うけどな
あまり他人の悪口言わない方が良いよ
2020/10/15(木) 19:28:33.00ID:QzXinxJa
くっそみたいなお題延々と出し続けてウザいじゃん
2020/10/15(木) 19:29:59.48ID:MTvivIgb
>>629なんかはいいと思うんだけどな
eval使えないHaskellerにはいい練習問題になってる
2020/10/15(木) 19:38:14.90ID:QzXinxJa
ウェブアプリつくれだのGUIアプリつくれだの酷い事散々言いまくってるじゃん
◆QZaw55cn4cの方がまだマシ
2020/10/15(木) 19:40:03.02ID:MTvivIgb
まぁ音出せとかカラーバー出せとかはクソお題だな
695デフォルトの名無しさん
垢版 |
2020/10/16(金) 19:48:26.76ID:2tllxc0n
お題
自然数nを 2進数にした時、 1が連続する個数の最大値を求める。

20201016 -> 5
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
2020/10/16(金) 21:03:20.03ID:a9PKFHNt
>>695 ruby
f = ->(n) {n.to_s(2).chars.chunk(&:itself).map {|k, a| k == '1' ? a.size : 0}.max}
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
699253
垢版 |
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
700デフォルトの名無しさん
垢版 |
2020/10/17(土) 00:12:43.05ID:7ct7R1y+
>>695 Ruby

p 20201016.to_s(2).split("0").max.size
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
2020/10/17(土) 00:46:45.25ID:4JRxXuyk
>>695
https://ideone.com/hQRZsi
2020/10/17(土) 01:58:38.41ID:S6LboNFt
>>695 Ruby
n = 20201016
nl = 0
while n > 0
nl = ((nc = (n.odd?)? nc + 1 : 0) > nl)? nc : nl
n >>= 1
end
puts nl
2020/10/17(土) 01:59:32.64ID:u2s9P3C4
>>702
125の時1になった
2020/10/17(土) 02:41:53.51ID:AbkDXvLA
これだからQZ
2020/10/17(土) 02:53:09.41ID:4JRxXuyk
>>695
C++: https://ideone.com/7H5HBx

>>702 にはロジックに欠陥がありました

>>704
ご指摘ありがとうございます。
707703
垢版 |
2020/10/17(土) 09:22:46.57ID:S6LboNFt
>>704
自分の >>703
- nl = 0
+ nc = nl = 0
2020/10/17(土) 12:19:37.13ID:a+zi+w45
>>695 C++
https://wandbox.org/permlink/udZVzwy6pQKbcPa5
2020/10/17(土) 13:46:27.15ID:eBu6AjRf
>>695 C
https://ideone.com/DwvfL2
2020/10/17(土) 18:57:16.23ID:S6LboNFt
>>695 Ruby
n = 20201016
i = 0
while n != 0
n &= n << 1
i += 1
end
puts i
711デフォルトの名無しさん
垢版 |
2020/10/17(土) 19:11:03.54ID:wXdm0x1E
>>710
うまいやり方だな。それには気付かなかった。
712デフォルトの名無しさん
垢版 |
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が出る。
2020/10/17(土) 20:05:12.33ID:vimxgZ9f
>>695 JavaScript

let num = 20201016
let ans = num.toString(2).split`0`.sort().pop().length

console.log(ans) //=> 5
2020/10/17(土) 20:50:55.84ID:w8j3NnhR
>>695 octave
https://ideone.com/dO1WZp
f = @(n) max(cellfun(@numel, strsplit(dec2bin(n), '0')));
f(20201016)
715デフォルトの名無しさん
垢版 |
2020/10/17(土) 20:54:06.81ID:frzgm+pU
>>695
Perl
https://paiza.io/projects/VO9_CFHPOVbO5iI8uDc__A
2020/10/17(土) 23:22:21.08ID:P3PLPttw
いつもRubyの人からなにかしら学ぶことがある
717デフォルトの名無しさん
垢版 |
2020/10/18(日) 00:42:32.49ID:nYmbGZmV
ハトにエサを与えないで下さい
2020/10/18(日) 01:06:12.01ID:qT62bbHa
QZは自分の頭が悪いのをわざわざ周知してもらうためにクソコードを晒すのか
ドMだな
2020/10/18(日) 03:42:01.18ID:DpwMGaW+
>>710
なるほどな、感心した
n>>1でもいいわけだな
2020/10/18(日) 04:21:53.35ID:xWXtsYNK
>>700 のほうが速いと思うが
2020/10/18(日) 04:36:21.54ID:F/EhVBet
rubyよく分からないけど>>710の方が100倍くらいは速そうに思える
722デフォルトの名無しさん
垢版 |
2020/10/18(日) 05:53:44.51ID:28u9FaXE
うん。速そうだね。数値計算しかしてないし。
2020/10/18(日) 10:06:25.57ID:ARbR7jXS
20201016みたいに桁数が少ないならそうだけど桁数が増えるとルーブが答え×桁数回だからアルゴリズムそのものは遅い
桁数が少ないうちは内部関数しか使ってない利点で早いとは思うけど
2020/10/18(日) 12:07:22.14ID:GUbLWvo/
>>723

>>700,710 をベンチマークで比較してみた
https://ideone.com/t0ZYLg
https://ideone.com/DUEWmC
20201016 では 5~6倍
巨大な数だと 7000倍以上
2020/10/18(日) 15:53:00.51ID:xUpUEWAV
>>693
残念ながら、私の出題もイマイチ人気がありませんでした‥‥
726デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:20:25.30ID:wanN/5Zd
>>685
Java
https://paiza.io/projects/frlfP3US1doeAO_HZBnLWQ
727デフォルトの名無しさん
垢版 |
2020/10/18(日) 21:43:52.67ID:wanN/5Zd
>>669
Java
https://paiza.io/projects/0xfQrdW_qpJoUbOO6ux6wg
728デフォルトの名無しさん
垢版 |
2020/10/18(日) 22:06:12.69ID:wanN/5Zd
>>667
Java
https://paiza.io/projects/x3j0kbjqsSoVGNJX5qun2g
729デフォルトの名無しさん
垢版 |
2020/10/18(日) 22:14:01.64ID:wanN/5Zd
>>695
Java
https://paiza.io/projects/Eo4-fSXmdnoqjyHOMsi92Q
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倍くらいの差だった
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
2020/10/18(日) 22:56:30.98ID:QW0aA1Hz
>>724
GJ
2020/10/19(月) 06:30:07.92ID:8QFJcUQW
>>695
echo "obase=2; 20201016" | bc | sed 's/./&\n/g' | uniq -c | perl -lane 'if ($M < $F[0]) {$M = $F[0]}; END{print $M}'
5
734724
垢版 |
2020/10/19(月) 15:26:08.35ID:u+lqDWSF
>>730
ご指摘の通りでした
https://ideone.com/DUEWmC
を修正しました

>>710 は 1の連続が多いと弱いですね
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となる
2020/10/19(月) 21:36:44.38ID:gq9726ze
>>733
echo "obase=2; 20201016" | bc | sed 's/0\+/\n/g' | wc -L
でよくね?
2020/10/19(月) 22:00:17.27ID:gq9726ze
>>735 Bash

$ echo "scale=100;e(l(2) / 3)" | bc -l
1.25992104989487316476721060727822835057025146470150
79800819751121552996765139594837293965624362550940
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
2020/10/19(月) 23:54:32.40ID:mPlPc+C9
>>735
参考を誰も参考にしてくれないのにワロタ
参考を元に作ったコード
Haskell

https://ideone.com/ywJPjx

ちなみにrubyのpi.rbが同じテクニック使ってます
そっちは定数係数でない三項間関係の漸化式パージョン
2020/10/20(火) 02:36:31.61ID:gFGmv7lM
>>736
たしかに
2020/10/20(火) 04:08:13.14ID:Mf7a0fdE
おっせえじゃん
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)の絶対値の場合と比べて、エラー率の順位は入れ替わるだろうか?
2020/10/22(木) 01:17:43.95ID:rA+WIIWx
...but nobody answered
744253
垢版 |
2020/10/23(金) 09:17:13.74ID:7L0FHKID
正規乱数をモンテカルロ法で算出して
doubleと多倍長浮動小数点でそれぞれ計差した2変数調和平均に
差がある率を求めれば良いの?
正規乱数なら書かなくともライブラリにあるんだよね。
あるいは誤り率の計算そのものにモンテカルロ法を使うようなやり方なのかな
2020/10/23(金) 14:48:32.25ID:oxO2c12D
次のプリーズ
746デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:02:36.14ID:Vzf4XOui
お題
乱数を使ってシミュレーションしてください

ジョーカーを除くトランプ52枚から1枚抜き取って箱に入れました
その後、残った51枚から3枚引いて確認したら3枚ともダイヤでした
では最初に抜き取った箱の中が1枚がダイヤである確率はいくらか?
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
2020/10/23(金) 20:46:02.34ID:LovVc5SM
途中で送信してしまった

99%信頼区間は 0.20414±0.0010382 => [0.2031018, 0.2051782]
理論値は 10/49 = 0.20408163265306123
749デフォルトの名無しさん
垢版 |
2020/10/23(金) 20:49:11.91ID:5NWyTruo
確認前後での確率変動を出せ、っていうお題じゃねえのコレ
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枚が与えられたとき、そのような捨て札の組み合わせを求めるプログラムを記述せよ。

ここで、ポーカーの役と配点の対応はプログラムのパラメータとして組み込んで良い。
2020/10/24(土) 21:09:47.85ID:xQuuF55s
>>750

// 任意の役の配点を0とする
printf(0);
752デフォルトの名無しさん
垢版 |
2020/10/24(土) 23:43:41.92ID:DlOr4HzX
>>746
Java
https://paiza.io/projects/rAHsohR9Q8vhh4kLZnfKAw
2020/10/25(日) 09:27:41.37ID:dKQi7OF0
>>750 Perl5
https://ideone.com/stLkXf

役のレートは某ゲームのものを使用

ノーペアのとき
全部変えるより1枚残したほうが有利という結果が出てちょっと驚いてる
754デフォルトの名無しさん
垢版 |
2020/10/25(日) 10:49:49.59ID:zd7LSfWt
3が1枚来てて、3が3枚残ってるなら、
・手元の3を捨てると、3が来ても何も起こらない
・手元に3を残すと、3が来るとワンペアになる

つまり、残りのカードを引けるかどうか、になる
>>746の亜種
2020/10/25(日) 11:44:16.63ID:c/nOQwtG
746はシミュレーションも何もただの引っ掛け問題でしょ
モンティホール問題の方が引っ掛け問としては出来が良い
2020/10/25(日) 12:58:23.56ID:vQGWPLvq
引っかけも何も条件付確率の初歩の初歩の問題だろ
2020/10/25(日) 14:14:17.31ID:tOCt4zCM
52枚トランプの束で2枚目から4枚目までがダイアであるような場合に限定してその内先頭もダイアであるような場合は全体の何バーセントかを問う問題
758742
垢版 |
2020/10/26(月) 01:17:42.67ID:LimhPZzI
>>744
正規乱数自体は既存のライブラリで(Pythonならnumpy.random.randnとか)。
例えば、最初のお題(2/(1/x+1/y)で計算するやつ)は、34%位のエラー率になります。
759253
垢版 |
2020/10/27(火) 00:51:04.61ID:uqMOOUWw
そうすると俺にはモンテカルロ法をわざわざ使うところが
どこかよく分からないんだよね…
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%
って事?
761253
垢版 |
2020/10/28(水) 00:01:38.74ID:Jno143Es
面白い記号だなそれ。
だが、他の人にも伝わるように書いた方が話が広がってよいよ。
どんなに数学が得意な人でも本当に優秀な人はそうすることができると思う
2020/10/28(水) 00:17:22.90ID:3yQQm3er
Φρズと書いてハイロウズと読みます
2020/10/28(水) 00:21:17.79ID:n11gpLQR
煽りでもなく素直に疑問なのだが>>760のどこら辺がわからないんだ?
正規分布の下りか?
764253
垢版 |
2020/10/28(水) 00:30:53.43ID:Jno143Es
>>762
マジレスしようと思ったが、そういう問題じゃないんだよ
言葉で書きゃー2,3行のことなんだから
言葉で人に伝わるように書けばいいだろ


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

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

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

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

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

いいやP()に限らない、お前のレスは一事が万事そんな感じ
一からからやり直せ
そしたら相手してやる
2020/10/28(水) 00:42:08.54ID:n11gpLQR
>>765
文脈から明らかにP(A)はAが起こる確率でしょうが
ちなみに俺は>>760じゃないんで
767253
垢版 |
2020/10/28(水) 00:43:23.90ID:Jno143Es
>>766
それ関数じゃないだろ。何で関数として書くんだ。
どういう関数空間なんだ?
768253
垢版 |
2020/10/28(水) 00:47:05.09ID:Jno143Es
簡単なことを
わざわざ難しいことのように書くのは
有能な人のすることではない
2020/10/28(水) 00:51:02.28ID:n11gpLQR
>>767
落ち着けよお前
P(事象A) := 事象Aが起こる確率 なんて高校数学の範疇だぞ
>>760が殊更ペダンチックには感じない
770253
垢版 |
2020/10/28(水) 01:00:33.01ID:Jno143Es
>>769
別に落ち着いているけど
これか
https://ja.wikipedia.org/wiki/%E6%9D%A1%E4%BB%B6%E4%BB%98%E3%81%8D%E7%A2%BA%E7%8E%87
P()が確立っていつから?
俺が大学の頃まではこういう記法は見た記憶が無いんだけど

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

これは言葉で書いたらもっと分かりやすくならないのか?
771253
垢版 |
2020/10/28(水) 01:15:04.26ID:Jno143Es
結局 >>760

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

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

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

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

お前もさんも回答よろしくな
2020/10/28(水) 01:20:24.09ID:6h0Rpnv/
>>742の意味するところが数学的に自明になればおのずと回答も付くでしょう
775253
垢版 |
2020/10/28(水) 01:20:47.31ID:Jno143Es
蛇足だが、あの式で意味がわかった上で
まさか回答できなかったら、単なる無能だからな
776253
垢版 |
2020/10/28(水) 01:27:14.39ID:Jno143Es
>>774
参考までにあなたは今までどのような回答を投稿されましたか?
2020/10/28(水) 01:29:09.84ID:3yQQm3er
>>761
> 面白い記号だなそれ。

で、結局面白い記号って何だったの?
778253
垢版 |
2020/10/28(水) 01:30:24.94ID:Jno143Es
ふふ、それは
ヒ・ミ・ツ
2020/10/28(水) 01:43:43.54ID:3yQQm3er
教科書ないから高校数学 確率で一番上に出たやつ。
https://studysapuri.jp/contents/high/article/subject/sp/math00003.html

やっぱ高校の教科書に載ってたよなあww

仮に載ってなかったとして大学で使う書籍にもP載ってないって?w

> 俺が大学の頃まではこういう記法は見た記憶が無いんだけど
780253
垢版 |
2020/10/28(水) 01:56:33.39ID:Jno143Es
ゆとり以降だなそりゃ
2020/10/28(水) 02:11:35.07ID:d52OC3St
恥の上塗りするくらいなら黙ってればいいのに
782253
垢版 |
2020/10/28(水) 02:16:39.09ID:FRCNqyyj
じゃあ何か自慢の回答でもしてよ
783742
垢版 |
2020/10/28(水) 05:10:48.17ID:MEeLXnFm
>>760
2/(1/x+1/y)

2*x*y/(x+y)
と変形した場合だと、36%位です(100万回試行してみた)。
2020/10/28(水) 06:02:02.77ID:W3KKdO+Q
>>742 C
https://ideone.com/iPEwg8
2 / (1 / x + 1 / y) のエラー率は 38.5%
2 * x * y / (x + y) のエラー率は 40.4%
と出た
785742
垢版 |
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));
786742
垢版 |
2020/10/28(水) 13:16:35.16ID:jim4KuYP
間違えました
double h0 = ( xd == 0. || yd == 0. ? 0. : 2. / (1.L / xd + 1.L / yd));
2020/10/29(木) 00:16:48.93ID:GFOWX4AY
お題:言語機能のみを使い単方向リストを実装しメソッドpushとpopを実装せよ
pushはリスト末尾にノードをプッシュし、popはリスト末尾からノードをポップする
ノードの持つ値は整数とする
2020/10/29(木) 00:52:01.80ID:wtq/xrTf
複数pushできるの?
popも個数指定できるの?一個ずつ?
pushの戻り値はリスト自身?入れた値?成否?
2020/10/29(木) 01:01:50.46ID:GFOWX4AY
>>787
>>788
pushもpopも値は1つずつ
pushの戻り値はなんでもいい
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
}
}
2020/10/29(木) 12:03:58.95ID:GFOWX4AY
>>790
なんで>>787,789の仕様でこんな実装になるんだ?
お題ちゃんと読んでる?
2020/10/29(木) 12:11:08.30ID:moZIRBYC
>>791
「言語機能のみを使い」は引っかかる表現だったけどそれのことかい?
2020/10/29(木) 12:16:22.08ID:95aSRVZj
オレもこの「言語機能のみを使い」がわからなかった
「ライブラリ関数使うな」か「文字列操作関数のみを使い」かどっちかかなと
わからんから様子見
2020/10/29(木) 12:18:16.67ID:GFOWX4AY
>>792
>>790
は787の仕様としてただしかったわ
すまんな
こっちのお題の定義があいまいすぎたらしい
言語機能は問題ない
2020/10/29(木) 12:21:59.18ID:GFOWX4AY
>>793
ライブラリ使うなって言いたかった
あとお題提出前の実装については>>790に比べるとかなり冗長な実装をしてある
ここに晒す気はないが
796デフォルトの名無しさん
垢版 |
2020/10/29(木) 12:33:09.26ID:AOpu1Zek
stdlib.h使わずに作るの?
2020/10/29(木) 12:36:05.93ID:jsAu6jIB
>>794
まあええわ
俺もclassは久々に使ったけどできれば使わずに実装したかったわ
2020/10/29(木) 12:50:57.59ID:GFOWX4AY
>>797
こっちの実装したコードに比べるとそっちのコードはえらくシンプルなんだよな
軽くショックだわ
>>791みたいな口きいてすまんかったな
2020/10/29(木) 13:24:14.72ID:GFOWX4AY
>>796
リスト以外の実装は自由の想定
stdio.hも使っておk
2020/10/29(木) 13:27:39.52ID:GFOWX4AY
>>796
C/C++などの言語はmallocなどを使っても良いことにする
2020/10/29(木) 15:09:10.20ID:dNWGwdex
Haskellみたいな純粋関数だとそもそも標準ライブラリだけだと“状態”を作るのも難しいんだよな
同じ表現は永遠に同じ答えを返すからスタックの“状態”を変化させるというのがそもそもできない
それをなんとかするのに“モナド”というのがあるんだけど状態を処理する“ステートモナド”は標準ライブラリではないんだよな
ほとんど“準標準”だけど
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]
2020/10/29(木) 19:01:42.56ID:7aED6VYA
>>787
双方向リストの方が、後々いろいろ流用できてありがたいんですけど、それでも端方向リストでインプリしないといけないのですか?
2020/10/29(木) 19:02:59.18ID:c1P6mcgH
持て余すくらいなら「なるべく使わない」とか評価基準を示すだけにしとけばいいのに
2020/10/29(木) 19:32:46.09ID:EQ9lcE/o
>>793
全く同じこと思ってたわw
2020/10/29(木) 19:34:40.84ID:EQ9lcE/o
>>797
どうでもいいけどお前のIDもjsだsな
2020/10/29(木) 19:40:10.12ID:Pf0NRL7D
>>787 Brainfuck

push: <[>],
pop: <[>]<[-]<
808デフォルトの名無しさん
垢版 |
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
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
2020/10/29(木) 21:13:39.21ID:wtq/xrTf
うわ
console.log('JSON: ' + JSON.stringify({'test': list})) //=> JSON: {"test":[2,7,0]}
だった
811デフォルトの名無しさん
垢版 |
2020/10/29(木) 23:09:01.60ID:MaNQDMIt
>>803
お題
双方向リストをC89で実装してください
812253
垢版 |
2020/10/29(木) 23:20:15.73ID:UgpGZWA4
>>807
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
2020/10/29(木) 23:26:08.36ID:GFOWX4AY
>>803
双方向書きたいってことなら書けば
お題は単方向だけど
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"
816253
垢版 |
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
817253
垢版 |
2020/10/30(金) 00:09:56.81ID:hMjmzAXb
>>816
say $y;
の下に書いてあった最後の行
say "@s";
をコピペしそびれた…orz
818253
垢版 |
2020/10/30(金) 00:22:38.86ID:hMjmzAXb
>>816 Pop関数はこっちの方がいいな、無駄なコピーもないし。

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

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

sub Pop($a) {
 delete @$a[-1];
}
821デフォルトの名無しさん
垢版 |
2020/10/30(金) 00:50:28.84ID:9RgBA+ge
>>787
Java
https://paiza.io/projects/JKwjWCxSc6dHv_ItEaqwlQ
822デフォルトの名無しさん
垢版 |
2020/10/30(金) 02:22:50.19ID:9RgBA+ge
>>811
Java
https://paiza.io/projects/wtaAasQr_Nu5Zw2D1KoPwg
2020/10/30(金) 07:07:30.18ID:cChJ6BWU
>>812
あ?
2020/10/30(金) 23:30:40.86ID:hYhF3+Ov
Brainfuck読めないわ
覚えようかな
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
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"
}
2020/10/31(土) 14:54:50.69ID:HHhQTZ6R
関数名のミススペリングは修正していいですか
2020/10/31(土) 15:02:04.99ID:QnYm1bfS
ごっつtypoしてたすまんFIXME
829デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:07:31.21ID:DmLmDhBA
>>825 Common Lisp
https://ideone.com/L8wigO
2020/10/31(土) 15:33:31.91ID:I05R+wBh
相変わらずキモいなあ、いつもの勝手に認定キッズ
ミュートにしてるという情報から相手が雑魚であるというぶっ飛んだ推論をする知性の欠片も持ち合わせない負け組
831デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:36:09.16ID:DmLmDhBA
>>825 Common Lisp
https://ideone.com/qHuipq

>>829は無駄な条件判定(二つめの (null a))があったので修正
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)
}
833デフォルトの名無しさん
垢版 |
2020/10/31(土) 15:54:22.22ID:i0S/O8KX
>>787
C
https://paiza.io/projects/7O3xqQfCoYOhAz-48TxxWw
2020/10/31(土) 16:42:52.45ID:B0ELcd4k
>>825
Haskell

https://ideone.com/2Rb2sz
835デフォルトの名無しさん
垢版 |
2020/10/31(土) 17:10:35.46ID:M62mfk9p
>>787
Perl
https://paiza.io/projects/E1ha4EgvaVhalIRuJ_To-g
836デフォルトの名無しさん
垢版 |
2020/10/31(土) 17:42:14.32ID:/zmNVLOW
>>787
Kotlin
https://paiza.io/projects/mB7s1uC_4FJk1MFTDpLYsA
837デフォルトの名無しさん
垢版 |
2020/10/31(土) 21:33:28.24ID:g64iH70d
>>825
Java
https://paiza.io/projects/jCNOEenrSmdOMXo6Fl2wyQ
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 )
}
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"]
840デフォルトの名無しさん
垢版 |
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;
}
841253
垢版 |
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
2020/10/31(土) 23:10:35.06ID:8FYB/kmH
>>841
なんでお前ずっとコテハンつけてんの?
843253
垢版 |
2020/10/31(土) 23:20:38.29ID:i+h07tFB
>>842 IPアドレスがたまに変わるのと自分のレスを見分けやすくするため。固定ではなく番号はたまに変えてる
気にしないで
2020/10/31(土) 23:26:17.77ID:OVAIfmUR
>>787 c
https://ideone.com/9grZQe
2020/10/31(土) 23:27:34.12ID:wd4K8eMC
>>843
専ブラ使えばいいのに
846253
垢版 |
2020/10/31(土) 23:32:26.70ID:i+h07tFB
>>845
IPアドレスが変わったり日にちがたった自分のレスを簡単に表示し分けられる専ブラで良いのある?
出来ればLinuxで。ちなStyleは好みではない
847253
垢版 |
2020/10/31(土) 23:38:27.89ID:i+h07tFB
>>844
教科書に載っているようなきれいなコード書くね
2020/10/31(土) 23:54:01.35ID:OVAIfmUR
>>847
サンクスコ

でも、引数の評価順については正直お行儀悪いんで
勉強してるみんなはそのへん各自ぐぐってみてね
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

次へ続く
850849
垢版 |
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"]
851デフォルトの名無しさん
垢版 |
2020/11/01(日) 01:29:12.30ID:17LNcGyj
>>825
Kotlin
https://paiza.io/projects/pLXGwy1V_3FlM4eqH2w5tg
852デフォルトの名無しさん
垢版 |
2020/11/01(日) 01:49:31.61ID:17LNcGyj
>>825
C
https://paiza.io/projects/hjm6unXa-mcUi6cx1mTJ9g
853838
垢版 |
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 )
}
2020/11/01(日) 14:40:36.23ID:wOVD56Lv
お題:大阪都構想が実現すると、現在の大阪市は消滅すると予想される。都構想実現前の住所を実現後の住所に変換しなさい。
2020/11/01(日) 16:05:05.76ID:+nQAPqAx
次行ってみよう
2020/11/01(日) 16:41:27.74ID:wOVD56Lv
参考:https://www.asahi.com/articles/ASNBS733ZNBMPTIL00Q.html
2020/11/01(日) 16:44:49.88ID:wOVD56Lv
これも:https://maidonanews.jp/article/13879682
2020/11/01(日) 16:51:14.83ID:VQGUeFT5
お前らは競技プログラミングとかやってる?
859253
垢版 |
2020/11/01(日) 16:54:48.84ID:I8lyxV1q
>>858
やろうとしたことはあるがまだ未経験
何か受験勉強みたいになっちゃってるコンテストには魅力を感じない
でも世界トップレベルは年間4000万くらい賞金稼ぐとい話をきいてそういうのにはちょっと惹かれる
2020/11/01(日) 17:00:25.77ID:wOVD56Lv
>>855
あんまりバカにするなよ。住所変換できないと大坂大混乱になるよ。
2020/11/01(日) 17:18:29.18ID:EgIfcLXC
バカにしてるのはおまえ
他所の住所変更地の状況知らんのか?50年前の住所でも年賀届くわ
数年〜十数年或いはそれ以上旧住所で配送可能。舐めすぎ
2020/11/01(日) 17:31:11.77ID:+nQAPqAx
>>860
ここでそのお題といても大混乱が回避できるわけでもなし
そういう問題じゃなくてそろそろ自分にいい問題作るセンスがない事自覚すべき
2020/11/01(日) 17:35:33.69ID:S9fsJ+JS
データ引っ張ってくるだけじゃん
ただの知識問題は悪問
2020/11/01(日) 18:32:31.31ID:erpRcPg0
やってみたが
競技系はプログラミングのスキル向上には役立たんよ
2020/11/01(日) 18:50:53.93ID:4+fLUvoM
>>857
このサイト気持ち悪いな
2020/11/01(日) 19:52:59.24ID:wOVD56Lv
>>865
太陽風を読めよ。
2020/11/01(日) 19:57:24.03ID:wWMHVvTS
>>866
消えろ
2020/11/01(日) 20:04:08.68ID:wOVD56Lv
>>867
お前がえろ
2020/11/02(月) 00:22:13.64ID:bEILeQs7
>>825 octave
https://ideone.com/BkciwT
870デフォルトの名無しさん
垢版 |
2020/11/02(月) 04:28:03.49ID:2/AbCXtL
>>825
Perl
https://paiza.io/projects/Ol_sOAbb2ZYW4hIDFLj2wQ

正規表現使ってみました。
2020/11/02(月) 04:45:05.89ID:BfD57ecO
"trick"と"treat"を受理するオートマトンを作って
入力文字列から1文字ずつ与えて状態遷移(または待機)させていく
末尾まで先に受理されたほうを答えとする
みたいなことだけ考えた
2020/11/02(月) 04:48:28.19ID:BfD57ecO
けど実装すると無駄にでかくなりそう
2020/11/02(月) 10:04:22.80ID:/BOVDIIM
オートマトンって言語でなんか表現できる構造ある?
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パターン)
....

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

パラボラアンテナの半径を100とし、原点を中心にx軸上に焦点が来るように配置する。x軸と平行に電波がアンテナに入ってきて、入射角と反射角が等しくなるように電波が反射する。
このとき、どの場所で反射しても、反射した電波を表す直線が理論上の焦点に十分近づくことを示せ。
2020/11/02(月) 12:23:58.15ID:UfGVYnOo
まじでセンスないな
2020/11/02(月) 12:36:09.22ID:zo3ZJgwO
パラボラアンテナの半径ってどこのことだよ
2020/11/02(月) 13:43:55.18ID:gftnEWfN
common lisp
https://ideone.com/GZ8Wbt
うーん微妙
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
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" ]
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");
}
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
883869
垢版 |
2020/11/02(月) 20:41:57.79ID:PEXljxha
>>825 octave
https://ideone.com/TknUHT
・残り文字数数える関数fがガバガバだったので修正
884デフォルトの名無しさん
垢版 |
2020/11/02(月) 20:50:30.27ID:LqVECFSh
>>882
Java
https://paiza.io/projects/k8RErATdGPNrkP2gRrOmSw
2020/11/02(月) 20:55:38.75ID:UfGVYnOo
>>882
実用的じゃん
2020/11/02(月) 21:39:44.31ID:PEXljxha
>>882 octave
https://ideone.com/un3EHy
2020/11/02(月) 22:00:22.68ID:PEXljxha
>>882 octave
https://ideone.com/kETWpz
・若干の変更
2020/11/02(月) 22:02:25.78ID:i1cL0pVh
>>875
消えろ
889デフォルトの名無しさん
垢版 |
2020/11/02(月) 22:12:37.48ID:2/AbCXtL
>>882
Perl
https://paiza.io/projects/3i_gH0-CGf93OpsUWJzFVg
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))
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) ]
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}
は同じやり方になるので二重カウントしないこと
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
2020/11/03(火) 08:10:12.54ID:WKYb8LN0
>>893
きれいだな
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}}
2020/11/03(火) 09:10:16.73ID:psuX0FGw
美しさだけなら某集合論用処理系に勝る
ものはないと思うが....
>>891の短時間回答能力とHaskelの潜在能力は
驚嘆すべきかも
2020/11/03(火) 09:15:47.91ID:psuX0FGw
間違ってたときのコード貼ってしまったw
~a+~b=A
とかは要らなかったw
a+b=A
とかだけでよかった
a \cup bが普通の和集合ね。
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%
899デフォルトの名無しさん
垢版 |
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
2020/11/04(水) 00:20:22.20ID:kNuSoIVx
windows知らんけど
バッチ・ファイルすげぇなww
2020/11/04(水) 20:24:03.31ID:uO47xEs9
>>892 Ruby
https://ideone.com/uEqDoX
2020/11/05(木) 03:19:19.40ID:EuRO0zRP
>>892
C++
https://ideone.com/YmUte9
2020/11/05(木) 20:02:28.58ID:pDv0veJc
お題
'□'(正方形)と'_'(空白)で表される図形を45度回転して描画せよ。

[例1]


/\
\/


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

/\
\/\
/\/ /\
\/\/\/
 \/\/
  \/
2020/11/05(木) 20:47:59.87ID:uObXfCng
デカくなっててワロタ
良さげなお題
2020/11/05(木) 23:31:16.69ID:5bWXoO+B
>>903 html
<textarea style="transform:rotate(45deg)">
___□
□□_□
_□□□
</textarea>
2020/11/05(木) 23:39:12.30ID:W9kenpkY
>>905
すげぇな
今はCSSでこんなことまでできるのか
2020/11/05(木) 23:40:00.35ID:uObXfCng
:scale(2)もしとけ
2020/11/06(金) 01:21:28.35ID:DUBJiW5Z
>>903
haskell
https://ideone.com/VwHiJD
909デフォルトの名無しさん
垢版 |
2020/11/06(金) 03:01:56.79ID:2mWV4tVe
>>892
Java
https://paiza.io/projects/zGMV5xqRPjP1fxjo1Zu1Nw
910253
垢版 |
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
2020/11/06(金) 13:24:39.43ID:DUBJiW5Z
>>903
haskell
素直に内包表記使ったVer.
https://ideone.com/gA63Fi
912デフォルトの名無しさん
垢版 |
2020/11/07(土) 15:16:17.29ID:dGj5mxP2
sed 's/□/◇/g'

あ、いや、なんでもないです。忘れてください。
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
2020/11/07(土) 19:47:28.12ID:/E6xY+R5
バッチでやるとかいい根性してる
915デフォルトの名無しさん
垢版 |
2020/11/07(土) 21:06:37.63ID:anINQjB0
>>903 Common Lisp
https://ideone.com/CMyiD0
2020/11/07(土) 22:21:52.44ID:alCltY04
>>907
scale(1.41421356)でしょ
2020/11/07(土) 23:04:28.88ID:zLEnd997
>>892
ビット操作で直接作れた
https://paiza.io/projects/JwD_YC7dX2RRZz8G9ydnaA
2020/11/08(日) 00:05:04.78ID:DLA7KrcO
>>913
バッチファイル兄貴いいぞ
もっとやれ
2020/11/08(日) 00:15:55.29ID:ct8WHwWl
バッチよくやってるな
batにトランスパイルできるもっといい感じの構文の言語とかないの
2020/11/08(日) 02:24:23.73ID:vLTv8mzL
バッチで>>892やる猛者はいないのか?
QZならできそうだがだんまりか?
2020/11/08(日) 02:34:25.46ID:HKu5GaPi
>>917
このコードZen2までのAMDのCPUだと多分とんでもなく遅くなる
ここで使ってるpdep命令がintelのやZen3と比べて100倍以上遅いから
2020/11/08(日) 03:02:51.65ID:H3a4zXqH
>>920
私は C しか書けません
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
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

他、クラスフィールドやマジックメソッドなど
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
}
トランスパイル結果略
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系ですね。
2020/11/08(日) 05:16:53.07ID:YnyAcD/m
>>926
moongiftに紹介記事があった。
https://www.moongift.jp/2019/08/batsh-bashbatchのスクリプトを生成するプログラミング言語/
…そしてアドレスバー見たら既にお気に入りに登録されていた…
2020/11/08(日) 08:18:54.23ID:ct8WHwWl
>>926
これきれいだな
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)種類だった。
2020/11/09(月) 23:52:24.94ID:XExSNiE1
11111111 は43?
111111111はオンラインコンパイラでタイムアウトorz
2020/11/10(火) 00:38:20.57ID:duQVrAg3
面白そうなお題
2020/11/10(火) 00:38:46.30ID:qJS2/p90
111111111 は650かな?
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
2020/11/10(火) 02:25:54.45ID:903MPdZb
batコーイ!!
2020/11/10(火) 02:49:15.00ID:VuEsWlWs
>>929
https://ideone.com/8nuT5d
力任せなコードだけどどうにか時間内に終わった
936デフォルトの名無しさん
垢版 |
2020/11/10(火) 13:44:24.83ID:3xGJBleZ
典型的なdp問題じゃねえの
937929
垢版 |
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)で想定解追加
938253
垢版 |
2020/11/11(水) 00:47:47.87ID:vox+S3u3
(´・ω・`)
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%ほどになるのか
勉強になった
940デフォルトの名無しさん
垢版 |
2020/11/12(木) 15:39:00.87ID:VX9X1ew1
お題1
1〜nまでの偶数をランダムに出力してください

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


入力: 1 2 10
出力:
1
1
3
9
1
7
5
2020/11/12(木) 15:58:04.88ID:uK53dAw4
>>940 を読んで、やっぱり日本語は非論理的な言語だな、と思った。
942デフォルトの名無しさん
垢版 |
2020/11/12(木) 16:04:34.29ID:VX9X1ew1
書き手の問題だと思うよ
2020/11/12(木) 18:42:17.55ID:HU5jtk1k
オレは深まりゆく秋を感じた
944デフォルトの名無しさん
垢版 |
2020/11/12(木) 19:26:25.71ID:VX9X1ew1
ふーけゆくー秋の夜ー
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
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]
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
2020/11/13(金) 22:58:48.40ID:ghr6tNw2
オンラインでbat動かせるサイトない?
>>947試して見たいんやけど
2020/11/13(金) 23:20:18.52ID:a1Z/nYk3
bat兄貴天才やな
2020/11/14(土) 00:46:02.44ID:WHpB6hAc
>>948
それをお題にするのはありかも
947を読んで同じ動きをするプログラムを書け、とかね
2020/11/14(土) 06:23:08.91ID:rQXll7XK
過疎るのもわかるわ
952デフォルトの名無しさん
垢版 |
2020/11/15(日) 04:26:34.92ID:UMNa3GdF
>>940
Java
https://paiza.io/projects/IUNanoZeum1nhkVUBUqXZA
953デフォルトの名無しさん
垢版 |
2020/11/15(日) 18:33:50.31ID:UMNa3GdF
お題
天気のデータを読み取って翌日の天気は前日と同じと予測しそれが当たる確率を求めてください

入力: 曇,晴,曇,曇,晴,曇,曇,雨,雨,雨,曇,曇,晴,曇,雨,曇,雨,曇,曇,曇,晴,曇,雨,晴,晴,晴,晴,曇,晴,曇,晴
2020/11/15(日) 18:40:06.62ID:KOddDUPF
>>953 Ruby

gets.split(?,).each_cons(2).tap{|a| p 1.0 * a.count{|b| !b.uniq[1]}/ a.size}

# => 0.3333333333333333
955デフォルトの名無しさん
垢版 |
2020/11/15(日) 18:41:22.95ID:UMNa3GdF
はやいな
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
2020/11/15(日) 20:22:58.52ID:KOddDUPF
>>956
.split(`,`) では
2020/11/15(日) 20:23:55.05ID:KOddDUPF
すまん。バッククウォートだった。
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
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
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
962デフォルトの名無しさん
垢版 |
2020/11/20(金) 19:52:50.75ID:HawO8Ftl
>>940
Kotlin
https://paiza.io/projects/AeE4_7EmFluzVxuefBJmDw
963とくめい
垢版 |
2020/11/24(火) 01:34:45.23ID:SQQDs1Pp
kakeruyamasato@gmail.comこのメアドを悪用してみせて
2020/11/24(火) 08:07:25.33ID:aaTbFie9
通報しますた
965デフォルトの名無しさん
垢版 |
2020/11/25(水) 01:49:24.25ID:O2Mln20T
>>953
Kotlin
https://paiza.io/projects/-bhKDI048mc0kOJzIFqOHA
2020/11/26(木) 19:02:45.00ID:ACzSTlzf
>>940
a,b,c = [1,2,10]
puts ((a..c) % b).to_a.shuffle
967デフォルトの名無しさん
垢版 |
2020/11/27(金) 01:08:20.91ID:bIFui41M
>>966
なんていう言語?
2020/11/27(金) 02:57:17.73ID:ocMZsxYX
>>967
rubyでしょ
969デフォルトの名無しさん
垢版 |
2020/11/27(金) 19:31:40.66ID:Pnsgs34G
rubyだったか。
2020/11/28(土) 00:37:28.60ID:PcPNtVOH
%がわからないって怒られた
971デフォルトの名無しさん
垢版 |
2020/11/28(土) 07:20:49.13ID:mYohOVrw
お題
以下を表示する
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
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
2020/11/28(土) 08:05:44.72ID:nEfgRBi9
意外と難しいな
2020/11/28(土) 08:40:11.81ID:wyvnQiBB
>>971 Ruby

puts Date::DAYNAMES.rotate

# => Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
975デフォルトの名無しさん
垢版 |
2020/11/28(土) 09:00:26.43ID:2Muxtrov
>>966
問題の解釈違わねえ?
976デフォルトの名無しさん
垢版 |
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"))
2020/11/28(土) 11:36:22.72ID:FGpMIdZG
>>970
( 1..10 ) % 2

range に、% というメソッドは無い!
2020/11/28(土) 12:27:13.39ID:GOv1h+p2
>>977
NEWS for Ruby 2.6.0
2.5.0 以降の変更
https://docs.ruby-lang.org/ja/2.6.0/doc/news=2f2_6_0.html
> Range
> 新規メソッド
> Range#% が追加されました。 [feature#14697]
2020/11/28(土) 12:38:57.57ID:L52xXSLK
予想通りの流れになってくれて何より
980977
垢版 |
2020/11/28(土) 14:12:40.28ID:FGpMIdZG
ruby -e 'p ( ( 1..5 ) % 2 ).to_a'
#=> [1, 3, 5]

2 は、各ステップの大きさ
2020/11/28(土) 16:09:49.88ID:myGQAvEM
ダメだ
オンラインでRuby 2.6使えるとこ見つからない
どっかない?
982デフォルトの名無しさん
垢版 |
2020/11/28(土) 16:34:18.46ID:gB71rnHS
>>981
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
https://www.jdoodle.com/execute-ruby-online/

ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]
https://techiedelight.com/compiler/

ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
https://paiza.io/en/projects/new?language=ruby
2020/11/28(土) 16:39:08.00ID:nEfgRBi9
jdoodle初めて知った
手元の汚い環境にもrepelにもpaizaにもなかったとき使おう
2020/11/28(土) 17:26:12.48ID:FGpMIdZG
paiza は、いつも新しい

codepad は、古いような気がする
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 もある
2020/11/28(土) 17:57:16.56ID:myGQAvEM
>>982
thx
でもiphoneでどのサイトもコピペができないorz
なんでなんだろう?
2020/11/28(土) 18:01:21.11ID:myGQAvEM
とりあえず自分で打ち込んで試した
shuffleはランダムに並べ替えみたいだからちょっと違うかな
2020/11/28(土) 22:44:23.07ID:wyvnQiBB
>>987
shuffleの代わりにsampleを使うといい
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
990デフォルトの名無しさん
垢版 |
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
991デフォルトの名無しさん
垢版 |
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が土曜になってしまい、
それを並び替えてから出力する必要があって少し複雑になった。
992253
垢版 |
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
993253
垢版 |
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
994デフォルトの名無しさん
垢版 |
2020/11/29(日) 20:08:13.17ID:idUZlJAo
>>971
Java
https://paiza.io/projects/F3UDtssyIBLD9KwEcaTfjA
995デフォルトの名無しさん
垢版 |
2020/11/29(日) 20:39:34.37ID:idUZlJAo
お題
配列を入力として受け取り
値が連続するサブ配列のうち、合計が最大のものを出力してください


入力:[−2, 1, −3, 4, −1, 2, 1, −5, 4]
出力:[4, −1, 2, 1]
2020/11/29(日) 21:07:17.97ID:POdKASdd
>>995
>サブ配列
の定義を教えてください
2020/11/29(日) 21:15:00.96ID:sOEBQUsx
値が連続しないサブ配列とは?
998デフォルトの名無しさん
垢版 |
2020/11/29(日) 21:21:35.35ID:idUZlJAo
>>996
教えません

>>997
[1, 4, 2, 1, 4]
とか
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を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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