이 번호는 담당자입니까?


33

도전

렙 디지트는 그 자리 모두 동일한 음이 아닌 정수이다.

입력 값으로 단일 정수를 사용하고 입력 번호가 10 진법의 정수이면 틀린 값을 출력하고 그렇지 않으면 거짓 값을 출력하는 함수 또는 완전한 프로그램을 작성하십시오.

입력은 양의 정수 여야합니다 .

10 진법에서 입력 값을 불완전하게 사용하여 문자열 표현으로 사용할 수 있습니다.

테스트 사례

이들은 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

더 큰 목록은 OEIS 에서 찾을 수 있습니다 .

승리

바이트 단위의 가장 짧은 코드가 이깁니다. 장황한 언어로 된 영리한 답변은 환영받지 못할 것입니다.



@ AidanF.Pierce 입력이 가장 큰 숫자는 무엇입니까?
stevefestl

답변:



19

C (gcc) , 33 30 29 바이트

f(n){n=n%100%11?9/n:f(n/10);}

온라인으로 사용해보십시오!


대신 재귀와 대입을 사용하는 아주 좋은 트릭입니다 return(내 대답을 위해 후자를 훔칠 것입니다 :)).
Doorknob

@Doorknob 계속 진행하십시오. :) 그래도 컴파일러를 지정해야합니다. 나는 이것이 거의 gcc / tcc 일 것으로 기대합니다.
Dennis

gcc with -O0가 최종 결과를 n정확하게 eax작성하여 반환 값으로 만들 것이라는 것을 미리 알고 있습니까? 왜 작동하는지 알고있는 논리를 자세히 설명해 주시겠습니까?
Ruslan

@Ruslan gcc가 이런 식으로 작동 하는지 잘 모르겠지만 함수 내부의 마지막 변수 할당은 eax에서 더 자주 발생합니다. 추측해야한다면, 그것이 return nnop 일 수 있기 때문이라고 말하고 결과를 반환하지 않을 경우 함수 끝에 로컬 변수를 할당 할 이유가 없습니다.
Dennis

9

코볼 , 139 바이트

COBOL이 코드 골프를 좋아하지 않는 것 같습니다 (아마도 이길 수있는 방법이 없기 때문에).

IF A = ALL '1' OR ALL '2' OR ALL '3' OR ALL '4' OR ALL '5' OR
ALL '6' OR ALL '7' OR ALL '8' OR ALL '9' DISPLAY "TRUE" ELSE   
DISPLAY "FALSE".

A는 PIC 9 (4)로 정의됩니다.


2
변경하여 할 수 있습니다 골프 이것을 TRUE하고 FALSE각각 1과 0
coinheringaahing 케어 드


6

파이썬 3, 25, 24 19 바이트

len({*input()})>1>t

stdin => 오류 코드 변형

비밀번호가 0이거나 오류 인 경우 오류 코드 0을 반환합니다.

의견에 도움을 주신 Dennis에게 감사합니다.


종료 코드 0 은 성공을 나타내 므로 테스트 >1보다는 테스트해야한다고 생각합니다 <2. 실제 오류를 발생시키는 것은 exitbtw를 사용하는 것보다 짧습니다 .
Dennis

나는 그것에 대해 궁금했다. 도전은 "진실한 가치"라고 말합니다. 오류를 발생시키기 위해 변경하겠습니다.
Shadow

1
예, if python3 repdigit.py; then echo truthy; else echo falsy; fi정의에 따라 작동해야하므로 0 은 진실이며 다른 모든 것은 거짓입니다.
Dennis

말이 되네요 좋아, 나는 그 변화도 할 것이다.
Shadow

2
@ Arc676 단항 *은 iterable을 압축 해제합니다. 예를 들어 {*'123'}set을 생성합니다 {'1','2','3'}.
Dennis

6

Mathematica, 27 바이트

AtomQ@Log10[9#/#~Mod~10+1]&

이길 수 없다 Equal@@IntegerDigits@#& 뛰지 않지만 다른 산술 기반 Mathematica 솔루션보다 낫습니다.

반복 숫자는 n = d (10 m -1) / 9 형식 이며 여기서 m 은 자릿수이고 d 는 반복 자릿수입니다. 우리는 n 을 모듈로 10으로 가져 와서 n 에서 d 를 복구 할 수 있습니다 (반환 숫자 인 경우 마지막 숫자는 d입니다 ). 따라서 우리는 이것을 m = log 10 (9 n / (n % 10) + 1) 로 재 배열 하고 m 이 정수 인지 확인할 수 있습니다.


5

하스켈 , 15 바이트

all=<<(==).head

온라인으로 사용해보십시오! 문자열 입력을받습니다.

에 해당합니다 \s->all(==head s)s. 대안을 획기적으로 능가합니다.

f s=all(==s!!0)s
f s=s==(s!!0<$s)
f(h:t)=all(==h)t
f(h:t)=(h<$t)==t
f s=(s<*s)==(s*>s)
f(h:t)=h:t==t++[h]

f s=(s<*s)==(s*>s)매우 흥미로운 아이디어입니다. 저는 <*이전 에이 동작을 알지 못했습니다 .
Laikoni

5

C (gcc), 41 바이트

f(char*s){s=!s[strspn(s,s+strlen(s)-1)];}

이 함수는 입력을 문자열로 가져 와서 다른 1숫자이면 반환 합니다 0.

strspn두 개의 문자열을 사용하고 두 번째 문자열의 문자로만 구성된 첫 번째 문자열의 가장 긴 접두사 길이를 반환 하는 함수 를 사용하여 이를 수행합니다. 여기서 첫 번째 문자열은 입력이고 두 번째 문자열은 입력 문자열의 마지막 문자에 대한 포인터를 전달하여 얻은 마지막 숫자입니다.

입력 값이 repdigit 인 경우 호출 결과 strspn는입니다 strlen(s). 그런 다음 s이 경우 ( str[strlen(str)]항상 \0) 또는 마지막 숫자와 일치하지 않는 첫 번째 숫자 인 경우 인덱싱 은 null 바이트를 반환합니다 . 이것을 부정 !여부 결과s 음수로 바꾸면 대표 숫자를 나타내는 나타납니다.

온라인으로 사용해보십시오!

@Dennis에게 4 바이트를 절약 하면서 그의 인상적인 답변 을 통해 대가 대신 할당 트릭을 간접적으로 상기시켜 주셔서 감사 합니다!


다음 strlen과 같이 새 문자열을 피하고 작성 하여이 길이를 조금 더 줄일 수 있습니다 *s: c;f(char*s){c=*s;c=!s[strspn(s,&c)];}for 37.
hvd

5

PHP, 25 28 25

<?=!chop($argn,$argn[0]);

오른쪽에서 첫 번째 1문자 와 동일한 문자를 모두 제거하고 모든 문자가 제거 된 경우 인쇄 하십시오.


5

R, 31 바이트

function(x)grepl("^(.)\\1*$",x)

이 함수는 문자열 입력과 함께 작동하며 정규식을 사용하여 입력이 repdigit인지 확인합니다.

> f <- function(x)grepl("^(.)\\1*$",x)
> x <- c("1", "2", "11", "12", "100", "121", "333")
> f(x)
[1]  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE

주사를 사용하여 ( '')에 tio.run/##K/r/P70otSBHQylOQ08zJsZQS0VJpzg5MU9DR11dU/O/paXlfwA 함수 (X)로 전환하여 28 바이트
Sumner18

5

/// , 110 바이트

/11/1//22/2//33/3//44/4//55/5//66/6//77/7//88/8//99/9//1/.//2/.//3/.//4/.//5/.//6/.//7/.//8/.//9/.//T..///.//T

온라인으로 사용해보십시오!

/// 언어는 진실과 거짓의 개념을 가지고 있지 않기 때문에 입력이 repdigit이면 "T"를 출력하고 입력이 repdigit가 아닌 경우 문자를 출력하지 않습니다.



4

옥타브 , 11 바이트

@(s)s==s(1)

온라인으로 사용해보십시오!

입력을 문자열로 사용합니다.

모든 문자가 첫 번째 문자와 동일한 지 확인합니다. 모두 같으면 결과는 1(옥타브에서는 참) 만있는 벡터가되고 , 그렇지 않으면 적어도 하나 0는 옥타브에서는 거짓이됩니다. 여기에 증거가 있습니다.


all(...)진실 / 거짓 값 출력을 얻기 위해 랩핑 할 필요가 없습니까?
Tom Carpenter

증거를 테스트 했습니까? 이 코드는 ppcg에서 true / false의 정의 (메타 컨센서스)입니다.
Stewie Griffin

4

grep, 17 바이트

grep -xP '(.)\1*'

첫 번째 문자를 반복하는 문자열과 일치합니다.


4

C #, 42 33 28 바이트

i=>i.Replace(i[0]+"","")==""

i 문자열이어야합니다.

@LethalCoder 덕분에 많이 삭감되었습니다.


2
i[0].ToString()단축 할 수있다 i[0]+"", <1보다 짧은 ==0.
TheLethalCoder

1
또한 .Length<1단지가 될 수==""
TheLethalCoder

3

Braingolf , 6 바이트

iul1-n

온라인으로 사용해보십시오!

불행히도 커맨드 라인 인수에서 Braingolf의 암시 적 입력은 모든 숫자 입력을 문자열로 받아 들일 수 없으며 항상 숫자로 캐스트하므로 솔루션은 STDIN을 통해 전달하여 STDIN을 읽기 위해 1 바이트를 추가합니다 (i )

설명:

iul1-n
i       Read from STDIN as string, push each codepoint to stack
 u      Remove duplicates from stack
  l     Push length of stack
   1-   Subtract 1
     n  Boolean negate, replace each item on stack with 1 if it is a python falsey value
        replace each item on stack with 0 if it is a python truthy value
        Implicit output of last item on stack

이후 u스택의 길이는 입력의 고유 문자 수와 동일하며, 1을 빼면 입력에 고유 문자 0가 정확히 하나만있는 경우 0에만 파이썬에서 유일한 잘못된 숫자이므로으로 n대체 0됩니다 1. 와 다른 모든 것 0.



3

자바 스크립트 (ES6), 23 21 바이트

Neil 덕분에 2 바이트 절약

입력을 정수 또는 문자열로 취합니다. 부울을 반환합니다.

n=>/^(.)\1*$/.test(n)

데모


2 바이트 저장 test대신 사용 하지 !!exec않습니까?
Neil

(문자열 전용 입력의 경우 PHP 답변을 포팅하는 것이 훨씬 짧습니다.)
Neil

@ 닐 내가 무슨 생각을했는지 모르겠다. 감사!
Arnauld

3

, 4 바이트

Ul2<

온라인으로 사용해보십시오!

설명

 Ul2<
 U    # Push uniquified input
  l   # Length
   2< # Is it smaller than 2?

나는 Ul≤작동해야 한다고 생각 합니다.
Christoph

@Christoph Yee 나는 그것을 가지고 있었지만 0이 진실한 가치로 간주되는지 확실하지 않았습니다. (이 codegolf에 새로운 점 ^^)
Datboi

아 젠장, 0거짓이고 다른 모든 숫자는 진실이다. 방금 우리는이 도전에 대해 정반대가 필요하다는 것을 깨달았습니다. Truthy는 "브렌치가 필요합니다"로 정의됩니다.
Christoph

Ul1E0을 처리 할 필요가 없기 때문에 (옴을 모르지만) 작동해야합니다.
Esolanging Fruit

3

APL, 5 바이트

@KritixiLithos 덕분에 2 바이트 절약

⍕≡1⌽⍕

온라인으로 사용해보십시오!


train을 사용하여 7 바이트 솔루션을 5 바이트로 골프화 할 수 있습니다 ⊢≡1⌽⊢.
Kritixi Lithos

@KritixiLithos 감사합니다!
Uriel

교체 문자열과 숫자를 모두 처리하는.
Adám

@ Adám 감사합니다! 숫자 배열을 얻는 방법으로 서식을 생각하지 않았습니다.
Uriel

3

자바, 21 바이트 :

l->l.toSet().size()<2

lA는 MutableList<Character>이클립스 컬렉션에서.


1
lCharAdapter 일 수도 있습니다.
Donald Raab

@ DonaldRaab oooh, 나는 그 클래스를 본 적이 없다. 좋은 발견.
Nathan Merrill

CodePointAdapter 및 CodePointList도 있습니다.
Donald Raab

1
@DonaldRaab 나는 이클립스 컬렉션을 꽤 많이 사용하지만 항상 표준 List / Map / Set 컬렉션 이외의 것을 찾으려고 노력합니다. 귀하의 지식은 라이브러리의 개발에 기초하고 있습니까, 아니면 EC가 제공하는 모든 것에 대해 더 나은 참조를 찾을 수있는 곳 (javadoc 이외)이 있습니까?
Nathan Merrill

그것을 듣고 기뻐. 나는 프레임 워크의 커미터입니다 ... 나는 약 1 년 전에이 특정 문자열 관련 클래스를 썼습니다. 많은 사람들이 모르는 참조 안내서가 있습니다. 사람들이 라이브러리의 다양한 기능을 배우고 탐색하는 데 도움이되도록 최근에 정리 한 마인드 맵이 있습니다. 참조의 TOC에있는 마지막 링크입니다. 안내서. github.com/eclipse/eclipse-collections/blob/master/docs/…
Donald Raab

3

코 틀린 , 28 19 바이트

{it.toSet().size<2}

온라인으로 사용해보십시오!

입력으로 String인해

10 진법에서 입력 값을 불완전하게 사용하여 문자열 표현으로 사용할 수 있습니다.

설명

{
    it.toSet()     // create a Set (collection with only unique entries)
                   // out of the characters of this string
        .size < 2  // not a repdigit if the set only has one entry
}

당신이이 걸리는 사실 마음에 들지 않으면 String, 당신은 소요 한 수 Int를위한 24 바이트 .

{(""+it).toSet().size<2}

3

정규식 (ECMAScript), 31 바이트

^(x{0,9})((x+)\3{8}(?=\3$)\1)*$

온라인으로 사용해보십시오!

수학 정규 표현식에서 평소와 같이 단항으로 입력을 ^(.)\1*$받습니다 ( 소수점 입력 : just ).

설명:

^(x{0,9})           # \1 = candidate digit, N -= \1
(                   # Loop the following:
  (x+)\3{8}(?=\3$)  # N /= 10 (fails and backtracks if N isn’t a multiple of 10)
  \1                # N -= \1
)* $                # End loop, assert N = 0


@Deadcode Whoops 나는 그것을 넣는 것을 잊었다. 감사합니다!
그리미

2

PHP, 30 바이트

<?=($a=$argn).$a[0]==$a[0].$a;

@Dada No. It will compare 4344 and 4434.
user63956

Oh right, my bad. thanks
Dada

2

Neim, 1 byte

𝐐

Simply checks that all elements are equal.

Without builtin, 2 bytes:

𝐮𝐥

Explanation:

𝐮     Calculate unique digits
 𝐥    Get the length

This works because only 1 is considered truthy in Neim, and everything else is falsy.

Alternatively, for 4 bytes:

𝐮𝐣μ𝕃

Explanation:

𝐮      Calculate unique digits
 𝐣      Join list into an integer
   𝕃   Check that is is less than
  μ    Ten.

Try it!


2

C, 38 bytes

f(char*s){return*s^s[1]?!s[1]:f(s+1);}

Recursively walks a string. If the first two characters differ (*s^s[1]) then we succeed only if we're at the end of the string (!s[1]) otherwise we repeat the test at the next position (f(s+1)).

Test program

#include <stdio.h>
int main(int argc, char **argv)
{
    while (*++argv)
        printf("%s: %s\n", *argv, f(*argv)?"yes":"no");
}

2

Java, 38 33 23 bytes

n->n.matches("(.)\\1*")

n is a String, naturally.

Note that there is no need for ^...$ in the regex since it's automatically used for exact matching (such as the match method), compared to finding in the string.

Try it!

Saves

  • -5 bytes: used String since "You may take and use input as a string with impunity."
  • -10 bytes: regex is apparently a good fit.

Was about to post this exact solution, including the explanation about the matches not requiring ^$ because it matches the entire String. So a definite +1 from me. ;)
Kevin Cruijssen

2

R, 25 bytes

grepl("^(.)\\1*$",scan())

Try it online

Best non-regex solution I could come up with was 36 bytes:

is.na(unique(el(strsplit(x,"")))[2])

1
for another option on the non-regex rle(charToRaw(scan(,'')))$v[2]<1
MickyT

2

Cubix, 15 bytes

uOn@ii?-?;.$@<_

Try it online!

    u O
    n @
i i ? - ? ; . $
@ < _ . . . . .
    . .
    . .

Watch It Run

Outputs 1 for truthy and nothing for falsey

Very simply read reads in the input one character at a time. It takes the current character away from the previous. If a non zero result then it halts immediately. Otherwise it continues inputting and comparing until the EOI. On EOI (-1), negate and exit


2

QBasic 4.5, 55 bytes

INPUT a
FOR x=1TO LEN(STR$(a))
c=c*10+1
NEXT
?a MOD c=0

I've mathed it! The FOR-loop checks the number of digits in the input, then creates c, which is a series of 1's of length equal to the input. A number then is repdigit if it modulo the one-string == 0.

Try it online! Note that the online interpreter is a bit quirky and I had to write out a couple of statements that the DOS-based QBasic IDE would expand automatically.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.