前進2歩、後退1歩


15

私が目的地から10歩離れているとしましょう。「二歩前進、一歩後退」という古いことわざに従って歩きます。目的地に正確に立つまで、2歩前進します。(これには、目的地を通過してそこに戻ることが含まれる場合があります)。何歩歩きましたか?

もちろん、私は10歩離れていないかもしれません。私は11歩、つまり100歩かもしれません。10歩を測定し、問題を解決するために前後に歩き続けるか、...コードを書くことができます。

  • 関数を記述して、Nステップ離れるのに必要なステップ数を順番に計算します。2ステップ前進、1ステップ後退します。
  • ステップ0で開始したと仮定します。「2ステップ先」を1ステップではなく2ステップとしてカウントします。
  • すべてのステップが一定の長さであると仮定します。
  • そのスペースに到達したときに最初にとったステップ数を返します。(たとえば、10ステップ離れると26ステップかかりますが、ステップ30でもう一度ヒットします)。26に興味があります。
  • 好きな言語を使用してください。
  • 入力として正の整数を受け入れる必要があります。これはターゲットステップを表します。
  • 最小バイト数が勝ちます。

例:

5つのステップを取得したい:

| | | | | | <- I'm at step 0, not yet on the grid.
| |X| | | | <- I take two steps forward, I'm on step 2: the count is 2
|X| | | | | <- I take one step back, I'm on step 1: the count is 3
| | |X| | | <- I take two steps forward, I'm on step 3: the count is 5
| |X| | | | <- I take one step back, I'm on step 2 again: the count is 6
| | | |X| | <- I take two steps forward, I'm on step 4: the count is 8
| | |X| | | <- I take one step back, I'm on step 3 again: the count is 9
| | | | |X| <- I take two steps forward, I'm on step 5: the count is 11

この場合、関数の結果は11になります。

結果の例:

1      =>  3
5      =>  11
9      =>  23
10     =>  26
11     =>  29
100    =>  296
1000   =>  2996
10000  =>  29996
100000 =>  299996

ゴルファー、楽しんでください!


7
うーん...これはとても馴染みがあります。
シャギー


@Rod Hooray!私はそれで逃げました!;)
AJファラデー

うん、それは私が考えていたもののように見える、@ Rod。
シャギー

@Shaggy Rodはコメントを少し変更しました。以前のものは、カタツムリ/井戸の質問が反復の数を求めているが、これはカバーされた距離を求めていることに注意しました。
AJファラデー

回答:


5

オアシス5 4バイト

@Adnanのおかげで1バイト節約

3+23

混同しないでください 23+3

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

どうやって?

      implicitly push a(n-1)
3     push 3
 +    sum and implicitly print
  2   a(2) = 2
   3  a(1) = 3

1
を省略できbます。
アドナン

3を掛けるのではなく、3を掛けるつもりだったと思います。
エリックアウトゴルファー

@EriktheOutgolferプログラムはa(n)a(n-1)+3として計算ます。
デニス




9

多言語:Java 8 / JavaScript / C#.NET、16 14 12バイト

n->3*n-1%n*4

オンラインで試してください(Java 8)。

n=>3*n-1%n*4

オンラインで試してください(JavaScript)。
オンラインで試してください(C#.NET)

@LynnのPython 2回答のポートです。そのため、必ず彼/彼女の回答に賛成票を投じてください


古い答え:

ポリグロット:Java 8 / JavaScript / C#.NET、16 14バイト

n->n<2?3:n*3-4

オンラインで試してください(Java 8)。

n=>n<2?3:n*3-4

オンラインで試してください(JavaScript)。
オンラインで試してください(C#.NET)

説明:

n->       // Method with integer as both parameter and return-type
  n<2?    //  If the input is 1:
   3      //   Return 3
  :       //  Else:
   n*3-4  //   Return the input multiplied by 3, and subtract 4

太い矢印を使用する場合のJavaScriptポリグロット。
シャギー

@Shaggyが追加され、C#.NETと同様に:) n=>(--n*3||4)-1JavaScriptでも可能ですが(14バイトも)。
ケビンクルーイッセン

7

R、20バイト

N=scan();3*N-4*(N>1)

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

あまりエレガントではないソリューションを実装するまで、パターンに気づきませんでした。


3
おめでとうございます!
ルイスメンドー

4
@LuisMendoありがとう!サイトでの私の1年記念日は数日前だったと思うので、PPCGに関しては良い週でした。
ジュゼッペ

3
@ジュゼッペ私は気持ちを知っています:先週20k、そして2年目の記念日。:)
ケビンクルーイッセン












3

MachineCode x86_64の上に、34の 32 24バイト

8d47fe9931d029d08d0447c3

が必要です i整数出力にフラグです。入力は、コードに手動で追加することにより取得されます。

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


24バイトのMachineCodeプログラムを見つけるために、これら4つの異なるC関数を調べました。

  • n+2*abs(n-2)= 8d47fe9931d029d08d0447c3(24バイト)
  • 3*n-4*!!~-n= 8d047f31d2ffcf0f95c2c1e20229d0c3(32バイト)
  • n*3-4*(n>1)= 31d283ff028d047f0f9dc2c1e20229d0c3(34バイト)
  • n<2?3:n*3-4= 83ff01b8030000007e068d047f83e804c3(34バイト)

それで、この言語は正確に何ですか?
qwr

@qwr簡単な説明については、リポジトリのREADMEをご覧ください。
MD XF


2

4、54のバイト

3.6010160303604047002020003100000180010202046000095024

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

入力方法に疑問がある場合は、最初に数値コードの入力と出力が文字コードメタポストとして提供される場合があります


なぜこれがダウン投票されたのですか?
ウリエル

答えは4分の1であるように見えるため、これは有効な結果ではありません。私が知る限り、それは問題を解決しません。
AJファラデー

@AJFaradayは、メタコンセンサスで有効なバイト入出力を使用します。入力セクション内の説明を参照してください
Uriel

結果の解釈方法に関するリソースはありますか?または入力?
AJファラデー

1
@AJFaraday結果の文字コードが答えです。関連するメタ投稿を含むように質問を編集しました。4文字入力のみがあります。
ウリエル




2

65816マシンコード、22バイト

65C02のレジスタサイズは16ビットではなく8ビットであるため、この65C02マシンコードを簡単に3バイト少なくすることはできましたが、できませんでした。それは動作しますが、本当に低い数字しか使用できないので退屈です;-)

xxdダンプ:

00000000: 7aa9 0000 aa89 0100 d004 8888 e824 c8e8  z............$..
00000010: 1ac0 0000 d0ef                           ......

分解/コードの説明:

; target is on the stack
  ply              7A                  ; pull target from stack
  lda #$0000       A9 00 00            ; set loop counter to 0
  tax              AA                  ; set step counter to 0
loop:
  bit #$0001       89 01 00            ; sets Z if loop counter is even
  bne odd          D0 04               ; if Z is not set, jump to 'odd'
  dey              88                  ; decrement target twice
  dey              88
  inx              E8                  ; increment step counter
  .byte $24        24                  ; BIT $xx opcode, effectively skips the next byte
odd:
  iny              C8                  ; increment target

  inx              E8                  ; increment step counter
  inc a            1A                  ; increment loop counter

  cpy #$0000       C0 00 00            ; sets zero flag, can be optimized maybe?
  bne loop         D0 EF               ; if Y is non-zero, loop

; result is in register X

65816互換エミュレーターでテストする:

testing


1

SHELL28バイト

F(){ bc<<<$1*3-$(($1>1))*4;}

テスト:

F 1
3

F 2
2

F 3
5

F 4
8

F5
11

F 11
29

F 100
296

F 100000
299996

説明 :

式は次のとおりです。

if n == 1  ==> F(1) = 3
else F(n) = 3*n - 4

「2つのステップと1つのステップ」という3つのステップのシーケンスに従って、算術級数が得られます。

 +2  2 => 2  ( or 6 )
 -1  1 => 3
 -----------
 +2  3 => 5  ( or 9 )
 -1  2 => 6
 -----------
 +2  4 => 8  ( or 12 )
 -1  3 => 9
 -----------
 +2  5 => 11 ( or 15 )
 -1  4 => 12
 -----------
 +2  6 => 14 ( or 18 )
 -1  5 => 15 
 -----------
 +2  7 => 17 ( or 21 )
 -1  6 => 18

少なくとも、または最初の偶然:

 1 => 3
 2 => 2
 3 => 5
 4 => 8
 5 => 11
 6 => 14

1つの式で:

F(n) = 3*n - 4(n>1)     with n>1 is 1 or 0 (if n==1)

これがどのシェルかを説明してください
-qwr

Cygwinでテスト済み(CYGWIN_NT-10.0 2.3.1(0.291 / 5/3)2015-11-14 12:44 x86_64 Cygwin)
アリISSA

bcに直接書くことができますか?
-qwr

私はbcに慣れていませんが、関数の引数($ 1)が数回使用され、いくつかのシェル固有のもの(算術展開、$((…)))が実行されるため、おそらくそうではありません。
2xsaiko

1
F(){bc<<<$1*3-$(($1>1))*4}しかしzshの中で動作し、2バイト削除
2xsaiko

1

Python 3、48バイト

def a(x):
    if x!=1:
        return((3*x)-4)
    return(3)

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


よくやった。「フッター」セクションにコードを追加することもできます。そうすれば、ゴルフエントリをパディングせずに機能をテストできます
...-AJFaraday

@AJFaraday投稿またはコードのフッターですか?
ネイサンディマー

オンラインで試す コードで実行されるが、バイト長にはカウントされないフッターを追加できます。次に、出力に作業中のコードが表示されます。
-AJファラデー


@JoKing Pythonのラムダ関数の優れたガイドをご存知ですか?私は構文がどのように機能するか本当に理解していません。
ネイサンディマー



1

Brain-Flak、38バイト

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

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

私が見る最初の答えは、前後にステップして答えを計算します。

({ while not at 0
  <([()()]{})>()() take two steps forward, counting 2 steps
  {(<((){})>)()}{} take one step back, if not at 0, and add 1 step
}{}) remove the 0 and push step sum

1

W d、7バイト

♦óÖ╣░Θ$

説明

3*1a<4*-

評価する (a*3)-4*(a>1)ます。

別の可能な選択肢

3*1am4*-

評価し(a*3)-4*(1%a)ます。

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