হ্রদ পূরণ করুন


19

ASCII চিত্র বিন্যাসে জমির টপোগ্রাফি দেওয়া, লেকগুলি কোথায় যাবে এবং সেগুলি পূরণ করবে তা নির্ধারণ করুন an অসীম পরিমাণে বৃষ্টিপাত অনুমান করুন।

উদাহরণ

ইনপুট

         #               
         ##              
      # ####             
#    #########           
##  ###########          
## #############   ####  
## ##############  ##### 
################# #######
#########################
#########################

আউটপুট

         #               
         ##              
      #@####             
#@@@@#########           
##@@###########          
##@#############@@@####  
##@##############@@##### 
#################@#######
#########################
#########################

ইনপুটটিতে কেবল ফাঁকা স্থান এবং #চিহ্ন থাকবে। প্রতিটি লাইন একই দৈর্ঘ্য হবে। আউটপুটটি #ফাঁকা জায়গাগুলির সাথে অভিন্ন প্যাটার্ন হওয়া উচিত যেখানে @চিহ্নগুলি দিয়ে জল জমে ।

নীচের ইনপুট সারিতে সবসময় সব # চিহ্ন থাকবে। জমিতে কোনও গর্ত বা ওভারহ্যাং থাকবে না। সংক্ষিপ্ততম কোড জিতেছে।


এটি কিছুটা সহজ বলে মনে হচ্ছে। আমি মনে করি আমরা হ্রদ একক সংখ্যা প্রদর্শন করে থাকা উচিত @যে পরিপূর্ণ হতে থাকলেন।
mellamokb

1
@ মেল্লামোকব: এটি মোটামুটি ([char[]]"$a"-eq'@').Countএখানে হবে। যে খুব বেশি যোগ না। যদিও এটি সামান্য সহজ হওয়ায় একমত হয়েছেন। যদিও আমি নীচে নামিয়েছিলাম তার রাজ্যে পড়ে না।
জোয়

3
স্ট্যাক ওভারফ্লো সম্পর্কিত: কোড গল্ফ: চলমান জল । লীরাণুনার অন্যতম সেরা, আমি ভেবেছিলাম।
dmckee

1
সুতরাং, আমাদেরও কি ভূগর্ভস্থ গুহাগুলি পরিচালনা করতে হবে, যা চলমান জল ধাঁধার মতো জলের স্তরের উপরে বায়ু থাকতে পারে? এটি বিষয়গুলিকে কিছুটা চ্যালেঞ্জযুক্ত করে তোলে এবং আমি মনে করি অবশ্যই ব্যবহারের ক্ষেত্রে উদাহরণ হওয়া উচিত।
মেল্লামব্যাক

@ ডিএমকে: এটি যদিও এতটা সহজ ছিল না।
জোয়

উত্তর:


8

সেড-আর, 27 24 (27 সহ -r)

24 (27):

:;s/(#|@) ( *#)/\1@\2/;t

27 (30):

:e;s/([#@]) ( *#)/\1@\2/;te

দুটি পার্ল সমাধানের সাথে আরও ভাল প্রতিযোগিতা করে


#|@একটি চর খাটো হবে
আপনি

2
-R পতাকার জন্য আপনার গণনায় 3 টি যুক্ত করা উচিত। eএস অপসারণ থেকে আপনি দুজনকে কেটে ফেলতে পারেন এবং অন্যটি এস.মার্কের পরামর্শ থেকে 27 এ ফিরে আসার জন্য।
ন্যাব

@ ন্যাব ধন্যবাদ, খালি লেবেল সহ কিছু আবিষ্কার করেছেন

আমি এর আগে সেড চেষ্টা করেছি, কিন্তু ব্যর্থ হয়েছিল
মিং-টাং

@ কিথ, পুরস্কারের জন্য ধন্যবাদ
5:59 এ সাউন্ডমোভ

7

পার্ল, 25

s/# +#/$_=$&;y| |@|;$_/ge

আমি একটি চরিত্রের গণনা যুক্ত করেছি। এটি প্রকৃতপক্ষে সঠিক কিনা তা দয়া করে দেখুন, কারণ এটিতে কিছু সংক্ষেপকারীর পতাকা অন্তর্ভুক্ত করতে পারে ( -pসম্ভবত?)।
জো

আমি পার্ল ভাষা জানি না, তবে আমি তার শক্তিটি অনুভব করতে পারি :)
পিঁপড়ের

আসলে আমার বাক্সে কাজ করতে function -pe` প্রয়োজন, যাতে এটি অতিরিক্ত 4 টি অক্ষর হওয়া উচিত। বা eগণনা করা হয় না এবং এইভাবে কেবল 3 টি অতিরিক্ত অক্ষর প্রয়োজন?
শে

একই কারণে আমি অন্য কোথাও উল্লেখ করেছি ই এর দরকার নেই। :)
রবার্ট পি

6

পার্ল (> = v5.9.5), 24 টি অক্ষর

সাথে চালান perl -p:

1while s/#.*\K (?=\S)/@/

এটির জন্য বিশেষ এস্কেপ ব্যবহার করতে পার্ল 5.9.5 বা তার পরে প্রয়োজন \K


1
যদি নাব্ব সঠিক হয় তবে আপনার মোট সংখ্যা ২ 27 এ পৌঁছে দিতে আপনাকে cha -p` কে 3 টি চর হিসাবে গণনা করতে হবে And এবং এটিতে অবশ্যই ` . I don't know the full rules about flags, so not sure the -epe গণনা প্রয়োজন।
শে

আসলে ইয়ের দরকার পড়বে না, যদি আপনি কেবল এন্টার টিপান এবং এটি পরে টাইপ করেন, বা কোডটি কোনও ফাইলের মধ্যে রেখে চালনা করেন। সুতরাং -আমি আসলে প্রয়োজন হয় না। :)
রবার্ট পি


2

রেটিনা , 10 বাইট

এই চ্যালেঞ্জের চেয়ে রেটিনা (অনেক বেশি) নতুন। তবে এই সমাধানটি পোস্ট না করে খুব ঝরঝরে:

T` `@`#.*#

এটি অনলাইনে চেষ্টা করুন।

এটি কেবল একটি লিপিবদ্ধের পর্যায়ে যা স্থানগুলির সাথে প্রতিস্থাপন করে @, তবে অপারেশনটি ম্যাচগুলির মধ্যেই সীমাবদ্ধ #.*#ie অর্থাত্ অক্ষর যা উভয় পক্ষের স্থল দ্বারা বেষ্টিত।


1

রুবি 1.8, 30 টি অক্ষর

#!ruby -p
gsub(/# +#/){$&.tr" ","@"}

কারও কাছে যদি ধারণা থাকে যে এটি রুবি ১.৯ এ কাজ করে না (1.9.2p0 এবং 1.9.2p204 দিয়ে পরীক্ষিত), যদিও ডকুমেন্টেশনটি বলছে এটি কাজ করা উচিত , আমাকে জানান!


এটি সত্যই অদ্ভুত, $_=$_.দ্বিতীয় লাইনের শুরুতে যোগ করা এটি 1.9.2 এ কাজ করে যাতে এটি করার কিছু Kernel.gsub। রুবিনিয়াসও স্পষ্টভাবে যোগ না করে ব্যর্থ হয় $_
নিমো 157

১.৯.১ নিউজ লগ অনুসারে, কার্নেল # getc, #gsub, # সুব্রকে অবমুক্ত করা হয়েছে।
আপনি

1
আমি মনে করি আপনি এটি 30 হিসাবে গণনা করতে পারেন ( -pপতাকাটি প্রয়োজনের জন্য 27 + 3 )। দোভাষীর হ্যাশ-ব্যাশ এবং নাম গণনা করে না।
কালেব

1

পাইথন, 95 92 বাইট

for s in S.split('\n'):b=s.find('#');e=s.rfind('#');print s[:b]+s[b:e].replace(' ','@')+s[e:]

1

05 এ বি 1 ই , 17 16 বাইট

|εγć?D¨ð'@:sθJJ,

এটি অনলাইনে চেষ্টা করুন।

ব্যাখ্যা:

|            # Take all input-lines as list
 ε           # For each line:
  γ          #  Split the line into chunks of consecutive equal characters
             #   i.e. " ##   # " → [' ','##','   ','#',' ']
   ć         #  Split into head and the rest of the list
             #   i.e. [' ','##','   ','#',' '] → ['##','   ','#',' '] and ' '
    ?        #  Print this head
   D         #  Duplicate the rest of the list
    ¨        #  Remove the last element
             #   i.e. ['##','   ','#',' '] → ['##','   ','#']
     ð'@:    #  Replace every space with a "@"
             #   i.e. ['##','   ','#'] → ['##','@@@','#']
     sθ      #  Swap so the duplicated list is at the top, and take the last item as is
             #   i.e. ['##','   ','#',' '] → ' '
         JJ  #  Join the lists and individual items in the list together to a single string
             #   i.e. ['##','@@@','#'] and ' ' → "##@@@# "
           , #  Print with trailing new-line

0

জাভাস্ক্রিপ্ট, 107 বাইট

var f=function(x){return x.replace(/# +#/g, function(x){return "#"+new Array(x.length-1).join("@")+"#";})};

Ungolfed:

var f = function(x) {
    return x.replace(/# +#/g, function(x){
        return "#" + new Array(x.length - 1).join("@") + "#";
    })
};

আমি আপনাকে প্রস্তাব দিচ্ছি যে আপনি (1) আপনার উত্তরের একটি সাধারণ বিন্যাসিত সংস্করণ পোস্ট করুন যাতে এটি পড়া এবং অনুসরণ করা আরও সহজ হয় এবং (2) ES6 এ সন্ধান করা ... এটি আপনার ফাংশনগুলির সাহায্যে আপনাকে অনেকগুলি অক্ষর সাশ্রয় করতে পারে ।
স্যার পাইথন

আমি একটি সাধারণ সংস্করণ পোস্ট করব, তবে আমি কোনও ES6 ধরণের ব্যক্তি নই।
ববTheAwesome

@ BobTheAwesome আপনি কেবল এই সম্পাদনাটির পরামর্শ দিয়েছেন কেন ?
টিম

ওহ সদর্থক, আমি পরীক্ষার ক্ষেত্রে ত্রুটিটি ঠিক করার চেষ্টা করছিলাম তবে আপনি যদি এক্স কে সি ডি জানেন তবে ক্রোমে আমার এই এক্সটেনশনটি সক্ষম হয়েছে। এর জন্যে দুঃখিত.
ববআউইউইজ

ES6 কাপড় এছাড়া: আপনি কমা পরে জায়গা প্রয়োজন হবে না, আপনি দ্বিতীয় পরে জায়গা প্রয়োজন হবে না return, এবং আপনি দুই সেমিকোলন অপসারণ করতে পারেন, এবং এটা হতে পারে function f(x)...অথবাf=function(x)...
Zachary

0

পাইথন, 108 106 92 বাইট

import re
n=1
while n: S,n=re.subn('# +#',lambda m:'#'+'@'*len(m.group(0)[2:])+'#',S)
print S


0

পিপ , 15 বাইট

aR:`#.*#`_TRs'@

কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে মাল্টলাইন স্ট্রিং হিসাবে ইনপুট নেয়: এটি অনলাইনে চেষ্টা করুন! (অথবা, উল্লেখ -rnপতাকা এবং প্রথম পরিবর্তন aকরতে g, এবং আপনি stdin মাধ্যমে ইনপুট দিতে পারেন: ! অনলাইনে এটিকে পরখ করে )

রেটিনা উত্তর হিসাবে একই ধারণা: ম্যাচটিতে #.*#স্থান লিপিবদ্ধের ফলাফলের সাথে রেগেক্সের প্রতিটি ম্যাচ প্রতিস্থাপন করুন @। খাঁটি রেইজেক্স সমস্যার জন্য পিপ রেটিনার তীক্ষ্ণতার সাথে মেলে না - তবে জেলির সাথে আপনি বেঁধে রাখতে পারেন এমন কোনও দৈনন্দিন বিষয় নয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.