Vediamo un po 'di azione!


24

Chi non ama i film d'azione con macchine rumorose e veloci, specialmente quelli con molti incidenti? Chi non ama i colpi d'azione nell'arte ascii?

La scena è:

Due auto stanno iniziando ai lati opposti di una strada diritta (con 60 spazi tra). Cominciano a guidare l'uno verso l'altro a velocità costante. L'auto a sinistra guida a 1 spazio al secondo e quella a destra guida a 2 spazi al secondo.

Ovviamente, le auto non possono attraversarsi, quindi n ≥ 20, la scena sarà di due auto distrutte con cofani nella posizione in cui si è verificato l'incidente.

Come amante del cinema, voglio mettere in pausa la scena di tanto in tanto, solo per goderne la bellezza.

Dato un numero intero n(argomento della funzione o STDIN), che rappresenta il numero di secondi dall'inizio della scena, mostra la scena in quel momento.

Questa è la scena iniziale, con 60 spazi tra le ruote anteriori:

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

questa è la scena dopo 11 secondi:

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

e questo è come appare dopo l'incidente (nota che i cofani sono alzati dopo l'incidente):

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

Sono interessato solo a vedere due macchine che si schiantano, quindi gli spazi, le nuove righe, ++ non contano.

Questo è il codice golf, quindi vince il codice più breve in byte. Le risposte aggiunte in seguito possono comunque vincere se sono più brevi della risposta attualmente accettata.


2
È implicito, ma lo schianto (anni '20?) È l'unica volta in cui i cofani sono sollevati / \ anziché abbassati _ _?
Sp3000,

2
@StewieGriffin Nice one !!
Luis Mendo,

Risposte:


10

CJam, 68 66 byte

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

Provalo online

Chiunque vedrà l'inizio del codice ne sarà sicuro liKe!

Spiegazione:

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.

I primi quattro personaggi sono un messaggio subliminale per gli elettori?
John Dvorak,

@JanDvorak Absolutely! :) Beh, non era più completamente subliminale perché l'ho sottolineato. Nessuna intenzione originale, ma l'ho notato immediatamente quando ho incollato il codice nella risposta.
Reto Koradi,

14

Labyrinth , 394 386 byte

Vi presento con orgoglio ...

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

... il mio nuovo esolang bidimensionale Labyrinth! Il codice sopra non è incredibilmente ben golfato (ci sono 161 spazi e 25 NOP, quindi un layout migliore potrebbe abbreviare molto questo), ma almeno sono riuscito a dimostrare che il linguaggio è utilizzabile per attività non banali. :)

Come funziona

Innanzitutto, una rapida panoramica della lingua:

  • Labyrinth opera su due pile, principale e ausiliaria , che può contenere numeri interi con segno arbitrario. Nella parte inferiore di entrambe le pile c'è una quantità infinita di zero.
  • I comandi sono singoli personaggi su una griglia 2D e formano un labirinto (ovvero i caratteri sconosciuti, in particolare gli spazi, sono muri). "è un NOP che non è un muro e può essere utile per riempire determinati percorsi nel codice. A differenza di molti altri linguaggi 2D, i bordi non si avvolgono.
  • Il puntatore dell'istruzione (IP) inizia dal primo carattere non a muro (in ordine di lettura) spostandosi verso destra. @termina il programma.
  • Se possibile, l'IP segue i corridoi (anche attorno alle curve). Se l'IP ha più celle su cui spostarsi, generalmente girerà a sinistra se la parte superiore dello stack principale è negativa, si sposta in avanti se è zero o gira a destra se è positiva. Quando l'IP colpisce un muro, inverte la direzione. (Ci sono alcune altre sottigliezze, ma non dovrebbero importare per questo codice.) Questo è l'unico modo per implementare il flusso di controllo.
  • Oltre ai comandi di manipolazione aritmetica e dello stack, il codice sorgente può essere modificato in fase di esecuzione con i quattro comandi >v<^ che sposteranno ciclicamente una riga o colonna del codice sorgente di una cella. La riga o colonna interessata dipende dalla parte superiore della pila. Se la riga o colonna dell'IP viene spostata, si sposterà con lo spostamento. Ciò consente di saltare da un bordo all'altro del codice sorgente.

Ora per questa sfida particolare, ecco l'idea generale dell'algoritmo:

  • Spingere le estremità delle auto verso i cofani (es / \_o oo o ) Sulla pila ausiliaria.
  • Leggi l'input e determina se spingere __ o /\successivo.
  • Spingere il resto delle auto (es __ __ _/ \ e due spazi iniziali) sulla pila ausiliaria.
  • Blocca l'input su un valore massimo di 20, chiamiamolo N .
  • Ora esegui le seguenti 3 volte:
    • Stampa N spazi.
    • Stampa 6 caratteri memorizzati.
    • Stampa 60 - 3 * N spazi.
    • Stampa 6 caratteri memorizzati.
    • Stampa una nuova riga.

Infine, diamo un'occhiata ad alcune parti del codice. L'IP inizia nell'angolo in alto a sinistra, con un comando di spostamento della griglia. La parte superiore dello stack principale è 0(che viene utilizzata come indice relativo), quindi la prima riga viene spostata a sinistra, il che sposta anche l'IP all'estremità destra della griglia. Ora la prima riga viene semplicemente eseguita da destra a sinistra, il che spinge il primo set di caratteri fissi sullo stack ausiliario:

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

Questo spostamento di riga è utile per giocare a golf quando si desidera iniziare con una grande quantità di codice lineare.

Quindi leggiamo l'ingresso e spingiamo i cofani corretti:

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

Il bit a sinistra con i tre NOP invia risultati negativi lungo il ramo superiore e risultati non negativi lungo il ramo inferiore. A destra sono riuniti insieme.

Ora segue un'altra grande sezione lineare (che probabilmente potrebbe essere giocata a golf molto con un altro trucco che sposta le file):

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

Questo spinge il resto delle auto sulla pila ausiliaria.

Quindi, calcoliamo min(20, input), che è simile al primo ramo:

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

Infine, abbiamo il ciclo che viene eseguito tre volte per stampare le linee. Ogni iterazione del loop contiene due piccoli (3x3) loop per stampare gli spazi, nonché due sezioni per stampare 6 caratteri dalla pila ausiliaria:

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

Un trucco ingegnoso a cui vorrei attirare l'attenzione è quello .{.{.sul bordo destro. Questo è un vicolo cieco, quindi a parte .la fine il codice viene eseguito due volte, una volta in avanti e una volta all'indietro. Questo offre un modo accurato per abbreviare il codice palindromico (il problema è che è necessario assicurarsi che l'IP faccia la svolta corretta quando si esce di nuovo dal vicolo cieco).


Sfida: scrivere un programma in Labyrinth senza un carattere a spaziatura fissa;)
Decadimento beta

1
@BetaDecay Sembra doloroso in qualsiasi lingua. ;)
Martin Ender,

7

Python 2.7, 167 164 159 byte

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

Questo richiede input dallo stdin.
Demo qui
Testing this -

$ ./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]è semplicemente min(n,20).
orlp,

@orlp thanks :)
Kamehameha il

È possibile salvare un byte sostituendolo (' \_',' \/')[s<1]con ' \\\\_/'[s<1::2].
Kirbyfan64sos,

Inoltre, è lnecessario? Potresti semplicemente fare for e in [' _',"_/ ","o "]:e rimuovere del ltutto?
Kirbyfan64sos,

@ kirbyfan64sos Sì, lnon è necessario ora. Ho dovuto usarlo in una versione precedente. Grazie :)
Kamehameha,

5

R, 191 byte

Circa buono come posso ottenerlo ora. Prende i secondi da STDIN e gatti a 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')

Spiegazione

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

test

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

Bel lavoro! E un uso intelligente di formals(). :)
Alex A.

@AlexA mi ha salvato solo uno alla fine, ma vedere i due crolli è stato un po 'offensivo
MickyT

Tu ed io abbiamo definizioni molto diverse di "offensivo".
Alex A.

4

CJam, 120 byte

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

dimostrazione

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

dimostrazione


Dovresti essere in grado di salvare un bel po 'di codice non avendo stringhe separate per la macchina sinistra e destra, dal momento che sono sostanzialmente le stesse (tranne per il caso dello schianto). Un paio di miglioramenti locali: la variabile Jha valore 19, Kha valore 20, salvando un carattere ciascuno per quelle costanti. Se è necessario un array con un elemento, è possibile utilizzare l' aoperatore per avvolgere l'elemento, anziché utilizzare una coppia di parentesi.
Reto Koradi,

Grazie per i suggerimenti e per il codice CJam pubblicato. In realtà aiuta molto a vedere molti altri possibili miglioramenti.
Razvan,

4

PHP, 160 155 byte

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

Il codice viene visualizzato qui su 3 righe per adattarsi al layout della casella del codice. Quelle newline non sono necessarie.

Il codice ungolfed:

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

Ottiene il numero di secondi dalla riga di comando (primo argomento):

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

L'opzione CLI PHP -d error_reporting=0è necessaria per nascondere alcuni avvisi che PHP visualizza sulle costanti indefinite ( str_repeat, _) che converte in stringhe (2 byte salvati per ogni avviso).

Un byte aggiuntivo può essere salvato su PHP 7 premendo l'inizializzazione $fnel suo primo utilizzo ( $m=($f=str_repeat)(...)); non si compila su PHP 5.

Il caso di test e alcune delle tecniche utilizzate per ridurre il codice sono disponibili su github .

Aggiornare:

@ ismail-miguel ha compresso l'inizializzazione $lefte integrato $cnegli argomenti per il echosalvataggio di 4 byte (vedi commento sotto).

Scambiando l'ordine le variabili $me svengono inizializzate mi sono liberato di una coppia di parentesi e ho salvato 1 byte in più.


156 byte:$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 byte:$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

Ho provato una variante del tuo risultato e in realtà ho ottenuto un codice più lungo. Puoi modificare la tua risposta e aggiornare il conteggio dei byte
Ismael Miguel,

Ho anche provato a estrarre o oin una variabile ma ho ottenuto la stessa lunghezza o peggio.
axiac,

Puoi sostituirlo \ncon newline reali. Me ne sono dimenticato. E conta 1 byte ciascuno
Ismael Miguel,

3

JavaScript (ES6), 121 byte

Utilizzando la stringa modello, le 2 nuove righe all'interno della stringa sono significative e contate.

Per salvare i byte, output con alert, anche se il font proporzionale utilizzato in alertnon è adatto per l'arte ASCII e il risultato è brutto per n> = 20 (crash).

Prova a eseguire lo snippet in 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 byte

Questo utilizza i codici di escape ANSI per posizionare il cursore nel posto giusto per disegnare le auto. Quindi controlla se l'ingresso era 20, se lo era, torna indietro e disegna sui cofani dell'auto.

Prende un int da stdin, output a 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)

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 byte

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

Provalo qui .

                                                                       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 byte

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

programma di test:

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

produzione:

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

Sono stato in grado di giocare a golf abbastanza difficile. Penso di aver iniziato con quasi 300 byte.

Ma non so se questo soddisfa ancora tutti i requisiti. Come puoi vedere dopo 21 secondi, la prima auto spinge la seconda auto verso destra. Dovrei aggiungere qualche byte se questo non è permesso.

Modifica: risolto. Questo dovrebbe essere più realistico di Sharknado ;-)

Modifica: potrei accorciare significativamente la mia soluzione dando una seconda occhiata alla printfpagina di manuale. Se usi '*' puoi fornire la lunghezza del campo direttamente a printf, senza la necessità di creare in sprintfanticipo una stringa di formato .


L'auto più veloce dovrebbe compensare la pesantezza dell'altra auto. Non dovrebbero muoversi dopo aver colpito, o potrebbero anche spostarsi un po 'a sinistra, poiché il doppio della velocità a destra, ma probabilmente non il doppio del peso a sinistra.
mbomb007,

3
Sono d'accordo con @ mbomb007, ma Sharknado 3 ha un rating IMDB di 4,5, quindi anche se la tua risposta sta ovviamente sfidando la fisica, potrebbe comunque meritare un riconoscimento positivo =)
Stewie Griffin

Penso che il comportamento atteso sia chiaramente definito nella domanda (enfasi aggiunta): "per ogni n abbastanza grande, la scena sarà di due macchine precipitate nella posizione in cui si è verificato l'incidente ". Il modo in cui l'ho letto, dovrebbero rimanere nella stessa posizione indefinitamente dopo l'incidente.
Reto Koradi,

2

> <> , 538 276 byte

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

Ho lasciato cadere le dimensioni MOLTO, sono sorpreso di essere riuscito a ridurre le dimensioni della metà. Quello vecchio è sotto. Questo non è altrettanto efficiente dal punto di vista delle prestazioni a causa della larghezza della griglia, principalmente dalla prima riga.

Puoi provarlo qui . Inserisci il tempo trascorso nello "Stack iniziale", non in "Input"!

Ecco la vecchia versione.

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

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

risultati

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 byte

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

Abbastanza diretto. Per ogni fila dell'auto, stampiamo di nuovo nspazi, quella fila, gli 60-3*nspazi e la fila. Per fermare le macchine, invece di farlo min(n,20), era un solo carattere più breve per limitare la prima corsa di spazi[:20] , e la seconda va bene perché un numero di volte negativo è una stringa vuota.

Per alzare i parafanghi, facciamo solo un replace. Dal momento che __appare anche sul tetto, abbiamo bisogno di un po 'di contesto per identificare i parafanghi, quindi controlliamo per un /seguito.


1

Java, 270 267 byte

Abbastanza sicuro che ci sia un modo migliore / più breve per farlo, ma il mio cervello non è adeguatamente impegnato.

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

Per n = 19:

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

Per n = 20:

                     __    __  
                   _/  \/\/  \_
                   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
I risultati sono leggermente errati. Le tue auto iniziano a soli 59 caratteri a parte. La mia soluzione risolve questo problema e Golfs è un po 'più difficile :)
Minimo

Buona cattura e ben fatto :)
Denham Coote

1

PHP 7, 140 byte

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

Uso:

Salva come ANSI in file.php(dovrebbero essere presenti caratteri di larghezza zero in $o) ed esegui:

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

con xcome il numero di secondi.

E una versione che funziona senza modificare la segnalazione errori ( 148 byte ):

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

Non è un vincitore, ma è qualcosa

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"))
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.