Discuss Scratch
- Discussion Forums
- » 日本語
- » Scratchスクリプトクイズ
- so-zo
-
Scratcher
7 posts
Scratchスクリプトクイズ
略略
では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。
((((a) * (b)) / ([絶対値 v] \( ((a) * (b)) \))) + (0))どうでしょう。
abeeさんの解答を参考にしました。
Last edited by so-zo (Nov. 1, 2017 07:55:58)
- tyawanmusi
-
Scratcher
100+ posts
Scratchスクリプトクイズ
正解です。略略
では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。((((a) * (b)) / ([絶対値 v] \( ((a) * (b)) \))) + (0))どうでしょう。
+0の必要性がわからない・・・
- so-zo
-
Scratcher
7 posts
Scratchスクリプトクイズ
+0がないとa*bが0の場合NaNになってしまいます。正解です。略略
では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。((((a) * (b)) / ([絶対値 v] \( ((a) * (b)) \))) + (0))どうでしょう。
+0の必要性がわからない・・・
https://scratch.mit.edu/projects/183403265/
Last edited by so-zo (Nov. 1, 2017 07:59:34)
- apple502j
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
乱入失礼。恐らくこれからこのトピックに茶碗蒸しがくっつくと思います。
では問題。(a)(b)これら2つの変数を用意する。この時、((a) * (b))これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数と演算のみにしてください。
これ自分が作ったら全部合わせて12ブロックになったんだよね・・・
(<<((a) * (b)) = [0]> ではない> + (0))
- tyawanmusi
-
Scratcher
100+ posts
Scratchスクリプトクイズ
正解です。真偽値も加えられたんですね・・・乱入失礼。恐らくこれからこのトピックに茶碗蒸しがくっつくと思います。
では問題。(a)(b)これら2つの変数を用意する。この時、((a) * (b))これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数と演算のみにしてください。
これ自分が作ったら全部合わせて12ブロックになったんだよね・・・(<<((a) * (b)) = [0]> ではない> + (0))
- mi9g0n
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
正の数だけなら、(() を四捨五入)を使わずに、四捨五入するスクリプトを作ってください。
ただし、([切り上げ v] \( () \))([切り下げ v] \( () \))も禁止です。
このとき、四捨五入する数は変数a、四捨五入した数は変数bに入れることとします。
[a v] を [x.xx] にする?
[b v] を [0] にする
(a) 回繰り返す
[b v] を (1) ずつ変える
end
- tyawanmusi
-
Scratcher
100+ posts
Scratchスクリプトクイズ
改造して、正の数だけなら、(() を四捨五入)を使わずに、四捨五入するスクリプトを作ってください。
ただし、([切り上げ v] \( () \))([切り下げ v] \( () \))も禁止です。
このとき、四捨五入する数は変数a、四捨五入した数は変数bに入れることとします。[a v] を [x.xx] にする?
[b v] を [0] にする
(a) 回繰り返す
[b v] を (1) ずつ変える
end
[a v] を [x.xx] にするこれで負の数にも対応できましたが、どうでしょうか。
[b v] を [0] にする
([絶対値 v] \( (a) \)) 回繰り返す
[b v] を (1) ずつ変える
end
[b v] を ((b) * (([絶対値 v] \( (a) \)) / (a))) にする
Last edited by tyawanmusi (Nov. 1, 2017 12:18:10)
- mi9g0n
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
ホントだ!! \(^o^)/改造して、正の数だけなら、(() を四捨五入)を使わずに、四捨五入するスクリプトを作ってください。
ただし、([切り上げ v] \( () \))([切り下げ v] \( () \))も禁止です。
このとき、四捨五入する数は変数a、四捨五入した数は変数bに入れることとします。[a v] を [x.xx] にする?
[b v] を [0] にする
(a) 回繰り返す
[b v] を (1) ずつ変える
end[a v] を [x.xx] にするこれで負の数にも対応できましたが、どうでしょうか。
[b v] を [0] にする
([絶対値 v] \( (a) \)) 回繰り返す
[b v] を (1) ずつ変える
end
[b v] を ((b) * (([絶対値 v] \( (a) \)) / (a))) にする
- inoking
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
「ブロックの処理速度」とは1つのブロックの処理時間のことですか?こういうことだと思うのですが、どうでしょうか。はいいえ、決定的に違います。たとえがわるくてすみません。ブロックの処理の速度だと思います。
これ
のように、ループを使用する場合と、冗長なコードを書く場合の動作の違いの原因は何かという問題を伝えたかったのです。
描画込みのループは1秒間に最大30回しか実行されないので「30回繰り返す」では約1秒かかりますが
ブロックを30個並べた場合では一瞬で終わります。
mochimochiking さんが言いたかったのはこのことです。よね?
https://scratch.mit.edu/projects/183402724/
ループの場合はループブロックの処理速度が関係しているのかな、と。
そして「0秒待つ」の実行時間が1つのブロックの最小処理時間と考えられていますか?であれば違います。
Scratch 2.0 では各スプライトの処理は1/30秒間隔で起動されています。
「0秒待つ」はその回の実行を放棄し
次回以降に実行タイミングを回すようです(ここら辺のメカニズムは複雑で私も完全には把握していません)。
このため「0秒待つ」単体で1/30秒かかったように見えるわけです。
1つのブロックの処理時間はPCにもよりますが 1/何十万 秒程度のようです。
https://scratch.mit.edu/discuss/post/2851036/ や https://scratch.mit.edu/projects/134034692/ も見てください。
- inoking
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
これら2つの変数を用意する。この時、((a) * (b))これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数と演算のみにしてください。
((((a) * (b)) / ((a) * (b))) + (0))でどうでしょう。
ちょっと今さらですが(<<((a) * (b)) = [0]> ではない> + (0))
「ゼロ除算」や「真偽値から1への変換」を使っているのが気になります。
Scratch ブロックを使ってのクイズなので Scratch で動作すればそれでいいのだとは思いますが。
細かい話ですが、、
ゼロ除算は
Scratch 2.0 の実装言語である ActionScript 3.0 が使用する IEEE 754 規格では確かに NaN を返すようになっていますが
0 と加算できるかどうかは怪しいと思います。
ゼロ除算をプログラムでやると例外で停止するほうが一般的と思いますし、普通はゼロ除算はやってはいけません。
真偽値から1への変換は
Scratch 2.0(や 3.0)ではそのように動作していますが TRUE は「0以外」が一般的です。
というわけで
無理やりですが作ってみました。
([切り上げ v] \( ( ([atan v] \( ([絶対値 v] \( ((a) * (b)) \)) \)) / (90)) \))
- so-zo
-
Scratcher
7 posts
Scratchスクリプトクイズ
なるほど。「ブロックの処理速度」とは1つのブロックの処理時間のことですか?こういうことだと思うのですが、どうでしょうか。はいいえ、決定的に違います。たとえがわるくてすみません。ブロックの処理の速度だと思います。
これ
のように、ループを使用する場合と、冗長なコードを書く場合の動作の違いの原因は何かという問題を伝えたかったのです。
描画込みのループは1秒間に最大30回しか実行されないので「30回繰り返す」では約1秒かかりますが
ブロックを30個並べた場合では一瞬で終わります。
mochimochiking さんが言いたかったのはこのことです。よね?
https://scratch.mit.edu/projects/183402724/
ループの場合はループブロックの処理速度が関係しているのかな、と。
そして「0秒待つ」の実行時間が1つのブロックの最小処理時間と考えられていますか?であれば違います。
Scratch 2.0 では各スプライトの処理は1/30秒間隔で起動されています。
「0秒待つ」はその回の実行を放棄し
次回以降に実行タイミングを回すようです(ここら辺のメカニズムは複雑で私も完全には把握していません)。
このため「0秒待つ」単体で1/30秒かかったように見えるわけです。
1つのブロックの処理時間はPCにもよりますが 1/何十万 秒程度のようです。
https://scratch.mit.edu/discuss/post/2851036/ や https://scratch.mit.edu/projects/134034692/ も見てください。
ありがとうございます。勉強になりました。
- ko2222
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
(letter) を (n) 番目に挿入する([a v])を、他のブロックを組み合わせて作ってください。
ただし、
(a :: list)以外のリストの使用は禁止です。
- fine316
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
(letter) を (n) 番目に挿入する([a v])を、他のブロックを組み合わせて作ってください。
ただし、(a :: list)以外のリストの使用は禁止です。
定義 (letter) を (n) 番目に挿入する(a)
[] を [a v] に追加する
[i v] を ([a v] の長さ :: list) にする
<(i) = (n::custom) > まで繰り返す
[i v] を (-1) ずつ変える
((i) + (1)) 番目( [a v] )を ((i) 番目( [a v] ) :: list) で置き換える
(i) 番目( [a v] )を [] で置き換える
end
(i) 番目( [a v] )を (letter::custom) で置き換える
- ko2222
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
正解です。(letter) を (n) 番目に挿入する([a v])を、他のブロックを組み合わせて作ってください。
ただし、(a :: list)以外のリストの使用は禁止です。定義 (letter) を (n) 番目に挿入する(a)
[] を [a v] に追加する
[i v] を ([a v] の長さ :: list) にする
<(i) = (n::custom) > まで繰り返す
[i v] を (-1) ずつ変える
((i) + (1)) 番目( [a v] )を ((i) 番目( [a v] ) :: list) で置き換える
(i) 番目( [a v] )を [] で置き換える
end
(i) 番目( [a v] )を (letter::custom) で置き換える
想定解とほぼ同じ。
- ryorozyo
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
再帰使っていいなら(letter) を (n) 番目に挿入する([a v])を、他のブロックを組み合わせて作ってください。
ただし、(a :: list)以外のリストの使用は禁止です。
定義 (letter) を (n) 番目に挿入する(aに)とかでよさそう(自信ない)
もし <([a v] の長さ :: list) < (n)> なら
(letter) を [a v] に追加する
でなければ
((n) 番目( [a v] ) :: list) を ((n) + (1)) 番目に挿入する (aに) :: custom
(n) 番目( [a v] )を (letter) で置き換える
end
Last edited by ryorozyo (Nov. 7, 2017 14:08:07)
- ko2222
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
すまない、あいにく再帰には詳しくない。再帰使っていいなら(letter) を (n) 番目に挿入する([a v])を、他のブロックを組み合わせて作ってください。
ただし、(a :: list)以外のリストの使用は禁止です。定義 (letter) を (n) 番目に挿入する(aに)とかでよさそう(自信ない)
もし <([a v] の長さ :: list) < (n)> なら
(letter) を [a v] に追加する
でなければ
((n) 番目( [a v] ) :: list) を ((n) + (1)) 番目に挿入する (aに) :: custom
(n) 番目( [a v] )を (letter) で置き換える
end
たぶん合ってるんじゃないかな(適当)
- tyawanmusi
-
Scratcher
100+ posts
Scratchスクリプトクイズ
遅れましたが・・・正解です。これら2つの変数を用意する。この時、((a) * (b))これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数と演算のみにしてください。((((a) * (b)) / ((a) * (b))) + (0))でどうでしょう。ちょっと今さらですが(<<((a) * (b)) = [0]> ではない> + (0))
「ゼロ除算」や「真偽値から1への変換」を使っているのが気になります。
Scratch ブロックを使ってのクイズなので Scratch で動作すればそれでいいのだとは思いますが。
細かい話ですが、、
ゼロ除算は
Scratch 2.0 の実装言語である ActionScript 3.0 が使用する IEEE 754 規格では確かに NaN を返すようになっていますが
0 と加算できるかどうかは怪しいと思います。
ゼロ除算をプログラムでやると例外で停止するほうが一般的と思いますし、普通はゼロ除算はやってはいけません。
真偽値から1への変換は
Scratch 2.0(や 3.0)ではそのように動作していますが TRUE は「0以外」が一般的です。
というわけで
無理やりですが作ってみました。([切り上げ v] \( ( ([atan v] \( ([絶対値 v] \( ((a) * (b)) \)) \)) / (90)) \))
確かに0除算はダメですね。
ちなみに想定解はこのページの一番上にあります。
- tyawanmusi
-
Scratcher
100+ posts
Scratchスクリプトクイズ
同じ回答だったため削除。
Last edited by tyawanmusi (Jan. 25, 2018 04:03:38)
- fine316
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。
((((A) * (B)) / ([絶対値 v] \( ((A) * (B)) \))) + (0))//ゼロ除算あり







