W serii gier wideo Anno jest 6 gier, z których 7 ogłoszono na początku 2019 r. Ich tytuły zawsze mają rok według określonego wzoru:
Anno 1602, Anno 1503, Anno 1701, Anno 1404, Anno 2070, Anno 2205, Anno 1800
- Suma cyfrowa wynosi zawsze 9.
- Lata składają się z czterech cyfr.
- Zawierają co najmniej jedno zero.
W ramach tych ograniczeń istnieje 109 możliwych tytułów:
[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]
Twoim celem jest wyświetlenie ich wszystkich w dowolnej rozsądnej formie w jak najmniejszej liczbie bajtów.
code-golf
number
kolmogorov-complexity
Laikoni
źródło
źródło
Odpowiedzi:
R ,
5951 bajtówZwraca prawidłowe liczby jako nazwy listy 201. Dlaczego 201? Ponieważ ASCII 0 to 48, a 4 * 48 + 9 to ... tak. Zapisane 6 bajtów przez aliasing
^
zMap
i kolejne 2 stosując1:9e3
jako zakres.Wypróbuj online!
Wyjaśnienie
źródło
grep
dlaczego nigdy nie pamiętam, że rzuca nacharacter
...Perl 6 ,
3533 bajtów-2 bajty dzięki Jo King
Wypróbuj online!
źródło
Python 2 ,
676664 bajtówWypróbuj online!
Zapisano:
źródło
ord sum == 201
lewy z innych odpowiedzi.Galaretka , 11 bajtów
Wypróbuj online!
Jak to działa
źródło
PowerShell ,
5049 bajtówWypróbuj online!
Konstruuje zakres od
999
do10000
, a następnie używa wbudowanego-match
jako filtru, aby wyciągnąć te wpisy, z którymi występuje wyrażenie regularne0
. Pozostaje nam1000, 1001, 1002, etc.
to. Następnie wstawiamy to doWhere-Object
klauzuli, w której bierzemy bieżącą liczbę jako ciąg"$_"
,char
rzutujemy ją jako tablicę,-join
te znaki razem+
iI
nvoke- pressionEx
(podobny do eval), aby uzyskać ich cyfrową sumę. Sprawdzamy, czy jest to-eq
celowe9
, a jeśli tak, to jest przekazywane do rurociągu. Po zakończeniu programu liczby te są pobierane z potoku i domyślnie wyprowadzane.źródło
JavaScript (ES6),
7873 bajtówZaoszczędzono 2 bajty dzięki @KevinCruijssen
Zwraca ciąg rozdzielony spacjami.
Wypróbuj online!
W jaki sposób?
w zakresie z przyrostem , ignorując liczby, które nie mają .[ 1008..9000 ] 9 0
Wszystkie te liczby są wielokrotnościami , więc suma ich cyfr jest gwarantowana jako wielokrotność .9 9
Dlatego ważne numery mają przynajmniej jedną , mają nie więcej niż dwa „s, co oznacza, że suma pozostałych cyfr wynosi co najwyżej . Dlatego wystarczy sprawdzić, czy suma cyfr jest nieparzysta.0 9 18
Stąd test:
źródło
1008
się999
, ponieważ nie zawierają 0 i tak, i999+9 = 1008
.f=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?[n,,]:'')+f(n-9)
(zawiera przecinek końcowy, więcf=(n=9e3)=>n<1e3?'':(eval([...n+''].join`+`)<10&/0/.test(n)?n+' ':'')+f(n-9)
z ogranicznikiem spacji, w tym spacją końcową, może wyglądać ładniej)JavaScript (Node.js) , 89 bajtów
Wypróbuj online!
JavaScript (Node.js),
12912712612411511411111010597939290 bajtówWypróbuj online!
Wyjaśnienie
Pierwszy raz robię golfa kodu w JavaScript. Nie sądzę, żebym musiał to powiedzieć, ale jeśli robię coś złego, powiadom mnie w komentarzach poniżej.
-3 bajty dzięki @Luis felipe De jesus Munoz
-6 bajtów dzięki @Kevin Cruijssen
źródło
[...Array(9e3)]
zamiast tegoArray(9e3).fill()
zapisuje 2 bajty.map(a=>+a)
zamiast tego.map(Number)
zapisuje kolejny bajt(_, i)
aby zapisać bajt, is[0]+s[1]+s[2]+s[3]
możeszeval(s.join`+`)
zapisać dodatkowe 4 bajty.||
może to być|
w twojej odpowiedzi..map()
tylko do generowania zakresu i trzymasz filtrowanie osobno, możesz zapisać 8 bajtów: Wypróbuj online!Python 2 , 57 bajtów
Wypróbuj online!
2 bajty dzięki Dennisowi
Używa
exec
pętli do zliczanian
w krokach 9 jako 1008, 1017, ..., 9981, 9990, drukując te, które spełniają warunek.Tylko wielokrotności 9 mogą mieć sumę cyfr 9, ale wielokrotności 9 w tym zakresie mogą również mieć sumę cyfr 18 i 27. Wykluczamy to z warunkiem
int(`n`,11)%10>8
. Interpretującn
w podstawie 11, jego suma cyfr jest równa liczbie modulo 10, podobnie jak w bazie 10 liczba równa się jej cyfrze modulo 9. Suma cyfr (9, 18, 27) odpowiada (9, 8, 7) modulo 10, więc biorąc te>8
prace, aby odfiltrować dziewiątki.Liczba zawierająca zero jest sprawdzana przy członkostwie w łańcuchach.
'0'in`n`
. Ten warunek jest łączony z drugim z łańcuchem nierówności, przy użyciu tego języka Python 2 traktuje łańcuchy jako większe niż liczby.źródło
sed i grep (i seq),
726463 bajtyźródło
grep
jest finał , więc może źle go popełniam?)Haskell , 55 bajtów
Dzięki @Laikoni zobacz komentarze.
Czytelny:
źródło
(-48+)
i porównując sumę201
zamiast9
. Nawiasem mówiąc, pozwala to również na użycie1
zamiast1000
zakresu.main=print
była w porządku zgodnie z tym konsensusem w sprawie Meta .9999
może być5^6
zamiast.R , 82 bajty
Wypróbuj online!
Generuje macierz
x
wszystkich możliwych 4-cyfrowych liczb, wyłączając zera na początku, przechodząc w dół kolumn. Następnie filtry dla sumowych kolumn (cyfrowych) 9 i zawierających zero, tj. Nieall
są niezerowe.write
Wydruki w dół kolumny, więcwrite
tostdout
o szerokości4
i separator""
.Outgolfed by J.Doe
źródło
Japt ,
2018 bajtów.-2 bajty dzięki produktom @Shaggy i @ETH
Wypróbuj online!
źródło
A³ò9000 f_ìx ¥9©ZsøT
sprowadza cię z powrotem do 20.ì
zamiasts
i¬
, co musi być zrobione w filtrze:f_=ì)x ¥9...
. Następnie możesz zapisać kolejny, sprawdzając, czy iloczyn Z jest równy zero«Z×
: Wypróbuj online!Java 8,
128117115 bajtów-11 bajtów dzięki @nwellnhof .
Wypróbuj online.
Wyjaśnienie:
źródło
chars().sum()==201
?R , 85 bajtów
(po prostu rywalizuję o najlepsze nadużycie nawiasów kwadratowych R ...: P)
Wypróbuj online!
źródło
05AB1E ,
15131210 bajtów-2 bajty dzięki @Emigna
-3 bajty dzięki @Grimy
Wypróbuj online.
Wyjaśnienie:
°
ö
°
ö
°
ö
0
2345
2030405
°
ö
00
3456
3004005006
0
°ö
9Q
°ö
źródło
₄4°Ÿʒ0å}ʒSO9Q
. Filtry4°
. Dzięki. I rzeczywiście masz rację, że wiele luźnych filtrów (na końcu) jest krótszych. Dodam go również do jednej z moich wskazówek typu tip. Dzięki za oba bajty!4°Lʒ0å}ʒÇOт·-
. Zostawiając to tutaj, może ktoś może₄4°ŸʒD0åôO9Q
. Korzystanie z pojedynczego filtra jest zwykle krótsze.₄4°ŸʒW°ö9Q
Pip , 18 bajtów
Użyj flagi w formacie ouput, na przykład,
-p
aby uzyskać czytelny wynik. Wypróbuj online!źródło
Wolfram Language (Mathematica) ,
5655 bajtówWypróbuj online!
Testujemy zakres od 9 !! = 945 do 9999, ponieważ nie ma wyników między 945 a 999. Może jest też krótszy sposób na zapisanie liczby między 9000 a 10007.
Tr@#==Times@@#+9&
stosowane do{a,b,c,d}
testów ifa+b+c+d == a*b*c*d+9
, które ostatecznie są równoważne Warunkowi Anno.źródło
9*7*5*3*1
.Ruby ,
46 4241 bajtówWypróbuj online!
Jak to działa:
(Dzięki Laikoni za -2 bajty)
źródło
9*3
może być po prostu9
, ponieważ sprawdzanie w stosunku do 201 wymaga już 4 cyfr.Oktawa , 49 bajtów
6 bajtów zapisanych przy użyciu wygodniejszego formatu wyjściowego, jak sugeruje J.Doe .
Dzięki @Laikoni za korektę .
Wypróbuj online!
źródło
disp
...Dart ,
103 10096 bajtówDość oczywiste. generuje listę 9001 (0–9000) komórek z indeksem komórki jako wartością, filtruje te zawierające 0, a następnie tę o sumie ASCII 201 (Wynik, jeśli wszystkie znaki ASCII sumują się do 9). Warunki te domyślnie obejmują, że rok ma 4 cyfry, ponieważ używając 2 liczb ASCII (i 0), nie można osiągnąć 201.
Wypróbuj na Dartpad!
źródło
Bash (z
seq
,grep
), 39 bajtówWypróbuj online!
źródło
seq 0 9 1e4|awk '/([0-4].*){3}/&&/0/'
zapisanie dwóch bajtów.K (ngn / k) , 22 bajty
Wypróbuj online!
źródło
55_&9=+/y*|/'~y:!4#10
za 21?'
w|/'
wygląda źle. wynik obejmuje 1116, 1125, 1134 itd., których nie powinno tam byćAPL (Dyalog Unicode) , 23 bajty
Wypróbuj online!
źródło
<
jest sprytne. możesz go jeszcze skrócić za pomocą⎕io←0
i(
)10⊥⍣¯1⍳9e3
->(
)¨,⍳4⍴10
PHP,
69, 87 bajtów74 bajtyfor($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;
Zauważ, że stawia to miejsce dla każdej „nieudanej” liczby, co prowadzi do pewnego rodzaju funky odstępów. Można to zmienić na separację przecinków, ale doda kolejne 4 znaki:
?$i.",":""
Zwiększyłem się, ponieważ nie sprawdzałem 0. Derp. Skrócone o 13 przez Tytusa!
źródło
for($i=999;$i++<1e4;)echo!strpos($i,48)|array_sum(str_split($i))-9?" ":$i;
?"$i,":""
er ... teraz odwrotnie:?"":"$i,"
APL (Dyalog),
3329 bajtów-4 bajty dzięki @Adam
Wypróbuj online!
źródło
1e3+⍸(0∘∊∧9=+/)¨⍎¨∘⍕¨1e3+⍳9e3
Scala (
76636156 bajtów)Wypróbuj online
źródło
t.sum==201
działa zamiastt.map(_.asDigit).sum==9
.s"$n"
może byćn+""
is"$t "
może byćt+" "
.Tcl , 77 bajtów
Wypróbuj online!
źródło
Japt, 16 bajtów
Zwraca tablicę tablic cyfrowych.
Sprawdź to
Wyjaśnienie
źródło
APL (NARS), 45 znaków, 90 bajtów
przetestuj po sformatowaniu:
możliwa alternatywa
źródło
Galaretka , 13 bajtów
Wypróbuj online!
W jaki sposób?
źródło