Discuss Scratch

hirayuu1414
Scratcher
500+ posts

Scratchスクリプトクイズ

正解です。想定解の一つでもあります。
綺麗ではありませんが想定解はもう二つ一つあります。

Last edited by hirayuu1414 (April 5, 2023 12:26:16)

abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

普通に考えるとこれでしょうか。
定義 sin(θ)
x座標を (0) 、y座標を (0) にする
((θ) - (90)) 度に向ける
(100) 歩動かす
[sinθ v] を ((y座標) / (100)) にする
Catapult-
Scratcher
100+ posts

Scratchスクリプトクイズ

#2618に回答
定義 sin(θ)
[pi v] を [3.14159265359] にする
[sinθ v] を [0] にする
[i v] を [1] にする
(10) 回繰り返す
[num! v] を [1] にする
(i)!
[sinθ v] を ((<(((i) - (1)) を (4) で割った余り) = [2]> 番目\( [-] \)の文字) と (([10^ v] \( ((i) * ([log v] \( (((θ) / (180)) * (pi)) \))) \)) / (num!))) ずつ変える
[i v] を (2) ずつ変える
end
[i v] を ([i] と []) にする
定義 (num)!
[num! v] を ((num!) * (num)) にする
もし <(1) <(num) > なら
((num)-(1))!
end
長々と書きましたが要するにテイラー展開です

Last edited by Catapult- (April 5, 2023 23:20:45)

sakura_neko
Scratcher
90 posts

Scratchスクリプトクイズ

#2618に回答
定義 sin(θ)
もし <<(θ) < [0]> または <(θ) > [360]>> なら
sin((θ) を (360) で割った余り)
でなければ
もし <(θ) > [180]> なら
sin((θ) - (180))
[sinθ v] を ((-1) * (sinθ)) にする
でなければ
もし <(θ) > [90]> なら
sin((180) - (θ))
でなければ
もし <(θ) > [45]> なら
sin((90) - (θ))
[sinθ v] を ([平方根 v] \( ((1) - ((sinθ) * (sinθ))) \)) にする
でなければ
[sinθ v] を (0) にする
(5) 回繰り返す
[sinθ v] を ((sinθ) - ((0.0174532925199432958) * ((([asin v] \( (sinθ) \)) - (θ)) * ([平方根 v] \( ((1) - ((sinθ) * (sinθ))) \))))) にする
end
end
end
end
end
長々と書きましたが要するにニュートン法です
追記:https://scratch.mit.edu/projects/831751113/ で検証できます

Last edited by sakura_neko (April 6, 2023 04:26:37)

abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

長いスクリプトは検証が大変なので、ブロックで書くと同時にプロジェクトを共有してもらった方が良いと思います。
inoking
Scratcher
1000+ posts

Scratchスクリプトクイズ

数学的な三角関数の代用方法は他にいくつもありますが
それを Scratch で実装するだけって
スクリプトクイズの範疇なのでしょうか?
abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

このケースでは、どこまでがクイズでどこまでがそうでないかの判断は難しいと思います。
出題者が決めることですが、私は面白いと思いました。マーヴィン・ミンスキーが言うように「2つ以上の方法で解かない限り、本当に理解したとは言えない」だと思います。
xiangyeng
Scratcher
100+ posts

Scratchスクリプトクイズ

この問題を解く前にこの記事を読むことをお勧めします。

下のスクリプトは1つ欠けています。欠けているところを埋めて下さい‼️(定義のハットブロックがScratch3.0の色じゃないのは許して)
定義 キーボード判定
x座標を ((x座標::4c97ff)+(<[右向き矢印キー v] キーが押された::#5cb1d6> - ()::#59c059)::#59c059) 、y座標を ((y座標::4c97ff)+(<[上向き矢印キー v] キーが押された::#5cb1d6> - <[下向き矢印キー v] キーが押された::#5cb1d6>::#59c059)::#59c059) にする::#4c97ff
ここからのスクリプトは欠けていません。
@greenflagがクリックされたとき::#ffbf00
ずっと::#ffab19
キーボード判定::#ff6680
end

Last edited by xiangyeng (April 6, 2023 04:57:20)

abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

期待する「キーボード判定」の動きが書かれていないので、クイズとして成立していません。
hirayuu1414
Scratcher
500+ posts

Scratchスクリプトクイズ

#2623~2625
検証プロジェクトを作成してみました。
abeeさんのものとsakura_nekoさんのものは正解です。
Catapult-さんのものは負の数や少し大きめの数を入力すると誤差が規定より大きくなるようです。

最後の想定解も入っています。
ただのテイラー展開を利用しただけなので他の想定解より綺麗ではありませんが。

#2627
私はsousi02さんやabeeさんのように綺麗に解くのも、sakura_nekoさんのように数学的な解き方を実装するのもアリだと思っています。

Last edited by hirayuu1414 (April 7, 2023 01:48:36)

akinarin
Scratcher
500+ posts

Scratchスクリプトクイズ

問題です。
以下のブロックだけを使ってフィボナッチ数列の先頭のちょうど1000個を
「結果」というリストに並べて下さい。
(フィボナッチ数列は(1, 1, 2..)というように1から始まります)
@greenFlagがクリックされた時 :: hat events

[... v]のすべてを削除する::list

[]を[... v]に追加する

(() + ())

()回繰り返す
end

[... v]を止める
定義ブロック

但し、使っていいブロック数は100個以下とします

追記: 整数で扱える範囲を超えてしまうことによる誤差は考えないものとします。

Last edited by akinarin (April 7, 2023 03:22:30)

abee
Scratcher
1000+ posts

Scratchスクリプトクイズ

#2632
その場合、Scratchで扱える整数の範囲を超えると思いますが、それはどのように扱いますか。
Catapult-
Scratcher
100+ posts

Scratchスクリプトクイズ

#2632
オーバーフローを考えないのであれば、以下のようなスクリプトでできます。
@greenFlagがクリックされた時 :: hat events
[list v]のすべてを削除する::list
F (1) (1) (1)

定義 F (a)(b)(time)
(a)を[list v]に追加する
((time) + (-999))回繰り返す
[すべて v]を止める
end
F (b) ((a)+(b)) ((time)+(1))
akinarin
Scratcher
500+ posts

Scratchスクリプトクイズ

>> #2633
すみません、整数の扱える範囲のことは全く考えていませんでした。
それによる誤差は考えないものとします。

#2634 正解です。

Last edited by akinarin (April 7, 2023 03:21:43)

akinarin
Scratcher
500+ posts

Scratchスクリプトクイズ

変数x, yには正の整数が入っています。
以下のブロックを用いて、xとyの最大公約数を2秒言うプログラムを作って下さい。
(x)
(y)
[] と (2) 秒言う

@greenFlagがクリックされた時 :: hat events

(() + ())

()回繰り返す
end

[... v]を止める
定義ブロック


sakura_neko
Scratcher
90 posts

Scratchスクリプトクイズ

akinarin
Scratcher
500+ posts

Scratchスクリプトクイズ

>> #2636
正解です。
#2636も#2633も再帰定義を上手く利用する問題でした。
変数に代入することが出来ないので、値を返すことが出来ません。
その制限が再帰という手段の利点を奪うことで難しくなったと思います。
akinarin
Scratcher
500+ posts

Scratchスクリプトクイズ

#2618に解答します。
https://scratch.mit.edu/projects/832520099/

asinでsinを求めるという、回りくどいことをやってます。
pupon
Scratcher
100+ posts

Scratchスクリプトクイズ

pupon wrote:

数値が入った変数
(min)
(max)
(n)
があります。
この時、
変数「n」を「min」から「max」までの範囲に入るように修正するプログラムを作ってください。

(例)
minが1 maxが10 nが20の時は、nが1~10までの範囲からはみ出ないように調整するので、nが10になります。
minが5 maxが8 nが3の時は、nが5になります。

難易度が二段階あります。

<Easy>
何のブロックでも使っていいです。

<Hard>
演算ブロック、変数ブロックしか使えません。

正解者が二人以上になったら想定解を出そうと思います
解答がないまま次ページに行ってしまったので再投稿します。
Catapult-
Scratcher
100+ posts

Scratchスクリプトクイズ

min < maxの場合、
[n v] を ((n) + ((<(max) < (n)> * ((max) - (n))) + (<(n) < (min)> * ((min) - (n))))) にする
で動作します。
max ≦ minの場合はおそらく問題ではないと思われるので、これで回答します。

Powered by DjangoBB