ゼロから離れる


41

仕事

非負整数与えられn、出力1場合nであり0、出力の値nさもなければを。

入力

負でない整数。

  • 文字列を入力として受け入れたい場合、文字列は次の正規表現に一致します。/^(0|[1-9][0-9]*)$/つまり、先頭にゼロが含まれている場合を除き0ます。
  • 入力として実数の整数を受け入れる場合、整数が言語の処理能力の範囲内にあると想定できます。

出力

上記で指定された正の整数。先行ゼロは許可されません。出力は正規表現と一致する必要があり/^[1-9][0-9]*$/ます。

テストケース

input output
    0      1
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7

得点

これはであるため、バイト単位の最短回答が優先されます。

標準の抜け穴が適用されます。


1
おそらくTNB CMCへのリンクを配置する必要があります。それが、この挑戦​​の原点であるためです。
mbomb007

答えは完全な機能である必要がありますか、それとも身体であることができますか?
カレブKleveter

1
@CalebKleveter PPCGのデフォルトのルールは、答えは関数または完全なプログラムのいずれかであり、スニペットではないということです。
リーキー修道女

先行ゼロで出力を印刷できますか?
MD XF

@MDXFはい、できます。
リーキー修道女

回答:


18

C(gcc)、14 13バイト

f(n){n=n?:1;}

n?:1他のCの回答のコメントのトリックを思い出させてくれた@betsegに感謝します!

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

C、17バイト

f(n){return!n+n;}

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

C、16バイト

#define f(n)!n+n

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



1
@betsegそれはマクロだからです。コンパイラは、それが3*!n+nに等しいと見なし3*0+5ます。
Steadybox

1
私は知っていますが、算術演算子を「戻り」値に直接適用できるはずだと思います。そのため、マクロを括弧で囲むのが一般的です。マクロが有効だとは思わない。
-betseg

4
@betsegこれはコードゴルフの要件ではないと思います。私は、Cマクロを使用したコードゴルフの答えを見たことはありません。
Steadybox

1
@hucancode TIOリンクを参照してください。main関数/マクロのf呼び出し元を追加する必要があります。ソリューションはデフォルトで完全なプログラムである必要はありません。gcc固有のバージョンは、別のコンパイラでコンパイルされる場合とされない場合があり、別のコンパイラでコンパイルされると正しく実行される場合とされない場合があります。
Steadybox

17

Japt、2バイト

ª1

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

説明

ªJSの||演算子のショートカットです。Japtには暗黙的な入力があるため、このプログラムはを計算input||1し、結果は暗黙的にSTDOUTに送信されます。

w1入力との最大値を使用して、同様に機能し1ます。


16

アリス、7バイト

1/s
o@i

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

説明

1   Push 1. Irrelevant.
/   Reflect to SE. Switch to Ordinal.
i   Read all input as a string.
    Reflect off bottom right corner. Move back NW.
/   Reflect to W. Switch to Cardinal.
1   Push 1.
    IP wraps around to last column.
s   Sort swap: implicitly convert the input to an integer. Then, if the top stack 
    element is less than the one below, the two are swapped. It basically computes
    min and max of two values at the same time, with max on top.
/   Reflect to NW. Switch to Ordinal.
    Immediately reflect off the top boundary. Move SW.
o   Implicitly convert the result to a string and print it.
    Reflect off bottom left corner. Move back NE.
/   Reflect to S. Switch to Cardinal.
@   Terminate the program.

15

JavaScript(ES6)、7バイト

n=>n||1

5
別の方法:n=>n+!n(少なくとも私は思う)
マシューノ

@SIGSEGVはい、確かに機能します。(これも可能性がありますがn|!n、これは31ビットの量に制限されています。)
アーナルド

これはn || 1に簡略化できます。falseと評価されるのは0のみです
。– ansiart

1
@ansiartあなたのポイントがn=>n||1に簡略化できる場合、n||1いいえ。受け入れられる答えは、完全なプログラムまたは機能です。n=>do_something_with(n)ある矢印機能 ES6の構文では。
アーナウド

1
@StanStrum nゼロでない場合は、元の値を返す必要があります。ビット単位のORはn、最下位ビットが設定されていない場合(例:)に変更され(4|1) === 5ます。
アーナルド



12

V、4バイト

é0À

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

好まれないが期待される振る舞いを乱用するので、私はそれを実際にバグと呼ぶことはできません。説明:

Vimでは、コマンドはカウントを受け入れます。たとえば<C-a>、数値7<C-a>は増加しますが、7ずつ増加します。ただし、0カウントとして使用することはできません。

  • 0 すでにコマンドです(最初の列に移動)。

  • テキストエディターのコンテキストでは、コマンドを0回実行するように要求することはほとんど意味がありません。

これはテキストエディターでは問題ありませんが、通常はゴルフ言語では不快なため、Vはいくつかのコマンドを上書きするため0、有効なカウントになります。たとえば、éñÄ、およびいくつかの他。ただし、<C-a>組み込みのvimコマンドであるため、上書きされないため、これを正の入力で実行すると次の結果が得られます。

N       " N times:
 <C-a>  "   Increment

しかし、入力として0で実行すると、

0       " Go to column one
 <C-a>  " Increment

完全な説明:

é0          " Insert a 0
  À         " Arg1 or 1 times:
   <C-a>    " Increment

1
0カウントではないことが一度だけ便利です。私はそれを何度も避けてきたので、最初はそれも考慮しませんでした
-nmjcman101


12

Haskell、5バイト

max 1

使用例:(max 1) 0-> 1

説明することはあまりありません。



10

R、13バイト

max(1,scan())

nstdinから読み取ります。を使用するpmaxと、リストを読み取り、リスト内の各要素に+1バイトの適切な値を返すことができます。

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

私はで13バイトで別の細かいRソリューションがあることに注意すべきであるスヴェンホーエンシュタインまだを可能にするの13バイト溶液が

(n=scan())+!n

これがRの下限かどうか疑問に思います。


以下を使用する別の13バイトのソリューションpryrpryr::f(n+!n)。小さなものを見つけることができません
...-JayCe

9

Cubix、6バイト

OI!1L@

どういうわけか、それをユニットキューブに収めることができました... オンラインでテストしてください!

説明

実行される前に、コードはキューブネットとして配置されます。

  O
I ! 1 L
  @

次に、IP(命令ポインター)はI、右向きの左端の面()に配置されます。そこから実行される命令は次のとおりです。

I  Input a number from STDIN and push it to the stack.
!  If the top number is non-zero, skip the next instruction.
1  Push a 1 (only if the input was zero).
L  Turn left. The IP is now on the top face facing the !.
O  Output the top item as a number.

次に、IPが!再びヒットし、@底面をスキップします。私たちはヒットする必要があるとして、これは、役に立たない@プログラムを終了します。IPはL再びヒットし、中央の行を逆方向(L1!I)に通過してから、Lもう1つで終了し、最終的にIPがに変わります@








5

MarioLANG、12バイト

;
=[
:<+
 =:

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

使い方

マリオは左上から始まり、最初は右に歩きます。彼は入力(;)からintを読み取り、現在のメモリセルに格納します。その後、彼は地面から落ち(=)、ヒットし[、現在のセルが0の場合、次のコマンドを無視します。

セルが0でない場合、彼は左に歩き始め(<)、現在のセルをintとして出力し(:)、彼の死に落ちます(プログラムの終わり)。

セルが0の場合、彼は左に曲がるコマンドを無視し、右に歩き続けます。彼は現在のセル(+)をインクリメントして出力し、彼の死に落ちます。


5

脳高射砲22、10のバイト

({{}}[]{})

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

説明:

入力がゼロ以外の場合、{{}}スタックからすべてをポップし、入力に対して評価します。ゼロの場合、何もポップされず、ゼロと評価されます。実行({{}})すると

ゼロ以外:

n

ゼロ:

0
0

この時点で、スタックの高さ(ゼロ以外の場合は0、ゼロの場合は1)を追加し、スタックからもう1つの値をポップします。(スタックには無限の数の0が埋め込まれるため、これにより上位0または追加の0がポップされます)


素晴らしい仕事ですが、最短の解決策ではありません:codegolf.stackexchange.com/a/118520/31203
MegaTom




4

Python、15バイト

lambda n:n or 1

なぜn or 1、6バイトだけではないのですか?
DReispt

2
これは単なるスニペットであるため、通常は完全なプログラムまたは機能で回答します。これがどこかのルールで明示的に述べられているかどうかはわかりませんが、少なくともそれが事実上の標準です。
ダニエロ

引用センモウヒラムシThe rules are not terribly clear. I think we have a consensus on meta that REPLs count, but as a separate language, which would allow snippets in many cases, but snippets are not permitted according to this meta post- > codegolf.meta.stackexchange.com/questions/2419/...
daniero

@trichoplax 1or nは常に戻り1ます。
ダニエロ

1
同じ15バイトバイトカウントの代替:lambda n:n|1>>n
Kevin Cruijssen

4

dc、11バイト

[1]sf?d0=fp

[1]sfレジスタfにマクロを格納し、1をスタックの先頭にプッシュし、 ?入力を読み取り、 d0=f入力が0の場合にマクロfを実行しp、スタックの先頭を出力します。

テスト:

$ dc -e "[1]sf?d0=fp" <<< 0
1
$ dc -e "[1]sf?d0=fp" <<< 1
1
$ dc -e "[1]sf?d0=fp" <<< 42
42

4

Excel、10バイト

=A1+(A1=0)

これにより、明らかな「IF」ステートメントソリューションに比べて4バイト節約でき=IF(A1=0,1,A1)ます。


3
そして、それほど明らかではないものより1バイト少ない=A1+NOT(A1)
Engineer Toast



3

Mathematica、9 8バイト

マーティン・エンダーごと:

#~Max~1&

最初のアイデア:

#/. 0->1&

置き換えとピュア機能0を持ちます1。スペースが必要であるか、それは私たちが割っていると思い.0ます。


3

-lおよび-pフラグ用のPerl 5、6 + 2バイト

$_||=1

stdinとは別の行で入力を受け取ります。flagsで実行し-lpます。

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