0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

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

海道一の弓取り

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

はじめに

Elixirを楽しんでいますか:bangbang::bangbang::bangbang:

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はもちろんパスします。

スクリーンショット 2022-01-05 22.04.33.png

Wrapping up :lgtm::lgtm::lgtm::lgtm:

Enjoy Fortran:bangbang::bangbang::bangbang:

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?