Biraz aksiyon görelim!


24

Hızlı gürültülü arabalarla aksiyon filmlerini kim sevmez, özellikle çok fazla çarpışması olanlar? Bilim sanatında aksiyon çekimlerini kim sevmez?

Sahne şudur:

İki araba düz bir yolun karşı taraflarında başlıyor (aralarında 60 boşluk var). Sabit hızlarda birbirlerine doğru sürmeye başlarlar. Sola giden araba saniyede 1 alanda, sağa giden araba saniyede 2 alanda sürüyor.

Açıkçası, arabalar birbirinden geçemiyor, bu nedenle n ≥ 20, olay yeri, kazaların gerçekleştiği konumda kaputlu iki kaza yapmış araç olacak.

Bir film aşığı olarak, sahneyi güzelleştirmek için şimdi ve sonra duraklatmak istiyorum.

Tamsayı verildiğinde n(işlev argümanı veya STDIN), sahnenin başlangıcından itibaren saniye sayısını gösteren, o anda sahneyi gösterin.

Ön tekerlekler arasında 60 boşluk bulunan başlangıç ​​sahnesi:

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

11 saniye sonra sahne bu:

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

ve kazadan sonra göründüğü gibi budur (kaputların kazadan sonra hazır olduğunu unutmayın):

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

Sadece iki araba çarpmasını izlemekle ilgileniyorum, bu yüzden boşluklar, yeni çizgiler, ++ farketmez.

Bu kod golf, yani bayt cinsinden en kısa kod kazanır. Daha sonra eklenen cevaplar, geçerli cevaplardan daha kısa ise yine de kazanabilir.


2
Bu ima edildi, ancak çöküş (20'li yaşlarda?), Kasnakların / \ aşağı doğru tek hareket ettiği zaman _ _mı?
Sp3000

2
@StewieGriffin Güzel bir !!
Luis Mendo

Yanıtlar:


10

CJam, 68 66 bayt

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

Çevrimiçi deneyin

Kodun başlangıcını gören herkes bundan emin olacaktır liKe!

Açıklama:

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.

İlk dört karakter seçmenler için bilinçaltı bir mesaj mıdır?
John Dvorak

@JanDvorak Kesinlikle! :) Evet, artık tamamen yüceltici değildi çünkü işaret ettim. Orijinal bir niyet yok, ancak kodu cevaba yapıştırdığımda hemen fark ettim.
Reto Koradi 28:15

14

Labirent , 394 386 bayt

Gururla tanıtırım ...

<}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-

... yeni iki boyutlu esolang labirentim! Yukarıdaki kod son derece iyi golf oynamıyor (161 alan ve 25 NOP var, bu yüzden daha iyi bir düzen bunu çok kısaltabilirdi), ama en azından dilin önemsiz olmayan görevler için kullanılabilir olduğunu göstermeyi başardım. :)

Nasıl çalışır

İlk olarak, dile hızlı bir bakış:

  • Labirent, rasgele işaretlenmiş tamsayıları tutabilen ana ve yardımcı olmak üzere iki yığın üzerinde çalışır . Her iki baca dibinde sonsuz miktarda sıfır vardır.
  • Komutlar, 2B ızgaradaki ayrı karakterlerdir ve bir labirent oluştururlar (bu, bilinmeyen karakterler, özellikle boşluklar, duvarlardır). "bir duvar olmayan ve koddaki belirli yolları doldurmak için yardımcı olabilecek bir NOP'dir. Diğer birçok 2D dillere aksine, kenarları yok değil etrafına sarın.
  • Talimat göstericisi (IP), ilk olmayan duvar karakterinde (okuma sırasına göre) sağa doğru hareket eder. @programı sonlandırır.
  • Mümkünse, IP koridorları izler (ayrıca virajların çevresinde). IP, taşınacak birden fazla hücreye sahipse, genellikle ana yığının tepesi negatifse sola, sıfırsa dümdüz ilerlemeye veya pozitif ise sağa dönmeye başlar. IP bir duvara çarptığında, yönü tersine çevirir. (Birkaç tane daha incelik var, ancak bu kod için önemli değiller.) Kontrol akışını uygulamanın tek yolu bu.
  • Aritmetik ve yığın manipülasyon komutlarının yanı sıra, kaynak kodu, kaynak kodun >v<^bir satırını veya sütununu döngüsel olarak bir hücre tarafından değiştirecek dört komutla çalışma zamanında değiştirilebilir . Hangi satır veya sütunun etkileneceği yığının üstüne bağlıdır. IP'nin kendi satırı veya sütunu kaydırılırsa, kaydırma ile birlikte hareket eder. Bu, kaynak kodun bir kenarından diğerine atlamayı mümkün kılar.

Şimdi bu özel zorluk için, algoritmanın genel fikri şudur:

  • Araçların uçlarını, kapaklara (yani / \_o oo o) yardımcı istifin üzerine doğru bastırın .
  • Girişini okuma ve itmek için olmadığını belirlemek __veya /\sonraki.
  • Arabaların geri kalanını (yani __ __ _/ \iki ön boşluğu) yardımcı istifin üzerine doğru itin .
  • Girişi maksimum değerine kelepçeleyin 20, haydi bu N diyelim .
  • Şimdi aşağıdaki 3 kere yapın:
    • N boşluk yazdırın .
    • 6 kayıtlı karakter yazdırın.
    • 60 - 3 * N boşluk yazdırın .
    • 6 kayıtlı karakter yazdırın.
    • Yeni bir satır yazdır.

Son olarak, kodun bazı kısımlarına bakalım. IP, sol üst köşede, ızgara kaydırma komutuyla başlar. Ana yığının tepesi ( 0göreceli bir indeks olarak kullanılır), bu nedenle ilk satır sola kaydırılır, bu da IP'yi ızgaranın sağ ucuna taşır. Şimdi ilk satır basitçe sağdan sola yürütülür, bu da ilk sabit karakter kümesini yardımcı istifin üzerine iter:

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

Bu sıra kaydırma, çok miktarda doğrusal kodla başlamak istediğinizde golf oynamak için kullanışlıdır.

Sonra girişi okuyup doğru boneleri itiyoruz:

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

Üç NOP'lu soldaki bit, üst dal boyunca negatif, alt dal boyunca negatif olmayan sonuçlar gönderir. Sağ tarafta tekrar bir araya getirilirler.

Şimdi başka bir büyük doğrusal bölüm izler (muhtemelen başka bir satır değiştirme hilesiyle çok fazla golf oynanabilir):

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

Bu, araçların kalanını yardımcı istifin üzerine iter.

Sonra, min(20, input)ilk şubeye benzeyen hesaplıyoruz :

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

Son olarak, satırları yazdırmak için üç kez çalışan bir döngümüz var. Döngünün her yinelemesi, boşlukları basmak için iki küçük (3x3) ilmekin yanı sıra yardımcı yığından 6 karakter basmak için iki bölüm içerir:

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

Dikkat çekmek istediğim şık bir numara .{.{.sağ köşede. Bu bir çıkmaz yoldur, yani uçtan ayrı olarak ., kod iki kez, bir kez ileri ve bir kez geriye doğru yürütülür. Bu, palindromik kodu kısaltmak için temiz bir yol sunar.


Mücadelesi: Monospaced font içermeyen Labyrinth'te bir program yaz ;)
Beta Decay

1
@BetaDecay Bu herhangi bir dilde acı verici geliyor. ;)
Martin Ender

7

Python 2.7, 167 164 159 Bayt

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("//","\/")

Bu stdin'den girdi alır.
Demoyu
izleyin Bu testi -

$ ./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]basitçe min(n,20).
orlp

@orlp thanks :)
Kamehameha

Sen değiştirerek byte kaydedebilirsiniz (' \_',' \/')[s<1]ile ' \\\\_/'[s<1::2].
kirbyfan64sos

Ayrıca, lgerekli mi? Tamamen yapabilir for e in [' _',"_/ ","o "]:ve ltamamen kaldırabilir misiniz ?
kirbyfan64sos

@ kirbyfan64sos Evet, lşimdi gerekli değil. Daha önceki bir sürümde kullanmak zorunda kaldım. Thanks :)
Kamehameha

5

R, 191 Bayt

Şimdi alabildiğim kadar iyi. Saniyeyi STDIN'den ve kedileri STDOUT'a götürür.

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')

açıklama

# 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')

Testler

> 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
> 

İyi iş! Ve zekice kullanımı formals(). :)
Alex A.

@AlexA sadece sonunda beni kurtardı, ancak iki çöküşü görmek biraz rahatsız edici oldu
MickyT

Sen ve ben, "saldırgan" için çok farklı tanımlarımız var.
Alex A.

4

CJam, 120 bayt

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

gösteri

Ungolfed:

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

gösteri


Sol ve sağ araba için ayrı dizgilere sahip olmadan oldukça fazla miktarda kod kaydedebilmelisiniz, çünkü bunlar temelde aynıdır (çarpışma durumu hariç). Birkaç yerel iyileştirme: Değişken Jdeğeri 19, Kdeğeri 20, her biri bu sabitler için bir karaktere sahip. Tek elemanlı bir diziye ihtiyacınız varsa a, bir braket çifti kullanmak yerine, elemanı kaydırmak için operatörü kullanabilirsiniz .
Reto Koradi

İpuçları ve yayınlanan CJam kodu için teşekkürler. Aslında birçok diğer olası iyileştirmeleri görmek için çok yardımcı oluyor.
Razvan

4

PHP, 160 155 bayt

$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";

Kod, burada kod kutusunun düzenine uyması için 3 satırda görüntülenir. Bu yeni hatlara gerek yok.

Ungolfed kodu:

// 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");

Komut satırından saniye sayısını alır (ilk argüman):

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

PHP'nin CLI seçeneği -d error_reporting=0, PHP'nin belirsiz sabitler ( str_repeat, _) ile ilgili dizgelere (her bildirim için kaydedilmiş 2 bayt) dönüştürdüğü bazı bildirimleri gizlemek için gereklidir .

$fİlk kullanımına ilk kullanımı ( $m=($f=str_repeat)(...)) sıkarak bir ek bayt PHP 7'ye kaydedilebilir ; PHP 5'te derlenmez.

Test durumu ve kodu küçültmek için kullanılan tekniklerden bazıları github'da bulunabilir .

Güncelleştirme:

@ ismail-miguel, sıfırlamayı başlattı $leftve 4 bayt kaydetme $cargümanlarına işaret etti echo(aşağıdaki yoruma bakınız).

Sırayı değiştirerek değişkenler $mve silklendirmeler yapılır. Bir çift parantezden kurtuldum ve 1 bayt daha biriktirdim.


156 bayt:$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";
Ismael Miguel,

@IsmaelMiguel 155 bayt:$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

Bulgunun bir varyasyonunu denedim ve aslında daha uzun kodlar alıyorum Cevabınızı düzenleyebilir ve bayt sayısını güncelleyebilirsiniz
Ismael Miguel

Ayrıca o obir değişkene de ayıklamaya çalıştım ancak aynı uzunlukta veya daha kötüye gitti.
axiac

\nGerçek newlines ile değiştirebilirsiniz . Bunu unuttum. Ve her biri 1 bayt sayıyor
Ismael Miguel

3

JavaScript (ES6), 121 bayt

Şablon dizgisini kullanarak dizginin içindeki 2 yeni satır belirgindir ve sayılır.

Baytlardan tasarruf etmek için, alertkullanılan orantılı yazı tipi alertASCII sanatı için uygun olmasa ve sonuç n> = 20 (çarpışma) için çirkin olsa bile çıktı alın .

Snippet'i FireFox'ta çalıştırmayı test etme

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 bayt

Bu, araba çekmek için imleci doğru yere konumlandırmak için ANSI çıkış kodlarını kullanır. Daha sonra girişin 20 olup olmadığını kontrol eder, eğer öyleyse geri döner ve arabanın kaputlarına çizer.

Stdin'den inttout'a çıktı alır.

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)

Ungolfed:

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 bayt

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

Burada dene .

                                                                       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 bayt

#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]);}

ungolfed:

// 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]);
    }
}

Test programı:

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

çıktı:

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

Bu oldukça zor golf başardı. Sanırım neredeyse 300 byte ile başladım.

Fakat bunun hala tüm şartları yerine getirip getirmediğini bilmiyorum. 21 saniye sonra görebileceğiniz gibi, ilk araba ikinci aracı sağa doğru iter. Buna izin verilmezse birkaç bayt eklemem gerekir.

Düzenleme: düzeltildi. Bu Sharknado'dan daha gerçekçi olmalı ;-)

Düzenleme:printf Man sayfasına bir kez daha göz atarak çözümümü önemli ölçüde kısaltabilirim . Eğer '*' kullanırsanız, sprintfönceden bir format-string oluşturmak zorunda kalmadan, alan uzunluğunu doğrudan printf'e sağlayabilirsiniz .


Daha hızlı olan otomobil diğer arabanın ağırlığını telafi etmelidir. Vurulduktan sonra hareket etmemeliler veya belki de biraz sola hareket etmelidirler, çünkü sağdaki iki kat hız, fakat muhtemelen soldaki ağırlığın iki katı değildir.
mbomb007

3
@ Mbomb007 ile aynı fikirdeyim, ancak, Sharknado 3 , 4.5 IMDB derecesine sahip, bu yüzden cevabınız açıkça fiziğe meydan okuyor olsa da, yine de bazı olumlu tanıma hak ediyor olabilir =)
Stewie Griffin

Bence beklenen davranış soruda açıkça tanımlanmış (vurgu vurgulu): “Yeterince büyük olan her n için sahne çarpışmanın gerçekleştiği konumda iki kaza yaptı ”. Bunu okuduğum şekilde, kazadan sonra da aynı pozisyonda kalmalılar.
Reto Koradi

2

> <> , 538 276 bayt

 :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;

Boyutu LOT düşürdüm, boyutu yarıya indirmeyi başardığım için şaşırdım. Eskisi aşağıda. Bu, şebekenin genişliğinden dolayı, çoğunlukla ilk satırdan itibaren etkin bir performans göstermez.

Burada test edebilirsiniz . "Giriş" yerine "İlk Yığın" içinde geçen süreyi girin!

İşte eski sürüm.

: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 Karakter

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);}}

Un-golfed

  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);
     }
  }

Sonuçlar

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 bayt

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

Oldukça basit. Arabanın her satırı için, nboşlukları, o satırı, 60-3*nboşlukları ve satırı tekrar yazdırırız . Arabaları durdurmak yerine, yapmak yerine min(n,20), ilk park alanını sınırlandırmak için bir karakter daha kısaydı.[:20] ve ikincisi gayet iyi çünkü bir dize boş bir dize boşsa.

Çamurlukları yükseltmek için, sadece yapıyoruz replace. Yana __da çatıda görünür biz kontrol yüzden, çamurlukları tespit etmek bağlamında biraz gerekir /aşağıda.


1

Java, 270 267 bayt

Bunu yapmanın daha iyi / daha kısa bir yolu olduğundan eminim, ama beynim tam olarak oturmuyor.

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 için:

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

N = 20 için:

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

Ungolfed

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
Bunun sonuçları biraz yanlıştır. Arabalarınız birbirinden 59 karaktere ayrılıyor. Benim çözümüm bunu düzeltir ve Golfs biraz daha zor :)
Minimal

İyi yakalama ve aferin :)
Denham Coote,

1

PHP 7, 140 bayt

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

Kullanımı:

İçinde ANSI olarak kaydet file.php(içinde sıfır genişlikte karakter olmalı $o) ve çalıştır:

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

ile xsaniye sayısı olarak.

Ve hata raporlamayı değiştirmeden çalışan bir sürüm ( 148 bayt ):

<?$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 bayt

Kazanan değil ama bir şey

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"))
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.