बमों की चेन रिएक्शन


32

परिचय:

कार्य से पहले, यहाँ हर तत्व नक्शे पर है:

सादा जमीन ( X): यह कुछ नहीं करता है।

नष्ट हुई भूमि ( -): यह समतल भूमि के समान है, लेकिन बम से नष्ट हो जाती है।

सक्रिय बम ( !): एक मानचित्र पर, यह एक 3x3 वर्ग में सब कुछ नष्ट कर देगा:

XXXXX                         XXXXX
XXXXX                         X---X
XX!XX     > will become >     X---X
XXXXX                         X---X
XXXXX                         XXXXX

निष्क्रिय बम ( @): यह तब तक कुछ नहीं करता, जब तक कि यह दूसरे बम से विस्फोट न हो जाए। यह भी एक 3x3 वर्ग विस्फोट त्रिज्या है:

XXXXX                         XXXXX
XXXXX                         XXXXX
XX@XX     > will become >     XX@XX (nothing happened)
XXXXX                         XXXXX
XXXXX                         XXXXX

परंतु:

XXXXX                         XXXXX
XXXXX                         X---X
XX@XX     > will become >     ----X (both bombs have exploded)
X!XXX                         ----X
XXXXX                         ---XX

Nuke ( ~): यह तब तक कुछ नहीं करता, जब तक कि यह दूसरे बम से विस्फोट न हो जाए। अंतर यह है कि इस बम में 5x5 वर्ग विस्फोट का त्रिज्या है:

XXXXX                         XXXXX
XXXXX                         XXXXX
XX~XX     > will become >     XX~XX (nothing happened)
XXXXX                         XXXXX
XXXXX                         XXXXX

परंतु:

XXXXX                         -----
XXXXX                         -----
XX~XX     > will become >     ----- (both bombs have exploded)
X!XXX                         -----
XXXXX                         -----

काम

  • 9x9 मैप को देखते हुए , चेन रिएक्शन के बाद मैप को आउटपुट करें ।
  • आप एक समारोह या एक कार्यक्रम प्रदान कर सकते हैं।
  • यह , इसलिए कम से कम बाइट्स जीत के साथ जमा करना!

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

टेस्ट केस 1 ( 3 चरण ):

XXXXXXXXX           XXXXXXXXX
----XXXXX           ----XXXXX
XXXX@XXXX           XXXX@XXXX
XXXXXXXX-           XXX---XX-
XXXX@XXXX     >     ------XXX
XXXXXXXX-           ------XX-
XX~XXXXXX           -----XXXX
X!XXXXXX-           -----XXX-
XXXXXXXXX           -----XXXX

टेस्ट केस 2 ( 2 चरण ):

XXXXXXXXX           XXXXXXXXX
XXXXXXXXX           XXXXXXXXX
XX~XXXXXX           XX~XXXXXX
---------           ---------
XXXX!XXXX     >     XXX---XXX
XXXXXXXXX           XXX------
XXX@@X@!X           XXX@@----
XXXXXXXXX           XXXXX----
XXXXXXXXX           XXXXXXXXX

टेस्ट केस 3 ( 2 चरण ):

XXXXXXXXX           XXXXXXXXX
XXXXXXXXX           XXXXXXXXX
XX~XXXXXX           XX~XXXXXX
XXXXXXXXX           XXX---XXX
XXXX!XXXX     >     XXX---XXX
XXXXXXXXX           XXX------
XXX@@X@!X           XXX@@----
XXXXXXXXX           XXXXX----
XXXXXXXXX           XXXXXXXXX

टेस्ट केस 4 ( 1 स्टेप ):

XXXXXXXXX           XXXXXXXXX
XXXX-XXXX           XXXX-XXXX
XXXXXXXXX           XXX---XXX
XX-X!X-XX           XX-----XX
XXXXXXXXX     >     XXX---XXX
XX-----XX           XX-----XX
XXXX-XXXX           XXXX-XXXX
XXXXXXXXX           XXXXXXXXX
XXXXXXXXX           XXXXXXXXX

टेस्ट केस 5 ( 9 चरण ):

!XXXXXXXX           ---XXXXXX
X@XXXXXXX           ----XXXXX
XX@XXXXXX           -----XXXX
XXX@XXXXX           X-----XXX
XXXX@XXXX     >     XX-----XX
XXXXX@XXX           XXX-----X
XXXXXX@XX           XXXX-----
XXXXXXX@X           XXXXX----
XXXXXXXX@           XXXXXX---

टेस्ट केस 6 ( 9 चरण ):

XX@@@XXXX           ------XXX
XXXXXXXXX           ------XXX
~XXXXXXXX           ---XXXXXX
XXXXXXXXX           ---XXXXXX
~XXXXXXXX     >     ---XXXXXX
XXXXXXXXX           ---XXXXXX
~XXXXXXXX           ---XXXXXX
@XXXXXXXX           ---XXXXXX
!XXXXXXXX           ---XXXXXX

टेस्ट केस 7 ( 3 चरण ):

!XXXXXXXX           ---XXXXXX
X@XXXXXXX           ----XXXXX
XX@XXXXXX           ----XXXXX
XXXXXXXXX           X---X----
XXXXXX@@!     >     XXXXX----
XXXXXXXXX           X---X----
XX@XXXXXX           ----XXXXX
X@XXXXXXX           ----XXXXX
!XXXXXXXX           ---XXXXXX

4
मेरा उत्तर स्वीकृत की तुलना में काफी कम है।
22

इस चुनौती पर एक कार्यशाला का आधार हो सकता है?
एडम जूल

जवाबों:


10

मतलाब, 120 111 बाइट्स

function f=c(f);c=@(x,i)conv2(x+0,ones(i),'s');a=c(f<34,3);for k=f;a=c(a&f<65,3)|a;a=c(a&f>99,5)|a;end;f(a)='-'

बातचीत सफलता की कुंजी है।

विचार निम्नलिखित है: सक्रिय बम का पता लगाएं। इस क्षेत्र को 3x3 वर्ग में बढ़ाएँ। नए प्रभावित बम खोजें, संबंधित क्षेत्रों को संबंधित आकार में बड़ा करें और पहले नष्ट किए गए क्षेत्र में जोड़ें। इस पर्याप्त समय को दोहराएं (मेरे मामले में जितनी बार हमारे पास इनपुट वर्ण हैं, सिर्फ इसलिए कि यह सबसे छोटा संस्करण है) यह सुनिश्चित करने के लिए कि हम एक स्थिर बिंदु (= अधिक विस्फोट नहीं) तक पहुंच गए हैं। फिर सभी नष्ट किए गए क्षेत्र को सेट करें -और परिणाम प्रदर्शित करें।

इनपुट को वर्णों का एक मैट्रिक्स माना जाता है, जैसे

['!XXXXXXXX';
'X@XXXXXXX';
'XX@XXXXXX';
'XXX@XXXXX';
'XXXX@XXXX';
'XXXXX@XXX';
'XXXXXX@XX';
'XXXXXXX@X';
'XXXXXXXX@'];

10

रेटिना , 188 168 154 152 बाइट्स

बाइट्स को आईएसओ 8859-1 के रूप में गिना जाता है।

+Tm`@~X!:`!:\-`(.)?.?.(.?(?<1>.)?)(?<=(:|(?(1)_)!|^(?(5)_)(?<-5>.)*(:|(?(1)_)!)(?<1>.*¶)?.*¶(.)*.|(?=(.)*¶.*(?<1>¶.*)?(:|(?(1)_)!)(?<-6>.)*(?(6)_)$))\2)

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

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


6

APL (Dyalog) , 56 चार्ट या 62 बाइट्स *

मेरा सहकर्मी मार्शल एक सुंदर समाधान के साथ आया, मेरे से 21 वर्ण छोटे:

{'-'@(({1∊⍵≥∘.⌈⍨51+41}⌺5 5×∘(('X'≠⍵)+'~'=⍵))⍣≡'!'∘=)⍵}

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

{} अनाम फ़ंक्शन जहां तर्क argument द्वारा दर्शाया गया है

'-'@(… निम्नलिखित टैसिट फ़ंक्शन द्वारा मुखौटे वाले पदों पर )⍵डैश :

  '!'∘= बूलियन जहां विस्मयादिबोधक बिंदु तर्क के बराबर है

  ()⍣≡ और अधिक परिवर्तन नहीं होने तक निम्नलिखित टैकट फ़ंक्शन लागू करें:

   ×∘() निम्नलिखित स्थिरांक से गुणा करें:

    '~'=⍵ बूलियन जहां टिल्ड मूल तर्क के बराबर है

    (... )+ उस में, जोड़ें:

     'X'≠⍵ बूलियन जहां एक्स मूल तर्क से अलग है

   {... }⌺5 5 प्रत्येक के लिए, उस पर केंद्रित 5 × 5 क्षेत्र पर निम्नलिखित फ़ंक्शन लागू करें:

    4↑1 एक के पहले चार तत्वों को लें, शून्य के साथ पैडिंग [1,0,0,0]

    1+ एक जोड़ें [2,1,1,1]

    5⍴ चक्रीय रूप से लंबाई में पाँच [2,1,1,1,2]

    ∘.⌈⍨ दोनों कुल्हाड़ियों पर खुद के साथ अधिकतम तालिका

    ⍵≥ बूलियन जहां संबंधित पड़ोसियों की तुलना में अधिक या उसके बराबर है

    1∊ बूलियन अगर कोई सच है


* बस प्रति चरित्र एकल बाइट के लिए क्लासिक के साथ बदलें ⎕U233A


tio लिंक में, इनपुट (">" के बाईं ओर) आउटपुट के समान है (">" के दाईं ओर), क्या ऐसा माना जाता है?
ngn

@ स्वेच्छा से देखा गया। Dispसमारोह काम किया है कभी नहीं हो सकता। एक ऑपरेटर होने के लिए अद्यतन किया गया। धन्यवाद।
एडम सिप

... और एक प्रश्न: @क्लासिक में 1 बाइट के रूप में गिना जाता है? मेरा अनुमान है हाँ
ngn


यहाँ 61 बाइट्स के लिए एक विचार है: '-'@({i/⍨∨⌿↑(↓⌈/¨|⍵∘.-i)≤3|'X@~-'⍳a[⍵]}⍣≡('!'=,a)/i←,⍳⍴a)⊢a←⎕( ⎕io←0)
एनजीएन

4

जावा, 574 562 558 549 525 523 बाइट्स

import java.util.*;interface B{static char[][]g=new char[9][9];static void d(int i,int j,int r){g[i][j]=45;for(int x=Math.max(i-r,0);x<Math.min(i+r+1,9);x++)for(int y=Math.max(j-r,0);y<Math.min(j+r+1,9);y++)if(g[x][y]==64){d(x,y,1);}else if(g[x][y]>99){d(x,y,2);}else g[x][y]=45;}static void main(String[]a){Scanner q=new Scanner(System.in);for(int i=0;i<9;i++){int j=0;for(char c:q.nextLine().toCharArray())g[i][j++]=c;}for(int j=0;j<9;j++)for(int k=0;k<9;k++)if(g[j][k]==33)d(j,k,1);for(char[]z:g)System.out.println(z);}}

मुझे पता है कि यह पोस्ट करने के बाद से आपको काफी समय हो गया है। लेकिन आप कुछ चीजें गोल्फ कर सकते हैं: दोनों '-'हो सकते हैं 45। दोनों Math.max(...,0)हो सकते हैं ...>0?...:0(एक ही साथ किया जा सकता है Math.min(...,9)लेकिन यह बाइट्स की सटीक समान मात्रा है। for(int i=0;i<9;i++){int j=0;for(char c:q.nextLine().toCharArray())g[i][j++]=c;}for(int j=0;j<9;j++)for(int k=0;k<9;k++)if(g[j][k]==33)d(j,k,1);हो सकता है int i=0,j;for(;i<9;i++){j=0;for(char c:q.nextLine().toCharArray())g[i][j++]=c;}for(i=0;i<9;i++)for(j=0;j<9;j++)if(g[i][j]<34)d(i,j,1);। और हो सकता है कि आप प्रोग्राम के बजाय इससे बाहर कोई फंक्शन कर सकें।
केविन क्रूज़सेन

1

एपीएल (डायलाग क्लासिक) , 61 बाइट्स

'-'@({i/⍨∨⌿↑(↓⌈/¨|⍵∘.-i)≤3|'X@~-'a[⍵]}⍣≡('!'=,a)/i←,⍳⍴a)⊢a←⎕

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

a←⎕ इनपुट का मूल्यांकन करें और इसे असाइन करें a

i←,⍳⍴a सभी कोशिकाओं के सूचकांक (कोर्ड्स के जोड़े)

('!'=,a)/ केवल आरंभिक सक्रिय बमों को फ़िल्टर करें

{ }⍣≡ सूची में परिवर्तन तब तक करें जब तक यह स्थिर न हो जाए

  • 'X@~-'⍳a[⍵]स्थानापन्न 0 के लिए X, 1 के लिए @, आदि, 4 और कुछ के लिए ( !)

  • 3|आधुनिक 3 प्रभाव की "त्रिज्या" पाने के लिए; यह अधिक से अधिक या बराबर होना चाहिए ...

  • (↓⌈/¨|⍵∘.-i)≤ ... सूची और सभी कोशिकाओं के बीच मैनहट्टन की दूरी

  • i/⍨∨⌿↑ उन कोशिकाओं का बिटमास्क प्राप्त करें जो प्रभावित हैं और उनमें से चयन करें i

'-'@( )⊢a-उन पदों पर रखा

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