পড়ন্ত ASCII বল


16

ইনপুট

আপনাকে বল এবং মাঠ সহ একটি 2 ডি মানচিত্র দেওয়া হবে। দেখে মনে হচ্ছে:

  1         5          2
                 3
     4


__________________________

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

বলে সংখ্যা থাকতে পারে 0থেকে 9, মাটির নিচে একে অপরের উপরে স্থাপন করা যেতে পারে, কিন্তু না। বলের নম্বরগুলি অনন্য হবে।

ধরুন যে প্রতিটি অক্ষর এক মিটার

পেস্টবিন থেকে মানচিত্র পান!
পরীক্ষার কেস 1 - এই
টেস্ট কেস 2 এর মতো কিছু করে আউটপুট দেয় - প্রথম মানচিত্রের মতো একই ফলাফল উত্পন্ন করা উচিত

চ্যালেঞ্জ

আপনার চ্যালেঞ্জটি হ'ল কোনও ফাইল থেকে বা এর মতো একটি মানচিত্র পড়ার জন্য stdin- আপনাকে ব্যবহারের অনুমতি দেওয়া হয় cat balls.txt | ./yourexecutable- এবং প্রতিটি বল যখন মাটিতে পড়ে তখন আউটপুট বেগ।

এখানে বেগের সূত্রটি দেওয়া হল:

এখানে চিত্র বর্ণনা লিখুন

ধরে নিন যে hস্থলটির লাইন নম্বর এবং বলের রেখার সংখ্যাটির মধ্যে লাইন নম্বর পার্থক্য এবং এটি gসমান 10m/s^2

আউটপুট

আপনার প্রতিটি বলের নম্বর এবং বেগ m/sস্থল স্তরে আউটপুট করা উচিত । উদাহরণস্বরূপ N - Vm/s, Nবল নম্বরটি কোথায় এবং Vএটির বেগ। আপনি চাইলে একটি অ্যারে আউটপুটও করতে পারেন।

শুভ কোডিং! :)


প্রত্যাশিত ফলাফল ছাড়াই পরীক্ষার কেসগুলি পরীক্ষার কেস নয়
edc65

@ edc65 আমি প্রশ্নের প্রত্যাশিত ফলাফল যুক্ত করেছি
জ্যাকাজ্যাক

আমি যদি প্রোগ্রামটির অংশ হিসাবে ব্যবহারকারীর কাছ থেকে ডিরেক্টরিটিকে ইনপুট হিসাবে নিই তবে এটি ঠিক আছে?
ড্যানিয়েল

@ ডুপ্প আপনার সঠিক অর্থ কি?
জ্যাকাজ্যাক

আমার উত্তর দেখুন ।
ড্যানিয়েল

উত্তর:


8

এমএটিএল , 31 30 27 25 বাইট

95\16\5B#fG&X>1)b- 20*X^h

ইনপুটটি ;সারি বিভাজক হিসাবে একটি 2D চর অ্যারে :

['  1         5          2  ';'                 3        ';'     4                    ';'                          ';'                          ';'__________________________']

এটি অনলাইন চেষ্টা করুন! বা আরও স্বচ্ছতার জন্য মানচিত্র প্রদর্শন করতে কোডের একটি প্রাথমিক অন্তর্ভুক্ত করুনt

এখানে অন্যান্য পরীক্ষার মামলা রয়েছে: প্রথম , দ্বিতীয়

ব্যাখ্যা

95\      % Take input implicitly. Modulo 95: convert to numbers and map '_' into 0
16\      % Modulo 16: map space into 0 and digit chars into corresponding numbers
5B#f     % Find row indices and values of nonzero entries
G        % Push input again
&X>      % Index of maximum of each column. This finds character '_'
1)       % Get first value (they are all equal)
b        % Bubble row indices of numbers up in the stack
-        % Subtract to get distance from each number to the ground
20*X^    % Multiply by 20, take sqrt. This gives the velocity values
h        % Horizontally concat numbers and velocities. Display implicitly

7

সি, 125 122 121 বাইট

b[99]={};main(l,c){for(;(c=getchar())<95u;)b[c]=(l+=c==10);for(c=47;++c<58;)b[c]&&printf("%c,%f\n",c,sqrt((l-b[c])*20));}

সংকলন এবং দিয়ে চালান gcc -w golf.c -lm && cat balls.txt | ./a.out


এটা সত্যিই দুর্দান্ত, স্যার! আমি আমার প্রশ্নে এটি বলিনি, তবে আমি আপনাকে জানাতে চাই যে আপনার উদাহরণটি কোনও ফলাফল দেয় না, যখন 0 ... 9পাঠ্য ফাইলে অন্য চরিত্রগুলি দেখা দেয়। যাইহোক, +1, কারণ এটি নির্দেশ না করা আমার দোষ
জ্যাকাজ্যাক

@ জ্যাকাজ্যাক না, যতক্ষণ না এএসসিআইআই কোডের চেয়ে বড় কোনও অক্ষর না থাকে ততক্ষণ কোনও অক্ষরই ঠিক আছে _। তবে, এটি একটি অতিরিক্ত বাইট ( !=পরিবর্তে <) দিয়ে স্থির করা যেতে পারে ।
orlp

ঠিক আছে, আমি পরীক্ষার জন্য 'এক্স' ব্যবহার করেছি। কিছু মনে করো না. আপনার কোড দারুণ :)
জ্যাকাজ্যাক

@ জ্যাকাজ্যাক নতুন সংস্করণে এটি এখন একটি চরিত্রের সমাধান নয়, তবে আমি আরও 3 বাইট সংরক্ষণ করেছি :)
orlp

নিস! :) আমি ঘরে ফিরে আমার কোডটি দিয়ে কী করতে পারি তা একবার দেখে নেব। আমি জানি এটি অনেক ছোট করা যেতে পারে, তবে আমি চাই না এটি আপনার অনুলিপি হয়ে
উঠুক

6

সি - 194 (-5) 150 137 বাইট

আরও কিছুটা সময় ও চিন্তাভাবনা নিয়ে আমি ৪৪ বাইট গল্ফ করেছিলাম, আমাকে ১৩ বাইট সংরক্ষণ করতে সাহায্য করার জন্য অর্পকে
ধন্যবাদ

আমি আমার সি কোড দিয়ে শুরু করব:

b[256]={},n,i=47;main(l,c){for(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);for(;++i<58;)b[i]&&printf("%d %f\n",i-48,sqrt((n-b[i])*20));}

এবং মানব পাঠযোগ্য সংস্করণ:

//Throws many warnings, but lack of libraries is tolerated

/*
    c - current character
    l - line number (starts at 1)
    n - ground level
    i - iterator
    b - balls array
*/

b[256] = {}, n, i = 47; //That actually works, as long as you are using ASCII

main( l, c )
{
    for ( ;~( c = getchar( ) ); n = c == 95 ? l : n ) //Read stdin and search for ground
        b[c] = ( l += c == 10 ); //Increment lines counter on newlines, and save line numbers

    for ( ; ++i < 58; ) //Iterate through balls
        b[i] && printf( "%d %f\n", i - 48, sqrt( ( n - b[i] ) * 20 ) ); //Print out data    
}

সংকলন করুন এবং এর মতো চালান: gcc -o balls ballsgolf.c -lm && cat 1.txt | ./balls

আউটপুট

1 10.000000
2 10.000000
3 8.944272
4 7.745967
5 10.000000

4 টি বাইট সংরক্ষণ করুন: ~(c=getchar())পরিবর্তে (c=getchar())!=EOF
মেরিনাস

@ মারিনাস আমার কাছে যা ছিল
orlp

1
if (x != -1)হিসাবে একই if (~x)(দুই এর সম্পূরক মেশিন দিকে) কারণ ~-1আছে (স্বতন্ত্র) 0। সি গল্ফে কখনই ব্যবহার করবেন না while(cond), for(;cond;)যেমনটি দীর্ঘ সময় এবং গল্ফিংয়ের আরও বেশি সুযোগ সরবরাহ করে। আপনার উদাহরণে এটি হয়ে উঠতে পারে for(;~(c=getchar());n=c==95?l:n)b[c]=(l+=c==10);
orlp

@ orlp আমি বুঝতে পারি, পরামর্শের জন্য ধন্যবাদ :)
জ্যাকাজ্যাক

1
l=1সি রানটাইম আর্গুমেন্টের সংখ্যাটিকে তার প্রথম আর্গুমেন্ট ( ) হিসাবে প্রধান হিসাবে পাস করার lপরে প্রথম আর্গুমেন্ট তৈরির মাধ্যমে উদ্ঘাটিত হতে পারে এবং আপনি যখন কোনও কমান্ড লাইন আর্গুমেন্ট ( ) ছাড়াই কোনও প্রোগ্রাম কল করেন , তখন । অপ্রয়োজনীয়, বৈশ্বিক পূর্ণসংখ্যাগুলি স্বয়ংক্রিয়ভাবে 0 এ সূচনা হয় তাই কেবল যথেষ্ট হবে। mainargc./a.outargc = l = 1n=0;n;
orlp

4

পাইথ, 27 26 25 24 বাইট

smf-hT "_"। e, b @ * 20-xd \ _k2dC 
smf @ hT`M; .e, b @ * 20-xd \ _k2dC 
smf @ T`M; .e, b @ * 20-xd _k2dC
ছাঃ @ # `এম; .e, খ @ * 20 xD \ _k2dC

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



@ অরপ ওহ, আমি ভেবেছিলাম স্থল স্তরটি কেবল শেষ লাইনে থাকতে পারে।
ফুটো নুন



1
@orlp এটি নিয়মে ছিল যে "খালি লাইনগুলি পূরণ করতে আপনি স্থান যুক্ত করতে পারেন, যদি এটি আপনাকে সহায়তা করে"।
লিকি নুন

3

মতলব, 100 96 89 90 বাইট

s=input('');X=find(s==95);for i=0:9
[x y]=find(s==48+i);if(x)[i sqrt(20*(X(1)-x))]
end
end

অনেকগুলি বাইট ধন্যবাদ রক্ষা করেছে লুইস মেন্ডোকে

ছক পূরণ করা:

['  1         9          2  ';'                 3        ';'     4                    ';'                          ';'                          ';'__________________________']

ব্যাখ্যা:

X=find(s==95)         -- finds '_', we'll need X(1) to determine max height
for i=0:9             -- loops through balls' numbers
[x y]=find(s==48+i)   -- finds the ball
if(x)                 -- if it is present
[i sqrt(20*(X(1)-x))] -- output its number and velocity

3

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

সংস্করণ 6, 84 বাইট: (লিকি নুনকে ধন্যবাদ!)

lambda a:[(c,(~-(len(a)-i)*20)**.5)for i,s in enumerate(a)for c in s if c.isdigit()]

সংস্করণ 5, 91 বাইট:

lambda a:[c+":"+str((~-(len(a)-i)*20)**.5)for i,s in enumerate(a)for c in s if c.isdigit()]

সংস্করণ 4, 92 বাইট:

lambda i:[c+":"+str((~-(len(i)-n)*20)**.5)for n in range(len(i))for c in i[n]if c.isdigit()]

সংস্করণ 3, 99 বাইট:

def r(i):x=len(i);print([c+":"+str((~-(x-n)*20)**.5)for n in range(x)for c in i[n] if c.isdigit()])

সংস্করণ 2, 102 বাইট:

def r(i):
 n=len(i)
 for l in i:
  for c in l:
   if c.isdigit():print(c+":"+str((~-n*20)**.5))
  n-=1

উপরের সংস্করণগুলি ইনপুট হিসাবে স্ট্রিংগুলির একটি অ্যারে নেয়।

সংস্করণ 1, 140 বাইট:

with open(input(),"r")as i:
 n=sum(1for l in i);i.seek(0)
 for l in i:
  for c in l:
   if c.isdigit():print(c+":"+str((~-n*20)**.5))
  n-=1

এটি ব্যবহারকারীর কাছ থেকে ইনপুট হিসাবে ফাইলের ডিরেক্টরি গ্রহণ করে।


1 for l in i->1for l in i
লিকি নুন

@ ল্যাকিয়ুন, কী সেই কৌশলটি সমস্ত কীওয়ার্ড এবং সংখ্যা দিয়ে কাজ করে?
ড্যানিয়েল

1
আমি তাই বিশ্বাস করি. এছাড়াও, (n-1)*20->~-n*20
লিকি নুন

1
অপেক্ষা কর. পাইথন 3 এর সাথে printকলটির সাথে প্রথম বন্ধনীর দরকার নেই ?
ইয়াতসি

1
@ লেকইনুন না এটি পাইথন ২-এ সমস্ত কীওয়ার্ড এবং সংখ্যার জন্য কাজ করে না এটি বিশেষত একটি দিয়ে শুরু হওয়া কীওয়ার্ডগুলির জন্য কাজ করে না e, কারণ পাইথন টোকেনাইজার এটিকে ভাসমান বিন্দু বৈজ্ঞানিক স্বরলিপি হিসাবে চিহ্নিত করার চেষ্টা করবে (উদাঃ 1e5)। উদাহরণ ব্যর্থ যে: f = lambda n:-1if n<0else 1। পাইথন সংস্করণ উভয় ক্ষেত্রেই ব্যর্থ হওয়া একটি উদাহরণ 0or 1, কারণ টোকেনাইজার মনে 0oকরে একটি অষ্টাল সংখ্যা শুরু করে।
orlp

2

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

lambda x:[[i,(20*x[x.find(i):x.find('_')].count('\n'))**.5]for i in x if i.isdigit()]

একটি বেনাম ফাংশন যা শূন্যস্থানগুলিতে ভরাট সমস্ত খালি রেখার সাথে একাধিক-লাইনের স্ট্রিং হিসাবে যুক্তির মাধ্যমে ইনপুট গ্রহণ করে এবং এমন একটি অ্যারে প্রদান করে যেখানে প্রতিটি উপাদান ফর্মের [বল নম্বর, গতি] থাকে।

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

lambda x                      Function with input x
...for i in x if i.isdigit()  Loop through all characters i in x for which i is a digit,
                              and hence one of the balls
x[x.find(i):x.find('_')]      Slice x to give the substring between the ball and the ground
....count('\n')               Count the number of newlines in the substring to give the
                              height of the ball
(20*...)**.5                  Calculate the speed of the ball as it hits the ground
[i,...]                       Package the ball number and speed into a list
:[...]                        Return all ball-speed pairs as a list with elements [ball
                              number, speed]

আইডিয়নে চেষ্টা করে দেখুন


এই ক্ষেত্রে, আমি মনে করি, এটি সম্পূর্ণ স্ট্যান্ডেলোন পাইথন স্ক্রিপ্টের চেয়ে কোড স্নিপেট, তাই না?
জ্যাকাজ্যাক

@Jacajack এই সত্যটি একটি ফাংশন, একটি স্নিপেট, যা দ্বারা অনুমোদিত হয় ডিফল্ট । পাইথনে, ল্যাম্বডা ফাংশনগুলি নাম ছাড়াই ফাংশন যা কোনও ভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে এবং যখন প্রয়োজন হয় তখন ডাকে; আপনি লিখতে পারেন f = MyAnswer, এবং তারপরে কল করে f(x)লাম্বদাসের নাম রাখার দরকার নেই বলে conকমত্য রয়েছে । ভাল চ্যালেঞ্জ, যাইহোক!
দ্য বাইকিংভিকিং

অবশ্যই, আমি কেবল ভেবেছিলাম ল্যাম্বডাসকে এখানে কোড স্নিপেট হিসাবে ধরে নেওয়া হয়েছিল ( meta.codegolf.stackexchange.com/a/1146/55729 )। আমি অনুমান করি সবকিছু ঠিক আছে, তাহলে। আপনার মতামতের জন্য আপনাকে ধন্যবাদ :)
জ্যাকাজ্যাক

2

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

সম্পাদন করা2 বাইট thx @ জ্যাকাজ্যাক

ইনপুট প্যারামিটার হিসাবে মাল্টলাইন স্ট্রিং সহ একটি ফাংশন। আউটপুট বাছাই করা হয় না (অনুরোধ হিসাবে এটি হিসাবে)

a=>[...a].reverse().map(c=>c>'Z'?b=i:c<' '?++i:c>' '&&console.log(c,Math.sqrt((i-b)*20)),i=0)

পরীক্ষা

F=
a=>[...a].reverse().map(c=>c>'Z'?b=i:c<' '?++i:c>' '&&console.log(c,Math.sqrt((i-b)*20)),i=0)

function test()
{
  F(I.value);
}

test()
#I { height: 12em; width: 30em}
<textarea id=I>
    
 
  1         5          2
                 3
     4


__________________________




</textarea>
<button onclick="test()"></button>


এর sqrt(x)চেয়ে কম হবে না pow(x,.5)?
জ্যাকাজ্যাক

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