মাগ্রাথিয়া ২.০ - বিল্ডিং পর্বতমালা


50

সর্বজনীন অর্থনীতির বড় ক্রাশের সাথে কাস্টম তৈরি গ্রহগুলির চাহিদাও নিমজ্জিত। ম্যাগারথিয়ানদের আরও বিস্তৃত শ্রেণীর গ্রাহকদের কাছ থেকে আরও স্থিতিশীল আয়ের দেখাশোনা করতে হয়েছিল। অতএব, তারা স্বল্প বাজেটের সাথে সম্পূর্ণ গ্রহের সামর্থ্য না করতে পারে এমন লোকদের জন্য আপনার নিজস্ব পর্বত (বা সংক্ষিপ্ত সর্বনাশ-পাহাড়) শৃঙ্খলা উদ্ভাবন করেছে।

পাহাড়-পর্বত গ্রাহকের পরিকল্পনা অনুযায়ী (ওরফে সংখ্যা এবং বিন্দু স্ট্রিং) বিল্ড এবং ASCII অত্যাধুনিক ব্যবহার বিতরণ (এর মধ্যে রয়েছে , /, \, ^এবং v)।

কার্য

একটি সম্পূর্ণ প্রোগ্রাম লিখুন যা এসটিডিইএন থেকে ইনপুট (একক স্ট্রিং) নেয় বা যুক্তি হিসাবে এবং এসটিডিআউট-এ আউটপুট হিসাবে নিয়ে যায়। এই ধাঁধাটি একটি কোড-গল্ফ তাই দয়া করে গল্ফ করার জন্য কিছু প্রচেষ্টা দেখান।

ইনপুট

পর্বত শৃঙ্খলার ভিত্তি সরবরাহ করে এমন বিন্দু এবং অঙ্কগুলির একটি স্ট্রিং। প্রতিটি স্ট্রিং পাহাড়কে সমর্থন করার জন্য যথাসম্ভব দীর্ঘ এবং প্রতিটি শিখর বিন্দুর পরিবর্তে একটি অঙ্ক দ্বারা দেওয়া হয়, যা শীর্ষের উচ্চতা নির্দেশ করে।

আউটপুট

পর্বত শৃঙ্খলার একটি আসকি সংস্করণ।

  • ইনপুটটির প্রতিটি অঙ্কটি অঙ্ক ^দ্বারা নির্দেশিত উচ্চতাতে হ'ল এক শিখর ( ) উপস্থাপন করে (অর্থাত 9 সর্বোচ্চ উচ্চতা)।
  • আউটপুটগুলিতে অবশ্যই অতিরিক্ত পিকগুলি থাকা উচিত নয় (উদাহরণস্বরূপ যেখানে ইনপুটটিতে একটি বিন্দু রয়েছে।
  • পর্বতগুলি ত্রিভুজাকার আকারের, অর্থাৎ slালুগুলি তৈরি করা হয়েছে /এবং \অক্ষরগুলি ব্যবহার করে ।
  • অক্ষরটি ব্যবহার করে দুটি পর্বত ওভারল্যাপ করে দেওয়া হয় v
  • কোনও অতিরিক্ত অতিরিক্ত নিউলাইন বা ফাঁকা লাইন নেই।
  • পেছনের স্থানগুলির সাথে প্যাডিং লাইনগুলি alচ্ছিক।

আপনি ধরে নিতে পারেন যে সরবরাহ করা ইনপুটটি বৈধ, অর্থাত্ সর্বদা বিধি অনুসারে একটি সমাধান উপস্থিত থাকে (উদাঃ কোনও ইনপুট 13..বৈধ কনফিগারেশনের ফলে আসে না এবং উপেক্ষিত হতে পারে)। তদুপরি, প্রতিটি পাশেই ঠিক এমন অনেকগুলি বিন্দু রয়েছে যে পর্বতগুলি কাটাতে হবে না।

উদাহরণ

প্রথম লাইনটি ইনপুট দেখায়, অন্যান্য সমস্ত লাইন পছন্দসই আউটপুট গঠন করে। (আসলে আমার কনসোলে এখানে পাহাড়গুলি দেখতে অনেক বেশি ভাল দেখাচ্ছে))

1
^

11
^^

1.2.
  ^
^/ \

.2.3..
   ^
 ^/ \
/    \

.2..3..
    ^
 ^ / \
/ v   \

...4...3...3..
   ^
  / \  ^   ^ 
 /   \/ \ / \
/        v   \

1
কী কবিতা আর শিল্পের সমাহার! আমি এটা ভালোবাসি.
ডিভনুল

অতিরিক্ত নিউলাইন মুদ্রণ ঠিক আছে? অন্য কথায়, একটি ইনপুট জন্য 1, \n\n\n\n\n\n\n\n^অনুমোদিত?
durron597

@ durron597 আউটপুটে কোনও অতিরিক্ত অতিরিক্ত নিউলাইন থাকা উচিত নয়, উদাহরণগুলি দেখুন।
হাওয়ার্ড

স্থানচরিত্রের অক্ষর সম্পর্কে কী বলা যায়? যদি সমস্ত লাইনগুলি মূল স্ট্রিংয়ের সমান দৈর্ঘ্য হয়, ফাঁকা জায়গা দিয়ে প্যাড করা হয় তবে তা কি ঠিক আছে?
পল প্রেস্টিজ

@ ক্রোন হ্যাঁ, এটি ঠিক আছে।
হাওয়ার্ড

উত্তর:


11

জাভাস্ক্রিপ্ট: 272 268 233 232 201 192 189 188 178 180 টি অক্ষর

এটি 268 থেকে 233 টি অক্ষর থেকে হ্রাস করার জন্য @ সামকে এবং আরও 1 চরের জন্য @ মান্যাটওয়ার্কের জন্য ধন্যবাদ। একটি বাগ নির্দেশ করার জন্য @ ভাদিমআর।

p=prompt(r=t='');s=' ';for(d=10;d--;r=s+q+s,t+=q.trim()?q+'\n':'')for(q='',i=0;i<p.length;)q+=' \\/v^'[p[i++]==d?4:(/\^|\\/.test(r[i-1])+2*/\^|\//.test(r[i+1]))*(r[i]==s)];alert(t)

মতামত সহ সঠিকভাবে চিহ্নিত এবং কিছুটা দালাল সংস্করণ:

// The output initialization is just a golfing trick suggested by @manatwork.
input = prompt(state = output = '');
space = ' ';

// Repeat for each line, from the top (the highest peak, highest digit) to the floor (digit 1). Start at 10 to avoid a bug.
for (digit = 10; digit--;

      // Update the state of our automaton, at the end of the iteration.
      // Add a space after and before to simplify the future pattern recognization.
      state = space + line + space,

      // Add the line to the output if it is not an empty line, at the end of the iteration.
      output += line.trim() ? q + '\n' : '')
{ // This curly brace was added for readability, it is not in the golfed source.

  // Analyze each character in the current state to produce a new state, like a cellular automaton.
  for (line = '', i = 0; i < input.length;)
  { // This curly brace was added for readability, it is not in the golfed source.
    line +=

        // If the input is the current digit number, evaluate to 4 and put a peak in this character.
        // Otherwise evaluate this expression with those rules:
        // 1 means that the hill is higher only at right in the previous iteration, we do climb it to the right in this one.
        // 2 means that the hill is higher only at left in the previous iteration, we do climb it to the left in this one.
        // 3 means that the hill is higher at both sides in the previous iteration, we are in a v-shaped valley.
        // 0 means nothing to do here. If the middle is not a space, it will be multiplied by 0 and become 0.
        ' \\/v^'[input[i++] == digit ? 4 : (/\^|\\/.test(state[i - 1]) + 2 * /\^|\//.test(state[i + 1])) * (r[i] == space)];
    } // This curly brace was added for readability, it is not in the golfed source.
} // This curly brace was added for readability, it is not in the golfed source.

// Give the final output.
alert(output);

আপনি কোড থেকে নোট করতে পারেন, এটি সেলুলার অটোমেটনের হিসাবে কাজ করে, যেখানে প্রতিটি কোষ ইনপুটটিতে একটি সংখ্যার জন্য পরীক্ষা করে, নিজের এবং তার দুটি প্রতিবেশীর কাছে পরের পুনরাবৃত্তিটি কী হবে তা স্থির করে। প্রতিটি মুহূর্তে একটি সেল একটি হতে পারে ^, /, \, vবা । পরীক্ষার ক্ষেত্রে প্রদত্ত ইনপুট প্রত্যাশিত আউটপুট উত্পাদন করে।

নোট করুন যে alertবাক্সটি ব্যবহার করার ফলে স্তন্যপান হয়, কারণ এটিতে সাধারণত কোনও মনোপ্যাসে ফন্ট থাকে না। আপনি এর থেকে অনুলিপি হতে পারে & প্রতিলেপন টেক্সট alertআউটপুট একটি ভাল উপচয় জন্য অন্য কোথাও বক্স, অথবা আপনি শেষ লাইনটি প্রতিস্থাপন করতে পারি alertদ্বারা console.log, কিন্তু যেহেতু এই কোড-গলফ হয়, alertখাটো।

তদ্ব্যতীত, এটি ইনপুটটিতে কোনও কিছুকে বৈধতা দেয় না। এটি কেবল স্বীকৃত অক্ষরকে একইভাবে শূন্যস্থান হিসাবে বিবেচনা করে যা এটি করে .(বাস্তবে .এটি একটি অপরিচিত চরিত্রও)।


1 টি অক্ষর হ্রাস করার জন্য একটি পুরানো গল্ফিং ট্রিক রয়েছে: খালি স্ট্রিংয়ের সাথে prompt()প্যারামিটার হিসাবে ভেরিয়েবলগুলি আরম্ভ করুন
manatwork

@ মান্যাটওয়ার্ক আপনাকে ধন্যবাদ সম্পন্ন.
ভিক্টর স্টাফুসা

মাফ করবেন, সম্ভবত আমি কিছু মিস করছি, তবে আমি এফএফ এবং ক্রোমিয়াম উভয় ক্ষেত্রেই ধারাবাহিক ফলাফল পাচ্ছি। আমি একটি ব্রাউজার চালু করি, # 14 সংশোধন থেকে জেএস কোড চালাচ্ছি এবং ত্রুটির বার্তা পেয়েছি। তারপরে আমি সংশোধন # 1 থেকে কোড চালাচ্ছি - এটি ঠিক আছে। আবার আমি 14 এর কোড চালাচ্ছি - এবং কোনও ত্রুটি বার্তা নেই, এটি ঠিক আছে। সুতরাং সংশোধন # 14 এর কোড নিজেই চালানো যাবে না?
ব্যবহারকারী 2846289

1
@ ভাদিমআর ধন্যবাদ, স্থির। এটি দূষিত পরিবেশের সাথে এটি পরীক্ষার জন্য একটি পার্শ্ব প্রতিক্রিয়া ছিল। delete r; delete s; delete q; delete p; delete t; delete i; delete d;এটি দূষিত হয়নি তা নিশ্চিত করার জন্য কোডটির সাথে উপসর্গের প্রয়োজন ।
ভিক্টর স্টাফুসা

q.trim()?q+'\n':''হতে পারে q.trim()&&q+'\n', দুটি সাশ্রয়। এছাড়াও, i<p.lengthঠিক হতে পারে p[i]
নিকোলাস পিপিটোন

6

রুবি, 208 201 189

খুব মজার চ্যালেঞ্জ! এখানে একটি বিকল্প রুবি সমাধান।

gets.size.times{|x|0.upto(h=$_[x].to_i-1){|d|r=$*[h-d]||=' '*~/$/
[x+d,x-d].map{|o|r[o]=r[o]>?!??v:o<x ??/:?\\if r[o]<?w}
d<1?r[x]=?^:r[x-d+1,w=2*d-1]=?w*w}}
puts$*.reverse.*($/).tr(?w,' ')

বোনাস হিসাবে, এখানে ভিক্টরের খুব চালাক "সেলুলার অটোমেটন" অ্যালগরিদমের একটি রুবি বাস্তবায়ন, 162 টি অক্ষরে:

s=gets
9.downto(1){|h|$0=(-1..s.size).map{|x|$_=$0[x,3]
s[x]=="#{h}"??^:~/  [\^\/]/??/:~/[\^\\]  /??\\:~/[\^\\] [\^\/]/??v:' '}*''
$*<<$0[1..-2]if$0=~/\S/}
puts$*

উদাহরণ আউটপুট:

....5.....6..6.....
          ^  ^
    ^    / \/ \
   / \  /      \
  /   \/        \
 /               \
/                 \

1
আমি মনে করি আপনি $/নিউলাইনের জন্য ব্যবহার করতে পারেন ।
হাওয়ার্ড

4

সি # - 588 টি অক্ষর - যদিও রায়ের 321 এর মতো ভাল নয়!

class P{static void Main(string[] a){char[,] w=new char[a[0].Length+1,10];int x=0;foreach(char c in a[0]){if(c!='.'){int h=int.Parse(c+"");if(w[x,h]=='\0')w[x,h]='^';int s=1;for(int l=h-1;l>0;l--){for(int m=x-s;m<=x+s;m++){if(w[m,l]!='\0'){if(w[m,l]=='^')w[m,l]='/';if(w[m,l]=='\\')w[m,l]='v';}else{if(m==x-s)w[m,l]='/';else if(m==x+s)w[m,l]='\\';else w[m,l]='\0';}bool t=false;for(int f=9;f>0;f--){if(t)w[m,f]='\0';if(w[m,f]!='\0')t=true;}}s++;}}x++;}for(int k=9;k>0;k--){string u="";for(int j=0;j<w.GetLength(0);j++){u+=w[j,k];}if(u.Replace("\0","")!="")System.Console.WriteLine(u);}}}

উদাহরণ আউটপুট:

F:\>mountains ".2..3..4..."
       ^
    ^ / \
 ^ / v   \
/ v       \

বা আরও দীর্ঘ জটিল ...

F:\>mountains ".2..3..6.....5...3......1..3..4....2."
       ^
      / \    ^
     /   \  / \               ^
    /     \/   \ ^         ^ / \
 ^ /            v \       / v   \  ^
/ v                \    ^/       \/ \

উজ্জ্বল ধাঁধা ... এটি যতটা সহজ মনে হয় না ... এটি পছন্দ করে!


2
"কমপ্লেক্স ওয়ান" দুর্গঠিত, "3" এর শীর্ষ নেই।
ব্যবহারকারী 2846289

সমস্ত 3এস আছে। আপনি যদি প্রথমটির কথা বলছেন তবে এটি opeালের অংশ।
হেইন ওয়েসেলস

4

এপিএল, 65 বাইট

⍉⌽↑⌽¨h↑¨'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a←11|⎕d⍳⍞]

এই চিহ্নটি অক্ষরের অ্যারে হিসাবে কাঁচা (মূল্যায়ন করা হয়নি) ইনপুট দেয়।

একটি এপিএল সেশনে ইন্টারেক্টিভ সমাধান করা:

      s←'...4...3...3..' ⍝ let's use s instead of ⍞
      ⎕d ⍝ the digits
0123456789
      ⎕d⍳s ⍝ the indices of s in ⎕d or 11-s if not found
11 11 11 5 11 11 11 4 11 11 11 4 11 11
      11|⎕d⍳s ⍝ modulo 11, so '.' is 0 instead of 11
0 0 0 5 0 0 0 4 0 0 0 4 0 0
      a←11|⎕d⍳s ⍝ remember it, we'll need it later
      ⍴a ⍝ length of a
14
      ⍳⍴a
1 2 3 4 5 6 7 8 9 10 11 12 13 14
      ⍝ ∘.-    subtraction table
      ⍝ ∘.-⍨A  same as: A ∘.- A
      ⍝ |      absolute value
      |∘.-⍨⍳⍴a
 0  1  2  3 4 5 6 7 8 9 10 11 12 13
 1  0  1  2 3 4 5 6 7 8  9 10 11 12
 2  1  0  1 2 3 4 5 6 7  8  9 10 11
 ...
13 12 11 10 9 8 7 6 5 4  3  2  1  0
      ⍝ ↓      split the above matrix into rows
      ⍝ a-     elements of "a" minus corresponding rows
      ⍝ ⊃⌈/    max them together
      ⊃⌈/a-↓|∘.-⍨⍳⍴a
2 3 4 5 4 3 3 4 3 2 3 4 3 2
      ⍝ This describes the desired landscape,
      ⍝ except that it's a little too high.
      ⍝ Add -1 to correct it:
      ¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a
1 2 3 4 3 2 2 3 2 1 2 3 2 1
      ⍝ Perfect!  Call it "h":
      h←¯1+⊃⌈/a-↓|∘.-⍨⍳⍴a
      0,⍨h ⍝ append a 0 (same as h,0)
1 2 3 4 3 2 2 3 2 1 2 3 2 1 0
      0,0,⍨h ⍝ also prepend a 0
0 1 2 3 4 3 2 2 3 2 1 2 3 2 1 0
      2-/0,0,⍨h ⍝ differences of pairs of consecutive elements
¯1 ¯1 ¯1 ¯1 1 1 0 ¯1 1 1 ¯1 ¯1 1 1 1
      ⍝ this gives us slopes between elements
      2+/2-/0,0,⍨h ⍝ sum pairs: left slope + right slope
¯2 ¯2 ¯2 0 2 1 ¯1 0 2 0 ¯2 0 2 2
      ×2+/2-/0,0,⍨h ⍝ signum of that
¯1 ¯1 ¯1 0 1 1 ¯1 0 1 0 ¯1 0 1 1
      2+×2+/2-/0,0,⍨h ⍝ add 2 to make them suitable for indexing
1 1 1 2 3 3 1 2 3 2 1 2 3 3
      ⍝ Almost ready.  If at this point we replace
      ⍝ 1:/ 2:v 3:\, only the peaks will require fixing.
      ~×a ⍝ not signum of a
1 1 1 0 1 1 1 0 1 1 1 0 1 1
      (~×a)×2+×2+/2-/0,0,⍨h ⍝ replace peaks with 0-s
1 1 1 0 3 3 1 0 3 2 1 0 3 3
      ⍝ Now replace 0:^ 1:/ 2:v 3:\
      ⍝ We can do this by indexing a string with the vector above
      ⍝ (and adding 1 because of stupid 1-based indexing)
      '^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h]
///^\\/^\v/^\\
      ⍝ Looks like our mountain, only needs to be raised according to h
      r←'^/v\'[1+(~×a)×2+×2+/2-/0,0,⍨h] ⍝ name it for convenience
      h¨↑r ⍝ extend r[i] with spaces to make it h[i] long
 /  /   /    ^     \    \   /   ^    \   v  /   ^    \   \
      ↑⌽¨h¨↑r ⍝ reverse each and mix into a single matrix
/
 /
  /
   ^
  \
 \
 /
  ^
 \
v
 /
  ^
 \
\
      ⍉⌽↑⌽¨h¨↑r ⍝ reverse and transpose to the correct orientation
   ^
  / \  ^   ^
 /   \/ \ / \
/        v   \

3

রুবি, 390 টি অক্ষর

হ্যাঁ, এই এক কঠিন ছিল।

আমি প্রতিটি চরিত্রের জন্য একটি নতুন স্ট্রিং যুক্ত করতে পেরেছি, একটি ভেরিয়েবল ব্যবহার করে sযার অর্থ "পরবর্তী অক্ষরটি এড়িয়ে চলুন" যা প্রক্রিয়াকরণের জন্য প্রয়োজন ছিল ^এবং \

এই আউটপুটটি পরীক্ষার সকল ক্ষেত্রে নমুনা আউটপুট দেয়।

m=[gets.chomp]
a=m[0].scan(/\d/).max.to_i
m[0].gsub!(/./){|n|n==?. ? ' ':a-n.to_i}
s=nil
until a==0
o=''
m[-1].chars{|c|o+=case c
when ?0;?^
when ' ';t=s;s=nil;t ? '':' '
when /\d/;(c.to_i-1).to_s
when ?^;s=1;o.slice! -1;"/ \\"
when ?/;t=s;s=nil;t ? "#{o.slice! -1;' '}":o.slice!(-1)=='\\' ? 'v ':"/ "
when ?\\;s=1;' \\'
when ?v;' '
end}
m.push o
a-=1
end
puts (m[1..-1]*"\n").gsub /\d/,' '

ভেরিয়েবলগুলি কী বোঝায় তার চার্ট:

m | The mountain array.
a | The highest height of a mountain. Used for counting when to stop.
s | Whether or not to skip the next character. 1 for yes, nil for no.
o | Temp string that will be appended to mountain.
t | Temp variable to hold the old value of s.

আমি নিশ্চিত যে আমি এটিকে আরও অনেক গল্ফ করতে পারি, তবে আমাকে এখনই যেতে হবে। পরে কি উন্নতি হবে!


আমি ইনপুট .2.2.নিয়ে লড়াই করছি এবং কেন এটি কাজ করে না তা দেখতে পাচ্ছি না।
হাওয়ার্ড

2

জাভা, 377 407

সম্পাদনা: @ ভিক্টর উল্লেখ করেছেন যে এটি একটি সম্পূর্ণ প্রোগ্রাম হওয়া দরকার, তাই আমি এটি সংকলনযোগ্য এবং রানযোগ্য করতে কয়েক ডজন অক্ষর যুক্ত করেছি। প্রোগ্রামটি সম্পাদন করার সময় প্রথম প্যারাম হিসাবে "ক্রয়ের আদেশ" কেবল পাস করুন:java M ..3.4..6..4.3..

আমি মনে করি এটি অন্যান্য উত্তরের সাথে একইরকম, মূলত প্রতিটি সম্ভাব্য উচ্চতার জন্য বারবার "পর্বতশৃঙ্খলা" কে অনুসরণ করে এবং শীর্ষগুলি থেকে নীচে পাহাড়গুলি তৈরি করে। এই উপায়ে আমাকে কেবল চারটি শর্তের সাথে মোকাবিলা করতে হবে - যদি একটি শীর্ষ opeাল '/', ডাউন opeাল '\, যুগ্ম' ভি ', বা খালি' 'হয়। আমার উপরে-ডাউন বিল্ডে আমার বর্তমান অবস্থান "উপরে" কেন্দ্রিক তিনটি স্পেস দেখে আমি সেই সাধারণটি আবিষ্কার করতে পারি।

নোট করুন যে অন্যান্য সাবমিশনের মতো, আমি সংখ্যার বাইরে অন্য যে কোনও কিছুই 'সমতুল্য' হিসাবে বিবেচনা করি। ইনপুট ইন, ব্রেভিটি জন্য।

গল্ফ সংস্করণ:

class M{public static void main(String[]m){char[]n=m[0].toCharArray();int e=n.length,h=9,x=-1,p;char[][]o=new char[11][e];char l,r,u;boolean a,b,c;for(;h>=0;h--){for(p=0;p<e;p++){if(n[p]-49==h){o[h][p]=94;if(x==-1)x=h;}else{l=(p>0)?o[h+1][p-1]:0;r=(p<e-1)?o[h+1][p+1]:0;u=o[h+1][p];a=l>91&&l<99;b=r==94||r==47;c=u<33;o[h][p]=(char)((a&&b)?'v':(c&&b)?47:(c&&a)?92:32);}}if(x>=h)System.out.println(o[h]);}}}

মানব পাঠযোগ্য ফর্ম (এবং গল্ফ ফর্ম অর্জনের জন্য সমান্তরাল ট্রান্সমোগ্রিফিকেশনগুলির কিছু ছাড়াই):

class Magrathea2 {
    public static void main(String[] mountain) {
        String out = "";
        char[][] output = new char[11][mountain[0].length()];
        int height = 9; int maxheight = -1;
        int position = 0;
        char left,right,up;
        char[] mount = mountain[0].toCharArray();
        for (; height >= 0; height--) {
            for (position=0; position < mount.length; position++) {
                if (mount[position]-49 == height) {
                    output[height][position] = '^';
                    if (maxheight==-1) {
                        maxheight=height;
                    }
                } else { // deal with non-numbers as '.'
                    left=(position>0)?output[height+1][position-1]:0;
                    right=(position<mount.length-1)?output[height+1][position+1]:0;
                    up=output[height+1][position];
                    if ((left=='^'||left=='\\')&&(right=='^'||right=='/')) {
                        output[height][position]='v';
                    } else if ((up==' '||up==0)&&(right=='/'||right=='^')) {
                        output[height][position]='/';
                    } else if ((up==' '||up==0)&&(left=='\\'||left=='^')) {
                        output[height][position]='\\';
                    } else {
                        output[height][position]=' ';
                    }
                }
            }
            if (maxheight >= height) {
                out+=new String(output[height]);
                if (height > 0) {
                    out+="\n";
                }
            }
        }
        System.out.println(out);
    }
}

উপভোগ করুন।

উদাহরণ আউটপুট:

$ java M ..3..4...6...5....1
         ^
        / \  ^
     ^ /   \/ \
  ^ / v        \
 / v            \
/                \^

প্রশ্নটিতে একটি সম্পূর্ণ প্রোগ্রাম লিখুন উল্লেখ করা হয়েছে , সুতরাং অনুগ্রহ করে অনুপস্থিত যোগ করুন class X{public static void main(String[]z){
ভিক্টর স্টাফুসা

ঠিক. আমি "বাক্য হিসাবে বা যুক্তি হিসাবে" - এই বাক্যটির পরবর্তী বিভাগটি দ্বারা ভুল নির্দেশ পেয়েছি এবং পুরো প্রোগ্রামের অংশটি মিস করেছি। আমি শীঘ্রই এটি আপডেট করব।
প্রোগ্রামারডান

2

পার্ল 6, 264 224 216 206 200 194 124 বাইট

$_=get;my$a=10;((s:g/$a/^/;s:g/\s\.\s/ v /;s:g'\.\s'/ ';s:g/\s\./ \\/;$!=say TR/.1..9/ /;tr'^\\/v' ')if .match(--$a)|$!)xx 9

/// সমাধান হিসাবে দেখানোর জন্য @ জোকিংকে ধন্যবাদ। পার্ল 6-এ টিআর /// বাগটি ঠিক করার পরে এটি আরও কিছুটা গল্ফ হয়।

উপাদান সহ আমার মূল সমাধান:

my$t=get;for 9...1 {if $t.match($_)|$! {$t=$t.subst($_,'^',:g).subst(' . ',' v ',:g).subst('. ','/ ',:g).subst(' .',' \\',:g);$!=say $t.subst(/<[\.\d]>/,' ',:g);$t.=subst(/<[^\\/v]>/,' ',:g)};}

Ungolfed:

my $t=slurp;
my $s;
for 9...1 {
    if $t.match($_)||$s {                    # match number or latched
        $t=$t.subst($_,'^',:g)               # peaks
        .subst(' . ',' v ',:g)               # troughs
        .subst('. ','/ ',:g)                 # up slope
        .subst(' .',' \\',:g);               # down slope
        $s=say $t.subst(/<[\.\d]>/,' ',:g);  # clean, display, latch
        $t=$t.subst(/<[^\\/v]>/,' ',:g)      # wipe for next line
    }
}

আউটপুট:

...4...3...33..4..4....2.3.22.33.5..22...333.222.3..
                                 ^                  
   ^           ^  ^             / \                 
  / \  ^   ^^ / \/ \     ^    ^^   \     ^^^     ^  
 /   \/ \ /  v      \  ^/ \^^/      ^^  /   \^^^/ \ 
/        v           \/               \/           \

1
আমি মনে করি না পার্লকে কঠোরভাবে একটি প্রধান ফাংশন প্রয়োজন, এন্ট্রি পয়েন্ট কোনও ফাংশনের বাইরে প্রথম জিনিস হতে পারে।
নিসা

আমি প্যারামিটার হ্যান্ডলিংয়ের জন্য প্রধান ব্যবহার করেছি। এখন স্টিডিন ব্যবহার করছি। ধন্যবাদ।
ডোনাল্ড

একটি পদ্ধতিগত সমাধান। আমি নিশ্চিত কেউ রেজিক্স এবং হাইপারপসের সাহায্যে আরও ভাল করতে পারে।
ডোনালধ

1
131 বাইট ব্যবহার s///এবং tr///। আমি মনে করি যে এর trপরিবর্তে শেষটি ব্যবহার করতে পারে sতবে ব্যাকস্ল্যাশগুলির অনুবাদ করতে আমি যথেষ্ট পরিমাণে চিন্তা করতে পারি না। সম্ভবত
জো কিং

সুন্দর কাজ @ জোকিং - যখন আমি এস /// এবং টিআর /// ব্যবহার করার চেষ্টা করলাম তখন আমি একটি বিষয়বস্তুতে জড়িয়ে পড়ি। আমি দেখতে পাচ্ছি যে ব্লকগুলি এড়ানোই এর উত্তর।
ডোনালধ

1

পার্ল, 254 218 212

$s=<>;sub f{9-$i-$_[0]?$":pop}for$i(0..8){$h=1;$_=$s;s!(\.*)(\d?)!$D=($w=length$1)+$h-($2||1);join'',(map{($x=$_-int$D/2)<0?f--$h,'\\':$x?f++$h,'/':$D%2?f--$h,v:f$h,'/'}0..$w-1),$2?f$h=$2,'^':''!ge;print if/\S/}
$s=<>;
sub f{9-$i-$_[0]?$":pop}
for$i(0..8){
    $h=1;
    $_=$s;
    s!(\.*)(\d?)!
        $D=($w=length$1)+$h-($2||1);
        join'',(map{
            ($x=$_-int$D/2)<0
                ?f--$h,'\\'
                :$x
                    ?f++$h,'/'
                    :$D%2
                        ?f--$h,v
                        :f$h,'/'
        }0..$w-1),$2
            ?f$h=$2,'^'
            :''
    !ge;
    print if/\S/
}

সম্পাদনা করুন: প্রোগ্রামারড্যানের ..3..4...6...5....1উদাহরণের সাথে কাজ করার জন্য এটি একটি বাগ-ফিক্স , তবে প্রক্রিয়াটিতে কিছু বাইট বন্ধ ছিল। এবং অনলাইন পরীক্ষা: https://ideone.com/P4XpMU


1

সি # - 321 319

using System.Linq;class P{static void Main(string[]p){int h=p[0].Max()-48,i=h,j,n=p[0].Length;char[]A=new char[n+2],B=A;for(;i-->0;){for(j=0;j++<n;){var r=(A[j+1]==47|A[j+1]==94);B[j]=(char)(p[0][j-1]==i+49?94:i+1<h?A[j]==0?(A[j-1]>90&A[j-1]<95)?r?118:92:r?47:0:0:0);}A=(char[])B.Clone();System.Console.WriteLine(B);}}}

অবহেলিত এবং মন্তব্য করেছেন:

using System.Linq;

class P
{
    static void Main(string[] p)
    {
        int h = p[0].Max() - 48,    // Getting the height. Codes for 0 to 9 are 48 to 57, so subtract 48 and hope no one will input anything but dots and numbers.
            i = h,
            j,                      // Declaring some iterators here, saves a few chars in loops.
            n = p[0].Length;
        char[] A = new char[n+2],   // Creating an array of char with 2 extra members so as not to check for "index out of bounds" exceptions
               B = A;               // B is referencing the same array as A at this point. A is previous row, B is the next one.
        for (;i-->0;)               // Looping from top to the bottom of the mountain
        {
            for (j = 0; j++ < n;)   // Looping from left to right.
            {
                var r = (A[j + 1] == 47 | A[j + 1] == 94);  // This bool is used twice, so it saves a few characters to make it a variable

                // Here's the logic
                B[j] = (char)(p[0][j - 1] == i + 49 ? 94    // If at this position in the string we have a number, output "^"
                                           : i + 1 < h ?    // And if not, check if we're on the top of the mountain
                                             A[j] == 0 ?    // If we're not at the top, check if the symbol above is a space (0, actually)
                                            (A[j - 1] > 90 & A[j - 1] < 95) ?   // If there's nothing above, we check to see what's to the left ( ^ or \ )
                                             r ?            // And then what's to the right ( ^ or / )
                                             118            // If there are appropriate symbols in both locations, print "v"
                                           : 92             // If there's only a symbol to the left, print "\"
                                           : r              // Otherwise check if there's a symbol to the right, but not to the left
                                           ? 47             // And if there is, print "/"
                                           : 0 : 0 : 0);    // Print nothing if there aren't any symbols above, to the left and to the right,
                                                            // or there's a "^" right above, or we're at the top of the mountain
            }
            A=(char[])B.Clone();    // Clone arrays to iterate over the next line
            System.Console.WriteLine(B);
        }
    }
}

উদাহরণ:

C:\>program .2..3..4...
        ^
     ^ / \
  ^ / v   \
 / v       \

যদিও আমি মনে করি এটি প্রতিটি লাইনের আগে একটি অতিরিক্ত জায়গা দেয়।


1

সিজেম, 128 117 112 106 104 বাইট

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

WlW++"."Waer{_{~U(e>:U}%\W%}2*;W%]z{$W=}%_$W=S*\:L,2-,\f{\_)L=(~"^/ ^^/ \v ^ \\"S/2/@L>3<_$0=f-{=}/t}zN*

এখানে একটি পরীক্ষার কেস দেওয়া হয়েছে, যা আমি মনে করি slালু, শিখর এবং ট্রুপের সম্ভাব্য সমস্ত সংমিশ্রণ রয়েছে:

...4...3...33..4..4....2.3.22.33.5..22...333.222.3..

যা ফলন দেয়

                                 ^                  
   ^           ^  ^             / \                 
  / \  ^   ^^ / \/ \     ^    ^/   \     ^^^     ^  
 /   \/ \ /  v      \  ^/ \^^/      \^  /   \^^^/ \ 
/        v           \/               \/           \

এটি এখানে পরীক্ষা করুন।

আমি পরে কোডটির জন্য একটি ব্যাখ্যা যুক্ত করব।


1

পাইথন, 297 234 218

-63৩ বাইট জো
ল্যাংডের r=s.replaceপরিবর্তে জো কিং -১ by বাইটকে ধন্যবাদ

s=input()
r=s.replace
q=0
j=''.join
for i in range(9):
 if`9-i`in s or q:q=s=r(`9-i`,'^');s=r(' . ',' v ');s=r('. ','/ ');s=r(' .',' \\');print j([x,' '][x in'0123456789.']for x in s);s=j([x,' '][x in'/\^v']for x in s)

STDIN থেকে ইনপুট নেয়। অবহেলিত, সরলীকৃত:

s=input() # Take input
r=lambda y,z: s.replace(y,z) # Function for quick s.replace(a, b)
j=lambda x: ''.join(x)
q=0 # Acts like boolean
for i in range(9): # Count to 9
 if `9-i`in s or q: # When digit has been found or found previously (no newlines at start)
  q=s=r(`9-i`,'^') # Digit to ^, set q to non-zero value for always executing from now on
  s=r(' . ',' v ') # ' . ' to ' v '
  s=r('. ','/ ') # '. ' to '/ '
  s=r(' .',' k') # ' .' to 'k'. K is a placeholder, since \\ takes two chars and `[...]`[2::5] fails
  print j([x,' '][x in'0123456789.']for x in s) # Print without '0123456789.'
  s=j([x,' '][x in'/\^v']for x in s) # Wipe (delete '/^\v`)


1
হ্যাঁ, আমি s.replaceনিজেই পদ্ধতিটি চেষ্টা করেছি, তবে এটি কার্যকর হয় না। আপনি কেবল আসল স্ট্রিংয়ের প্রতিস্থাপন করছেন যেহেতু স্ট্রিং অবিচ্ছেদ্য
জো কিং ২

0

পাওয়ারশেল, 148 145 বাইট

এটি একটি দুর্দান্ত চ্যালেঞ্জ!

param($s)9..1|?{($p+=$s-match$_)}|%{"$_,^; \. , v ;\. ,/ ; \., \;\^|\\|/|v, "-split';'|%{$x=$s-replace'\.|\d',' '
$s=$s-replace($_-split',')}
$x}

কম গল্ফ পরীক্ষা স্ক্রিপ্ট:

$f = {

param($s)
9..1|?{($p+=$s-match$_)}|%{      # loop digits form 9 downto 1, execute to the end as soon as a suitable digit met
    $s=$s-replace$_,'^'          # replace current digit with '^'
    $s=$s-replace' \. ',' v '    # replace ' . '  with ' v '
    $s=$s-replace'\. ','/ '      # replace '. ' with '/ '
    $s=$s-replace' \.',' \'      # replace ' .' with ' \'
       $s-replace'\.|\d',' '     # replace all dots and digits with ' ' and push to output. Don't store this replacement
    $s=$s-replace'\^|\\|/|v',' ' # prepeare to the next step: replace ^ \ / and v to space
}

    # Example:
    #     $s="...4...3...3.."
    # 4 : $s="...^...3...3.." output: "   ^          "
    # 4 : $s="... ...3...3.."
    # 3 : $s="../ \..^...^.." output: "  / \  ^   ^  "
    # 3 : $s="..   .. ... .."
    # 2 : $s="./   \/ \./ \." output: " /   \/ \ / \ "
    # 2 : $s=".        .   ."
    # 1 : $s="/        v   \" output: "/        v   \"
    # 1 : $s="              "

}

@(
    ,("1",
      "^")

    ,("11",
      "^^")

    ,("1.2.",
    "  ^ ",
    "^/ \")

    ,(".2.3..",
      "   ^  ",
      " ^/ \ ",
      "/    \")

    ,(".2..3..",
      "    ^  ",
      " ^ / \ ",
      "/ v   \")

    ,("...4...3...3..",
      "   ^          ",
      "  / \  ^   ^  ",
      " /   \/ \ / \ ",
      "/        v   \")

    ,("...4...3...33..4..4....2.3.22.3..5...22...333.222.3..",
      "                                 ^                   ",
      "   ^           ^  ^             / \                  ",
      "  / \  ^   ^^ / \/ \     ^    ^/   \      ^^^     ^  ",
      " /   \/ \ /  v      \  ^/ \^^/      \^^  /   \^^^/ \ ",
      "/        v           \/                \/           \")

    ,(".2..3..6.....5...3......1..3..4....2.",
      "       ^                             ",
      "      / \    ^                       ",
      "     /   \  / \               ^      ",
      "    ^     \/   \ ^         ^ / \     ",
      " ^ /            v \       / v   \  ^ ",
      "/ v                \    ^/       \/ \")
) | % {
    $s,$expected = $_
    $result = &$f $s
    "$result"-eq"$expected"
    $s
    $result
}

আউটপুট:

True
1
^
True
11
^^
True
1.2.
  ^
^/ \
True
.2.3..
   ^
 ^/ \
/    \
True
.2..3..
    ^
 ^ / \
/ v   \
True
...4...3...3..
   ^
  / \  ^   ^
 /   \/ \ / \
/        v   \
True
...4...3...33..4..4....2.3.22.3..5...22...333.222.3..
                                 ^
   ^           ^  ^             / \
  / \  ^   ^^ / \/ \     ^    ^/   \      ^^^     ^
 /   \/ \ /  v      \  ^/ \^^/      \^^  /   \^^^/ \
/        v           \/                \/           \
True
.2..3..6.....5...3......1..3..4....2.
       ^
      / \    ^
     /   \  / \               ^
    ^     \/   \ ^         ^ / \
 ^ /            v \       / v   \  ^
/ v                \    ^/       \/ \

0

পিপ -l , 100 বাইট

Y#aZGMXaFi,#aIh:+a@i{(yi--h):4j:0Wh-j&++(yi-++jh-j)(yi+jh-j):2}RV Z(J*y)R`.(?=.*[^0])`0R,6;^" /\v^^"

(ভাষা প্রশ্নের চেয়েও নতুন, তবে সম্ভবত এপিএল জমা দেওয়ার পক্ষে হারাবে না Although যদিও আমি আশা করি এটি আরও সংক্ষিপ্ত হবে will)

কমান্ড-লাইন আর্গুমেন্টের মাধ্যমে ইনপুট নেয়। এটি অনলাইন চেষ্টা করুন!

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