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

すべて偽の出力になる必要があります。(入力には先行ゼロがないため、などのことを心配する必要はありません012。)

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


ああ、文字列は許可されていますか?数字配列はどうですか?
デニス

@Dennisいいえ。単純な文字列または単純なintにしましょう。
カルビンの趣味

6
文字列を入力する場合、処理する必要があり012ますか?
リン

1
@Lynn No. 012は偽物になりますが、入力されていないと想定できます。
カルビンの趣味

1
BradGilbertb2gills号@ただのリンク定義を満たさなければならないtruthy / falsy - meta.codegolf.stackexchange.com/questions/2190/...
カルバンの趣味

回答:


46

Python、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を含める必要はありません。
xnor16年

しかし、それは入力ではないと仮定できますか?私は混乱している
VARのfirstNameを

1
コメントについて話している場合、入力を文字列として入力すると(これはそうではありません)、数字に先行ゼロがないことが予想されるため、12は「12」として与えられ、「 012 "。
-xnor

34

Python、24バイト

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

たくさんの条件チェーン。


私がすでに知っている言語を簡単に凌ぐ範囲を比較できること。どのように機能するかを調べるため調べなければなりませんでした。
GuitarPicker

うわー、それが言葉でなかったら、それlambdaがPythonだとは思いもしなかったでしょう。それは恐ろしいです。
スティーブベネット

25

Haskell、22バイト

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

匿名関数。等間隔のリスト[123, 234, 345, 456, 567, 678, 789]を生成し、入力が要素かどうかを確認します。


1
とんでもない!それは魔法です!
YSC



8

Brain-Flak 76 + 3 = 79バイト

この答えはのゴルフで、この答え。私は実際に私の答えがどのように機能するかをよく知りませんが、DJMcMayhemは彼の元の答えで良い説明を与え、私の答えは彼の修正です。

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

-a asciiフラグを3バイト追加して実行されます。

説明(種類の)

元の作業ソリューションから始めます。

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

私が書いて得た簡単なゴルフアルゴリズムを通してこれを実行します:

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

ここから、コード全体を次の<({}[()()()])>{}ように{}[()()()]削減することと等しくなる、本質的に1倍になるセクションを見る

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

最後に、ネガを組み合わせることができます:

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

14
「私は実際に私の答えは作品かなり方法がわからない」あなたはインターネット勝つ
漏れ修道女


@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整数を表しません
デニス

7

05AB1E、5バイト

¥XX‚Q

説明

¥      # deltas
    Q  # are equal to
 XX‚   # [1,1]

オンラインで試す


私はの2Å1代わりにXX,、より少ないコマンド(5の代わりに4)のために使用しました。
エリックアウトゴルファー16

@ErikGolferエリックゴルファー:そしてÅ、私のキーボードで(とは対照的に)書き込み可能です。これは利点です:)
Emigna

(ではない,が、あまりにもコン・キーシーケンスを持っていない私が使用される)ÅであるoAEN-USキーボードで。
エリックアウトゴルファー16

6

MATL、8バイト

d1=tn2=*

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

これは1 1、MATLでは偽であるため、真の入力に対して出力0し、偽の値に対してはaを含む配列を出力します。

説明:

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=(私は徹底的にテストしていない)
ルイスメンドー

1
またはdTTX=5バイト
ルイスメンドー

@luismendo whaaa?それはどのように機能しますか?次のドキュメントが見つかりませんT
DJMcMayhem

Tはリテラルtrueであり、Fですfalse。近隣TF一緒に固執することは、そうTTである[true true]これらの目的のために相当します、[1 1]仕様の
ルイスメンドー

6

Java 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

Perl 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バイト

+2バイト -nlフラグ。

STDINで入力を受け取り、trueまたはを出力しますfalse

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

repl.itで参照してください:https ://repl.it/DBn2/2 (▶️をクリックして、下のコンソールに入力を入力します。)


あなたのテストは、12が真になることを示しています。
-xnor

@xnorおっと。就寝後にゴルフを教えてくれます。一定!
ヨルダン

私は-aそうでsplitはないと思ったchop?また、何をし&ますか?エラーをスローする古いRubyを使用しています。とにかく、26バイトで完全に機能します。
xsot

おっと、私は意味-l、ありません-a&.Ruby 2.3で追加された「安全なナビゲーション」演算子です。19それがなければ"123456789"、サブストリングではないのような入力は、NoMethodErrorを送出します。
ヨルダン

@Jordan 2.2ではエラーが発生しません。たぶん2.3でも新しいのでしょうか?
xsot

5

Brain-Flak、99バイト

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

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

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

これ1は真実を表示し、偽りの場合はどちら0か(0に相当)を表示します


プッシュポップの非効率性を取り除くようにしてください。私はあなたのコードに束を見ることができます。見た目...)({}は異なりますが異なります。値を使用せずにプッシュおよびポップすると、1つのものに凝縮できます。必要に応じて、これらのすべてをゴルフアウトしたコードのバージョンにリンクできます。
小麦ウィザード

ここにあなたのプログラムの私の76バイトのゴルフがあります。私は、いくつかのカスタム設定を使用して、あなたのコード上で頭脳の最適化を実行しました。
小麦ウィザード


4

Brain-Flak、114バイト

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

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

正しいバージョン(質問の精神):入力として整数を取り、偽の場合は出力0、真実の場合は1を出力します。

これはありませんスタッククリーンで。

アルゴリズム

入力を n

出力は真実ですiff (n-123)(n-234)(n-345)(n-456)(n-567)(n-678)(n-789)=0です。

最初に12を減算し、次に111を7回減算してこれらの7つの数値を計算し、次にこれらの7つの数値の論理double-NOTを計算して加算しました。

真実の結果を得るには、合計は6です。偽の結果の場合、合計は7です。

次に、7から合計を減算し、答えを出力します。


私はコードを理解していませんが、アルゴリズムは賢いので、+ 1が必要です。
チョイス

4

R、30 22バイト

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

特にエキサイティングではありません。入力が12 + 111kで与えられるシーケンスにあるかどうかを確認します。ここで、kはそれぞれ1〜7です。:前に注意してください。*したがって、乗算はシーケンスの生成後に行われます。


4

C#(Visual C#Interactive Compiler)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

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

  • キリルLのおかげで-11バイト
  • ASCIIのみのおかげでさらに-7バイト。

1
PPCGへようこそ!中括弧とreturnキーワードを削除することで、いくつかのバイトを節約できます。30バイト
Kirill L.


1
素敵な最初の提出!
の無知の

3

Brainfuck、43バイト

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

ああ、私はこれが得意ではありません。出力\x01出力は、文字列のいずれかである場合には123234、...、 789\x00そうでなければ出力します。

(私はJava 7を倒しました...)

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


何のポイント[>>]<ですか?それだけではあり>ませんか?
DJMcMayhem

その時点でポインターの下のセルゼロでない場合、プログラムを(トラックから外れて)失敗さます。
リン


@LeakyNunそれはまったく異なって見えます。別の回答として自由に投稿してください
Lynn


3

JavaScript ES6、26バイト

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

これは、本質的にブール値であるもの(ビットベース!)に対してビット単位の論理演算子を使用しているという事実を利用しています。

Titusに感謝します2。


1
2バイト:(n-12)およびn>99
タイタス

@タイタスああ、とても素敵です、あなたに+1!
-WallyWest

1
=> ES5ではなくES6です。
ニール

1
メタでは、この26バイトを作成するために「f =」を数える必要がないことが決定されたと思います
チャーリーウィン

1
@WallyWestそれは、すべての場合で関数を使用するために「f =」を持っている必要がないためだと思うので、なぜこの場合に必要なのでしょうか?人々は私よりも賢いと決めたので、大丈夫だと思ったので、私はただそれと一緒に行きます;)
チャーリーウィン

3

Excel- 62 57 35 31バイト

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
ニール

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

Excel-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] )

inputの長さ(N参照セルの名前)が3未満の場合、Falsyが返されます。それ以外の場合、入力の長さNが3で、2桁目と1桁目と3桁目と2桁目の差の両方が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

Perl、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、それ-inが範囲かどうかを確認します1..7。ブール値のtrue / false値を出力します。-inオペレーターにはv3 +が必要です。

テストケース

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進ダンプ(リトルエンディアン):

3803 d105 6808 ebc0 2010 b280 f2a0 1001 4770

これは、文字列の長さとポインタのペアを受け取る関数です。出力はbashスタイルで、trueの場合は0、falseの場合はゼロ以外の値を出力します。Cでは、関数はint oneTwoThree(size_t length、char * string)として宣言されます。命令エンコーディングはthumb-2で、2バイトと4バイトの命令があります。Raspberry Pi 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

JavaScript(ES6)、34バイト

JSのもう1つのオプション。入力を文字列として受け取り0、for falseおよび1for を出力しtrueます。

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.