Paiza Online Hackathon
恋愛SLG: プログラミングで彼女をつくる|paizaオンラインハッカソン7
今年のクリスマスはこれで1人じゃないです.
腕自信のあるお兄さん方も彼女を作りましょう!!
Ruby版( @iguchi1124 作)
私が書いたコードの前に知り合いがRubyで水着をプレゼントした記事見つけたので貼っておきます
paizaの女の子(安藤杏たん)にRubyを使って水着をプレゼントしよっ♡
痛々しい記事です
とっても素晴らしい記事です!!妻に掛ける思いがひしひしと伝わってきます
前置き
まだ全部が全部Pythonで解いてないので全公開までは言ってないんですが,GitHubに上がってます.
私の妻の紹介です
水着をプレゼントした時の結果
こんな感じに出来ました!!!うっひょい
Swiftで脱線したところもありますが,水着問題に挑戦してこんな感じの戦況で,お風呂に入ってる時に「なんで無駄な桁数まで計算させてたんだ」って思い立って,やったらできました.チャンチャン
はじめに書いたクソコード
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
# ====================
# 答え自体は出るが速度が遅い
# ====================
import math
import sys
from functools import reduce
def fact(x):
numbers = range(1 , x + 1)
return reduce(lambda x , y : x * y , numbers)
def del_zero(keta):
while True:
if keta[0] == 0:
keta.pop(0)
else:
return keta
data = fact(int(input()))
keta = []
# 桁ごとに区切る
len_data = len(str(data))
for i in range(len_data):
keta.append(int(data % 10))
data = int(data // 10)
before_keta = del_zero(keta)
before_ans = before_keta[:9]
before_ans.reverse()
ans = del_zero(before_ans)
for i in range(len(ans)):
print(ans[i] , end="")
動かないことはないです.でも遥かに非効率だしこれならPythonでやる必要ない
2つ目に書いたコード
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
import multiprocessing
import operator
from functools import reduce
def p_fac(n) :
product = 1
if n == 0 : return 1
for num in range(n,0,-c):
product *= num
return product
def p_Factorial(n) :
p = multiprocessing.Pool()
return reduce(operator.mul , p.map(p_fac , range(n , n - c , -1)) , 1)
def del_zero(keta):
while True:
if keta[0] == 0:
keta.pop(0)
else:
return keta
num = int(input())
c = multiprocessing.cpu_count()
data = p_Factorial(num)
keta = []
# 桁ごとに区切る
len_data = len(str(data))
for i in range(len_data):
keta.append(int(data % 10))
data = int(data // 10)
before_keta = del_zero(keta)
before_ans = before_keta[:9]
before_ans.reverse()
ans = del_zero(before_ans)
for i in range(len(ans)):
print(ans[i] , end="")
Paiza.ioでチェックしたところ8つコアがあったのでどうかなるかなぁって思ったのでやってみたやつです.
まぁ無駄な努力に終わりました.
最終的なコード
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ!!
number = int(input())
s = 1
for i in range(1 , number + 1):
s = int(str(int(str(s * i)[::-1]))[:9][::-1])
print(s)
流れ
-
s * i
を文字列に変換し[::-1]
によって逆さまにする - integerに再変換し,前にある
0
を取り払う - また文字列に変換し,初めから9番目までを取得
- 取得したものを逆さまにしてintegerにまた戻す
これだけで十分だったんですね.