Ich habe ein MacBook gekauft. Es ist ein Modell der Air 2020 i7 16GBRAM 512GB SSD. Natürlich war ich mit der Leistung zufrieden, da der Benchmark, der doppelt so hoch ist wie das schwere (physische) Windows, das ich bisher verwendet habe, herauskommt, aber das Attraktivste an Mac ist das Design innerhalb und außerhalb des Bildschirms und das Rendern von Schriftarten. .. Die Benutzeroberfläche ist auch wunderschön und ich bin sehr zufrieden. Da es eine große Sache ist, habe ich beschlossen, die Übermittlung von AtCoder, von dem ich in letzter Zeit abhängig bin, beim Aufbau der Umgebung zu automatisieren. Die Einreichungssprache ist Python, aber das Gleiche gilt für andere Sprachen. ** 20/5/1 Nachtrag: [Informationen zur Änderung der AtCoder-Spezifikation](Änderung der # AtCoder-Spezifikation) **
Wenn Sie dies noch nicht getan haben, geben Sie Folgendes im Voraus an. Übrigens wird der Editor sowohl für VS Code für den Wettbewerb als auch für Atom für den üblichen Editor verwendet. Bitte lesen Sie die entsprechenden Informationen unten.
Hyper
Das Mac-Terminal ist viel besser als Windows, aber es ist immer noch etwas klobig.
Nach der Suche nach verschiedenen Dingen ist das Terminal mit dem Namen Hyper sehr schön. Es scheint, dass es bei Dritten auch ein Pokemon-Anzieh-Thema gibt, und es ist süß. Im Folgenden bedeutet die Zeile mit dem Vorzeichen "
Homebrew Es ist ein berühmtes Paketverwaltungssystem. Kopieren Sie den auf der offiziellen Seite eingefügten Befehl, fügen Sie ihn in das Terminal ein und führen Sie ihn aus. Es gibt eine Stelle, an der Sie unterwegs die RETURN-Taste drücken müssen.
==> The Xcode Command Line Tools will be installed.
Press RETURN to continue or any other key to abort
Unmittelbar danach werden Sie aufgefordert, Ihr Passwort einzugeben. Terminal Ich weiß nichts, ich bin hier festgefahren. Wenn ich mein Passwort eingegeben habe und dachte, dass nichts angezeigt wird, wurde es nur aus Sicherheitsgründen ausgeblendet ... Geben Sie Ihr Mac-Passwort ein, um fortzufahren.
==> /usr/bin/sudo /bin/...
Password:
==> Installation successful!
Python Laden Sie das Installationsprogramm von Python Official herunter und richten Sie es ein. Oder verwenden Sie Gebräu.
$ brew install python3
Node.js Laden Sie das Installationsprogramm auch von Node.js Official herunter. Das Installationsprogramm ist schneller.
Ich werde andere notwendige Werkzeuge hinzufügen. Verwenden Sie Online-Richter-Tools zum Testen. Atcoder-cli wird hauptsächlich für die Übermittlung, Verzeichniserstellung und Testfallerfassung verwendet. Selen wird für die Hinrichtung des Richters benötigt.
$ pip3 install online-judge-tools
$ oj --version # check
$ npm install -g atcoder-cli
$ acc -v # check
$ acc check-oj # check
$ pip3 install selenium
Sie brauchen es möglicherweise nicht, aber ich möchte die Baumansicht verwenden, um die Verzeichnisstruktur zu verstehen. Installieren Sie es also.
$ brew install tree
Ich möchte den VSCode-Befehl "code" verwenden. Überprüfen Sie daher die Version ("-v") und installieren Sie sie, wenn sie nicht installiert ist. Öffnen Sie die VS-Code-Befehlspalette mit ⌘
+ Shift
+ P
und geben Sie shell usw. ein, um den Befehl" Shell Command: Install'code 'in PATH "auszuführen.
$ code -v # check
Zunächst war es unpraktisch, zu dem im Finder eröffneten Terminal zu wechseln. Lesen Sie daher diesen Artikel (Maru Pakuri) ) Ich habe das Drehbuch geschrieben. Verwenden Sie einen Texteditor, um die folgenden Inhalte direkt unter dem Ausgangsverzeichnis (/ Users / _username_
=~
) mit der Spracheinstellung ShellScript / extension .sh zu speichern.
Finderset.sh
#!/usr/bin/osascript
tell application "Finder"
if exists Finder window 1 then
set currentDir to target of Finder window 1 as Unicode text
set posixPath to get POSIX path of currentDir
end if
end tell
Als nächstes platzieren Sie .zshrc
, das Einstellungen wie Aliase verwaltet, direkt unter dem Home-Verzeichnis. Wenn Sie es noch nicht haben, setzen Sie die Spracheinstellung auf ShellScript und erstellen Sie den Dateinamen ".zshrc". (Da es sich um eine versteckte Datei im Finder handelt, kann sie nicht angezeigt werden, wenn sie ausgeblendet ist. Das Umschalten ist "Strg" + "Umschalt" + ".") Das Folgende ist ein Beispiel für den von mir hinzugefügten Alias. "cdf" ist eine Verknüpfung, mit der der Befehl zum Terminal in dem oben im Finder geöffneten Verzeichnis verschoben werden kann. "atc" dient zum Verschieben an den Speicherort, an dem sich das Verzeichnis befindet. Ansonsten schreibe ich es weiter unten. (Cd
ist der Befehl zum Verschieben des aktuellen Verzeichnisses des Terminals) Persönlich habe ich beschlossen, das Verzeichnis an dem Ort zu erstellen, an dem sich das lokale Repository von GitHub befindet.
.zshrc
# vscode
alias vs='code -r main.py'
# cd
alias cdf='cd $(osascript ~/xxx.sh)' #Der Name der Datei, die Sie zuvor geschrieben haben
alias atc='cd /Users/xxx...' #Wo Sie ein Verzeichnis erstellen möchten
alias a='cd ../a ; vs'
alias b='cd ../b ; vs'
alias c='cd ../c ; vs'
alias d='cd ../d ; vs'
# test
alias test='oj t -c "python3 main.py" -d ./tests/'
alias py='python3 main.py'
# start
sta () {
atc
acc new $1
code -r $1
source cd $1/a
vs
}
# submit
sd () {
problem=`pwd | xargs basename`
contest=`echo $(basename $(pwd | xargs dirname)) | tr '[:upper:]' '[:lower:]'`
echo "${contest:0:3}$problem" | acc s
source cd ../`echo $(printf "\x$(printf "%x" $(($(printf "%d" \'$problem)+1)))")`
vs
}
alias sf='if test ; then sd ; fi'
Ich habe eine Verknüpfung festgelegt, um das Terminal bequem mit VS Code zu verwenden. Verwenden Sie ⌘
+ Shift
+ P
, um die Befehlspalette aufzurufen, geben Sie Tastatur usw. ein und wählen Sie" Grundeinstellungen: Öffnen der Tastaturkürzeldatei (JSON) / Einstellungen: Öffnen der Tastaturkürzeldatei (JSON) ". Fügen Sie zwei zu keybinding.json
hinzu. Shift
+ l
scheint unbenutzt zu sein, also habe ich es zugewiesen. Auf diese Weise können Sie mit nur "Umschalt" + "l" zwischen Terminal und Editor wechseln.
keybinding.json
[
{ "key": "shift+l",
"command": "workbench.action.terminal.focus" },
{ "key": "shift+l",
"command": "workbench.action.focusActiveEditorGroup", "when":"terminalFocus" },
]
Melden Sie sich als Nächstes bei AtCoder an.
$ acc login
$ oj login https://atcoder.jp/
Legen Sie ein Verzeichnis fest, das gleichzeitig für alle Probleme im Wettbewerb erstellt werden soll.
$ acc config default-task-choice all
Holen Sie sich den Speicherort des Konfigurationsverzeichnisses und verschieben Sie es. Um das Ergebnis von acc
an cd
zu übergeben, verwenden Sie`` ``
Anführungszeichen anstelle von '
einfachen Anführungszeichen. Erstellen Sie einen Ordner und erstellen Sie die Vorlage main.py
und die Vorlagenkonfigurationsdatei template.json
darin.
$ cd `acc config-dir`
$ mkdir py
$ cd py
$ touch main.py template.json
Öffnen Sie template.json
und schreiben Sie. Jetzt können Sie "main.py" gleichzeitig mit dem Erstellen des Verzeichnisses und des Ziels "main.py" beim Senden öffnen.
$ open -a Atom template.json
template.json
{
"task":{
"program": ["main.py"],
"submit": "main.py"
}
}
Öffnen Sie main.py
und schreiben Sie. Schreiben Sie "Shebung" in die erste Zeile, wie unten gezeigt (erforderlich). Da es sich um eine Vorlage handelt, möchten Sie möglicherweise häufig verwendeten Code in die zweite und die folgenden Zeilen schreiben.
$ open -a Atom main.py
main.py
#!/usr/bin/env python3
Setzen Sie die Vorlage auf py.
$ acc config default-template py
$ acc templates # check
search template directories in /Users/../Library/Preferences/atcoder-cli-nodejs
[NAME] SUBMIT-PROGRAM
[py] main.py
Gehen Sie zu dem Ort, an dem Sie das Verzeichnis mit "atc" erstellen möchten, und erstellen Sie ein neues Verzeichnis mit "acc new [Contest Name]". Insbesondere ist dies der Name des relevanten Teils der AtCoder-URL. Wenn Sie den folgenden "Baum" sehen können, ist dies erfolgreich.
$ atc
$ acc new ABC164 # name of contest
$ tree
.
├── a
│ ├── main.py
│ └── tests
│ ├── sample-1.in
│ ├── sample-1.out
...
│ └── sample-3.out
├── b
│ ├── main.py
│ └── tests
│ ├── sample-1.in
│ ├── sample-1.out
│ ├── sample-2.in
│ └── sample-2.out
├── c
│ ├── main.py
│ └── tests
│ ├── sample-1.in
...
│ └── sample-3.out
├── contest.acc.json
├── d
│ ├── main.py
│ └── tests
│ ├── sample-1.in
│ ├── sample-1.out
│ ├── sample-2.in
│ ├── sample-2.out
...
12 directories, 43 files
Schreiben Sie im vorherigen .zshrc
Folgendes, um das aktuelle Verzeichnis automatisch in den Ordner A problem zu verschieben. Jetzt müssen Sie das Verzeichnis nicht mehr ändern, wenn Sie eine Frage senden. (Wenn Sie konsequent von der Verzeichniserstellung bis zur Übermittlung im selben Terminal arbeiten)
.zshrc(only_one_part)
sta () {
atc
acc new $1
code -r $1
source cd $1/a
vs
}
Öffnen und lösen wir Problem A. Schreiben Sie nach der Ausführung von sta
das Programm in die geöffnete a / main.py
. Gehen Sie mit der zuvor festgelegten Verknüpfung zum Terminal, vergewissern Sie sich, dass Sie sich in dem betreffenden Verzeichnis befinden (a
), und führen Sie oj t -c" python3 main.py "-d. / Tests /
aus. Da es lang zu sein scheint, wird es im Alias ".zshrc" "test" zugewiesen. Es wurde richtig als "AC" beurteilt.
$ pwd # check current directory (not necessary)
/Users/.../abc164/a
$ test
[*] 3 cases found
time: illegal option -- f
usage: time [-lp] command.
[!] GNU time is not available: time
[*] sample-1
[x] time: 0.022793 sec
[+] AC
...
[x] slowest: 0.022793 sec (for sample-1)
[+] test success: 3 cases
Es scheint, dass Sie nicht wissen werden, ob Sie nur Wettkampfprofis machen, aber wenn input ()
ursprünglich ausgeführt wird, befindet sich der Standardeingang des Terminals im Eingangs-Standby-Zustand. Wenn Sie es also in einem anderen Fall als dem Beispielfall ausführen möchten, können Sie normalerweise "python3 main.py" ausführen und die Standardeingabe zeilenweise eingeben. (Was ist mit open (0)
...)
Solange Sie sich im entsprechenden Verzeichnis befinden, können Sie dies mit nur "acc s" tun. Sie werden lediglich aufgefordert, einen Bestätigungscode einzugeben. Anscheinend scheinen es insgesamt 4 Zeichen zu sein, die die ersten 3 Buchstaben des Wettbewerbsnamens und der Fragennummer kombinieren ([ContestName; 3] [Problem]
; ex.abca). Ich habe keine Zeit dafür, also habe ich eine sd
Funktion vorbereitet. sd
wechselt nach der Übermittlung automatisch zum nächsten Verzeichnis. In .zshrc
gibt es einen anderen Befehl ( sf
), der nur gesendet werden kann, wenn das Ergebnis vontest`` [AC]
ist (= Rückgabewert ist 0
).
.zshrc(only_one_part)
# submit
sd () {
problem=`pwd | xargs basename`
contest=`echo $(basename $(pwd | xargs dirname)) | tr '[:upper:]' '[:lower:]'`
echo "${contest:0:3}$problem" | acc s
source cd ../`echo $(printf "\x$(printf "%x" $(($(printf "%d" \'$problem)+1)))")`
vs
}
alias sf='if test ; then sd ; fi'
Der Browser wird im Verlauf des Übermittlungsvorgangs automatisch geöffnet. Ich habe mich auch auf andere Themen konzentriert. Es funktioniert automatisch, aber wenn Sie zum vorherigen / vorherigen Problem wechseln möchten, können Sie das aktuelle Verzeichnis verschieben und die VS-Code-Datei mit nur "a", "b", "c" bearbeiten.
.zshrc(only_one_part)
alias a='cd ../a ; vs'
alias b='cd ../b ; vs'
alias c='cd ../c ; vs'
alias d='cd ../d ; vs' # ...
Dies ist perfekt! !!
Wenn Sie ".zshrc" durch Ausprobieren bearbeiten und sofort wiedergeben möchten (starten Sie das Terminal neu, um es normal wiederzugeben).
$ source ~/.zshrc
Wenn die Funktion aus irgendeinem Grund nicht verwendet werden kann
.zshrc
function func () {
# do_something
}
alias func=func
Im Shell-Skript kann function
beim Definieren einer Funktion weggelassen werden. Wenn Sie jedoch einen Alias mit demselben Namen definieren möchten, wird der folgende Fehler angezeigt, sofern Sie ihn nicht explizit deklarieren.
$ source ~/.zshrc
/Users/xxx/.zshrc:19: defining function based on alias `func'
/Users/xxx/.zshrc:19: parse error near `()'
Ich dachte, ich könnte es ab dem 1. Mai nicht einreichen, aber es scheint ein Problem mit "oj" zu sein.
$ oj -v s [URL] main.py
...
File "/Users/kazuhiroserizawa/.pyenv/versions/3.8.0/lib/python3.8/site-packages/onlinejudge/service/atcoder.py", line 728, in _parse_available_languages
languages += [Language(option.attrs['value'], option.string)]
KeyError: 'value'
[ERROR] 'value'
Du bist verrückt nach Zeile 728. GitHub hatte auch eine Pull-Anfrage. Ich denke, es wird bald behoben, aber ich werde es vorerst beheben.
# Install-Location
$ pip show online-judge-tools
...
Location: /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages
...
# Open
$ cd /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages
$ open -a Atom onlinejudge/service/AtCoder.py
Klicken Sie hier für Codeänderungen (https://github.com/kmyk/online-judge-tools/pull/739/commits/577b1d9d9a505cea7835ac1c0a98ef9377b8b919). Der Rest wird wie folgt umgeschrieben.
Vergiss nicht, einen Stern an GitHub zu schicken!
Obwohl dies in den AtCoder-Nutzungsbedingungen nicht ausdrücklich verboten ist, wird der Testfall nicht einmal durchgeführt, da er den Server nicht überfordern und zu Unannehmlichkeiten führen kann. Verwenden Sie im Rahmen des gesunden Menschenverstandes.
Ich habe nach Unix-Befehlen gesucht, ohne sie überhaupt zu kennen!
Recommended Posts