चलो कुछ कार्रवाई देखते हैं!


24

तेज शोर वाली कारों के साथ एक्शन फिल्में किसे पसंद नहीं हैं, विशेष रूप से उन दुर्घटनाओं के साथ? एस्की आर्ट में एक्शन शॉट्स किसे पसंद नहीं हैं?

दृश्य है:

दो कारें एक सीधी सड़क के विपरीत किनारों (60 स्थानों के बीच) से शुरू हो रही हैं। वे लगातार गति से एक-दूसरे की ओर ड्राइव करना शुरू करते हैं। बाईं ओर की कार प्रति सेकंड 1 स्थान पर और दूसरी से 2 स्थानों पर दाहिने ड्राइव के लिए जाती है।

जाहिर है, कारों को एक दूसरे के माध्यम से पारित नहीं किया जा सकता है, इसलिए n ≥ 20, दृश्य दुर्घटनाग्रस्त होने की स्थिति में बोनट के साथ दो दुर्घटनाग्रस्त कारें होंगी।

एक फिल्म प्रेमी के रूप में, मैं इस दृश्य को अभी और विराम देना चाहता हूं, बस इसकी सुंदरता का आनंद लेना है।

एक पूर्णांक n(फ़ंक्शन तर्क या STDIN) को देखते हुए , दृश्य की शुरुआत से सेकंड की संख्या का प्रतिनिधित्व करते हुए, उस क्षण में दृश्य दिखाएं।

यह शुरुआती दृश्य है, जिसमें सामने वाले पहियों के बीच 60 स्थान हैं:

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

यह 11 सेकंड के बाद का दृश्य है:

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

और यह दुर्घटना के बाद जैसा दिखता है (ध्यान दें कि दुर्घटना के बाद बोनट ऊपर हैं):

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

मैं केवल दो कारों को दुर्घटनाग्रस्त होते हुए देखने में दिलचस्पी रखता हूं, इसलिए रिक्त स्थान, newlines, ++ कोई फर्क नहीं पड़ता।

यह कोड गोल्फ है, इसलिए बाइट्स में सबसे छोटा कोड जीत जाता है। बाद में जोड़े गए उत्तर अभी भी जीत सकते हैं यदि वे वर्तमान स्वीकृत उत्तर से कम हैं।


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.

क्या पहले चार वर्ण मतदाताओं के लिए एक अचेतन संदेश हैं?
जॉन ड्वोरक

@JDDvorak बिल्कुल! :) खैर, यह पूरी तरह से अचेतन नहीं था क्योंकि मैंने इसे इंगित किया था। कोई मूल इरादा नहीं है, लेकिन मैंने तुरंत उस पर ध्यान दिया जब मैंने कोड को उत्तर में चिपका दिया।
रेटो कोराडी

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 एनओपी हैं, इसलिए एक बेहतर लेआउट इसे बहुत छोटा कर सकता है), लेकिन कम से कम मैं यह दिखाने में कामयाब रहा कि भाषा गैर-तुच्छ कार्यों के लिए उपयोग करने योग्य है। :)

यह काम किस प्रकार करता है

सबसे पहले, भाषा का त्वरित अवलोकन:

  • लैब्रिंथ दो स्टैक पर संचालित होता है, मुख्य और सहायक , जो मनमाने ढंग से हस्ताक्षरित पूर्णांक पकड़ सकता है। दोनों स्टैक के निचले भाग में जीरो की अनंत मात्रा होती है।
  • कमांड एक 2D ग्रिड पर अलग-अलग वर्ण हैं और वे एक भूलभुलैया बनाते हैं (जो कि अज्ञात वर्ण, विशेष रूप से रिक्त स्थान, दीवारें हैं)। "एक NOP है जो एक दीवार नहीं है और कोड में कुछ रास्तों को चलाने के लिए सहायक हो सकता है। कई अन्य 2D भाषाओं के विपरीत, किनारों के आसपास लपेट नहीं है।
  • निर्देश सूचक (आईपी) पहले गैर-दीवार चरित्र (पढ़ने के क्रम में) से दाईं ओर बढ़ते हुए शुरू होता है। @कार्यक्रम को समाप्त करता है।
  • यदि संभव हो तो, आईपी गलियारों का अनुसरण करता है (झुकता भी)। यदि IP में कई सेल हैं, तो यह आम तौर पर बाईं ओर मुड़ जाएगा यदि मुख्य स्टैक का शीर्ष ऋणात्मक है, शून्य होने पर सीधे आगे बढ़ें या यदि यह सकारात्मक हो तो दाएं मुड़ें। जब IP एक दीवार से टकराती है तो वह दिशा को उलट देती है। (कुछ और सूक्ष्मताएँ हैं, लेकिन उन्हें इस कोड के लिए कोई फर्क नहीं पड़ना चाहिए।) यह नियंत्रण प्रवाह को लागू करने का एकमात्र तरीका है।
  • अंकगणित और स्टैक हेरफेर आदेशों के अलावा, स्रोत कोड को चार कमांड के साथ रनटाइम पर संशोधित किया जा सकता है >v<^जो स्रोत कोड की एक पंक्ति या स्तंभ को एक सेल द्वारा चक्रीय रूप से स्थानांतरित कर देगा। कौन सी पंक्ति या स्तंभ प्रभावित होता है यह स्टैक के शीर्ष पर निर्भर करता है। यदि आईपी की अपनी पंक्ति या कॉलम को स्थानांतरित किया जाता है, तो यह बदलाव के साथ आगे बढ़ेगा। यह स्रोत कोड के एक किनारे से दूसरे तक कूदना संभव बनाता है।

अब इस विशेष चुनौती के लिए, यहाँ एल्गोरिथ्म का सामान्य विचार है:

  • / \_o oo oसहायक स्टैक पर बोनट (यानी ) तक कारों के सिरों को पुश करें ।
  • इनपुट पढ़ें और निर्धारित करें कि पुश करना है __या /\अगला।
  • __ __ _/ \सहायक स्टैक पर शेष कारों (यानी और दो प्रमुख स्थान) को पुश करें ।
  • के अधिकतम मूल्य पर इनपुट को क्लैंप करें 20, चलो इस एन को कॉल करें ।
  • अब निम्नलिखित 3 बार करें:
    • एन रिक्त स्थान प्रिंट करें ।
    • मुद्रित 6 संग्रहीत वर्ण।
    • प्रिंट 60 - 3 * एन रिक्त स्थान।
    • मुद्रित 6 संग्रहीत वर्ण।
    • एक नई लाइन प्रिंट करें।

अंत में, आइए कोड के कुछ हिस्सों को देखें। एक ग्रिड शिफ्टिंग कमांड पर आईपी शीर्ष बाएं कोने में शुरू होता है। मुख्य स्टैक का शीर्ष है 0(जो एक सापेक्ष सूचकांक के रूप में उपयोग किया जाता है), इसलिए पहली पंक्ति को बाईं ओर स्थानांतरित किया जाता है, जो आईपी को ग्रिड के दाईं ओर भी ले जाता है। अब पहली पंक्ति को केवल दाईं से बाईं ओर निष्पादित किया जाता है, जो सहायक स्टैक पर निश्चित वर्णों के पहले सेट को धकेलता है:

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

यह पंक्ति स्थानांतरण गोल्फिंग के लिए उपयोगी है जब आप बड़ी मात्रा में रैखिक कोड के साथ शुरू करना चाहते हैं।

अगला हम इनपुट पढ़ते हैं और सही बोनट को धक्का देते हैं:

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

तीन एनओपी के साथ बाईं ओर का बिट शीर्ष शाखा के साथ नकारात्मक परिणाम और नीचे की शाखा के साथ गैर-नकारात्मक परिणाम भेजता है। दाईं ओर वे वापस एक साथ जुड़ जाते हैं।

अब एक और बड़े रैखिक खंड का अनुसरण करता है (जो शायद एक और पंक्ति-शिफ्टिंग ट्रिक के साथ बहुत बड़ा हो सकता है):

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

यह सहायक स्टैक पर शेष कारों को धक्का देता है।

अगला, हम गणना करते हैं min(20, input), जो पहली शाखा के समान है:

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

अंत में, हमारे पास लूप है जो लाइनों को प्रिंट करने के लिए तीन बार चलता है। लूप के प्रत्येक पुनरावृत्ति में रिक्त स्थान को मुद्रित करने के लिए दो छोटे (3x3) लूप होते हैं, साथ ही सहायक स्टैक से 6 वर्णों को मुद्रित करने के लिए दो खंड होते हैं:

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

एक निफ्टी ट्रिक जो मैं ध्यान आकर्षित करना चाहूंगा .{.{.वह दाहिने किनारे पर है। यह एक मृत अंत है, इसलिए इसके .अंत में कोड दो बार निष्पादित किया जाता है, एक बार आगे और एक बार पीछे। यह पलिंड्रोमिक कोड को छोटा करने का एक आसान तरीका देता है (पकड़ यह है कि आपको यह सुनिश्चित करने की आवश्यकता है कि मृत अंत से बाहर निकलने पर आईपी सही मोड़ लेता है)।


चुनौती: एक अखंड फ़ॉन्ट के बिना भूलभुलैया में एक कार्यक्रम लिखें ;)
बीटा Decay

1
@ बटेडेके जो किसी भी भाषा में दर्दनाक लगता है। ;)
मार्टिन एंडर

7

पायथन 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("//","\/")

यह स्टड से इनपुट लेता है।
डेमो यहाँ
यह परीक्षण -

$ ./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

आर, 191 बाइट्स

के बारे में के रूप में अच्छा के रूप में मैं इसे अब प्राप्त कर सकते हैं। STDIN और बिल्लियों से 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()। :)
एलेक्स ए।

@ एलेक्सा ने मुझे अंत में केवल एक ही बचाया, लेकिन दोनों
टकरावों

आप और मेरे पास "आक्रामक" की बहुत भिन्न परिभाषाएँ हैं।
एलेक्स ए।

4

सीजेएम, 120 बाइट्स

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

डेमो

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

डेमो


बाएं और दाएं कार के लिए अलग-अलग तार न होने से आपको काफी कोड बचाने में सक्षम होना चाहिए, क्योंकि वे मूल रूप से एक ही हैं (दुर्घटना के मामले को छोड़कर)। स्थानीय सुधारों की एक जोड़ी: परिवर्तनीय Jका मूल्य 19 है, Kमूल्य 20 है, उन स्थिरांक के लिए प्रत्येक चरित्र को बचाते हुए। यदि आपको एक तत्व के साथ एक सरणी की आवश्यकता है, तो आप 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 सीएलआई विकल्प -d error_reporting=0को अपरिभाषित स्थिरांक ( str_repeat, _) के बारे में PHP के कुछ प्रदर्शनों को छिपाने के लिए आवश्यक है कि यह स्ट्रिंग्स (प्रत्येक सूचना के लिए सहेजे गए 2 बाइट्स) में परिवर्तित हो जाए।

PHP 7 पर एक अतिरिक्त बाइट $fको इसके पहले उपयोग ( $m=($f=str_repeat)(...)) में आरम्भ करने से बचाया जा सकता है ; यह PHP 5 पर संकलन नहीं करता है।

परीक्षण के मामले और कोड को सिकोड़ने के लिए उपयोग की जाने वाली कुछ तकनीकों को जीथब पर पाया जा सकता है ।

अद्यतन करें:

@ इस्माइल-मिगुएल ने 4 बाइट बचाने की दलीलों में $leftऔर इनलाइन की शुरुआत $cको निचोड़ लिया echo(नीचे टिप्पणी देखें)।

आदेश को स्वैप करके चर $mऔर sआरंभीकृत किया जाता है, मुझे कोष्ठक की एक जोड़ी से छुटकारा मिला और 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";
अक्षीय

मैंने आपके खोजने की भिन्नता की कोशिश की और मुझे वास्तव में लंबा कोड मिला। आप अपना उत्तर संपादित कर सकते हैं और बाइट काउंट
इस्माइल मिगुएल

मैंने भी o oएक चर में निकालने की कोशिश की, लेकिन एक ही लंबाई या बदतर हो गई।
axiac

आप \nवास्तविक नई लाइनों के साथ बदल सकते हैं । मैं इसके विषय मे भूल गया। और यह 1 बाइट प्रत्येक के रूप में गिना जाता है
इस्माईल मिगुएल

3

जावास्क्रिप्ट (ईएस 6), 121 बाइट्स

टेम्प्लेट स्ट्रिंग का उपयोग करते हुए, स्ट्रिंग के अंदर 2 नईलाइन्स साइनफ़िकेंट और गिने जाते हैं।

बाइट्स को बचाने के लिए, आउटपुट के साथ alert, भले ही आनुपातिक फ़ॉन्ट का उपयोग alertASCII कला के लिए अच्छी तरह से अनुकूल नहीं है और परिणाम n> = 20 (क्रैश) के लिए बदसूरत है।

फायरफॉक्स में स्निपेट का परीक्षण

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

पायथन 2, 148 बाइट्स

यह एएनएसआई एस्केप कोड का उपयोग कारों को खींचने के लिए सही जगह पर कर्सर रखने के लिए करता है। इसके बाद यह देखने के लिए जांचा जाता है कि इनपुट 20 था, यदि वह था, तो वह वापस चला जाता है और कार के बोनट पर आ जाता है।

स्टड से एक इंट लेता है, आउटपुट से स्टडआउट तक।

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

पायथ, 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

सी, 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]);}

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

परीक्षण कार्यक्रम:

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 सेकंड के बाद देख सकते हैं, पहली कार दूसरी कार को दाईं ओर धकेलती है। अगर यह अनुमति नहीं है तो मुझे कुछ बाइट्स जोड़ने की आवश्यकता होगी।

संपादित करें: इसे ठीक किया गया। यह Sharknado; ओरो से अधिक यथार्थवादी होना चाहिए;;

संपादित करें: मैं printfमैन-पेज पर दूसरा नज़र डालकर अपने समाधान को काफी छोटा कर सकता हूं । यदि आप '*' का उपयोग करते हैं, तो आप sprintfपहले से ही एक प्रारूप-स्ट्रिंग बनाने की आवश्यकता के बिना, फ़ील्ड लंबाई को सीधे प्रिंटफ में आपूर्ति कर सकते हैं ।


तेज कार को दूसरी कार के भारीपन की भरपाई करनी चाहिए। मारने के बाद उन्हें हिलना नहीं चाहिए, या हो सकता है कि थोड़ी सी बाईं ओर भी चला जाए, क्योंकि दाईं ओर की गति दोगुनी है, लेकिन संभवतः बाईं ओर का वजन दोगुना नहीं है।
mbomb007

3
मैं @ mbomb007 से सहमत हूं, लेकिन, शरकनडो 3 की IMDB-4.5 रेटिंग है, इसलिए भले ही आपका जवाब स्पष्ट रूप से भौतिकी को धता बता रहा हो , फिर भी यह कुछ सकारात्मक पहचान के लायक हो सकता है))
स्टीवी ग्रिफिन

मुझे लगता है कि अपेक्षित व्यवहार स्पष्ट रूप से प्रश्न (जोर जोड़ा) में परिभाषित किया गया है: "किसी भी बड़े पर्याप्त एन के लिए, दृश्य दो दुर्घटनाग्रस्त कारों की स्थिति में होगा जहां दुर्घटना हुई थी "। जिस तरह से मैंने इसे पढ़ा है, उन्हें दुर्घटना के बाद अनिश्चित काल तक उसी स्थिति में रहना चाहिए।
रेटो कोराडी

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

जावा, 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);}}

संयुक्त राष्ट्र के 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);
     }
  }

परिणाम

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

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

...

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

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

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

2

पायथन 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), रिक्त स्थान के पहले रन को सीमित करने के लिए यह एक छोटा चार्ट था[:20] , और दूसरा ठीक है क्योंकि एक नकारात्मक समय एक स्ट्रिंग खाली स्ट्रिंग है।

फेंडर्स को आगे बढ़ाने के लिए, हम सिर्फ ए replace। चूंकि __छत पर भी दिखाई देता है, हमें फेंडर की पहचान करने के लिए थोड़ा सा संदर्भ चाहिए, इसलिए हम /निम्नलिखित की जांच करते हैं ।


1

जावा, २ 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

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
इसके परिणाम थोड़े गलत हैं। आपकी कारें केवल 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

जावास्क्रिप्ट, 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"))
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.