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


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을 뺀 bool1if 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.