কত জল বাকি আছে?


29

ক্যালিফোর্নিয়ায়, আমরা একটি খরার মধ্যে রয়েছি তাই আমাদের জানা দরকার যে আমরা কতটা জল রেখেছি যাতে আমরা যতটা সম্ভব জল সংরক্ষণ করতে পারি।

পানির সরবরাহ সীমিত হওয়ায় আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া দরকার।

উদাহরণ

|   |
|   |
|~~~|
|___|

Output: 0.5
|~~~~~|
|     |
|     |
|_____|

Output: 1
|  |
|__|

Output: 0 (or bonus)

সবিস্তার বিবরণী

ইনপুটটি পুরোপুরি: |_ ~এবং নিউলাইনগুলির সমন্বয়ে থাকবে । সমস্ত উপরে ~বায়ু হিসাবে বিবেচনা করা হয়; _, নীচের স্থানগুলি ~এবং ~নিজেই জল হিসাবে বিবেচিত হয়। জলের শতকরা শতকরা ভাগ কম্পিউটারের দ্বারা water / (air + water)। আপনার আউটপুট 4 দশমিক স্থানে সঠিক হওয়া দরকার (যদি আপনি শতাংশ বোনাস না যান) go ইনপুট সর্বদা আয়তক্ষেত্রাকার হবে। ইচ্ছেটি কেবল ~এক লাইনে থাকবে, যদি থাকে তবে। আপনি চাইলে ইনপুটটিতে traচ্ছিকভাবে একটি পিছনের লাইন ফিডও থাকতে পারে।

বোনাস

আপনি উভয় বোনাসের জন্য গেলে -15% বোনাস -35 বোনাসের আগে প্রয়োগ করা হয়

-35 বাইট বোনাস: যদি আপনার কোড 0 আউটপুট 0 হয় তার পরিবর্তে "এই খরা ছাগলটি হাতছাড়া করে" প্রিন্ট করে তবে

-15% বোনাস: আপনি যদি এক শতাংশ আউটপুট দেন।

এটি করার জন্য, আপনি দশমিক স্থানটি দুটি জায়গায় বামে স্থানান্তরিত করবেন, শীর্ষস্থানীয় জিরোগুলি ছাঁটাবেন এবং %শেষে একটি যুক্ত করবেন। ট্রেলিং শূন্যগুলি (সর্বাধিক 2) ততক্ষণ অনুমতি দেয় যতক্ষণ না তারা মানকে প্রভাবিত করে না। 0.5-> যে কোনও:50.00% 50% 50.0%


28
" যেহেতু জলের সরবরাহ সীমিত, তাই আপনার কোডটি যতটা সম্ভব সংক্ষিপ্ত হওয়া দরকার okay" ওহহ, ঠিক আছে, বোধ হয় ... আমার ধারণা?
ফ্যাটালাইজ করুন

14
@ ফ্যাটালাইজ করুন: এটি রাষ্ট্রের বাইরে সাধারণ জ্ঞান নয়, তবে ক্যালিফোর্নিয়ায় ফ্লুইডিক যুক্তি ভিত্তিক কম্পিউটারগুলি অত্যন্ত জনপ্রিয়। আমি শুনেছি তারা আজকাল বাদাম-ভিত্তিক বিকল্পটি কার্যকর করতে পারে কিনা তা দেখার চেষ্টা করছেন।
জন

10
@ জোনে যে সম্ভবত ব্যাখ্যা করে যে কেন এখন সেখানে খরার কারণ রয়েছে
হরগাসিনস্কি

1
আপনারা জানেন যে তরল কম্পিউটারগুলি জল ব্যবহার করে না , তাই না? বৈদ্যুতিন কম্পিউটার যেমন ইলেক্ট্রন সংকট সৃষ্টি করে না।
ব্যবহারকারী 253751

এটি কি: |~~~|(কোনও আন্ডারস্কোর নয়) বৈধ ইনপুট?
edc65

উত্তর:


16

পাইথ - 17 46 45 52 * .85 - 35 = 9.2 বাইট

এর সাথে #একটি লাইনের জন্য ইনপুট (নতুন ফিল্টার মেটা-অপের সাথে!) ফিল্টার ~করে, তারপরে ইনপুটটিকে সূচক করে এবং তারপরে ইনপুটটির দৈর্ঘ্য অনুসারে ভাগ করে দেয়। যদি এর সাথে কেউ না থাকে তবে ~এটি ত্রুটি করে এবং .xস্ট্রিংয়ের ক্লজটি প্রিন্ট করা ছাড়া ট্রিগার করে ।

.x+*100-1cxK.zh@#\~KlK\%." u(C$éáPãbÉãç*îÂe[W

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


10

পাইথন 3, 37 বাইট

lambda x:1-(x+'|~').find('|~')/len(x)

কোনও বোনাস নেই। ট্রেলিং নিউলাইন সহ নতুন লাইনের সাথে একটি ইনপুট স্ট্রিং নেয়।

সূত্রটি কেন কাজ করে তা দেখুন। জলের ভগ্নাংশ বায়ুর ভগ্নাংশের পরিপূরক, যা আমরা বের করব।

frac_water = 1 - frac_air

সারি সংখ্যা নির্ধারণ 0, 1, 2, ..., আমরা আছে

frac_air = water_row_index / num_rows 

উভয়ই প্রতিটি সারিটির প্রস্থের সাথে নতুন অঙ্কগুলি গণনা করে অক্ষরের সংখ্যায় প্রকাশের ক্ষেত্রে সহজতর হয় যদি একই হয়।

frac_air = (width * water_row_index) / (width * num_rows)
         = water_row_start_char_index / num_chars

জলের সারি শুরুটি ইনপুট স্ট্রিংটির xজন্য অনুসন্ধান করে পাওয়া যায় |~এবং চরগুলির সংখ্যা কেবল দৈর্ঘ্য।

frac_air = x.find('|~') / len(x)

অবশেষে, নো-জলের ইনপুটগুলি কাজ করার জন্য, আমরা |~অনুসন্ধানের আগে শেষ পর্যন্ত একটি কাল্পনিক জলের সারি যুক্ত করব , যা এটি পানির স্তর 0 এর মতো দেখায়।

বোনাসগুলি এটির পক্ষে উপযুক্ত নয় বলে মনে হয়েছিল। স্ট্রিং ওয়ানটিতে আমি যে সেরাটি পেয়েছি তা হ'ল 73-35 = 38:

lambda x:['This drought goat out of hand',1-x.find('|~')/len(x)]['~'in x]

7

সিজেম, 19 17 16 58 * 0.85 - 35 = 14.3 বাইট

q'|-_'~#_)\@,d/1\m100*s'%+"This drought goat out of hand"?

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

এই সংস্করণ উভয় বোনাস পায়। ইনপুট আবশ্যক কাজ এই সমাধান একটি trailing সম্পর্কে newline আছে।

2 বাইট সংরক্ষণ করার জন্য @ মার্টিন বাটনারকে ধন্যবাদ

ব্যাখ্যা:

q       Get input.
'|-     Remove left/right wall, so that position of first ~ in remaining string
        corresponds to the water level.
_       Make a copy.
'~#     Find ~ character.
_)      Make copy of find result, and increment it. This is 0 if the ~
        was not found, and will be used for the bonus condition.
\       Swap original find result to top.
@,      Rotate copy of remaining input to top, and get its length.
d       Convert to double to get float division.
/       Divide the two values. Since the position of the ~ was indexed from
        the top, this is 1 minus the desired result.
1\m     Subtract value from 1, to get the actual result.
100*    Multiply by 100 to get percent.
s       Convert to string.
'%+     Append % sign.
"This drought goat out of hand"
        Push bonus zero string.
?       Ternary operator to pick calculated result or zero string.

5

জাভাস্ক্রিপ্ট (ES6), 45 (94 -15% -35)

বেনামে ফাংশন হিসাবে। টেমপ্লেট স্ট্রিং ব্যবহার করে, একটি নতুন লাইন রয়েছে যা তাৎপর্যপূর্ণ এবং বাইট গণনায় অন্তর্ভুক্ত

1 বাইট সম্পাদনা করুন thx @ user81655

p=>p.split`
`.map((r,i)=>r>'|~'?p=i:q=~i)&&q-p?(1+p/q)*100+'%':'This drought goat out of hand'

কম গল্ফড

p=>(
  p.split('\n') // split in rows
  .map((r,i)=> // execute for each row
    r>'|~'   // look for the water top
      ? p=i  // position of water top in p
      : q=~i // if not water top, set current position (-i-1) in q
  ),
  // at the end,if water top not found, p still contains the input string
  q-p // subtracting the input string I get NaN (that is a falsy value)
  ? (1+p/q)*100+'%' // calc % taking into account the negative sign of q
  : 'This drought goat out of hand' 
)

পরীক্ষার স্নিপেট

F=p=>p.split`\n`.map((r,i)=>r>'|~'?p=i:q=~i)&&q-p?(1+p/q)*100+'%':'This drought goat out of hand'

function Update() {
  var w=+W.value, h=+H.value, t=+T.value,
      b=Array(h).fill().map((r,i)=>'|'+(i==h-1?'_':i==t?'~':' ').repeat(w)+'|').join`\n`  
  O.textContent = b+'\n\n'+F(b)
  
}

Update()
<table>
  <tr><td>Width</td><td><input id=W type=number value=4 oninput='Update()'></td></tr>
  <tr><td>Height</td><td><input id=H type=number value=4 oninput='Update()'></td></tr>
  <tr><td>~~~ at row</td><td><input id=T type=number value=2 oninput='Update()'></td></tr>
</table>  
<pre id=O></pre>


1
সুন্দর টেস্ট স্নিপেট এবং সর্বদা হিসাবে দুর্দান্ত কোড! এক পরামর্শ: আপনি প্রতিস্থাপন করতে পারে p=~iসঙ্গে p=i, &&-pসঙ্গে &&p-qএবং 1+~pথেকে 1+p1 বাইট সংরক্ষণ করুন।
ব্যবহারকারী 81655

@ ব্যবহারকারী 81655 সুন্দর পরামর্শ, ধন্যবাদ
edc65

4

পার , 57 * 85% - 35 = 13.45 বাইট

`This drought goat out of hand`r√″T┐↑⌐'~˦↑↔~÷Zx²*'%↔╡\z_g

ব্যাখ্যা

`This dr...d`  ## 'This drought goat out of hand'
r              ## Read entire input
√              ## Split by newlines
″              ## Duplicate
T              ## Transpose
┐↑             ## Second element of each line
⌐              ## Reverse
'~˦            ## First index of '~'
↑              ## Plus one
↔              ## Swap
~÷             ## Divide by size
Z              ## Assign to z
x²*            ## Multiply by 100
'%↔╡           ## Append '%'
\              ## Array of string and number
z_g            ## If z=0, then string; else, number

3

পার্ল, 70 - 15% - 35 = 24.5 বাইট

+1 এর জন্য অন্তর্ভুক্ত -p

 $S[$w|=/~/]++}{$_=$w?100*$S[1]/$..'%':'This drought goat out of hand'

মন্তব্য সহ:

$S[ $w |= /~/ ]++                   # $w=0 for air, 1 for having seen water; count element
}{                                  # -n/-p: end the `while(<>){` and begin END block
$_ = $w                             # assign output for -p
  ? 100 * $S[1] / $. . '%'          # $. is $INPUT_LINE_NUMBER
  :'This drought goat out of hand'  # costs 35 aswell, but is effectively more after -15%

  • 26 + 1 বাইট সংস্করণ, কোনও বোনাস নেই: 27

    $S[$w|=/~/]++}{$_=$S[1]/$.
    
  • 15 + বোনাস সহ 34 + 1 বাইট সংস্করণ: 29.75

    $S[$w|=/~/]++}{$_=100*$S[1]/$..'%'
    
  • 61 + 1 বাইট সংস্করণ, -35 বোনাস সহ: 27

    $S[$w|=/~/]++}{$_=$w?$S[1]/$.:'This drought goat out of hand'
    
  • 69 + 1 বাইট সংস্করণ, উভয় বোনাস: 24.50

    $S[$w|=/~/]++}{$_=$w?100*$S[1]/$..'%':'This drought goat out of hand'
    

2

জাভাস্ক্রিপ্ট, 59.3

আমি আশা করি অতিরিক্ত দশমিক স্থান ঠিক আছে। কোনও অনুমানযোগ্য নতুন লাইন ধরে নেই।

drought=
// code
a=>(b=-1,e=a.split`
`.map((c,d)=>b=c[1]=='~'?d:b).length,++b?(e-b+1)*100/e+"%":"This drought goat out of hand")

// I/O
var i = document.getElementById("i");
var o = document.getElementById("o");
i.onchange = i.onkeyup = function(){
  o.textContent = drought(i.value);
};

// explanation
inputStr=>(
  tildePosition = -1, // default: not found
  containerDepth =    // if the current line has a tilde, set tildePosition, otherwise
                      // keep current tildePosition
      inputStr.split`\n`.map((line, pos)=> tildePosition = line[1]=='~' ? pos : tildePosition)
    .length,          // assign number of lines (container depth) to containerDepth
  ++tildePosition     // if it's still -1, print the message, otherwise print percent
    ?(containerDepth-tildePosition+1)*100/containerDepth+"%"
    :"This drought goat out of hand")
<textarea id="i"></textarea>
<p id="o"></p>


1

হাস্কেল, 56 বাইট

l=sum.(>>[1])
f i|s<-lines i=l(snd$break(elem '~')s)/l s

ব্যবহারের উদাহরণ: f "| |\n|~~|\n| |\n|__|"-> 0.75

lএটি একটি কাস্টম দৈর্ঘ্যের ফাংশন, যা প্রয়োজনীয়, কারণ পূর্বে lengthপূর্ণসংখ্যার মানগুলি তৈরি হয় তবে বিভাগের জন্য আমাদের ভাসমান পয়েন্টের মানগুলি প্রয়োজন (এটি এখানে genericLengthএই বৈশিষ্ট্যটিও সরবরাহ করে তবে এটি দীর্ঘতর, প্রয়োজনীয়টিকে ছেড়ে দিন import Data.List)। fইনপুটটিকে iলাইনগুলিতে বিভক্ত করে (-> s) এবং তারপরে একটি জোড়ায় যেখানে প্রথম উপাদানটি একটি লাইন দিয়ে প্রথমে (এবং বাদ দিয়ে) সমস্ত লাইন সহ একটি ~তালিকা থাকে। দ্বিতীয় উপাদানটি বাকি রেখাগুলি সহ একটি তালিকা। ফলাফলটি হ'ল দৈর্ঘ্য দ্বারা বিভক্ত দ্বিতীয় উপাদানটির দৈর্ঘ্য s

বোনাসগুলি পরিশোধ করে না।


1

পাইথন ভার্জোজ!

পাইথন: 98.45 বাইট

(157 * 0.85) - 35 = 98.45 বাইট

এই সংস্করণটি স্টিডিন থেকে পড়ে এবং উভয় বোনাস সংগ্রহ করে:

import sys
r=[x[1]for x in sys.stdin.read().split('\n|')]
o="This drought goat out of hand"if'~'not in r else"%g%%"%(100-100.0*r.index('~')/len(r))
print(o)

2
কোনও বোনাস ছাড়াই 66:import sys;r=[x[1]for x in sys.stdin];print(1-r.index('~')/len(r))
ব্লেন্ডার

নিস! এটি alচ্ছিক ট্রেলিং নিউলাইন দ্বারা বিচ্ছিন্ন হয়ে যায় যদিও, তাই না? এছাড়াও, বিভাগীয় অপারেটরের কারণে এটি পাইথন 3-কি?
নিকোলাস ক্লার্ক

Alচ্ছিক ট্রেলিং নিউলাইনটি আপনাকে অন্তর্ভুক্ত করতে পারে। বিভাগ হিসাবে, হ্যাঁ, তবে আপনি ইতিমধ্যে printকোনও ফাংশনের মতো আচরণ করছেন তাই আমি ধরে নিয়েছি আপনি পাইথন ৩ ব্যবহার করছেন
ব্লেন্ডার

1

ওওক, 72 টি অক্ষর - 15% - 35 = 26.2

/~/{w=NR}END{print w?(NR-w+1)/NR*100"%":"This drought goat out of hand"}

নমুনা রান:

(প্রাথমিকভাবে 1;কেবলমাত্র এই নমুনায় ব্যবহৃত "মানব পাঠযোগ্য" ট্যাঙ্ক প্রদর্শন করতে চালিত হয়))

bash-4.3$ awk '1;/~/{w=NR}END{print w?(NR-w+1)/NR*100"%":"This drought goat out of hand"}' <<< $'| |\n| |\n| |\n|_|'
| |
| |
| |
|_|
This drought goat out of hand

bash-4.3$ awk '1;/~/{w=NR}END{print w?(NR-w+1)/NR*100"%":"This drought goat out of hand"}' <<< $'| |\n| |\n|~|\n|_|'
| |
| |
|~|
|_|
50%

1

পিএইচপি, 92 টি অক্ষর - 15% - 35 = 43.2

(দুটি ব্লকের কোড + 4 অক্ষরের কমান্ড লাইন বিকল্পের মধ্যে 88 টি অক্ষর))

$argn[1]>z&&$w=+$argi;
echo$w?100*($argi-$w+1)/$argi."%":"This drought goat out of hand";

অনুমান error_reportingডিফল্ট সেট করা আছে।

(বড় কথা নয়, কেবল একবার -Rএবং -Eএকবার ব্যবহার করার ইচ্ছা ছিল Now এখন কেবল -Bবাকী))

নমুনা রান:

(প্রাথমিকভাবে echo"$argn\n";কেবলমাত্র এই নমুনায় ব্যবহৃত "মানব পাঠযোগ্য" ট্যাঙ্ক প্রদর্শন করতে চালিত হয়))

bash-4.3$ php -R 'echo"$argn\n";$argn[1]>z&&$w=+$argi;' -E 'echo$w?100*($argi-$w+1)/$argi."%":"This drought goat out of hand";' <<< $'| |\n| |\n| |\n|_|'
| |
| |
| |
|_|
This drought goat out of hand

bash-4.3$ php -R 'echo"$argn\n";$argn[1]>z&&$w=+$argi;' -E 'echo$w?100*($argi-$w+1)/$argi."%":"This drought goat out of hand";' <<< $'| |\n| |\n|~|\n|_|'
| |
| |
|~|
|_|
50%

0

কিউবিআইসি - 116 - 15% = 98.6 বাইট

{input S$:S$=MID$(S$,2,1):I=I+1:IF y<1 then x=I
y=y+instr(S$,"~"):IF instr(S$,"_")>0 THEN ?(1-(x-y)/I)*100;"%":END}

আমি কিউবিসিককে আরও প্রতিযোগিতামূলক করতে কিউবিআইসি তৈরি করেছি, তবে এর জন্য এখনও বেশ কয়েকটি উন্নতি প্রয়োজন। এখনও হিসাবে, ত্রুটি আটকা পড়ার জন্য কোনও শর্টকাট নেই THEN(যা আমার দিক থেকে বেশ বড় পর্যবেক্ষণ) এবং input$। সেগুলি শীঘ্রই যুক্ত করা হবে।

আমি 0 বোনাসটি খুব ব্যয়বহুল হিট করতে পারিনি ... আমি শতাংশ শতাংশ মুদ্রণ করতে পেরেছি।

ইন / আউটপুট নমুনা:

? |  |
? |  |
? |~~|
? |__|
 50 %

প্রোগ্রামটি ইন্টারেক্টিভভাবে ইনপুটটি পড়ে। যখন এটি হ্রদের নীচে সনাক্ত করে ( _) এটি শতাংশ এবং প্রস্থানগুলি মুদ্রণ করে। সম্পূর্ণ পাত্রে এবং খালিও পরীক্ষিত।

সম্পাদনা করুন: গত বছরের সময়কালে কিউবিআইসি সম্প্রসারণ করা হয়েছে তা দেখাতে, বর্তমান দোভাষীর জন্য লিখিত একই প্রোগ্রামটি এখানে দেওয়া হয়েছে:

{_?A=$MID$|(A,2,1)#~|#_| i=i+1~j<1|k=i]j=j+instr(A,B)~instr(A,C)|?(1-(k-j)/i)*100,@%|_X

৮ 87 বাইট, মুদ্রণের শতাংশ, .৪ এর স্কোর।

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