কোড (মিনি) গল্ফ


50

একটি মিনি-গল্ফ কোর্সের সাইড ভিউ এবং সুইংয়ের শক্তি দেওয়া, বলটি গর্তে পরিণত করবে কিনা তা নির্ধারণ করুন।


একটি কোর্স এই বিন্যাসে হবে:

      ____       ____ _   
   __/    \     /    U \  
__/        \   /        \_
            \_/           

বল সরাসরি আরম্ভ করা হয় সামনে বাম স্থল প্রথম টুকরা এবং যতক্ষণ এটা গর্ত (একটি ঊর্ধ্ব-কেস ছুঁয়েছে অবশ্যই কনট্যুর অনুসরণ Uস্থল বর্তমান স্তরের নিচে)। যদি এটি গর্তে পৌঁছে যায় তবে একটি সত্য মানের মান আউটপুট করুন। সুইংয়ের শক্তিটি বলের প্রাথমিক গতি হবে। বলটি প্রতিটি পুনরাবৃত্তির ডানদিকে পরবর্তী অক্ষরটিতে চলে যায়, তারপরে গতিটি বর্তমানে যে অক্ষরটি চলছে তার উপর নির্ভর করে পরিবর্তন করা হয়। গতির 0গর্তের আগে বা তার চেয়ে কম হলে, একটি মিথ্যা মান আউটপুট দেয়।

  • _ গতি কমে যায় 1
  • / গতি কমে যায় 5
  • \ দ্বারা গতি বৃদ্ধি 4

কোর্সগুলি optionচ্ছিকভাবে ফাঁক দিয়ে প্যাড করা যেতে পারে। দোলের শক্তি সর্বদা একটি ইতিবাচক পূর্ণসংখ্যার হবে।

গর্তটি enterোকার জন্য বলটি খুব দ্রুত গতিতে পিছন দিকে ঘোরানো বা পাহাড়ের উপর দিয়ে ঝাঁপিয়ে / ঝাঁপিয়ে পড়ার বিষয়ে আপনাকে উদ্বিগ্ন হওয়ার দরকার নেই।

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

Input: 27
      ____       ____ _   
   __/    \     /    U \  
__/        \   /        \_
            \_/           
Output: true

----------

Input: 26
      ____       ____ _   
   __/    \     /    U \  
__/        \   /        \_
            \_/           
Output: false

----------

Input: 1

U
Output: true

----------

Input: 1
_ 
 U
Output: false

----------

Input: 22

     /U
    /  
   /   
  /    
\/     
Output: true

----------

Input: 999
_       _
 \     / 
  \   /  
   \ /   
    U    
Output: true

----------

Input: 5
  /
/U 
Output: false

----------

Input: 9

/\/\/\/\/U
Output: false

----------

Input: 16

_/\                                         _
   \      __       /\/\/\                  / 
    \    /  \     /      \                /  
     \__/    \   /        \____________ _/   
              \_/                      U     

Output: true

এটি কোড মিনি গল্ফ, বাইট জেতে সংক্ষিপ্ত উত্তর!


1
যদি আপনার ভাষায় ভাল অ্যারে অন্তর্নির্মিত থাকে, তবে আপনি \_/নিম্নলিখিত পদক্ষেপের সাহায্যে ইনপুটটিকে ক্রিয়াকলাপের স্ট্রিমে রূপান্তর করতে পারেন : লাইনগুলির অ্যারেে বিভক্ত করুন, ঘোরান, সমতল করুন, স্ট্রিপ স্পেস করুন।
সাইয়েস

1
গল্ফ কোর্সের চেয়ে এটি একটি স্থির-ট্র্যাক মেকানিজম সত্য: পি
জাচ গেটস

24
আমি পছন্দ করি যে এর \/\/\/\/\/চেয়ে আরও দক্ষ কোর্স __________
এজাস্ট

2
আমি যা ভাবছিলাম, 4 ডাউন, 5 আপ, তারপরে .5 অবশ্যই গড় হতে হবে। ওহ, ফ্ল্যাট 1?
লাইফ উইলার্টস

কোর্সের প্রতিটি লাইন কি সর্বদা একই দৈর্ঘ্য (ছোট লাইনের শেষে ফাঁকা স্থান পূরণ করে) হবে?
স্নোরিংফ্রাগ

উত্তর:


17

পাইথ, 27 বাইট

.Am<sXsd"_\ /"[1_4Z5)Q._C.z

প্রদর্শন

এই কোডটি খুব চতুর এমন কিছু করে যা পুরোপুরি নিরাপদ নয় X। নীচে এটি পরীক্ষা করে দেখুন।

ব্যাখ্যা:

.Am<sXsd"_\ /"[1_4Z5)Q._C.z
                               Implicit: Z = 0, Q = eval(input())
                               Q is the initial power.
                         .z    Take all input, as a list of lines.
                        C      Transpose, giving all columns.
                      ._       Form all prefixes.
  m                            Map over the prefixes.
      sd                       Concatenate the prefix.
     X  "_\ /"[1_4Z5)          Change '_' to 1, '\' to -4, ' ' to 0, and '/' to 5.
                               In particular, 'U' is left unchanged.
    s                          Reduce on addition.
                               If all elements were numbers,
                               this results in the total change in power.
                               If there was a 'U', it results in a string.
   <                 Q         If the previous result was a number, this compares
                               it with the initial input to see if the ball is
                               still rolling.
                               If the previous result was a string, this slices off
                               the first Q characters, which always has a truthy
                               result.
.A                             Test whether all of the prefixes mapped to a thruthy
                               result.

আমি কিছু অনুপস্থিত হতে পারে, কিন্তু এটি কি এখানে থামবে Q? অর্থাৎ শেষ উদাহরণটি কিছু সমস্যার কারণ হতে পারে?
ফ্লিন্ডবার্গ

@ ফ্লিনবার্গ এটি কীভাবে কাজ করে তা নয়। < ... Qএকটি সাংখ্যিক তুলনা আপ গর্ত, না একটি ফালি পর্যন্ত যেমন কাজ করে। গর্তের পরে, সমস্ত বিষয় ফলাফলটি সত্য।
isaacg

14

হাস্কেল, 111 109 বাইট

import Data.List
g"_"=1
g"/"=5
g _= -4 
f n=all(>0).scanl(-)n.map g.fst.span(/="U").(>>=words).transpose.lines

ব্যবহারের উদাহরণ:

*Main> f 27 "      ____       ____ _   \n   __/    \\     /    U \\  \n__/        \\   /        \\_\n            \\_/           "
True
*Main> f 26 "      ____       ____ _   \n   __/    \\     /    U \\  \n__/        \\   /        \\_\n            \\_/           "
False

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

                            lines  -- split into list of lines at nl
                       transpose   -- transpose
                  (>>=words)       -- turn each line into words (i.e. remove spaces)  
            fst.span(/="U")        -- take all words up to but excluding "U"
         map g                     -- turn each word into the speed modifier
    scanl(-)n                      -- build list of partial sums starting with n
                                   --   note: speed modifiers are negative so we
                                   --   use (-) with scanl to build sums 
all(>0)                            -- return true if all sums are greater than 0                                 

সম্পাদনা করুন: @ ব্যবহারকারী 81655 সংরক্ষণ করতে 2 বাইট খুঁজে পেয়েছে। ধন্যবাদ!


7

রুবি, 104 87 টি অক্ষর

->s,t{t.lines.map(&:bytes).transpose.map{|o|(c=o.max)==85||s<0?break: s+=c*3%14-6}
s>0}

নমুনা রান:

2.1.5 :001 > track = '      ____       ____ _   
2.1.5 :002'>    __/    \     /    U \  
2.1.5 :003'> __/        \   /        \_
2.1.5 :004'>             \_/           
2.1.5 :005'> '
 => "      ____       ____ _   \n   __/    \\     /    U \\  \n__/        \\   /        \\_\n            \\_/           \n" 

2.1.5 :006 > ->s,t{t.lines.map(&:bytes).transpose.map{|o|(c=o.max)==85||s<0?break: s+=c*3%14-6};s>0}[27, track]
 => true 

2.1.5 :007 > ->s,t{t.lines.map(&:bytes).transpose.map{|o|(c=o.max)==85||s<0?break: s+=c*3%14-6};s>0}[26, track]
 => false 

6

জাপট, 38 বাইট

Vz r"%s|U[^]*" ¬e@UµX¥'_?1:X¥'/?5:-4 ¬

Try it here!

সিজেমকে মারধর!

ব্যাখ্যা

মূলত স্ট্রিং ইনপুট নেয়, এটিকে 90 ডিগ্রি ঘড়ির কাঁটার দিকে ঘোরায়, স্পেস এবং নিউলাইনগুলি সরিয়ে দেয়, গর্ত এবং তার পরে সমস্ত কিছু সরিয়ে দেয় এবং চরগুলি বরাবর বিভক্ত হয়। তারপরে বলটি everyফাংশনটি ব্যবহার করে শূন্য বা তার নিচে নেমে গেছে কিনা তা পরীক্ষা করে দেখুন ।


আমি মনে করি `positive ইতিবাচক হওয়া উচিত (বিবরণটি ভুল দেখায়)
20:57

আমি মনে করি না যে এটি কাজ করে। এটি চিত্র: একটি opালু সিরিজ বলের গতি -2 এ পায় তবে তার পরে নেট +4 থাকে। যোগফলটি +2 প্রতিফলিত করবে তাই বলটি এটি তৈরি করেছে। বাস্তবে, এটি নেতিবাচকগুলিতে পৌঁছানোর পরে কখনও ইতিবাচক বিভাগে উঠতে পারে না।
সাইওস

আমি মনে করি আমি সমস্যাটি স্থির করেছি।
মামা ফান রোল

এটি একটি দুর্দান্ত বোতাম;)
জে আত্কিন

নিস! সুতরাং, golfing ... ডবল ব্যাকস্ল্যাশ সঙ্গে পরিবর্তনযোগ্য হয় %, এবং >0সঙ্গে প্রতিস্থাপিত হতে পারে ¬, যেহেতু অ-ধনাত্মক সংখ্যার বর্গমূল সবসময় falsy আছে ( 0 -> 0, -1 -> NaN)।
ETH প্রোডাকশনগুলি

6

সিজেম, 40 39 বাইট

liqN/:.e>'U/0="\_/"[4W-5]er{1$+}/]:e<0>

ইনপুটটিতে প্রথম লাইনে এবং দ্বিতীয় লাইনে শুরু হওয়া কোর্সটি পাওয়ার রয়েছে। আউটপুট হয় 0বা 1

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

ব্যাখ্যা

li    e# Read power and convert to integer.
qN/   e# Read course and split into lines.
:.e>  e# Flatten course by folding maximum over columns.
'U/   e# Split around the hole.
0=    e# Keep the first chunk.
"\_/"[4W-5]er
      e# Replace \, _, / with 4, -1, 5, respectively.
{     e# For each of those costs...
  1$+ e#   Copy the previous power and add the cost.
}/    e# This leaves all partial sums on the stack.
]     e# Wrap them in an array.
:e<   e# Find the minimum.
0>    e# Check whether it's positive.

5

রেটিনা, 82 81 77 74 68 67 68 বাইট

+`(?<=(.)*) (?=.*¶(?<-1>.)*(.))
$2
\\
>>>>
+`>_|>{5}/|>¶

^>*U

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

  • ইনপুটটি অ্যানারি বেসে প্রতিনিধিত্ব করা হয় , এন >এস হিসাবে - উদাহরণস্বরূপ, 4 টি >>>>\n। (এটা কি আইনী?)
  • +`(?<=(.)*) (?=.*¶(?<-1>.)*(.)) $2 - কোর্স সমতল করুন - তাদের নীচের অক্ষর দিয়ে ফাঁকা স্থান প্রতিস্থাপন করুন।

    এই পর্যায়ের পরে ডেটাগুলি এর মতো দেখাবে:

    >>>>>>>>>>>>>>>>>>>>>>>>>>
    __/__/____\\\_///____U_\\_
    __/__/    \\\_///    U \\_
    __/        \\_//        \_
                \_/           
    

    আমরা প্রথমটির পরে কেবল সবকিছু উপেক্ষা করতে পারি U, আমরা যাইহোক সেখানে পৌঁছাতে পারব না।

  • > এমন পদক্ষেপের প্রতিনিধিত্ব করুন যা আমাদের তৈরি করার অনুমতি দেওয়া হয়, বা বাকি শক্তি।
  • \চারটি দিয়ে প্রতিটি প্রতিস্থাপন করুন >- একটি opeাল আমাদের অতিরিক্ত শক্তি দেয়।
  • লুপ: বিনীতভাবে অপসারণ করুন >_বা >>>>>/যতক্ষণ না বাকি থাকে। _s এবং /গুলি গ্রাস শক্তি।
  • অবশেষে, মিলানোর চেষ্টা করুন ^>*U- আমরা Uইতিবাচক শক্তি (বা শক্তি না) দিয়ে পৌঁছাতে পারি কিনা তা পরীক্ষা করে দেখুন ।
    এটি আউটপুট 0বা 1

91 79৯ বাইট সহ আরও ঘনিষ্ঠ বিকল্প হ'ল:

+`(?<=¶(.)*) (?=.*¶(?<-1>.)*(.))
$2
^(>)+\n(?<-1>_|/(?<-1>){4}|\\(?<1>){5})+U

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

এটি একই পন্থা তবে বিতর্কিত প্রতিস্থাপনের পরিবর্তে ব্যালেন্সিং গ্রুপের সাথে।

আমি নিশ্চিত যে এই দু'টিই আরও গল্ফ করা যেতে পারে, সুতরাং এগুলির যে কোনও একটিরও সংক্ষিপ্ততর হতে পারে।


1
হ্যাঁ, অ্যানারি ইনপুটটি বৈধ (যদি চ্যালেঞ্জটি "দশমিক" নির্দিষ্ট না করে) তবে আমি সম্ভবত এটি ব্যবহার করতে 0বা 1ডিজিট হিসাবে ব্যবহার করি যদি এতে কোনও অতিরিক্ত বাইট না লাগে।
মার্টিন এন্ডার

1
পিপিসিজিতেও স্বাগতম, আপনাকে এখানে দেখে সত্যিই আমি আনন্দিত! :) (এবং পাশাপাশি রেটিনা ব্যবহার করে))
মার্টিন এন্ডার

নিশ্চিত! এটি উত্তপ্ত প্রশ্ন তালিকায় ছিল এবং মজাদার লাগছিল। আমি ভেবেছিলাম আমি এটি দিয়ে চেষ্টা করব :-)
কোবি

3

ES6, 117 বাইট

(c,p)=>c.split`
`.map(s=>[...s.slice(0,c.match(/^.*U/m)[0].length-1)].map(c=>p+=c=='/'?-5:'    \\'.indexOf(c)))&&p>0

Ungolfed:

function hole(course, power) {
    width = course.match(/^.*U/m)[0].length - 1; // calculate width to hole
    lines = course.split("\n");
    for (i = 0; i < lines.length; i++) {
        line = lines[i].slice(0, width); // ignore extraneous parts of the course
        for (j = 0; j < line.length; j++) {
            switch (line[j]) { // accumulate remaining power
            case '/': power -= 5; break;
            case '\\': power += 4; break;
            case ' ': break;
            default: power--; break;
            }
        }
    }
    return power > 0;
}

সম্পাদনা করুন: by ধন্যবাদ 4 বাইট সংরক্ষণ করা হয়েছে।


@ ՊՓԼՃՐՊՃՈԲՍԼ ধন্যবাদ, আমি গতির জন্য অপ্টিমাইজ করার চেষ্টা চালিয়ে যাচ্ছি ...
নীল

3

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

আমি যখন এই চ্যালেঞ্জ তৈরি করেছি তখনই এই সমাধানটি নিয়ে এসেছি।

(p,c)=>[...(l=c.split`
`)[w=0]].map((_,i)=>l.map(t=>(g=t[i])-1|p<=0?0:p-=g>"]"?1:g>"U"?-4:g>"/"?w=1:5))&&w

ব্যাখ্যা

সংখ্যার হিসাবে এবং একটি স্ট্রিং হিসাবে অবশ্যই কোর্স নেয়। রিটার্নস 1জন্য trueঅথবা 0জন্য false। কোর্সটি অবশ্যই ফাঁকা জায়গায় প্যাড করা উচিত।

(p,c)=>
  [...(l=c.split`
`)                          // l = array of lines
  [w=0]]                    // w = true if the ball has entered the hole
.map((_,i)=>                // for each index i
  l.map(t=>                 // for each line t
    (g=t[i])                // g = the character at the current index
    -1|p<=0?0:              // do nothing if g is a space or the ball has no speed left
    p-=
      g>"]"?1               // case _: subtract 1 from p
      :g>"U"?-4             // case \: add 4 to p
      :g>"/"?w=1            // case U: set w to true (it doesn't matter what happens to p)
      :5                    // case /: subtract 5 from p
  )
)
&&w                         // return w

পরীক্ষা

var solution = (p,c)=>[...(l=c.split`
`)[w=0]].map((_,i)=>l.map(t=>(g=t[i])-1|p<=0?0:p-=g>"]"?1:g>"U"?-4:g>"/"?w=1:5))&&w
Power = <input type="number" id="power" value="16" /><br />
<textarea id="course" rows="6" cols="50">_/\                                         _
   \      __       /\/\/\                  / 
    \    /  \     /      \                /  
     \__/    \   /        \____________ _/   
              \_/                      U     </textarea><br />
<button onclick="result.textContent=solution(+power.value,course.value)">Go</button>
<pre id="result"></pre>


3

পাইথন (3.5) 169 160 বাইট

ট্রান্সপোজ ফাংশন ছাড়াই একটি পুনরাবৃত্ত সমাধান (জিপ)

def f(c,p):c=c.splitlines();l=len(c);f=lambda x,h,v:v if'U'==c[h][x]or v<1 else f(x+(h==l-1),(h+1)%l,v+{"_":-1,"\\":4,"/":-5," ":0}[c[h][x]]);return f(0,0,p)>0

Ungolfed

অবশ্যই সি জন্য, পাওয়ার জন্য পি, গতির জন্য v, উচ্চতার জন্য h

def f(c,p):
    c=c.splitlines()
    l=len(c)
    tmp = {"_":-1,"\\":4,"/":-5," ":0}
    f=lambda x,h,v:v if'U'==c[h][x]or v<1 else f(x+(h==l-1),(h+1)%l,v+tmp[c[h][x]])
    return f(0,0,p)>0

ব্যবহার

f(16,"_/\                                         _\n   \      __       /\/\/\                  / \n    \    /  \     /      \                /  \n     \__/    \   /        \____________ _/   \n              \_/                      U     ")
f(9,"/\/\/\/\/U")

2

পাইথ, 35 বাইট

VC.z=-Q@(1_4 5)x"_\\/"JrN6IqJ\U>Q_5

ব্যাখ্যা

                                    - Autoassign Q = eval(input())
                                    - Autoassign .z = rest of input
VC.z                                - For N in zip(*.z)
    =-Q                             - Q -= ...
                      JrN6          - Autoassign J to N.strip() (get rid of spaces)
       @(1_4 5)x"_\\/"              - {"_":1, "\\": -4, "/": 5, "U":5}[J] ("U" isn't defined but that's what it is according to how str.index works)
                          IqJ\U     - If J == "U"
                               >Q_5 - print Q > -5 ()

1

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

->i,s{s.lines.map(&:bytes).transpose.any?{|o|(c=o.max)==85||i<0||!(i+=c*3%14-6)};i>0}

মান্যাটওয়ার্কের উত্তরটি অভিযোজিত


1

জাভাস্ক্রিপ্ট, 266 263 244 বাইট

(s,a)=>{var f=(e,x)=>{for(var i=1;D=e[i][x],i<e.length;i++)if(D!=" ")return D},o=a.split(`
`),l=o.reduce((a,b)=>Math.max(a.length||a,b.length)),b="";for(i=0;i<l;i)b+=f(o,i++);for(i=0;b[i]!="U"&&s>0;i++)s-=b[i]=="_"?1:b[i]=="/"?5:-4;return s>0}

Ungolfed

(s,a)=>{
    var f=(e,x)=>{
        for(var i=1;D=e[i][x],i<e.length;i++)
            if(D!=" ")
                return D
    },
    o=a.split(`
`),
    l=o.reduce((a,b)=>Math.max(a.length||a,b.length)),
    b="";
    for(i=0;i<l;)
        b+=f(o,i++);
    for(i=0;b[i]!="U"&&s>0;i++)
        s-=b[i]=="_"?1:b[i]=="/"?5:-4;
    return s>0
}

ব্যবহার

var o = (s,a)=>{var f=(e,x)=>{for(var i=1;D=e[i][x],i<e.length;i++)if(D!=" ")return D},o=a.split(`
`),l=o.reduce((a,b)=>Math.max(a.length||a,b.length)),b="";for(i=0;i<l;)b+=f(o,i++);for(i=0;b[i]!="U"&&s>0;i++)s-=b[i]=="_"?1:b[i]=="/"?5:-4;return s>0}


o(27, `
      ____       ____ _   
   __/    \\     /    U \\  
__/        \\   /        \\_
            \\_/           `); // will return true

আমার ভুল; আমি ভেবেছিলাম যে "27" দিয়ে আমি প্রথম উদাহরণটিতে প্রথম যুক্তি হিসাবে অনুলিপি করেছি। আমি এটি সংশোধন করেছি। ধন্যবাদ.
ব্যবহারকারী 49328

1

জাভা, 219 বাইট

boolean p(int v,String c){int z=c.length(),f[]=new int[z],e,i,k;for(String r:c.split("\n"))for(i=-1;++i<r.length();)if((e=r.charAt(i))>32)f[i]=e;for(i=-1,e=0;++i<z&v>0;)v-=(k=f[i])>94?1:k>91?-4:k>84?(e=1):5;return 0<e;}
  • কোর্সটি সমতল করুন, কারণ ওয়াই-কোঅর্ডিনেটটি গুরুত্বপূর্ণ নয়, দুর্ভাগ্যবশত জাভাতে উল্লম্ব ট্রিম নেই। এটিতে স্ট্রিং-ট্রান্সপোজও নেই।

  • সমতল কোর্সের উপর দিয়ে ইটারেট করুন এবং বলের গতি ট্র্যাক করুন।


1

অক্টাভা, 111 110 বাইট

function g(v,s) A([95,47,92])=[1,5,-4];all(v>cumsum(A(m=max(cat(1,strsplit(s,'\n'){:}),[],1)))(1:find(m==85)))

ব্যাখ্যা:

  • নতুন লাইনে ইনপুটটি বিভক্ত করুন এবং সেই বিরক্তিকর সেল অ্যারেটিকে ম্যাট্রিক্সে রূপান্তর করুন
  • maxপ্রতিটি কলামের জন্য সন্ধান করে ম্যাট্রিক্সকে সমতল করুন
  • অক্ষর মানচিত্র '_/\'থেকে [1, 5, -4](সব অন্যান্য অক্ষরের কম '_'ম্যাপ করা হয় 0)
  • ম্যাপযুক্ত অ্যারের সমস্ত উপাদানের সংখ্যক যোগফল গণনা করুন
  • আউটপুট Trueযদি কাপ অবশ্যই শুরু থেকে সব ক্রমসঞ্চিত অঙ্কের শুরু বেগ (কম Falseঅন্যথায়)।

এখানে একটি পরীক্ষার কেস রয়েছে যা আমি ইতিমধ্যে @ এরওয়ানের প্রস্তাবিত দ্বিতীয়টির মতোই তৈরি করেছি এবং বেশ কয়েকটি ফলাফল:

s9 =
   /\
  /  \
_/    \
       \
        \
         U

g(11,s9) %False
ans = 0
g(17,s9) %True
ans =  1

এবং এখানে প্রথম পরীক্ষার কেস:

s10 = 
  _
 / U\
/    \
      \
       \
        \
         \
          \_

>> g(11,s10)
ans = 0
>> g(12,s10)
ans =  1

আমি মনে করি যদি কোর্সের "//_U\\\\\\\_ফলাফলটি ভুল হয় Uতবে আপনি যদি স্থানীয় সর্বাধিক লাইক সহ কোর্স করে থাকেন তবে একই জিনিসগুলির পরে আপনি চরিত্রটি সরিয়ে ফেলেন না_//\\\\\U
এরওয়ান

@Erwan কিন্তু আমি না পরে অক্ষর অপসারণ U। এটা কি (1:find(m==85))করে; এটি প্রথম সূচী থেকে অবস্থানের দিকে সাবহারে লাগে U। আমি কয়েকটা বেগ শুরু করার সাথে আপনার পরীক্ষার কেসটি পরীক্ষা করব এবং আপনার কাছে ফিরে আসব।
বেকার

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

@ ইরওয়ান আমি আপনার প্রস্তাবিত দুটি পরীক্ষার কেস যুক্ত করেছি। দয়া করে একবার দেখুন এবং ফলাফলগুলি আপনি প্রত্যাশা করছেন কি না তা দেখুন। আপনি যদি ম্যাটল্যাব এ এটি চেষ্টা করে দেখছেন তবে আপনি এটি চালাতে সক্ষম হবেন না কারণ এটি কিছু সূচক ব্যবহার করে যা কেবলমাত্র অক্টোভায় কাজ করে। cumsumআপনাকে একটি মধ্যবর্তী পরিবর্তনশীলের ফলাফল নির্ধারণ করতে হবে এবং তারপরে এটি চূড়ান্ত তুলনার জন্য ব্যবহার করতে হবে all(v>tmp(1:find(m==85)))
বেকার

আপনার সমাধান কাজ সূক্ষ্ম প্রথম পড়তে অনেক কিছুই মিস (শুধু মতলব মধ্যে পরীক্ষা
এতগুলি

0

সি, 629 বাইট

#include <string.h>
#include <stdlib.h>
#include <string.h>

bool swing(char *c, unsigned int p)
{
    char *olc = calloc(strlen(c), 1);
    int x = 0;
    char *n = c;

    while(1) {
        if(*n == '\0')  break;
        else if(*n == ' ') x += 1;
        else if(*n == '\n') x = 0;
        else {
            olc[x] = *n;
            x += 1;
        }
        n++;
    }

    int hd = 0;
    for(char *i = olc; i != strchr(olc, 'U'); i++) {
        if(*i == '_') hd += 1;
        else if(*i == '/') hd += 5;
        else hd -= 4;
    }

    free(olc);
    if(hd < p) return 1;
    return 0;
}

Ungolfed:

bool swing(char *course, unsigned int power)
{
    const size_t course_len = strlen(course);
    char *one_line_course = calloc(course_len, sizeof(char));
    assert(one_line_course);
    int x_pos = 0;
    char *next = course;

    //Convert to one line representation
    while(1) {
        if(*next == '\0') {
            break;
        }
        else if(*next == ' ') {
            x_pos += 1;
        }
        else if((*next == '\n') || (*next == '\r')) {
            x_pos = 0;
        }
        else {
            one_line_course[x_pos] = *next;
            x_pos += 1;
        }
        next++;
    }

    //Calculate power vs distance
    const char *hole_location = strchr(one_line_course, 'U');
    int hole_distance = 0;
    for(char *i = one_line_course; i != hole_location; i++) {
        if(*i == '_') {
            hole_distance += 1;
        }
        else if(*i == '/') {
            hole_distance += 5;
        }
        else {
            hole_distance -= 4;
        }
    }

    free(one_line_course);
    if(hole_distance < power) {
        return true;
    }
    else {
        return false;
    }
}

মূলত আমি ইনপুট স্ট্রিংকে এক লাইনে সমস্ত কিছু ফিট করার জন্য কেবল একটি পাস করি


প্রোগ্রামিং ধাঁধা এবং কোড গল্ফ স্বাগতম! আপনি (এবং হওয়া উচিত) বেশিরভাগ শ্বেত স্থানটি বাদ দিয়ে আকারটি যথেষ্ট পরিমাণে হ্রাস করতে সক্ষম হতে পারেন; আপনি আপনার if/ elseযেমন কিছু হ্রাস করতে পারেন x+=*n==' ')?1:*n=='\n'?-x:(olc[x]=*n,1। অন্য টিপ: সি তে, unsigned intএখনই unsigned4 বাইট সংরক্ষণ করে লেখা যায় can
টবি স্পিড 22

0

পাইথন, 212 201 188 143 বাইট

এই স্ক্রিপ্টটির এই পুনরাবৃত্তির বেশিরভাগ কৃতিত্ব @ ইরওয়ানের কাছে যায়, যিনি আমাকে চেষ্টা করার জন্য সম্পূর্ণ ভিন্ন দৃষ্টিভঙ্গি দিয়েছিলেন এবং কিছু টিপস যা আমাকে শেষ পর্যন্ত 55 বাইট সংরক্ষণ করেছিল।

পুনরাবৃত্তিমূলক নয়, সুতরাং অন্যান্য অজগর সমাধান থেকে যথেষ্ট আলাদা হওয়া উচিত।

def g(c,p):
 o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
 t={"_":1,"/":5,"\\":-4}
 for v in o:
    if v=="U" or p<1:return p>0
    p-=t[v]

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

def g(course,power):
  course=course.split('\n') # split into lines
  course=zip(*course) 

  #transpose and flatten course, then remove spaces
  one_line_course=[''.join(x).split[0] for x in zip(*course)] 

  terrain_values={"_":1,"/":5,"\\":-4}
  for char in one_line_course:
    if char=="U" or power<1: 
      return power>0 # true when power remains, false otherwise
    power-=terrain_values[char]

যদি আপনি একটি সংক্ষিপ্ত সমাধান চান তবে আপনি সাইওস টিপ ব্যবহার করতে পারেন এবং ট্রান্সপোজ অন্তর্নির্মিত ফাংশনটি ব্যবহার করতে পারেন। এরকম o=[''.join(x).split()[0] for x in zip(*c.split('\n'))]
কিছুটি

আপনি এর breakদ্বারা প্রতিস্থাপন return p>0এবং মুছে ফেলতে পারেনif p...
এরওয়ান

if"U"==v or p<1 কোনও স্থানীয় সর্বাধিক মতো থাকলে আপনার শর্ত যুক্ত করতে হবে_//\\\\\U
এড়ওয়ান

@ ইরওয়ান আপনার প্রথম টিপ কাজ করে না যদি লাইনগুলি একই দৈর্ঘ্য না হয় (দীর্ঘ লাইনের সাথে মিলে যাওয়ার জন্য ছোট ছোট রেখাগুলি থাকে)। যেহেতু পোস্টটি বলেছে "কোর্সগুলি optionচ্ছিকভাবে স্পেস দিয়ে প্যাড করা যেতে পারে" আমি নিশ্চিত নই যে আমরা এটি সত্য বলে ধরে নিতে পারি। আমি একটি মন্তব্যে সে সম্পর্কে জিজ্ঞাসা করেছি।
স্নোরিংফ্রাগ

হ্যাঁ আমি ধরে নিচ্ছি যে সমস্ত লাইনের দৈর্ঘ্য সমান হবে (সাদা স্থানের সাথে সমতুল্য) সম্ভবত আমি এই ক্ষেত্রে ভুল করছি আমার সমাধানটি খারাপ বলে মনে হচ্ছে
এরওয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.