একটি তাপ মানচিত্র ডিকোড করুন


32

Heatmaps

একটি আয়তক্ষেত্রাকার ঘরটি বিবেচনা করুন, যার ছাদে আমাদের কাছে তাপ ক্যামেরাটি নীচের দিকে নির্দেশ করছে। ঘরে, তীব্রতার কয়েকটি তাপ উত্স রয়েছে 1-9, পটভূমির তাপমাত্রা 0। উত্তাপ প্রতিটি উত্স থেকে বিচ্ছিন্ন হয়, প্রতি ইউনিট (অ-তির্যক) পদক্ষেপে নেমে যায়। উদাহরণস্বরূপ, 20x10ঘর

...........1........
....................
...8................
..5...............2.
....................
.1..................
................1...
.................65.
....................
............2.......

9 টি তাপ উত্স রয়েছে, এবং তাপ ক্যামেরা দ্বারা প্রদর্শিত তাপমাত্রার গ্রেডিয়েন্টটি

34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432

গ্রাফিকাল ফর্মে এটির মতো দেখতে পাওয়া যেতে পারে:

9 উত্স হিটম্যাপ

গ্রেডিয়েন্ট থেকে, আমরা কিছু তাপ উত্সের অবস্থান এবং তীব্রতা অনুমান করতে পারি, তবে সবগুলিই নয়। উদাহরণস্বরূপ, সমস্ত 9গুলি সর্বদা অনুমান করা যায়, যেহেতু তাদের সর্বোচ্চ তাপমাত্রা থাকে এবং তাই 8এই ক্ষেত্রেও হতে পারে, যেহেতু এটি গ্রেডিয়েন্টে স্থানীয় সর্বাধিক উত্পাদন করে। 2কাছাকাছি ডান সীমানা এছাড়াও অনুমান করা যায়, যদিও কোনো স্থানীয় সর্বাধিক হয় না, যেহেতু এটা অন্য নেই 2প্রতিবেশী হিসাবে। 5এস, অপরপক্ষে, অনুমিত হয় না, যেহেতু তাদের তাপ পাশাপাশি তাদের কাছাকাছি আরো তীব্র সূত্র দ্বারা উত্পাদিত হতে পারে। 0গুলি কোন তাপ উৎস রয়েছে বলে জানা না থাকলেও, সব অন্যান্য টাইলস পারে সম্ভাব্য এক ধারণ করে। হাইফেন দ্বারা অনিশ্চিত টাইলস বোঝাতে দিন-, সম্পর্কিত অঙ্কগুলি দ্বারা নির্দিষ্ট তাপ উত্স এবং পিরিয়ড অনুসারে নির্দিষ্ট খালি স্থান .:

---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------

আপনার কাজটি তাপমাত্রার গ্রেডিয়েন্ট থেকে এই অনুমিত প্যাটার্ন উত্পাদন করা হবে।

বিধি

আপনাকে নিউলাইনস বা উল্লম্ব পাইপগুলির মধ্যে সীমারেখা হিসাবে স্ট্রিং হিসাবে ইনপুট দেওয়া হবে |, যেটি আরও সুবিধাজনক এবং আউটপুট একই আকারের হবে। ইনপুট এবং / অথবা আউটপুটে একটি পিছনের সীমানা থাকতে পারে, তবে এর আগের কোনও নয়। ইনপুটটির আকার পৃথক হতে পারে তবে এর প্রস্থ এবং উচ্চতা সর্বদা কমপক্ষে 4। উভয় ফাংশন এবং সম্পূর্ণ প্রোগ্রাম গ্রহণযোগ্য। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি নিষিদ্ধ।

অতিরিক্ত পরীক্ষার কেস

ইনপুট:

898778765432100
787667654321100
677656543211210
678765432112321
567654321123210

যা গ্রাফিকাল আকারে এর মতো দেখাচ্ছে:

পরীক্ষার মামলা ১

আউটপুট:

-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.

ইনপুট:

7898
8787
7676
6565

আউটপুট:

--9-
8---
----
----

ইনপুট:

00001
00000
00000
10000

আউটপুট:

....1
.....
.....
1....

1
আপনার কি মনে হয় যদি আমি আপনার প্রশ্নে 2 হিটম্যাপ গ্রাফিকগুলি যুক্ত করি যদি আপনি ভাবেন যে তারা মান যুক্ত করে? এগুলি মাত্র 2 মিনিটের পরীক্ষা।
লজিক নাইট

@ কার্পেট পাইথন শিওর, এগিয়ে যান তারা আমার কাছে খুব সুন্দর দেখাচ্ছে। নিজেকে কৃতিত্ব দেওয়ার জন্য আপনি "কার্পেট পাইথন সৌজন্যে" যুক্ত করতে পারেন। ;)
জাগারব

2
সম্পন্ন. কোনও creditণের প্রয়োজন নেই, তবে আমি ভেবেছিলাম সম্পাদনার আগে জিজ্ঞাসা না করা অভদ্র হবে।
লজিক নাইট 16

স্ট্রিংয়ের পরিবর্তে ইনপুটটিকে 2-মাত্রিক অ্যারে হিসাবে মঞ্জুরি দেয় না কেন?
feersum

@ ফেয়ারসাম সাধারণত ইনপুট পদ্ধতিগুলি সামঞ্জস্যপূর্ণ।
অপ্টিমাইজার

উত্তর:


10

সিজেম, 73 69 62 55 বাইট

আপডেট : নতুন অ্যালগরিদম। সংক্ষিপ্ততর এবং উন্নতির আরও সুযোগ

qN/5ff*{{[{_@_@<{I'0t}*\}*]W%}%z}4fI{):X-'-X~X'.??}f%N*

কিভাবে এটা কাজ করে

যুক্তিটি নীচের অ্যালগরিদমের মতো, তবে এখানে আমি একক পুনরাবৃত্তিতে সমস্ত 4 প্রতিবেশীর জন্য যাচাই করছি না। পরিবর্তে, আমি উভয় দিকের সমস্ত সারি এবং কলামগুলির মাধ্যমে পুনরাবৃত্তি করতে একটি ছোট পদ্ধতির ব্যবহার করি। এখানে জড়িত পদক্ষেপগুলি:

  • প্রতিটি অক্ষরকে 5 এর সেটে রূপান্তর করুন প্রথমটি 4 পুনরুক্তি করার সময় সারির সংলগ্ন ঘরের তুলনায় বড় কিনা তা জানাতে তাদের পরিবর্তন করা হবে। শেষটি তুলনার উদ্দেশ্যে।
  • প্রতিটি সারিতে ইটারেট করুন এবং প্রতিটি সারিতে হ্রাস করুন। হ্রাস করার সময়, আমার দুটি 5 টি চরিত্রের স্ট্রিং রয়েছে। আমি জানি পুনরাবৃত্তির ধরনের কি [0 স্বাভাবিক সারির, 1 কলাম, বিপরীত সারি 2 বিপরীত এবং কলাম 3 স্বাভাবিক] আমি আমি আপডেট তম প্রথম 5 টি অক্ষরের স্ট্রিংয়ে অক্ষর এবং এটি দ্বিতীয়টির চেয়ে ছোট হলে 0 করে তোলে ।
  • সমস্ত 4 টি পুনরাবৃত্তির পরে, যদি সমস্ত 5 টি অক্ষর একই এবং অ-শূন্য হয়, তবে এটি স্থানীয় ম্যাক্সিমা। আমি সমস্ত 5 টি অক্ষরের স্ট্রিংয়ের মাধ্যমে ম্যাপ করে এগুলি একক অঙ্কে রূপান্তর করি, .বা -

এখানে একটি ছোট ইনপুট চালানো একটি উদাহরণ:

7898
8787
7676
6565

প্রথম পদক্ষেপের পরে:

["77777" "88888" "99999" "88888"
 "88888" "77777" "88888" "77777"
 "77777" "66666" "77777" "66666"
 "66666" "55555" "66666" "55555"]

দ্বিতীয় পদক্ষেপের পরে:

["00777" "08888" "99999" "88088"
 "88888" "07007" "88808" "77007"
 "77707" "06006" "77707" "66006"
 "66606" "05005" "66606" "55005"]

একক অক্ষরে শেষ ম্যাপিংয়ের পরে, চূড়ান্ত আউটপুট:

--9-
8---
----
----

কোড ব্যাখ্যা :

qN/5ff*                         "Split the input on new line and convert each character";
                                "to string of 5 of those characters.";
{{[{             }*]W%}%z}4fI   "This code block runs 4 times. In each iteration, it";
                                "maps over each row/column and then for each of them,";
                                "It reduce over all elements of the row/column";
                                "Using combination of W% and z ensures that both rows and";
                                "columns are covered and in both directions while reducing";
    _@_@                        "Take a copy of last two elements while reducing over";
        <                       "If the last element is bigger than second last:";
         {I'0t}*\               "Convert the Ith character of the 5 char string of"
                                "second last element to 0";
                                "We don't have to compare Ith character of last two 5 char";
                                "string as the smaller one will be having more leading";
                                "0 anyways. This saves 4 bytes while comparing elements";
{):X-'-X~X'.??}f%N*             "This part of code converts the 5 char back to single char";
 ):X                            "Remove the last character and store in X. This last char";
                                "was not touched in the prev. loop, so is the original char";
    -                           "Subtract X from remaining 4 char. If string is not empty";
                                "then it means that it was not all same characters";
                                "In other words, this character was smaller then neighbors";
     '-      ?                  "If non-empty, then replace with - else ...";
       X~X'.?                   "if int(X) is zero, put . else put X";
               f%N*             "The mapping code block was run for each row and then";
                                "The rows are joined by newline.";

এখানে চেষ্টা করুন


পুরানো পদ্ধতির

qN/~_,):L0s*]0s*:Q_,{QI=:A[W1LL~)]If+Qf=$W=<'-A?A~\'.?I\t}fIL/W<Wf<N*

কিভাবে এটা কাজ করে

যুক্তিটি সহজ, গ্রিডের মাধ্যমে পুনরাবৃত্তি করুন এবং দেখুন বর্তমান মানটি চারটি প্রতিবেশীর - উপরে, নীচে, বাম এবং ডানদিকে বেশি বা সমান কিনা। তারপরে উপরের নিয়মের ভিত্তিতে বর্তমান মানটিকে রূপান্তর করুন এবং মান 0 এর সমান হলে এটি তৈরি করুন ""। ।

কোড ব্যাখ্যা

qN/~_,):L0s*]0s*:Q         "This part of code pads the grid with 0s";
qN/~                       "Read the input, split on new lines and unwrap the arrays";
    _,):L                  "Copy the last row, taken length, increment and store in L";
         0s*               "Get L length 0 string";
            ]0s*           "Wrap everything in an array and join the rows by 0";
                :Q         "Store this final single string in Q";

_,{        ...      }fI    "Copy Q and take length. For I in 0..length, execute block";
   QI=:A                   "Get the I'th element from Q and store in A";
   [WiLL~)]If+             "This creates indexes of all 4 neighboring cells to the Ith cell";
              Qf=          "Get all 4 values on the above 4 indexes";
                 $W=       "Sort and get the maximum value";
<'-A?                      "If the current value is not the largest, convert it to -";
     A~\'.?                "If current value is 0, convert it to .";
           I\t             "Update the current value back in the string";
{ ... }fIL/                "After the loop, split the resulting string into chunks of L";
           W<Wf<           "Remove last row and last column";
                N*         "Join by new line and auto print";

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


5
আমার অবশ্যই বলতে হবে, সিজেএম কোড বর্ণনা করার সময় আমি খুব কমই "খুব দীর্ঘ" শুনি।
অ্যালেক্স এ।

6

জাভাস্ক্রিপ্ট (ES6) 99

F=h=>[...h].map((c,i)=>[o=~h.search('\n'),-o,1,-1].some(d=>h[d+i]>c)&c>0?'-':c=='0'?'.':c).join('')

টেস্ট সালে ফায়ারফক্স / ফায়ারবাগ কনসোলটি

console.log(F('\
34565432100100000000\n\
45676543210000000000\n\
56787654321000000110\n\
45676543210000001221\n\
34565432100000012321\n\
23454321000000123432\n\
12343210000001234543\n\
01232100000012345654\n\
00121000000011234543\n\
00010000000121123432\n'),'\n\n',
F('\
898778765432100\n\
787667654321100\n\
677656543211210\n\
678765432112321\n\
567654321123210\n'), '\n\n',
F('7898\n8787\n7676\n6565\n'))

আউটপুট

---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------


-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.


--9-
8---
----
----

4

পাইথন 2: 154 বাইট

b=input()
l=b.index('\n')+1
print''.join(('\n.'+('-'+v)[all([v>=b[j]for j in i-l,i-1,i+l,i+1if 0<=j<len(b)])])[('\n0'+v).index(v)]for i,v in enumerate(b))

ইনপুট ফর্ম হতে হবে "00001\n00000\n00000\n10000"

স্ট্রিংটিকে 2 ডি-ম্যাট্রিক্সে রূপান্তর করা পাইথনে বেশ দীর্ঘ। সুতরাং আমি মূল স্ট্রিং বিন্যাস রাখি। আমি ইনপুটটির উপরে গণনা করি, iসূচকটি vহ'ল গৃহস্থালি (অবশেষে একটি গল্ফ সমাধানে সেভ বাইটগুলি গণনা করুন !!)। প্রতিটি জোড়ার জন্য (i,v)আমি আউটপুটের সঠিক চরটি গণনা করি এবং তাদের সাথে যোগ দিয়েছি। আমি কীভাবে সঠিক আউটপুট চর পছন্দ করব? তাহলে v == '\n', আউটপুট গৃহস্থালি \n, এটা v == '0', আউটপুট গৃহস্থালি চেয়ে '.'। অন্যথায় আমি চারটি প্রতিবেশী v, যা b[i-b.index('\n')-1](উপরে), b[i-1](বাম, b[i+1](ডান) এবং b[i+b.index('\n')+1](নীচে), যদি তারা হয় <= vএবং পরীক্ষার জন্য পরীক্ষা করি '-'বাv। এখানে আমি বর্ণগুলির সাথে তুলনা করছি সংখ্যাগুলি নয়, তবে এটি বেশ সূক্ষ্মভাবে কাজ করে, কারণ আসকি মানগুলি সঠিক ক্রমে থাকে। এছাড়াও কোনও সমস্যা নেই, যদি হয় b[i-1]বা b[i+1]সমান হয় '\n', কারণ ord('\n') = 10

পাইথ: 61 58

JhxQbVQK@QN~k@++b\.?\-f&&gT0<TlQ<K@QT[tNhN-NJ+NJ)Kx+b\0K)k

পাইথন স্ক্রিপ্টটির কম-বেশি অনুবাদ। বেশ কুরুচিপূর্ণ ;-)

অনলাইনে এটি ব্যবহার করে দেখুন: পাইথন সংকলন হিসাবে পাইথ কমপাইলার / এক্সিকিউটার একই ইনপুট ফর্ম্যাট।

JhxQb      Q = input()
  xQb      Q.index('\n')
 h         +1
J          store in J

VQK@QN~k.....)k   k is initialized as empty string
VQ           )    for N in [0, 1, 2, ..., len(Q)-1]:
  K@QN                K = Q[n]
      ~k              k += ... (a char, computed in the next paragraph)
             )    end for
              k   print k

@...x+b\0K   ... is a char of len 3 (is constructed below)
     +b\0    the string "\n0"
    x    K   find Q[d] in this string and return index, if not found -1
@...         lookup in string at the computed position (this is done mod 3 automatically!)

++b\.?\-f&&gT0<TlQ<K@QT[tNhN-NJ+NJ)K   not to the string
                       [tNhN-NJ+NJ)    the list [d-1, d+1, d-J, d+j]
        f                              filter the list for indices T which
           gT0                            T >= 0
          &                               and
              <TlQ                        T < len(Q)
         &                                and
                  <K@QT                   Q[d] < Q[T]
     ?\-                           K   use "-" if len(filter) > 0 else Q[d]
                                       this creates the third char
++b\.                                  "\n" + "." + third char

4

পার্ল, 77, 75, 72 70

স্ট্যান্ডার্ড 2 ডি রেজেক্স ম্যাচিং ট্রিকস।

#!perl -p0
/
/;$x="(.{@-})?";y/0/./while s/$.$x\K$"|$"(?=$x$.)/-/s||($"=$.++)<9

উদাহরণ:

$ perl heat.pl <in.txt
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------

এখানে চেষ্টা করুন


3

জাভা, 307 , 304 , 303 , 299 298

এটি নিশ্চিতভাবেই কিছু জাভা কোডগল্ফের জন্য একটি "নিখুঁত" চ্যালেঞ্জ :)

class M{public static void main(String[]a){int c=a[0].indexOf('|'),i=c,d,v;char[]r=a[0].replace("|","").toCharArray(),m=new char[(v=r.length+c)+c];for(;i<v;){m[i]=r[i++-c];}for(i=c;i<v;i++){a[0]=i%c<1?"\n":"";d=m[i];System.out.print(a[0]+(d<49?'.':m[i-c]>d|m[i+c]>d|m[i-1]>d|m[i+1]>d?'-':m[i]));}}}

ইনপুট (পাইপ '|' পদ্ধতি):

34565432100100000000|45676543210000000000|56787654321000000110|45676543210000001221|34565432100000012321|23454321000000123432|12343210000001234543|01232100000012345654|00121000000011234543|00010000000121123432

আউটপুট:

---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------

1
আপনি যদি জায়গাটি সরিয়ে ফেলেন তবে এটি 288 হতে পারে char[]r=a[0].replace("|", <--here"").toCharArray()
বিসিএসবি 1001

1
এক যে স্পট না, ধন্যবাদ! ভাল এটি 298 করে তোলে
রল্ফ ツ

2

এপিএল, 92

('.-',⎕D)[1+(M≠0)+M{(1+⍺)×0≠⍺∧M[J/⍨Z∊⍨J←⍵∘+¨(⌽¨,+)(-,+)⊂0 1]∧.≤⍺}¨Z←⍳⍴M←↑{×⍴⍵:(⊂⍎¨⍵),∇⍞⋄⍬}⍞]

উদাহরণ:

       ('.-',⎕D)[1+(M≠0)+M{(1+⍺)×0≠⍺∧M[J/⍨Z∊⍨J←⍵∘+¨(⌽¨,+)(-,+)⊂0 1]∧.≤⍺}¨Z←⍳⍴M←↑{×⍴⍵:(⊂⍎¨⍵),∇⍞⋄⍬}⍞]
34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432

---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------

আমি সবচেয়ে দীর্ঘ এপিএল প্রোগ্রামটি দেখেছি। আপনি লক্ষ করতে পারেন যে এটি স্ট্যান্ডার্ড এপিএল নয় কারণ এটি ডিএফএনএস ব্যবহার করে।
FUZxxl

2

রুবি 140

f=->s{
r=s.dup
l=s.index(?\n)+1
(0...s.size).map{|i|
s[i]<?0||r[i]=r[i]<?1??.:[i-1,i+1,i-l,i+l].map{|n|n<0??0:s[n]||?0}.max>r[i]??-:s[i]}
r}

বিশেষ কিছু না; কেবল মানচিত্রের মাধ্যমে পুনরাবৃত্তি করুন এবং চারটি প্রতিবেশীর মানের সাথে বর্তমান মানটির তুলনা করুন।

অনলাইনে পরীক্ষাগুলি দিয়ে চালান: http://ideone.com/AQkOSY


1

আর, 223

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

s=strsplit;a=c(m<-do.call(rbind,s(s(scan(w="c"),'|',T)[[1]],'')));w=(d<-dim(m))[1];n=c(-1,1,-w,w);cat(t(array(sapply(seq(a),function(x)if(a[x]>0)if(any(a[(n+x)[which(n+x>0)]]>a[x]))'-'else a[x]else'.'),d)),fill=d[2],sep='')

পরীক্ষার ফলাফল

> s=strsplit;a=c(m<-do.call(rbind,s(s(scan(w="c"),'|',T)[[1]],'')));w=(d<-dim(m))[1];n=c(-1,1,-w,w);cat(t(array(sapply(seq(a),function(x)if(a[x]>0)if(any(a[(n+x)[which(n+x>0)]]>a[x]))'-'else a[x]else'.'),d)),fill=d[2],sep='')
1: 898778765432100|787667654321100|677656543211210|678765432112321|567654321123210
2: 
Read 1 item
-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.
> s=strsplit;a=c(m<-do.call(rbind,s(s(scan(w="c"),'|',T)[[1]],'')));w=(d<-dim(m))[1];n=c(-1,1,-w,w);cat(t(array(sapply(seq(a),function(x)if(a[x]>0)if(any(a[(n+x)[which(n+x>0)]]>a[x]))'-'else a[x]else'.'),d)),fill=d[2],sep='')
1: 34565432100100000000|45676543210000000000|56787654321000000110|45676543210000001221|34565432100000012321|23454321000000123432|12343210000001234543|01232100000012345654|00121000000011234543|00010000000121123432
2: 
Read 1 item
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------
> 

1

জে - 69 বাইট

[:u:45+[:(+2 0 3{~"#1+*)@((]*]=(0,(,-)1 0,:0 1)>./@:|.])-0=])"."0;._2

উদাহরণ:

   ([:u:45+[:(+2 0 3{~"#1+*)@((]*]=(0,(,-)1 0,:0 1)>./@:|.])-0=])"."0;._2) (0 : 0)
34565432100100000000
45676543210000000000
56787654321000000110
45676543210000001221
34565432100000012321
23454321000000123432
12343210000001234543
01232100000012345654
00121000000011234543
00010000000121123432
)
---------..1........
----------..........
---8-------......--.
----------......--2-
---------......-----
--------......------
-------......-------
.-----......-----6--
..---.......--------
...-.......-2-------
   ([:u:45+[:(+2 0 3{~"#1+*)@((]*]=(0,(,-)1 0,:0 1)>./@:|.])-0=])"."0;._2) (0 : 0)
898778765432100
787667654321100
677656543211210
678765432112321
567654321123210
)
-9---8-------..
-------------..
--------------.
--8---------3--
-----------3--.

পিএস: (0 : 0)স্ট্রিং নির্দিষ্ট করার স্ট্যান্ডার্ড জে উপায়। আপনি পাশাপাশি |সীমাবদ্ধ স্ট্রিং ব্যবহার করতে পারেন (একটি ট্রেলিং সহ |)।


1

এক্সেল ভিবিএ - 426

এটি একটি বিরল উপলক্ষ হবে যে ভিবিএ যে কোনও কোড গল্ফ গেম জিততে পারে তবে আমি যা সবচেয়ে বেশি ব্যবহার করি তা এটির সাথে খেলাটা মজাদার। প্রথম লাইনটি একটি প্রান্তের কেস যা এটি হওয়া উচিত বলে মনে হয় তার চেয়ে বেশি দীর্ঘ করে দেয়।

Sub m(a)
    b = InStr(a, "|")
    For i = 1 To Len(a)
        t = Mid(a, i, 1)
        Select Case t
            Case "|"
                r = r & "|"
            Case 0
                r = r & "."
            Case Else
                On Error Resume Next
                x = Mid(a, i - 1, 1)
                y = Mid(a, i + 1, 1)
                Z = Mid(a, i + b, 1)
                If i < b Then
                    If t < x Or t < y Or t < Z Then
                        r = r & "-"
                    Else
                        r = r & t
                    End If
                Else
                    If t < x Or t < y Or t < Z Or t < Mid(a, i - b, 1) Then
                        r = r & "-"
                    Else
                        r = r & t
                    End If
                End If
        End Select
    Next
    MsgBox r
End Sub

গণনায় প্রাথমিক লাইনের সাদা স্থান অন্তর্ভুক্ত নয়।

আমি শীটটিতে ইনপুট প্রেরণ এবং সেখান থেকে কাজ করার ধারণাটি নিয়ে ঘুরেছি, তবে আমি মনে করি পাস করা স্ট্রিং-এর-অক্ষর অক্ষরটি কোড সংরক্ষণ করে।

তাত্ক্ষণিক উইন্ডো থেকে কল:

m "34565432100100000000|45676543210000000000|56787654321000000110|45676543210000001221|34565432100000012321|23454321000000123432|12343210000001234543|01232100000012345654|00121000000011234543|00010000000121123432"

আউটপুট (একটি উইন্ডোতে):

---------..1........|----------..........|---8-------......--.|----------......--2-|---------......-----|--------......------|-------......-------|.-----......-----6--|..---.......--------|...-.......-2-------

1

পার্ল - 226

sub f{for(split'
',$_[0]){chomp;push@r,r($_);}for(t(@r)){push@y,r($_)=~s/0/./gr}$,=$/;say t(@y);}sub r{$_[0]=~s/(?<=(.))?(.)(?=(.))?/$1<=$2&&$3<=$2?$2:$2eq'0'?0:"-"/ger;}sub t{@q=();for(@_){for(split//){$q[$i++].=$_;}$i=0;}@q}

আপনি আদর্শের উপর চেষ্টা করতে পারেন । যদি কারও ব্যাখ্যাতে আগ্রহী হয় তবে আমাকে জানান।


আমার মনে হয় আপনার 226 টি চর আছে 227 নয়
ক্রিশ্চিয়ান লুপাস্কু

@ w0lf আপনি ঠিক বলেছেন, উইন্ডোতে থাকায় নতুন লাইনটি 2 হিসাবে গণনা করা হয়েছে for
hmatt1

1

হাস্কেল - 193

z='0'
r=repeat z
g s=zipWith3(\u t d->zip3(zip(z:t)u)t$zip(tail t++[z])d)(r:s)s$tail s++[r]
f=unlines.map(map(\((l,u),t,(r,d))->case()of _|t==z->'.'|maximum[u,l,t,r,d]==t->t|0<1->'-')).g.lines

fফান্ট যা ফর্মটিতে একটি স্ট্রিং নেয় 0001\n0000\n0000\n1000এবং প্রয়োজনীয় স্ট্রিংটি দেয়।

g একটি ফাংশন যা চরগুলির তালিকার একটি তালিকা নেয় এবং ((বাম, উপরে), এটি, (ডান, নীচে) এর তালিকাগুলির একটি তালিকা দেয়।

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