緊急回廊を作る


46

一部の国では、方向ごとに複数の車線がある通りに緊急回廊を形成する方法に関する推奨事項または法律があります。(以下では、走行している方向に向かう車線のみを考慮します。)これらはドイツで適用される規則です。

  • 車線が1つしかない場合、救助車両が左側を通過できるように、全員が右側に運転する必要があります。
  • 複数の車線がある場合、左端の車線の車は左に移動し、他の人はすべて右に移動します。

チャレンジ

N>0通常の車線の数を指定し、N+1ASCII文字の文字列を使用して緊急回廊が形成されたときに車線のレイアウトを出力します。あなたは、ASCIIコードから任意の2つの文字を使用することができる33までの126緊急廊下を示すために1、、と車を示すためのものです。末尾または先頭のスペース、改行などが許可されます。

ここではE、緊急回廊とC自動車に使用しています。

N  Output
1  EC
2  CEC
3  CECC
4  CECCC
5  CECCCC
6  CECCCCC
   etc

18
私はこれに該当しません!あなたはあなたの卑劣なヘビをくすくすためにあなた自身の車線を探しています。
orlp

16
@PmanAce flawrがこのために私たちの助けを必要としているとは本当に思わない:P
orlp

8
+1はドイツで実際に機能するためです。先週末に状況になりました。
エルペドロ

10
@ msh210ドイツのWPページの写真が最もよく説明していると思います。
-flawr

9
ご存知のように、最初はこれはCand によるポイントツーチャレンジのように見えましたが、このチャレンジEには多くの素晴らしいアプローチがあります!C=1/ E=2またはC=2/に数学的な操作を使用してE=3、トップアンサーのように。C=0/ E=1を使用して10^(n-1); 使用C=0/ E=.小数点フォーマットで0.0、使用するC=1/ E=-利用して-1、などなど。最初はそのように見えたチャレンジに対する非常に多くのユニークな可能性。残念ながら、+ 1は1回しかできません。;)
ケビンクルーイッセン

回答:


29

パイソン2、29の 26バイト

lambda n:10**n*97/30-1/n*9

例:

>>> f(1)
23
>>> f(2)
323
>>> f(3)
3233

あなたは、n = 1の場合には、出力21に必要
DanielIndie

1
@DanielIndie :(固定されているが、今、それは醜いです。
orlp

それでも非常に創造的な解決策:)
flawr

1
@orlpすみません:)しかし、まだ良い解決策:)
DanielIndie

3
10**n*97/30-1/n*9別のバイトを保存し、f(5) == 323333などを与える
Lynn

28

Pythonの3、35の 33バイト

lambda N:'C'*(N>1)+'EC'+'C'*(N-2)

編集:@dylnanのリマインダーのf=おかげで、2バイトを節約するためにドロップします。

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

それを視覚化するには:

lambda N:'🚘'*(N>1)+'🚔🚘'+'🚘'*(N-2)

出力:

1 🚔🚘
2 🚘🚔🚘
3 🚘🚔🚘🚘
4 🚘🚔🚘🚘🚘
5 🚘🚔🚘🚘🚘🚘
6 🚘🚔🚘🚘🚘🚘🚘

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

Python 3、40バイト

簡単なソリューション:

lambda N:str(10**N).replace('100','010')

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


2
私は、「簡単な」ソリューションは、後に不要な空白があると思うlambda N:
誰か

@someone私はそれを知らなかった、ありがとう。
国陽


14

Japt、5 4バイト

用途q車用と+廊下のために。

ç¬iÄ

それを試してみてください

私と同じように4バイトのゴルフをしたオリバーに感謝します。


説明

短い解決策ですが、注意が必要です!

最初の簡単なç方法:メソッドは、整数に適用されると、その文字列引数をその回数繰り返します。iこの方法は、2つの引数(とりsn)と挿入しsたインデックスにnそれが適用されます文字列の。

使用されている2つのUnicodeショートカットを展開するçq i+1と、が得られます。これは、JSにトランスパイルされるとU.ç("q").i("+",1)、にUなります。したがって、q U時間を繰り返してから、+インデックス1を挿入しています。

最後の秘trickは、Japtのインデックスラッピングのおかげで、いつU=1、atインデックスiを挿入します。+0n


私はç0 iQ16バイトで投稿するつもりでしたが、それを使用した方が良いでしょう。
オリバー

ありがとう、@ Oliver。ただし、その間に5バイトになりました。
シャギー

1
ç¬iÅ4バイト;)私はこれほどJaptを悪用したことはありません。
オリバー

私はちょうど:)のÄ代わりに同じことをしようとしていたÅ
シャギー

7

R、50バイト

-11ジュゼッペに感謝!

pryr::f(cat("if"(x<2,12,c(21,rep(2,x-1))),sep=""))

緊急廊下の出力1および通常車線の出力2

私の試み、61バイト

ここで見たいものは何もありませんが、スコアボードでRを取得しましょう=)

q=pryr::f(`if`(x<2,cat("EC"),cat("CE",rep("C",x-1),sep="")))

使用法:

q(5)
CECCCC

21 = 12 + 9を使用して8バイトを保存し、if tio.run/##K/r/v6CossjKKk0jObFEw1JLI8/を使用
JayCe


6

パイソン2、30の 29 28バイト

lambda n:`10/3.`[1/n:n-~1/n]

3代わりにCおよびの.代わりに印刷しEます。

説明:

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

lambda n:    # Method with integer parameter and string return-type
  `10/3.`    #  Calculate 10/3 as decimal (3.333333333) and convert it to a string
  [1/n       #   Take the substring from index 1 if `n=1`, 0 otherwise
   ,n-~      #   to index `n+1` +
       1/n]  #    1 if `n=1`, 0 otherwise

パイソン2、33の 32 31 29 28バイト

lambda n:1%n-1or'1-'+'1'*~-n

1代わりにCおよびの-代わりに印刷しEます。

@ovsのおかげで-2バイト。@xnorの
おかげで-1バイト。

説明:

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

lambda n:    # Method with integer parameter and string return-type
  1%n-1      #  If `n` is 1: Return '-1'
  or         #  Else:
    '1-'+    #   Return '1-', appended with:
    '1'*~-n  #   `n-1` amount of '1's

1
あなたの10/31は17で失敗
ジョー・キング

1
私はOPで明らかにし、彼は言った@JoKing「整数型で構築を使用することで十分です。」、までを意味しn=16、あなたの整数が内蔵されている場合、64ビットで十分であるか、このケースではn=16とき小数点値はできます」デフォルトで15桁以上の10進数を保持するだけで十分です。(Java、C#.NETなど、任意の数のサイズの言語を使用する他の多くの回答にも同じことが当てはまります。)
Kevin Cruijssen


5

brainfuck、42バイト

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

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

入力を文字コードとして受け取り、V通常のレーンおよびWクリアされたレーンとして出力します。(簡単にテストするために、を,いくつかのに置き換えることをお勧めします+

使い方:

,[[>]+[<]>-] Turn input into a unary sequence of 1s on the tape
>>[<]<[<]    Move two cells left of the tape if input is larger than 1
             Otherwise move only one space
>+>+<        Add one to the two cells right of the pointer
             This transforms:
               N=1:  0 0' 1 0  -> 0 2' 1 0
               N>1:  0' 0 1 1* -> 0 1' 2 1*
[<-[--->+<]>.,>]  Add 86 to each cell to transform to Ws and Vs and print

5

オクターブ(MATLAB *)、31 30 28 27 22バイト

@(n)'CE'(1+(n>1==0:n))

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

プログラムは次のように機能します。

@(n)                   %Anonymous function to take input
            n>1==0:n   %Creates [1 0] if n is 1, or [0 1 (0 ...)] otherwise
         1+(        )  %Converts array of 0's and 1's to 1-indexed
    'CE'(            ) %Converts to ASCII by addressing in string

ここで使用するトリックは0:n、入力が1より大きいかどうかのシード配列のXNOR です。その結果n>1、シードは論理配列に変換さ[0 1 (0 ...)]n==1、シードはに反転し[1 0]、必要な反転を実現します。

残りは、シードを十分な車が追加された文字列に変換するだけです。


(*)TIOリンクのフッターコメントには、MATLABおよびOctaveで動作する同じバイト数の代替ソリューションが含まれていますが、「E」および「E」ではなく「0」および「1」のシーケンスになりますC '。完全を期すため、代替手段は次のとおりです。

@(n)['' 48+(n>1==0:n)]

  • n==1~=0:1ではなくを使用して1バイトを保存しました0:1~=(n<2)~=より優先されます<ので、オリジナルのブラケット、しかしであることを思わ~=そして==私たちは、バイトを保存することができます1と比較することによって、出現順に処理されます。

  • の否定2:nが実行される場所を変更することにより、2バイトを保存しました。これにより、括弧のペアが保存されます。また、後で無効になることを考慮して、~=to を変更する必要==があります。

  • <もう一度使用して1バイトを保存しました。結局、<同じ優先順位を持っていることがわかり==ます。の<前に計算を配置すると、==正しい実行順序が保証されます。

  • 2つの別個の配列を作成しないことにより、5バイトを節約しました。代わりに、XNOR比較は単一の範囲を論理に変換するという事実に依存しています。



@StewieGriffinありがとう:)。さらに5バイトをノックオフすることができました。
トムカーペンター



4

Python 3、32バイト

lambda n:f"{'CE'[n<2:]:C<{n+1}}"

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

形式にF-文字列式を使用してのいずれか'E'または'CE'を右に埋め'C'、それは幅を持っているのでn+1

f"{          :       }    a Python 3 f-string expression.
   'CE'[n<2:]             string slice based on value of n.
             :            what to format is before the ':' the format is after.
              C           padding character
               <          left align
                {n+1}     minimum field width based on n

4

Brain-Flak100 66バイト

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

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

"緊急レーンおよび!通常レーンとして使用します。


あらゆるもののこの言語を使用するための+1。XD
アレックス

2
@Alex、まあ、Brain-Flakは4月の月の言語です
ジョーキング

エイプリルフールの冗談ですか 今月の言語はどこで選出されますか?
アレックス

@Alexノミネートと投票ここでは、その後、月に固有のポストは、次のような作られ、この1
カミルDrakari

ああ、それはこのプラットフォーム上にあります。なるほど!:
アレックス


4

05AB1E、7バイト

Î>∍1I≠ǝ

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

0はC、1はEです。

説明

Î>          # Push 0 and input incremented            -- [0, 4]
  ∍         # Extend a to length b                    -- [0000]
   1I≠      # Push 1 and input falsified (input != 1) -- [0000, 1, 1] 
      ǝ     # Insert b in a at location C             -- [0100]
            # Implicit display

ああ、ずるいキツネ。$<×TìsiR私が考えていた方法でした。
魔法のタコ

@MagicOctopusUrnそれは面白いアプローチです!私も「if」構造を長引きましたが、少なくとも3バイトを必要とするため、異なるアプローチが必要です:
カルド

05AB1Eの新しいバージョンでは、1Iにゴルフできます$
ケビンCruijssen

5バイト(レガシーバージョンでも機能します)。
ケビンCruijssen

4

APL(Dyalog Unicode)21 17 16バイト

(-≠∘1)⌽'E',⍴∘'C'

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

4バイトを節約してくれたErikと、さらに1バイトを節約したAdámに感謝します。

どうやって?

(-≠∘1)⌽'E',⍴∘'C'  Tacit function
           ⍴∘'C'  Repeat 'C', according to the input
       'E',       Then append to 'E'
                 And rotate
    1)            1
  ≠∘              Different from the input? Returns 1 or 0
(-                And negate. This rotates 0 times if the input is 1, and once if not.

1
(⍵>1)括弧で囲む必要はありません。また、暗黙の関数を使用して4バイトを保存できます(⊢×1<⊢)⌽'E',⍴∘'C'
エリックアウトゴルファー

@EriktheOutgolferありがとう!今日は授業があったので、投稿してから黙って話す時間はありませんでした。家に帰ったら編集します。
J.サール


bytesio = 0の15バイト:'CE'[1(≠=∘⍳+)⎕]
ngn

@ngn私もできません...テストケースとのTIOリンクを取得できますか?...それを動作させるように見えることはできません
J.サール

4

Haskell35 33 32バイト

Angsのおかげで2バイト、Lynnのおかげで1バイト節約

(!!)$"":"EC":iterate(++"C")"CEC"

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

Haskell32 30 29バイト

これはインデックスがゼロであるため、チャレンジに準拠していません

g=(!!)$"EC":iterate(++"C")"CEC"

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

Haskell、30バイト

出力は文字列である必要があるため、これは機能しません

f 1=21
f 2=121
f n=10*f(n-1)+1

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

ここでは2、緊急回廊、1車に文字列の代わりに数字を使用します。110を掛けてを追加することで、末尾にa を追加でき1ます。連結と文字列リテラルのすべてのバイトを支払う必要がないため、これは安価です。

0代わりに使用する方が安価です1が、先行ゼロが必要であり、最終的にゼロになります。


((blah)!!)(!!)$blahあなたの最初の2つの答えでバイトを節約するようになります。
リン

@Lynnありがとう!私は以前にそれをやろうとしましたが、バイトを誤って数えたに違いありません。
小麦ウィザード




3

スタックス、7 バイト

ü♣àj#F 

実行してデバッグする

これは、文字「0」と「1」を使用します。サイズ1の配列を回転しても変化しないため、これは機能します。

開梱されていない、コメントされていない、これはこのように見えます。

1]( left justify [1] with zeroes. e.g. [1, 0, 0, 0]
|)  rotate array right one place
0+  append a zero
$   convert to string

これを実行する




3

ゼリー、6バイト

⁵*ṾṙỊṙ

車線を0、緊急車線を1として表示します。

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

使い方

⁵*ṾṙỊṙ  Main link. Argument: n

⁵*      Compute 10**n.
  Ṿ     Uneval; get a string representation.
   ṙỊ   Rotate the string (n≤1) characters to the left.
     ṙ  Rotate the result n characters to the left.

3

空白141の 104 103バイト

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_number][T    T   T   _Retrieve][S S S T  S N
_Push_2][T  S S T   _Subtract][S N
S _Duplicate_input-2][N
T   T   N
_If_negative_Jump_to_Label_-1][S S S T  N
_Push_1][S N
S _Duplicate_1][T   N
S T _Print_as_integer][S S T    T   N
_Push_-1][T N
S T _Print_as_integer][T    S S T   _Subtract][N
S S T   N
_Create_Label_LOOP][S N
S _Duplicate][N
T   T   S N
_If_negative_Jump_to_EXIT][S S S T  N
_Push_1][S N
S _Duplicate_1][T   N
S T _Print_as_integer][T    S S T   _Subtract][N
S N
T   N
_Jump_to_LOOP][N
S S N
_Create_Label_-1][T N
S T _Print_as_integer][N
S S S N
_Create_Label_EXIT]

強調表示としてのみ追加される文字S(スペース)、T(タブ)、およびN(改行)。
[..._some_action]説明としてのみ追加。

1代わりにCおよびの-代わりに印刷しEます。

andの代わりにandを使用することを提案する@JoKingのおかげで-1バイト。1-101

擬似コードの説明:

Integer i = STDIN-input as integer - 2
If i is negative (-1):
  Print i (so print "-1")
Else:
  Print "1-1"
  Start LOOP:
    If i is negative:
      EXIT program
    Print "1"
    i = i-1
    Go to the next iteration of the LOOP

実行例:

入力: 1

Command   Explanation                 Stack      Heap    STDIN   STDOUT   STDERR

SSSN      Push 0                      [0]
SNS       Duplicate top (0)           [0,0]
TNTT      Read STDIN as integer       [0]        {0:1}   1
TTT       Retrieve heap at 0          [1]        {0:1}
SSSTSN    Push 2                      [1,2]      {0:1}
TSST      Subtract top two            [-1]       {0:1}
SNS       Duplicate input-2           [-1,-1]    {0:1}
NTSN      If neg.: Jump to Label_-1   [-1]       {0:1}
NSSN      Create Label_-1             [-1]       {0:1}
TNST      Print top as integer        []         {0:1}           -1
NSSSN     Create Label_EXIT           []         {0:1}
                                                                         error

オンラインで試してください(未加工のスペース、タブ、改行のみ)。
エラーで停止します:終了が定義されていません。

入力: 4

Command   Explanation                   Stack      Heap    STDIN   STDOUT   STDERR

SSSN      Push 0                        [0]
SNS       Duplicate top (0)             [0,0]
TNTT      Read STDIN as integer         [0]        {0:4}   4
TTT       Retrieve heap at 0            [4]        {0:4}
SSSTSN    Push 2                        [4,2]      {0:4}
TSST      Subtract top two              [2]        {0:4}
SNS       Duplicate input-2             [2,2]      {0:4}
NTSN      If neg.: Jump to Label_-1     [2]        {0:4}
SSSTN     Push 1                        [2,1]      {0:4}
SNS       Duplicate top (1)             [2,1,1]    {0:4}
TNST      Print as integer              [2,1]      {0:4}           1
SSTTN     Push -1                       [2,1,-1]   {0:4}
TNST      Print as integer              [2,1]      {0:4}           -1
TSST      Subtract top two              [1]        {0:4}
NSSTN     Create Label_LOOP             [1]        {0:4}
 SNS      Duplicate top (1)             [1,1]      {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [1]        {0:4}
 SSSTN    Push 1                        [1,1]      {0:4}
 SNS      Duplicate top (1)             [1,1,1]    {0:4}
 TNST     Print as integer              [1,1]      {0:4}           1
 TSST     Subtract top two              [0]        {0:4}
 NSNTN    Jump to Label_LOOP            [0]        {0:4}

 SNS      Duplicate top (0)             [0,0]      {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [0]        {0:4}
 SSSTN    Push 1                        [0,1]      {0:4}
 SNS      Duplicate top (1)             [0,1,1]    {0:4}
 TNST     Print as integer              [0,1]      {0:4}           1
 TSST     Subtract top two              [-1]       {0:4}
 NSNTN    Jump to Label_LOOP            [-1]       {0:4}

 SNS      Duplicate top (-1)            [-1,-1]    {0:4}
 NTTSN    If neg.: Jump to Label_EXIT   [-1]       {0:4}
NSSSN     Create Label_EXIT             [-1]       {0:4}
                                                                            error

オンラインで試してください(未加工のスペース、タブ、改行のみ)。
エラーで停止します:終了が定義されていません。


-印刷を乱用するなどして、明確なレーンを印刷する方が簡単でしょう-1か?
ジョーキング

@JoKing残念ながらそれは長くなります。オンラインで112バイト試してください。確かに変わったpush_0print_as_integer; push_1; print_as_integerpush_-1; print_as_integer、しかし、引き換えに2つpush_0print_as_integerに置き換えられpush_45ます。print_as_character、ここでpush_0= SSSN、およびpush_45= SSSTSTTSTNです。また、push_45入力のために、スタックにすでにn=1ある複製0を印刷するので、追加も追加する必要があります。その0ため0、スタックに既にあるので、もう一度プッシュする必要はありませんでした。
ケビンCruijssen

私は-交換11交換するつもり0でした。そして、あなたは私の知る限り、これは私のチェック条件の前半に番号を印刷するに保存するが、わずか0ではなく1を押して上のコストを増加させる言うことができるように45をプッシュする必要があり、避けるだろうゴル> <>のための答えを私が意味する出力の例
ジョーキング

1
@JoKing私はそれを実装しようとしましたが、107バイトになりましたハイライトと説明を追加した同じコードです)。実際print_-1、print 0との代わりにon を保存しますが、ループの外側に1追加print_-1が必要です。編集:変更することにより、103バイトに減らすことができましたsubtract_1if_0_jump_to_ONE; push_-1; print_integersubtract_2; if_negative_jump_to_ONE; print_integer、-1が既にスタック上にあるため。-1バイトありがとう。:)
ケビンクルーッセン

3

AutoHotkey 32バイト

Cの量が1を超えない限り、文字「C」を「EC」に置き換え、「CEC」を送信してアプリを終了します。

::C::EC
:*:CC::CEC^c
^c::ExitApp

C => EC
CC => CECはプログラムを終了します。プログラムが終了すると、さらにCが入力されます。


3

APL + WIN、20 16バイト

Adámのおかげで4バイト節約

整数nのプロンプト:

(-2≠⍴n)⌽n←1⎕/⍕10

車の場合の緊急廊下oの場合は1。


16:(-2≠⍴n)⌽n←1⎕/⍕10
アダム

@Adámありがとう。ngnのトリック、1⎕/⍕が役に立つと思います。イディオムリスト用ですか?
グラハム

あなたはどんなイディオムリストについて話しているのですか?
アダム

アダム@私が最も頻繁に使用する2つのイディオムリストがFinnaplとAPL2idiomsある
グラハム

ここで何がイディオムなのかわかりません。それはちょうどゴルフです。とにかく、私のイディオムリストが興味を引くかもしれません。
アダム


3

MathGolf7 6 バイト

ú░\┴╜╪

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

出力1E0のためにC

説明:

ú         # 10 to the power of the (implicit) input
          #  i.e. 1 → 10
          #  i.e. 4 → 10000
         # Convert it to a string
          #  i.e. 10 → "10"
          #  i.e. 10000 → "10000"
  \       # Swap so the (implicit) input is at the top of the stack again
   ┴╜     # If the input is NOT 1:
         #  Rotate the string once towards the right
          #   i.e. "10000" and 4 → "01000"
          # Output everything on the stack (which only contains the string) implicitly
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.