Wkład
Liczba całkowita n (≥ 1) i cyfra d (liczba całkowita taka, że 0 ≤ d ≤ 9).
W dowolnej kolejności; od standardu lub parametrów lub cokolwiek innego; do programu lub funkcji; itp.
Wydajność
Liczby od 1 do n włącznie (w tej kolejności), którego reprezentacje dziesiętny zawierać nawet szereg d s. (Oznacza to, że całkowite na liście są liczbami całkowitymi, które mają, odpowiednio, liczbę nawet d s).
W dowolnym standardowym formacie itp. W szczególności dane wyjściowe nie muszą być przedstawiane w postaci dziesiętnej.
Jeśli dane wyjściowe są wyprowadzane jako pojedynczy ciąg, liczby całkowite należy jakoś oddzielić (spacje, przecinki, znaki nowej linii, bajty puste, cokolwiek).
Przykłady
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
Dzięki
Do kwintopii dla tytułu.
Odpowiedzi:
Galaretka, 7 bajtów
Wypróbuj online!
Jak to działa
źródło
05AB1E ,
1110 bajtówKod:
Wyjaśnienie:
Wypróbuj online
Wykorzystuje kodowanie CP-1252 .
źródło
Haskell,
69635250 bajtówProste rozwiązanie dla mojego pierwszego postu tutaj. Używa
show
do zliczania liczbyd
. Ja wyraźnie nie użyłemChar
jako danych wejściowychd
, co zaoszczędziłoby126 (po edycji Damiena) bajtów.EDYCJA: 11 bajtów mniej dzięki Damienowi! EDYCJA 2: kolejne 2 bajty mniej dzięki nim!
źródło
Befunge,
1080945 bajtówWynik jest taki, że liczymy cały kwadrat, w tym znaki nowej linii, co ma sens. Możesz skopiować wklej kod do interpeter . Podaj dwa dane wejściowe, najpierw d, a następnie n . To rozwiązanie nie działa dla wartości większych niż n > 999.
Oczywiście nie będzie to pretendent do nagrody głównej, ale od jakiegoś czasu chciałem wdrożyć codegolfa w Befunge, więc postanowiłem to zrobić. Myślę, że nie będzie to nawet bliskie optymalnemu rozwiązaniu Befunge, ponieważ jest to pierwsza faktyczna rzecz, którą zrobiłem w Befunge. Tak więc wskazówki są mile widziane, jeśli potrzebujesz wyjaśnień lub więcej informacji, daj mi znać w komentarzach.
Próba wyjaśnienia:
W pierwszej kolumnie w dół odczytujemy liczbę całkowitą z wejścia, dodajemy 48 (6 * 8, zobaczysz to częściej), aby przekonwertować ją na odpowiednią wartość ASCII i umieścić na
(10, 0)
.&
- odczytać wejście68*+
- dodaj 4855+0p
- umieść wartość na(10, 0)
Zauważ, że
d
at(1, 0)
to prosty sposób na uzyskanie liczby 100 na stosie.Następnie idziemy na wschód, czytamy kolejną liczbę całkowitą i kierujemy się do czegoś, co nazywam palcem ASCII. To zamienia bieżącą liczbę w ciąg znaków ASCII. ASCIIfier to prostokątny element od
(13, 12)
do(26, 17)
. Składa się z dwóch pętli, najpierw licząc hunderdy, a następnie dziesiątki i umieszczając je w trzech cyfrach na(6, 0)
i(5, 0)
. Następnie wstawiana jest ostatnia cyfra(4, 0)
. Tak więc liczby są odwrotnie.Po umieszczeniu bieżącej liczby całkowitej w szeregu znaków ASCII idziemy nieco dalej na południe, aby usunąć poprzedzone zera. Zatem później, początkowo trzy zera u góry, będą bieżącą liczbą bez zer zerowych.
Następnie wracamy w górę, aż do północy, gdzie kładziemy trzy cyfry na stosie. Iterujemy trzy cyfry w górnej pętli, za każdym razem zwiększając licznik znajdujący się w,
(1, 1)
jeśli bieżąca cyfra odpowiada wejściu dPo wykonaniu tej czynności sprawdzamy, czy licznik znajdujący się przy
(1, 1)
jest nieparzysty, czy parzysty. Jeśli jest równy, wyprowadzamy bieżącą liczbę i przechodzimy do dużej zewnętrznej pętli, aby zmniejszyć bieżącą wartość i zacząć od nowa.źródło
Python 2, 50 bajtów
Funkcja rekurencyjna, która przyjmuje cyfrę
d
jako ciąg, a górną granicęn
jako liczbę.Ilość cyfr
d
w „sn
testuje się nawet biorąc go za nieco dopełniacza modulo 2, który daje1
do nawet i0
za dziwne. Tych wielun
dołącza się do listy, a funkcja powraca don-1
, zatrzymując się przez logiczne zwarcie na pustej liście, kiedyn==0
.Jeśli dane wyjściowe można podawać w malejącej kolejności, można zapisać jeden bajt na 49 bajtów:
Stare 51-bajtowe rozwiązanie:
Anonimowa funkcja, która przyjmuje cyfrę
d
jako ciąg, a górną granicęn
jako liczbę.Wykorzystywane są dwie sztuczki:
range
jest indeksowany na zero0...n-1
, więc dodajemy jeden do każdej potencjalnej wartościx
. Następnie, aby liczyćd
„swx+1
, zapisuje znak do wykorzystania jego negację~x
zamiast.~_%2
, które najpierw odwraca bit, aby przełączyć parzystość, a następnie bierze ostatni bit za pomocą&1
(tak jak%2
tutaj), generując prawdziwą wartość tylko wtedy, gdy oryginał był parzysty.źródło
Pyth, 10 bajtów
Wypróbuj online. Zestaw testowy.
źródło
Lua, 86 bajtów
W przypadku korzystania z niespójne separator pozostawia może zastąpić
io.write
przezprint
, co oznacza, że numery oddzielone jedną lub wieloma znakami nowej linii.Jest to pełny program, który ma się nazywać tak:
lua file.lua d n
.Usuwa wszystkie
d
znaki niebędące znakami z bieżącej liczby i używa rozmiaru wynikowego łańcucha, aby zdecydować, czy ma zostać wyprowadzony, czy nie.źródło
JavaScript (ES6) 64
Anonimowa funkcja z wyjściem na konsolę. Prosta implementacja za pomocą
split
liczenia cyfr.Wykorzystanie danych wyjściowych
alert
byłoby o 6 bajtów mniej, ale tak naprawdę to nie lubię (i tak nie zamierzam pokonać języków zabawek)źródło
MATL ,
1210 bajtówPierwsze wejście to n , drugie to d jako ciąg. Na przykład:
Wypróbuj online!
źródło
Ruby,
4742 bajtówUruchom za pomocą d i n jako parametrów wiersza polecenia, np
źródło
?1
do"1"
. I jest mniej ładny, ale bajt krótszy do zrobienia%2>0
zamiast.odd?
PowerShell,
6255edycja: użycie bloku parametrów w tym przypadku jest krótsze. usunięto trochę zbędnego miejsca
Nie jest to język golfowy, ale jest to jedyny język, który naprawdę znam. To działałoby zapisane jako skrypt i tak się nazywało
M:\Scripts\cgNeverTellMeTheOdds.ps1 1 12
. Pierwszy argument to cyfra d, a drugi to liczba całkowita n .Utwórz tablicę od 1 do n . Dla każdego z nich przekonwertuj to na tablicę znaków. 10 byłoby 1,0. Używając
-match
jako operatora tablicy zwracamy wszystkie elementy, które pasują do cyfry d . Policz ilość zwróconych elementów i zmień wynik na 2. Wynik wyniesie 0 dla parzystej i 1 dla nieparzystej. 0 jako boolean jest fałszem, więc używamy!
dla pętli oceny nieparzystych wyników na false, a nawet wyników na true.Dane wyjściowe to nowy wiersz rozdzielany na konsoli.
źródło
Retina ,
99105 bajtówZwróć uwagę na spacje końcowe.
<empty>
reprezentuje pustą linię.Przyjmuje dane wejściowe jak
1 12
. Wyjście jest oddzielane spacją w malejącej kolejności.Zmodyfikowałem,
0*1(0|10*1)*
aby dopasować nieparzystą liczbę\1
w liczbie. Zmieniłem0
na(?!\1)\d
i,1
aby\1
utworzyć długą linię wyrażeń regularnych, którą widzisz powyżej. Zrozumienie, jak działa połączony regex, jest kluczowe.Wypróbuj online
Skomentowano wyjaśnienie starej wersji
Jeśli kolejność malejąca była w porządku
źródło
1+
i$.0
wykonać konwersję z unary back to decimal.Narzędzia Bash + GNU, 37
źródło
*
Po otwarciu nawias wydaje się być zbędne. Usunięcie go oszczędza 1 bajt.Python 3.4,
92857985 bajtówZaoszczędzono 7 bajtów dzięki Mego
Zaoszczędzono kolejne 6 bajtów dzięki mbomb007
Odzyskano te 6 bajtów, ponieważ Python 3.x
To jest moja pierwsza gra w golfa kodowego, więc tutaj nic nie idzie!
źródło
`d`
zamiaststr(d)
, a jeśli przyjmiesz, że n jest liczbą całkowitą (<2 ** 32), możesz użyć`i`
zamiaststr(i)
.__repr__
Pythona 2, zostały usunięte w Pythonie 3. Prawdopodobnie powinieneś zmienić nagłówek, aby odzwierciedlić to ograniczenie.Perl 6, 38 bajtów
źródło
Brachylog , 32 bajty
Oczekuje, że N jako wejście, a cyfra jako wyjście, np
brachylog_main(12,1).
Wyjaśnienie
źródło
Mathematica, 54 bajty
źródło
Perl, 28
2931bajtówObejmuje +2 za
-an
Uruchom z cyfrą specyfikacji i licz na kolejne linie na STDIN:
źródło
Oracle SQL 11.2,
11182 bajtówźródło
Kotlin, 136 bajtów
W pełni funkcjonalny program, przyjmuje argumenty jako: nd
Wypróbuj online!
źródło
Java 8, 84 bajtów
To jest wyrażenie lambda dla
BiConsumer< Integer, Integer>
:Wyjaśnienie:
dla każdej liczby od 1 do n przekonwertuj liczbę na ciąg i podziel ją za pomocą d jako separatora. Jeśli został podzielony na nieparzystą liczbę sekcji, wydrukuj liczbę, a następnie nową linię.
źródło
Siatkówka oka,
727155Ogromne podziękowania dla Martina, który zupełnie przypadkowo przypomniał mi o grupach atomowych!
Wypróbuj online!
Wyjaśnienie:
Zamień liczbę, ale nie cyfrę, na jej jednoargumentowy odpowiednik.
\B
dopasowuje każdą pozycję (szerokość zero), która nie jest granicą słowa. Zauważ, że nie będzie to pasowało do żadnego z poniższych: początku łańcucha, końca łańcucha ani żadnej pozycji wokół znaku przecinka. Każda z tych granic jest następnie zastępowana nową linią, a następnie ciągiem poprzedzającym match ($`
). To daje listę jak:Gdzie
d
jest jakakolwiek pojedyncza cyfra dziesiętna.Konwertuje wszystkie listy
1
s na dziesiętne przedstawienie ich długości. To dogodnie nie wpłynie na to,1
co może być przed przecinkiem, ponieważ zawsze ma też swoją długość1
.Tutaj
G
włącza się tryb grep, co oznacza, że linie pasujące do wyrażenia regularnego są zachowywane, a inne linie są odrzucane. Wyrażenie regularne jest skomplikowane, ale zasadniczo pasuje do grup 2 cyfr wiodących (przechowywanych w grupie przechwytywania 1, więc możemy się z nim odwoływać\1
).Kluczem tutaj jest to, że jeśli zawiódł podczas używania nie-zachłannego dopasowania do dwóch najwcześniejszych pojawień cyfr, to po prostu cofnąłby się i spróbował ponownie, z
.
dopasowaniem nad cyfrą. Sprawiłoby to, że liczby takie jak 111 pasowałyby, gdy nasza cyfra wynosiła 1. Dlatego używamy,?>
aby dopasować liczbę atomową, zasadniczo zapobiegając cofnięciu wyrażenia regularnego, zanim dopasuje tę wartość. Dopasowywanie atomowe działa podobnie jak dopasowanie dodatnie w niektórych smakach. Ponieważ*
meta-znaków następuje dopasuje znaki aż jest w stanie dopasować to, co zapisane w . Następnie, gdy zrobimy to dwa razy, „pamięć” wyrażenia regularnego jest niszczona, co uniemożliwia zachowanie, które normalnie by się zdarzyło, gdy wraca i ma?
.
\1
.
dopasuj dodatkowy znak, naszą\1
cyfrę, która utworzyłaby nieprawidłowe dopasowania.Następnie sprawdzamy, czy z pozycji końcowej, po dopasowaniu powtarzanych grup dwóch cyfr wejściowych, nie możemy dopasować innej cyfry wejściowej.
Po prostu usuwamy cyfrę i przecinek z każdego łańcucha, więc otrzymujemy naszą ładną odpowiedź.
źródło
Python 2,
5754 bajtówStosowanie
źródło
Julia, 44 bajty
Jest to funkcja, która akceptuje dwie liczby całkowite i zwraca tablicę.
Zaczynamy od zestawu liczb całkowitych od 1 do
n
włącznie. Dla każdej liczby całkowiteji
określamy, która z cyfr dziesiętnych jest równad
, co daje tablicę boolowską. Mamysum
to, aby uzyskać liczbę wystąpieńd
jako cyfry wi
, ifilter
oryginalny zakres oparty na parzystości sumy.Wypróbuj tutaj
źródło
Poważnie, 17 bajtów
Pobiera dane wejściowe jako
n\n'd'
(liczba całkowita, nowa linia, ciąg).Wypróbuj online!
Wyjaśnienie:
źródło
Mathematica, 45 bajtów
Korzysta z wbudowanego
DigitCount
.źródło
Japt,
1312 bajtówWejście jest N , a następnie d owinięty w cudzysłowach. Przetestuj online!
Jak to działa
źródło
CJam, 38 bajtów
Wyjaśnienie
źródło
Scala, 66 bajtów
źródło
R, 145 bajtów (jestem pewien, że są sposoby na dalsze skrócenie) :)
źródło