LoginSignup
0
0

More than 5 years have passed since last update.

頭チキンのプログラム vol.1

Last updated at Posted at 2018-11-16

当面の目標はyukicoderの★1問題を全てこなすということにしました

もちろん、アプリなり何なりのことも忘れていませんよ?

古さ爆発のブラウザゲーを作る計画を立ててます

その前にマクロとか諸々も勉強したいので、時間がどれだけあっても足りませんが

今回はNo.18,98,35ですよ!

No.18

18.py
S=list(input())
D=[]
for i in range(len(S)):
    a=ord(S[i])-i-1
    if a<65:
        while a<65:
            a += 26

        D.append(chr(a))
    else:
        D.append(chr(a))

print(''.join(D))

文字列だったのでノータイムpythonです

リスト系の操作は全てpythonでやっている私です

正直Fortranで書く意味ありゅ?と精神崩壊しそうです

で、結局Fortranでも解きました

18.f90
implicit none
character(1024) S
integer(8) A,i
read(*,*) S
do i=1,len_trim(S)
     A=ichar(S(i:i))-i
       do while(A<65)
          A=A+26
       end do
     S(i:i)=char(A)
end do
write(*,*) S
end

ようやく文字列でも普通にプログラミングをできるようになりました

"S(i)"とした所で反応しないんですよね、do構文だと

ですので、"S(i:i)"にします

いやー、ようやく解決してストレス微軽減です


ループ構文やケースバイケース系の構文は使わなければ使わないほど計算量減るんですね

そんな当たり前のことに最近気づきました

で、Fortranでいうmod、余りを利用して書いている人が多いんですけど、

私はループ文で永遠と何かさせる構造が好きなので、この形にしています

速さを言い始めると余りでやった方が計算回数が一回になるのでそっちの方がいいとは思います

まぁ余りでどーのこーのが思いつかなかっただけとも言いますがネ!

No.98

98.f90
implicit none
real(8) X,Y,R
read(*,*) X,Y
R=X*X+Y*Y
R=sqrt(R)
write(*,*) int(R*2+1)
end

Fortranにせよ、pythonにせよ、誤差が絡むと面倒になるんだなーと思う日々

最初はRの部分をまとめていたんですが、誤差が出て上手くいかないので分けました

そうすればうまくいきました

何故なんですかね?

No.35

35.f90
implicit none
integer(8) N,i,U,V
real(8),allocatable :: T(:)
character(100),allocatable :: S(:)
read(*,*) N
U=0
V=0
allocate (T(N))
allocate (S(N))
do i=1,N
   read(*,*) T(i:i),S(i:i)
end do
do i=1,N
   V=V+len_trim(S(i))
   T(i:i)=int((T(i:i)*12.0)/1000.0)
   if (T(i)>len_trim(S(i))) then
            U=U+len_trim(S(i))
   else
            U=U+T(i)
   end if
end do
write(*,*) U,V-U
end

これに関しては態々"(i:i)"の形にする必要なくなーい?とも思ったのですが、

なんとなく入れているだけです

やっていることは、総文字数を計算してタイプした文字の数を計算して引いただけ、です

超☆単☆純




恐るべし★1と最近戦慄する日々ですよ

今までが頭からガジガジの力業でできたから、★1は大体そんなもんだろーとか思っていましたが、

そんなに甘くないですねぇ

リストを並び変えて云々系が多いので、Fortranで書くの止めたくなりますよ

pythonに比べて確かにFortranは早いですが、2msか20msの違いですからね

遊ぶ分にはどっちにしろ十分早いです、人間の知覚スピード超えているから当たり前だよなぁ!

それにpythonの手直しコメントはぽつりぽつりともらうのですが、Fortranはほぼほぼなしというネ

ぬぬぬ...次回から過去に解いたChekiOの問題でも引っ張ってくることも視野に入れています


次回からはyukicoderと並行して何か出来たらなーと思います

以上!

0
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0