7
カメラを回転させます。宇宙飛行士を救う
注:The Martianのマイナーネタバレはこの課題にあります。注意して先読みしてください 火星人は、火星に偶然立ち往生した宇宙飛行士であり植物学者でもある並外れたマーク・ワトニーについてのSF小説です。本のある時点で、マークはNASAと通信しようとしますが、彼らが持っている通信の唯一の手段はカメラです。マークはインデックスカードに書き込むことでメッセージを送信します。NASAはカメラを360度回転させることができるため、NASAはカメラを「はい」または「いいえ」とラベル付けして返信します。 NASAが送信できる唯一のデータはカメラが向いている方向であるため、Markはアルファベット文字のあるカードをポイントしてメッセージを入力できるシステムを考え出します。しかし、文字「az」を使用することは実用的ではありません。この本を引用するには(この回答から、scifi.seに): 30分ごとにyes / noの質問よりも速く話す必要があります。カメラは360度回転でき、アンテナパーツがたくさんあります。アルファベットを作る時間。しかし、文字AからZだけを使用することはできません。26文字と質問カードは、着陸機の周りの27枚のカードになります。それぞれがたった13度の円弧を取得します。JPLがカメラを完璧に向けたとしても、どの文字が意味するのかわからない可能性があります。 したがって、ASCIIを使用する必要があります。それがコンピューターがキャラクターを管理する方法です。各文字には0〜255の数値コードがあります。0〜255の値は2桁の16進数で表現できます。16進数のペアを渡すことで、数字や句読点など、好きな文字を送信できます。 ... そこで、0から9、およびAからFのカードを作成します。これにより、カメラの周りに16枚のカードと質問カードが配置されます。17枚のカードはそれぞれ21度以上を意味します。対処がはるかに簡単です。 NASAのトップソフトウェアエンジニアの1人としての今日の目標は、カメラのさまざまな角度をエンコードするプログラムを作成することです。マークが指し示す17枚のカードは次のとおりです(順番に)。 ?0123456789ABCDEF これらのカードはそれぞれ21度離れているため、カメラをから?に0回転するには、カメラを21度回転し、2to 1を-21度回転する必要があります。(それはないです正確に 21、私たちはそれをシンプルに保つために丸めます)soから行くために、このラップをFすることは3105度(5ターン、5 * 21 = 105)です。これは、カメラが遠くまで移動する必要がないため、-252よりも効率的です。 プログラムまたは関数が行う必要があることは次のとおりです。 入力として文字列を受け取ります。この文字列をsと呼びます。単純にするために、入力は印刷可能なASCIIのみになります。この例では、入力がSTATUS 各文字を16進表現に変換します。これはに変換さSTATUSれ53 54 41 54 55 53ます。 各カードを指し示して「質問カード」に戻るために、カメラが行う必要のある連続した学位の回転を印刷または返す。この例では、これは次のようになります。 6 * 21 = 126 (?-5) -2 * 21 = -42 (5-3) 2 * 21 = 42 (3-5) -1 * 21 = …