Discuss Scratch

  • Discussion Forums
  • » 日本語
  • » Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください) [RSS Feed]
Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

本トピックを利用する前に、必ずこの投稿を最後まで読んでください!
このトピックは、Scratchで競技プログラミングサイトのような問題に挑戦したり、その問題を出題できるものです。
ただし一般的な競プロと違い、ここでは参加者のランク付けはありません。
あなたもぜひScratchで競プロの世界に飛び込みましょう!
※このトピックの内容はScratchやその他のプログラミングに慣れている人におすすめです。
まだ慣れていないという方は、Scratchスクリプトクイズのほうにも参加してみてください!

問題の解き方
問題は「問題名」「実行時間制限」「問題文」「制約」「結果例」の5つで作られます。
問題名: 問題の名前です。
実行時間制限: プログラムの実行にかけることができる時間です。
 ターボモードを有効にしたうえで、この時間内にプログラムの実行が終わらない場合は不正解となります。
 ※この時間内で問題を解かなければいけないというわけではありません。
問題文: 問題の内容です。変数として、aやnといった文字が登場することもあります。
制約: 問題文で登場した変数が取ることのできる値の範囲が書かれています。
結果例: 正解のプログラムを実行すると結果がどうなるかを、例として示しています。
また、問題によっては難易度が分かれていたり、上記の五つ以外の追加情報がある場合があります。

問題の例
りんごの樹 実行時間制限: 5秒
x個のりんごがなっている樹があります。
その樹からy個のりんごが地面に落ちました。
樹に残っているりんごの数を求め、変数「結果」に入れてください。
制約
5 ≦ x ≦ 50
1 ≦ y ≦ x
(x, yはともに自然数)
結果例
x = 50, y = 25のとき、変数「結果」に入る値は「25」となります。
正解はこのようになります。
[xの値は?] と聞いて待つ
[x v] を (答え) にする
[yの値は?] と聞いて待つ
[y v] を (答え) にする
[結果 v] を ((x) - (y)) にする

問題を解くときのルール
問題への回答には必ずプロジェクトを作成し、そのURLを投稿するようにしてください。
・どの問題に回答しているかがわかるようにしてください。
・制約で決められたすべての変数の値で正しい結果を出せるプログラムを作る必要があります。
 例: 制約が x=2,3 y=1,2 となっている場合、x, y = (2,1),(2,2),(3,1),(3,2) これらすべての場合で正しい答えが出せるようにしてください。
・問題を解くために調べ物をすることができます。
回答者同士で解き方を相談することはできません
・回答の直接的なヒントにならない範囲であれば、出題者に質問をすることができます。
・間違えた問題に再度回答する場合は、新しく投稿をしてください。
・変数の入力は、特に問題の指示がなければ「[ ] と聞いて待つ」ブロックを使用してください。
Turbowarpなど、第三者により制作されたModの使用は禁止します。(詳細はこちら)
・プログラムの実行時間は以下の方法で計測してください。
緑の旗がクリックされたとき
[変数入力] と聞いて待つ
[開始時刻 v] を (2000年からの日数) にする
...//プログラム本体の処理
[実行時間 v] を (((2000年からの日数) - (開始時刻)) * (86400)) にする // 秒単位で実行にかかった時間を計れます
問題投稿のルール
このトピックでは、すべての方が自由に問題を出題できます!
以下のルールを守って、あなたの作った問題を投稿してみてください。
・問題を投稿する前に、自分でも正解のプログラムを作られるか確認してください。
・想定解でない回答が出たときも、適切に正解不正解が判断できるようにしてください。
問題には必ず実行時間制限を設定してください。(目安は5〜15秒です)
・自分の問題に誰かが解答がしたら、正解不正解を伝えてください。
Turbowarpなど、第三者により制作されたModは回答テストに使用しないでください。(詳細はこちら)
・投稿は以下の形でお願いします。
[b][big]問題名[/big][/b] 実行時間制限: n秒
問題文
[big]制約[/big]
変数の取る値の範囲など
[big]結果例[/big]
結果を例示
・難易度を分ける場合は二つまで、難易度名はEasy、Hardで統一してください。
・問題の解答と解説については好きなタイミングで投稿してもかまいませんが、ある程度問題投稿が流れてからにしてください。

Last edited by Poteto143 (June 16, 2025 09:33:23)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

現在投稿されている問題(出題者名、FA者名敬称略) (不定期更新)
※FA(First Accepted): その問題に一番最初に正解した人のこと
総問題数: 45
※自分の問題でここに載っていない物がある場合は僕のプロフィールまでお願いします!

Last edited by Poteto143 (June 16, 2025 09:18:33)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

というわけで、さっそく僕から問題です。
スーパーべき乗君 実行時間制限:5秒
ねこくんは、小さなロボットを作りました。
そのロボットは、2^nの計算をして、結果をしゃべる機能を持っています。
ある日、ねこくんはロボットにnの値をセットし、計算を始めさせました。
このとき、ロボットがしゃべると予想される数字の1ケタ目の数字を、変数「結果」に入れてください。
制約
5 ≦ n ≦ 10^15 (nは自然数)
結果例
n=10のとき、2^10は1024のため、変数「結果」に入るべき値は「4」となります。

Last edited by Poteto143 (April 12, 2021 09:06:07)

00giri
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#3への回答です
https://scratch.mit.edu/projects/716573844/

Last edited by 00giri (July 24, 2022 01:06:35)

yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

私も作りました。
https://scratch.mit.edu/projects/514284354/

もうこれ以上は変更しません。法則を見つけたので合ってると思います。

Last edited by yuikunyeah (April 12, 2021 12:54:39)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#4
正解です!
#5
不正解です…
ちなみに2^nは、2をn乗するという意味です。
yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

修正しました。なんて馬鹿な間違いだ
Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#7
まだ不正解です…!
この方法では実行時間制限の壁にぶつかってしまいます。
また、変数の値がScratchでは扱えないほど大きくなってしまいます。

Last edited by Poteto143 (April 12, 2021 10:14:09)

yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

 わかりました。
yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

Poteto143 wrote:

#7
まだ不正解です…!
この方法では実行時間制限の壁にぶつかってしまいます。
また、変数の値がScratchでは扱えないほど大きくなってしまいます。
なぜ変数が大きくなるんですか?
daikikato
Scratcher
100+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#3への回答↓
https://scratch.mit.edu/projects/514280008/

大きい数を入力すると5秒以内にプログラムが終了しなかったので削除

Last edited by daikikato (April 12, 2021 10:55:13)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#10
nのとる値の範囲を見直してみてください。
yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

わかりました。
今度こそできたと思います(もっと勉強しよ)

Last edited by yuikunyeah (April 12, 2021 12:24:55)

NT_ZZzz
Scratcher
100+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

出題します
エンギイイナンバー 実行時間制限: 5秒
10進法自然数のうち各桁の数字に'4'と'9'を含まない数を「エンギイイナンバー」とします。
N番目に小さな「エンギイイナンバー」を求めてください
制約
この問題は2つの難易度に分かれています
EASY 1 ≦ N ≦ 1000
HARD 1 ≦ N ≦ 1000000000000000(=10^15)
結果例
N=1 のとき 1
N=5 のとき6
N=10 のとき 12
N=1041 のとき 2021
(エンギイイナンバーは小さい順に 1,2,3,5,6,7,8,10,11,12,13,15…となります)

解説はこちら
https://scratch.mit.edu/projects/517025699

Last edited by NT_ZZzz (April 20, 2021 17:28:18)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#13
不正解です・・・。

以下ヒント:
多くの方は変数を2にした後に (変数)*2をn-1回繰り返す方法を考えると思います。
ただ、この方法ではnが1024以上になると変数の値がInfinityに、つまりScratchでは計算できないほど巨大な数になってしまいます。
(2の1024乗を実際にパソコンで計算すれば理由は分かるはず)
さらに、問題の制約ではnのとる値の上限が10^15(1,000,000,000,000,000)となっています。
つまり、最悪の場合999,999,999,999,999回の繰り返しをすることになります。これではいつまでたっても計算が終わりません。
では、この問題はどうやって解けば良いのでしょうか?
その答えは、nが5, 6, 7, 8, 9, 10, 11, 12, 13, 14のときの2^nの値を全て並べてしばらく眺めれば見つかるかもしれません・・・。
yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

意味不明な投稿だったため削除

Last edited by yuikunyeah (April 26, 2021 09:18:03)

Poteto143
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

yuikunyeahさん、#3に正解です!
(回答をし直すときは、前の投稿を編集するのではなくそのたびに新しい投稿をしてくれるとありがたいです・・・。)
sousi02
Scratcher
100+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#14
EASYを作ってみました。かなーり強引ですが…
00giri
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

#14
https://scratch.mit.edu/projects/716574257/ Easyへの回答です

Last edited by 00giri (July 24, 2022 01:08:50)

yuikunyeah
Scratcher
1000+ posts

Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください)

14
Easy
回答しました。
イージーでもエンギヨクナイ

Last edited by yuikunyeah (April 13, 2021 06:33:51)

  • Discussion Forums
  • » 日本語
  • » Scratchで競技プログラミング!(初めての人は最初の投稿をお読みください) [RSS Feed]

Powered by DjangoBB