Python Golf Tech (AtCoder)

Einführung

Dies ist eine Einführung in die Kurzschreibtechnik in Python 3, die mit AtCoder entwickelt wurde. Darüber hinaus ist die Python3-Version von AtCoder 3.4.3, und Sie können möglicherweise keine Funktionen verwenden, die wahrscheinlich verkürzt werden, z. B. F-Strings und Seiuchi-Operator. Es ist nur eine Technik auf AtCoder (ich weiß nicht, ob es woanders verwendet werden kann). Ich finde es chaotisch, weil ich aufschreibe, was ich mir ausgedacht habe. Entschuldigung.

Standardeingabe

Wenn Sie an eine Standard-Python-Eingabe denken, denken Sie an input (), aber wenn Sie kurz schreiben, wird open (0) eher verwendet als input (). open ist eine Funktion, die eine Datei öffnet. Wenn Sie jedoch 0 als erstes Argument angeben, wird sie aus der Standardeingabe gelesen. Zum Beispiel

4
1
2
3
4

Bei einer Eingabe wie, wenn Sie die erste Zeile in der Variablen n und die verbleibenden Zeilen in der Liste a speichern möchten

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

Kann geschrieben werden als. Ebenfalls,

5 4
1 2 3 4 5

Gegebene Eingabe wie, wenn Sie die erste Zeile in n und k und die zweite Zeile in Liste a speichern möchten

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

Kann geschrieben werden als.

In einigen Fällen kann es nützlich sein, eval zu verwenden. eval führt die als Argument angegebene Zeichenfolge als Ausdruck aus. Daher kann es verkürzt werden, indem die eingegebene Zeichenfolge entsprechend verarbeitet und an eval übergeben wird. Zum Beispiel

10 20

Bei einem Problem, bei dem zwei Zahlen in einer Zeile angegeben werden und das Produkt ausgegeben wird,

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

Kann geschrieben werden als. in diesem Fall, Durch Ersetzen von "" in der Eingabezeichenfolge durch "*"

10*20

Es wird zu einer Zeichenkette, und die Lösung kann erhalten werden, indem dies als Ausdruck ausgeführt wird. Wenn die Einschränkung zwei Zahlen kleiner als 100 hat,

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

Sie können auch schreiben.

Ausgabe

Wenn Sie den Inhalt einer Liste durch Leerzeichen getrennt ausgeben möchten,

print(*a)

Kann geschrieben werden als. Wenn Sie dies von Zeilenumbrüchen trennen möchten

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

Du kannst es schaffen. Selbst wenn Sie in AtCoder die durch Zeilenumbrüche getrennte Lösung ausgeben möchten, wird sie häufig durch Trennen durch Leerzeichen ausgegeben. YNeos Ich denke, viele Leute denken daran, wenn sie Python Golf hören. Bei Problemen wie der Ausgabe von "Ja", wenn bestimmte Bedingungen erfüllt sind, und "Nein", wenn dies nicht der Fall ist.

print('YNeos'[Bedingter Ausdruck::2])

Und so weiter. Da "Nein" ausgegeben wird, wenn der bedingte Ausdruck wahr wird, wenn die Bedingung gewaltsam umgedreht wird und sie lang wird,

print('NYoe s'[Bedingter Ausdruck::2])

Sie können es auch so machen. In diesem Fall wird 'Nein' (am Ende leer) ausgegeben, wenn der bedingte Ausdruck False wird, aber AtCoder wird auch in einem solchen Fall häufig übergeben.

Semikolon

In Python können Sie zusätzlich zu Zeilenumbrüchen Semikolon als Satztrennzeichen verwenden. Zum Beispiel beim Schreiben mehrerer Prozesse mit einer for-Anweisung

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

Und so weiter. Wenn Sie denselben Vorgang n-mal wiederholen, verwenden Sie eine Funktion, die die durch das Argument exec angegebene Zeichenfolge als Ausdruck ausführt.

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

Kann geschrieben werden als.

Bool-Berechnung

Da bool eine Unterklasse von int ist, können Sie Operationen für int ausführen. Zum Beispiel, wenn Sie 1 zu a hinzufügen möchten, wenn eine bestimmte Bedingung erfüllt ist, und 1 zu b, wenn sie nicht erfüllt ist.

f=Bedingter Ausdruck
a+=f
b+=1-f

Und so weiter.

Zur Liste anhängen

Wenn Sie einer Liste eine nachgestellte 0 hinzufügen möchten a

a+=[0]

Fügen Sie einfach eine Liste der Größe 1 wie hinzu

a+=0,

Sie können auch solche Taples hinzufügen. Wenn Sie nur hinzufügen möchten, wenn bestimmte Bedingungen erfüllt sind

a+=[0]*Bedingter Ausdruck

Kann geschrieben werden als import Zum Beispiel

from numpy import*

Wenn Sie wie schreiben, können Sie die NumPy-Funktion verwenden, ohne np hinzuzufügen.

Verschiedene Berechnungen

Teilen Sie n durch m (aufrunden)

0--n//m

(n+1)*2

n+1<<1

Oder

-~n*2

(n-1)*2

~-n*2

Andere

Hier sind einige Links zu einigen interessanten Dingen, die ABC-A eingereicht hat.

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

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

Wird als Ausdruck ausgeführt.

https://atcoder.jp/contests/abc115/submissions/4390864 Eingabe kann Argumente ausgeben.

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

abschließend

Wenn Sie sich etwas einfallen lassen, werde ich es hinzufügen.

Recommended Posts

Python Golf Tech (AtCoder)
atCoder 173 Python
AtCoder ABC 174 Python
AtCoder ABC 175 Python
Täglicher AtCoder # 36 mit Python
AtCoder # 2 jeden Tag mit Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 18 in Python
Täglicher AtCoder # 33 in Python
Täglicher AtCoder # 7 in Python
AtCoder # 24 jeden Tag mit Python
Löse AtCoder 167 mit Python
AtCoder # 8 jeden Tag mit Python
Täglicher AtCoder # 42 in Python
Täglicher AtCoder # 21 mit Python
Täglicher AtCoder # 17 mit Python
Täglicher AtCoder # 38 in Python
Täglicher AtCoder # 54 in Python
Täglicher AtCoder # 11 in Python
Täglicher AtCoder # 15 in Python
Täglicher AtCoder # 47 mit Python
Täglicher AtCoder # 13 in Python
Täglicher AtCoder # 45 mit Python
AtCoder # 30 jeden Tag in Python
Täglicher AtCoder # 40 mit Python
Täglicher AtCoder # 10 mit Python
AtCoder # 5 jeden Tag mit Python
Täglicher AtCoder # 28 in Python
Täglicher AtCoder # 39 in Python
Automatische Übermittlung von AtCoder (Python)
Täglicher AtCoder # 20 in Python
Täglicher AtCoder # 19 in Python
Täglicher AtCoder # 52 in Python
Täglicher AtCoder # 3 in Python
Täglicher AtCoder # 14 mit Python
Täglicher AtCoder # 50 mit Python
Täglicher AtCoder # 26 mit Python
Täglicher AtCoder # 4 mit Python
Täglicher AtCoder # 43 in Python
Täglicher AtCoder # 29 in Python
Täglicher AtCoder # 49 in Python
Täglicher AtCoder # 27 in Python
AtCoder # 1 jeden Tag mit Python
Täglicher AtCoder # 25 mit Python
Täglicher AtCoder # 16 in Python
Täglicher AtCoder # 12 in Python
Täglicher AtCoder # 48 in Python
Täglicher AtCoder # 23 in Python
Täglicher AtCoder # 34 in Python
Täglicher AtCoder # 51 mit Python
Täglicher AtCoder # 31 in Python
Jeden Tag mit Python AtCoder # 46
Täglicher AtCoder # 35 mit Python
AtCoder # 9 jeden Tag mit Python
Täglicher AtCoder # 44 mit Python
Jeden Tag mit Python AtCoder # 41
AtCoder ABC 177 Python (A ~ E)
Löse AtCoder ABC166 mit Python
Hellblau mit AtCoder @Python