当面の目標はyukicoderの★1問題を全てこなすということにしました
もちろん、アプリなり何なりのことも忘れていませんよ?
古さ爆発のブラウザゲーを作る計画を立ててます
その前にマクロとか諸々も勉強したいので、時間がどれだけあっても足りませんが
今回はNo.18,98,35ですよ!
No.18
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でも解きました
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
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
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と並行して何か出来たらなーと思います
以上!