Eingang
Eine ganze Zahl n (≥ 1) und eine Ziffer d (eine ganze Zahl mit 0 ≤ d ≤ 9).
In jeder Reihenfolge; von stdin oder Parametern oder was auch immer; zu einem Programm oder einer Funktion; etc.
Ausgabe
Die ganzen Zahlen von 1 bis einschließlich n (in der Reihenfolge), deren Dezimaldarstellungen eine gerade Anzahl von ds enthalten . (Das heißt, die Ganzzahlen in der Liste sind die Ganzzahlen, die jeweils eine gerade Anzahl von ds haben .)
In jedem Standardformat usw. Insbesondere muss die Ausgabe nicht dezimal dargestellt werden.
Bei der Ausgabe als einzelne Zeichenfolge müssen die Ganzzahlen getrennt werden (Leerzeichen, Kommas, Zeilenumbrüche, Null-Bytes usw.).
Beispiele
in(d,n) ↦ out
1,12 ↦ 2 3 4 5 6 7 8 9 11
0,111 ↦ 1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19,21,22,23,24,25,26,27,28,29,31,32,33,34,35,36,37,38,39,41,42,43,44,45,46,47,48,49,51,52,53,54,55,56,57,58,59,61,62,63,64,65,66,67,68,69,71,72,73,74,75,76,77,78,79,81,82,83,84,85,86,87,88,89,91,92,93,94,95,96,97,98,99,100,111
Vielen Dank
Zur Quintopie für den Titel.
Antworten:
Gelee, 7 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
05AB1E ,
1110 BytesCode:
Erläuterung:
Probieren Sie es online aus
Verwendet die CP-1252- Codierung.
quelle
Haskell,
69635250 BytesDirekte Lösung für meinen allerersten Post hier. Es verwendet
show
die Anzahl der zu zählend
ist. Ich habe ausdrücklich nichtChar
als Eingabe für verwendetd
, die126 (nach Damiens Bearbeitung) Bytes gespeichert hätte .EDIT: 11 Bytes weniger dank Damien! EDIT 2: noch 2 Bytes weniger dank nimi!
quelle
Befunge,
1080945 BytesDie Punktzahl ergibt, dass wir das gesamte Quadrat einschließlich der Zeilenumbrüche zählen, was sinnvoll ist. Sie können den Code kopieren und in den Interpeter einfügen . Stellen Sie zwei Eingänge bereit, zuerst d und dann n . Diese Lösung funktioniert nicht für Werte größer als n > 999.
Dies wird natürlich kein Anwärter auf den Hauptpreis sein, aber ich wollte schon seit einiger Zeit ein Codegolf in Befunge implementieren, also habe ich beschlossen, es einfach zu tun. Ich gehe davon aus, dass dies nicht annähernd zu einer optimalen Befunge-Lösung führen wird, da es das erste ist, was ich in Befunge gemacht habe. Also, Hinweise sind willkommen, wenn Sie Klarstellung oder weitere Informationen benötigen, lassen Sie es mich bitte in den Kommentaren wissen.
Erklärungsversuch:
In der ersten Spalte abwärts lesen wir eine Ganzzahl aus der Eingabe, addieren 48 (6 * 8, das sehen Sie öfter), um sie in den entsprechenden ASCII-Wert umzuwandeln und zu setzen
(10, 0)
.&
- Eingabe lesen68*+
- 48 hinzufügen55+0p
- Setzen Sie den Wert auf(10, 0)
Beachten Sie, dass
d
at(1, 0)
nur ein einfacher Weg ist, um die Zahl 100 auf den Stapel zu bekommen.Danach gehen wir nach Osten und lesen eine andere Ganzzahl und gehen zu dem, was ich ASCIIfier nenne. Dadurch wird die aktuelle Nummer in eine Reihe von ASCII-Zeichen umgewandelt. Der ASCIIfier ist das rechteckige Stück von
(13, 12)
bis(26, 17)
. Es besteht aus zwei Schleifen, die zuerst die Hunderter und dann die Zehner zählen und diese bei(6, 0)
und auf die drei Ziffern setzen(5, 0)
. Danach wird die letzte Ziffer eingegeben(4, 0)
. Die Zahlen sind also eigentlich umgekehrt.Nachdem wir die aktuelle Ganzzahl in eine Reihe von ASCII-Zeichen eingefügt haben, gehen wir etwas weiter nach Süden, um vorangestellte Nullen zu entfernen. Somit ist danach, was anfangs die drei oberen Nullen sind, die aktuelle Zahl ohne vorangestellte Nullen.
Dann gehen wir zurück nach Norden, wo wir die drei Ziffern auf den Stapel legen. Wir iterieren über die drei Ziffern in der oberen Schleife und erhöhen jedes Mal den Zähler, der sich auf befindet,
(1, 1)
wenn die aktuelle Ziffer der Eingabe d entsprichtWenn das erledigt ist, gehen wir und prüfen, ob der Zähler, an dem sich
(1, 1)
befindet, ungerade oder gerade ist. Wenn es gerade ist, geben wir die aktuelle Zahl aus und fahren mit der großen äußeren Schleife fort, um den aktuellen Wert zu dekrementieren und von vorne zu beginnen.quelle
Python 2, 50 Bytes
Eine rekursive Funktion, die die Ziffer
d
als Zeichenfolge und die Obergrenzen
als Zahl verwendet.Die Zahl der Stellen
d
ist inn
getestet sogar sein , indem sie die Bit - Komplement Modulo - 2 - Aufnahme, die gibt es1
noch und0
für ungerade. Diese vielenn
werden an die Liste angehängt und die Funktion läuft weiter bisn-1
und stoppt über einen logischen Kurzschluss auf der leeren Liste, wennn==0
.Wenn die Ausgabe in absteigender Reihenfolge erfolgt, kann ein Byte für 49 Byte gespeichert werden:
Alte 51-Byte-Lösung:
Eine anonyme Funktion, die die Ziffer
d
als Zeichenfolge und die Obergrenzen
als Zahl verwendet.Zwei Tricks werden verwendet:
range
ist null-indiziert0...n-1
, also addieren wir einen zu jedem potenziellen Wertx
. Dann zu zählend
‚s inx+1
, es spart ein Zeichen seine Negation verwenden~x
statt.~_%2
zuerst die Bit-Flips, um die Parität umzuschalten, und nehmen dann das letzte Bit mit&1
(wie%2
hier). Dabei wird nur dann ein wahrer Wert erzeugt, wenn das Original gerade war.quelle
Pyth, 10 Bytes
Probieren Sie es online aus. Testsuite.
quelle
Lua, 86 Bytes
Bei der Verwendung von inkonsistenten Separator erlaubt ist, könnte ich ersetzen
io.write
durchprint
, dh Zahlen , die durch einen oder mehrere Zeilenumbrüche getrennt werden würde.Dies ist ein komplettes Programm, das wie folgt aufgerufen werden müssen:
lua file.lua d n
.Es entfernt alle Nicht-
d
Zeichen aus der aktuellen Zahl und verwendet die Größe der resultierenden Zeichenfolge, um zu entscheiden, ob sie ausgegeben werden soll oder nicht.quelle
JavaScript (ES6) 64
Eine anonyme Funktion mit Ausgabe an die Konsole. Einfache Implementierung mit,
split
um die Ziffern zu zählen.Die Ausgabe mit
alert
würde 6 Byte weniger sein, aber ich mag es wirklich nicht (und ich werde die Spielzeugsprachen sowieso nicht schlagen)quelle
MATL ,
1210 BytesDie erste Eingabe ist n , die zweite ist d als Zeichenfolge. Beispielsweise:
Probieren Sie es online!
quelle
Ruby,
4742 BytesFühren Sie mit d und n als Befehlszeilenparameter aus, z
quelle
?1
für verwenden"1"
. Und es ist weniger hübsch, aber ein Byte kürzer zu tun ,%2>0
statt.odd?
PowerShell,
6255edit: die verwendung eines param-blocks ist in diesem fall kürzer. redundanten Speicherplatz entfernt
Keine Golfsprache, aber die einzige, die ich wirklich kenne. Dies würde als Skript gespeichert und so aufgerufen werden
M:\Scripts\cgNeverTellMeTheOdds.ps1 1 12
. Das erste Argument ist die Ziffer d und das zweite ist die Ganzzahl n .Erstellen Sie ein Array mit den Nummern 1 bis n . Für jeden konvertieren Sie das in ein Zeichen-Array. 10 wäre 1,0. Bei Verwendung
-match
als Array-Operator werden alle Elemente zurückgegeben, die mit der Ziffer d übereinstimmen . Zählen Sie die Anzahl der zurückgegebenen Elemente und mod 2 das Ergebnis. Das Ergebnis ist 0 für gerade und 1 für ungerade. 0 als Boolescher Wert ist false, daher wird!
für die Schleife verwendet, um die ungeraden Ergebnisse als false und die geraden Ergebnisse als true auszuwerten.Ausgabe ist ein Zeilenumbruch, der auf der Konsole begrenzt ist.
quelle
Retina ,
99105 BytesBeachten Sie die nachstehenden Leerzeichen.
<empty>
steht für eine leere Zeile.Nimmt Eingaben wie
1 12
. Die Ausgabe wird in absteigender Reihenfolge durch Leerzeichen getrennt.Ich habe geändert
0*1(0|10*1)*
, um einer ungeraden Zahl\1
in einer Zahl zu entsprechen. Ich habe0
zu(?!\1)\d
und1
zu geändert ,\1
um die lange Regex-Linie zu erstellen, die Sie oben sehen. Es ist entscheidend zu verstehen, wie der verknüpfte reguläre Ausdruck funktioniert.Probieren Sie es online aus
Kommentierte Erklärung der alten Version
Wenn absteigende Reihenfolge in Ordnung wäre
quelle
1+
und verwenden$.0
, um die Konvertierung von unär zurück nach dezimal durchzuführen.Bash + GNU-Dienstprogramme, 37
quelle
*
Folgenden scheint die öffnende Klammer überflüssig zu sein. Wenn Sie es entfernen, sparen Sie 1 Byte.Python 3.4,
92857985 Bytes7 Bytes dank Mego
gespeichert Weitere 6 Bytes dank mbomb007 gespeichert
6 Bytes wurden aufgrund von Python 3.x
Dies ist mein erster Versuch mit Codegolf, hier geht also nichts!
quelle
`d`
anstelle von verwendenstr(d)
, und wenn Sie annehmen, dass n eine Ganzzahl (<2 ** 32) ist, können Sie`i`
anstelle von verwendenstr(i)
.__repr__
in Python 2, sie wurden in Python 3 entfernt. Sie sollten wahrscheinlich Ihren Header ändern, um diese Einschränkung widerzuspiegeln.Perl 6, 38 Bytes
quelle
Brachylog , 32 Bytes
Erwartet N als Eingabe und die Ziffer als Ausgabe, z
brachylog_main(12,1).
Erläuterung
quelle
Mathematica, 54 Bytes
quelle
Perl, 28
2931BytesBeinhaltet +2 für
-an
Führen Sie mit der Spezifikationsziffer aus und zählen Sie in aufeinanderfolgenden Zeilen auf STDIN:
quelle
Oracle SQL 11.2,
11182 Bytesquelle
Kotlin, 136 Bytes
Voll funktionsfähiges Programm, Argumente wie: nd
Probieren Sie es online!
quelle
Java 8, 84 Bytes
Dies ist ein Lambda-Ausdruck für
BiConsumer< Integer, Integer>
:Erläuterung:
Konvertieren Sie für jede Zahl zwischen 1 und n die Zahl in eine Zeichenfolge und teilen Sie sie mit d als Trennzeichen. Wenn es in eine ungerade Anzahl von Abschnitten aufgeteilt wurde, drucken Sie die Nummer aus, gefolgt von einer neuen Zeile.
quelle
Retina,
727155Ein großes Dankeschön an Martin, der mich aus Versehen an atomare Matching-Gruppen erinnert hat!
Probieren Sie es online!
Erläuterung:
Ersetzen Sie die Zahl, aber nicht die Ziffer, durch das unäre Äquivalent.
\B
stimmt mit jeder Position (Breite Null) überein, die keine Wortgrenze ist. Beachten Sie, dass dies keinem der folgenden Elemente entspricht: dem Anfang der Zeichenfolge, dem Ende der Zeichenfolge oder einer beliebigen Position um das Komma. Jede dieser Nichtgrenzen wird dann durch eine neue Zeile und dann die Zeichenfolge ersetzt, die vor dem match ($`
) steht. Dies gibt eine Liste wie:Wo
d
ist eine einzelne Dezimalstelle.Dies konvertiert alle Listen von
1
s in die dezimale Darstellung ihrer Länge. Dies wirkt sich günstigerweise nicht auf das1
Komma aus, da es immer1
auch die Länge hat .Hier wird der
G
Grep-Modus aktiviert, was bedeutet, dass Zeilen, die mit dem regulären Ausdruck übereinstimmen, beibehalten und andere Zeilen verworfen werden. Dieser reguläre Ausdruck ist kompliziert, stimmt jedoch im Wesentlichen mit Gruppen von 2 der führenden Ziffer überein (in Erfassungsgruppe 1 gespeichert, sodass wir darauf verweisen können\1
).Der Schlüssel hier ist, dass, wenn es fehlschlägt, wenn die nicht-gierige Übereinstimmung bis zu den zwei frühesten Erscheinungen der Ziffern verwendet wird, es einfach zurückgesetzt und erneut versucht wird, wobei die
.
Übereinstimmung über der Ziffer erfolgt. Dies würde dazu führen, dass Zahlen wie 111 übereinstimmen, wenn unsere Ziffer 1 ist. Daher verwenden wir?>
, um die Übereinstimmung atomar zu machen, wodurch im Wesentlichen verhindert wird, dass der Regex zurückverfolgt wird, bevor er mit diesem Wert übereinstimmt. Ein atomares Match funktioniert in bestimmten Geschmacksrichtungen ähnlich wie ein Possesive Matching. Da auf das*
Metazeichen ein folgt, werden?
die.
Zeichen solange mit dem übereinstimmen, bis es mit dem übereinstimmt, was wir in gespeichert haben\1
. Sobald wir dies zweimal tun, wird der "Speicher" des regulären Ausdrucks zerstört, wodurch das normalerweise auftretende Verhalten verhindert wird, bei dem er zurückgeht und das hat.
stimmen mit einem zusätzlichen Zeichen, unserer\1
Ziffer, überein , wodurch ungültige Übereinstimmungen erzeugt würden.Dann prüfen wir von der Endposition aus, nachdem wir wiederholte Gruppen von zwei der Eingabeziffer abgeglichen haben, dass wir nicht mit einer anderen Eingabeziffer übereinstimmen können.
Hier entfernen wir nur die Ziffer und das Komma von jeder der Zeichenfolgen, sodass wir nur unsere nette Antwort erhalten.
quelle
Python 2,
5754 BytesVerwendung
quelle
Julia, 44 Bytes
Dies ist eine Funktion, die zwei Ganzzahlen akzeptiert und ein Array zurückgibt.
Wir beginnen mit der Menge der ganzen Zahlen von 1 bis
n
einschließlich. Für jede Ganzzahli
bestimmen wir, welche ihrer Dezimalstellen gleich sindd
, was ein Boolesches Array ergibt. Wir berechnensum
dies, um die Anzahl der Vorkommend
als Ziffer ini
undfilter
den ursprünglichen Bereich basierend auf der Parität der Summe zu erhalten.Probieren Sie es hier aus
quelle
Im Ernst, 17 Bytes
n\n'd'
Übernimmt Eingaben als (Integer, Newline, String).Probieren Sie es online!
Erläuterung:
quelle
Mathematica, 45 Bytes
Verwendet die eingebaute
DigitCount
.quelle
Japt,
1312 BytesEingang ist n , dann d in Anführungszeichen gewickelt. Online testen!
Wie es funktioniert
quelle
CJam, 38 Bytes
Erläuterung
quelle
Scala, 66 Bytes
quelle
R, 145 Bytes (ich bin sicher, dass es Möglichkeiten gibt, dies weiter zu verkürzen) :)
quelle