Discuss Scratch

so-zo
Scratcher
7 posts

Scratchスクリプトクイズ

tyawanmusi wrote:

abee wrote:


では、追加問題です。
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スクリプトクイズ

so-zo wrote:

tyawanmusi wrote:

abee wrote:


では、追加問題です。
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スクリプトクイズ

tyawanmusi wrote:

so-zo wrote:

tyawanmusi wrote:

abee wrote:


では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。
((((a) * (b)) / ([絶対値 v] \( ((a) * (b)) \))) + (0))
どうでしょう。
正解です。
+0の必要性がわからない・・・
+0がないとa*bが0の場合NaNになってしまいます。
https://scratch.mit.edu/projects/183403265/

Last edited by so-zo (Nov. 1, 2017 07:59:34)

apple502j
Scratcher
1000+ posts

Scratchスクリプトクイズ

tyawanmusi wrote:

乱入失礼。恐らくこれからこのトピックに茶碗蒸しがくっつくと思います。
では問題。
(a)
(b)
これら2つの変数を用意する。この時、
((a) * (b))
これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数演算のみにしてください。
これ自分が作ったら全部合わせて12ブロックになったんだよね・・・
(<<((a) * (b)) = [0]> ではない> + (0))
tyawanmusi
Scratcher
100+ posts

Scratchスクリプトクイズ

apple502j wrote:

tyawanmusi wrote:

乱入失礼。恐らくこれからこのトピックに茶碗蒸しがくっつくと思います。
では問題。
(a)
(b)
これら2つの変数を用意する。この時、
((a) * (b))
これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数演算のみにしてください。
これ自分が作ったら全部合わせて12ブロックになったんだよね・・・
(<<((a) * (b)) = [0]> ではない> + (0))
正解です。真偽値も加えられたんですね・・・
mi9g0n
Scratcher
1000+ posts

Scratchスクリプトクイズ

abee wrote:

(() を四捨五入)
を使わずに、四捨五入するスクリプトを作ってください。
ただし、
([切り上げ v] \( () \))
([切り下げ v] \( () \))
も禁止です。
このとき、四捨五入する数は変数a、四捨五入した数は変数bに入れることとします。
正の数だけなら、
[a v] を [x.xx] にする
[b v] を [0] にする
(a) 回繰り返す
[b v] を (1) ずつ変える
end
?
tyawanmusi
Scratcher
100+ posts

Scratchスクリプトクイズ

mi9g0n wrote:

abee wrote:

(() を四捨五入)
を使わずに、四捨五入するスクリプトを作ってください。
ただし、
([切り上げ 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スクリプトクイズ

tyawanmusi wrote:

mi9g0n wrote:

abee wrote:

(() を四捨五入)
を使わずに、四捨五入するスクリプトを作ってください。
ただし、
([切り上げ 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))) にする
これで負の数にも対応できましたが、どうでしょうか。
ホントだ!! \(^o^)/
tyawanmusi
Scratcher
100+ posts

Scratchスクリプトクイズ

mi9g0n wrote:

tyawanmusi wrote:

mi9g0n wrote:

abee wrote:


ホントだ!! \(^o^)/
ぜったいちってべんりだね。
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

so-zo wrote:

mochimochiking wrote:

inoking wrote:

so-zo wrote:

mochimochiking wrote:

たとえがわるくてすみません。
これ
のように、ループを使用する場合と、冗長なコードを書く場合の動作の違いの原因は何かという問題を伝えたかったのです。
ブロックの処理の速度だと思います。
いえ、決定的に違います。
描画込みのループは1秒間に最大30回しか実行されないので「30回繰り返す」では約1秒かかりますが
ブロックを30個並べた場合では一瞬で終わります。

mochimochiking さんが言いたかったのはこのことです。よね?
はい
こういうことだと思うのですが、どうでしょうか。
https://scratch.mit.edu/projects/183402724/
ループの場合はループブロックの処理速度が関係しているのかな、と。
「ブロックの処理速度」とは1つのブロックの処理時間のことですか?
そして「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スクリプトクイズ

tyawanmusi wrote:

これら2つの変数を用意する。この時、
((a) * (b))
これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数演算のみにしてください。

abee wrote:

((((a) * (b)) / ((a) * (b))) + (0))
でどうでしょう。

apple502j wrote:

(<<((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スクリプトクイズ

inoking wrote:

so-zo wrote:

mochimochiking wrote:

inoking wrote:

so-zo wrote:

mochimochiking wrote:

たとえがわるくてすみません。
これ
のように、ループを使用する場合と、冗長なコードを書く場合の動作の違いの原因は何かという問題を伝えたかったのです。
ブロックの処理の速度だと思います。
いえ、決定的に違います。
描画込みのループは1秒間に最大30回しか実行されないので「30回繰り返す」では約1秒かかりますが
ブロックを30個並べた場合では一瞬で終わります。

mochimochiking さんが言いたかったのはこのことです。よね?
はい
こういうことだと思うのですが、どうでしょうか。
https://scratch.mit.edu/projects/183402724/
ループの場合はループブロックの処理速度が関係しているのかな、と。
「ブロックの処理速度」とは1つのブロックの処理時間のことですか?
そして「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スクリプトクイズ

ko2222 wrote:

(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スクリプトクイズ

fine316 wrote:

ko2222 wrote:

(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スクリプトクイズ

ko2222 wrote:

(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スクリプトクイズ

ryorozyo wrote:

ko2222 wrote:

(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スクリプトクイズ

inoking wrote:

tyawanmusi wrote:

これら2つの変数を用意する。この時、
((a) * (b))
これが0になる時は0、0以外の数になるときには1を返り値にするようなスクリプトを作ってください。
また、使って良いブロックは変数演算のみにしてください。

abee wrote:

((((a) * (b)) / ((a) * (b))) + (0))
でどうでしょう。

apple502j wrote:

(<<((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スクリプトクイズ

tyawanmusi wrote:

では、追加問題です。
A*Bが0未満になる時は-1
A*Bが0になる時は0
A*Bが0以上(0ではない)になる時は1
を、返り値にするようなスクリプトを同じ条件で作ってください。
応用です。
((((A) * (B)) / ([絶対値 v] \( ((A) * (B)) \))) + (0))//ゼロ除算あり

Powered by DjangoBB