いくつかのアクションを見てみましょう!


24

高速で騒がしい車、特にクラッシュの多い車のアクション映画を好まないのは誰ですか?アスキーアートのアクションショットが嫌いな人はいますか?

シーンは次のとおりです。

2台の車が直線道路の反対側から始まります(間に60個のスペースがあります)。彼らは一定の速度でお互いに向かって運転を開始します。左側の車は毎秒1スペースで運転し、右側の車は毎秒2スペースで運転します。

明らかに、車はお互いを通過できません。そのためn ≥ 20、シーンは、衝突が発生した位置にボンネットが上にある2台の衝突した車になります。

映画好きの私は、シーンの美しさを楽しむために、時々シーンを一時停止します。

nシーンの開始からの秒数を表す整数(関数引数またはSTDIN)を指定すると、その瞬間のシーンが表示されます。

これは開始シーンで、前輪の間に60のスペースがあります。

  __                                                                __
_/  \_                                                            _/  \_
o    o                                                            o    o

これは11秒後のシーンです。

             __                               __
           _/  \_                           _/  \_
           o    o                           o    o

これは、クラッシュ後の外観です(クラッシュ後にボンネットが立ち上がることに注意してください):

                      __    __
                    _/  \/\/  \_
                    o    oo    o

私は2台の車がクラッシュするのを見たいだけなので、スペース、改行、++は関係ありません。

これはコードゴルフであるため、バイト単位の最短コードが優先されます。後で追加された回答は、現在受け入れられている回答よりも短い場合でも勝つことができます。


2
暗示されていますが、ボンネットが/ \ ダウンするのではなく、アップするのはクラッシュ(20秒?)だけ_ _ですか?
Sp3000

2
@StewieGriffinいいね!!
ルイスメンドー

回答:


10

CJam、68 66バイト

liKe<:M"  __  _/  \_o    o"6/f{\S*1$+60M3*-S*@N}:+MK={58'/t59'\t}&

オンラインで試す

コードの開始を見た人は誰でも必ず liKe

説明:

li      Get input n and convert to integer.
Ke<     Cap n at 20.
:M      Save in variable M for multiple use later.
"  __  _/  \_o    o"
        Car (18 characters).
6/      Split into 3 lines of 6 characters.
f{      Map lines with parameter.
  \       Swap n to top.
  S*      Create string with n spaces for left margin.
  1$      Copy one car line to top. Keep original for second car
  +       Concatenate the spaces and car.
  60M3*-  Calculate 60-3*n, which is the amount of space between cars.
  S*      Create string with 60-3*n spaces.
  N       Add a newline.
}       End of line mapping.
:+      Concatenate all output pieces into single string.
MK=     Check if capped n is equal to 20.
{       If equal, replace hoods with crashed versions.
  58'/t   '/ at position 58.
  59'\t   '\ at position 59.
}&      End of conditional block for crashed hoods.

最初の4文字は有権者へのサブリミナルメッセージですか?
ジョンドヴォルザーク

@JanDvorak絶対に!:)さて、私はそれを指摘したので、もう完全にサブリミナルではありませんでした。元々の意図はありませんが、答えにコードを貼り付けたときにすぐに気付きました。
レトコラディ

14

ラビリンス394 386バイト

誇らしげに紹介します...

<}74}}:23}29}59}}}}}}}:111_}}}}:::::::23_}:111
?                        @
:" }}_47}_95    3""""""""(
 _ :       }    _   }    {=}
 2 23_}29_ _    ;   :      \
 0       ; 3  +_( 3_"  60{ .{.{.
"-_95:}}"" 2  0 ) 2 "  _ _ {
""       _ :  2 _ ."(; } 3 .{
 ;_92}_47} :  _ 0    = : *  ;
           : "" 2 {.{{ . -""(
}}:59_}}:::: "";_ .    {  _ "
}             "   {.{.{.  32.
}}}_95:}}}}_20-

...私の新しい二次元エゾラン迷宮!上記のコードは信じられないほどうまくゴルフされていません(161個のスペースと25個のNOPがあるので、レイアウトを改善することでこれを大幅に短縮できます)。:)

使い方

まず、言語の簡単な概要:

  • Labyrinthは、メイン補助の 2つのスタックで動作し、任意の符号付き整数を保持できます。両方のスタックの下部にゼロの無限の量があります。
  • コマンドは2Dグリッド上の個々のキャラクターであり、迷路を形成します(つまり、不明なキャラクター、特にスペースは壁です)。"は、壁ではないNOPであり、コード内の特定のパスにパディングするのに役立ちます。他の多くの2D言語とは異なり、エッジはラップアラウンドしませ
  • 命令ポインター(IP)は、右に移動する最初の壁以外の文字(読み取り順)から始まります。@プログラムを終了します。
  • 可能であれば、IPは廊下(曲がり角の周りも)をたどります。IPに移動先のセルが複数ある場合、メインスタックの上部が負の場合は一般に左に、ゼロの場合はまっすぐに移動し、正の場合は右に移動します。IPが壁にぶつかると、方向が逆になります。(さらに微妙な点がいくつかありますが、このコードにとっては重要ではありません。)これが制御フローを実装する唯一の方法です。
  • 算術およびスタック操作コマンドとは別に、ソースコードは、ソースコード>v<^の行または列を1セルずつ循環的にシフトする4つのコマンドで実行時に変更できます。影響を受ける行または列は、スタックの最上部によって異なります。IP自体の行または列がシフトされると、シフトとともに移動します。これにより、ソースコードの一方の端からもう一方の端にジャンプできます。

この特定の課題について、アルゴリズムの一般的な考え方を以下に示します。

  • 車の端をボンネット(つまり/ \_o oo o)まで押し上げて、補助スタックに取り付けます。
  • 入力を読んで、プッシュするか__/\次にするかを決定します。
  • 残りの車(__ __ _/ \および2つの先頭スペース)を補助スタックに押し込みます。
  • 入力を最大値にクランプします。20これをNと呼びましょう。
  • 次の3回を実行します。
    • Nスペースを印刷します。
    • 6つの保存された文字を印刷します。
    • 60-3 * Nスペースを印刷します。
    • 6つの保存された文字を印刷します。
    • 改行を印刷します。

最後に、コードの一部を見てみましょう。IPはグリッドシフトコマンドの左上隅から始まります。メインスタックの最上部は0(相対インデックスとして使用されます)、最初の行は左にシフトされ、IPもグリッドの右端に移動します。これで、最初の行が右から左に単純に実行され、固定文字の最初のセットが補助スタックにプッシュされます。

}74}}:23}29}59}}}}}}}:111_}}}}:::::::23_}:111<

この行シフトは、大量の線形コードで開始する場合のゴルフに役立ちます。

次に、入力を読み取り、正しいボンネットをプッシュします。

?  
:" 
 _ 
 2 
 0       ;
"-_95:}}""
""       _
 ;_92}_47}

3つのNOPを含む左側のビットは、上部の分岐に沿って負の結果を送信し、下部の分岐に沿って非負の結果を送信します。右側では、それらは再び結合されています。

次に、別の大きな線形セクションが続きます(おそらく、別の行シフトトリックで多くのゴルフをすることができます)。

   }}_47}_95 
   :       } 
   23_}29_ _ 
           3 
           2 
           : 
           : 
           : 
}}:59_}}:::: 
}
}}}_95:}}}}

これにより、残りの車が補助スタックにプッシュされます。

次に、を計算しますmin(20, input)。これは最初のブランチに似ています:

                ;
              +_(
              0 )
              2 _
              _ 0
             "" 2
             "";_
              "  
           _20-

最後に、行を印刷するために3回実行されるループがあります。ループの各反復には、スペースを印刷する2つの小さな(3x3)ループと、補助スタックから6文字を印刷する2つのセクションが含まれます。

                         @
                3""""""""(
                _   }    {=}
                    :      \
                  3_"  60{ .{.{.
                  2 "  _ _ {
                  ."(; } 3 .{
                     = : *  ;
                  {.{{ . -""(
                  .    {  _ "
                  {.{.{.  32.

私が注目したい気の利いたトリック.{.{.は、右端にあります。これは行き止まりなので.、最後とは別に、コードは2回実行されます。これにより、パリンドロームコードを短縮するための適切な方法が得られます(キャッチは、行き止まりを再び抜けるときにIPが正しいターンをすることを確認する必要があることです)。


課題:等幅フォントを使用せずにLabyrinthでプログラムを書く;)
ベータ崩壊

1
@BetaDecayそれはどの言語でも苦痛に聞こえます。;)
マーティン・エンダー

7

Python 2.7、 167 164 159バイト

n=input();s,x=60-3*n,min(n,20)
for e in['  _',"_/ ","o  "]:p=e+(e[::-1],(' \_',' \/')[s<1])['/'in e];print" "*x+p+" "*s+(p[-1]+p[1:-1]+p[0]).replace("//","\/")

これは、stdinから入力を受け取ります。
デモはこちら
これをテストする-

$ ./cars.py
0
  __                                                                __  
_/  \_                                                            _/  \_
o    o                                                            o    o

$ ./cars.py
11
             __                               __  
           _/  \_                           _/  \_
           o    o                           o    o

$ ./cars.py
20
                      __    __  
                    _/  \/\/  \_
                    o    oo    o

2
(n,20)[n>20]は単純min(n,20)です。
orlp

@orlpありがとう:)
カメハメハ

で置き換えること(' \_',' \/')[s<1]でバイトを保存できます' \\\\_/'[s<1::2]
kirbyfan64sos

また、l必要ですか?完全にfor e in [' _',"_/ ","o "]:削除することはできますlか?
kirbyfan64sos

@ kirbyfan64sosはい、l今は必要ありません。以前のバージョンで使用する必要がありました。ありがとう:)
カメハメハ

5

R、191バイト

今すぐ入手できます。STDINとcatsからSTDOUTに数秒かかります。

n=scan();p=paste0;formals(p)$collapse='';cat(sprintf(c('%s  __  %s  __  ','%s_/  \\_%s_/  \\_','%s_/  \\/%s\\/  \\_','%so    o%so    o')[-3+(n<21)],p(rep(' ',n)),p(rep(' ',60-n*3))),sep='\n')

説明

# Get the input from STDIN.  Requires a single number 0-20
n=scan();
# alias paste0 and set collapse default to ''
p=paste0;
formals(p)$collapse='';
# output
cat(
    # sprintf to format the strings
    sprintf(
        # vector of strings to format                                                      picks which bonnet to remove
        c('%s  __  %s  __  ','%s_/  \\_%s_/  \\_','%s_/  \\/%s\\/  \\_','%so    o%so    o')[-3+(n<21)]
        # move left car by 1
        ,p(rep(' ',n))
        # move right car by 2
        ,p(rep(' ',60-n*3))
    )
,sep='\n')

テスト

> n=scan();p=paste0;formals(p)$collapse='';cat(sprintf(c('%s  __  %s  __  ','%s_/  \\_%s_/  \\_','%s_/  \\/%s\\/  \\_','%so    o%so    o')[-3+(n==20)],p(rep(' ',n)),p(rep(' ',60-n*3))),sep='\n')
1: 0
2: 
Read 1 item
  __                                                                __  
_/  \_                                                            _/  \_
o    o                                                            o    o
> n=scan();p=paste0;formals(p)$collapse='';cat(sprintf(c('%s  __  %s  __  ','%s_/  \\_%s_/  \\_','%s_/  \\/%s\\/  \\_','%so    o%so    o')[-3+(n==20)],p(rep(' ',n)),p(rep(' ',60-n*3))),sep='\n')
1: 5
2: 
Read 1 item
       __                                                 __  
     _/  \_                                             _/  \_
     o    o                                             o    o
> n=scan();p=paste0;formals(p)$collapse='';cat(sprintf(c('%s  __  %s  __  ','%s_/  \\_%s_/  \\_','%s_/  \\/%s\\/  \\_','%so    o%so    o')[-3+(n==20)],p(rep(' ',n)),p(rep(' ',60-n*3))),sep='\n')
1: 20
2: 
Read 1 item
                      __    __  
                    _/  \/\/  \_
                    o    oo    o
> 

よくやった!そしての巧妙な使用formals()。:)
アレックスA.

@AlexAは最後に1人しか救いませんでしたが、2つの崩壊を見るのは少し不快
でした-MickyT

あなたと私は「攻撃的」の定義がまったく異なります。
アレックスA.

4

CJam、120バイト

q~20e<_["   "]*\[" _o"]\[" / " "_  " "_  " " \ " ]\[19>" /o"" _o"?]60 3 5$,*-["   "]*[0$," _o"" \o"?]3$[" _o"]+++++++zN*

デモ

ゴルフをしていない:

q~        e# Read the input
20e<      e# min(20, input) (let's call it N)
_         e# Duplicate the value on the stack
["   "]   e# Push 3 blank spaces
*         e# Create N arrays of 3 blank spaces
\         e# Swap the top two stack elements
[" _o"]   e# Push the " _o" string to stack
\         e# Swap the top two stack elements
[" / " "_  " "_  " " \ " ]
\         e#
[         e# If N is greater than 20 then push the array [" /o"],
  19      e# otherwise [" _o"]
  >
  " /o"
  " _o"
  ?
]
60        e# 60 is the maximum space between the two cars
3         e# 3 is the number of blocks covered per move
5$,       e# Take the 6th element from the stack (an array of size N)
*-        e# Compute the remaining blocks (60 - 3 * N)
["   "]   e# Add an array of 3 blank spaces
*         e# Multiply it to fit the remaining blocks
[0$," _o"" \o"?] e# Add the (broken?) front part of the second car
3$        e# Copy the middle part of the car
[" _o"]   e# Append the right side of the car
+++++++   e# Concatenate all arrays
z         e# Transpose the array
N*        e# Join the array using new lines

デモ


左と右の車に別々の文字列を持たないことで、コードがかなり節約できるはずです。なぜなら、それらは基本的に同じだからです(クラッシュの場合を除く)。いくつかのローカルの改善:変数のJ値が19、K値が20で、これらの定数ごとに文字が保存されます。1つの要素を持つ配列が必要な場合aは、角括弧のペアを使用する代わりに、演算子を使用して要素をラップできます。
レトコラディ

ヒントと投稿されたCJamコードをありがとう。実際に、他の多くの改善点を確認するのに役立ちます。
ラズバン

4

PHP、160 155バイト

$f=str_repeat;echo$l=$f(' ',$s=min(max($argv[1],0),20)),"  __  ",
$m=$f(' ',$r=60-3*$s),"  __\n{$l}_/  \\",$r?_.$m._:'/\\',
"/  \\_\n{$l}o    o{$m}o    o\n";

コードは、コードボックスのレイアウトに合わせて3行で表示されます。これらの改行は必要ありません。

改変されていないコード:

// The number of seconds, between (and including) 0 and 20
$sec  = min(max($argv[1], 0), 20);
$rest = 60 - 3 * $sec;

$left = str_repeat(' ', $sec);      // left padding
$mid  = str_repeat(' ', $rest);     // space in the middle
$c = $rest ? '_'.$mid.'_' : '/\\';

echo($left.'  __  '.$mid."  __\n");
echo($left.'_/  \\'. $c ."/  \\_\n");
echo($left.'o    o'.$mid."o    o\n");

コマンドラインから秒数を取得します(最初の引数):

$ php -d error_reporting=0 action.php 11
             __                               __
           _/  \_                           _/  \_
           o    o                           o    o

PHP CLIオプション-d error_reporting=0は、PHPが文字列に変換する未定義の定数(str_repeat_)について表示する通知を隠すために必要です(通知ごとに2バイトが保存されます)。

PHP 7では、初期化を$f最初の使用($m=($f=str_repeat)(...))に絞ることにより、追加の1バイトを保存できます。PHP 5ではコンパイルされません。

テストケースとコードを縮小するために使用されるテクニックのいくつかはgithubにあります。

更新:

@ ismail-miguelは、4バイトを保存する引数の初期化を絞り込み、$leftインライン化$cしましたecho(以下のコメントを参照)。

変数$ms初期化の順序を入れ替えることで、1組の括弧を取り除き、さらに1バイト節約しました。


156バイト:$f=str_repeat;$m=$f(' ',$r=60-3*($s=min(max($argv[1],0),20)));echo$l=$f(' ',$s)," __ $m __\n{$l}_/ \\",$r?_.$m._:'/\\',"/ \\_\n{$l}o o{$m}o o\n";
イスマエルミゲル

@IsmaelMiguel 155バイト:$f=str_repeat;echo$l=$f(' ',$s=min(max($argv[1],0),20))," __ ",$m=$f(' ',$r=60-3*$s)," __\n{$l}_/ \\",$r?_.$m._:'/\\',"/ \\_\n{$l}o o{$m}o o\n";
axiac

あなたの発見のバリエーションを試してみましたが、実際にはより長いコードが得られました。あなたの答えを編集し、バイトカウントを更新することができます
イスマエルミゲル

またo o、変数に抽出しようとしましたが、同じ長さまたはそれ以上になりました。
axiac

\nを実際の改行に置き換えることができます。私はそれを忘れていました。そして、それはそれぞれ1バイトとしてカウントされます
イスマエル・ミゲル

3

JavaScript(ES6)、121バイト

テンプレート文字列を使用すると、文字列内の2つの改行が重要でカウントされます。

バイトを節約するにはalert、で使用されるプロポーショナルフォントalertがASCIIアートにあまり適しておらず、結果がn> = 20(クラッシュ)でい場合でも、で出力します。

FireFoxでスニペットを実行するテスト

F=n=>alert(`  __  
_/  \\_
o    o`.replace(/.+/g,v=>(Z=x=>' '.repeat(x)+v)(n<20?n:n=20)+Z(60-3*n)).replace('__/','/\\/'))
<input id=I value=10><button onclick='F(I.value)'>go</button>


2

Python 2、148バイト

これは、ANSIエスケープコードを使用して、カーソルを正しい場所に配置して車を描画します。次に、入力が20であったかどうかを確認し、20だった場合は戻り、車のボンネットに描画します。

stdinからintを受け取り、stdoutに出力します。

p=lambda x:"u  __u_/  \_uo    o".replace("u","\n\033[%dC")%(x,x,x)+"\033[4A";i=min(20,input());print p(i)+"\n"+p(66-i*2)+"\n\n\n\033[25C/\\"*(i==20)

ゴルフをしていない:

def get_car(x):
    return "\n  __\n_/  \_\no    o".replace("\n","\n\033[%dC")%(x,x,x)+"\033[4A"

i=min(20,input())
print get_car(i)
print get_car(66-i*2)
if i==20:
    print"\n\n\033[25C/\\"

2

Pyth、67バイト

Kjbm+++*\ JhS,Q20d*\ -60*3Jdc3"  __  _/  \_o    o"?nJ20KXXK58\/59\\

ここで試してみてください

                                                                       Implicit: Q=eval(input())
          JhS,Q20                                                      Set J=min(Q,20)
                              "  __  _/  \_o    o"                     Concatenated car string
                            c3                                         Split into 3
   m                                                                   For d in the above
       *\ J                                                            J spaces before 1st car
                  *\ -60*3                                             60-3J spaces in between them
    +++          d         d                                           Concatenate spaces and car string
Kjb                                                                    Join on newlines, store in K
                                                  ?nJ20                If J != 20...
                                                       K               ... print K
                                                         XK58\/        ... else put / in position 58
                                                        X      59\\        and \ in position 59 (implicit print)

2

C、180の 191 168バイト

#define S(x,y)"  __  ",#x"/  \\"#y,"o    o",
char*s[][3]={S(_,_)S(_,/)S(\\,_)};i;l;f(n){l=n>19&&(n=20);for(i=0;i<3;i++)printf("%*s%*s\n",n+6,s[l][i],60-3*n,s[l*2][i]);}

なし:

// make a map of possible car parts
#define S(x, y) { "  __  ", #x "/  \\" #y, "o    o" }
char * s[4][3]= {
    S(_,_),
    S(_,/),
    S(\\,_)
};
i,l;
f(n){
    i = 0;
    l = n>19 && (n = 20); // l = 1, if crash happend
    for(; i < 3; i++) {
        // '*' means length (padding) is given as an int argument
        printf("%*s%*s\n", n + 6, s[l][i], 60 - 3 * n, s[l*2][i]);
    }
}

テストプログラム:

main() {
    f( 0);f( 5);f(10);
    f(15);f(20);f(21);
    return 0;
}

出力:

  __                                                          __
_/  \_                                                      _/  \_
o    o                                                      o    o
       __                                           __
     _/  \_                                       _/  \_
     o    o                                       o    o
            __                            __
          _/  \_                        _/  \_
          o    o                        o    o
                 __             __
               _/  \_         _/  \_
               o    o         o    o
                      __    __
                    _/  \/\/  \_
                    o    oo    o
                      __    __
                    _/  \/\/  \_
                    o    oo    o

これをかなり一生懸命ゴルフできました。私はほぼ300バイトから始めたと思います。

しかし、これがまだすべての要件を満たしているかどうかはわかりません。21秒後にわかるように、最初の車が2番目の車を右に押します。これが許可されていない場合は、数バイトを追加する必要があります。

編集:修正しました。これはSharknadoよりも現実的です;-)

編集:printfマンページをもう一度見ると、ソリューションを大幅に短縮できます。'*'を使用すると、sprintf事前にformat-stringを作成しなくても、printfにフィールド長を直接指定できます。


より速い車は他の車の重さを補うべきです。右側に2倍の速度がありますが、おそらく左側に2倍の重さはないので、叩いた後に移動したり、少し左に移動したりすることはありません。
mbomb007

3
@ mbomb007には同意しますが、Sharknado 3のIMDB評価は4.5であるため、あなたの答えは明らかに物理学に反していますが、それでも肯定的な認識に値する可能性があります=)
Stewie Griffin

予想される動作は質問で明確に定義されていると思います(強調を追加):「十分に大きいnの場合、シーンはクラッシュが発生した位置で 2台のクラッシュした車になります」。私がこれを読んだ方法では、クラッシュ後も無期限に同じ位置に留まるはずです。
レトコラディ

2

> <>538 276バイト

 :3*a6*$-:0)?v~~a2*0c4*1-e2*1+6pa9*2+b7p04.
  v          >04.
 >>1[>:0)  ?v~].
  ^  ^-1o" "<
\$:&94&12." ":oo"_":oo" ":oo
\$:&95&12." ":oo"_":oo" ":ooao
\$:&96&12."_"o"/"o" ":oo"\"o"_"o
\$:&97&12."_"o"/"o" ":oo"\"o"_"oao
\$:&98&12."o"o" ":::oooo"o"o
\$:&99&12."o"o" ":::oooo"o"o;

サイズを大幅に落としましたが、サイズを半分に落としたことに驚いています。古いものは下にあります。これは、グリッドの幅のために、ほとんどの場合最初の行から効率的なパフォーマンスではありません。

ここでテストできます。経過した時間を「入力」ではなく「初期スタック」に入れてください!

これが古いバージョンです。

:3*a6*$-:0)  ?v~~a2*0c4*1-c3*1-4p^                        
v~v?)0:  <[1:$/$:1[ >:0)  ?v~]" ":oo"_":oo" ":ooaov       
] >" "o1-^    ^    <^-1o" "/"/"o"_"<]~v?)0:  <[1:$<       
>" ":oo"_":oo" ":oo^       \o" ":oo"\"\" "o1-^            
/o"\"oo:" "o"/"o"_"]~v?)0:  <[1:$o"_"o/                   
\"_"oaov   hi there  >" "o1-^                             
       >$:1[ >:0)  ?v~]"o"o" ":::oooo"o"o>$:1[ >:0)  ?v~]v
       ^    <^-1o" "<                    ^    <^-1o" "<   
              v      p4-1*29+2*9a<    ;o"o"oooo:::" "o"o"<

2

Java、258文字

class M{public static void main(String[]a){String l="",m=l,r="  __  ",w="o    o",x="_/  \\_";int p=Integer.parseInt(a[0]),i=20;p=p>i?i:p;for(i=-1;++i<p;)l+=" ";for(;++i<21;)m+="   ";System.out.print(l+r+m+r+"\n"+l+(x+m+x).replace("__","/\\")+"\n"+l+w+m+w);}}

非ゴルフ

  class M {
     public static void main(String[] a) {
        String l = "", m = l, r = "  __  ", w = "o    o", x = "_/  \\_";
        int p = Integer.parseInt(a[0]), i = 20;
        p = p > i ? i : p;
        for (i = -1; ++i < p;)
           l += " ";
        for (; ++i < 21;)
           m += "   ";
        System.out.print(l + r + m + r + "\n"
              + l + (x + m + x).replace("__", "/\\") + "\n"
              + l + w + m + w);
     }
  }

結果

0
  __                                                                __  
_/  \_                                                            _/  \_
o    o                                                            o    o

1
   __                                                             __  
 _/  \_                                                         _/  \_
 o    o                                                         o    o

...

19
                     __       __  
                   _/  \_   _/  \_
                   o    o   o    o

20
                      __    __  
                    _/  \/\/  \_
                    o    oo    o

21
                      __    __  
                    _/  \/\/  \_
                    o    oo    o      

2

Python 2、102バイト

n=input()
for r in"  __  ","_/  \_","o    o":print((n*' ')[:20]+r+(60-3*n)*' '+r).replace('__/','/\/')

とても簡単です。車の行ごとに、nスペース、その行、60-3*nスペース、および行を再度印刷します。車を止めるのではなくmin(n,20)、スペースの最初の実行を制限するために1文字短くしました[:20]、2番目は文字列の負の倍数が空の文字列なので問題ありません。

フェンダーを上に移動するには、を実行しreplaceます。以来__また、屋根の上に表示されます、我々はをチェックして、我々は、フェンダーを識別するために、コンテキストのビットを必要とし/、以下の通りです。


1

Java、 270 267バイト

これを行うためのより良い/より短い方法があることは確かですが、私の脳は適切に関与していません。

class C{public static void main(String[]a){String l="",m="",r="  __  ",w="o    o";int p=Math.min(Integer.parseInt(a[0]),20),i;for(i=0;++i<p;)l+=" ";for(i=0;++i<60-3*p;)m+=" ";System.out.print(l+r+m+r+"\n"+l+"_/  \\"+(p==20?"/"+m+"\\":"_"+m+"_")+"/  \\_\n"+l+w+m+w);}}

n = 19の場合:

                    __      __  
                  _/  \_  _/  \_
                  o    o  o    o

n = 20の場合:

                     __    __  
                   _/  \/\/  \_
                   o    oo    o

非ゴルフ

public class Crash { public static void main(String[] args) { String left="", mid="", r=" __ ", w="o o"; int pos = Math.min(Integer.parseInt(args[0]),20),i; for (i=0; ++i<pos;){ left+=" "; } for (i=0; ++i<60-3*pos;){ mid+=" "; } System.out.print( left + r + mid + r + "\n" + left + "_/ \\" + (pos==20 ? "/" + mid + "\\" : "_" + mid + "_") + "/ \\_\n" + left + w + mid + w); } }

1
この結果はわずかに不正確です。あなたの車は59文字しか離れていません。私の解決策はこれを修正し、あなたのゴルフを少し難しくします:)
最小

グッドキャッチ&よくやった:)
デンハムクート

1

PHP 7、140バイト

<?$s=$argv[1];$r=($f=str_repeat)(~ß,60-3*$s);echo$l=$f(~ß,min(20,$s)),"  __  $r  __  
${l}_/  \\",$r?_.$r._:~У,"/  \_
$l",$o=~ßßßß,$r,$o;

使用法:

にANSIとして保存しfile.php(にゼロ幅の文字があるはずです$o)、実行します:

php -derror_reporting=~E_NOTICE -dshort_open_tag=1 file.php x

x秒数。

そして、エラー報告を変更せずに動作するバージョン(148バイト):

<?$s=$argv[1];$r=($f=@str_repeat)(' ',60-3*$s);echo$l=$f(' ',min(20,$s)),"  __  $r  __  
${l}_/  \\",$r?"_${r}_":"/\\","/  \_
$l",$o="o    o",$r,$o;

1

Javascript、193バイト

それは勝者ではありませんが、それは何かです

http://jsfiddle.net/yb703y0p/2/

function f(n){
c = ["  __  A", "_/  \\_A", "o    oA"]
for(i=0;i<3;i++)c[i]=c[i].replace('A',' '.repeat(n))+c[i].replace('A','')
if(n==0)c[1]=c[1].replace('__','/\\')
console.log(c.join("\n"))
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.