Discuss Scratch
- moyasi_official
-
Scratcher
100+ posts
Scratchスクリプトクイズ
出題します。
[ v] を []にするを使わずに乱数(指定はない)を作ってください。
[ v] を (0)ずつ変える
repeat until <>
end
((1) から (10)までの乱数)
- e1bfd762321e409cee4a
-
Scratcher
100+ posts
Scratchスクリプトクイズ
#3639
回答します。
線形合同法です。
== 事前準備 ==
0x0のコスチューム、大きさ Infinity % 座標 (1, 0)
== プログラム ==
Edit: 見切れを修正、前提条件修正
Edit: ミス修正 修正前は A のところが 2 でした
回答します。
線形合同法です。
== 事前準備 ==
0x0のコスチューム、大きさ Infinity % 座標 (1, 0)
== プログラム ==
x座標を((((((3.14159265)*(x座標::motion)::operators)+(min::custom)::operators)を(max::custom)で割った余り::operators)-(((min::custom)の[絶対値 v]::operators)/(2)))*(A::custom))にする::motion3.14159265 のところは小数ならなんでもいいです。
((1)+<(min::custom)に(-)が含まれる>) // Aにこれを入れる
Edit: 見切れを修正、前提条件修正
Edit: ミス修正 修正前は A のところが 2 でした
Last edited by e1bfd762321e409cee4a (Jan. 24, 2026 09:22:20)
- e1bfd762321e409cee4a
-
Scratcher
100+ posts
Scratchスクリプトクイズ
Last edited by e1bfd762321e409cee4a (Jan. 24, 2026 09:18:24)
- newmomizi_txt
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
#3644
これは1フレームの長さを測っているだけで、乱数とは呼べないでしょう。端末の処理性能だけに完全に依存しています。
1/30秒≒0.033秒 (計算の都合上0.32になることもある) を下回ることはありませんし、上限に関しては存在しません。
これは1フレームの長さを測っているだけで、乱数とは呼べないでしょう。端末の処理性能だけに完全に依存しています。
1/30秒≒0.033秒 (計算の都合上0.32になることもある) を下回ることはありませんし、上限に関しては存在しません。
- abee
-
Scratcher
1000+ posts
Scratchスクリプトクイズ
#3642
実際に試してみましたが、偏りが大きくて乱数と言えないように思います。
また、minとmaxで指定した範囲外の値を返す場合もあります。
あと、問題があいまいなのでなんともいえませんが、Scratchの乱数ブロックは範囲を整数で入れれば整数が返り、小数を入れれば小数が返ります。
実際に試してみましたが、偏りが大きくて乱数と言えないように思います。
また、minとmaxで指定した範囲外の値を返す場合もあります。
あと、問題があいまいなのでなんともいえませんが、Scratchの乱数ブロックは範囲を整数で入れれば整数が返り、小数を入れれば小数が返ります。
Last edited by abee (Jan. 24, 2026 10:07:32)
- Catapult-
-
Scratcher
100+ posts
Scratchスクリプトクイズ
#3639
set [tmp v] to (join [0] [.])追記:制約を無視していたのでこの投稿は意味をなしません。無視してくださって構いません。制約が割と緩いので変数部分をリストを使った操作に置き換えて同様の趣旨の解答が可能だと思います。
delete all of [list v]
repeat (10)
add (length of [list v] :: list) to [list v]
end
repeat (16)
set [tmp v] to (join (tmp) (item [any] of [list v] :: list))
end
if <(join (min) (max)) contains [.]?> then
set [return v] to ((min) + (((max) - (min)) * (tmp)))
else
set [return v] to ((min) + ([floor v] of ((((max) - (min)) + [1]) * (tmp))))
end
Last edited by Catapult- (Jan. 24, 2026 12:36:08)
- Grandpiano2
-
Scratcher
11 posts
Scratchスクリプトクイズ
こんなことしか思いつきませんでした。
https://scratch.mit.edu/projects/1270495250/
https://scratch.mit.edu/projects/1270495250/
- chutaro5978
-
Scratcher
100+ posts
Scratchスクリプトクイズ
乱数か怪しいところですが、これでどうですか?
Last edited by chutaro5978 (Jan. 24, 2026 23:19:04)
- Catapult-
-
Scratcher
100+ posts
Scratchスクリプトクイズ
みなさん、クイズやってますか〜〜?
この問題を眺めていたら新たな最短解を見つけたので改題として出題します。ageも兼ねて…
変数 a があり、0, 1, 2のみからなるN文字以下の文字列が入っています。aの各桁の数字の合計を変数 return に入れるプログラムを作ってください。
ただし、変数または演算ブロックのみを使用可能とします。繰り返しブロックや定義、リストなどを使用することはできません。
また、(N+1)文字以上の文字列をプログラムに埋め込むことも禁止とします※
難易度 Easy: N=8 Difficult: N=12 Expert: N=14
※N文字以下の文字列を異なる場所に複数埋め込むことや、ブロックの出力が(N+1)文字以上になることは許容しますが、ブロックの入力部分1つに(N+1)文字以上の文字列が入力された状態のプログラムを不可とします。
(元の問題から変更した点を赤字で示しています)
「旗が押された」ブロックのような実行開始ブロックをカウントしない場合、想定解答は Easy: 6ブロック Difficult: 87ブロック Expert: 8ブロック です。
なおコードゴルフ的な楽しみ方を想定してはいますが、想定解答のEasyですら出るか微妙なくらいには難しいと思うので、何か少しでも解を思いついたら出し惜しみせずどんどん提出してみてください!
追記: 想定解のブロック数と難易度を更新(変更部分は斜字)
追記2: 問題文中の表現を一部明瞭なものに変更(変更部分は斜字)
この問題を眺めていたら新たな最短解を見つけたので改題として出題します。ageも兼ねて…
変数 a があり、0, 1, 2のみからなるN文字以下の文字列が入っています。aの各桁の数字の合計を変数 return に入れるプログラムを作ってください。
ただし、変数または演算ブロックのみを使用可能とします。繰り返しブロックや定義、リストなどを使用することはできません。
また、(N+1)文字以上の文字列をプログラムに埋め込むことも禁止とします※
難易度 Easy: N=8 Difficult: N=12 Expert: N=14
※N文字以下の文字列を異なる場所に複数埋め込むことや、ブロックの出力が(N+1)文字以上になることは許容しますが、ブロックの入力部分1つに(N+1)文字以上の文字列が入力された状態のプログラムを不可とします。
(元の問題から変更した点を赤字で示しています)
「旗が押された」ブロックのような実行開始ブロックをカウントしない場合、想定解答は Easy: 6ブロック Difficult: 87ブロック Expert: 8ブロック です。
なおコードゴルフ的な楽しみ方を想定してはいますが、想定解答のEasyですら出るか微妙なくらいには難しいと思うので、何か少しでも解を思いついたら出し惜しみせずどんどん提出してみてください!
追記: 想定解のブロック数と難易度を更新(変更部分は斜字)
追記2: 問題文中の表現を一部明瞭なものに変更(変更部分は斜字)
Last edited by Catapult- (June 5, 2026 08:43:25)
- Catapult-
-
Scratcher
100+ posts
Scratchスクリプトクイズ
Difficultの当初の想定解を活かしたいと思ったので難易度 Expert: N=14 を追加しました。想定解は8ブロックです。
- Catapult-
-
Scratcher
100+ posts
Scratchスクリプトクイズ
みなさん苦戦しているのかあまり解答が出ないようですので、まずEasyの想定解を発表します。
少し解説すると、まずsakura_nekoさんの解と同じ方法で0~2の8桁を0~8の2桁に変換できます。これをk=10α+β (α,β =0,1,2, … ,8)とすると、
18k = 180α+18β ≡ α+18β (<179) (mod179)
α+18β ≡ α+β (<17) (mod17) より確かに成り立つことがわかります。
さて、これを踏まえてDifficult, Expertにも挑戦してみてください。
ちなみにこの解はそのまま改題元の問題の解としても使えます。
set [return v] to (((((a) を (99) で割った余り) * (18)) を (179) で割った余り) を (17) で割った余り)の6ブロックです。(プロジェクトはこちら)
少し解説すると、まずsakura_nekoさんの解と同じ方法で0~2の8桁を0~8の2桁に変換できます。これをk=10α+β (α,β =0,1,2, … ,8)とすると、
18k = 180α+18β ≡ α+18β (<179) (mod179)
α+18β ≡ α+β (<17) (mod17) より確かに成り立つことがわかります。
さて、これを踏まえてDifficult, Expertにも挑戦してみてください。
ちなみにこの解はそのまま改題元の問題の解としても使えます。