क्या मैं इसे समय पर बना दूंगा?


37

से प्रेरित होकर इस

पृष्ठभूमि

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

चुनौती

गेहूं, आग और अपने स्थान वाले क्षेत्र को देखते हुए, यह निर्धारित करें कि क्या आप इसे समय से खेत से बाहर कर सकते हैं।

एक खेत में गेहूं (यहां द्वारा दर्शाया गया .) और आग ( F) होता है। यहाँ आपका स्थान a के साथ चिह्नित है O। उदाहरण के लिए:

...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.

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

...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.

..FFF.FF
FF.F...F
FF......
FFF.....
.F.F.O..
..FFF...
.F.F..F.
FFF..FFF

FFFFFFFF
FFFFF.FF
FFFF...F
FFFF....
FF.FF.O.
.FFFFFF.
FFFFFFFF
FFFFFFFF

FFFFFFFF
FFFFFFFF
FFFFF.FF
FFFFF.FF
FFFFFFFO
FFFFFFFF
FFFFFFFF
FFFFFFFF

FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFF
FFFFFFFFO <-- you made it out and survived, barely
FFFFFFFF
FFFFFFFF
FFFFFFFF

नियम

  • आपका इनपुट ग्रिड के रूप में फ़ील्ड है। आप किसी भी इनपुट प्रारूप को चुन सकते हैं, जिसमें लाइन सेपरेटर या 2 डी सरणी के साथ एक स्ट्रिंग शामिल है।
    • आप आग और / या अपने लिए स्थानों के इनपुट के रूप में नहीं ले सकते ।
    • आप सरणी इनपुट के लिए गैर-तार सहित गेहूं, आग और अपनी स्थिति के रूप में किसी भी 3 विशिष्ट मूल्यों का उपयोग कर सकते हैं।
    • फ़ील्ड हमेशा आकार में कम से कम 1x1 होते हैं, आयताकार और कोई अमान्य वर्ण नहीं होते हैं।
    • किसी भी क्षेत्र में आपके स्थान का प्रतिनिधित्व करने वाले मूल्य में से एक होगा, और हर दूसरी स्थिति में आग हो सकती है या नहीं।
  • आपका आउटपुट "आप जीवित रहते हैं" या "आप मर जाते हैं" के लिए दो अलग-अलग मूल्यों में से एक है, जैसा कि हमेशा
  • मानक नियम लागू होते हैं।

परीक्षण के मामलों

बच जाना

O
....
.O..
....
FFFFF
.....
..O..
.....
FFFF
FFFO
FFFF
.F....
......
......
.F....
..O...
.FF...
.F....
..FF..
...F...F
F.......
........
.F......
....O...
...F....
........
.F....F.

नहीं बच पाया

FFF
FOF
FFF
F.F
.O.
F.F
....F
.....
..O..
.....
F....
.F....F.
........
........
F..O....
........
.....F..
...F...F
F......F
........
.F......
....O...
...F....
........
.F....F.
F..F
.O..
FF..

2
मैं नहीं देखता कि किसी ने क्यों अपमानित किया
ओलिवर नी

3
दोनों डाउनवॉटर्स को, कृपया समझाएं कि मेरी चुनौती क्यों खराब है।
PurkkaKoodari

6
@DeadPossum क्योंकि मुझे लगता है कि यह चुनौती को बहुत आसान बना देगा और इसे थोड़ा व्यापक बना देगा। असहमत महसूस करते हैं, हालांकि; अगर दूसरे आपसे सहमत हों तो मैं प्रतिबंध बदल सकता हूं।
PurkkaKoodari

2
मैं Pietu1998 से सहमत हूं, मुझे यह भी लगता है कि प्रतिबंध अत्यधिक उपयुक्त है।
श्री Xcoder

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

जवाबों:


28

घोंघे, 15 बाइट्स

\Oo!{.,fee7.,\F

इसे ऑनलाइन आज़माएं!

1मतलब जीवित है जबकि 0मृत्यु का मतलब है।

चूंकि आग को बाहर निकालना असंभव है, इसलिए इसके चारों ओर जाने की कोशिश करना कभी उपयोगी नहीं होता है। सबसे अच्छा मार्ग हमेशा एक सीधी रेखा है। इसलिए भागने के मार्ग के केवल चार संभावित विकल्प हैं। यह निर्धारित करने के लिए कि कोई दिशा सुरक्षित है, हम Fउस दिशा में इंगित "फायर कोन" में से किसी के लिए जाँच करते हैं।


1
O_o क्या आप एक परीक्षण लिंक प्रदान कर सकते हैं? यह बहुत कम लगता है।
श्री एक्सकोडर

10
कोड लगभग कह रहा है: "ओय!" ... "पे" ...
मैजिक ऑक्टोपस Urn

26
क्योंकि घोंघे के लिए सही विकल्प है, आप जानते हैं, एक आग outrunning ...
टाइमटेक

6
@ Faersum "ऑनलाइन प्रयास करें" लिंक में, मैंने निम्नलिखित 3-लाइन गेहूं के खेत की कोशिश की, जो मृत्यु होना चाहिए, लेकिन कार्यक्रम को लगता है कि आप इसे जीवित रख सकते हैं: "एफ.एफ", ".ओ ..", "। एफएफ .. "
ज़ेंटिक्स


12

पायथन 2 , 283 218 209 208 बाइट्स

lambda F:f(F)&f(F[::-1])
def f(F):l=F.split();w=len(l[0])+1;i=F.index('O');x,y=i/w,i%w;r=range(len(l));return all('F'in''.join(n)for n in[[l[i][x+abs(i-y):]for i in r],[l[i][max(0,y+x-i):i+x-y+1]for i in r]])

इसे ऑनलाइन आज़माएं!

एक नए सिरे से अलग स्ट्रिंग के रूप में इनपुट लेता है, और वापस लौटता True/FalseहैDead/Alive

Fबाहर की ओर देखकर ire के लिए प्रत्येक दिशा (udlr) की जाँच करके काम करता है :

उदाहरण:

इनपुट:

FFFFF
.....
..O..
.....

आग की जाँच:

Up:       Down:     Left:     Right:

FFFFF               F             F
 ...                ..           ..
  O         O       ..O         O..
           ...      ..           ..

यदि सभी दिशाओं में अग्नि होती है तो आप मर जाते हैं, अन्यथा एक बच निकलता है।

संपादित करें: इनपुट के रूप में एक स्ट्रिंग लेने के लिए, और अब केवल ऊपर / दाईं ओर चेक करता है, लेकिन इनपुट को पीछे की ओर भी चेक करता है (नीचे / नीचे दे रहा है)

श्री एक्सकोडर और फेलिप नारदी बतिस्ता के लिए बहुत सारे बाइट्स का धन्यवाद


@FelipeNardiBatista धन्यवाद :)
TFeld


2

जावास्क्रिप्ट, 174 बाइट्स

a=>+(t=>g=a=>t--?g(a.map((l,y)=>l.map((c,x)=>(h=v=>[(a[y-1]||[])[x],(a[y+1]||[])[x],a[y][x+1],a[y][x-1],c].includes(v),!c&&h()?p=1:[2,0,1].find(h))))):p)((p=a+'!').length)(a)

इनपुट प्रारूप:

  • इंजीर के एरे की सरणी
  • 2 के लिए F, 1 के लिए ., 0 के लिएO

आउटपुट:

  • सत्य मूल्य (1) जीवित रहने के लिए
  • मरने के लिए झूठी कीमत (NaN)

कोशिश करो:

एक सेलुलर ऑटोमेटन पर विचार करें। एक सेल के लिए 3 राज्य हैं O(लोगों द्वारा पहुंच योग्य), F(पकड़ा गया फायर), .(बस कुछ नहीं हुआ)। अगली पीढ़ी बनाने का नियम है:

for each cell:
  me and my 4 neighborhoods,
    if anyone is `F` then result is `F`,
    otherwise, if anyone is `O` then result is `O`
    otherwise, keep state `.`

एक बार जब कोई कोशिका किनारे पर होती है तो Oराज्य बच जाता है। यदि यह पर्याप्त मात्रा में पीढ़ी में नहीं हुआ, तो लोगों की मृत्यु हो गई।

// check for all neighbors:
h=v=>[(a[y-1]||[])[x],(a[y+1]||[])[x],a[y][x+1],a[y][x-1],c].includes(v)
// if me == 'O' and i'm edge (neighbors contain _undefined_), then survive
!c&&h()?p=1
// Otherwise apply the given rule
:[2,0,1].find(h)

2

ऑक्टेव, 71 बाइट्स

@(a)(A=blkdiag(0,a,0))<3||any((bwdist(A>2,'ci')>bwdist(A==2,'ci'))(!A))

इसे ऑनलाइन आज़माएं!

या

सभी परीक्षण मामलों की पुष्टि करें!

इनपुट प्रारूप:

  • पूर्णांक के 2 डी सरणी
  • 1के लिए ., के 2लिए Oऔर के 3लिएF

आउटपुट:

  • true तथा false

स्पष्टीकरण:

स्पष्टीकरण:

A=blkdiag(0,a,0)    % add a boundary of 0s around the array
A<3                 % return truthy when there is no fire
bwdist(A>2,'ci')    % city block distance transform of binary map of fire
bwdist(A==2,'ci')   % city block distance transform of binary map of your location
any(...)(!A)        % check if there is at least one element on the boundary of 
                    % the fire distance map has its distance greater than 
                    % that of distance map of your location

1

रेटिना , 243 बाइट्स

^.*O(.|¶)*|(.|¶)*O.*$|(.|¶)*(¶O|O¶)(.|¶)*
O
m`^((.)*) (.*¶(?<-2>.)*(?(2)(?!))O)
$1#$3
m`^((.)*O.*¶(?<-2>.)*(?(2)(?!))) 
$1#
T`p`\O`#| ?O ?
+m`^((.)*)[O ](.*¶(?<-2>.)*(?(2)(?!))F)
$1#$3
+m`^((.)*F.*¶(?<-2>.)*(?(2)(?!)))[O ]
$1#
}T`p`F`#|.?F.?
O

इसे ऑनलाइन आज़माएं! पृष्ठभूमि की आवश्यकता होती है .एस के बजाय रिक्त स्थान होना चाहिए (या कुछ अन्य regexp- सुरक्षित चरित्र का उपयोग किया जा सकता है)। स्पष्टीकरण:

^.*O(.|¶)*|(.|¶)*O.*$|(.|¶)*(¶O|O¶)(.|¶)*
O

यदि Oकिसी किनारे पर है, तो बाकी सब को हटा दें (उत्तरजीविता मामला)

m`^((.)*) (.*¶(?<-2>.)*(?(2)(?!))O)
$1#$3

#मौजूदा के ऊपर किसी भी स्थान पर रखें O

m`^((.)*O.*¶(?<-2>.)*(?(2)(?!))) 
$1#

और #किसी मौजूदा के नीचे किसी भी जगह में O

T`p`\O`#| ?O ?

#एस को Oएस में बदलें , और किसी मौजूदा के बाईं या दाईं ओर कोई भी स्थान O

+m`^((.)*)[O ](.*¶(?<-2>.)*(?(2)(?!))F)
$1#$3

#किसी भी मौजूदा एस के ऊपर रखें F। ये Oरिक्त स्थान के साथ-साथ s को भी अधिलेखित कर सकते हैं ।

+m`^((.)*F.*¶(?<-2>.)*(?(2)(?!)))[O ]
$1#

#किसी भी मौजूदा एस के नीचे रखें F, Oसाथ ही साथ रिक्त स्थान भी ओवरराइट करें ।

}T`p`F`#|.?F.?

#S को Fs में बदलें , और किसी Oमौजूदा के बाईं या दाईं ओर कोई भी या स्थान बदलें F। तब तक दोहराएं जब तक कि Fसब कुछ भस्म न हो जाए।

O

1अस्तित्व के लिए वापसी , 0यदि नहीं।

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