Спасибо
mrupor, подсказал место, где нашлись оригинальные исходные тексты игры "Посадка на Луну". Написаны на языке Focal, 1969 год.

Была у меня мысль переписать на Rust, но оказалось, кто-то уже сделал это: https://gist.github.com/kristopherjohnson/83c6a6b8a1b7c6929ced83e922abccc1
Компилируется и запускается так:

Была у меня мысль переписать на Rust, но оказалось, кто-то уже сделал это: https://gist.github.com/kristopherjohnson/83c6a6b8a1b7c6929ced83e922abccc1
Компилируется и запускается так:
$ wget https://gist.githubusercontent.com/kristopherjohnson/83c6a6b8a1b7c6929ced83e922abccc1/raw/ebf2c41f4d316ef5e827eff4a752d2eae9ae8807/lunar.rs
$ rustc lunar.rs
$ ./lunar
CONTROL CALLING LUNAR MODULE. MANUAL CONTROL IS NECESSARY
YOU MAY RESET FUEL RATE K EACH 10 SECS TO 0 OR ANY VALUE
BETWEEN 8 & 200 LBS/SEC. YOU'VE 16000 LBS FUEL. ESTIMATED
FREE FALL IMPACT TIME-120 SECS. CAPSULE WEIGHT-32500 LBS
FIRST RADAR CHECK COMING UP
COMMENCE LANDING PROCEDURE
TIME,SECS ALTITUDE,MILES+FEET VELOCITY,MPG FUEL,LBS FUEL RATE
0 120 0 3600.00 16000.0 K=:0
10 109 5015 3636.00 16000.0 K=:50
20 99 4958 3571.53 15500.0 K=:100
30 90 1333 3401.80 14500.0 K=:200
40 81 1829 3005.64 12500.0 K=:0
50 72 5003 3041.64 12500.0 K=:_

no subject
Date: 2020-08-15 20:13 (UTC)Имплементация шедевр. Истинный фокал.
no subject
Date: 2020-08-16 02:57 (UTC)no subject
Date: 2020-08-16 20:09 (UTC)https://www.cs.brandeis.edu/~storer/LunarLander/LunarLanderTranslations/LunarLanderJohnsonTranslation-c.txt
no subject
Date: 2020-08-18 22:38 (UTC)Совсем недавно нашел исходник на BASIC и переписал на Python. Довольно компактно. А наш общий друг дицассемблировал вариант на БЭСМ6. И мы оба независимо написали программы находящие решение. Я знаю, не честно, но прикольно.
no subject
Date: 2020-08-18 22:46 (UTC)Лёня с твоей подачи и меня увлёк.
Удалось ли тебе посадить на 0 уровне?
Мой алгоритм пока сажает только до 1-го, да и то хреновенько.
no subject
Date: 2020-08-19 03:43 (UTC)no subject
Date: 2020-08-20 05:03 (UTC)Оказалось, правда, что нифига оно не летит по законам физики. Некоторое грубое приближение. И ещё ошибки округления мешают. Я поигрался и пришёл к выводу, что бэктрекинг, пожалуй, получше будет. Причём 80% времени можно лететь только на максимальной/минимальной тяге, 0/200.
no subject
Date: 2020-08-19 03:48 (UTC)10 PRINT TAB(33);"LUNAR"
20 PRINT TAB(l5);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
25 PRINT:PRINT:PRINT
30 PRINT "THIS IS A COMPUTER SIMULATION OF AN APOLLO LUNAR"
40 PRINT "LANDING CAPSULE.": PRINT: PRINT
50 PRINT "THE ON-BOARD COMPUTER HAS FAILED (IT WAS MADE BY"
60 PRINT "XEROX) SO YOU HAVE TO LAND THE CAPSULE MANUALLY."
70 PRINT: PRINT "SET BURN RATE OF RETRO ROCKETS TO ANY VALUE BETWEEN"
80 PRINT "0 (FREE FALL) AND 200 (MAXIMUM BURN) POUNDS PER SECOND."
90 PRINT "SET NEW BURN RATE EVERY 10 SECONDS.": PRINT
100 PRINT "CAPSULE WEIGHT 32,500 LBS; FUEL WEIGHT 16,500 LBS."
110 PRINT: PRINT: PRINT: PRINT "GOOD LUCK"
120 L=0
130 PRINT: PRINT "SEC","MI + FT","MPH","LB FUEL","BURN RATE":PRINT
140 A=120:V=1:M=33000:N=16500:G=1E-03:Z=1.8
150 PRINT L,INT(A);INT(5280*(A-INT(A))),3600*V,M-N,:INPUT K:T=10
160 IF M-N<1E-03 THEN 240
170 IF T<1E-03 THEN 150
180 S=T: IF M>=N+S*K THEN 200
190 S=(M-N)/K
200 GOSUB 420: IF I<=O THEN 340
210 IF V<=0 THEN 230
220 IF J<0 THEN 370
230 GOSUB 330: GOTO 160
240 PRINT "FUEL OUT AT";L;"SECONDS":S=(-V+SQR(V*V+2*A*G))/G
250 V=V+G*S: L=L+S
260 W=3600*V: PRINT "ON MOON AT";L;"SECONDS - IMPACT VELOCITY";W;"MPH"
274 IF W<=1.2 THEN PRINT "PERFECT LANDING!": GOTO 440
280 IF W<=10 THEN PRINT "GOOD LANDING (COULD RE BETTER)":GOTO 440
282 IF W>60 THEN 300
284 PRINT "CRAFT DAMAGE... YOU'RE STRANDED HERE UNTIL A RESCUE"
286 PRINT "PARTY ARRIVES. HOPE YOU HAVE ENOUGH OXYGEN!"
288 GOTO 440
300 PRINT "SORRY THERE NERE NO SURVIVORS. YOU BLOW IT!"
310 PRINT "IN FACT, YOU BLASTED A NEW LUNAR CRATER";W*.227;"FEET DEEP!"
320 GOTO 440
330 L=L+S: T=T-S: M=M-S*K: A=I: V=J: RETURN
340 IF S<5E-03 THEN 260
350 D=V+SQR(V*V+2*A*(G-Z*K/M)):S=2*A/D
360 GOSUB 420: GOSUB 330: GOTO 340
370 W=(1-M*G/(Z*K))/2: S=M*V/(Z*K*(W+SQR(W*W+V/Z)))+.05:GOSUB 420
380 IF I<=0 THEN 340
390 GOSUB 330: IF J>0 THEN 160
400 IF V>0 THEN 370
410 GOTO 160
420 Q=S*K/M: J=V+G*S+Z*(-Q-Q*Q/2-Q^3/3-Q^4/4-Q^5/5)
430 I=A-G*S*S/2-V*S+Z*S*(Q/2+Q^2/6+Q^3/12+Q^4/20+Q^5/30):RETURN
440 PRINT:PRINT:PRINT:PRINT "TRY AGAIN??": GOTO 70
no subject
Date: 2020-08-20 05:04 (UTC)no subject
Date: 2020-08-20 05:23 (UTC)no subject
Date: 2020-08-21 07:40 (UTC)А с физикой вроде все в порядке. Лунная гравитация у них 1/1000 в коде (G=1E-3). Конечная скорость после 10 секунд честно по формуле Циолковского. Пройденое расстояние: интегрируется скорость.