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

■ このスレッドは過去ログ倉庫に格納されています
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/
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だったらどうなるかを紙にでも書いて考えればいずれわかると思う。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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