টাওয়ারের ভারসাম্য হবে?


36

ভূমিকা

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

উদাহরণস্বরূপ, প্রথম টাওয়ারের ভারসাম্য রয়েছে তবে দ্বিতীয়টি বাম দিকে toward

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

এটি আমার প্রথম চ্যালেঞ্জ। আমি আপনি এটা ভোগ করেন।

দিকনির্দেশ

টাওয়ারটি সংযুক্ত ব্লকগুলি দ্বারা প্রতিনিধিত্ব করে #এবং একটি অনমনীয় অবজেক্ট তৈরি করে । প্রতিটি ব্লক একটি ইউনিটের প্রস্থ এবং উচ্চতা সহ একটি বর্গাকার এবং একটি ধ্রুবক ঘনত্ব থাকে has দুটি শক্তি রয়েছে যে টাওয়ারটিতে কাজ করে, এর ওজন এবং বায়ু শক্তি force সমস্ত বাহিনী প্রতিটি ব্লকের উপর স্বতন্ত্রভাবে কাজ করে এবং ব্লকের কেন্দ্রের মধ্য দিয়ে যায়।

  • তার ওজনের কারণে, প্রতিটি ব্লকের একটি ইউনিট এর নিম্নমুখী শক্তি এটিতে অভিনয় করে।
  • এছাড়াও, প্রতিটি ব্লকের যেটির বাতাসের পাশের সাথে এটির সাথে সংযুক্ত অন্য কোনও ব্লক নেই, তার একটি বাতাসের দিকে অনুভূমিকভাবে অভিনয় করে। এই বাহিনীর প্রস্থতা ইনপুট হিসাবে দেওয়া হয়।
  • বাতাসের দিকটি ইনপুটটির কোথাও কোনও ASCII পতাকা দ্বারা নির্দেশিত। ইনপুটটিতে একটি পতাকা থাকবে যদি এবং কেবল বাতাস শূন্য না থাকে। পতাকাটি কোনও বাহিনীকে প্রভাবিত করে না।

পতাকাটি নীচের প্রদর্শিত হিসাবে ঠিক দেখতে পাবেন look

Flag design and corresponding wind direction:

 o~~        ~~o
 |~~        ~~|

--->        <---

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

উদাহরণ

  o~~
  |~~
  # #              > > 
  ###              >## 
 ###              >##  
 # #              > >  
#####            >#### 
 ###              >##  
 ###              >##  

Wind force: 1    Wind direction: --->

বাতাসটি সঠিকভাবে প্রবাহিত হচ্ছে এবং >উপরের ডানদিকে প্রদর্শিত ব্লকগুলিকে চাপ দেবে । লক্ষ করুন যে বাতাস গর্তগুলির অভ্যন্তরে কাজ করে।

ধরুন টাওয়ারের নীচের বাম কোণে স্থানাঙ্ক রয়েছে (0,0)। টাওয়ারের বাম বেসের চারপাশের মুহুর্তটি (0,0)ঘড়ির কাঁটার দিকে 71 ইউনিট রয়েছে যাতে টাওয়ারটি বামদিকে পড়ে না। (0,3) এ টাওয়ারের ডান বেসের চারপাশের মুহূর্তটি 8 ইউনিট ঘড়ির কাঁটার দিকে তাই টাওয়ারটি ডানদিকে পড়বে।

বায়ুটি যদি বাম দিকে প্রবাহিত হত তবে সংশ্লিষ্ট মুহুর্তগুলি একই পয়েন্টে ঘড়ির কাঁটার দিকে 2 ইউনিট এবং ঘড়ির কাঁটার বিপরীতে 61 ইউনিট হবে, তাই টাওয়ারটি ভারসাম্য বজায় রাখবে।

ইনপুট

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

আউটপুট

  • অক্ষরের এক B, Lঅথবা R, কিনা মিনার সামঞ্জস্য বজায় রাখা হবে তার উপর নির্ভর করে, বাম (বামাবর্তে) প্রতি পড়া, বা ডান (ঘড়ির কাঁটার দিকে) দিকে পড়ে।
  • আউটপুটটিতে একটি alচ্ছিক ট্রেলিং নিউলাইন থাকবে।

এটি ; মানক বিধি এবং ফাঁকগুলি প্রযোজ্য।

B পরীক্ষার কেস:

Wind: 1
    ~~o
    ~~|
      # #
      ###
     ###
     # #
    #####
     ###
     ###

Wind: 0
##
# ##
###

Wind: 1.7
o~~
|~~
#
##

Wind: 0.768
      o~~
      |~~
      # #
      ###
     ###
     # #
    #####
     ###
     ###

Wind: 0.1
#
#
#
#
#
# o~~
# |~~

Wind: 0
#

Wind: 0
############

Wind: 144
               o~~
############   |~~

Wind: 0
#######
 ##
 #
 ##

Wind: 0
                ############
           ############
       ############
    ############
   ############
 ############
############

Wind: 41
                 ############
            ############
        ############
     ############
    ############
  ############     ~~o
 ############      ~~|

L পরীক্ষার কেস:

Wind: 0
#####
   #


Wind: 42
                 ############
            ############
        ############
     ############
    ############
  ############     ~~o
 ############      ~~|

Wind: 4
########
    ###
 ~~o# ##
 ~~|#  #

Wind: 3
########
    ###
 o~~# ##
 |~~   #

R পরীক্ষার কেস:

Wind: 1
      o~~
      |~~
      # #
      ###
     ###
     # #
    #####
     ###
     ###

Wind: 2
o~~
|~~
#

Wind: 0.001
                 ############
            ############
        ############
     ############
    ############
  ############     o~~
 ############      |~~

Wind: 145
               o~~
############   |~~

Wind: 1
#
#
#
#
#
# o~~
# |~~

Wind: 0.26
#######
 ##
 #   o~~
 ##  |~~

রেফারেন্স সমাধান (জাভাস্ক্রিপ্ট)

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

function balanced(tower, wind) {
    var rows = tower.split('\n').reverse(); // Reverse so row index matches height of row.
    var height = rows.length;
    var leftEdge = rows[0].indexOf('#'); // Find bottom left corner of tower.
    var rightEdge = rows[0].lastIndexOf('#') + 1; // Find bottom right corner of tower.
    var leftMoment = 0, rightMoment = 0; // Moments around the bottoms corners of tower.
    wind *= tower.indexOf('~o')>-1 ? -1 : 1; // Find direction of the wind.

    // Sum the moments for each block in the tower.
    for (var i = height - 1; i >= 0; i--) {
        rows[i].split('').map(function(ch, index, arr) {
            if (ch=='#') {
                // If there's not a block toward the windward side of the current one.
                if ((wind < 0 && arr[index-1] != '#') || (wind > 0 && arr[index+1]!='#')) {
                    // Add moments from wind.
                    leftMoment += (i+0.5)*-wind;
                    rightMoment += (i+0.5)*-wind; 
                }

                leftMoment += leftEdge - (index + 0.5);
                rightMoment += rightEdge - (index + 0.5);
            }
        }, 0);
    }
    if (leftMoment > 0) return 'L';
    else if (rightMoment < 0) return 'R';
    else return 'B';
}

লিডারবোর্ড

নিয়মিত লিডারবোর্ড এবং ভাষার দ্বারা বিজয়ীদের একটি সংক্ষিপ্ত বিবরণ উভয়ই তৈরি করতে এখানে একটি স্ট্যাক স্নিপেট।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

সেখানে যদি আপনি আপনার শিরোনামে একাধিক সংখ্যা অন্তর্ভুক্ত করতে চান (যেমন আপনার স্কোর দুটি ফাইলের যোগফল বা আপনি আলাদাভাবে দোভাষী পতাকা শুল্ক তালিকাভুক্ত করতে চান), নিশ্চিত করুন যে আসল স্কোরটি শিরোনামের শেষ সংখ্যা:

# Perl, 43 + 2 (-p flag) = 45 bytes

আপনি ভাষাটির নামটিকে একটি লিঙ্কও বানাতে পারেন যা লিডারবোর্ড স্নিপেটে প্রদর্শিত হবে:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


17
পিপিসিজিতে আপনাকে স্বাগতম; এটি একটি দুর্দান্তভাবে লেখা প্রথম চ্যালেঞ্জ! :)
ডুরকনব

উত্তর:


2

জাভাস্ক্রিপ্ট (ES6), 239 বাইট

আমি আমার রেফারেন্স বাস্তবায়ন গল্ফ করেছিলাম। আমি লুপের জন্য এ-তে পরিবর্তন করে map, বিবৃতিগুলি ব্যবহার করে &&এবং ||শর্ট সার্কিটে এবং ,অপারেটরটি একটি বিবৃতিতে সমস্ত কিছুতে ফিট করার জন্য বাইটগুলি সংরক্ষণ করতে সক্ষম হয়েছিল যাতে ফাংশনে সুস্পষ্ট পরিবর্তন এড়াতে পারে।

(a,b)=>((c=a.split`
`.reverse(),d=c[f=g=0].indexOf`#`,e=c[0].lastIndexOf`#`+1),a.match`o~`&&(b*=-1),c.map((h,i)=>h.replace(/#/g,(j,k,l)=>(b>0&l[k-1]!='#'|b<0&l[k+1]!='#'&&(f+=(i+=0.5)*b,g+=i*b),f+=d-k-0.5,g+=e-k-0.5))),f>0?'L':g<0?'R':'B')

এটি আরও গল্ফ করা এখনও সম্ভব হতে পারে। পরামর্শ স্বাগত জানাই।


আমার নির্বোধ সমাধানের চেয়ে +1 আরও ভাল
কনার ও'ব্রায়ান

1

জাভাস্ক্রিপ্ট ES6, 297 293 বাইট

প্রদত্ত বাস্তবায়নের মূলত একটি সংকুচিত সংস্করণ।

b=(n,e)=>{r=n.split`
`.reverse(),t=r.length,a=r[0].indexOf`#`,f=r[i=l=0].lastIndexOf`#`+1;e*=n.indexOf`~o`>-1?-1:1;for(d=t-1;d>=0;d--)r[d].split``.map((n,r,t)=>{(j="#")==n&&((0>e&&j!=t[r-1]||e>0&&j!=t[r+1])&&(i+=(d+.5)*-e,l+=(d+.5)*-e),i+=a-(r+.5),l+=f-(r+.5))},0);return i>0?"L":0>l?"R":"B"}

সেমি-প্রসারিত:

b = (n, e) => {
    r = n.split `
`.reverse(), t = r.length, a = r[0].indexOf `#`, f = r[i = l = 0].lastIndexOf `#` + 1;
    e *= n.indexOf `~o` > -1 ? -1 : 1;
    for (d = t - 1; d >= 0; d--) r[d].split ``.map((n, r, t) => {
        (j = "#") == n && ((0 > e && j != t[r - 1] || e > 0 && j != t[r + 1]) && (i += (d + .5) * -e, l += (d + .5) * -e), i += a - (r + .5), l += f - (r + .5))
    }, 0);
    return i > 0 ? "L" : 0 > l ? "R" : "B"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.