紙を42回折ると月に到達するという話がある
オチとしては、「42回も紙を折ることはできない」という話だった気がする。
地球から月への距離は
地球中心から月の中心までの平均距離は38万4,403km(約1.3光秒)であり、地球の赤道半径の約60.27倍である。
iOS には Units and Measurement という仕組みがある
単位変換が簡単にできそう。
Units and Measurement | Apple Developer Documentation
Label numeric quantities with physical dimensions to allow locale-aware formatting and conversion between related units.
紙を何回折ると月に届くのか調べるプログラムを Swift で書く
紙の厚さを 0.08mm と仮定。
import UIKit
// 地球と月との距離 38万4403キロメートル
let dist = Measurement(value: 384403, unit: UnitLength.kilometers)
// 紙の厚さは0.08ミリメートル
let paperThickness = Measurement(value: 0.08, unit: UnitLength.millimeters)
// 厚さを基準であるメートルに変換
var thickness = paperThickness.converted(to: UnitLength.meters)
// とりあえず100回ぐらい折ってみようか
for i in 0..<100 {
if thickness.value >= 1000.0 {
// キロメートルに変換して出力
print("\(i)回目: \(thickness.converted(to: UnitLength.kilometers))")
} else if thickness.value >= 1.0 {
// メートルのまま出力
print("\(i)回目: \(thickness)")
} else if thickness.value >= 0.01 {
// センチメートルに変換して出力
print("\(i)回目: \(thickness.converted(to: UnitLength.centimeters))")
} else {
// ミリメートルに変換して出力
print("\(i)回目: \(thickness.converted(to: UnitLength.millimeters))")
}
// 地球と月との距離を超えたら終了
if thickness >= dist {
print("\(paperThickness)の厚さの紙を\(i)回折ると月に到達することがわかった。")
break
}
// 厚さを2倍にする
thickness = thickness * 2
}
実行結果
0.08 mmの厚さの紙を43回折ると月に到達することがわかった。

0回目: 0.08 mm
1回目: 0.16 mm
2回目: 0.32 mm
3回目: 0.64 mm
4回目: 1.28 mm
5回目: 2.56 mm
6回目: 5.12 mm
7回目: 1.024 cm
8回目: 2.048 cm
9回目: 4.096 cm
10回目: 8.192 cm
11回目: 16.384 cm
12回目: 32.768 cm
13回目: 65.536 cm
14回目: 1.31072 m
15回目: 2.62144 m
16回目: 5.24288 m
17回目: 10.48576 m
18回目: 20.97152 m
19回目: 41.94304 m
20回目: 83.88608 m
21回目: 167.77216 m
22回目: 335.54432 m
23回目: 671.08864 m
24回目: 1.34217728 km
25回目: 2.68435456 km
26回目: 5.36870912 km
27回目: 10.73741824 km
28回目: 21.47483648 km
29回目: 42.94967296 km
30回目: 85.89934592 km
31回目: 171.79869184 km
32回目: 343.59738368 km
33回目: 687.19476736 km
34回目: 1374.38953472 km
35回目: 2748.77906944 km
36回目: 5497.55813888 km
37回目: 10995.11627776 km
38回目: 21990.23255552 km
39回目: 43980.46511104 km
40回目: 87960.93022208 km
41回目: 175921.86044416 km
42回目: 351843.72088832 km
43回目: 703687.44177664 km
0.08 mmの厚さの紙を43回折ると月に到達することがわかった。
今回の動作確認環境
- Xcode 10.3