मैं आपकी तरह कोड गोल्फ पहेली को हल करता था, लेकिन फिर मैंने घुटने में एक तीर लिया


18

तीर के साथ घुटने में चोट लगना अभी पसंद की चोट लगती है । जैसे, मैं निम्नलिखित गोल्फ चुनौती का प्रस्ताव करता हूं।

आपके पास एक साहसी है जो इस तरह दिखता है:

  O
 /|\
/ | \
  |
  |
 / \
/   \

एक टेक्स्ट फ़ाइल को देखते हुए जिसमें एक धनुष (एक }प्रतीक के रूप में खींचा गया ), दीवारों का एक सेट ( #प्रतीकों के रूप में खींचा गया ) और एक साहसी होता है, सबसे छोटा कोड लिखता है जो कोण और प्रारंभिक वेग की गणना करता है जिस पर आपको हिट करने के लिए एक तीर फायर करना चाहिए उसे घुटने में।

निम्नलिखित मान लें:

  • फ़ाइल में प्रत्येक वर्ण 0.5 x 0.5 मीटर है।
  • तीर के केंद्र से निकाल दिया जाता है }, यानी की एक ऑफसेट0.25m, 0.25m
  • गुरुत्वाकर्षण है 10ms^-2
  • तीर का वजन 0.1kg
  • तीर एक बिंदु है, यानी टकराव केवल तब होता है जब तीर का समन्वय ब्लॉक में से एक में प्रवेश करता है।
  • अधिकतम प्रारंभिक वेग है 50m/s
  • कोण 0 (सीधे ऊपर) और 180 (सीधे नीचे) के बीच हो सकता है
  • एडवेंचरर के पैर के किसी भी हिस्से को मारना घुटने के लिए एक हिट माना जाता है।
  • एक दीवार ( #चरित्र) एक पूरे 0.5mx 0.5m ब्लॉक को लेता है।
  • तीर फ़ाइल के "शीर्ष" पर यात्रा कर सकता है, लेकिन इनपुट को #पात्रों की छत से शुरू करने से रोकने के लिए कुछ भी नहीं है ।
  • आप तीर के साथ दीवारों में प्रवेश नहीं कर सकते।
  • साहसी के किसी अन्य भाग को मारने की अनुमति नहीं है!
  • आपको एक त्रुटि प्रदर्शित करनी चाहिए यदि उसे घुटने में मारना असंभव है।

उदाहरण इनपुट:

                                 #                        
}                                                     O   
                        #                            /|\  
                                                    / | \ 
            #                                         |   
                            #                         |   
                                                     / \  
                                                    /   \  

अगर आप की जरूरत है सवाल पूछने के लिए स्वतंत्र महसूस :)


1
क्या तीर पाठ फ़ाइल द्वारा दर्शाए गए क्षेत्र पर "ओवर" कर सकता है?
जेबी

2
आप कितने लोगों को जानते हैं जो 3 मीटर से अधिक लंबे हैं? : पी
पीटर टेलर

@ जेबी - हां, लेकिन इनपुट को रोकने के लिए बड़ी लाइन के साथ शुरू करने के लिए कुछ भी नहीं है #############...
बहुपद

2
@PeterTaylor - हर कोई जानता है कि आरपीजी खेल में लोग बहुत बड़े हैं;)
बहुपत्नी

2
तीर का वजन बेमानी है, निश्चित रूप से?
पॉल आर

जवाबों:


11

अजगर, 599 चरस

import os,sys
from math import*
I=os.read(0,999)
O=[]
h=v=0
for i in I:
 if'#'==i:O+=[(h,v,h+1,v+1),(h+1,v,h,v+1)]
 if'O'==i:O+=[(h,v+1,h-2,v+3)];T=(h,v+5,h-2,v+7)
 if'}'==i:e=h+.5;c=v+.5
 h+=1
 if'\n'==i:v+=1;h=0

def X(K,L):
 A,B,C=K;p=L[0];q=L[2]-p;r=L[1];s=L[3]-r;A,B,C=A*q*q,2*A*p*q+B*q-s,A*p*p+B*p+C-r;d=B*B-4*A*C
 return 0 if d<0 else any(0<x<1 for x in[(sqrt(d)-B)/2/A,(-sqrt(d)-B)/2/A])

R=range(1,999)
for v in R:
 for z in R:
  z*=pi/999;d=v*sin(z)/10;b=-v*cos(z)/10
  K=20/d/d,b/d-40*e/d/d,c+20*e*e/d/d-b*e/d
  if X(K,T)and not any(X(K,x)for x in O):print v/2,z;sys.exit(0)
print'ERROR'

X(K,L)दिनचर्या एक परवलय लेता है K=(a,b,c)का प्रतिनिधित्व y = कुल्हाड़ी ^ 2 + bx + c और एक रेखा खंड L=(a,b,c,d)के बीच बांटने के प्रतिनिधित्व करने (ए, बी) और (ग, घ) । दोनों बाधाएं ( O) और लक्ष्य ( T) लाइन खंडों के रूप में दोहराई जाती हैं। सभी दूरी 2 के कारक से मापी जाती हैं।

उदाहरण इनपुट निम्नलिखित प्रक्षेपवक्र देता है (डिफ़ॉल्ट रूप से, न्यूनतम वेग एक):

  --                             #          --            
--                                            -       O   
                        #                      -     /|\  
                                                -   / | \ 
            #                                    -    |   
                            #                     -   |   
                                                   - / \  
                                                    -   \  

आप Rअधिकतम वेग पथ प्राप्त करने के लिए रिवर्स कर सकते हैं :

                                 #                        
-------------                                         O   
             -----------#                            /|\  
                        --------                    / | \ 
            #                   -------               |   
                            #          -----          |   
                                            -----    / \  
                                                 -----  \  

अच्छा कार्य। केवल शिकायत यह है कि इनपुट आकार की सीमा 999 बाइट्स है। इन ASCII ड्रॉइंग के संभावित आकार को देखते हुए यह आसानी से और अधिक हो सकता है। केवल 1 पात्र की कीमत पर 9999 अधिक समझदार होगा। (हालांकि उस बिंदु पर आप 8**564kB प्राप्त करने के लिए कर सकते हैं )
बहुपत्नी

यकीन है कि आप तो बताए द्वारा कि एक चरित्र को बचा सकता है w=v+1और के 3 उदाहरण की जगह v+1के साथ w। मैं हालांकि बहुत सारे पायथन को कोड नहीं करता हूं, इसलिए मैं गलत हो सकता हूं।
बहुपद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.