で、B - FizzBuzz Sum問題を解いてみる


海道一の弓取り

Advent Calendar 2022 9日目1です。
2022/12/25が来るのが待ち遠しいです。
私のAdvent Calendar 2022 一覧

はじめに

Elixirを楽しんでいますか

AtCoderB - FizzBuzz SumFortranで解いてみます。

Fortranに興味をもったきっかけは、Nervesで、Fortranが使えるようになるらしいからです。

この記事では、Elixirのことは取り扱っていません。

B - FizzBuzz Sum

AtCoderは、オンラインで参加できるプログラミングコンテスト(競技プログラミング)のサイトです。リアルタイムのコンテストで競い合ったり、約3000問のコンテストの過去問にいつでも挑戦することが出来ます。

AtCoderB - FizzBuzz Sum問題とは次のような問題です。

例: 入力が5の場合、FizzBuzzの列は、1,2,Fizz,4,Buzzとなり、数字だけを足し算して、7が答え

問題文はリンク先をご参照ください。

プログラミングの基本である

  • 順次
  • 分岐
  • 繰り返し

が含まれている良問だとおもっています。

hello.f
      PROGRAM HELLO
      INTEGER(8) :: J
      READ (*, *) N
      I = 1
      J = 0
      DO WHILE (I .LE. N)
        IF ((MOD(I, 3) .NE. 0) .AND. (MOD(I, 5) .NE. 0)) THEN
          J = J + I
        ENDIF
        I = I + 1
      END DO
      PRINT '(i0)', J
      END PROGRAM HELLO

たったこれだけのことを書くのに、いろいろ詰まりました。
なにせ私は、Fortran初心者なので。

実行環境はDockerで用意しました。

Dockerfile
FROM alpine

WORKDIR /home/fortran
RUN set -x && \
    apk update && \
    apk add --no-cache gfortran musl-dev

CMD ["/bin/sh"]
docker-compose.yml
version: '3'
services:

  fortran:
    build: .
    container_name: fortran
    volumes:
      - .:/home/fortran
    tty: true

Run

ローカルでの実行は以下の感じです。

$ docker-compose run --rm fortran gfortran hello.f -o hello 
$ docker-compose run --rm fortran ./hello

AtCoderはもちろんパスします。

Wrapping up

Enjoy Fortran

2022年に流行る技術予想 ーー それは、Fortran on Nervesです