In der Anno-Videospielserie gibt es 6 Spiele, von denen ein siebtes für Anfang 2019 angekündigt wurde. Ihre Titel enthalten immer ein Jahr in einem bestimmten Muster:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- Die digitale Summe ist immer 9.
- Die Jahre sind vierstellig.
- Sie enthalten mindestens eine Null.
Innerhalb dieser Einschränkungen gibt es 109 mögliche Titel:
[1008,1017,1026,1035,1044,1053,1062,1071,1080,1107,1170,1206,1260,1305,1350,1404,1440,1503,1530,1602,1620,1701,1710,1800,2007,2016,2025,2034,2043,2052,2061,2070,2106,2160,2205,2250,2304,2340,2403,2430,2502,2520,2601,2610,2700,3006,3015,3024,3033,3042,3051,3060,3105,3150,3204,3240,3303,3330,3402,3420,3501,3510,3600,4005,4014,4023,4032,4041,4050,4104,4140,4203,4230,4302,4320,4401,4410,4500,5004,5013,5022,5031,5040,5103,5130,5202,5220,5301,5310,5400,6003,6012,6021,6030,6102,6120,6201,6210,6300,7002,7011,7020,7101,7110,7200,8001,8010,8100,9000]
Ihr Ziel ist es, sie alle in einer angemessenen Form in der geringsten Anzahl von Bytes aufzulisten.
code-golf
number
kolmogorov-complexity
Laikoni
quelle
quelle
Antworten:
R ,
5951 BytesGibt die gültigen Zahlen als Namen einer Liste von 201 aus. Warum 201? Weil ASCII 0 48 ist und 4 * 48 + 9 ... ja. 6 Bytes durch Aliasing
^
aufMap
und weitere 2 durch Verwendung1:9e3
als Bereich gespeichert .Probieren Sie es online!
Erläuterung
quelle
grep
warum erinnere ich mich nie, dass es aufcharacter
...Perl 6 ,
3533 Bytes-2 Bytes dank Jo King
Probieren Sie es online!
quelle
Python 2 ,
676664 BytesProbieren Sie es online!
Gerettet:
quelle
ord sum == 201
Trick aus anderen Antworten.Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
PowerShell ,
50 bis49 ByteProbieren Sie es online!
Erstellt einen Bereich von
999
bis10000
und verwendet dann Inline-match
als Filter, um die Einträge herauszufiltern, mit denen Regex übereinstimmt0
. Dies lässt uns bei1000, 1001, 1002, etc.
Wir leiten das dann in eineWhere-Object
Klausel, in der wir die aktuelle Nummer als Zeichenkette nehmen"$_"
, sie alschar
-array umwandeln,-join
diese Zeichen zusammen mit+
undI
nvoke-Ex
pression (ähnlich wie eval), um ihre Ziffernsumme zu erhalten. Wir prüfen, ob dies der-eq
Fall ist9
, und wenn ja, wird es an die Pipeline weitergeleitet. Nach Abschluss des Programms werden diese Nummern aus der Pipeline abgerufen und implizit ausgegeben.quelle
JavaScript (ES6),
78-73Byte2 Bytes dank @KevinCruijssen gespeichert
Gibt eine durch Leerzeichen getrennte Zeichenfolge zurück.
Probieren Sie es online!
Wie?
Wir durchlaufen den Bereich[1008..9000] mit einem Inkrement von 9 und ignorieren Zahlen ohne 0 .
Alle diese Zahlen sind Vielfache von9 , so dass die Summe ihrer Ziffern garantiert auch ein Vielfaches von 9 .
Da gültige Zahlen haben mindestens eine0 , haben sie nicht mehr als zwei 9 ‚s, was bedeutet , dass die Summe der übrigen Ziffern höchstens 18 . Daher ist es ausreichend zu testen, ob die Summe der Ziffern ungerade ist.
Daher der Test:
quelle
1008
auf999
, da sie keine 0 sowieso nicht enthält, und999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(enthält jedoch ein nachgestelltes Komma, sodass einf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
Leerzeichen mit nachgestelltem Leerzeichen möglicherweise hübscher aussieht)JavaScript (Node.js) , 89 Byte
Probieren Sie es online!
JavaScript (Node.js),
12912712612411511411111010597939290 ByteProbieren Sie es online!
Erläuterung
Zum ersten Mal Code Golf in JavaScript. Ich glaube nicht, dass ich es sagen muss, aber wenn ich etwas falsch mache, benachrichtige mich bitte in den Kommentaren unten.
-3 Bytes dank @Luis felipe De jesus Munoz
-6 Bytes dank @Kevin Cruijssen
quelle
[...Array(9e3)]
Array(9e3).fill()
Speichert stattdessen 2 Bytes.map(a=>+a)
.map(Number)
speichert stattdessen ein weiteres Byte(_, i)
, um ein Byte zu speichern, und Sies[0]+s[1]+s[2]+s[3]
könneneval(s.join`+`)
weitere 4 Bytes speichern.||
kann|
in Ihrer Antwort..map()
nur zum Generieren des Bereichs und zum Trennen der Filterung verwenden, können Sie 8 Byte sparen: Probieren Sie es online aus!Python 2 , 57 Bytes
Probieren Sie es online!
2 Bytes dank Dennis
Verwendet eine
exec
Schleife, umn
in Schritten von 9 als 1008, 1017, ..., 9981, 9990 hochzuzählen und diejenigen zu drucken, die die Bedingung erfüllen.Nur Vielfache von 9 können eine Ziffernsumme von 9 haben, aber Vielfache von 9 in diesem Bereich können auch Ziffernsummen von 18 und 27 haben. Wir schließen dies mit der Bedingung aus
int(`n`,11)%10>8
. Interpretieren dern
in der Basis 11, ist seine digit Summe gleich die Anzahl modulo 10, genau wie in der Basis 10 eine Reihe gleich sein digit Summe modulo 9. Die Ziffern Summe von (9, 18, 27) entspricht (9, 8, 7) Modulo 10, also nehmen Sie diese>8
Arbeiten, um Neunen herauszufiltern.Die Zahl, die eine Null enthält, wird mit der String-Mitgliedschaft überprüft.
'0'in`n`
. Diese Bedingung wird mit der anderen Bedingung mit einer verketteten Ungleichung verknüpft, wobei Python 2 Zeichenfolgen als größer als Zahlen behandelt.quelle
sed und grep (und seq),
726463 Bytesquelle
grep
ist, also mache ich es vielleicht falsch?)Haskell , 55 Bytes
Danke an @Laikoni, siehe die Kommentare.
Lesbar:
quelle
(-48+)
und Vergleichen der Summe gegen201
statt9
. Übrigens können Sie dies auch1
anstelle1000
für den Bereich verwenden.main=print
war gemäß diesem Konsens über Meta in Ordnung .9999
kann5^6
stattdessen sein.R 82 Bytes
Probieren Sie es online!
Erzeugt eine Matrix
x
aller möglichen 4-stelligen Zahlen mit Ausnahme der führenden Nullen in den unteren Spalten. Dann wird nach (digitalen) Spaltensummen von 9 gefiltert, die Null enthalten, dh nichtall
ungleich Null.write
Druck nach unten den Spalten, so dass wirwrite
aufstdout
mit einer Breite von4
und einem Separator""
.Outgolfed von J.Doe
quelle
Japt ,
20 bis18 Bytes.-2 Bytes dank @Shaggy und @ETHproductions
Probieren Sie es online!
quelle
A³ò9000 f_ìx ¥9©ZsøT
bringt Sie aber wieder auf 20 zurück.ì
statts
und¬
, die im Filter getan werden muss:f_=ì)x ¥9...
. Dann können Sie einen anderen speichern, indem Sie prüfen, ob das Produkt von Z Null ist«Z×
: Probieren Sie es online aus!Java 8,
128117115 Bytes-11 Bytes dank @nwellnhof .
Probieren Sie es online aus.
Erläuterung:
quelle
chars().sum()==201
?R , 85 Bytes
(nur im Wettbewerb um den besten Missbrauch von eckigen Klammern ...: P)
Probieren Sie es online!
quelle
05AB1E ,
15131210 Bytes-2 Bytes dank @Emigna
-3 Bytes dank @Grimy
Probieren Sie es online aus.
Erläuterung:
°
ö
°
ö
°
ö
0
2345
2030405
°
ö
00
3456
3004005006
0
°ö
9Q
°ö
quelle
₄4°Ÿʒ0å}ʒSO9Q
. Splitting Filter sind in der Regel kürzer4°
. Vielen Dank. Und Sie haben in der Tat Recht, dass mehrere lose Filter (am Ende) kürzer sind. Fügt es auch einer meiner Tippantworten hinzu. Danke für beide Bytes!4°Lʒ0å}ʒÇOт·-
. Wenn Sie dies hier lassen, kann vielleicht jemand weiter Golf spielen₄4°ŸʒD0åôO9Q
. Die Verwendung eines einzelnen Filters ist normalerweise kürzer.₄4°ŸʒW°ö9Q
Pip , 18 Bytes
Verwenden Sie ein Output-Format-Flag
-p
, um eine lesbare Ausgabe zu erhalten. Probieren Sie es online!quelle
Wolfram Language (Mathematica) ,
56-55BytesProbieren Sie es online!
Wir testen den Bereich von 9 !! = 945 bis 9999, da es keine Ergebnisse zwischen 945 und 999 gibt. Vielleicht gibt es auch eine kürzere Möglichkeit, eine Zahl zwischen 9000 und 10007 zu schreiben.
Tr@#==Times@@#+9&
{a,b,c,d}
Wird auf Tests angewendet, wenn diesa+b+c+d == a*b*c*d+9
der Anno-Bedingung entspricht.quelle
9*7*5*3*1
.Rubin ,
46 4241 BytesProbieren Sie es online!
Wie es funktioniert:
(Danke Laikoni für -2 Bytes)
quelle
9*3
kann nur sein9
, weil die Prüfung gegen 201 bereits 4-stellige Zahlen erfordert.Oktave , 49 Bytes
6 Bytes werden mit einem bequemeren Ausgabeformat gespeichert, wie von J.Doe vorgeschlagen .
Danke an @Laikoni für die Korrektur .
Probieren Sie es online!
quelle
disp
Dart ,
103 10096 BytesZiemlich selbsterklärend. generiert eine Liste von 9001 (0-9000) Zellen mit dem Index der Zelle als Wert, filtert diejenigen, die eine 0 enthalten, und diejenigen, die eine ASCII-Summe von 201 haben (das Ergebnis, wenn alle ASCII-Zeichen 9 ergeben). Diese Bedingungen beinhalten implizit, dass das Jahr 4 Stellen lang ist, da Sie mit 2 ASCII-Zahlen (und der 0) nicht 201 erreichen können.
Probieren Sie es auf Dartpad!
quelle
Bash (mit
seq
,grep
), 39 BytesProbieren Sie es online!
quelle
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
vor, zwei Bytes zu speichern.K (ngn / k) , 22 Bytes
Probieren Sie es online!
quelle
55_&9=+/y*|/'~y:!4#10
für 21?'
in|/'
sieht falsch aus. Das Ergebnis enthält 1116, 1125, 1134 usw., die nicht vorhanden sein sollenAPL (Dyalog Unicode) , 23 Byte
Probieren Sie es online!
quelle
<
ist klug. Sie können es mit⎕io←0
und(
)10⊥⍣¯1⍳9e3
->(
)¨,⍳4⍴10
PHP,
69, 87 Bytes74 Bytesfor($i=999;$i<9001;$i++){echo((array_sum(str_split($i))==9&strpos($i,"0")!=0)?$i:" ");}
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
Beachten Sie, dass hierdurch für jede "fehlgeschlagene" Zahl ein Leerzeichen eingefügt wird, was zu einem irren Abstand führt. Dies kann in Kommatrennung geändert werden, es werden jedoch weitere 4 Zeichen hinzugefügt:
?$i.",":""
Ist größer geworden, weil ich nicht auf 0 gecheckt habe. Verkürzt um 13 von Titus!
quelle
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
... jetzt umgekehrt:?"":"$i,"
APL (Dyalog),
3329 Bytes-4 Bytes dank @Adam
Probieren Sie es online!
quelle
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 Bytes)Probieren Sie es online aus
quelle
t.sum==201
Werke stattt.map(_.asDigit).sum==9
.s"$n"
kannn+""
unds"$t "
kann seint+" "
.Tcl , 77 Bytes
Probieren Sie es online!
quelle
Japt, 16 Bytes
Gibt ein Array von Ziffern-Arrays zurück.
Probier es aus
Erläuterung
quelle
APL (NARS), 45 Zeichen, 90 Byte
Test nach einigen Formatierungen:
mögliche Alternative
quelle
Jelly , 13 Bytes
Probieren Sie es online!
Wie?
quelle