Eingang
Sie erhalten eine 2D-Karte mit Kugeln und Boden. Es sieht aus wie das:
1 5 2
3
4
__________________________
Jede Zahl ist eine Kugel und die _
ist bodennah. Der Unterstrich _
ist in keiner anderen Zeile als der bodenebenen Zeile zulässig. Oberirdisch sind nur Leerzeichen, Zeilenumbrüche und Ziffern 0-9
zulässig. Sie können nicht davon ausgehen, dass die letzte Zeile die Bodenebene ist - leere Zeilen unterhalb der Bodenebene sind zulässig. Sie können auch Leerzeichen hinzufügen, um leere Zeilen zu füllen, wenn dies Ihnen hilft.
Bälle können Nummern von 0
bis haben 9
, können übereinander platziert werden, aber nicht unter der Erde. Die Ballnummern sind eindeutig.
Angenommen, jedes Zeichen entspricht einem Meter .
Get map from pastebin!
Testfall 1 - sollte so etwas wie diesen
ausgeben.
Testfall 2 - sollte die gleichen Ergebnisse wie die erste Karte liefern
Herausforderung
Ihre Herausforderung besteht darin, eine Karte wie diese aus einer Datei oder stdin
- Sie dürfen sie verwenden cat balls.txt | ./yourexecutable
- aus der Ausgabegeschwindigkeit jedes Balls zu lesen, wenn er auf den Boden trifft.
Hier ist die Formel für die Geschwindigkeit:
Angenommen, dies h
ist die Differenz der Liniennummer zwischen der Liniennummer des Bodens und der Liniennummer des Balls, und diese ist g
gleich 10m/s^2
.
Ausgabe
Sie sollten die Anzahl und Geschwindigkeit der einzelnen Bälle in m/s
Bodennähe ausgeben . Zum Beispiel N - Vm/s
, wo N
ist die Ballnummer und V
ist seine Geschwindigkeit. Sie können auch ein Array ausgeben, wenn Sie möchten.
Viel Spaß beim Codieren! :)
Antworten:
MATL ,
31302725 BytesEingabe ist ein 2D-Zeichen-Array mit
;
als Zeilentrennzeichen:Probieren Sie es online! Oder fügen Sie eine Initiale
t
in den Code ein , um die Karte übersichtlicher anzuzeigen.Hier sind die anderen Testfälle: erstens , zweitens .
Erläuterung
quelle
C,
125122121 BytesKompilieren und ausführen mit
gcc -w golf.c -lm && cat balls.txt | ./a.out
.quelle
0 ... 9
in einer Textdatei vorkommt. Wie auch immer, +1, weil es meine Schuld ist, nicht darauf hinzuweisen_
. Dies könnte jedoch mit einem zusätzlichen Byte (!=
anstelle von<
) behoben werden .C -
194 (-5)150137 BytesMit ein bisschen mehr Zeit und Nachdenken habe ich 44 Bytes abgespielt.
Dank orlp, das mir geholfen hat, 13 Bytes zu sparen
Ich beginne mit meinem C-Code:
Und für Menschen lesbare Version:
Kompiliere und starte so:
gcc -o balls ballsgolf.c -lm && cat 1.txt | ./balls
Ausgabe
quelle
~(c=getchar())
statt(c=getchar())!=EOF
.if (x != -1)
ist dasselbe wieif (~x)
(auf Zweierkomplement-Maschinen), weil~-1
es (eindeutig) ist0
. In C niemals Golf spielenwhile(cond)
, dafor(;cond;)
es genauso lang ist und mehr Möglichkeiten zum Golfen bietet. In Ihrem Beispiel kann dies werdenfor(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);
.l=1
Sie können dies umgehen, indem Siel
das erste Argument für eingebenmain
, da die C-Laufzeit die Anzahl der Argumente an main als erstes Argument (argc
) übergibt und Sie dann ein Programm ohne Befehlszeilenargumente (./a.out
) aufrufenargc = l = 1
.n=0;
ist unnötig, da globale Ganzzahlen automatisch auf 0 initialisiert werden. Es reicht alson;
aus.Pyth,
27262524 BytesProbieren Sie es online!
quelle
Matlab,
100968990 BytesViele Bytes dank Luis Mendo gespeichert
Eingabeformat:
Erläuterung:
quelle
Python 3, 84 Bytes
Version 6, 84 Bytes: (Danke an Leaky Nun!)
Version 5, 91 Bytes:
Version 4, 92 Bytes:
Version 3, 99 Bytes:
Version 2, 102 Bytes:
In den obigen Versionen wird ein Array von Zeichenfolgen als Eingabe verwendet.
Version 1, 140 Bytes:
Dies übernimmt das Verzeichnis der Datei als Eingabe vom Benutzer.
quelle
1 for l in i
->1for l in i
(n-1)*20
->~-n*20
print
Aufruf keine Klammern ?e
, da der Python-Tokenizer dann versucht, sie als wissenschaftliche Gleitkommanotation zu analysieren (z1e5
. B. ). Beispiel , das nicht:f = lambda n:-1if n<0else 1
. Ein Beispiel, das in beiden Python-Versionen fehlschlägt, ist0or 1
, weil der Tokenizer denkt, dass0o
eine Oktalzahl beginnt.Python 3, 84 Bytes
Eine anonyme Funktion, die die Eingabe von Argumenten als mehrzeilige Zeichenfolge akzeptiert, wobei alle Leerzeilen mit Leerzeichen gefüllt sind, und ein Array zurückgibt, in dem jedes Element die Form [Ballnummer, Geschwindigkeit] hat.
Wie es funktioniert
Probieren Sie es auf Ideone
quelle
f = MyAnswer
und dann mit anrufenf(x)
. Es besteht Einigkeit darüber, dass es nicht notwendig ist, Lambdas zu nennen . Übrigens eine schöne Herausforderung!JavaScript (ES6) 93
Bearbeiten 2 Bytes, die dank @Jacajack gespeichert wurden
Eine Funktion mit einem mehrzeiligen String als Eingabeparameter. Die Ausgabe wird nicht sortiert (da dies nicht angefordert wird)
Prüfung
quelle
sqrt(x)
kürzer alspow(x,.5)
?