fortran66のブログ

fortran について書きます。

【メモ帳】おしっこは貴重な資源!

おしっこムーンベース 

gigazine.net

アフリカには牛糞で作った家とかありますが、月面基地がおしっこで出来るとすれば夢のワンダーランドですね!

f:id:fortran66:20200403013413j:plain

f:id:fortran66:20200403023507p:plain

構造化プログラミングの例題

 ダイクストラ、ホーア、ダール『構造化プログラミング』 

 N. Wirth『Systematic Programming』

ダイクストラ、ホーア、ダール共著の『構造化プログラミング』中のダイクストラ「構造化プログラミング論」の中にダイクストラ口述試験に出した問題として、

「0,1,2 でなる長さ1以上の列で、隣り合う部分列はどれも等しくないものを考え、そのような列を、長さ100のもの(つまり100個の数字の列)になるまで、次々とアルファベット順に創り出すプログラムを構成すること」

というのがあって、ダイクストラがウダウダ愚図っていて考える気もせず読み飛ばしていたのですが、この設問の考案者である N. Wirth の 『Systematic Programming  An Introduction』を眺めていたら最終章の例題の中に出てきて、stepwise program development の実例として考え方まで開陳してくれていたので Fortran で書いてみました。

Wirth の手にかかると簡単になって、かつ数字の対称性から数の置換は本質的に繰り返しになっていて本質的に違いのある配置数は 1/6 になるなど、啓蒙させられました。

なお、ダイクストラの出した別の問題

「2 つの数の n 乗和で、2通り以上の形で表わされるもので最小のものを求めよ。」

というのもあって、同じように解説してくれていました。3乗和の例題によって、ハーディの語るラマヌジャンの病床での逸話の数 1729 が求められています。

Fortran

ソース・プログラム

色々めんどくさいので、サブルーチン中でプログラム終了するお下品プログラムにしましたw なお Wirth は長さ3で数は 0,1,2 ではなく 1,2,3 でやっているのでこれに従いました。Wirth が表に与えている長さ20までの本質的に独立な列の数はチェックしました。

    program seq123
       implicit none
       integer, parameter :: n = 3, k = 3 ! n:length  k:1,2,3..k
       integer :: is(n), m
       
       is(1) = 1
       m = 1
       do 
           if (m == n) then
               if (is_ok()) print '(20i3)', is 
               call change()
           else 
               call extend()
           end if
           do 
               if (is_ok()) exit
               call change()
           end do
       end do    
    contains 

       subroutine extend()
           m = m + 1
           is(m) = 1
       end subroutine extend
       
       subroutine change()
           do 
               if (is(m) == k) then 
                   m = m - 1
               else
                   exit
               end if
               if (m <= 0) stop 'normal end'
           end do
           is(m) = is(m) + 1
       end subroutine change
       
       logical function is_ok()
           integer :: i
           is_ok = .true.
           do i = 1, m / 2
               is_ok = any(is(m-2*i+1:m-i) /= is(m-i+1:m)) 
               if (.not. is_ok) exit 
           end do    
       end function is_ok
       
    end program seq123

出力

  1  2  1
  1  2  3
  1  3  1
  1  3  2
  2  1  2
  2  1  3
  2  3  1
  2  3  2
  3  1  2
  3  1  3
  3  2  1
  3  2  3
normal end

長さ 100 の場合の条件を満たす最初の列

出力は 0,1,2 にしました。

  0  1  0  2  0  1  2  0  2  1  0  1  2  0  1  0  2  0  1  2
  0  2  1  0  2  0  1  0  2  1  0  1  2  0  1  0  2  0  1  2
  0  2  1  0  1  2  0  1  0  2  1  0  1  2  0  2  1  0  2  0
  1  0  2  1  0  1  2  0  1  0  2  0  1  2  0  2  1  0  1  2
  1  0  2  0  1  0  2  1  0  1  2  0  1  0  2  0  1  2  0  2

Systematic Programming: An Introduction

Systematic Programming: An Introduction

  • 作者:Wirth, Niklaus
  • 発売日: 1973/04/01
  • メディア: ハードカバー

プーチン氏 自己隔離や否や

www.asahi.com

プーチン氏が「自主隔離」 接触した医師がコロナ感染 新型肺炎コロナウイルス

モスクワ=石橋亮介 2020年4月1日 21時37分

 ロシア大統領府は1日、新型コロナウイルスの感染拡大防止のため、プーチン大統領が側近らとの接触を避け、会議などの業務を遠隔で行うと発表した。プーチン氏と面会した医師の感染が確認されたためで、ウイルスの検査も毎日行うという。

 感染が確認された医師はデニス・プロツェンコ氏。3月24日、モスクワ市内の病院に視察に来たプーチン氏らを案内していた。31日になってこの医師の感染が明らかになった。大統領府は同日には「大統領は定期的に検査を受けており、問題ない」とし、「自主隔離」には触れていなかった。

 タス通信によると、大統領府のペスコフ報道官は1日、「大統領は当面、(テレビ電話を使った)オンラインで執務する」と説明。「自分も含め、病院で大統領と一緒にいた人は毎日検査を行い、会議などを避けて可能な限り距離をとる」と強調した。(モスクワ=石橋亮介)

www.yomiuri.co.jp

視察し握手もした病院長感染、プーチン氏は隔離措置取らず 2020/04/01 22:42 新型コロナ

 【モスクワ=工藤武人】新型コロナウイルスの感染拡大を受け、ロシアのプーチン大統領が3月24日に視察した病院の院長が、ウイルスに感染していたことが31日、明らかになった。プーチン氏は、院長と素手で握手もしていたが、自主的な隔離措置は取らず、通常の公務を続けている。

 プーチン氏の視察先となったのは、新型コロナウイルス感染者の治療の最前線となっているモスクワ市内の病院だ。プーチン氏は防護服を着て治療現場を視察したが、院長との会談ではマスクを着けずに至近距離で話し込み、エレベーターにも同乗した。院長も白衣をはおっただけだった。視察には、ゴリコワ副首相やモスクワ市のソビャーニン市長も同行した。

 タス通信によると、ペスコフ大統領報道官は31日、「プーチン氏は定期的に検査を受けており、全て順調だ」と述べたが、4月1日にはプーチン氏が「握手を断っている」とし、感染予防に努めていることを強調した。プーチン氏は1日、政権幹部らとの会合を初めてテレビ会議に切り替えた。