Technologie de golf Python (AtCoder)

introduction

Ceci est une introduction à la technique d'écriture courte en Python 3 qui a été cultivée avec AtCoder. De plus, la version Python3 d'AtCoder est 3.4.3 et vous ne pourrez peut-être pas utiliser des fonctions susceptibles d'être raccourcies, telles que les chaînes f et l'opérateur Seiuchi. C'est juste une technique sur AtCoder (je ne sais pas si elle peut être utilisée ailleurs). Je pense que c'est compliqué parce que j'écris ce que j'ai trouvé. Excusez-moi.

Entrée standard

Quand vous pensez à l'entrée Python standard, vous pensez à input (), mais lors de l'écriture courte, open (0) est plus susceptible d'être utilisé que input (). open est une fonction qui ouvre un fichier, mais en spécifiant 0 comme premier argument, il sera lu à partir de l'entrée standard. Par exemple

4
1
2
3
4

Étant donné une entrée comme, si vous souhaitez stocker la première ligne dans la variable n et les lignes restantes dans la liste a

n,*a=map(int,open(0))

Peut être écrit comme. Aussi,

5 4
1 2 3 4 5

Étant donné l'entrée comme, si vous voulez stocker la première ligne dans n et k et la deuxième ligne dans la liste

n,k,*a=map(int,open(0).read().split())

Peut être écrit comme.

Dans certains cas, il peut être utile d'utiliser eval. eval exécute la chaîne de caractères donnée comme argument en tant qu'expression. Par conséquent, il peut être raccourci en traitant la chaîne de caractères d'entrée de manière appropriée et en la transmettant à eval. Par exemple

10 20

Dans le cas d'un problème où deux nombres sont donnés sur une ligne et le produit est sorti,

print(eval(input().replace(' ','*')))

Peut être écrit comme. dans ce cas, En remplaçant «» dans la chaîne d’entrée par «*»

10*20

Cela devient une chaîne de caractères et la solution peut être obtenue en l'exécutant comme une expression. De plus, si la contrainte a deux nombres inférieurs à 100,

s=input()
print(int(s[:2])*int(s[2:]))

Vous pouvez également écrire.

production

Si vous souhaitez afficher le contenu d'une liste séparée par des blancs,

print(*a)

Peut être écrit comme. Si vous voulez séparer cela des sauts de ligne

print(*a,sep='\n')

Tu peux le faire. Dans AtCoder, même si vous souhaitez afficher la solution séparée par des sauts de ligne, elle est souvent générée en les séparant par des espaces. YNeos Je pense que beaucoup de gens pensent à cela quand ils entendent le golf Python. Pour des problèmes tels que la sortie «Oui» lorsque certaines conditions sont remplies et «Non» dans le cas contraire.

print('YNeos'[Expression conditionnelle::2])

Etc. De plus, puisque "Non" est affiché lorsque l'expression conditionnelle devient True, si la condition est retournée de force et qu'elle devient longue,

print('NYoe s'[Expression conditionnelle::2])

Vous pouvez également le faire comme ça. Dans ce cas, «Non» (vide à la fin) est émis lorsque l'expression conditionnelle devient False, mais AtCoder passe souvent même dans un tel cas.

point virgule

En Python, vous pouvez utiliser le point-virgule comme délimiteur de phrase en plus des sauts de ligne. Par exemple, lors de l'écriture de plusieurs processus avec une instruction for

for _ in'_'*n:hoge;fuga;piyo

Etc. En outre, dans le cas de la répétition du même processus n fois comme celui-ci, utilisez une fonction qui exécute la chaîne de caractères donnée par l'argument exec en tant qu'expression.

exec('hoge;fuga;piyo;'*n)

Peut être écrit comme.

calcul booléen

Puisque bool est une sous-classe de int, vous pouvez effectuer des opérations sur int. Par exemple, si vous souhaitez ajouter 1 à a lorsqu'une certaine condition est remplie et 1 à b lorsqu'elle n'est pas remplie.

f=Expression conditionnelle
a+=f
b+=1-f

Etc.

Ajouter à la liste

Lorsque vous souhaitez ajouter un 0 à la fin d'une liste, un

a+=[0]

Ajoutez simplement une liste de taille 1 comme

a+=0,

Vous pouvez également ajouter des taples comme celui-ci. Si vous souhaitez ajouter uniquement lorsque certaines conditions sont remplies

a+=[0]*Expression conditionnelle

Peut être écrit comme import Par exemple

from numpy import*

En écrivant comme, vous pouvez utiliser la fonction NumPy sans ajouter np.

Divers calculs

Diviser n par m (arrondir)

0--n//m

(n+1)*2

n+1<<1

Ou

-~n*2

(n-1)*2

~-n*2

Autre

Voici quelques liens vers certaines des choses intéressantes soumises par ABC-A.

https://atcoder.jp/contests/abc092/submissions/4568294 avec eval

+min(int(input()),int(input()),)+min(int(input()),int(input()),)

Est exécuté comme une expression.

https://atcoder.jp/contests/abc115/submissions/4390864 l'entrée peut générer des arguments.

https://atcoder.jp/contests/abc122/submissions/4701952 https://atcoder.jp/contests/abc119/submissions/4376176

en conclusion

Si vous trouvez quelque chose, je l’ajouterai.

Recommended Posts

Technologie de golf Python (AtCoder)
atCoder 173 Python
AtCoder ABC 174 Python
AtCoder ABC 175 Python
AtCoder # 36 quotidien avec Python
AtCoder # 2 tous les jours avec Python
Daily AtCoder # 32 en Python
Daily AtCoder # 18 en Python
Daily AtCoder # 33 en Python
AtCoder # 7 tous les jours avec Python
AtCoder # 24 tous les jours avec Python
Résolvez AtCoder 167 avec python
AtCoder # 8 tous les jours avec Python
Daily AtCoder # 42 en Python
AtCoder # 21 quotidien avec Python
Daily AtCoder # 17 avec Python
Daily AtCoder # 38 en Python
Daily AtCoder # 54 en Python
Daily AtCoder # 11 en Python
Daily AtCoder # 15 en Python
Daily AtCoder # 47 avec Python
Daily AtCoder # 13 en Python
AtCoder # 45 quotidien avec Python
AtCoder # 30 tous les jours en Python
AtCoder # 40 quotidien avec Python
AtCoder # 10 quotidien avec Python
AtCoder # 5 tous les jours avec Python
Daily AtCoder # 28 en Python
AtCoder # 39 quotidien avec Python
Automatiser la soumission d'AtCoder (Python)
Daily AtCoder # 20 en Python
Daily AtCoder # 19 en Python
Daily AtCoder # 52 en Python
Daily AtCoder # 3 en Python
Daily AtCoder # 14 avec Python
Daily AtCoder # 50 avec Python
Daily AtCoder # 26 avec Python
AtCoder quotidien # 4 avec Python
Daily AtCoder # 43 en Python
Daily AtCoder # 29 en Python
Daily AtCoder # 49 en Python
Daily AtCoder # 27 en Python
AtCoder # 1 tous les jours avec Python
Daily AtCoder # 25 avec Python
Daily AtCoder # 16 en Python
Daily AtCoder # 12 en Python
Daily AtCoder # 48 en Python
Daily AtCoder # 23 en Python
Daily AtCoder # 34 en Python
AtCoder # 51 quotidien avec Python
Daily AtCoder # 31 en Python
Daily AtCoder # 46 en Python
AtCoder # 35 quotidien avec Python
AtCoder # 9 tous les jours avec Python
Daily AtCoder # 44 avec Python
Daily AtCoder # 41 en Python
AtCoder ABC 177 Python (A ~ E)
Résolvez AtCoder ABC166 avec python
Bleu clair avec AtCoder @Python