質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

429閲覧

スクリプトの構成?の見当がつきません

Kou04

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/07/25 18:25

前提・実現したいこと

プログラミングの勉強を始めたいと考えているものです。
幅1m/奥行き1m/高さ1mのボックスを10m x 10m x 10mのグリッド空間に並べる方法が2^1000通りあるとして
それらのうちから、ボックスがきちんと積み上げられている、あるいはxy方向に隣り合うボックスがあるもののみを抽出し
その抽出したものを更に、階段状にボックスが積まれているなどの条件によって分類したいです

このようなスクリプトを書くためにはどのようなことを学ぶ必要がありますか?
現在オンラインのpython講座などで勉強をしていますが、そもそもpythonで自分の期待していることができるようになるのか疑問です。
とても不明瞭な質問かと思いますが、回答よろしくお願いいたします。

試したこと

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2020/07/25 20:53

もっと簡単な問題からはじめたら?
skysoul

2020/07/25 23:17

それはこういう状況もありですか?↓ □ □
skysoul

2020/07/25 23:18

半角スペースが反映されませんでした ┃ □ ┃  □
Kou04

2020/07/26 01:16

takasima20様 おっしゃる通りだと思います
Kou04

2020/07/26 01:20

skysoul様 ズレて積むようなことは現状考えていません、あくまでも箱単位のグリッドにそって積むイメージです(ただ全体のスケールが大きくなった場合、skysoul様に示していただいたような形状が、箱の集合として見えてクルことはあると思います)
skysoul

2020/08/02 11:19

返信遅れました。 なら、積む方法は1000!ではないでしょうか?
guest

回答1

0

ベストアンサー

幅1m/奥行き1m/高さ1mのボックスを10m x 10m x 10mのグリッド空間に並べる方法が2^1000通りあるとして

それらのうちから、ボックスがきちんと積み上げられている、あるいはxy方向に隣り合うボックスがあるもののみを抽出し
その抽出したものを更に、階段状にボックスが積まれているなどの条件によって分類したいです

そのような実装は、最低限、条件分岐、反復処理ができるプログラミング言語であればできますので、pythonでなくてもいいです。それよりも、「ボックスがきちんと積み上げられている」とはどういう状態をさすのか?「xy方向に隣り合うボックスがあるもの」を調べるにはどうするのか?抽出するにはどうすればいいか?など、自分のやりたいことを紙に書いて言語化し、ソースコードに落とし込めるかの方が大事だと思います。
いきなり3次元でやるのは大変なので、最初は1次元, 2次元でやってみるのがいいと思います。
(簡単なことからやっていって、コードを継ぎ足しながら少しずつ難しい部分に取り組むのがコツです)

とはいえ、どういう風にソースコードを書けばいいかは文法などの基礎がなければ難しいでしょう。まずは、基礎を固めていくと、どんな風に書けばいいかはイメージがつくのではないかと思います。pythonであれば他の言語に比べて初心者向きですし、大抵のものは作れますので安心して学習してください。

投稿2020/07/25 21:09

Penpen7

総合スコア698

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kou04

2020/07/26 01:33

Penpen7様 回答ありがとうございます、とても励みになります ボックスが積み上げられている状態はボックスA(x, y, z)に対して、ボックスB(x, y, z+1) 隣り合うものについてはC(x, y, z)に対してD(x±1, y, z) orD(x, y±1, z)を満たすもの と考えており、 ランダムに作られた2^1000通りのものから条件に合うものだけ残していくのか、条件に合う形で積んでいくのか、どちらが良いのかなどについては判断がつきません 周りに聞ける人がおらず、pythonという選択肢がそもそも間違っているのかと思い質問させていただきましたが、簡単なことから少しずつ勉強していってみたいと思います
Penpen7

2020/07/26 04:15 編集

分かりづらいのでx,y平面で考えます。 n個ボックスが積み上げられている状態はボックスA(x, 0)に対して、n個のボックスB(x, y') (0<=y'<=n-1)が存在するということ。 隣り合うものについてはボックスC(x, y, z)に対してD(x+1, y)かD(x-1,y)に少なくとも一つボックスが存在すること。 と決めておきます。 (積み上げるのは地面(y=0)からということでいいんですよね...?) > ランダムに作られた2^1000通りのものから条件に合うものだけ残していくのか、条件に合う形で積んでいくのか、どちらが良いのかなどについては判断がつきません 条件に合うものだけ残していく、一つ一つの箱に置くか置かないか決めてしまうと、時間がかかってしまうケースもありそうです。(積み上げられて置かれるというケースは確率的に低く、大抵は途切れて積み上げられない状態の方が圧倒的に多いと思います) ですから、後者の条件に合う形で積んでいくというのを私は選ぶと思います。まずは、途切れないように積み上げていくことを考えます。最初に積み上げるxの個数をランダムに決めます。ここで2個となったとすると次にその個数分x座標をランダムに求めてやります。x = 0, 3としましょう。 つまり積み上げる場所を下のようにマーキングしておくということです。 1001 0123(x座標) 再び2個ランダムに数字を決めてやりましょう。この数字は何個ボックスを積むか決める数字になります。 例えばここで(4,2)と決まったとすると, x=0に4個, x=3に2個積み上げるという意味になります。 1000 1000 1001 1001 0123(x座標) これで積み上げられたことになります。あとは隣り合うボックスを作ればいいので、x=0,3以外で現在0となっているマスを一つ一つ見ていき、もし隣にボックスがあれば、ランダムに置くかどうか決めます。そのようにするとご質問の仕様は満たされることになります。 私ならこうするの一例でした。何れにせよ、変数, 2次元配列, 乱数, 条件分岐, 反復処理の理解が必須になります。
Kou04

2020/07/26 14:30

とてもわかりやすいです、シンプルに考えることって思っている以上に出来ていないものなのですね、、、 理解が必要な項目についても教えていただきありがとうございます。参考にさせていただきます。 とても詳しく教えてくださりありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問