내 전화 번호는 얼마나 되나요?


26

도전

Q범위에 정수가 주어지면 -(2^100) ≤ Q ≤ 2^100해당 숫자의 자릿수 (10 진)를 출력합니다.

규칙

예, 숫자를 문자열로 가져 와서 길이를 찾을 수 있습니다.

모든 수학적 기능이 허용됩니다.

어떤베이스에서든 입력을받을 수 있지만 출력은베이스 10의 숫자 길이 여야합니다.

음수에 대한 빼기 부호를 세지 마십시오. 숫자에는 소수점이 없습니다.

0은 1 자리 또는 0 자리를 가질 수 있습니다.

입력이 항상 유효한 정수라고 가정하십시오.

예

Input > Output

-45 > 2
12548026 > 8
33107638153846291829 > 20
-20000 > 5
0 > 1 or 0

승리

바이트 단위의 최단 코드가 이깁니다.

답변:


10

Brachylog , 1 바이트

l

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

다른 기본 제공 솔루션이지만이 이름은 가장 짧은 이름을 갖습니다 (누군가이 작업을 수행하는 언어를 0 바이트로 찾지 않는 한). 이것은 Brachylog 1과 Brachylog 2에서 모두 작동합니다.

이것은 함수 제출입니다 (TIO 링크에는 인터프리터가 전체 프로그램이 아닌 개별 함수를 실행하게하는 명령 행 인수가 포함되어 있습니다). 일부 그렇지 않으면 출력에 바이트를 소비해야하기 때문에 부분적으로 Brachylog의 부정적인 구문 때문에 숫자는 다소 이례적이며이 프로그램을 함수로 만들면 입력 구문에 대한 모든 잠재적 인 인수가 해결됩니다.

Brachylog의 대부분의 빌트인은 음수를 양수처럼 취급한다는 사실이 종종 귀찮았습니다. 모든 골프 언어와 관련된 트레이드 오프가 있다고 생각합니다.


이것은 내가 스크롤을 멈추는 곳입니다 ... 이것은 터무니 없습니다!
— Bogdan Alexandru

39

택시 , 1118 바이트

1 is waiting at Starchild Numerology.Go to Post Office:w 1 l 1 r 1 l.Pickup a passenger going to Chop Suey.Go to Chop Suey:n 1 r 1 l 4 r 1 l.Pickup a passenger going to Crime Lab.'-' is waiting at Writer's Depot.Go to Writer's Depot:n 1 l 3 l.Pickup a passenger going to Crime Lab.Go to Crime Lab:n 1 r 2 r 2 l.Switch to plan "n" if no one is waiting.-1 is waiting at Starchild Numerology.[n]0 is waiting at Starchild Numerology.Go to Starchild Numerology:s 1 r 1 l 1 l 2 l.Pickup a passenger going to Cyclone.Pickup a passenger going to Addition Alley.Go to Cyclone:e 1 l 2 r.[r]Pickup a passenger going to Cyclone.Pickup a passenger going to Addition Alley.Go to Zoom Zoom:n.Go to Addition Alley:w 1 l 1 r.Pickup a passenger going to Addition Alley.Go to Chop Suey:n 1 r 2 r.Switch to plan "f" if no one is waiting.Pickup a passenger going to Sunny Skies Park.Go to Sunny Skies Park:n 1 l 3 l 1 l.Go to Cyclone:n 1 l.Switch to plan "r".[f]Go to Addition Alley:n 1 l 2 l.Pickup a passenger going to The Babelfishery.Go to The Babelfishery:n 1 r 1 r.Pickup a passenger going to Post Office.Go to Post Office:n 1 l 1 r.

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

언 골프 드 :

1 is waiting at Starchild Numerology.
Go to Post Office: west 1st left 1st right 1st left.
Pickup a passenger going to Chop Suey.
Go to Chop Suey: north 1st right 1st left 4th right 1st left.
Pickup a passenger going to Crime Lab.
'-' is waiting at Writer's Depot.
Go to Writer's Depot: north 1st left 3rd left.
Pickup a passenger going to Crime Lab.
Go to Crime Lab: north 1st right 2nd right 2nd left.
Switch to plan "n" if no one is waiting.
-1 is waiting at Starchild Numerology.
[n]
0 is waiting at Starchild Numerology.
Go to Starchild Numerology: south 1st right 1st left 1st left 2nd left.
Pickup a passenger going to Cyclone.
Pickup a passenger going to Addition Alley.
Go to Cyclone: east 1st left 2nd right.
[r]
Pickup a passenger going to Cyclone.
Pickup a passenger going to Addition Alley.
Go to Zoom Zoom: north.
Go to Addition Alley: west 1st left 1st right.
Pickup a passenger going to Addition Alley.
Go to Chop Suey: north 1st right 2nd right.
Switch to plan "f" if no one is waiting.
Pickup a passenger going to Sunny Skies Park.
Go to Sunny Skies Park: north 1st left 3rd left 1st left.
Go to Cyclone: north 1st left.
Switch to plan "r".
[f]
Go to Addition Alley: north 1st left 2nd left.
Pickup a passenger going to The Babelfishery.
Go to The Babelfishery: north 1st right 1st right.
Pickup a passenger going to Post Office.
Go to Post Office: north 1st left 1st right.

설명:

Pickup the input and split it into individual characters
Pickup the value 1.
If the first character a hyphen, add -1. Otherwise, add 0.
Keep picking up characters and adding 1 until you're out.
Convert the running total to a string and print to stdout.

8
나는이 거래소에서 오랫동안이 일을 해왔지만 다음과 같은 것을 본 적이 없다
— Cup of Java

7
수가 길면 가스가 부족합니까?
— Robert Fraser

5
이것은 brainfuck보다 더 큰 brainfuck입니다.
— 오메가

1
@RobertFraser 우리 Zoom Zoom가 모든 루프에서 멈추는 이유 입니다 plan "r". 방금 10 만 자릿수까지 테스트했으며 가스가 부족하지 않았습니다. 나는 그것을 계산하지 않았지만 사용하는 가스를 지불하기에 충분한 운임이 필요하므로 모든 루프에서 탱크를 채 웁니다.
— 엔지니어 토스트

1
@CupofJava OH MY 고쉬는 어떻게 잊어 않았다 셰익스피어 .
— 엔지니어 토스트


14

dc, 3

?Zp

일반적으로 보다 일반적인 대신에 dc음수를 지정해야합니다 . 그러나이 경우 둘 중 하나를 사용할 수 있습니다. 주어진 경우 , 이것을 빈 스택에서 뺄셈으로 취급하고 던지고 나머지 숫자로 계속합니다. 따라서 결과는 다르지 않습니다._--dcdc: stack empty

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

?    # input
 Z   # measure length
  p  # print

이것이 Z기능 제출일 수는 없습니까? dc따옴표 + 이중 + 평가 연산자가있는 연결 언어이므로 임의의 코드 문자열을 재사용 할 수 있습니다.


5

05AB1E , 2 바이트

Äg

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

Ä  # Absolute value
 g # Length

Ä응? 아닙니다 þ? 충분합니다.
— Magic Octopus Urn

@ carusocomputing Ä먼저 생각 했지만 þ소수점을 처리하므로 조금 더 나을 것 같습니다.
— Riley

두 사람이 서로 2 분 이내에 2 개의 다른 2 바이트 솔루션을 만들어 낸 방법을 시원하게 생각합니다. 하나를 생각하려고합니다.
— Magic Octopus Urn

5

Alice , 16 바이트

//; 'q<)e
o!@i -

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

설명

이것에 대한 반 정도의 레이아웃을 찾는 것은 매우 까다 롭습니다. 나는 때문에 공간의 여전히 슈퍼 행복하지 않다 <하고 ;, 그러나 이것은 내가 지금 할 수있는 최선이다.

문자열 길이는 입력이 문자열이고 출력이 정수이기 때문에 Alice에 존재하지 않는 매우 일반적인 내장 기능 중 하나입니다 (모든 Alice 명령은 정수에서 정수로 또는 문자열에서 문자열로). 문자열을 서수 모드의 테이프에 쓴 다음 카디널 모드의 끝을 찾아서 길이를 측정 할 수 있습니다.

/      Reflect to SE. Switch to Ordinal. While in Ordinal mode, the IP will bounce
       diagonally up and down through the code.
!      Store an implicit empty string on the tape, does nothing.
;      Discard an implicit empty string, does nothing.
i      Read all input as a string.
'-     Push "-".
<      Set the horizontal component of the IP's direction to west, so we're bouncing
       back now.
-      Remove substring. This deletes the minus sign if it exists.
'i     Push "i".
;      Discard it again.
!      Store the input, minus a potential minus sign, on the tape.
/      Reflect to W. Switch to Cardinal. The IP immediately wraps to the
       last column.
e)     Search the tape to the right for a -1, which will be found at the end
       of the string we stored there.
<      Does nothing.
q      Push the tape head's position, which is equal to the string length.
'<sp>  Push " ".
;      Discard it again.
/      Reflect to NW. Switch to Ordinal. The IP immediately bounces off
       the top boundary to move SW instead.
o      Implicitly convert the string length to a string and print it.
       IP bounces off the bottom left corner, moves back NE.
/      Reflect to S. Switch to Cardinal.
!      Store an implicit 0 on the tape, irrelevant.
       The IP wraps back to the first line.
/      Reflect to NE. Switch to Ordinal. The IP immediately bounces off
       the top boundary to move SE instead.
@      Terminate the program.

또한 H(절대 값)으로 카디널 모드에서 빼기 기호를 처리하려고 시도 했지만 추가 모드 스위치가 항상 시도 비용이 많이 들었습니다.


4

PHP, 23 바이트

<?=-~log10(abs($argn));

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

절대 값의 밑이 10 인 로그에 int로 캐스트 한 1 개의 로그

입력 log10이 돌려주는 0 INF으로 거짓으로 해석됩니다.

더 좋은 방법은 +3 바이트 로 바꾸는 것 $argn입니다$argn?:1

PHP, 27 바이트

<?=strlen($argn)-($argn<0);

문자열 길이에서 부울을 뺀 값은 0보다 작습니다.

문자열 비교를위한 +2 바이트 $argn<"0"

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

PHP, 32 바이트

<?=preg_match_all("#\d#",$argn);

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

정규식은 모든 숫자를 계산

35 바이트

<?=strlen($argn)-strspn($argn,"-");

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

문자열 길이 빼기 수 -

strspn


1
첫 번째 는 우선 순위가 낮기 10때문에 예를 들어 작동하지 않습니다 ^. 로 해결할 수 있습니다 -~.
— user63956

왜 간단하지 <?=strlen(abs($argn));않습니까?
— roberto06

@ user63956 log10이있는 버전은 입력 0의 경우 작동하지 않으므로 삭제합니다.
— Jörg Hülsermann 2016 년

1
@ JörgHülsermann 왜 안돼 $argn?:1? log10()및 로 26 바이트가됩니다 abs().
— user63956

1
@ JörgHülsermann은와 -~$x같습니다 ((int)$x)+1. <?=-~log10(abs($argn?:1));작동하는 것 같습니다.
— user63956

4

포트란 95 (gfortran), 121 96 95 바이트

program c
character b
call get_command_argument(1,b,length=i)
print*,i-index(b,'-')
end program

설명 :
인수 길이에서 '-'부호의 색인을 뺍니다.
배열은 포트란에서 1부터 시작하며 symbol을 찾지 못하면 index ()는 0을 반환합니다.

편집 : 암시 적 정수 "i"로 전환되었으며 인수 인수를 통합했습니다.

편집 : @ Tsathoggua 덕분에 -1 바이트


1
PPCG에 오신 것을 환영합니다!
— 마틴 엔더

3

PowerShell, 24 바이트

"$args"-replace'-'|% Le*

입력 인수의 "절대"값을 문자열로 캐스트하고 '길이'특성을 가져옵니다.

1 바이트보다 짧은 "".Length

누군가가 PS에서 숫자의 복근을 얻는 더 좋은 방법을 찾을 때까지 이것은 아마도 그것이 가능한 한 짧을 것입니다.


어때요 "$args".trim('-')|% Le*? :
— 어떤


3

brainfuck , 37 바이트

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

출력은 바이트 값입니다.

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

설명

-[+>+[+<]>+]>->  Constant for 45 (from esolangs wiki)
,                Read a byte of input
[-<->]           Subtract that byte from 45
<[>+>]           If the result is nonzero then increment a cell and move to the right
                 (0 means it was a minus; so not counted)
,[<+>,]          Read a byte and increment the cell to its left until EOF is reached
<.               Print the cell that was being incremented

결과를 숫자로 출력하는 바닥 글을 TIO 링크에 추가 할 수 있습니까?
— Beta Decay

@BetaDecay 추가됨
— 비즈니스 고양이

감사합니다 : D
— Beta Decay

3

루비, 15 11 + 1 = 16 12 바이트

-n플래그를 사용합니다 .

p~/$/-~/\d/

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

설명

                  # -n flag gets one line of input implicitly
p                 # Print
 ~/$/             # Position of end of line (aka string length) in input
     -            # minus
      ~/\d/       # Position of first digit (1 if negative number, 0 otherwise)

1
이것이 무슨 마법입니까?
— Chowlett

2
@Chowlett이 설명을 추가했습니다.
— 가치 잉크

2

젤리 , 2 바이트

DL

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

이것은 문자 그대로 질문을 수행합니다.

DL - Main link number n         e.g. -45
D  - convert to a decimal list       [-4,-5]
 L - get the length                  2

그것은 흥미로운 내장 기능입니다 D. 소수점에서 작동합니까? -1.2출력 하시겠습니까 [-1,-0.2]? 직접 시도했지만 그렇지 않습니다.
— Magic Octopus Urn

1
그렇진, 기본 변환은 그래서, 예를 들어, 단위 내려갑니다 654.321D얻을 것이다 [6,5,4.321](실제로 잘 [6.0,5.0,4.321000000000026])
— 조나단 앨런

[-6.0, -5.0, -4.321000000000026]실제로, 분명히.
— Magic Octopus Urn

아-그래 방금 편집-부동 소수점 산술.
— Jonathan Allan




2

자바 스크립트 (ES6), 27 26 25 24 바이트

입력을 문자열로받습니다.

s=>s.match(/\d/g).length
  • Arnauld 덕분에 2 바이트를 절약했습니다.

제목은 23 바이트이지만 코드는 24입니다. 그러나 23 바이트입니다. s=>`${s>0?s:-s}`.length!
— Dom Hastings

감사합니다, @DomHastings. 다른 방법으로 내 답변을 별도의 답변으로 게시해야합니다.
— Shaggy


2

자바, 30 24 바이트

i->(""+i.abs()).length()

가정 i합니다 BigInteger. 또한 유형이 컨텍스트 화되므로 테스트 코드에 표시된대로 가져 오기가 필요하지 않습니다.

테스트

// No imports
class Pcg120897 {
  public static void main(String[] args) {
    java.util.function.ToIntFunction<java.math.BigInteger> f =
        // No full class declaration past here
        i->(""+i.abs()).length()
        // No full class declaration before here
      ;
    System.out.println(f.applyAsInt(new java.math.BigInteger("-1267650600228229401496703205376"))); // -(2^100)
    System.out.println(f.applyAsInt(new java.math.BigInteger("1267650600228229401496703205376"))); // (2^100)
  }
}

저장

  • 30-> 24 바이트 : @cliffroot 덕분에

+""대신에 .toString()?
— cliffroot

2
이 방법을 보여주는 샘플 코드를 제공하고 i답변 의 유형을 명확하게하기위한 +1 더 많은 람다 답변 이이 작업을 수행해야한다고 생각합니다.
— Poke


1

Brain-Flak , 63 바이트

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

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

이것은 62 바이트의 코드와 +1 바이트입니다 -a.

다른 두 가지 접근법을 시도했지만 불행히도 두 가지 모두 더 길었습니다.

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

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

이것은 매우 짧은 대답 이어야 합니다. 실제로 음수를 지원할 필요가 없다면 다음과 같이 할 수 있습니다.

([]<>)

그러나 첫 번째 입력을 45 (ASCII -) 와 먼저 비교해야합니다 .이 답변의 바이트 수의 대부분입니다.

산술 솔루션이 더 짧을 수 있습니다.


62 바이트를 셉니다.?
— 완전히 인간적인

1
@totallyhuman 내 편집을 참조하십시오.
— DJMcMayhem

49 바이트 :([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
— Nitrodon




1

Alice , 10 바이트 (비경쟁)

 /d/
O@IHc

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

이 도전이 명령을 게시했을 때 이것은 경쟁이 아닌 솔루션입니다. c 이 공식 (및 : D) 인터프리터에서 버그 입니다. 한편 Martin Ender는 그것을 고쳤으므로 이제 작동합니다.

설명

명령 포인터는 두 개의 미러 ( /)를 여러 번 통과 하므로 따라 가기가 약간 어려울 수 있습니다. 기본 방향을 사용하여 최대한 명확하게 설명하려고합니다 (예 : N은 위로, SW는 왼쪽으로 아래로 ...). /1가장 왼쪽의 거울, /2가장 오른쪽의 거울을 부르겠습니다 .

Command    Direction    Comment
               E        Execution starts from the upper-left corner going right
   /1        E → SE     Passing through the mirror changes direction and switches
                        to ordinal mode (string operations)
   I        SE → NE     Push the input string to the stack, then bounce against
                        the bottom of the code
   /2       NE → S      Back to cardinal mode (numeric operations)
   H           S        Pop n, push abs(n). Execution wraps from bottom to top
   /2        S → SE     Ordinal mode again
   c        SE → NW     Pop s, push each char of s separatedly. Bounce against
                        the bottom right corner
   /2       NW → W      Cardinal mode
   d           W        Push the depth of the stack (which is now equal to 
                        the number of characters in abs(input))
   /1     W → NW → SW   Pass through the mirror, then bounce agains the top
   O        SW → NE     Output the result, then bounce on the bottom left corner
   /1       NE → S      Last mirror, I promise
   @           S        Terminate execution

1

GNU 메이크 , 78 바이트

명령 스타일 :

$(eval T=$1)$(foreach D,$(shell seq 9),$(eval T=$(subst $D,? ,$T)))$(words $T)

기능적 스타일, 113 바이트 :

$(eval 2?=$(shell seq 9))$(if $2,$(call $0,$(subst $(word 1,$2),? ,$1),$(wordlist 2,$(words $2),$2)),$(words $1))

Pure Make, 83 바이트 :

$(eval T=$1)$(foreach D,0 1 2 3 4 5 6 7 8 9,$(eval T=$(subst $D,? ,$T)))$(words $T)

1

C ++, 80 76 바이트

#include<string>
int main(int,char**c){printf("%d",strlen(c[1])-(*c[1]<46));}

인수의 길이를 인쇄합니다. 첫 문자가 빼기이면 1을 뺀 bool후 1if true또는 0if 로의 변환을 보장 합니다.false

  • @Squidy 덕분에 4 바이트 <46대신을 대신 사용할 수 있으며 대신 =='-'배열 을 지연시킬 수 있습니다.[]

입력이 항상 유효한 정수라고 가정 할 수 있으므로 로 교체 c[1][0]=='-'하여 4 바이트를 *c[1]<46줄일 수 있습니다. ( '-'이외의 접두사가 허용되지 않는 한 ...)
— Squidy

트윗 담아 가기 나는 이것을 단축하려고 노력하면서 오랫동안 내 두뇌를 쌓아 놓았으며 결코 그것을 생각해 냈습니다! 제안 해 주셔서 감사합니다. 특히 PCCG에 가입 해 알려주세요.
— Tas

1

TI 기본 (TI-84 Plus CE, OS 5.2+), 6 바이트

length(toString(abs(Ans

TI-Basic은 토큰 화 된 언어입니다. length(그리고 toString(각 바이트이 있습니다.

Ans암시 적 입력으로 사용됩니다. 마지막 (전용) 줄의 값이 암시 적으로 반환됩니다.

아주 간단하고 빼기 부호를 없애기 위해 절대 값을 취하고 문자열로 변환하고 문자열의 길이를 반환합니다.

0에서 작동하지 않는 6 바이트 수학적 접근 방식 :

1+log(abs(Ans

어떤 계산기가 toString(있습니까?
— kamoroso94

@ kamoroso94 TI-84 Plus CE
— pizzapants184

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