1 대 3만큼 쉬운


35

양의 정수를받는 프로그램이나 함수를 작성하십시오. 입력이 유효하다고 가정하고 문자열로 사용할 수 있습니다. 숫자가

123
234
345
456
567
678
789

그런 다음 진실한 가치 를 산출하십시오 . 그렇지 않으면 거짓 값을 출력하십시오 . 예를 들어, 입력

1
2
3
12
122
124
132
321
457
777
890
900
1011
1230
1234

모두 잘못된 결과를 초래해야합니다. (입력에는 선행 0이 없으므로 다음과 같은 것에 대해 걱정할 필요가 없습니다 012.)

바이트 단위의 가장 짧은 코드가 이깁니다.


아, 문자열이 허용됩니까? 숫자 배열은 어떻습니까?
Dennis

@Dennis No. 일반 문자열이나 일반 정수로 유지합시다.
Calvin 's Hobbies

6
문자열 입력을 받으면 처리해야 012합니까?
Lynn

1
@Lynn No. 012는 거짓이지만 입력되지 않았다고 가정 할 수 있습니다.
Calvin 's Hobbies

1
BradGilbertb2gills 번호 @ 단지의 연결 정의를 만족시켜야한다 truthy / falsy - meta.codegolf.stackexchange.com/questions/2190/...
칼빈의 취미

답변:


46

파이썬, 24 바이트

range(123,790,111).count

0 또는 1을 출력하는 익명 함수로, 목록을 작성 [123, 234, 345, 456, 567, 678, 789]하고 입력이 몇 번 표시되는지 계산합니다.

f=range(123,790,111).count

f(123)
=> 1
f(258)
=> 0

123 대신 12에서 시작하여 바이트를 제거 할 수 없습니까?
var firstName

1
12를 포함 할 필요는 없습니다.
xnor

그러나 우리는 그것이 입력되지 않을 것이라고 가정 할 수 있습니까? 혼란스러워
var firstName 1

1
의견에 대해 이야기하고 있다면, 입력 한 문자열 (이것이 아닌)로 숫자를 입력하면 숫자에 선행 0이 없을 것으로 기대할 수 있으므로 12는 "12"로 표시되고 " 012 ".
xnor

34

파이썬, 24 바이트

lambda n:n%111==12<n<900

많은 조건 체인.


내가 이미 알고있는 언어를 쉽게 능가하는 범위를 비교할 수 있습니다. 어떻게 작동하는지 확인 하기 위해 찾아야 했습니다.
GuitarPicker

와우, 그것이 단어 lambda가 아니라면 나는 그것이 파이썬이라고 추측조차하지 않았을 것입니다. 끔찍하다.
Steve Bennett

25

하스켈, 22 바이트

(`elem`[123,234..789])

익명의 기능. 균등 간격 목록을 생성하고 [123, 234, 345, 456, 567, 678, 789]입력이 요소인지 확인합니다.


1
안돼! 마법이다!
YSC



8

Brain-Flak 76 + 3 = 79 바이트

이 답변의 골프 인 대답. 나는 실제로 내 대답이 어떻게 작동하는지 잘 모르겠지만 DJMcMayhem은 그의 원래 대답에 좋은 설명을 제공하며 내 대답은 그의 수정입니다.

([]<>)<>({}[({})]<>)<>(({}[({})()()()()()]<>{}{}<(())>)){{}{}(((<{}>)))}{}{}

3 바이트를 추가하는 -a ascii 플래그로 실행됩니다.

설명 (정렬)

원래 작업 솔루션으로 시작 :

([]<>)<>({}[({})]<>)<>({}[({})]<>)({}{}[()()])({}<({}[()()()])>)(({}{}<(())>)){{}{}(((<{}>)))}{}{}

나는 내가 작성한 간단한 골프 알고리즘을 통해 이것을 실행하고 얻는다 :

([]<>)<>({}[({})]<>)<>(({}[({})]<>{}[()()]<({}[()()()])>{}<(())>)){{}{}(((<{}>)))}{}{}

여기에서 나는 <({}[()()()])>{}이것이 {}[()()()]전체 코드를 줄이는 것과 동등한 섹션을 본질적으로 곱하는 부분을 ​​본다 :

([]<>)<>({}[({})]<>)<>(({}[({})]<>{}[()()]{}[()()()]<(())>)){{}{}(((<{}>)))}{}{}

마지막으로 네거티브를 결합 할 수 있습니다.

([]<>)<>({}[({})]<>)<>(({}[({})()()()()()]<>{}{}<(())>)){{}{}(((<{}>)))}{}{}

14
"실제로 내 대답이 어떻게 작동하는지 잘 모르겠습니다" 인터넷에서 승리
Leaky Nun


@LeakyNun Ascii 모드가 작동한다고 생각하지 않습니다. github 버전을 얻어야 할 것입니다.
밀 마법사

1
@WheatWizard ASCII 모드는 TIO에서 작동합니다. 스택 맨 위에 48 ( '0')을 추가하여 이를 확인할 수 있습니다 . 누수가 맞습니다. 알고리즘 ( 알고리즘)이 잘못되었습니다. 차이의 합이 2인지 확인하기 때문에 (차이가 +3 및 -1이면 작동합니다). 불행히도, 우리의 대답 모두 잘못되었습니다.
DJMcMayhem

1
@WheatWizard이 답변은 유효하지 않습니다. 온라인으로 사용해보십시오! (내 원래의 대답도 아니었다)
DJMcMayhem


7

젤리 , 6 바이트

DI⁼1,1

온라인으로 사용해보십시오! 또는 모든 테스트 사례를 확인하십시오 .

작동 원리

DI⁼1,1  Main link. Argument: n (integer)

D       Decimal; convert n to base 10.
 I      Increments; compute the differences of all pairs of adjacent digits.
   1,1  Yield [1, 1].
  ⁼     Test the results to both sides for equality.

실제로 아무것도 반환하지 않지만 012 ..., 거짓을 반환하지 않습니다
제이미 바커에게

입력은 정수 여야합니다. 지금까지로 ast.literal_eval우려, 012정수를 대표하지 않습니다 .
Dennis


6

MATL , 8 바이트

d1=tn2=*

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

이것은 MATL에서는 거짓이기 때문에 1 1정확한 입력을 위해, 그리고 0잘못된 값을 위해 그 안에 배열을 인쇄 합니다 .

설명:

d           % Calculate the difference between consecutive digits
 1=         % Push an array of which elements equal one
   t        % Duplicate this array
    n       % Push the length of this array
     2=     % Push a one if the length is 2, and a zero otherwise
            % Now, if we have a truthy input, the stack looks like:
            %   [1 1]
            %   1
            % And if we have a falsy input, the stack looks something like this:
            %   [1 0]
            %   1
            % Or this:
            %   [1 1]
            %   0
       *    % Multiply the top two elements

아마 d1=Ep4=(나는 철저히 테스트하지 않았습니다)
Luis Mendo

1
또는 dTTX=5 바이트
Luis Mendo

트윗 담아 가기 어떻게 작동합니까? 나는에 대한 문서를 찾을 수 없습니다T
DJMcMayhem

T리터럴은 true하고 F있다 false. 이웃 TF함께 스틱하는 것은 너무 TT하다 [true true]이러한 목적에 해당하는 [1 1]. 사양
Luis Mendo

6

자바 7, 46 바이트

boolean f(int a){return a>12&a<790&a%111==12;}

Leaky Nun과의 대화에서 몇 가지 시도를 한 후에 가장 짧은 것 같습니다. 때때로 당신은 단지 간단한 방법으로 일을해야합니다 : /

설명:

boolean f(int a){
    return a>12         Is it more than 12? (stupid edge case)
           &
           a<790        Is it in range the other way? 
           &
           a%111==12;   Is it 12 more than a multiple of 111? 
}

6

펄 6 ,  35 29 24 21  19 바이트

{.chars==3&&'0123456789'.index: $_}
{$_ (elem) (123,*+111...789)}
{$_∈(123,*+111...789)}
*∈(123,*+111...789)
*∈(123,234...789)

설명:

# Whatever lambda ( the parameter is 「*」 )
*

 # is it an element of:

# this sequence
(
  123,
  234,

  # deduce rest of sequence
  ...

  # stop when you generate this value
  789
)

용법:

my &code = *∈(123,234...789);

say code 123; # True
say code 472; # False

say (  *∈(123,234...789)  )( 789 ); # True


5

루비, 32 30 25 + 2 = 27 바이트

-nl플래그의 경우 +2 바이트

STDIN 및 지문의 입력을 받아 truefalse.

p"123456789"[$_]&.size==3

repl.it에서 참조하십시오 : https://repl.it/DBn2/2 (▶ ️을 클릭하고 아래 콘솔에 입력을 입력하십시오.)


귀하의 테스트는 12가 사실임을 보여줍니다.
xnor

@xnor 죄송합니다. 그것은 취침 후 골프를 가르쳐 줄 것입니다. 결정된!
Jordan

I의 생각은 -a수행 split하지 chop? 또한 무엇을 &합니까? 오류가 발생하는 오래된 Ruby를 사용하고 있습니다. 어쨌든 26 바이트없이 완벽하게 작동합니다.
xsot

아차, 나는 의미 -l하지 -a. &.Ruby 2.3에 추가 된 "안전한 탐색"연산자입니다. 19그렇지 않으면 if 과 같은 문자열 "123456789"이 아닌와 같은 입력이 없으면 NoMethodError가 발생합니다.
Jordan

@Jordan 2.2에서 오류가 발생하지 않습니다. 어쩌면 2.3의 새로운 것입니까?
xsot

5

Brain-Flak , 99 바이트

([{}]({})<>)<>([{}]{}<>)(({})<([{}]{})((){[()](<{}>)}{})>)([{}]{})((){[()](<{}>)}{})<>{{{}}<>{}}<>

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

이 코드의 98 바이트 +1에 대한 -a플래그.

이것은 1진실을 위해 인쇄 하고, 거짓에 0대해서는 (0과 동일) 아무것도 인쇄 하지 않습니다.


푸시 팝 비 효율성을 제거하십시오. 코드에서 무리를 볼 수 있습니다. 모양은 ...)({}다르지만 다릅니다. 값을 사용하지 않고 밀고 튀기면 한 가지로 압축 할 수 있습니다. 원하는 경우이 모든 코드를 사용하여 코드 버전에 연결할 수 있습니다.
위트 마법사

여기 내 프로그램의 76 바이트 골프가 있습니다. 몇 가지 사용자 지정 설정을 사용하여 코드에서 두뇌 최적화 알고리즘을 거의 실행했습니다.
밀 마법사


4

Brain-Flak , 114 바이트

([((()()()){}){}]{})(((()()()){}())<>)<>{({}<(({}[(((((()()()){}()){}){}){}){}]())){(<{}>)<>({}[()])<>}{}>[()])}<>

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

올바른 버전 (질문의 정신) : 정수를 입력으로 사용하고, 거짓은 0을 출력하고, 진실은 1을 출력합니다.

입니다 하지 스택 청소.

연산

입력을 시키십시오 n.

결과물은 진실 (n-123)(n-234)(n-345)(n-456)(n-567)(n-678)(n-789)=0입니다.

먼저 12를 빼고 111을 7 번 빼서 7 개의 숫자를 계산 한 다음 7 개의 숫자의 논리적 이중 -NOT를 계산하여 더했습니다.

진실한 결과의 합은 6입니다. 잘못된 결과의 경우 합계는 7입니다.

그런 다음 7에서 합계를 빼고 답을 출력합니다.


코드를 이해하지 못하지만 알고리즘은 영리하므로 +1이 있습니다.
Cyoce

4

R, 30 22 바이트

scan()%in%(12+1:7*111)

특별히 흥미롭지 않은; 체크 k는 1 내지 7 참고 각 여기서 입력 + 111K (12)에 의해 주어진 순서에 있으면 :선행를 *시퀀스를 생성 한 후, 승산이 발생되도록.


4

C # (Visual C # 대화 형 컴파일러) , 41 30 23 바이트

첫 번째 코드 골프 제출, 부드럽게 :)

a=>{return a>12&&a<790?a%111==12:false;};
a=>a>12&&a<790?a%111==12:false
a=>a>12&a<790&a%111==12

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

  • Kirill L 덕분에 -11 바이트
  • ASCII 전용 덕분에 또 다른 -7 바이트.

1
PPCG에 오신 것을 환영합니다! 중괄호와 return키워드 를 삭제하여 일부 바이트를 절약 할 수 있습니다 . 30 바이트
Kirill L.


1
좋은 첫 제출!
무지의 구현

3

Brainfuck, 43 바이트

,>,>,>,[>>]<[[-<-<->>]<+[>>]<++[>>->]<+<]>.

바, 난 이거 잘 못해 출력 \x01출력 문자열 중 하나 인 경우 123, 234, ... 789; 출력\x00그렇지 않으면 합니다.

(하지만 Java 7을 이겼습니다 ...)

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


요점이 [>>]<뭐야? 그럴 수 >없습니까?
DJMcMayhem

포인터 아래의 셀 그 시점에서 0 이 아닌 경우 프로그램을 실패하게 만들려고합니다 (트랙을 벗어 버림) .
Lynn


@LeakyNun 완전히 다르게 보입니다. 별도의 답변으로 자유롭게 게시하십시오
Lynn

@ 린 .
Leaky Nun

3

자바 스크립트 ES6, 26 바이트

n=>1>(n-12)%111&n>99&n<790

이것은 본질적으로 부울 (비트 기반)에 비트 단위 논리 연산자를 사용한다는 사실을 이용합니다.

2를 저장해 준 Titus에게 감사합니다.


1
두 바이트 : (n-12)n>99
디도

@Titus 아, 아주 좋은 +1 당신에게!
WallyWest

1
=>는 ES5가 아니라 ES6입니다.
Neil

1
"f ="이 26 바이트를 만드는 것입니다
Charlie Wynn

1
@WallyWest 모든 경우에 함수를 사용하기 위해 "f ="가 필요하지 않기 때문에 이것이 필요한 이유라고 생각합니다. 사람들이 나보다 현명하다고 생각해서 괜찮습니다.;)
Charlie Wynn

3

엑셀 -62 57 35 31 bytes

Anastasiya-Romanova의 답변을 기반으로하지만 Excel의 TRUE/FALSE값을 반환 합니다.

=AND(LEN(N)=3,MID(N,2,1)-MID(N,1,1)=1,MID(N,3,1)-MID(N,2,1)=1)

더 나아가서

=AND(LEN(N)=3,MID(N,2,1)-LEFT(N)=1,RIGHT(N)-MID(N,2,1)=1)

모두 이후 RIGHTLEFT 기본적으로 하나의 문자를 반환합니다.

그리고 일부 Python 솔루션에서 영감을 얻었습니다.

=AND(LEN(N)=3,MOD(N,111)=12,N<>900)

4 바이트를 더한 Neil 덕분에 ...

=AND(N>99,MOD(N,111)=12,N<900)

N<900바이트를 저장 하지 않으므로이 N>99대신 대신 사용할 수도 있습니다 LEN(N)=3.
Neil

1
21 바이트 : =REPT(LEFT(N),3)+12=N여기서 N참조 셀의 이름입니다.
엔지니어 토스트

3

Brachylog (2), 7 바이트

ẹ~⟦₂-_2

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

설명

ẹ~⟦₂-_2
ẹ        Split into digits
 ~⟦₂     Assert that this is an increasing range; take its endpoints
    -_2  Assert that the starting minus ending endpoint is -2

완전한 프로그램으로서, 우리는 모든 주장이 성립되면 진실한 귀환을, 실패하면 허위 귀환을받습니다.



2

엑셀-104 바이트

=IF(LEN(N)<3,"Falsy",IF(AND(LEN(N)=3,MID(N,2,1)-MID(N,1,1)=1,MID(N,3,1)-MID(N,2,1)=1),"Truthy","Falsy"))

설명:

Excel에서 IF 수식의 구문은 다음과 같습니다.

IF( condition, [value_if_true], [value_if_false] )

N참조 셀의 이름 인 input의 길이 가 3보다 작 으면 Falsy 를 반환 합니다 . 그렇지 않으면 입력 길이 N가 3이고 두 번째 숫자와 첫 번째 숫자의 차이와 세 번째 숫자와 두 번째 숫자의 차이가 모두 1이면 Truthy 를 반환 합니다 .


21 바이트 : =REPT(LEFT(N),3)+12=N여기서 N참조 셀의 이름입니다.
엔지니어 토스트

2

Dyalog APL , 10 바이트

문자열 인수를 취합니다.

1 1≡¯2-/⍎¨

1 1≡ {1, 1}은 (는)

¯2-/ 반전 된 쌍별 차이

⍎¨ 각 문자는 숫자로?

TryAPL 온라인! ( 보안상의 이유로 에뮬레이션되었습니다 e.)


2

펄, 18 바이트

에 +1 포함 -p

STDIN의 입력으로 실행

123.pl <<< 123

123.pl:

#!/usr/bin/perl -p
$_=$_=/./.2==$_-$&x3

2

PHP, 31 바이트

<?=($n=$_GET[n])-12==$n[0]*111;

(숫자 -12)의 첫 번째 숫자가 111의 배수인지 확인하십시오


2

PowerShell v3 +, 24 바이트

($args[0]-12)/111-in1..7

다른 답변 동일한 "111 + 12의 배수" 트릭을 사용하지만 다른 방향으로 진행합니다. 입력을 받고 $args[0], 빼고 12, 나누고 , 범위 111인지 확인합니다 . 부울 참 / 거짓 값을 출력합니다. 연산자 에는 v3 +가 필요합니다 .-in1..7-in

테스트 사례

PS C:\Tools\Scripts\golfing> 123,234,345,456,567,678,789|%{.\easy-as-one-two-three.ps1 $_}
True
True
True
True
True
True
True

PS C:\Tools\Scripts\golfing> 1,2,3,12,122,124,132,321,457,777,890,900,1011,1230,1234|%{.\easy-as-one-two-three.ps1 $_}
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False

2

ARM 머신 코드, 18 바이트

16 진 덤프 (little endian) :

3803 d105 6808 ebc0 2010 b280 f2a0 1001 4770

문자열의 길이, 포인터 쌍을 취하는 함수입니다. 출력은 bash 스타일이며, 0은 true이고 0이 아닌 값은 false입니다. C에서 함수는 int oneTwoThree (size_t length, char * string)로 선언됩니다. 명령어 인코딩은 thumb-2이며 2와 4 바이트 명령어가 있습니다. 라즈베리 파이 3에서 테스트되었습니다.

언 골프 조립 :

.syntax unified
.text
.global oneTwoThree
.thumb_func
oneTwoThree:
    @Input: r0 - the number of characters in the string
    @r1 - A pointer to the (not necessarily NUL-terminated)
    @string representation of the number (char*)
    @Output: r1 - 0 if the number is in 123,234,...,789, else non-zero (bash-style)
    subs r0,r0,#3
    bne end @Return non-zero if r0!=3
    ldr r0,[r1] @Remember that this is little endian
    @So the first digit is the most siginificant byte
    @I.e. if the input was 123 then r0 contains 0xXY010203 where XY is garbage

    rsb r0,r0,r0,lsr #8 @r0=(r0>>8)-r0 (rsb is reverse subtract)
    uxth r0,r0 @r0&=((1<<16)-1) (mask off top half)
    @Now r0 is 0x0101 iff we have a matching number
    sub r0,r0,#0x101
    @Now r0 is 0 iff the string fit the specification

    end:
    bx lr @return

테스트 스크립트 (또한 어셈블리) :

.syntax unified
.text
.global main
.thumb_func
main:
    push {r4,lr}
    ldr r4,[r1,#4] @r0=argv[1]
    mov r0,r4
    bl strlen
    @Now r0 is the length of the string argv[1]
    mov r1,r4
    bl oneTwoThree @oneTwoThree(strlen(argv[1]),argv[1])
    cmp r0,#0
    it ne
    movne r0,#1 @Output through return code, 1 if false
    pop {r4,pc}

2

자바 스크립트 (ES6), 34 바이트

그리고 JS의 또 다른 옵션. 문자열로 출력으로서 입력을 받아 0false1true.

n=>++n[0]==n[1]&++n[1]==n[2]&!n[3]

여기여기에 내 다른 솔루션을 참조 하십시오


시도 해봐

f=
n=>++n[0]==n[1]&++n[1]==n[2]&!n[3]
i.addEventListener("input",_=>o.innerText=f(i.value))
<input id=i type=number><pre id=o>

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