Wyzwanie
Repdigit jest liczbą całkowitą nieujemną których cyfry są równe.
Utwórz funkcję lub pełny program, który pobiera jedną liczbę całkowitą jako dane wejściowe i wyświetla prawdziwą wartość, jeśli liczba wejściowa to powtórka w bazie 10, a w przeciwnym razie wartość fałsz.
Dane wejściowe mają być dodatnią liczbą całkowitą.
Możesz bezkarnie pobierać i wykorzystywać dane wejściowe jako ciąg znaków w bazie 10.
Przypadki testowe
Są to wszystkie reprodukcje poniżej 1000.
1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
111
222
333
444
555
666
777
888
999
Większą listę można znaleźć w OEIS .
Zwycięski
Najkrótszy kod w bajtach wygrywa. Nie oznacza to, że sprytne odpowiedzi w pełnych językach nie będą mile widziane.
code-golf
math
number
arithmetic
decision-problem
Aidan F. Pierce
źródło
źródło
Odpowiedzi:
Brachylog , 1 bajt
Wypróbuj online!
Działa to na liczbach całkowitych.
Od
src/predicates.pl#L1151
:źródło
C (gcc) ,
333029 bajtówWypróbuj online!
źródło
return
(myślę, że ukradnę to drugie dla mojej odpowiedzi :)).-O0
zapiszen
dokładnie wynik końcowy zeax
, aby uczynić go wartością zwracaną? Czy mógłbyś wyjaśnić logikę, dlaczego wiedziałeś, że to zadziała?return n
być nop i nie ma powodu, aby przypisywać zmienną lokalną na końcu funkcji, jeśli nie zamierzasz zwrócić wyniku.COBOL , 139 BYTÓW
Wydaje mi się, że COBOL nie kocha się w golfa kodowego (prawdopodobnie dlatego, że nie ma szans, by wygrał), ale oto:
A jest zdefiniowane jako PIC 9 (4).
źródło
TRUE
iFALSE
aby odpowiednio 1 i 005AB1E , 1 bajt
Sprawdza, czy wszystkie cyfry są równe
Wypróbuj online!
źródło
Python 3,
25, 2419 bajtów.Wariant stdin => kod błędu.
Zwraca kod błędu 0, jeśli jest to repdigit - lub błąd w przypadku niepowodzenia.
Dzięki Dennisowi za pomoc w komentarzach.
źródło
>1
raczej przetestować niż<2
. Zgłoszenie rzeczywistego błędu byłoby krótsze niż użycieexit
btw.if python3 repdigit.py; then echo truthy; else echo falsy; fi
musi działać zgodnie z naszą definicją, więc 0 to prawda, a wszystko inne to fałsz.*
rozpakowuje iterowalny . Na przykład{*'123'}
generuje zestaw{'1','2','3'}
.Mathematica, 27 bajtów
Nie bije
Equal@@IntegerDigits@#&
, ale bije inne rozwiązania matematyczne oparte na arytmetyce.Repdigity mają postać n = d (10 m -1) / 9, gdzie m jest liczbą cyfr, a d jest cyfrą powtarzaną. Możemy odzyskać d od n , biorąc go modulo 10 (ponieważ jeśli jest to cyfra powtórzenia, to ostatnią cyfrą będzie d ). Możemy więc zmienić to na m = log 10 (9 n / (n% 10) + 1) i sprawdzić, czy m jest liczbą całkowitą.
źródło
Haskell , 15 bajtów
Wypróbuj online! Pobiera ciąg znaków.
Odpowiednik
\s->all(==head s)s
. Wąsko pokonuje alternatywy:źródło
f s=(s<*s)==(s*>s)
to bardzo ciekawy pomysł, wcześniej nie zdawałem sobie z tego sprawy<*
.C (gcc), 41 bajtów
Jest to funkcja, która pobiera dane wejściowe jako ciąg znaków i zwraca,
1
jeśli jest to repdigit i0
inaczej.Robi to za pomocą
strspn
funkcji, która pobiera dwa ciągi i zwraca długość najdłuższego prefiksu pierwszego ciągu składającego się tylko z znaków z drugiego ciągu. Tutaj pierwszy ciąg jest wejściem, a drugi ciąg jest ostatnią cyfrą wejścia, uzyskaną przez przekazanie wskaźnika do ostatniego znaku ciągu wejściowego.Iff wejście jest repdigit, a następnie wynikiem połączenia
strspn
będziestrlen(s)
. Następnie indeksowanie dos
zwróci bajt zerowy, jeśli tak jest (str[strlen(str)]
zawsze\0
) lub pierwsza cyfra, która w innym przypadku nie pasuje do ostatniej cyfry. Negowanie tego!
powoduje, żes
reprezentuje repdigit.Wypróbuj online!
Dzięki @Dennis za pośrednie przypomnienie mi sztuczki polegającej na przypisaniu zamiast powrotu za pomocą jego niesamowicie imponującej odpowiedzi , oszczędzając 4 bajty!
źródło
strlen
i tworząc nowy ciąg z*s
:c;f(char*s){c=*s;c=!s[strspn(s,&c)];}
for 37.PHP,
252825usuń wszystkie znaki z prawej strony, które są równe pierwszemu i wydrukuj,
1
jeśli wszystkie znaki zostały usunięte.źródło
R, 31 bajtów
Ta funkcja działa z wejściowymi ciągami znaków i używa wyrażenia regularnego do ustalenia, czy dane wejściowe są repdigit.
Przykład
źródło
/// , 110 bajtów
Wypróbuj online!
Język /// nie ma pojęcia prawdy i falseya, więc to wypisuje „T”, jeśli wejście jest repdigit, i nie wypisuje żadnych znaków, jeśli wejście nie jest repdigit.
źródło
Galaretka ,
21 bajtWypróbuj online!
źródło
1
-9
liczyć się jako reprodukcje?Oktawa , 11 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako ciąg.
Sprawdza równość wszystkich znaków z pierwszymi. Jeśli wszystkie są równe, wynikiem będzie wektor z tylko
1
(prawda w oktawie), w przeciwnym razie będzie co najmniej jeden0
(fałsz w oktawie). Oto dowód .źródło
all(...)
aby uzyskać wynik wartości prawda / fałsz?grep, 17 bajtów
Dopasowuje dowolny ciąg znaków, który jest powtórzeniem jego pierwszego znaku.
źródło
C #,
423328 bajtówi
musi być ciągiem.Dużo się ogoliłem dzięki @LethalCoder
źródło
i[0].ToString()
można skrócići[0]+""
,<1
jest krótszy niż==0
..Length<1
może być po prostu==""
Braingolf , 6 bajtów
Wypróbuj online!
Niestety, niejawne dane wejściowe Braingolfa z argumentów wiersza poleceń nie mogą zaakceptować danych składających się z samych cyfr jako ciągów znaków, zawsze będą one rzutować je na liczby, więc zamiast tego rozwiązaniem jest przekazanie ich przez STDIN, który dodaje 1 bajt do odczytu STDIN (
i
)Wyjaśnienie:
Po
u
długość stosu jest równa liczbie unikalnych znaków na wejściu, odjęcie 1 oznacza, to będzie0
wtedy i tylko wtedy, gdy istnieje dokładnie jeden wyjątkowy charakter na wejściu,0
to jedyna liczba falsey w Pythonie, więcn
zastąpi0
z1
, i wszystko inne z0
.źródło
Japt , 4 bajty
Wypróbuj online!
źródło
JavaScript (ES6),
2321 bajtówZaoszczędzono 2 bajty dzięki Neilowi
Pobiera dane wejściowe jako liczbę całkowitą lub ciąg znaków. Zwraca wartość logiczną.
Próbny
Pokaż fragment kodu
źródło
test
zamiast!!exec
2 bajtów?Ohm , 4 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Ul≤
powinien działać.0
to falsey, a każda inna liczba jest prawdziwa. Właśnie zauważyłem, że do tego wyzwania potrzebujemy dokładnie odwrotności (często wolno nam się wymieniać, dopóki deklarujemy, który przypadek jest prawdziwy, a który falsey). Prawda jest zdefiniowana przez „wziąłby sukę”.Ul1E
powinien również działać (choć nie znam Ohma), ponieważ nie musi obsługiwać 0.APL, 5 bajtów
2 bajty zapisane dzięki @KritixiLithos
Wypróbuj online!
źródło
⊢≡1⌽⊢
.⊢
się⍕
obsługiwać oba ciągi i cyfry.Java, 21 bajtów:
l
pochodziMutableList<Character>
z kolekcji Eclipse.źródło
l
może być również CharAdapter.Kotlin ,
2819 bajtówWypróbuj online!
Pobiera dane wejściowe jako
String
ponieważWyjaśnienie
Jeśli nie podoba się fakt, że trwa
String
, można mieć jeden, który trwaInt
do 24 bajtów .źródło
Regex (ECMAScript), 31 bajtów
Wypróbuj online!
Pobiera dane wejściowe jednoargumentowe, jak zwykle w przypadku wyrażeń regularnych matematycznych (zwróć uwagę, że problem jest prosty w przypadku liczb dziesiętnych: po prostu
^(.)\1*$
).Wyjaśnienie:
źródło
PHP, 30 bajtów
źródło
Neim , 1 bajt
Po prostu sprawdza, czy wszystkie elementy są równe.
Bez wbudowanego 2 bajty:
Wyjaśnienie:
To działa, ponieważ tylko
1
w Neim jest uważane za prawdziwe, a wszystko inne jest fałszem.Alternatywnie, dla 4 bajtów:
Wyjaśnienie:
Spróbuj!
źródło
C, 38 bajtów
Rekurencyjnie chodzi po sznurku. Jeśli pierwsze dwa znaki różnią się (
*s^s[1]
), to odniesiemy sukces tylko wtedy, gdy znajdziemy się na końcu ciągu (!s[1]
), w przeciwnym razie powtórzymy test na następnej pozycji (f(s+1)
).Program testowy
źródło
Java,
383323 bajtyn
jestString
oczywiście.Zauważ, że nie ma potrzeby
^...$
wyrażenia regularnego, ponieważ jest ono automatycznie używane do dokładnego dopasowania (takiego jakmatch
metoda), w porównaniu do znalezienia w ciągu.Spróbuj!
Oszczędza
String
ponieważ „Możesz bezkarnie pobierać i wykorzystywać dane wejściowe jako ciąg znaków”.źródło
matches
nie jest wymagane,^$
ponieważ pasuje do całego ciągu. A więc zdecydowana +1 ode mnie. ;)R, 25 bajtów
Wypróbuj online
Najlepsze rozwiązanie nieregexowe, jakie mogłem wymyślić, to 36 bajtów:
źródło
rle(charToRaw(scan(,'')))$v[2]<1
Cubix , 15 bajtów
Wypróbuj online!
Watch It Run
Wyjście 1 dla prawdy i nic dla falsey
Bardzo prosty odczyt czyta z wejścia po jednym znaku na raz. Odciąga obecną postać od poprzedniej. Jeżeli wynik jest niezerowy, natychmiast się zatrzymuje. W przeciwnym razie kontynuuje wprowadzanie i porównywanie do EOI. Na EOI (-1) zaneguj i wyjdź
źródło
QBasic 4.5, 55 bajtów
Dopasowałem to! Pętla FOR sprawdza liczbę cyfr na wejściu, a następnie tworzy
c
, która jest ciągiem 1 długości równej wejściowej. Liczba jest następnie reprodukowana, jeśli moduluje jeden ciąg == 0.Wypróbuj online! Zauważ, że interpreter online jest nieco dziwaczny i musiałem napisać kilka stwierdzeń, że oparte na DOS QBasic IDE rozszerzy się automatycznie.
źródło