Mein Lehrer gibt mir immer die kompliziertesten mathematischen Aufgaben für die Hausaufgaben. Wie: pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even
. Und ich möchte im Voraus wissen, wie viel Zeit für meine Hausaufgaben zur Verfügung steht, aber ich möchte nicht alles herausfinden müssen. Deshalb ist es deine Aufgabe, es für mich zu programmieren.
Spezifikationen
- Sie erhalten eine Zeichenfolge, in der die Probleme aufgeführt sind, die ich als args, stdio usw. ausführen muss.
- Sie werden durch Kommas getrennt (möglicherweise
comma-space
getrennt) - Es wird einzelne Probleme in Form von nur einer Zahl enthalten (zB
79
) - Und Bereiche in der Form
17-18
(wieder müssen Sie mit optionalen Leerzeichen umgehen) - Die Bereiche umfassen beide Enden
- Die Bereiche werden optional mit
odd
oder angefügteven
, was Sie berücksichtigen müssen. - Einer Reihe von Bereichen / Seiten wird im Formular eine Seitennummer vorangestellt
pg. 545:
, die wiederum optionale Leerzeichen enthält. Sie können diese ignorieren, da Sie die Probleme auf allen Seiten beheben müssen - Der Text kann in Groß- oder Kleinbuchstaben geschrieben sein, jedoch nicht in beiden.
- Geben Sie an, wie viele Probleme ich bei den Hausaufgaben habe.
- Da es sich um Code-Golf , kürzesten Code in Bytes gewinnt!
Testfälle
pg. 546: 17-19, 22, 26, pg. 548: 35-67 odd, 79, 80-86 even -> 27
pg. 34: 1 -> 1
PG. 565: 2-5,PG.345:7 -> 5
pg. 343: 5,8,13 - 56 even,pg. 345: 34 - 78,80 -> 70
pg.492: 2-4 odd,7-9 even -> 2
code-golf
natural-language
Maltysen
quelle
quelle
2-4 odd
? Es scheint einige Probleme für einfachere Ansätze zu verursachen.pg.492: 2-4 odd,7-9 even -> 2
22-26,25-30
?Antworten:
CJam,
6158514846434138 BytesÜberprüfen Sie die Testfälle im CJam-Interpreter .
Wie es funktioniert
quelle
Perl - 47 Bytes
Geändert, um den neuen Testfall zu bestehen.
Original
Perl - 36 Bytes
Zählt man den Shebang als 4, wird die Eingabe von stdin übernommen.
Beispielnutzung
Vorbehalte
Für gerade / ungerade Bereiche wird erwartet, dass mindestens einer der Endpunkte mit der Parität des Bereichs übereinstimmt. Zum Beispiel
11-19 odd
,11-20 odd
und10-19 odd
alle korrekt als 5 gezählt werden, sondern10-20 odd
wird als 6 über gezählt sein.quelle
pg. 20: 13-15 even
? oderpg. 20: 13-14 even
?*
ist ein Zeichen kürzer als&&
, was für eine leichte Verbesserung$\+=/\d+ ?-/*($'-$&>>/o|e/i)+1for@F}{
lc=~
.T^
Teil verstanden, aber irgendwie übersehen, dasslc
sich der Fall geändert hat$'
. Die Vorbereitunglc
auf$'
wäre etwas kürzer gewesen. Das sollte immer noch für beide Ansätze funktionieren:lc$'!~(T^lc$_%2)
oder($_%2x9^lc$')!~T
!~T
ist allerdings genial, danke!Python 2,
259253249239 BytesProbieren Sie es hier aus
Damit kann wohl noch mehr golfen werden.
Bearbeiten: Es wurde ein Fehler behoben, der dazu führte, dass meine nicht
2-4 even
wie erwartet funktionierte . Nehmen Sie dann eine Anpassung für diesen Fix vor. Dieser Fix hat mir vier Bytes gespart!Bearbeiten: Verwendet jetzt
input()
und +2 Bytes für die beiden Anführungszeichen, mit denen der Benutzer die Eingabe umgeben muss.Weniger Golf (mit Kommentaren!: D):
Ich hoffe diese Kommentare helfen einigen. Ich bin mir immer noch nicht ganz sicher, ob ich diese letzte komplexe Zeile richtig erklärt habe oder nicht.
quelle
s=raw_input()
indem Sie Einrückungen vornehmen und entfernen.Pyth,
43424442 BytesProbieren Sie es online aus: Vorführ- oder Testgeschirr
Ich denke, ich kann noch ein oder zwei Bytes hacken.
Erläuterung
quelle
JavaScript (Spidermonkey-Konsole) - 139
Es ist nur einfacher, auf der Kommandozeile zu testen.
Ungolfed:
quelle
[,from,to]
einfach nur sein[from,to]
?r.exec
, der die gesamte übereinstimmende Zeichenfolge enthält.Faktor - 488 Bytes:
quelle
Bash
344 315 306 294 262 252 242240Ich glaube nicht, dass ich so viel Golf gespielt habe, aber für eine erste Einreichung nicht schlecht. Kommentierte Version unten.
Führen Sie die Testfälle aus:
Je nachdem, wie ich die Regeln gelesen habe, können möglicherweise weitere 4 Bytes gespeichert werden. Wenn gerade / ungerade immer Kleinbuchstaben ist,
${1,,}
kann in geändert werden$1
quelle
JavaScript ( ES6 ), 149
Führen Sie zum Testen das Snippet in Firefox aus
quelle
C ++
226224222Ich weiß, dass ich zu spät zur Party komme, aber das schien mir ein lustiges Problem zu sein und das Fehlen von Einträgen in Sprachen der C-Familie störte mich.
Hier ist also eine C ++ - Funktion ohne reguläre Ausdrücke oder Zeichenfolgensubstitution, nur ein paar einfache Berechnungen:
Ungolfed :
Ich habe nicht gesagt, dass es lesbar ist, oder? :) Ternäre Operatoren sind die Hölle. Ich habe mein Bestes gegeben, um es zu formatieren, also hoffe ich, dass es zumindest ein bisschen hilft.
Verwendung :
quelle
Python 2 - 163 Bytes:
Probieren Sie es hier aus
Die Eingabe muss in Anführungszeichen erfolgen
Erläuterung:
Der allgemeine Ansatz besteht darin, die vorhandenen Eingaben in gültige Pythons umzuwandeln und diese auszuwerten. Jeder durch Kommas getrennte Wert wird in ein Array konvertiert, das dann alle zusammen angehängt werden und die Länge das Endergebnis ergibt.
Bei der Eingabe
12-15 odd,19
führt die Regex-Substitution beispielsweise vor der Auswertung zu folgenden Ergebnissen:Um dies weiter aufzuschlüsseln:
15+1 if 15.0 else 12+1
Dieses Bit stellt sicher, dass das zweite Argument von range () korrekt ist, abhängig davon, ob ein Bereich oder ein einzelner Wert angegeben wurde (wenn \ 3 leer ist, wird \ 3.0 mit false bewertet).if x%2!="oe".find("o")
Abhängig von dem Wert, der zwei Zeichen von der letzten Ziffer im Bereich entfernt gefunden wurde ((?=.(.))
im Regex - Lookahead zwei Zeichen, ohne diese zu verbrauchen), gibt es drei mögliche Ergebnisse:x%2!="oe".find("o")
bewertet zux % 2 != 0
(nur ungerade Treffer)x%2!="oe".find("e")
bewertet zux % 2 != 1
(nur gerade passend)x%2!="oe".find("[")
ergibtx % 2 != -1
(dieses Zeichen kann mehrere Zeichen enthalten, da es nur zwei Zeichen von der letzten Ziffer entfernt ist; es wird jedoch nur dann o oder e sein, wenn ungerade / gerade beabsichtigt ist)quelle