अल्फिस की नवीनतम पहेली को विकसित करने में मदद करें!


16

अंडरग्राउंड के रॉयल साइंटिस्ट अल्फिस ने एक नई पहेली के लिए एक प्रोटोटाइप तैयार किया है। हालाँकि, वह किसी को भी इसका परीक्षण करने के लिए तैयार नहीं लगती है।

उसकी पहेली के नियम इस प्रकार हैं:

लक्ष्य दाईं ओर प्राप्त करना है, जो बाईं ओर सेंटीमीटर टाइल से शुरू होता है। सम-विषम ऊँचाइयों वाली पहेलियों के लिए, दो केंद्र टाइलों के निचले हिस्से पर शुरू करें। (उदाहरण: एक शून्य-अनुक्रमित 4x4 सरणी में, शुरुआती स्थिति [2,0] होगी - पंक्ति 2, कॉलम 0. एक शून्य-अनुक्रमित 5x5 सरणी में प्रारंभिक स्थिति [2,0] होगी - पंक्ति 2, कॉलम 0.)

प्रत्येक रंगीन टाइल का अपना "दुखवादी" कार्य होता है:

  • गुलाबी और हरे रंग की टाइलें ("पी" और "जी" के रूप में प्रतिनिधित्व) कुछ नहीं करती हैं
  • लाल और पीले रंग की टाइलें ("आर", "वाई") अगम्य हैं।
  • ऑरेंज टाइल्स ("ओ") खिलाड़ी को संतरे की तरह महक देते हैं
  • बैंगनी टाइल ("यू") खिलाड़ी को अगली टाइल के लिए उस दिशा में मजबूर करते हैं जो वे सामना कर रहे हैं और उन्हें नींबू की तरह गंध करते हैं
  • जब तक खिलाड़ी संतरे की तरह गंध नहीं करता तब तक नीली टाइलें ("बी") निष्क्रिय हैं ।

फ्लेवर मैकेनिक को स्पष्ट करने के लिए, एक खिलाड़ी की गंध अनिश्चित काल तक या एक अलग-अलग महक वाली टाइल द्वारा ओवरराइड किए जाने तक बनी रहेगी, यानी यदि कोई खिलाड़ी नारंगी टाइल पर कदम रखता है तो वे संतरे की तरह गंध लेंगे जब तक कि वे बैंगनी टाइल पर कदम नहीं रखते।

इसके अतिरिक्त, एक नीली टाइल के साथ खड़ी या क्षैतिज रूप से रखी गई एक पीले रंग की टाइल के कारण नीली टाइल भी अगम्य हो जाएगी।


आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो कि 2-आयामी चरित्र सरणी (या 1 डी स्ट्रिंग सरणी, या कुछ अन्य मान्य प्रारूप) को स्वीकार करता है, पहेली के लेआउट को इनपुट के रूप में प्रस्तुत करता है और मूल पहेली और हल की गई पहेली दोनों को तारांकन या कुछ के साथ आउटपुट करता है। अन्य चरित्र सही रास्ता दिखा रहा है। माना कि दी गई पहेली हल करने योग्य है।

एक उदाहरण के रूप में इस पहेली का उपयोग करें:

BGYBG
PGPBG
PUBPB
OUGYB
PPOPP

आपका कार्यक्रम आउटपुट होगा:

BGYBG
PGPBG
PUBPB
OUGYB
PPOPP

BGYBG
PGPBG
*****
OUGYB
PPOPP

इस्तेमाल किया किसी भी पहेली उपयोग करते हुए उत्पन्न किया जाना चाहिए इस

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

RRRR
RPPR
PUOR
RPBP

प्रस्तावित टेस्ट केस: RRRR | RPPR | PUOR | RPBP। अगर मुझसे कोई गलती नहीं हुई, तो इसके लिए जरूरी है कि आप दो बार यू टाइल पर जाएं। इसके अलावा, मैं यू के व्यवहार के बारे में अनिश्चित हूं जब टाइल अगम्य है, तो क्या आप अभी भी यू पर चल सकते हैं या आप ऐसा करने में असमर्थ हैं?
FryAmTheEggman

@FryAmTheEggman यदि यू टाइल अगम्य के बाद टाइल है, तो आप उस दिशा में यू टाइल पर नहीं चल सकते।
EnragedTanker

@TimmyD अनुमान है कि जब मैंने पहली बार उस पहेली को किया था तो मैंने ध्यान नहीं दिया।
EnragedTanker

@ crayzeedude मुझे लगता है कि आपको फ्राई का टेस्ट केस गलत लगा। यह दूसरी पंक्ति में RPPR होना चाहिए, RPRR नहीं।
शर्लक

@ शर्लक 9 वूप्स! वास्तव में मैंने किया, धन्यवाद।
EnragedTanker

जवाबों:


2

C 529 बाइट्स

#define M m[y][x]
char**m,*l,i;main(Y,X){for(;scanf("%ms",&l)>0;)(m=realloc(m,Y*8))[Y-1]=l,X=puts(m[Y++-1])-2;puts("");int s(x,y,c,d){(x<0|y<0|y/Y)?:({if(M^'R'&&M^'Y')if(M^'B'||c^2&&!((y&&m[y-1][x]=='Y')|(x&&m[y][x-1]=='Y')|(y<Y-1&&m[y+1][x]=='Y')|(x<X-1&&m[y][x+1]=='Y'))){x^X?:({M='#';return 1;});c=M^'O'?c:2;M^'U'?:({return s(x+(d<4?d-2:0),y+(d>3?d-5:0),1,d)?({M='#';1;}):0;});if(d^1&&s(x+1,y,c,3)||d^4&&s(x,y+1,c,6)||d^6&&s(x,y-1,c,4)||d^3&&s(x-1,y,c,1)){M='#';return 1;}}});return 0;}s(0,--Y/2,0,3);for(;i<Y;)puts(m[i++]);}

हम पहले दाईं ओर कदम बढ़ाते हुए पहेली को आगे बढ़ाते हैं, बशर्ते कि हम अवरुद्ध न हों, फिर ऊपर की ओर, फिर नीचे और फिर बाईं ओर वापस प्रयास करें। खोज पुनरावर्ती है और एक बार जब हम एक सफल पथ की पहचान करते हैं, तो हम अपने मैट्रिक्स में रिक्त स्थान को चिह्नित करते हैं और वापस लौटते हैं।

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

Ungolfed

#include <stdio.h>
#include <malloc.h>
char**m,*l,i;
main(Y,X) {
  for(Y=1;scanf("%ms",&l)>0;Y++)
      m=realloc(m,Y*8),
      m[Y-1]=l,
      X=puts(m[Y-1])-2;
  puts("");
  int step(x,y,c,d,i){
    if(x<0||y<0||y>=Y)return 0;
      if(m[y][x]=='R'||m[y][x]=='Y')return 0;
      if(m[y][x]=='B'&&(c==2||(y&&m[y-1][x]=='Y')||(x&&m[y][x-1]=='Y')
               ||(y<Y-1&&m[y+1][x]=='Y')||(x<X-1&&m[y][x+1]=='Y')))return 0;
      if(x==X){m[y][x]='#';return 1;}
      if(m[y][x]=='O')c=2;
      if(m[y][x]=='U')return step(x+(d<4?d-2:0),y+(d>3?d-5:0),1,d,i+1)?({m[y][x]='#';1;}):0;
      else if((d!=1&&step(x+1,y,c,3,i+1)) ||
    (d!=4&&step(x,y+1,c,6,i+1)) || (d!=6&&step(x,y-1,c,4,i+1)) ||
    (d!=3&&step(x-1,y,c,1,i+1))) {m[y][x]='#';return 1;}
      return 0;
  }
  step(0,--Y/2,0,3,0);
  for(;i<Y;)puts(m[i++]);
}

उदाहरण आउटपुट 1

PYYOPPPP
YRGGRYRG
PGPBYPUR
PYRBOYOG
OBPGYYPP
PRGPOYPO
YPYOUGPP
YGROBRYY
RGRYBBOG

PYY#####
YR##RYRG
###BYPUR
#YRBOYOG
#BPGYYPP
PRGPOYPO
YPYOUGPP
YGROBRYY
RGRYBBOG

उदाहरण आउटपुट 2

PBYRYPGP
OBRGOOBG
PGPGUROO
PUGORBUG
PUPUUURO
BGGUYPRG
GBOPGGRG
PUPUBUYB
GYOPRPOG

PBYRYPGP
OBRGOOBG
PGPGUROO
PUGORBUG
###UUURO
BG#UYPRG
GB####RG
PUPUB#YB
GYOPR###

उदाहरण आउटपुट 3

RRRR
RPPR
PUOR
RPBP

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