プログラミングのお題スレ Part18at TECH
プログラミングのお題スレ Part18 - 暇つぶし2ch100:デフォルトの名無しさん
20/07/18 15:34:22.37 55gPHPOJ.net
新しいことを学ぶのは素晴らしいと思うけど今まで2週間以上同じスレに居たことがないから責任持てないなぁ
現場でバリバリ使う為にはε-非決定性オートマトンとかも知っとかないと実用的じゃなくなるから学習に意味を見いだすのはかなり難しいと思うよ

101:
20/07/18 15:41:54.65 KIRMqycZ.net
>>100
非決定オートマトンを決定性オートマトンにする、とかいうお題は、やっぱりマニアックすぎますかね?
今そういう本をよんでポチポチコードを書いているので、需要があるようなら出題&採点してもいいかなって思ってます

102:デフォルトの名無しさん
20/07/18 15:47:29.51 55gPHPOJ.net
>>101
需要があるかは分からないけどとてもいいと思うよ

103:デフォルトの名無しさん
20/07/18 15:58:37.25 n7a2F8Nj.net
>>102
いなくなるかもしれないなら解答例貼っておいてよ

104:デフォルトの名無しさん
20/07/18 16:51:46.46 2TKjWEFt.net
sedでいいんじゃね

105:デフォルトの名無しさん
20/07/18 18:01:09.47 k5pKf1DO.net
>>81
まあしかし何かが出題されたら必ず誰かが解かねばならないわけでもないしな。義務は何もないからこうでなければいけないという事もない。

106:69
20/07/18 19:43:00.59 BZh66Ti/.net


107:rel="noopener noreferrer" target="_blank" class="reply_link">>>74 ありがとう❣、チャレンジして良かったよ! 出題者からはなんの評価も解説もされないので そういう反応が返って来ると嬉しい。 また、次のモチベーションに繋がる。 教科書とか勉強中のコラムとかコーヒーブレイクみたいな 息抜き程度の頭の体操になるような手軽なお題の方が答えやすいね。 結局は出題者も回答者も自己満足でしか無いから、 初級~中級者向けくらいが丁度良いかも?



108:デフォルトの名無しさん
20/07/18 20:06:14.32 tp8HW1uL.net
>>69
こういうコードを見ると、jagarikin の「スーパー鳥スロット」を思い出すw
画像ファイルが1つもなく、こういうコードばっかりだったw

109:デフォルトの名無しさん
20/07/18 20:44:45.69 naIVYT0v.net
>>107
コードのキレイさなら>>70かもしれませんが
お題はコードを出力するのではなくハート形を出力せよとのことでしたから
初心者がチャレンジしたコードなのでスマートな書き方でないのは御勘弁下さいorz

110:68
20/07/18 21:39:17.47 yeg1h1ii.net
いろんな回答を見たかったので早期の論評は控えてました。
>>69の出力は出題者もきれいだなって思います。
想定していたコードはどちらかいうと>>70に近くて
URLリンク(codepad.org)
こんな感じの簡単な式(x^2+y^2<100-|x|y)でも充分かなと思ってました。
ハート形を生成できる式はいくつか知られているので、バリエーションを探ってみるのはいいかなと思います。

111:蟻人間
20/07/19 13:58:11.60 GV3E92FC.net
(1) URLリンク(gist.github.com)
二次元タートルグラフィックスで八角形を描けたよ。
お題: (1)と(2)のリンクを参考にコッホ曲線を描画せよ。
(2) URLリンク(www.f.waseda.jp)

112:蟻人間
20/07/19 14:05:25.72 GV3E92FC.net
>>110 答え:
function koch(degree, step) {
  if (degree == 0) {
    walk(step);
  } else {
    koch(degree - 1, step/3);
    turn_angle(60);
    koch(degree - 1, step/3);
    turn_angle(-120);
    koch(degree - 1, step/3);
    turn_angle(60);
    koch(degree - 1, step/3);
  }
}
function draw() {
  set_pos(0, 0, 0);
  set_dir(100, 0, 0);
  koch(5, 75);
}

113:蟻人間
20/07/19 14:45:30.46 GV3E92FC.net
小さなお題: >>110 の(1)のturn_dir関数とturn_angle関数を3次元に拡張し、
3次元タートルグラフィックスを可能にせよ。
ただし、turn_dirの引数は長さ1の方向ベクトルとし、turn_angleの引数は角度とする。
turn_dirは、引数dzが0のとき、変更前と同じ動作にせよ。
また、turn_angleの引数にもう一つの角度を追加し、追加した角度がゼロのとき、
変更前と同じ動作にせよ。
ヒント:四元数

114:デフォルトの名無しさん
20/07/19 14:48:01.51 EiEVeWaP.net

66 名前:デフォルトの名無しさん[sage] 投稿日:2020/07/18(土) 00:01:47.57 ID:tp8HW1uL [1/2]
ついに蟻人間は、3次元まで行ってしまったか
その内、Quaternion(4元数)がどうたらこうたらと、言い出しかねないw

115:蟻人間
20/07/19 21:17:44.37 T8vbWyFG.net
さて、解けた者は挙手したまえ。

116:デフォルトの名無しさん
20/07/19 21:45:13.46 h5vFOzT4.net
頭が悪いことがばれたからって
必死に数学の知識を見せようと頑張ってる
でも頭の悪さが随所に滲み出てる
自覚のないアホ

117:蟻人間
20/07/19 21:56:49.40 GV3E92FC.net
>>115 数学出来るなら手伝ってくれよ。。。これから面白くなるから。
function turn_angle(angle1, angle2) {
// x-y平面上のangle1度の方向ベクトル(dx, dy)。
var dx = Math.cos(angle1 * Math.PI / 180);
var dy = Math.sin(angle1 * Math.PI / 180);
// (dx, dy, 0)をx軸を中心にangle2度回転したものを(dx, dy, dz)とする。
...(ここに何か書く)...
// 実際に回転させる。
turn_dir(dx, dy, dz);
}

118:デフォルトの名無しさん
20/07/19 21:57:24.56 5kiTFqsE.net
誰もイキらずに淡々と問題と答えのレスだけ並んでく雰囲気は良さを感じたけど
やっぱクソコテって怖いな

119:蟻人間
20/07/19 22:06:51.03 GV3E92FC.net
>>116
dz = dy * Math.sin(angle2 * Math.PI / 180);
dy *= Math.cos(angle2 * Math.PI / 180);
次は、三次元のturn_dirね。数学、スゴクデキルんでしょ?

120:蟻人間
20/07/19 22:12:10.73 GV3E92FC.net
お題: JavaScript
function turn_dir(dx, dy, dz) {
// (dx, dy, dz)は長さ1の方向ベクトル。
// 長さ1の方向ベクトル(turtle_dx, turtle_dy, turtle_dz)を(dx, dy, dz)だけ回転させる。
...(ここに何か書く)...
}

121:蟻人間
20/07/19 22:16:20.98 GV3E92FC.net
♪はい、コーディングいってみよー!
はいはいはい、はいはいはい!

122:蟻人間
20/07/19 23:32:08.26 T8vbWyFG.net
俺はそういう悪評トリックに引っ掛からないよ。間違いは的確に指摘頂きたい。

123:デフォルトの名無しさん
20/07/20 06:57:18.16 P7t0RBc6.net
>>110-121
(1)のソースにオービットコントロールを付けると楽しいですよ。
<!-- OrbitControls.jsファイルソース読込 -->
<script src="./three.js-master/examples/js/controls/OrbitControls.js"></script>
//controls変数宣言追加
var scene, renderer, camera, controls;
function init() {//イニシャライズの
・・・
camera.lookAt(0, 0, 0);
//controlsインスタンス生成してカメラとレンダラー渡すだけ
controls = new THREE.OrbitControls( camera, renderer.domElement );
scene = new THREE.Scene();
//ついでに座標軸表示もおすすめ
scene.add( new THREE.AxisHelper(50) );
}
URLリンク(i.imgur.com)

124:デフォルトの名無しさん
20/07/20 07:42:33.17 ozWDjdlg.net
>>118
やってみたよ
function turn_angle(angle1, angle2) {
if( !angle2 || angle2==0){
turn_dir(Math.cos(angle1 * Math.PI / 180), Math.sin(angle1 * Math.PI / 180), 0);
}else{
// x-y平面上のangle1度の方向ベクトル(dx, dy)。
var dx = Math.cos(angle1 * Math.PI / 180);
var dy = Math.sin(angle1 * Math.PI / 180);
// (dx, dy, 0)をx軸を中心にangle2度回転したものを(dx, dy, dz)とする。
var dz = dy * Math.sin(angle2 * Math.PI / 180);
//dy *= Math.cos(angle2 * Math.PI / 180);
turtle_dz = dz;
// 実際に回転させる。
turn_dir(dx, dy, dz);
}
}
function draw() {
set_pos(0, 0, 0);
set_dir(0, 100, 0);
for (var i = 0; i < 18; ++i) {
walk(15);
//turn_angle(45);
turn_angle(45, 20);
}
}
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

125:蟻人間
20/07/20 15:09:49.43 rHNryQzp.net
傾けた木が平面にならない。
URLリンク(github.com)
(4) URLリンク(github.com)
URLリンク(twitter.com)
何でだろ。
URLリンク(github.com) からダウンロードして下さい


126:。 お題: (4) を修正して木が平面になるようにせよ。 (deleted an unsolicited ad)



127:デフォルトの名無しさん
20/07/20 16:08:13.13 UHinuGOV.net
お題じゃなくて作成依頼ですか?w

128:蟻人間
20/07/20 16:16:33.54 6GFyBW1T.net
こういうのは数学が鬼ズバできる猛者に任せたい所だが。。。
報酬は出しちゃいかんのか。

129:デフォルトの名無しさん
20/07/20 17:25:48.10 uvZgkaZD.net
出ないならやらない

130:デフォルトの名無しさん
20/07/20 17:58:58.92 8mFfSXNu.net
いや、そういう猛者がいるところに依頼してこいよ
報酬出すんならランサーズとかにでも行ってこい
なんでここで話題にするんだ

131:デフォルトの名無しさん
20/07/20 17:59:50.36 8mFfSXNu.net
そういう意味不明な言動を繰り返すから糞コテ呼ばわりされるって気付いて

132:蟻人間
20/07/20 18:37:44.48 rHNryQzp.net
寺へ行きました。すみません。

133:デフォルトの名無しさん
20/07/20 23:40:32.05 5ka8Ymx5.net
>>124
なにこれ激重。1~3はIEでも動くけど4はクロームでも少し時間かかる。
URLリンク(i.imgur.com)
舞フレームごとに書き出してるんかな?
3Dオブジェクトコンテナにでも入れた方がいいのかな?

134:蟻人間
20/07/20 23:47:38.07 6GFyBW1T.net
やろうとしてるのは、三次元フラクタルと臓器の実体化だから、超複雑な図形を再帰で描くことになる。再帰が多ければ確かに計算量は爆発するよ。

135:デフォルトの名無しさん
20/07/20 23:52:17.88 /f9oEP+1.net
いい加減IE捨てろよ

136:アンスタ7.2日目
20/07/20 23:54:27.58 5ka8Ymx5.net
>>124
URLリンク(i.imgur.com)
タートルグラフィックスTreeの平面化
URLリンク(i.imgur.com)
3次元にしたいのか平面にしたいのかどっちなんだか。。。
変更箇所↓
function turn_angle(angle1, angle2=0) {
 var dx = Math.cos(angle1 * Math.PI / 180);
 var dy = Math.sin(angle1 * Math.PI / 180);
 angle2 += turtle_spin;
 var dz = dy * Math.sin(angle2 * Math.PI / 180);
 //dy *= Math.cos(angle2 * Math.PI / 180);
 turtle_z = dz;
 turn_dir(dx, dy, dz);
}
function draw() {
 //set_pos(0, 0, 0);
 set_dir(0, 100, 0);
 //koch(6, 50);
 set_pos(0, 0, 0);
 //set_dir(0, 100, 100);
 tree(10, 40, 10);
}

137:デフォルトの名無しさん
20/07/20 23:57:55.33 5ka8Ymx5.net
>>133
クロームより軽いから、捨てられなくて。。。

138:蟻人間
20/07/21 00:03:34.18 iLwMnecK.net
>>134
その事例についてはteratailに移動しましたので、ここでは打ち切りとさせて下さい。
URLリンク(teratail.com)

139:デフォルトの名無しさん
20/07/22 22:25:22.87 ILXZvJ+B.net
「1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍」
…が、なんとなく成り立っているように感じられるプログラムを作って発表せよ。

140:デフォルトの名無しさん
20/07/22 22:30:15.48 IwIxQ1Ze.net
お題: ランダムな整数が格納された長さNの配列から、偶数の要素のみを抜き出せ
Nは任意とする

141:デフォルトの名無しさん
20/07/22 22:57:06.83 EawLE7Sy.net
>>138 Ruby
p gets.split.map(&:to_i).select(&:even?)

142:デフォルトの名無しさん
20/07/23 00:07:39.47 DuCdQo+y.net
>>137
面白いものができてしまったわ
class Integer
def +(other) 200 end
def /(other) 10 end
end
p "1+1は2じゃないぞ。オレたちは1+1で#{1 + 1}だ!#{rate = 200 / 2}倍だぞ#{rate}倍"
# => "1+1は2じゃないぞ。オレたちは1+1で200だ!10倍だぞ10倍"

URLリンク(repl.it)

143:デフォルトの名無しさん
20/07/23 10:38:13.83 bJ7HfHNw.net
>>138 ocaml
URLリンク(ideone.com)
>>138 octave
URLリンク(ideone.com)

144:デフォルトの名無しさん
20/07/23 22:03:16.45 VBywRp49.net
>>138 Perl5
@b = grep{$_ ^ 1} @a;

145:デフォルトの名無しさん
20/07/23 23:12:54.26 QnunbgyT.net
>>138
Java
URLリンク(paiza.io)

146:デフォルトの名無しさん
20/07/24 00:24:32 F0SZWNxk.net
>>138 Python
import random
N = 10
MAX = 100
[x for x in random.sample(range(MAX), N) if x % 2 == 0]

147:デフォルトの名無しさん
20/07/24 03:32:41.61 6ZonvnML.net
>>137
なんとなく結果を2進数(あるいは通常の10進数以外の表現)で出せば良いだけのような気がするが・・・
Perl だとこんな感じで 10 が出る。
printf "%b\n", 1 + 1;

148:デフォルトの名無しさん
20/07/24 03:47:06.33 6ZonvnML.net
>>138
Kotlin 及び Kotlin Script ではこんな風になる(a が元の配列または List)。
val b = a.filter { (it % 2) == 0 }
もちろん比較部分は (it and 1) == 0 等でも良い。it が偶数の時に true になりさえすればなんでも良い。
配列の要素数の N についてはここでは考える必要なし。
要素の型が Int かどうかも考える必要なしだが、% 2 の計算ができないとか結果が Int の 0 と比較できなければコンパイルエラー、または Script なら読んだ直後の文法チェック時にエラーだと思う。

149:デフォルトの名無しさん
20/07/25 07:02:03.31 j1aQFTSL.net
>>138Julia
a=1:10
a[iseven.(a)]

150:デフォルトの名無しさん
20/07/25 11:32:49.78 vIjhxGJs.net
大抵の言語でfilter modulo一発だよね。
お題www

151:デフォルトの名無しさん
20/07/26 11:42:26.03 467XWCJo.net
>>138
ランダムは副作用なので、ちと面倒臭い。
(厳密には擬似乱数を作る為の種(newStdGen)だけが副作用)
Haskell
import System.Random
main = f 10 >>= print
f :: Int -> IO [Int]
f n = newStdGen >>= return.filter even.take n.randomRs (1,100)
実行結果
[56,70,100]
型指定しないと型推論が働かない。
(生成される乱数が整数とは限らない為)
戻り値は型で分かる通り、普通のリストでは無くIOなリスト。
newStdGenを使っているので、IOな値を返さないといけない。
(printもIO ()を返すのでreturnをprintに置き換えて直接出力も可能ではある)
randomRs (1,100) で1から100までの乱数の無限リストを生成。
後はtakeで無限リストから任意の個数を取り出してfilterするだけ。
(takeとfilterは順番が逆だと乱数の無限リストから偶数を任意の個数取り出すので問題の意図と違ってしまう)
問題が「出力しろ」では無く「抜き出せ」なので、あえてprintは関数の外に置いた。

152:デフォルトの名無しさん
20/07/26 11:54:08.47 arqbmdN/.net
Haskellのコード見たいと思ってた

153:デフォルトの名無しさん
20/07/26 11:55:36.48 Lwmxod4b.net
流行らなかった訳が分かった

154:デフォルトの名無しさん
20/07/26 12:16:01.64 yLhsD6tn.net
>>151
まあね。
安全なコードを書き易いと取るか、面倒くさいと取るかやね。

155:デフォルトの名無しさん
20/07/26 12:31:12.02 XQciIU0B.net
お題
2つの文字列の差を[]で囲って出力してください
例1
入力:abc adc
出力:a[b]c
例2
入力:abc acd
出力:a[bc]
例3
入力:abc bcc
出力:[ab]c

156:デフォルトの名無しさん
20/07/26 15:30:12.41


157:yLhsD6tn.net



158:デフォルトの名無しさん
20/07/26 17:41:12.51 1PJx+gwa.net
やっぱフラグしかないのか?

159:デフォルトの名無しさん
20/07/26 19:21:26.42 +ODzYEeD.net
>>153 Ruby
def resolve( s )
f = true
ss = s.split.map{|w| w.chars }
ss[0].zip( ss[1] ).inject(''){|r, (c,d)|
r << ( (f)? '[': ']' ) if (c == d) != f
f = c == d
r << c
} + ((f)? '' : ']')
end
[ "abc adc", "abc acd", "abc bcc" ].each{|s|
puts "入力:#{s}"
puts "出力:#{resolve( s )}\n\n"
}

160:デフォルトの名無しさん
20/07/26 23:12:10.92 3QUkzPB/.net
>>155
確かこんなのあったな~・・・と、inword/outword関数の相互再帰で書いてみた。
Haskell
main = (putStrLn.f "abcdefrt") "acdgefgg"
f xs ys | g xs ys =[]
f (x:xs) (y:ys) | x == y = outword (x:xs) (y:ys)
f xs ys = inword xs ys
inword xs ys | g xs ys = ']':[]
inword (x:xs) (y:ys) | x == y = ']':x:outword xs ys
inword (x:xs) (_:ys) = x:inword xs ys
outword xs ys | g xs ys = []
outword (x:xs) (y:ys) | x == y = x:outword xs ys
outword (x:xs) (_:ys) = '[':x:inword xs ys
g xs ys = or [null xs, null ys]

161:デフォルトの名無しさん
20/07/29 09:26:50.38 yJ6wpcWu.net
お題1
じゃんけんを実装してください
1 = ぐー
2 = ちょき
3 = ぱー
入力: 1
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです
お題2
あなたの勝率を指定できるようにしてください
勝率は0.0~1.0で入力します
入力: 1 0.7
出力: あなた=ぐー コンピュータ=ちょき あなたの勝ちです

162:デフォルトの名無しさん
20/07/29 22:59:47.88 tovqwAmw.net
>>158 Ruby
JANKEN = %w[Goo Chocky Parr]
KEKKA = %w[Win Lose Draw]
#お題1
odai1 = -> n do
    r = rand(3)
    'You: %s, Com: %s. %s' % [JANKEN[n - 1], JANKEN[(n + r) % 3], KEKKA[r]]
end
puts odai1[1] # => You: Goo, Com: Chocky. Win
puts odai1[2] # => You: Chocky, Com: Goo. Lose
puts odai1[3] # => You: Par, Com: Par. Draw
#お題2
odai2 = -> (n, p) do
    r = rand < p ? 0 : rand(2) + 1
    'You: %s, Com: %s. %s' % [JANKEN[n - 1], JANKEN[(n + r) % 3], KEKKA[r]]
end
puts odai2[1, 0] # => You: Goo, Com: Par. Lose
puts odai2[2, 1] # => You: Goo, Com: Chocky. Win
puts odai2[3, 0.3] # => You: Par, Com: Chocky. Lose
puts odai2[3, 0.3] # => You: Par, Com: Goo. Win
puts odai2[3, 0.3] # => You: Par, Com: Par. Draw
puts odai2[3, 0.3] # => You: Par, Com: Chocky. Lose

163:デフォルトの名無しさん
20/07/29 23:09:16.98 tovqwAmw.net
下から5行目タイポ
puts odai2[2, 1] # => You: Chocky, Com: Parr. Win

164:デフォルトの名無しさん
20/07/29 23:11:53.00 z6Fnx3oM.net
Parr
出たか連続校正レス君

165:デフォルトの名無しさん
20/07/29 23:15:30.50 zhbinuHB.net
別にええやろ

166:蟻人間
20/07/29 23:42:09.78 hGtKVe2E.net
子ども国会で、グー、チョキ、パーのつづりを次のように閣議決定しました。
グーはgoo、
チョキはchoki、
パーはpar、
ジャンケンはJankenとする。

167:デフォルトの名無しさん
20/07/30 00:20:11 aEaasmNp.net
Unicode の \u270A \u270B \u270C

168:デフォルトの名無しさん
20/07/30 15:16:52 cH8Va6i2.net
自然数AとB


169:があります A * B ではない方法で、AとBを掛けた結果を求めなさい。 ただし、AとBは4バイトの数値型で、どのような値が入ってきても 実施してからなるべく近い時間で計算終了する方が高得点とします。



170:デフォルトの名無しさん
20/07/30 15:58:10.10 aEaasmNp.net
>>165 Ruby
def multiply( a, b )
ans = 0
while a > 0
ans += b if a.odd?
a >>= 1
b <<= 1
end
ans
end
multiply( 0x12345678, 0x87654321 ) #=> 693779765864729976

171:デフォルトの名無しさん
20/08/01 20:01:40.49 eF75V+Af.net
>>165
import Math;
int kakezan(a, b) {
int min, max = Math.sort([a, b]);
if(min == 0) return 0;
return Math.square(min) + kakezan(min, max - min);
}
printf(kakezan(0x12345678, 0x87654321)); // 693779765864729976

172:デフォルトの名無しさん
20/08/01 21:52:47.76 xRTQ61eG.net
>>165
function mul(a, b) {
let prod = 0;
const unit = Math.sign(a) + Math.sign(b) ? 1 : -1;
for (let i = 0; i < Math.abs(a); i++)
for (let j = 0; j < Math.abs(b); j++)
prod += unit;
return prod;
}
console.log(mul(-6, -7)); //=> 42
console.log(mul(-6, 7)); //=> -42
低得点ww

173:デフォルトの名無しさん
20/08/04 03:43:27.41 DYgISIVe.net
お題: 文字列の格納された配列から重複した文字列を削除し昇順にソートせよ
['apple', 'banana', 'apple', 'chikuwa']

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

174:デフォルトの名無しさん
20/08/04 03:55:23.60 gT//RRjC.net
>>169 Ruby
['apple', 'banana', 'apple', 'chikuwa'].uniq.sort #=> ["apple", "banana", "chikuwa"]

175:デフォルトの名無しさん
20/08/04 05:05:40.50 YeoxtHaI.net
>>153 Ruby
def resolve( str )
res = String.new # 戻り値
flag = false # [ だけを付けて、まだ ] で閉じていない状態が、true
ary = str.split # 空白で、2つに分離する
ary[ 0 ].chars.zip( ary[ 1 ].chars ) do |c0, c1| # 1文字ずつ比較する
if c0 == c1
if flag
res = res + ']' + c0
flag = false
else
res += c0
end
else
if flag
res += c0
else
res = res + '[' + c0
flag = true
end
end
end
res += ']' if flag # もし閉じていない場合は、閉じる
res
end
[ "abc adc", "abc acd", "abc bcc" ].each{ |str|
print "入力: #{ str }\n" + "出力: #{ resolve( str ) }\n\n"
}

176:デフォルトの名無しさん
20/08/04 18:06:57 Bm48LwqI.net
>>169
Kotlin または Kotlin script でのやり方

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

val b = a.toSortedSet()

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

val c = b.toList()

177:デフォルトの名無しさん
20/08/04 19:17:32.13 w83j0BiFE
[お題] “(16 + (8 - 4)) / 2” のような文字列を入力として,
その評価結果(この場合は10)を出力するプログラムを作成してください.

178:デフォルトの名無しさん
20/08/04 18:45:38.06 lImhU2CT.net
>>165 チューリングマシン(Python3)
#チューリングマシン本体(不受理の場合例外が発生する)
def turingMachine(tape, state_function, current_state, final_state):
i=0
n = len(tape)
while i < n:
sf = state_function[current_state]
symbol = tape[i] if i >= 0 else None
(current_state, rsymbol, is_right) = sf[symbol]
if i >= 0:
tape[i] = rsymbol
if current_state == final_state:
return True
i += 1 if is_right else -1
return False
def TmMul(a, b):
#1000000の箇所はメモリ容量に合わせて適当に増やす
tape = ["0"] * a + ["1"] + ["0"] * b + ["1"] + [None] * 1000000
trans = [{"0":(6, None, True)},
{"0":(2, "X", True), "1":(4, "1", False)},
{"0":(2, "0", True), "1":(2, "1", True), None:(3, "0", False)},
{"0":(3, "0", False), "1":(3, "1", False), "X":(1, "X", True)},
{"X":(4, "0", False), "1":(5, "1", True)},
{"0":(5, "0", False), "1":(7, "1", False)},
{"0":(6, "0", True), "1":(1, "1", True)},
{"0":(8, "0", False), None:(7, None, True), "1":(9, None, True)},
{"0":(8, "0", False), None:(0, None, True)},
{"0":(9, None, True), "1":(10, None, True)}]
turingMachine(tape, trans, 0, 10)
return len(list(filter(lambda x: x != None, tape)))
print(TmMul(3, 8)) #=>24

179:デフォルトの名無しさん
20/08/04 19:24:17 lImhU2CT.net
>>174
あーアホだったw
タブ消去の仕様だとPythonだと分けわからんことになるなw
↓貼り直した
URLリンク(codepad.org)
※会員未登録の為、一定期間後に自動消去

180:デフォルトの名無しさん
20/08/04 20:26:47.42 BW/Lg1/b.net
>>166
この魔法が気になる

181:蟻人間
20/08/04 20:33:41.16 pnjegpbT.net
>>176
奇数ならば最下位ビットが1であることを利用している。

182:デフォルトの名無しさん
20/08/04 20:43:45.04 ZgraBKAX.net
筆算じゃないの
101 b
110 a (+
---------
0
1010
10100
---------
11110

183:蟻人間
20/08/04 20:47:15.02 pnjegpbT.net
お題: 総務省統計局の1990~2019年までの人口データを使用して2020~2024年の日本の人口の推計値を求めよ。人口データ以外は使用しないものとする。

184:蟻人間 ◆T6xkBnTXz7B0
20/08/04 21:14:16 pnjegpbT.net
これは電子政府の使い勝手のテストである。だれも解けないなら、電子データは活かされていないと判断する。

185:デフォルトの名無しさん
20/08/04 21:16:21 02jYvMNw.net
>>176
aの偶奇によって↓の計算してaがちっちゃくなったら終わりってしてるだけだぞ

(2a' + 1)b = b + a' * (2b)
(2a') * b = a' * (2b)

186:デフォルトの名無しさん
20/08/04 21:26:04 lImhU2CT.net
チューリングマシンを使って重くて複雑な乗算を再現して何の意味があるのかと思ってそうだな
ポイントは文法の中に演算を組み込める点
実社会に役に立つ具体的な例を挙げろと言われれば直ぐには思いつかないが、オートマトンの入力は文字列だけとは限らないぞ
有限木オートマトン使って静的コード解析なのか最適化なのかは分からんが、開発言語の構文木に何らかの演算が伴うルールを適用したいこともあるかもしれない
「そんなのプログラミングすればいいだけだろ」と言う声が聞こえてきそうだがそれは極論「正規表現など要らん」と言ってるのと同じだと思う
以上でもって「全てのプログラマはオートマトンとチューリングマシンをよく勉強するべき」とする俺の主張の正当性は認められる
ちなみに俺は10年以上機械学習の勉強をしたのに画期的な成果が出せなかった後悔の思いがあるから言っている

187:デフォルトの名無しさん
20/08/04 21:58:22.27 JHqDXk92.net
お題を出して解くスレで電子データは活かされていないとかどうでもいいんですが…
なんでそうやっていつもスレ趣旨からずれようとするのか?
ズレたいならよそでやってくれ

188:デフォルトの名無しさん
20/08/04 22:11:15.82 02jYvMNw.net
片山博文MZ◆NveQN6OtcI

189:デフォルトの名無しさん
20/08/04 23:36:46 L0dS0CTZ.net
お題
両替をしてください
貨幣は次の文字列で表されます
1円 = (1)
5円 = (5)
10円 = (10)
50円 = (50)
100円 = (100)
500円 = (500)


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

入力: (5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)
出力: (100)(50)(10)(10)(10)(10)(5)(1)(1)(1)

190:デフォルトの名無しさん
20/08/05 00:05:23.10 DlE2lfwB.net
書きたいけど寝たい

191:デフォルトの名無しさん
20/08/05 02:29:32 prJIGLTT.net
>>176
aが2とか4だったらどうなるかを紙にでも書いて考えればいずれわかると思う。

192:デフォルトの名無しさん
20/08/05 02:55:46.54 wv4r4oF2.net
>>185 Ruby
def change( coin )
sum = coin.split(/[^\d]+/)[1..].inject(0){|r,c| r + c.to_i }
ret = ''
[500,100,50,10,5,1].each{|c|
next unless sum >= c
r, sum = sum.divmod( c )
ret << "(#{c})" * r
}
ret
end
[ '(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)(1)',
'(5)(50)(5)(1)(50)(5)(10)(1)(50)(1)(10)(10)' ].each{|coin|
puts "入力: #{coin}"
puts "出力: #{change( coin ) }\n\n"
}

193:デフォルトの名無しさん
20/08/05 03:57:36.76 NljdtI5zt
>>153 C++
URLリンク(ideone.com)

>>169 C++
URLリンク(ideone.com)

194:デフォルトの名無しさん
20/08/05 11:37:38.85 kVNaCqIg.net
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py", line 23, in <module>
my_data = genfromtxt('SingleECG.csv')
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\npyio.py", line 1772, in genfromtxt
fid = np.lib._datasource.open(fname, 'rt', encoding=encoding)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 269, in open
return ds.open(path, mode, encoding=encoding, newline=newline)
File "C:\Users\NEC-PCuser\anaconda3\lib\site-packages\numpy\lib\_datasource.py", line 623, in open
raise IOError("%s not found." % path)
グラフをプロットしたらこのエラーが出ました。対処法を教えてください

195:デフォルトの名無しさん
20/08/05 12:05:51.48 DlE2lfwB.net
斬新なお題だなNEC-PCuserさん

196:デフォルトの名無しさん
20/08/05 12:27:47.54 NljdtI5zt
>>185 C++
URLリンク(ideone.com)

197:デフォルトの名無しさん
20/08/05 12:16:18.65 IZQzbQjk.net
>>190<対処法を教えるお題
一行目と最後の行IOError("%s not found." % path) から
File "C:\Users\NEC-PCuser\.spyder-py3\temp.py"
のパスが間違えていると思われるので
temp.pyを添付するか確認するように進言します

198:デフォルトの名無しさん
20/08/05 14:35:10 xKYyZvTf.net
心電図装置に繋がってるデバイスが機能停止したんだろ

199:デフォルトの名無しさん
20/08/05 15:30:05.18 prJIGLTT.net
>>185
Kotlin
URLリンク(paiza.io)
最初は割り算したり余り出したりしてやろうと思ったんだけど、よく考えたらこの場合はその計算は無駄な感じがしたので合計から引けたらその貨幣を出すのを繰り返すようにした。

200:デフォルトの名無しさん
20/08/05 16:44:00.29 73CDpa/5.net
ふむ。コイン切れの対処もし易いな。

201:蟻人間 ◆T6xkBnTXz7B0
20/08/05 17:59:02 TWR5sasY.net
お題: コイにえさをやるプログラム「feed」がある。一時間ごとにfeedを実行するプログラムを書け。ただし、ビジーウェイトはしてはならない。

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

- 現在日時と「えさをやりました。」を出力する。

202:蟻人間
20/08/05 18:08:26.66 UZ8wPONY.net
>>197 C++/Win32
#include <windows.h>
int main(void) {
for (;;) {
Sleep(60 * 60 * 1000);
ShellExecuteA(NULL, NULL, "feed.exe", NULL, NULL, SW_SHOWNORMAL);
}
}
// feed.cpp
#include <windows.h>
#include <stdio.h>
int main(void)
{
SYSTEMTIME st;
GetLocalTime(&st);
printf("%04d.%02d.%02d %02d:%02d:%02d えさをやりました。\n",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}

203:デフォルトの名無しさん
20/08/05 19:40:23.44 VitQNdTl.net
は、はやい・・・

204:デフォルトの名無しさん
20/08/05 20:19:52.45 wv4r4oF2.net
>>197 Ruby (Windows)
# feed_ignition.rb
loop do
system( 'start "" feed.rb' )
sleep 60*60
end
# feed.rb
puts "#{Time.new.strftime('%Y/%m/%d %T')} えさをやりました。"
sleep 3 # 表示確認用

205:デフォルトの名無しさん
20/08/05 23:41:13.11 prJIGLTT.net
>>197
Linux 等の UNIX系OS だったら普通なら crond が動いているので crontab 設定すると楽だ。
(Windows の場合はタスクの設定で似たような事ができる)。
例えばこのようにすると毎時0分に feed コマンドが実行される。
0 * * * * feed
ただ問題はこのままだと標準出力がリダイレクトされていないのでその出力がcrondからメールで送られて来る事になる。
(見たい場合は mail コマンドを使って見る)。

コマンドラインから直接やるとしたら watch コマンドというのもある。これは実行するたびに出力が変化する
ようなコマンドを定期的に動かしてその出力を画面上に表示するためのコマンドだが毎回出力が同じでも
あるいは何も出力しなかったとしても問題はない。1時間ごとに動かすならこうなる。
watch -n 3600 feed
もっと単純にシェルでループさせて実現する方法もある。(これだとようやっとプログラムっぽい見た目になる)
sh -c 'while : ; do feed ; sleep 3600 ; done'

feed コマンドについてはシェルスクリプトなら例えばこうしておけば良い。
#!/bin/sh
echo 'えさをやりました。'

206:デフォルトの名無しさん
20/08/05 23:51:48.40 prJIGLTT.net
>>201はfeedで現在の日付を出すのを忘れた。
日付付けるなら例えばこうする。
#!/bin/sh
echo `date` 'えさをやりました。'
date コマンドに任せてしまってこんな風にもできる。(日時は YYYY-MM-DD hh:mm:ss の形式で出る)。
#!/bin/sh
date '+%F %T えさをやりました。'

207:デフォルトの名無しさん
20/08/06 14:26:19.33 HoaabIeAf
>>138 Rust
use rand::Rng;
fn main() {
    let mut rng = rand::thread_rng();
    let mut vec : Vec<u8> = Vec::new();
    for _ in 1..20 {
        vec.push(rng.gen::<u8>());
    }
    let result: Vec<u8> = vec.iter().filter(|&x| x % 2u8 == 0u8).cloned().collect();
    for v in result {
        println!("{}", v);
    }
}

208:デフォルトの名無しさん
20/08/06 16:22:14.55 HoaabIeAf
>>138 C++
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
  auto vec = std::vector<int>{};
  for (int i = 0; i < 20; ++i) {
    vec.push_back(rand() % 10 + 1);
  }
  auto result = std::vector<int>{};
  std::copy_if(vec.begin(), vec.end(), std::back_inserter(result),
               [](int v) { return v % 2 == 0; });
  for (auto v : result) {
    std::cout << v << std::endl;
  }
}

209:蟻人間
20/08/06 18:50:53.87 mzjhTFla.net
お題: 現実世界でコイにえさをやるプログラム。
できるのか?

210:デフォルトの名無しさん
20/08/06 19:02:17 nx4HEXSE.net
>>205
始めからPLCのプログラム限定って書け>>197

211:デフォルトの名無しさん
20/08/06 19:06:41 cHZDAcP7.net
>>205
プログラムそのものは出力装置に繋がるビットをONにするとかを定期的にやれば良いだけなのでは?
で、ONになったらリレーで餌やり器のスイッチが入ってウイーンとかいって餌が一定量水槽に入る。

ていうか、全部ハードウェアだけででできないか?タイマーICってあったよね確か。

212:蟻人間
20/08/06 19:21:15.27 mzjhTFla.net
ハードウェアだとソフトウェア制御できない。成長を細かく制御したい。
普通のPCから安価で制御する方法はないのだろうか。
ニシキゴイを20匹ほど飼いたいのだが。

213:デフォルトの名無しさん
20/08/06 19:23:23.77 nx4HEXSE.net
>>208
ピ・タ・ゴ・ラ・スイッチ

214:デフォルトの名無しさん
20/08/06 19:37:26 /QKQvkvR.net
なぜ何度ツッコまれてもスレタイからずれようとするんですか?
学習できないんですか?

215:蟻人間 ◆T6xkBnTXz7B0
20/08/06 19:46:21 mzjhTFla.net
>>210
ハードにも興味を持ってくれるといいな、と思って企画しました by 突撃商会

216:デフォルトの名無しさん
20/08/06 19:58:03 AWtnj9QL.net
CDトレイを開閉するソフトを作りそれで餌やり器のボタンを押せ

217:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:01:30 mzjhTFla.net
>>212
正解。次のお題お願いします。

218:デフォルトの名無しさん
20/08/06 20:18:11.34 nx4HEXSE.net
【お題】正解にたどり着くようにアシストした得点を算出するプログラムを作れ
スケールは1点以上100点未満とする

219:蟻人間 ◆T6xkBnTXz7B0
20/08/06 20:28:14 mzjhTFla.net
>>214
それは人間しかできないんで内科医?

220:デフォルトの名無しさん
20/08/06 20:37:37 sjF+gr/I.net
クソコテ死ねよマジで

221:デフォルトの名無しさん
20/08/06 20:53:50 O/aURmUk.net
>>208
その手の目的には Raspberry Pi がおすすめです
最近流行っているから多くのノウハウが容易に見つかりますよ

222:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:07:24 mzjhTFla.net
>>217
ありがとうございます。使えそうなハードでかなりお買い得ですね。

三菱やパナソニックは、、、破壊的イノベーションができない連中か。。。

223:蟻人間 ◆T6xkBnTXz7B0
20/08/06 21:16:15 mzjhTFla.net
IchigoJamというのもあるみたい。

224:デフォルトの名無しさん
20/08/06 21:29:05.63 8sSWlLgK.net
スレチ
◆QZaw55cn4c はうせろ

225:
20/08/06 22:26:16.70 L4WiFaHt.net
>>220
突然、どうしたのですか?

226:デフォルトの名無しさん
20/08/06 22:38:17.00 8sSWlLgK.net
>>221
呼んでねえよハゲ消えろ

227:蟻人間
20/08/06 23:02:55.51 mzjhTFla.net
お題: 点結びパズルという簡単なパズルがある。紙の上にたくさんの点があり、それぞれの点の近くに番号が書かれていて、
番号の順に点を結べば、図案が浮かび上がるというものだ。
以下の手順に従ってモノクロPNG画像(300dpi前後)として与えられた点結びパズルを自動的に解くプログラムを作れ。画像処理。
(1) OCR技術や深層学習などにより、画像上の一文字が2mm以上6mm以下のアラビア数字(複数)を読み取り、数字の位置と数字の対を返す関数を作れ。数字の30度以上の回転は考える必要はない。
(2) 点結びパズルの点は直径0.5mm以上3mm以下の黒い丸い点だと仮定して、点と数字を関連付けるアルゴリズムを考案せよ。
ただし、数字に近い点が複数ある場合は「スマートに」割り振ること。
(3) 画像に実際に線分を描画して点結びパズルを回答するプログラムを作れ。
点と数字以外の枠線やタイトルなどは印刷されていないと仮定してもよい。

228:デフォルトの名無しさん
20/08/07 00:08:41.77 TzYKRTqH.net
よく、ラズパイコンテストでやってる
水槽の中の金魚に、エサをやる装置とか

229:デフォルトの名無しさん
20/08/07 11:29:33 uQ4nbdFf.net
債務が多い

230:デフォルトの名無しさん
20/08/07 12:51:36 lb7vo/Jy.net
お題
文字列を大文字小文字を区別せずにソートして()でグルーピングしてください

入力: D a B c d c C A E c e B b
出力: (a A) (B B b) (c c C c) (D d) (E e)

231:デフォルトの名無しさん
20/08/07 13:43:57.69 uQ4nbdFf.net
>>226 js
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = {}
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return Object.values(groups).sort((g1, g2) => charVal(g1[0]) - charVal(g2[0])).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)

232:デフォルトの名無しさん
20/08/07 13:48:23.69 uQ4nbdFf.net
const inputStr = "D a B c d c C A E c e B b"
const expectedStr = "(a A) (B B b) (c c C c) (D d) (E e)"
const charVal = c => c.toUpperCase().charCodeAt()
function groupCharSort(str) {
const chars = str.split(" ")
const groups = []
chars.forEach(c => {
const cv = charVal(c)
if (!groups[cv]) groups[cv] = []
groups[cv].push(c)
})
return groups.filter(Boolean).map(cs => `(${cs.join(" ")})`).join(" ")
}
const resultStr = groupCharSort(inputStr)
console.log("out :" + resultStr)
console.log("expect:" + expectedStr)
console.log(resultStr == expectedStr)

sort いらなかった

233:デフォルトの名無しさん
20/08/07 14:51:48.30 5vmbSLbR.net
>>226 Ruby
# その 1
def igrouping( str )
gList = {}
str.split.each{|ch|
k = ch.downcase
gList[ k ] ||= []
gList[ k ] << ch
}
gList.keys.sort.map{|k| '(' + gList[ k ].join(' ') + ')' }.join(' ')
end
instr = 'D a B c d c C A E c e B b'
puts "入力: #{instr}"
puts "出力: #{igrouping( instr )}"

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

235:デフォルトの名無しさん
20/08/07 16:23:53.54 uQ4nbdFf.net
<<=って演算子ほしいな

236:デフォルトの名無しさん
20/08/07 19:28:59 P4+Ga4Bm.net
>>226 Ruby

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


# => (a A) (B B b) (c c C c) (D d) (E e)

237:デフォルトの名無しさん
20/08/08 00:04:29 b55CcwAR.net
JavaScript では、Lodash を使うけど、
やっぱり、Ruby の方が、メソッドチェーンできるから良い

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

そこで、メソッドチェーンが途切れて、配列が実体化されてしまうから、
サイズと大きいと、ヤバイ

238:デフォルトの名無しさん
20/08/08 00:46:24.94 R/FWJxxqi
>>226 C++
URLリンク(wandbox.org)

C++で無理やりメソッドチェーンしてみた

239:デフォルトの名無しさん
20/08/08 07:24:36.17 u/td9dv4.net
lodash破壊的変更の関数あるの地味に謎だよな
一応 lodash/fpもあるけど

240:デフォルトの名無しさん
20/08/08 07:26:45.92 u/td9dv4.net
いや _.chainの話か
一瞬非推奨の流れ来たときから使ってないわ
メソッドチェーン嫌いではないけど

241:デフォルトの名無しさん
20/08/08 09:18:46 b55CcwAR.net
>>226
Elixir

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

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

# IO.inspect list

Enum.join( list, " " ) # 各要素を空白でつなげて、1つの文字列にする
|> IO.puts

242:デフォルトの名無しさん
20/08/08 14:04:33 JvTsLjL+.net
>>226
Python3
URLリンク(ideone.com)

全然短くならなかったんだけど皆どういう脳みそしてるの

243:デフォルトの名無しさん
20/08/08 14:58:00 gFRxrH0y.net
>>226
perl

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


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

それかワンライナーへの偏執的な愛

244:デフォルトの名無しさん
20/08/08 15:53:05 xsg1wzC9.net
>>226 Ruby

gets.split.group_by(&:upcase).sort.map{|_,v|$><<"(#{v*' '}) "}

245:デフォルトの名無しさん
20/08/08 16:11:32.49 yUCBpeXj.net
>>238
一般論としてデータの処理と最後の文字列の組み立てを一緒にやらない方がいい
今どきPC上ならメモリーは潤沢にあるので
・グルーピングの処理してから
・各グループを文字列化
・さらにその文字列を順次出力
とした方がわかりやすいと思う
URLリンク(ideone.com)

246:デフォルトの名無しさん
20/08/08 17:07:51.92 HH2BebFt.net
>>238
Pythonだとどうしても短くはならないな。
URLリンク(ideone.com)
groupbyのところは、defaultdictで書く方法もあるけど大差なし。

247:デフォルトの名無しさん
20/08/08 21:09:30.55 JvTsLjL+.net
>>239
Rubyの人もワンライナーだな
Rubyってショートコーディングに向いてるのかな?
>>241,238
なるほど

248:デフォルトの名無しさん
20/08/08 21:20:24 bf+w2Xl6.net
code golfなら基本はperlで、次点がRubyじゃないですかね

249:デフォルトの名無しさん
20/08/08 21:56:24 JvTsLjL+.net
>>244
そういうものなのね

250:231
20/08/08 22:49:25 b55CcwAR.net
関数型・メソッドチェーンなら、Ruby・Elixir。
長く、チェーンできるから

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

str = "a b c"

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

str
|> String.split
|> IO.inspect

出力は、どちらも
["a", "b", "c"]

251:231
20/08/08 22:54:29 b55CcwAR.net
基本的に、Ruby・Elixir みたいに、
メソッドチェーンで、英語のように、左から右へ読めないとダメ

Python の内包表記みたいなのは、可読性が悪い

252:デフォルトの名無しさん
20/08/08 23:09:35.53 n6UBlQy6.net
ざっくりとした見た目しか気にしないのでパイプライン演算子と区別がつかないrubyガイジなのであったw

253:デフォルトの名無しさん
20/08/08 23:14:07.63 ifN2bgU4.net
>>185
Java
URLリンク(paiza.io)

254:デフォルトの名無しさん
20/08/08 23:32:15 ifN2bgU4.net
>>226
Java
URLリンク(paiza.io)

255:デフォルトの名無しさん
20/08/09 00:15:33.89 cPfQFxYQ8
Ruby上達したら便利そう
理想的なスクリプト言語だな

256:デフォルトの名無しさん
20/08/09 00:17:54.90 /K790vfJ.net
javaでもStream使うと意外と少なくかけるんだな
utilが充実してるな

257:デフォルトの名無しさん
20/08/09 00:24:15.31 cPfQFxYQ8
これとかすげえ
URLリンク(www.youtube.com)

258:デフォルトの名無しさん
20/08/09 00:41:46.15 uywZ9h5A.net
>>185
Python3
URLリンク(ideone.com)

259:デフォルトの名無しさん
20/08/09 02:47:46 Mt0Kh35r.net
>>226
c#
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
var input = "D a B c d c C A E c e B b";

foreach (var itm in input.Split(" ").GroupBy(p => p.ToUpper()).OrderBy(p => p.Key))
{
Console.Write("(" + string.Join(" ", itm) + ") ");
}



260: } }



261:デフォルトの名無しさん
20/08/09 04:58:28 bQgrv4ZF.net
>>226
Kotlin
URLリンク(paiza.io)

262:デフォルトの名無しさん
20/08/09 16:07:42 HZ7sqguG.net
お題
文字列abcdeを右に2つ回転するとdeabcとなる
文字列abcdeを左に2つ回転するとcdeabとなる

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

入力: abcde deabc
出力: true

入力: abcde cdeba
出力: false

263:デフォルトの名無しさん
20/08/09 16:42:31.20 /K790vfJ.net
>>257 js
const isRotateStr = (a, b) => (a + a).indexOf(b) != -1
console.log(isRotateStr("abcde", "deabc"))
// true
console.log(isRotateStr("abcde", "cdeba"))
// false

264:デフォルトの名無しさん
20/08/09 16:56:20.10 DzMx1xPb.net
問題として狙ってたかしらんけど、いきなり簡単な解法来ちゃったな。

265:デフォルトの名無しさん
20/08/09 16:59:23.64 Uo9rXbdx.net
aaとaaaを比較したらtrueになっちゃうね
文字サイズを最初にチェックすればいいかな?

266:253
20/08/09 19:01:45.47 UiQUiAYf.net
>>226 Perl5
push(@{$h{uc$_}}, $_) for qw{D a B c d c C A E c e B b};
print map{"(@{$h{$_}}) "} sort keys %h;
実行結果
~ $ perl 18_221_NCS_sort_grp.pl
(a A) (B B b) (c c C c) (D d) (E e)

267:253
20/08/09 19:17:23 A1LNtpwx.net
>>257 Perl5

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

実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false

268:デフォルトの名無しさん
20/08/09 20:09:27.60 sb6ynJ/q.net
Jニキも披露してくれよ

269:デフォルトの名無しさん
20/08/09 22:00:05.82 BOQzPYI8.net
>>226 octave
URLリンク(ideone.com)
>>257 octave
URLリンク(ideone.com)

270:253
20/08/09 22:27:07 iNMqPGBy.net
>>261 それだと「文字列を回転させて一致」のみならず「含まれている」場合もtrueになってしまうので修正

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

実行結果
~ $ perl 18_249_strot_cmp.pl
The signatures feature is experimental at 18_249_strot_cmp.pl line 2.
入力 abcde deabc
出力 true
入力 abcde cdeba
出力 false
入力 aaaaa aaa
出力 false

271:デフォルトの名無しさん
20/08/09 22:40:05 /K790vfJ.net
octave文法好みだけど結構古い言語なんだな

272:253
20/08/09 23:21:31.30 dFp53gtH.net
>>226 Python3
s = "D a B c d c C A E c e B b".split();
d = {}
for c in s:
  u = c.upper()
  if u in d: d[u] += ' ' + c
  else: d[u] = c
ks = sorted(d.keys())
print(' '.join(map(lambda x: '(%s)' % d[x], ks)))
実行結果
~ $ py 18_221_NCS_sort_grp.py
(a A) (B B b) (c c C c) (D d) (E e)

273:デフォルトの名無しさん
20/08/09 23:56:04.43 DzMx1xPb.net
Perlだとこの程度でも正規表現使わないといかんのか?

274:253
20/08/10 00:02:07 5Aj+dIHX.net
>>267 を少し簡略化

>>226 Python3

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

275:253
20/08/10 00:03:02 5Aj+dIHX.net
>>268
substrとかでも書ける

276:253
20/08/10 01:07:06.98 mTkq56mc.net
>>268
>>265は一致する場合に対応するようあせって書いた面があり
正規表現を使うのはやりすぎ感があったのは確かなので
顕に正規表現を使わずに書きを考えてみた。
もっとも簡素な書き方として思いついたのがsplitで三分割して
前後の余った文字列を連結したらそれも一致するかなので
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 @a = split "$b", "$a$a", 3;
 say "出力 ", ("$a[2]$a[0]" eq $b) ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};
…でもsplitも実は正規表現で分離する機能を持つので、起きていることは実は>>265と一緒なんだよね

277:253
20/08/10 01:18:32.03 mTkq56mc.net
>>271 ゴメン、$a[2]$a[0]はbug、訂正
>>257 Perl5
use feature qw{signatures say};
sub strot_cmp($a, $b) {
 say "入力 $a $b";
 @a = split $b, "$a$a", 3;
 say "出力 ", ("$a[1]$a[0]") eq $b ? 'true' : 'false';
}
strot_cmp qw{abcde deabc};
strot_cmp qw{abcde cdeba};
strot_cmp qw{aaaaa aaa};

278:253
20/08/10 01:58:56.02 5YDTUTIu.net
>>272 ゴメン
× @a = split $b, "$a$a", 3;
○ @a = split $b, "$a$a", 2;

279:
20/08/10 02:53:12.35 JYoLJZbs.net
>>257 C
スレリンク(tech板:68番)

280:デフォルトの名無しさん
20/08/10 05:44:26 SKFyjjt9.net
お題:
Brainfuck実行環境を作成し,以下のhello.bfを読み込み実行してください

入力: URLリンク(github.com)
出力: "Hello World!"

281:デフォルトの名無しさん
20/08/10 08:49:19.32 SwBLGnEH.net
>>275 Ruby
require 'open-uri'
str = open('URLリンク(raw.githubusercontent.com)').read
M = 256
i = p = s = 0
h = Hash.new(0)
m = [0] * M
while i < str.length
  case str[i]
  when ?+ then m[p] += 1
  when ?- then m[p] -= 1
  when ?[ then h[s += 1] = i
  when ?] then m[p].zero? ? s -= 1 : i = h[s]
  when ?> then p += 1
  when ?< then p -= 1
  when ?. then $><<m[p].chr
  when ?, then m[p] += $<.getc.ord
  end
  i += 1
end
# => Hello World!

282:デフォルトの名無しさん
20/08/10 08:49:26.47 OSJh6/O/.net
>>275 Ruby
URLリンク(ideone.com)

283:デフォルトの名無しさん
20/08/10 17:10:10.24 Z7zFlWuQ.net
>>257
Kotlin
簡単なやり方は出尽くしたのであえてグルグル回すだけのIteratorを作成した。
URLリンク(paiza.io)

284:デフォルトの名無しさん
20/08/10 17:10:16.38 SKFyjjt9.net
>>275 C++
URLリンク(ideone.com)

285:デフォルトの名無しさん
20/08/10 18:01:14 Z7zFlWuQ.net
>>275
Kotlin

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

URLリンク(paiza.io)

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

$ kotlinc BF2Kotlin.kt
$ kotlin BF2KotlinKt < hello.bf > hello.kt
$ kotlinc hello.kt
$ kotlin HelloKt
Hello World!

286:デフォルトの名無しさん
20/08/10 18:43:36.36 TsKVv45J.net
>>257
Python3
URLリンク(ideone.com)

287:デフォルトの名無しさん
20/08/10 21:10:04.86 EfqLUS40.net
>>257 Python3
def f(a, b): return len(a) == len(b) and a in b + b

288:デフォルトの名無しさん
20/08/10 22:32:27 tDeKMBiv.net
>>257 c
URLリンク(ideone.com)

289:デフォルトの名無しさん
20/08/10 23:41:40.77 SKFyjjt9.net
>>257 C++
URLリンク(ideone.com)

290:デフォルトの名無しさん
20/08/10 23:46:58.70 lJp+wmfa.net
bfってループの入れ子できたっけ?

291:デフォルトの名無しさん
20/08/10 23:47:11.22 SwBLGnEH.net
>>285
できる

292:272
20/08/11 01:47:49 RwCZynCZ.net
>>275
Kotlin

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

URLリンク(paiza.io)

293:デフォルトの名無しさん
20/08/11 01:50:50.24 RwCZynCZ.net
>>285
知らんけど >>287 は出来るように作った。
>>280 のやつはコンバータだが Kotlin が出来るので出来る。(というか出来ないように作る方が面倒かな?)

294:デフォルトの名無しさん
20/08/11 07:40:40.35 RSsrE9PW.net
>>257
>>281をリファクタリング
URLリンク(ideone.com)

295:デフォルトの名無しさん
20/08/11 14:40:27.33 psN1NwFJ.net
こんなに暑いと座禅プログラムで涼みたい。

296:デフォルトの名無しさん
20/08/12 10:55:20.81 WiVroiaz.net
警策を上から振り下ろす動作の機械を作り、そこにマイコンを接続。更に行ったり
来たりするルンバのようなものの上にそれを乗せ、そこにもマイコンを接続。
そのマイコンのコントロールプログラムを作成。

297:デフォルトの名無しさん
20/08/12 11:07:50.98 WiVroiaz.net
既にこんなの作ってる人が居た。
座禅で動いたら棒で叩かれるやつを全自動化する
URLリンク(dailyportalz.jp)

298:デフォルトの名無しさん
20/08/12 16:50:07.72 xjprAYba.net
令和のコペルニクス
URLリンク(youtu.be)

299:デフォルトの名無しさん
20/08/12 19:58:36.03 j5y8ZKQl.net
お題
Brainfuckのの'+','-','.'の 3つの命令のみで
特定の文字列を表示するBrainfucの
ソースコードを生成するプログラム。

300:デフォルトの名無しさん
20/08/12 20:07:13.01 kGuev0jH.net
>>294 Ruby
puts "Hello, World!\n".codepoints.unshift(0).each_cons(2).map{|a, b| '%s.' % ((b > a ? ?+ : ?-) * (b - a).abs)}*''
# =>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.+++++++..+++.[略]

301:デフォルトの名無しさん
20/08/12 23:55:21 WiVroiaz.net
差分出すっていうと ADPCM の圧縮を思い出すな。

302:デフォルトの名無しさん
20/08/13 01:08:54.66 TUx4JMNp.net
>>294
Perl5
プログラムの構造は >>295 と同じだがワンライナー。
行単位で標準入力から入力して標準出力に出力する。入力の最後の改行は削除している。行ごとに直前の文字は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.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
+++++++++++++++++++++++++++++.
+++++++.
.
+++.
-------------------------------------------------------------------.
------------.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.
--------.
+++.
------.
--------.
------------------------------------------------------.
$

303:デフォルトの名無しさん
20/08/13 01:49:54 CZu90IWX.net
>>294 Ruby
"Hello World!\n".codepoints.inject(''){|r,c| r << '+' * c + '.[-]' }

304:デフォルトの名無しさん
20/08/13 03:32:09 CZu90IWX.net
>>294 Ruby
"Hello World!\n".codepoints.map{|c| '+' * c + '.' }.join( '[-]' )

305:デフォルトの名無しさん
20/08/13 05:51:07.18 CZu90IWX.net
>>294
>>298,299 は出題条件の「'+','-','.'の 3つの命令のみ」を忘れてましたご免なさい

306:デフォルトの名無しさん
20/08/13 06:48:39.25 9ZM4Lmsz.net
>>294 Ruby
gets.each_char{|c|d=$.-$.=c.ord;$><<(d<0? ?+*-d:?-*d)+?.}

307:デフォルトの名無しさん
20/08/13 12:37:03.85 8zEuDtsy.net
なるほどbrainfuckでは[-]で現在指してるメモリの値を0クリアできるのか

308:デフォルトの名無しさん
20/08/14 01:20:11 CuxcYYZ5.net
お題:変数a, b, cを32ビット符号付き整数の最大値で初期化、または代入せよ。

octave
URLリンク(ideone.com)

ada95
URLリンク(ideone.com)

309:デフォルトの名無しさん
20/08/14 03:17:07 cCFmHkiX.net
>>303 Ruby
# 初期化だけ
a = b = c = 2**31 - 1

# 初期化して表示
p *(a,b,c = [2**31-1] * 3) #=> 2147483647\n2147483647\n2147483647\n

310:デフォルトの名無しさん
20/08/14 07:01:38 cCFmHkiX.net
>>303 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

311:デフォルトの名無しさん
20/08/14 08:01:01.07 sgFs/qSh.net
>>303 JavaScript
a=b=c=-1>>>1

312:デフォルトの名無しさん
20/08/14 08:17:19.00 jifd8sPx.net
>>303 C++
int32_t max = 1 << 31;
int32_t min = ~max;

313:デフォルトの名無しさん
20/08/14 08:18:37.41 jifd8sPx.net
あ maxとminが逆だった

314:デフォルトの名無しさん
20/08/14 08:20:39.60 jifd8sPx.net
しかもお題と関係ない スマソ

315:デフォルトの名無しさん
20/08/14 08:21:04.21 hpI++Bi7.net
>>303 Python では整数に制限がないからnumpyで、
import numpy as np
a=b=c=np.iinfo(np.int32).max

316:デフォルトの名無しさん
20/08/14 08:38:19 jifd8sPx.net
>>303 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;
}

317:デフォルトの名無しさん
20/08/14 09:05:58 jifd8sPx.net
const auto [a, b, c] = std::tie(max, max, max);
これだけでよかったorz

318:デフォルトの名無しさん
20/08/14 14:02:54 9qHjnK+i.net
お題:任意文字列を含むビットコインアドレスを生成するスクリプト

BitCoinDescriptionAddress

1BitCoinDescriptionAddressadTvGDH

319:デフォルトの名無しさん
20/08/15 16:58:24 gFfdk9Ij.net
>>303
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 が代入される。

まあしかしこのような形式でまとめて複数の変数を初期化をするのは変数が多くなればなるほど
見辛くなってどれがどれに代入されるか分かり辛くなるのであまりお勧めする気は起きない。

320:295
20/08/15 17:28:56 nnj+MvqH.net
>>303 octave
URLリンク(ideone.com)
単に[a, b, c] = deal(intmax)でよかった

321:デフォルトの名無しさん
20/08/15 17:57:15 uqmyrozg.net
お題
長さNの順列を全列挙してください

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


入力: 3
出力:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

322:デフォルトの名無しさん
20/08/15 18:04:12.38 WnA8LB9O.net
>>316 Ruby
[*1..gets.to_i].permutation{|a| puts a*' '}

323:デフォルトの名無しさん
20/08/15 18:07:06.59 nnj+MvqH.net
>>316 octave
URLリンク(ideone.com)
f = @(n) perms(1:n);
f(3)

324:デフォルトの名無しさん
20/08/15 19:24:16.43 4GsEJ4Sf.net
お題
HTMLドキュメントをwebブラウアザ上に表示するプログラムを作りなさい。
内容は、html、head、meta、title、body、h1 を含み、
UTF-8で表示するものとする、
Hello World!

325:デフォルトの名無しさん
20/08/15 20:07:59.51 nR02Shr3.net
お題: 整数の0,1を真偽値のfalse,trueに変換しなさい

326:デフォルトの名無しさん
20/08/15 20:22:45.39 BUqVCKAW.net
>>319 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}" URLリンク(127.0.0.1:55080) ) }
srv.start

327:デフォルトの名無しさん
20/08/15 20:34:31.85 BUqVCKAW.net
>>320 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
{} : {}

328:314
20/08/15 20:37:12.09 BUqVCKAW.net
>>322
0 : false
が一行余分に付いてしまった

329:デフォルトの名無しさん
20/08/15 20:49:55 WnA8LB9O.net
>>320 Ruby

n.nonzero?

330:デフォルトの名無しさん
20/08/15 20:59:34.51 nnj+MvqH.net
>>320 ocaml
URLリンク(ideone.com)
let f = function 0 -> false | 1 -> true
let () = Printf.printf "%B %B" (f 0) (f 1)
>>320 c++
URLリンク(ideone.com)
#include <iostream>
#include <iomanip>
int main() {



331:std::cout << std::boolalpha << 0 << !!0 << 1 << !!1 << std::endl; return 0; }



332:デフォルトの名無しさん
20/08/15 21:22:21.80 v9cGseLQ.net
>>320
0, 1以外の時の挙動が書いてない
単体テストできねーだろ、やり直し!

333:デフォルトの名無しさん
20/08/15 23:19:07 gFfdk9Ij.net
>>320
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 がその他の型だとコンパイルエラー。

334:デフォルトの名無しさん
20/08/16 02:10:15.75 aQEvXwVj.net
>>316 C
URLリンク(ideone.com)

335:デフォルトの名無しさん
20/08/16 10:54:19.77 DGzsHTxH.net
Python
>>320
bool(n)
>>316
from itertools import permutations
N = 3
print([x for x in permutations(range(1, N+1))])

336:デフォルトの名無しさん
20/08/16 11:17:36 x8ZjthFZ.net
>>316 C++
URLリンク(ideone.com)

337:デフォルトの名無しさん
20/08/16 19:28:34.07 Stgr85a5.net
>>316
Kotlin
URLリンク(paiza.io)
なんとなく以前作ったような気もするがまた作った。

338:蟻人間 ◆T6xkBnTXz7B0
20/08/16 19:41:54 GwA/W8AI.net
お題: 浮動小数点数の区間演算の加減乗除(+、-、*、/)を実現しなさい。開区間は丸カッコを、閉区間は角カッコを使う。
区間はカッコで囲まれた数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。

例)
[1, 3) + 2 → [3, 5).
[2, 8] - [1, 2] → [0, 7].
(-3, 2] * (1, [2, 3)) → (-9, 6).

339:デフォルトの名無しさん
20/08/16 19:47:13.56 WQRWSQYc.net
>>332
ほんとクソだなお前
なんで数と区間が何の説明もなく比較可能な状態になってんだよ
教養レベルの位相と集合の知識身に付けてから出直せハゲ

340:蟻人間
20/08/16 19:54:55.84 GwA/W8AI.net
>>333
入力の計算式において単一の数は同等の閉区間と見なすことにする。
2 → [2, 2].

341:デフォルトの名無しさん
20/08/16 19:59:26.75 WQRWSQYc.net
>>334
任意の区間に対してどのように順序を定義して全順序集合を構成するのか考えてから言えよクソ雑魚が

342:デフォルトの名無しさん
20/08/16 20:01:44.11 5GlLVozn.net
そもそも 2 と [2, 2] が同じだと思ってる時点でやばいよ
ペアノ系で 0 = 1 って言ってるようなもんだぞ

343:蟻人間 ◆T6xkBnTXz7B0
20/08/16 20:08:52 GwA/W8AI.net
>>335
任意の[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)].

344:デフォルトの名無しさん
20/08/16 20:11:24.43 WQRWSQYc.net
>>337
順序の定義しろっつってんだろクソが
「(1, [2, 3))」かつ「対の最初の要素は対の最後の要素以下とする」って言ってるってことは
[1, 1] <= [2, 3) なんだろ?
任意の区間の間で矛盾なく順序を定義しろや

345:蟻人間
20/08/16 20:24:24.91 GwA/W8AI.net
>>338
すみません。カッコの入れ子はややこしいので止めます、、、
というのは簡単だが、あえて考える。
b<=cならば、間違いなく[a, b] <= [c, d]は真。
d<aならば、[a, b] <= [c, d]は�


346:U。 それ以外は[a, b] <= [c, d]の論理値は不定とし、実行時エラーを発生させる。



347:デフォルトの名無しさん
20/08/16 20:32:34 WQRWSQYc.net
>>339
完全律すら成り立たない順序ってなんだよ
「カッコの入れ子はややこしい」とかそういうレベルじゃねえんだよ

だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
お前群論なめてんのか

348:デフォルトの名無しさん
20/08/16 20:34:23 1lLvvYB6.net
計算の順番を変えたりするだけで簡単に全部エラーにできるから流石にお粗末だね

349:デフォルトの名無しさん
20/08/16 20:50:12.97 5EzRC1Sr.net
>>339
死ねカス

350:蟻人間
20/08/16 20:54:18.06 GwA/W8AI.net
>>340
> だいたい [a, b] - [a, b] = [a - b, b - a] != 0 ってクッソきもいんですけど
[a - b, b - a] はゼロを中心とした区間の誤差範囲を表してるから間違いではない。計算機の内部には群論が成り立たない汚い演算もある。

351:デフォルトの名無しさん
20/08/16 20:57:11.13 rY4w2Ca/.net
まーたスレタイからズレてるよ
問題に不備があったなら取り下げて勉強し直してこい
群論を教えるスレじゃない
何があえて考えてみるだ

352:デフォルトの名無しさん
20/08/16 21:13:43.55 WQRWSQYc.net
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
矛盾
死ね
消えろ

353:蟻人間
20/08/16 21:16:32.00 GwA/W8AI.net
>>345
0 < a < bのときは、[-a, -b]は定義されない。

354:デフォルトの名無しさん
20/08/16 21:29:26.85 WQRWSQYc.net
>>346
順序の定義が矛盾してるんだから[-a, -b]は定義可能であっても良い
本当頭わりいな

355:デフォルトの名無しさん
20/08/16 21:34:29.96 1lLvvYB6.net
[0, 1]*[0, 1] = [0, 1]
<=> [0, 1]*([0, 1] - 1) = 0
<=> [0, 1]*[-1, 0] = 0
<=> [-1, 0] = 0
流石にひどいって

356:蟻人間
20/08/16 21:48:28.85 GwA/W8AI.net
加法
(1) 交換法則
(2) 結合法則
(3) 単位元の存在
(4) 逆元の存在
乗法
(5) 交換法則
(6) 結合法則
(7) 分配法則

357:蟻人間
20/08/16 22:04:28.19 GwA/W8AI.net
逆元がないから、減法が壊れてる。
区間に逆元があるように減法を定義することはできない。
すみません、取り下げます。

358:デフォルトの名無しさん
20/08/16 22:08:12.76 WQRWSQYc.net
>>350
それ以前の問題だっつーのアホ
任意の数 a, b に対して容易に a = b が成立するクソ

359:デフォルトの名無しさん
20/08/16 22:16:18.77 UYHP6Cr3.net
問題を解くスキル<<<<<解ける問題を作るスキル
だったりするかも

360:デフォルトの名無しさん
20/08/16 22:26:48.34 Nztll5gc.net
>>316
Java
URLリンク(paiza.io)

361:蟻人間 ◆T6xkBnTXz7B0
20/08/16 22:46:06 GwA/W8AI.net
やり直し。

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

閉区間は角カッコで囲まれた浮動小数点数の対で表すものとする。ここで対の最初の要素は対の最後の要素以下とする。すなわち[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].

362:デフォルトの名無しさん
20/08/16 22:58:27.46 bYLilpPQ.net
つーか
boost::numeric::interval
とかいう実装があってな
あながちおかしな話ではない
かと言って
そんな車輪の再生産みたいなお題を受けたい気はしないのだが

363:
20/08/16 23:34:04.85 kJzMyvlv.net
>>316 C
URLリンク(ideone.com)

364:253
20/08/16 23:50:47.82 G5r8RAij.net
>>316 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])

365:デフォルトの名無しさん
20/08/17 01:49:55.07 Nup7rIuH.net
前の書き方だとやる気が出ないみたいなので再掲
お題 任意文字列を含む有効なビットコインアドレスを生成するにはどうすればいいか
ビットコインアドレスの形式は
[プレフィックス 1バイト] [本体データ 160ビット] [チェックサム 4バイト]
をbase58(58進数)で表現したもの
プレフィックスは0x00とする
チェックサムはプレフィックス+本体データをsha256に二回かけた後の先頭4バイト
詳細
URLリンク(www.tottemoyasashiibitcoin.net)
例:
1BitCoinDescriptionAddressadTvGDH
1MayukoMuraokaXXXXXXXXXXXXXXX5f8QC
これはどっちも有効なビットコインアドレスになってる
URLリンク(chainflyer.bitflyer.com)
URLリンク(chainflyer.bitflyer.jp)

366:デフォルトの名無しさん
20/08/17 06:10:10.64 sRZ0bbBO.net
>>354
消えろカス

367:デフォルトの名無しさん
20/08/17 08:34:59.13 4e6PsksO.net
>>359
お前うざいよ

368:デフォルトの名無しさん
20/08/17 09:10:13 CGaaR/Ic.net
どうすればいいか?ってのがよくわからない

369:デフォルトの名無しさん
20/08/17 09:11:51.56 CGaaR/Ic.net
入力と出力をはっきりさせてほしい
それとも取引所の仕様を理解しろって話なの?

370:デフォルトの名無しさん
20/08/17 11:17:26.81 2KNIyB/f.net
ブルートフォースアタックしか思い浮かばない。

371:デフォルトの名無しさん
20/08/17 18:12:59.56 Nup7rIuH.net
入力が任意文字列で出力がそれを含む有効なビットコインアドレス
例にあるやつだとMayukoMuraokaが任意文字列の部分
XXX…っていうのはただの本体データ160bitのあまりスペースを埋めてるだけだからなんでもいい
それに対応して最後のチェックサムも任意性がある
直感だとブルートフォースが必要そうだけど実際は単純なやり方でできる

372:デフォルトの名無しさん
20/08/17 19:37:06.53 4e6PsksO.net
秘密鍵でデコードできなくてもいんでしょ?
じゃあbase58で表されたバイト値と文字列を変換するだけじゃん

373:デフォルトの名無しさん
20/08/17 19:45:01.16 Nup7rIuH0.net
基本的にはそれだけのこと
実際の手順を考えるとちょっとややこしいことがあるくらい
ということで実装してみよう

374:デフォルトの名無しさん
20/08/17 22:43:06.44 sRZ0bbBO.net
>>360
お前がうぜえよ死ね

375:デフォルトの名無しさん
20/08/17 22:47:24.50 4e6PsksO.net
>>367
お前が死ね

376:デフォルトの名無しさん
20/08/17 22:50:53.21 3fwftKf8.net
よし俺がしぬよ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch