番号はどれくらいですか?


26

チャレンジ

Q範囲内の整数を指定すると、-(2^100) ≤ Q ≤ 2^100その数値の桁数(10を底とする)が出力されます。

ルール

はい、数字を文字列として取り、その長さを見つけることができます。

すべての数学関数が許可されています。

任意の基数で入力を取得できますが、出力は基数10の数値の長さでなければなりません。

負の数のマイナス記号をカウントしないでください。数値に小数点はありません。

ゼロには1桁またはゼロ桁を使用できます。

入力は常に有効な整数であると仮定します。

Input > Output

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

勝ち

バイト単位の最短コードが優先されます。

回答:


10

Brachylog、1バイト

l

オンラインでお試しください!

別の組み込みソリューションですが、これは最短の名前です(ゼロバイトでこのタスクを実行する言語を誰かが見つけない限り)。これはBrachylog 1とBrachylog 2の両方で機能するはずです。

これは関数サブミッションです(TIOリンクには、プログラム全体ではなく個々の関数をインタープリターに実行させるコマンドライン引数が含まれています)。数値はやや異常であり、このプログラムを関数にすることで、入力構文に関する潜在的な引数を解決します。

Brachylogの組み込み関数のほとんどは、負の数を正の数のように扱うことをしばしば気にしましたが、その事実はここで役に立ちました。私はすべてのゴルフ言語にトレードオフが関係していると思います。


これはスクロールを停止する場所です...これはとんでもないです!
ボグダンアレクサンドル

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
私は長い間、この交換ではリードオンリーメンバーしてきたが、このような何か見たことがない
のJavaのカップ

7
数が十分に長い場合、これはガスを使い果たしますか?
ロバートフレイザー

5
これはbrainfuckよりも大きなbrainfuckです。
オメガ

1
@RobertFraserですからZoom Zoom、のすべてのループで停止しますplan "r"。最大100,000桁までテストしただけで、ガスが尽きることはありませんでした。私はそれを計算しませんでしたが、使用しているガスの代金を支払うのに十分な運賃がかかるので、すべてのループでタンクがいっぱいになると思います。
エンジニアトースト

1
@CupofJava OH MY GOSH シェークスピアのことをどうやって忘れましたか。
エンジニアトースト


14

dc、3

?Zp

通常dc_より普通の代わりに負の数を与える必要があることに注意してください-。ただし、この場合、どちらを使用してもかまいません。場合に-与えられ、その後dc、空のスタックの減算としてこれを扱うスローdc: stack emptyし、その後数の残りの部分に続きます。したがって、結果は同じです。

オンラインでお試しください

?    # input
 Z   # measure length
  p  # print

これは単にZ関数の提出としてではないでしょうか?dc'quote + dup + eval演算子を使用した連結言語であるため、任意のコード文字列を再利用できます。


5

Äね?違いþますか?けっこうだ。
魔法のタコUr

@carusocomputing私はÄ最初に考えましたþが、小数点を処理するので、それは私が推測する少し良いです。
ライリー

2人が互いに2分以内に2つの異なる2バイトのソリューションを思いついたのは素晴らしいことです。考えようとしています。
魔法のタコUr

5

アリス、16バイト

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

オンラインでお試しください!

説明

このために半分まともなレイアウトを見つけることは非常にトリッキーでした。スペース、<およびのため、私はまだそれで非常に満足していません;が、これは今のところできることです。

文字列の長さは、入力が文字列であり、出力が整数であるため、Aliceに存在しない非常に一般的なビルトインの1つです(すべてのAliceコマンドは厳密に整数から整数または文字列から文字列です)。文字列の長さを測定するには、序数モードでテープに文字列を書き込んでから、Cardinalモードで文字列の終わりを見つけます。

/      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(絶対値)を使用してCardinalモードでマイナス記号を処理しようとしましたが、追加のモードスイッチは常に私の試みでより高価になりました。


4

PHP、23バイト

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

オンラインでお試しください!

絶対値の10を底とする対数に1をintにキャストしたログ

入力log10が返すゼロとして、INFこれはfalseとして解釈されます

より良い方法は$argn$argn?:1+ 3バイトに置き換えることです

PHP、27バイト

<?=strlen($argn)-($argn<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のバージョンは、入力がゼロの場合は機能しないため、削除します。
ヨルクヒュルサーマン

1
@JörgHülsermannどうして$argn?:1?とで26バイトにlog10()なりabs()ます。
user63956

1
@JörgHülsermannはと-~$x同等((int)$x)+1です。<?=-~log10(abs($argn?:1));動作するようです。
user63956

4

Fortran 95(gfortran)、121 96 95バイト

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

説明:
引数の長さから「-」記号のインデックスを減算します。
Fortranでは配列は1から始まり、シンボルが見つからない場合、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リンクに追加することは可能ですか?
ベータ崩壊

@BetaDecayが追加されました
Business Cat

D:、おかげで華麗だこと
ベータ崩壊


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]?自分で試してみましたが、そうではありません。
魔法のタコUr

1
それほどではありませんが、基本変換は単位にしか下がらないため、たとえば、(実際には)654.321Dを生成し[6,5,4.321]ます[6.0,5.0,4.321000000000026]
ジョナサンアラン

[-6.0, -5.0, -4.321000000000026]、実際、どうやら。
魔法のタコUr

ああ-ええ、ちょうど編集-浮動小数点演算。
ジョナサンアラン




2

JavaScript(ES6)、27 26 25 24バイト

入力を文字列として受け取ります。

s=>s.match(/\d/g).length
  • Arnauldのおかげで2バイト節約されました。

タイトルは23バイトですが、コードは24です...ただし、これは23バイトですs=>`${s>0?s:-s}`.length
ドムヘイスティングス

ありがとう、@ DomHastings。私のアプローチとは異なるため、別の回答として投稿する必要があります。
シャギー


2

Java、30 24バイト

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

と仮定iBigIntegerます。また、タイプはコンテキスト化されているため、テストコードに示されているように、インポートは不要です。

テスト

// 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()
クリフルート

2
これがどのように呼び出されるかを示すサンプルコードを提供iし、回答のタイプを明確にするために+1 。これを行うには、より多くのラムダ応答が必要だと思います。
ポケ


1

Brain-Flak、63バイト

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

オンラインでお試しください!

これは62バイトのコードと-aフラグ用の+1バイトです。

私は他に2つのアプローチを試しましたが、残念ながら両方とも長かったです:

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

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

これ非常に短い答えです。実際、負の数をサポートする必要がなければ、次のようにできます。

([]<>)

しかし、最初の入力を最初に45(ASCII -)と比較する必要があります。これは、この回答のほとんどのバイトカウントです。

算術解は短くなる場合があります。


62バイトを数えます。
完全に人間

1
@totallyhuman私の編集を参照してください。
DJMcMayhem

49バイト:([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
ニトロドン




1

アリス、10バイト(非競合)

 /d/
O@IHc

オンラインでお試しください!

これは競合しないソリューションです。なぜなら、このチャレンジが投稿された時点で、 cは公式の(そして:Dのみの)インタープリターにバグがあったためです。一方、マーティン・エンダーはそれを修正したので、これは現在動作しています。

説明

命令ポインターは2つのミラー(/)を複数回通過するため、追跡するのが少し難しい場合があります。私はできる限り明確に説明し、基本的な方向を使用します(例: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 Make、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への保証変換1場合trueまたは0場合false

  • 指摘するための@Squidyのおかげ<46=='-'、私はの代わりに使用することができ、配列の代わりに[]

入力は常に有効な整数であると想定できるため、と置き換えることc[1][0]=='-'で4バイトを削ることができます*c[1]<46。(「-」以外のプレフィックスが許可されていない限り...)
スクイディ

@Squidyああすてきな発見!私はこれを短くしようとして長年にわたって頭を悩ませていましたが、それを思い付くことすらありませんでした!提案をありがとう、特にPCCGにサインアップして私に知らせてくれてありがとう!
タス

1

TI-Basic(TI-84 Plus CE、OS 5.2 +)、6バイト

length(toString(abs(Ans

TI-Basicはトークン化された言語です。length(およびtoString(はそれぞれ2バイトです。

Ans暗黙的な入力として使用されます。最後の(唯一の)行の値が暗黙的に返されます。

非常に簡単で、絶対値を使用してマイナス記号を取り除き、文字列に変換して、文字列の長さを返します。

0では機能しない6バイトの数学的なアプローチ:

1+log(abs(Ans

どの計算機がありtoString(ますか?
kamoroso94

@ kamoroso94 TI-84 Plus CE
ピザパンツ184

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.