একটি পাহাড়ের নিচে ঘূর্ণায়মান একটি শিলা গণনা করুন


17

ভূমিকা

সিসিফাস ইদানীং কাজে কিছু ঝামেলা করছিল। দেখে মনে হচ্ছে তিনি কখনই কিছু করেন না এবং তিনি এই সমস্যার সমাধান খুঁজে পেতে পছন্দ করবেন।

তার বর্তমান কর্মসংস্থানের জন্য একটি পাহাড়ের উপরে একটি শিলা গড়া দরকার। তিনি সাধারণত নিজের কাজটি ভালভাবে করেন তবে প্রতিবার তিনি পাহাড়ের চূড়ায় কাছে এসে এটি আবার নেমে আসে।

তিনি তার কাজটি দেখে সত্যিই হতাশ হয়ে পড়েছেন এবং কম্পিউটারটি পাহাড়ের উপর দিয়ে শিলাটি সকেট করে সায়েন্টিফিকভাবে সমস্যার সমাধান করতে চান।

এটি এমনটি ঘটে যে সিসিফাস প্রোগ্রামিংয়ে বিশেষত ভাল না, তাই আপনি কি তাকে সাহায্য করতে পারেন?

চ্যালেঞ্জ

এই নির্বোধ পরিচিতির পরে, আসুন ব্যবসায় আসি। আপনার প্রোগ্রামটি পাহাড় এবং শিলাটির একটি চিত্র পাবে যা এর সাথে একই রকম দেখাচ্ছে:

#o        
##
###
######
######## 

যেখানে #পাহাড়ের একটি অংশকে oউপস্থাপন করে এবং শিলাটি উপস্থাপন করে।

আপনাকে এখন এমন একটি প্রোগ্রাম বাস্তবায়ন করতে হবে যা রক 1 স্তরটিকে নীচে নিয়ে যায়। উদাহরণস্বরূপ, উপরের ফলাফলটি হওয়া উচিত:

#        
##o
###
######
######## 

যদি কোনও অনুভূমিকভাবে এমনকি অঞ্চল থাকে তবে পাহাড়টি কেবল অনুভূমিকভাবে ঘূর্ণায়মান হয়, তাই ...

o
######## 

... এটি কেবল পাশের পাথরের রোল তৈরি করবে।

 o
######## 

যদি উল্লম্ব অঞ্চল থাকে তবে শিলাটি এক ধাপে নীচে নেমে যায়, তাই ...

#o
#
#
##### 

... ফল ...

#
#o
#
##### 

আপনি চিত্রের এক লাইনে যথাক্রমে চিত্রের প্রস্থ এবং উচ্চতাও পাবেন। সুতরাং, সম্পূর্ণরূপে, আমাদের নমুনা ইনপুটটি দেখতে এমন হবে:

10 5
#o        
##        
###       
######    
######### 

(মনে রাখবেন যে এখানে সাদা স্থান স্পেস রয়েছে the পাঠ্যটি নির্বাচন করুন এবং দেখুন আমার অর্থ see

কিছু বিশদ

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

  • আপনি ধরে নিতে পারেন নীচে যাওয়ার জন্য সবসময়ই কোনও উপায় রয়েছে, সুতরাং যেখানে পথ "অবরুদ্ধ" রয়েছে তা ইনপুট অনির্ধারিত আচরণের কারণ হতে পারে

  • আপনি ধরে নিতে পারেন সর্বশেষ লাইনে সর্বদা একটি স্থান রয়েছে। শিলাটি সেখানে "বিশ্রাম" হওয়া উচিত, সুতরাং প্রোগ্রামটি কয়েকবার কল করার পরে, সর্বদা এটির আউটপুটটি নিজের মধ্যে পাইপিংয়ের পরে, আপনাকে শেষ লাইনে শিলাটি দিয়ে শেষ করা উচিত, যেখানে স্থানটি আগে ছিল।

  • আপনার পছন্দ মতো যে কোনও ফর্মের ইনপুট গ্রহণ করতে পারেন (স্টিডিন, ফাইল, ...)। আপনাকে পুরো প্রোগ্রামটি পোস্ট করতে হবে (সুতরাং সমস্ত প্রাক-প্রাথমিক ভেরিয়েবলগুলি কোড হিসাবে গণনা করা হবে)।

  • লাইনগুলি দিয়ে সমাপ্ত হয় \n

  • আপনি এখানে কিছু উদাহরণ ইনপুট পেতে পারেন (স্পেসগুলি সঠিকভাবে অনুলিপি করার বিষয়টি নিশ্চিত করুন!)

  • এটি , তাই কমপক্ষে বাইটস সহ কার্য জমা দেওয়া ।

  • বিজয়ী 26 জুলাই, 2014 এ নির্বাচিত হবে You এর পরে আপনি সমাধান পোস্ট করতে পারেন, তবে আপনি জিততে পারবেন না

আপনার যদি কোনও প্রশ্ন থাকে তবে আমাকে মন্তব্যগুলিতে জানান।

শুভ গল্ফিং!


আপনার শেষ উদাহরণ হিসাবে সাদা স্থানের একটি পিছনে কলাম থাকবে? (কারণ অন্যদের কাছে এটি নেই)
মার্টিন ইন্ডার

@ এম.বয়েটনার সর্বশেষ উদাহরণে কেবলমাত্র 9 #টি রয়েছে, সুতরাং প্রান্তটি 10 হ'ল শেষে একটি স্থান রয়েছে এই ক্ষেত্রে (কয়েকটি পুনরাবৃত্তির পরে) শিলাটি যেখানে সাদা স্থান রয়েছে সেখানে স্থাপন করবে (সুতরাং নীচে -ডানের কিনারা).
ক্রিস্টোফ বাহ্মওয়ালদার

হ্যাঁ, আমি বুঝতে পেরেছি, আমি কেবল ভাবছিলাম যে আমরা এটি সর্বদা ক্ষেত্রে ধরে নিতে পারি কিনা , কারণ এটি আপনার অন্যান্য উদাহরণগুলির জন্য নয়। (এটি বলা হচ্ছে, আপনার অন্যান্য উদাহরণগুলিতে মোটামুটি কোনও পেছনের সাদা জায়গা নেই))
মার্টিন ইন্ডার

6
এটিকে "রক অ্যান্ড রোল" বলার দুর্দান্ত সুযোগটি মিস করেছেন
কিউউইউআর

1
@ হ্যাকারকো আপনি ঠিক বলেছেন একটি চরিত্র অপসারণ দ্বারা স্থির: ডি
মার্টিন ইন্ডার

উত্তর:


35

রেজেক্স (। নেট, পার্ল, পিসিআরই, জাভাস্ক্রিপ্ট, ... স্বাদ), 25 বাইট

হ্যাঁ, এটি আবার কিছুটা বিতর্ক তৈরি করবে, নিয়মিত প্রকাশটি বৈধ প্রোগ্রাম কিনা, তবে আমি তা প্রাক-শূন্য করে বলব যে এই জমাটি কেবল মজাদার জন্য এবং বিজয়ীর পক্ষে বিবেচনা করার প্রয়োজন নেই। (নীচে 31 বাইট পার্ল বৈকল্পিকের বিপরীতে;)))

সুতরাং এখানে একটি খাঁটি regex প্রতিস্থাপন সমাধান।

প্যাটার্ন (পিছনের স্থানটি নোট করুন):

o(( *)\n#*)(?=\2) |o 

প্রতিস্থাপন (অগ্রণী স্থান নোট করুন):

 $1o

বাইট গণনা দুটিয়ের যোগফলের জন্য।

আপনি এটি http://regexhero.net/tester/ এ পরীক্ষা করতে পারেন । পেস্ট করার সময় ইউনিক্স-স্টাইলের লাইন শেষগুলি বেছে নেওয়ার এবং "পেস্ট করা ফর্ম্যাটিং সংরক্ষণ করুন" নিশ্চিত করে নিন। যদি এটি এখনও কাজ না করে, আপনি এখনও উইন্ডোজ-স্টাইলের লাইনের শেষগুলি আটকে দিয়েছেন। সেক্ষেত্রে সবচেয়ে সহজ সমাধানটি প্যাটার্নটিতে এটি কাজ করে তা প্রতিস্থাপন \nকরা \r\n

এটি ব্যবহার করে এখানে একটি 48 বাইট ECMAScript 6 ফাংশন রয়েছে

f=(s)=>s.replace(/o(( *)\n#*)(?=\2) |o /,' $1o')

অবশেষে, আমি একটি আসল প্রোগ্রাম পেয়েছি। এটি পার্লের 31 বাইট (দুটি বাইট pএবং 0পতাকা সহ ; পরামর্শের জন্য ভেন্টোরোর ধন্যবাদ!)

s/o(( *)\n#*)(?=\2) |o / $1o/

আপনি যদি এটি পরীক্ষা করতে চান তবে এটি কোনও ফাইলে সংরক্ষণও করবেন না, কেবলমাত্র করুন

perl -p0e 's/o(( *)\n#*)(?=\2) |o / $1o/' < hill.txt

দুর্ভাগ্যক্রমে (অনলাইন টেস্টারে) আমার জন্য কাজ করে না। এটি সর্বদা শিলাটি ডানদিকে নিয়ে যায়। 40 বাইট যদিও দুর্দান্ত শুরু, এটি করা শক্ত হবে!
ক্রিস্টোফ বাহ্মওয়ালদার

@ হ্যাকারকো আপনি ঠিক বলেছেন, আমি ঠিক লক্ষ্য করেছি একটি সমস্যা আছে। স্থির করা হচ্ছে ...
মার্টিন ইন্ডার

@ হ্যাকারকো না, আমি মনে করি এটি আসলে কাজ করে, তবে "ফরম্যাটিং সংরক্ষণ করুন" লাইনটি সমাপ্ত করে ওভাররাইট করে, সুতরাং যদি আপনি উইন্ডোজ-স্টাইলের লাইন শেষগুলি পেস্ট করেন তবে এটি কার্যকর হয় না (এর \nসাথে প্রতিস্থাপনের চেষ্টা করুন \r\n)
মার্টিন ইন্ডার

আমার জন্য যখন ডান প্রাচীরের বিপরীতে থাকে তখন শিলাটি পড়ে না। এটি কেবল তখনই মেলে যখন এটির পিছনে স্থান রয়েছে।
ব্রুনোজে

4
আমার কীভাবে মারতে হবে? দুর্দান্ত সমাধান
qwr

3

পাইথন - 190

স্লাইসিং এবং কনটেনটেশন হরর, পাশাপাশি অনেকগুলি ভেরিয়েবল। আমি নিশ্চিত এটি আরও গল্ফ করা যেতে পারে, তবে আমি এই মুহুর্তে কোনও চৌকস অজগর কার্যকারিতা সম্পর্কে ভাবতে পারি না। ইনপুট স্ট্রিং মধ্যে সংরক্ষণ করা হয় s

r=" "
o="o"
i=s.index(o)
b=i+int(s.split(r)[1])
q=s[:i]+r
x=s[b+3:]
try:
 a=s[b+1:b+3]
 if a[0]==r:s=q+s[i+1:b+1]+o+r+x
 elif a[1]==r:s=q+s[i+1:b+2]+o+x
 else:s=q+o+s[i+2:]
except:1
print(s)

যেহেতু অজগর স্ট্রিং অপরিবর্তনীয়, আমি এর আগে সমস্ত চরিত্র, আমার নতুন চরিত্র এবং তারপরে সমস্ত চরিত্রগুলি একত্রিত করে একটি চরিত্রকে প্রতিস্থাপন করি। পাহাড়ের প্রস্থ এবং সূচিটি কোথায় ব্যবহার করা উচিত তা নির্ধারণের জন্য আমি ব্যবহার করি।


3
আমার চোখ জ্বলছে. +1
ক্রিস্টোফ বাহ্মওয়ালদার

2

রুবি, 65/55 অক্ষর

অনুভূত আমি কতক্ষণ সমাধান দেখতে পাচ্ছি যে এটি কেবল সমস্যার উপর একটি রেজেক্স ছুঁড়ে না।

r=gets p
r[r[(r[k=1+~/o/+x=r.to_i,2]=~/ /||-x)+k]&&=?o]=" "
$><<r

যেমনটি প্রত্যাশা করা হয়েছিল, এটি এম.বয়েটনার এর রেজেক্স সমাধান হিসাবে খুব কম নয় - তবে এটি আর বেশি দিন নয়।

দোভাষী পতাকা ব্যবহার করার সময়, এটি 55 টি অক্ষরে ছোট করা যেতে পারে (কোডের জন্য 53, পতাকাগুলির জন্য 2):

sub$_[($_[k=1+~/o/+x=$_.to_i,2]=~/ /||-x)+k]&&=?o," "

কোডটি এভাবে চালান:

ruby -p0e 'sub$_[($_[k=1+~/o/+x=$_.to_i,2]=~/ /||-x)+k]&&=?o," "' < input

2

এইচটিএমএল জাভাস্ক্রিপ্ট - 251 অক্ষর

( 251 আপনি একক উদ্ধৃতি যে ইনপুট পড়ে এবং আউটপুট। ফেরৎ ভিতরে কোড গণনা যদি 359 আপনি ইনপুট বক্সে, ইনপুট স্ট্রিং, বোতাম, ইত্যাদি গণনা 192 যদি আপনি শুধু কাজ করে যে গণনা।)

গল্ফ কোড:

<pre id="i">10 5
#o        
##        
##        
######    
######### </pre><button onclick='i=document.getElementById("i");h=i.innerHTML;if(p=h.
match(/([\s\S]*?)([# ]+)(o *\n)(#+)([\s\S]*)/)){if(p[4].length>p[2].length+1)p[3]=p[3].
replace("o "," o");else{p[3]=p[3].replace("o"," ");p[5]="o"+p[5].substr(1);}p[0]="";
h=p.join("");}i.innerHTML=h;'>Go</button>

http://goo.gl/R8nOIK
বারবার "যান" ক্লিক করুন
বারবার "যান" ক্লিক করুন।

পদ্ধতি

আমি স্ট্রিং.ম্যাচ () ব্যবহার করে টিলাটি 5 টি ভাগে ভাঙতে পারি, তারপরে আমি এক বা দুটি অংশ পরিবর্তন করি। আমি জাভাস্ক্রিপ্ট শিখছি, তাই কোনও পরামর্শ প্রশংসা করা হবে।

পঠনযোগ্য কোড

<pre id="io">10 5
#o        
##        
##        
######    
######### </pre>

<button onclick='

    // get image
    io = document.getElementById("io");
    image = io.innerHTML;

    // break image into five parts
    // 1(10 5\n#         \n##        \n) 2(### ) 3(o     \n) 4(######) 5(    \n######### )
    if (parts = image.match(/([\s\S]*?)([# ]+)(o *\n)(#+)([\s\S]*)/)) {

        // move rock to the right
        if (parts[4].length > parts[2].length + 1)
            parts[3] = parts[3].replace("o ", " o");

        // or move rock down
        else {
            parts[3] = parts[3].replace("o", " ");
            parts[5] = "o" + parts[5].substr(1);
        }

        // return new image
        parts[0] = "";
        image = parts.join("");

        // MAP io:i image:h parts:p
    }
    io.innerHTML = image;
'>Go</button>

1

পাইথন 2 - 289 252 বাইট

p=raw_input
w,h=map(int,p().split())
m=[p()for a in[0]*h]
j=''.join
f=lambda s:s.replace('o ',' o')
for i,r in enumerate(m):
 x=r.find('o')
 if x+1:y=i;break
if m[y+1][x]=='#':m=map(f,m);x+=1
print w,h
print'\n'.join(map(j,zip(*map(f,map(j,zip(*m))))))

আমি কিছু উল্লেখযোগ্য উন্নতি করেছি তবে এটি এখনও ভয়াবহ। এটিকে পাইথন 3 এ রূপান্তরিত করে আরও কয়েকটা বাইট সংরক্ষণ করা যায় তবে আমার আর্স করা যায় না।

প্রথম, আমি শিলা খুঁজে। তা অবিলম্বে নিচে চরিত্র যদি '#', প্রতিটি উদাহরণের প্রতিস্থাপন 'o 'সঙ্গে ' o'। যেহেতু শেষে অতিরিক্ত স্থান হওয়ার নিশ্চয়তা রয়েছে, এটি সর্বদা শিলাটি ডানদিকে নিয়ে যাবে।

আমি কেবল এটি করেছি বা না করুক না কেন, আমি পুরো গ্রিডটি স্থানান্তর করি zip(*m)। তারপরে, আমি এর 'o 'সাথে আরও একটি প্রতিস্থাপন করি ' o'। যদি শিলার ডানদিকে কোনও জায়গা থাকে, তার অর্থ সত্যিকারের গ্রিডে এর নীচে একটি জায়গা রয়েছে, তাই এটি সরানো হয়ে যায়। তারপরে আমি আবার ট্রান্সপোজ করে প্রিন্ট করি।


এটি কি অপের তৃতীয় উদাহরণটিকে বিঘ্নিত করবে না, যেখানে শিলাটির ডান এবং নীচে খালি জায়গা আছে এবং এটি তির্যকভাবে সরানো হবে?
ডুরকনব

@ dor এটি করা উচিত নয়। নীচের স্থানটি থাকলে আমি কেবল ডানদিকে #চলে যাই এবং চেকটি উল্লম্বভাবে সরানোর আগে আমি সেই চেকটি করি।
ভূগর্ভস্থমোরাইল

1

পাইথন (201)

import sys
print(input())
g=list(sys.stdin.read())
o='o'
x=g.index(o)
n=x+g.index('\n')+1
try:
 if g[n]==' ':g[n]=o
 elif g[n+1]==' ':g[n+1]=o
 else:g[x+1]=o
 g[x]=' '
except:1
print(*g,sep='',end='')

1

awk, 152

awk 'NR==1{w=$2}{if(NR<=w&&$0~/o/){r=index($0,"o");g=$0;getline;if(index($0,"# ")<=r){sub("o"," ",g);sub(" ","o")}else{sub("o "," o",g)}print g}print}'

আরও পঠনযোগ্য

    awk '
  NR==1{  //If we're at the first line, set the width from the second column in the header.
    width=$2
  }
  {
    if(NR<=width && $0~/o/){   //If not at the bottom, look for the line with the rock.
      rockIndex=index($0,"o"); //Set the position of the rock.
      orig=$0;                 //Remember the current line so we can compare it to the next.
      getline;                 //Get the next line.

      if(index($0,"# ")<= rockIndex){  //Move down: if the rock is on a cliff or on a slope,
        sub("o"," ",orig);             //update the orig so that the rock is removed
        sub(" ", "o")                  //and update the current (first available position).
      }                                         
      else {                           //Move right: if the rock is on flat ground,
        sub("o "," o", orig)           //update the orig so the the rock is advanced.
      }
      print orig                       //Print the line we skipped (but stored      
    }                                  //and updated based on the line we're now on).
    print                              //Print the line we're now on.
  }
'

0

পিএইচপি 485 484 চর

আমি জানি m.buettner দ্বারা প্রবেশের তুলনায় এটি বিশাল massive তবে আমি এখনই করতে পারি সেরা। আমি মনে করি ইনপুট স্ট্রিংটিকে একটি বহুমাত্রিক অ্যারে রূপান্তর করার জন্য আরও দ্রুত উপায় থাকতে হবে তবে এখন এটি খুব দেরী।

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

আমার কোডটি এখানে: ইনপুটটি প্রথম চলকটিতে রয়েছে in

<?
$a.='10 5
#o         
##       
###       
######    
#########';$b=array();$c=explode("\n",$a);$d=explode(" ",$c[0]);$e=$d[0];$f=$d[1];unset($c[0]);$g=0;foreach($c as $h){$b[$g]=str_split($h);++$g;}for($i=0;$i<$f;++$i){for($j=0;$j<$e;++$j){if($b[$i][$j]=='o'){$k=$j;$l=$i;$b[$i][$j]=' ';}}}if($b[$l+1][$k]!='#'){$b[$l+1][$k]='o';}else if($b[$l+1][$k+1]!='#'){$b[$l+1][$k+1]='o';}else{$b[$l][$k+1]='o';}echo"$e $f\n";for($i=0;$i<$f;++$i){for($j=0;$j<$e;++$j){echo $b[$i][$j];}echo "\n";}

কোডেপ্যাডে আপনি এখানে এটি ক্রিয়াতে দেখতে পাচ্ছেন

সম্পাদনা: ওপরের পরিবর্তে 0 আউটপুট দেওয়ার সাথে সাথে উপরের কোডপ্যাড এবং কোডটি পরিবর্তিত হয়েছে, যখন আমি প্রোগ্রামটিতে আউটপুটটি ফিড করার চেষ্টা করেছি তখন সমস্যা হয়েছিল। এখনই স্থির করা হয়েছে এবং একটি চর সংরক্ষণ করা হয়েছে!


0

গ্রোভি - 263 261 256 অক্ষর

Golfed। স্ট্রিংয়ে ফাইলটি পড়ুন এবং একটি ফাংশন pঅনুকরণ করতে একটি ফাংশন ব্যবহার করুন String.putAtIndex(index,value):

o="o"
b=" "
s=new File(args[0]).text
z={s.size()-it}
s=s[0..z(2)]
w=s.find(/\n.*?\n/).size()-1
p={i,v->s=s[0..i-1]+v+((i<z(0)-2)?s[i+1..z(1)]:"")}
try{
t=s.indexOf o
i=w+t
j=i+1
x=t+1
(s[i]==b)?x=i:(s[j]==b)?x=j:0
p x,o
p t,b
}catch(Exception e){}
print s

অবহেলিত (কিছুটা):

o = "o"
b = " "
s = new File(args[0]).text
z = {s.size()-it}
s = s[0..z(2)]
w = s.find(/\n.*?\n/).size()-1

putAtIndex = { i,val -> 
    s = s[0..i-1] + val + ((i<z(0)-2)?s[i+1..z(1)]:"") 
}

try {
    t=s.indexOf o
    i=w+t
    j=i+1
    x=t+1
    // default x as horizontal move
    // check for (a) directly below (b) below and over one
    (s[i]==b) ? x=i : ( (s[j]==b) ? x=j : 0)
    putAtIndex x,o
    putAtIndex t,b
} catch (Exception e) {}
print s

খুশী হলাম। আমি ভাষা জানি না, কিন্তু আমি প্রায় নিশ্চিত আপনি (অন্তত) দুই বাইট পরিত্রাণ পেতে পারেন করছি যদি আপনি লিখতে try{পরিবর্তে try {এবং catch(Exceptionপরিবর্তে catch (Exception
ক্রিস্টোফ বাহ্মওয়ালদার

প্রকৃতপক্ষে! নোটটির জন্য ধন্যবাদ ....
মাইকেল ইস্টার

0

আর, 234

require(stringr)
g=scan(,"")
g=do.call(rbind,strsplit(str_pad(g,m<-max(nchar(g)),"r"),""))
if(g[(x<-which(g=="o"))+1]==" "){g[x+1]="o";g[x]=""}else{if(!is.na(g[x+1])){g[x+(n<-nrow(g))]="o";g[x]=""}}
for(i in 1:n) cat(g[i,],"\n",sep="")

স্ট্রিং ম্যানিপুলেশন আর এর শক্তিশালী বিন্দু নয়।

আরও পঠনযোগ্য:

require(stringr) # load package `stringr`, available from CRAN. required for `str_pad`
g=scan("")       # read input from console
g=do.call(       # applies the first argument (a function) to the second argument (a list of args to be passed) 
  rbind,         # "bind" arguments so that each one becomes the row of a matrix
  strsplit(      # split the first argument by the second
    str_pad(g,max(nchar(g)),"r"," "), # fill each row with whitespace
    "")
)
if(g[(x<-which(g=="o"))+1]==" ") { # if the next element down from the "o" is " "...
  g[x+1]="o";g[x]=""               # make it an "o" and replace the current element with ""
} else {
  if(!is.na(g[x+1])) {             # if the next element down is not empty (i.e. out of range)
    g[x+nrow(g)]="o"; g[x]=""      # move "o" right
  }
}
for(i in 1:n) cat(g[i,],"\n",sep="") # print to console

0

সি (182)

char b[1024],*x,*n;main(z){read(0,b,1024);n=index(b,10)+1;x=index(n,'o');z=index(n,10)-n;n=x+z+1;if(n[1]){if(*n==32)*n='o';else if(n[1]==32)n[1]='o';else x[1]='o';*x=32;}printf(b);}

অথবা, আপনি যদি আসলে কোডটি পড়তে চান:

char b[1024],*x,*n; //1024 byte buffer hard coded
main(z){
    read(0,b,1024);
    n=index(b,10)+1; //start of line 2
    x=index(n,'o');
    z=index(n,10)-n; //10='\n'
    n=x+z+1; //reusing n
    if(n[1]){ //if not 0
        if(*n==32) //32=' '
            *n='o';
        else if(n[1]==32)
            n[1]='o';
        else
            x[1]='o';
        *x=32;
    }
    printf(b);
}

0

ক্লোজার - 366 অক্ষর

রেজেক্স ছাড়া। "D" নামে প্রয়োজনীয় ইনপুট ফাইল। Golfed:

(def s(slurp "d"))(def w(-(.length(re-find #"\n.*?\n" s))2))(def t(.indexOf s "o"))(def i(+ t w 1))(defn g[i,j,x,c](cond (= x i) \ (= x j) \o :else c))(defn j[i,j] (loop[x 0](when(< x (.length s))(print(g i j x (.charAt s x)))(recur(inc x)))))(try(cond(= \ (.charAt s i))(j t i)(= \ (.charAt s (inc i)))(j t (inc i)):else (j t (inc t)))(catch Exception e (print s)))

Ungolfed:

(def s (slurp "d"))
(def w (- (.length (re-find #"\n.*?\n" s)) 2))
(def t (.indexOf s "o"))
(def i (+ t w 1))
(defn g [i,j,x,c] (cond (= x i) \ (= x j) \o :else c))

(defn j [i,j] (loop [x 0]
     (when (< x (.length s))
     (print (g i j x (.charAt s x))) (recur (inc x)))))

(try (cond (= \ (.charAt s i)) (j t i)
           (= \ (.charAt s (inc i))) (j t (inc i))
           :else (j t (inc t)))(catch Exception e (print s)))

নমুনা রান (কেবলমাত্র একটি ক্ষেত্রে, বংশবৃদ্ধির জন্য):

bash-3.2$ cat d
6 7
#     
#     
#     
## o  
####  
####  
##### 

bash-3.2$ java -jar clojure-1.6.0.jar hill.clj 
6 7
#     
#     
#     
##    
####o 
####  
##### 

আমি নবাগত। পরামর্শ স্বাগত জানাই।


0

ম্যাটল্যাব, 160

function r(f)
F=cell2mat(table2array(readtable(f)));
m=@(d)mod(d-1,size(F,1));C=find(F=='o');P=find(F==' ');N=min(P(P>C&m(P)>=m(C)));F([C,N])=F([N,C]);
disp(F);

বেদনাদায়ক অংশটি ফাইল-ইনপুট। আসল গণনাটি কেবল 114 বাইট হবে:

function F=r(F)
m=@(d)mod(d-1,size(F,1));C=find(F=='o');P=find(F==' ');N=min(P(P>C&m(P)>=m(C)));F([C,N])=F([N,C]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.