একটি বোলিং গঠন আঁকুন


44

আপনার লক্ষ্যটি হ'ল দশ-পিন বোলিংয়ে একটি গঠনের ASCII শিল্প প্রদর্শন করা যেখানে কেবল কয়েকটি পিনই রয়ে যায়। সবচেয়ে কম বাইট জেতা

দশ পিনগুলি একটি ত্রিভুজাকার গঠনে রয়েছে:

O O O O         
 O O O   
  O O       
   O

পিনগুলি 1 থেকে 10 পর্যন্ত লেবেলযুক্ত:

7 8 9 10    
 4 5 6            
  2 3    
   1

পিনগুলি অঙ্কন Oএবং পিনগুলি যেমন হারিয়েছে ., গঠনটি 1 3 5 6 9 10হ'ল:

. . O O         
 . O O    
  . O       
   O

ইনপুট:

একটি স্পেস-বিভাজনযুক্ত স্ট্রিং যা ক্রম অনুযায়ী 10 এর মধ্যে একটি সংখ্যাহীন উপসেটটি তালিকাভুক্ত করে।

আউটপুট:

সম্পর্কিত ফর্মেশনটি মুদ্রণ করুন বা লাইন ব্রেকগুলির সাথে স্ট্রিং হিসাবে আউটপুট দিন।

গঠনটি পর্দার বামদিকে ফ্লাশ করা উচিত। দৃশ্যমান চিত্রটি যতক্ষণ সঠিক ততক্ষণ কোনও সাদা স্থান ঠিক আছে। খালি লাইন আগে এবং পরে খুব ভাল।

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

>> 1 2 3 4 5 6 7 8 9 10

O O O O    
 O O O    
  O O    
   O

>> 7 10

O . . O    
 . . .   
  . .   
   .

>> 3 5 7 9 10

O . O O    
 . O .    
  . O    
   .

>> 1

. . . .    
 . . .    
  . .    
   O       

আপনি কি গ্যারান্টি দিতে পারবেন যে কমপক্ষে একটি পিন থাকবে? আমি যদি খালি ইনপুটটিতে শ্বাসরোধ করতে পারি তবে এটি আমার জন্য অক্ষরগুলি সংরক্ষণ করবে।
আন্ডারগ্রাউন্ডোমোনাইল

1
@ندرগ্রাউন্ডোমোরিয়েল এটির ইতিমধ্যে গ্যারান্টিযুক্ত: "
অমানবিক

আমি এটি পুরোপুরি মিস করেছি, ধন্যবাদ :)
আন্ডারগ্রাউন্ডোমোরিয়েল

[কোড-বোলিং]? : পি
mbomb007

উত্তর:


17

ব্রেনফাক - 617 616 604 বাইট

+>>>>,[>++++[<-------->-]<[>>>>],]<<<<[>+<<+<+>>-]<[>+<-]+<+<<[>+>-<<-]>[<+>-]>[,+++++[>+++++<-]>>[<->-]<[>>>>>[>>>>]+[<<<<]<-]>>[<+>-]<<<]>[>>[,<]<<+++++++++<]<<<[-[+>>-<]>[>>[<+<+>>-]<<<<[>+>-<<-]>[<+>-]>[<<[<<<<]>>>>[[<<<<+>>>>-]>>>>]<<<<+>>-]>[>+<-]]<<<[-[+>]+<<<<]>>>>-<<<<<]>>>>>+++++[>----<-]>->[<+>>+<-]<[<<<[<<<<]+[>>>>]<-]>>[<+>-]<[<<<<]>>>++++[<-------->-]>[-[,+++>]+>>>[<<<->>]>]<<<<<[>-]>[>>]>>+[<++++[<++++++++>-]<]>>[+++++++++++++>>>>]<<<<----<+++[<<+<<[<<+<<]+[>>>>]<<<<-]<<<<[-<<<<]>[.,>>]<<<<<[<<<<]<++++++++++<<.<+<<+<<+<<+<<+<[.,>>]<<<<<[<<]>++++++++++<+<<+<<+<..<+<[.,>>]<[<<]<...<<.

এটি আমার দু'দিনের ভাল অংশে নিয়েছে। আমি মনে করি এটি মূল্য ছিল। সম্ভবত এমন কিছু অংশ রয়েছে যা কোন কোষে বা যেকোনো কিছুতে সঞ্চিত রয়েছে তা পরিবর্তন করে আরও গল্ফ করা যেতে পারে তবে এখনই আমি খুশী আমি এটি কাজ করে চলেছি।

এই প্রোগ্রামটি সম্পূর্ণ আলাদা হতে হবে যদি প্রশ্নটি নির্দিষ্ট করে না যে ইনপুটটি বাছাই করা হবে। যেভাবে কাজ করে তা হ'ল ইনপুটযুক্তগুলির প্রায় 10 টি পিনের একটি তালিকা তৈরি করে। এ ধরণের বিভ্রান্তিকর তবে সম্ভবত এটি আরও ভাল ব্যাখ্যা করবে:

If you input these pins:           [2, 3, 6, 8, 9]
First, the program does this:      [2, 3, 6, 8, 9] + [10]
Then this:                         [2, 3, 6] + [7] + [8, 9, 10]
Then this:                         [2, 3] + [4, 5] + [6, 7, 8, 9, 10]
Finally, this:                     [1] + [2, 3, 4, 5, 6, 7, 8, 9, 10]
To build this:                     [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

এটি করার সময় এটি মনে রাখে যে ব্যবহারকারীরা সেখানে কোন পিন রেখেছিল এবং কোনটি সেখানে রেখেছিল। ইনপুটটি বাছাই না করা থাকলে এই কৌশলটি ব্যবহার করা খুব কঠিন difficult

বাছাইয়ের কাজটি আরও সহজ করে দেয় 10 নম্বরটি সনাক্তকরণ, যেহেতু ব্রেনফাক ব্যক্তিগত বাইটগুলি নিয়ে কাজ করে, প্রতি সেপরে "সংখ্যা" নয়, এটি পাছায় ব্যথা হতে পারে, তবে সাজানো ইনপুটটি আমার পক্ষে কাজ করা আরও সহজ করে তুলেছে সঙ্গে. এর কারণটি কীভাবে আমি প্রোগ্রামে ডেটা সঞ্চয় করেছিলাম তার সাথে সম্পর্কিত। আমি সময় মতো ইনপুটতে একটি অক্ষর নিই এবং ফলাফলটি থেকে 32 বিয়োগ করি। এর পরে যদি ঘরটি শূন্য হয় না তবে আমি 4 টি ঘর এগিয়ে চলেছি। পুনরাবৃত্তি করার আগে। এর অর্থ হ'ল আমি প্রতি 4 টি কোষে ইনপুটসের একটি ফাঁকা স্থান বাইট পাই এবং আমি পিনগুলি তাদের 16+ সংখ্যা হিসাবে কার্যকরভাবে সঞ্চয় করি However তবে, 10 টাইপ করতে দুটি বাইট নেয়, তাই আমাকে এটির বিশেষ কেস করতে হয়েছিল। যদি ইনপুটটি বাছাই না করা হত, আমাকে পিনগুলি সন্ধান করতে হবে তবে এটি বাছাই করার পরে এটি উপস্থিত থাকলে সর্বদা সর্বশেষ পিন হবে। আমি পরীক্ষা করেছি (ইনপুট +1 এর শেষ বাইট) == (ইনপুটটির দ্বিতীয় শেষ বাইট) এবং যদি তা হয় তবে এটি অবশ্যই 10 হওয়া উচিত I আমি শেষ বাইট থেকে মুক্তি পেয়েছি এবং আমার সিস্টেমটি যা বোঝে তাতে দ্বিতীয় শেষটিকে সেট করেছি "10"। চরিত্রটি'1'এবং '0'একটি বাইটে ফিট না, তবে 26 সংখ্যাটি নিশ্চিত!

এ কৌশলটি ব্যবহার করার জন্য কিছু কাজ করার জন্য কৌশলগুলি নিয়ে আসা আমার প্রিয় অংশ। :)

আপনি যদি এই প্রোগ্রামটি আরও বিশদে কাজ করে সে বিষয়ে আগ্রহী হন, আপনি যা কিছু করেছেন তা মনে আছে তা নিশ্চিত করার জন্য আপনি এটি লেখার সময় আমি যে মন্তব্যগুলি ব্যবহার করেছি সেগুলি দেখতে পারা যায়। এমনকি মস্তিষ্কে মন্তব্য লেখাও শক্ত, কারণ কোনও মন্তব্য বাক্য গঠন নেই। পরিবর্তে, চরিত্রগুলি বাদে প্রতিটি চরিত্রের <[+.,-]>কোনও বিকল্প নেই। দুর্ঘটনাক্রমে .বা ,আপনার মন্তব্যে বাগগুলি প্রবর্তন করা সহজ ! সে কারণেই ব্যাকরণটি এতটাই উইঙ্কি এবং সেমিকোলনগুলি সর্বত্র রয়েছে।

সম্পাদনা: এটিকে স্ক্রু করা কতটা সহজ তার উদাহরণ হিসাবে: আমি একটি মন্তব্যে "অ-স্পেস" ব্যবহার করেছি! আমি যখন উত্স থেকে সমস্ত অ-বিএফ অক্ষর কেড়ে নিয়েছি, তখন প্রোগ্রামটি যেটি আমি রেখে দিয়েছিলাম -। ভাগ্যক্রমে এটি কিছুই ভাঙ্গেনি, তবে এখন আমি এটি একটি বাইট সংরক্ষণ করার জন্য সরিয়েছি। :)

দ্বিতীয় সম্পাদনা: আমি যখন এটিকে ছুঁয়েছি তখন কিছুক্ষণ হয়ে গেছে, হাহা। এই সাইটে অন্য একটি ব্রেইনফাক উত্তরে আমি লক্ষ্য করেছি যে আমি ঘটনাক্রমে মন্তব্য করা সংস্করণে একটি কমা ব্যবহার করেছি। যেহেতু ইনপুটটি ইতিমধ্যে শেষ হয়ে গেছে, এটি বর্তমান কক্ষকে 0 এ সেট করেছে (এটি বাস্তবায়ন নির্ভর, তবে আমার অভিজ্ঞতায় এটি সবচেয়ে সাধারণ আচরণ)। আমি বাগটি ঠিক করেছি, তবে এটি আমার চিন্তাভাবনা করে। 0 তে কোনও ঘর নির্ধারণ করার অলঙ্কৃত উপায়টি হল [-](মোটামুটি while (*p) { *p--; }), যা দুটি বাইট দীর্ঘ। যে কোনও সময় সমস্ত ইনপুট পড়েছে, আমি ,পরিবর্তে ব্যবহার করতে পারি । এটি আমাকে উত্তরে 2 বাইট এবং এই 12 টিতে বাঁচিয়েছে!

one flag at the very left; will be important later
+>>>>

all nonspace bytes of input separated by 3 empty cells; pin number `n` stored with value `n` plus 16
,[>++++[<-------->-]<[>>>>],]<<<<

test if last pin is 10
[>+<<+<+>>-]<[>+<-]+<+<<[>+>-<<-]>[<+>-]>

[
    if not: find 10 minus the number it is; put that many placeholder pins (cells with value 1) at the end
    ,+++++[>+++++<-]>>[<->-]<[>>>>>[>>>>]+[<<<<]<-]>>[<+>-]<<<
]>


[
    if so: get rid of '0' byte; convert '1' byte to 26 (10 plus 16)
    >>[,<]<<+++++++++<
]<<<

pointer now sitting on the cell with the second greatest pin that was inputted (ie not a placeholder)

;;;;;;;

[
    check for flag placed at the very beginning of the program; if present: break
    -[+>>-<]>
    [
        find ((pin to our right) minus 1) minus pin to our left
        move all pins left of us 4*(that value) cells and insert placeholder pins
        >>[<+<+>>-]<<<<[>+>-<<-]>[<+>-]>[<<[<<<<]>>>>[[<<<<+>>>>-]>>>>]<<<<+>>-]>[>+<-]
    ]

    find first non placeholder pin to our left
    there has to be one because we haven't hit the flag yet
    <<<[-[+>]+<<<<]>>>>-<<<<<
]>>>>>+

we have now added placeholder pins at the end and in the middle; all that's left is the beginning

subtract 17 from lowest pin and put that many placeholders to the left
++++[>----<-]>->[<+>>+<-]<[<<<[<<<<]+[>>>>]<-]>>[<+>-]

subtract 32 from an empty cell 2 to the left of the lowest pin; will be useful later
<[<<<<]>>>++++[<-------->-]>

placeholder pins have the value 1; real pins have a value somewhere between 17 and 26
normalize it by stepping through and setting every pin with value != 1 to 3 (0's ascii code is 2 higher than period so this will make it easier to print later)
[-[,+++>]+>>>[<<<->>]>]<<<<<[>-]>[>>]>>

start writing 32s across the board; hitting every second cell
that's every pin and the cell 2 to the right of each pin
this is done in such a way that it will only halt if adding 32 to a cell sets it to 0; which is why we subtracted 0 from an empty cell earlier
it will catch us and prevent an infinite loop
+[<++++[<++++++++>-]<]

now write 13 to each pin; this adds up to 46 or 48; which are exactly the ascii values we want
>>[+++++++++++++>>>>]

we happen to have made a 14; turn it into a 10 for a newline
<<<<----

we're so close now; i can taste it
we have a list of 10 pins; each one with the ascii value that needs to be written
we have 32 everywhere because we'll need spaces
we even have a newline

the only problem now is that our list looks like this:
;;;;;;;;;;;;;;;;;;;;;;;;
;;1 2 3 4 5 6 7 8 9 10;;
;;;;;;;;;;;;;;;;;;;;;;;;

and we need to print in this order:
;;;;;;;;;;;;;;;;;;;;;;;;
;;7 8 9 10 4 5 6 2 3 1;;
;;;;;;;;;;;;;;;;;;;;;;;;

it's a pretty simple fix
once we print a pin we obviously don't need to remember it any more
so we simply print the last 4 pins on the list; destroying them on the way
then we print the last 3; which have become the ones we want
then two; then one
<+++[<<+<<[<<+<<]+[>>>>]<<<<-]<<<<[-<<<<]

print pins 7 8 9 10
>[.,>>]

print pins 4 5 6
<<<<<[<<<<]<++++++++++<<.<+<<+<<+<<+<<+<[.,>>]

print pins 3 2
<<<<<[<<]>++++++++++<+<<+<<+<..<+<[.,>>]

print the final pin!! :)
<[<<]<...<<.

14

পাইথন 2, 108 বাইট

def f(x):
 for i in 4,3,2,1:print" "*(4-i)+" ".join(".O"[i*~-i/2-~z in map(int,x.split())]for z in range(i))

সাথে কল f("3 5 7 9 10")

i4 টি প্রথম সারিতে এবং 1 টি সর্বশেষ হয় with zএই সারিটির নবম পিন, যার 0 অর্থ এটি সারির প্রথম পিন এবং i-1যার অর্থ এটি সারির শেষ পিন।

মূল হ্যাক হ'ল i*~-i/2-~z, যা রূপান্তরিত হয় (i, z) -> pin number। উদাহরণস্বরূপ, (4, 0) -> 7পিন 7 হিসাবে সারি 4-এ প্রথম পিন হয় (প্রথম সারিতে)। ডেরাইভেশনটি এরকম হয়:

  • আমরা iসারিতে প্রথম পিনে নিয়ে একটি ফাংশন চাই i, অর্থাৎ 4 -> 7, 3 -> 4, 2 -> 2, 1 -> 1। এটি দ্বারা সন্তুষ্ট (i**2-i)/2 + 1, এবং এইভাবে (i**2-i)/2 + 1 + zইনপুট জন্য সঠিক পিন নম্বর দেয়(i, z)

  • তারপরে সরল করুন:

(i**2-i)/2 + 1 + z
  = (i*(i-1))/2 + 1 + z
  = i*~-i/2 + 1 + z
  = i*~-i/2-~z

পাইথ , 33 বাইট

V4~Z-4N+*dNjdm@".O"}+d-11Zrz7U-4N

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

প্রোগ্রামটি মোটামুটি অনুবাদ করে:

z = input()
Z = 0

for N in range(4):
  Z += 4-N
  print(" "*N + " ".join(".O"[d+11-Z in map(int, z.split())] for d in range(4-N)))

(টিপস জন্য isaacg ধন্যবাদ)


আপনার পাইথ কোডটি দুটি উপায়ে গল্ফ করা যেতে পারে: V4এর সমতুল্য FNU4, এবং rz7এর সমতুল্য mvkcz\
isaacg

আহা ধন্যবাদ সারাক্ষণ ডক্স পরীক্ষা না করে পাইথের মধ্যে যা আছে এবং যা নেই তা আমি এখনও অভ্যস্ত নই।
Sp3000

একটি সম্পূর্ণ প্রোগ্রাম হিসাবে 107 বাইট
ফ্লিপট্যাক

9

পাইথ , ৩১

V4+*dNjdm?\O}+7+dZrz7\.rN4~Z-N4

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

V4 [0,1,2,3] এর চেয়ে বেশি ভেরিয়েবল হিসাবে এন সহ লুপের জন্য একটি সেট আপ করে।

*dNপ্রাথমিক স্থান সরবরাহ করে, কারণ dএটি স্থান।

পিনের অবস্থানগুলি সন্ধান করতে এটি ব্যবহার করে +7+dZ- 7 + ডি + জেড।

d হল:

0 1 2 3
 1 2 3
  2 3
   3

যখন Zপ্রথম লাইনে 0, দ্বিতীয়টিতে -4, তৃতীয় -7 এবং সামনের দিকে -9 রয়েছে। এটি Z0 থেকে শুরু হয় এবং 4, তারপরে 3, তারপরে 2 দ্বারা ~Z-N4হ্রাস পাবে Z

তারপরে, এটি ব্যবহার করে পিনের অবস্থানটি ইনপুটটিতে রয়েছে কিনা তা পরীক্ষা করে }+7+dZrz7rz7তালিকাভুক্ত ইন ফর্মের পছন্দসই পিনগুলি।

তারপরে, এটি Oউপস্থিত থাকলে এবং .অন্যথায় এটি তৈরি করে । এটি স্পেস পৃথকীকরণ করা হয়েছে, সহ jdএবং ছাপিয়ে ছাপানো হয়েছে।


5

পার্ল 5: 51 (এর জন্য 50 + 1 -p)

ব্যবহার rজন্য তা পতাকাঙ্কিত s///যা সাম্প্রতিক Perl 5 সংযোজন অন্যতম।

#!perl -p
$_="7890
 456
  23
   1
"=~s!\d!'. '^a
x/$&\b/!egr

5

সিজেম, 48 41 বাইট

বাহ, এটি ভয়াবহভাবে দীর্ঘ হয়েছে

"6789345 12  0"S*7/N*[l~]:(s"O"erA,s"."er

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

ব্যাখ্যা

প্রথমে আমরা লেআউটটি তৈরি করি:

"6789345 12  0"       "Push this string.";
               S*     "Riffle with spaces.";
                 7/   "Split into substrings of length 7.";
                   N* "Join with newlines.";

এই ফলন

6 7 8 9
 3 4 5 
  1 2  
   0

এবং এখন আমরা ইনপুট অনুসারে অঙ্কের অক্ষরগুলি প্রতিস্থাপন করি:

[l~]                 "Read the input and turn it into an array of integers.";
    :(s              "Decrement each number and turn the array into a string of digits.";
       "O"           "Push this string.";
          er         "Character transliteration, replaces the input digits with O.";
            A,s      "Create the string '0123456789'.";
               "."   "Push this string.";
                  er "Character transliteration, replaces all remaining digits with periods.";

"789A456S23SS1":~S*7/N*[l~]'OerB,'.erকিছুটা খাটো
ডেনিস

@ ডেনিস ধন্যবাদ আমি সম্পূর্ণরূপে নিশ্চিত নই যে erতখন আরে অটোোকাস্টিং করা হয়েছিল।
মার্টিন ইন্ডার

হ্যাঁ সঠিক. এটি 0.6.4 এ কার্যকর করা হয়েছিল, যা এই প্রশ্নের চেয়ে কম বয়সী। "789A456S23SS1":~S*7/N*[l~]"O"erB,"."er0.6.2 এ সূক্ষ্ম কাজ করে।
ডেনিস

5

পাইথন 2, 97 94

এটি অনুবাদ ফাংশন ব্যবহার করে, যা একটি স্ট্রিং-এ-চরিত্রের জন্য চরিত্রের বিকল্পগুলি তৈরি করতে দেয়। টাইপ করার জন্য আর বেশি দিন বাদে ট্রল পার্লের মতো। আমি 9 থেকে 99 তম পাওয়ারে স্ট্রিং তৈরি করে দশমিক সংখ্যাগুলির তালিকা পাই।

lambda a:u"7890\n 456\n  23\n   1".translate({ord(n):u'.O'[n+' 'in a+' ']+' 'for n in`9**99`})

5

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

প্রথম গল্ফ, সম্ভবত আরও খাটো হতে পারে।

function f(i){q='replace',s='7 8 9 0\n 4 5 6\n  2 3\n   1';alert(s[q](RegExp(i[q]('10','0')[q](/ /g,'|'),'g'),function(a){return a?'O':a})[q](/\d+/g,'.'))}

সাথে কল

f('1 2 3 4 5 6 7 8 9 10')
f('1 5 10')
f('')

সম্পাদনা

ES6 সংস্করণ, 130

f=i=>{q='replace',s='7 8 9 0\n 4 5 6\n  2 3\n   1';alert(s[q](RegExp(i[q]('10','0')[q](/ /g,'|'),'g'),a=>a?'O':a)[q](/\d+/g,'.'))}

সম্পাদনা

ES6 সংস্করণ, 79 ব্যর্থ

f=i=>alert('7890\n 456\n  23\n   1'.replace(/\d/g,a=>i.indexOf(a)<0?'. ':'O '))

ES6 সংস্করণ, 72 77, কোনও সতর্কতা নেই, কেবল ফিরে আসে

f=i=>'7890\n 456\n  23\n   1'.replace(/\d/g,a=>i.search(a+'\\b')<0?'. ':'O ')

1
79 এবং 72 টি ভাঙা হয়েছে, উভয়ই ইনপুট 10
edc65

@ এডসি 65 হুপস, ধন্যবাদ, স্থির
red-X

ওহ, শব্দ সীমানা চরিত্রের চতুর ব্যবহার, আমি প্রায় একই একই (ব্যবহার বাদে .match) নিয়ে এসেছি । এটি তাদের সবার মধ্যে সবচেয়ে মার্জিত।
নিনজেকেকো

4

রুবি, 91

x=(1..10).map{|i|i.to_s==$*[0]?($*.shift;?0):?.}
4.times{|i|puts (x.pop(4-i)*' ').center 8}

কেবল কমান্ড লাইন আর্গুমেন্টকে .s এবং 0s এর সাহায্যে প্রতিস্থাপন করে এবং 4 টি চক্রের লুপ ব্যবহার করে এগুলি মুদ্রণ করে।

পঠনযোগ্য সংস্করণ

x = (1..10).map do |i|
  if i.to_s == ARGV[0]
    ARGV.shift
    "0"
  else
    "."
  end
end

4.times do |i|
  row = x.pop(4 - i)
  puts row.join(' ').center 8
end

4

জিএনইউ সেড, 75

  • @ জোর্দানকে ধন্যবাদ 6 বাইট সংরক্ষণ করা হয়েছে।

স্কোর -rবিকল্পের জন্য 1 অতিরিক্ত অন্তর্ভুক্ত :

s/^/7 8 9 10\
 4 5 6\
  2 3\
   1 /
:
s/([0-9]+)(.*)\1/O\2/
t
s/[0-9]+/./g

এসটিডিএন এর মাধ্যমে ইনপুট:

$ echo 3 5 7 9 10 | sed -rf ./bowling.sed
O . O O
 . O .
  . O
   .    
$ 

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


GNU সেড খালি লেবেলগুলিকে মঞ্জুরি দেয়, যাতে আপনি গুলি ফেলেl দুটি বাইট সংরক্ষণ করতে পারেন ।
জর্ডান

এছাড়াও আপনি পরিবর্তন 0করতে 10, লাইন 2 1/থেকে 1 /লাইন 5, এবং [0-9]থেকে [0-9]+লাইন 7 এবং 9 আপনাকে প্রথমে লাইন ড্রপ করতে পারেন 4 বাইট জন্য।
জর্ডান

@ জর্ডান কুল - এর মধ্যে ইতিমধ্যে কেউ একটি পরামর্শ দিয়েছেন । ওহ অপেক্ষা করুন ... ;-)
ডিজিটাল ট্রমা

3

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

4,Sf*'-A*[q~]{('ot}/3,{)/(\s}%Sf*W%]zN*

আমি জানি একটি ছোট উপায় আছে, এখনই এটি বের করার সময় নেই don't

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

4,Sf*'-A*[q~]{('ot}/3,{)/(\s}%Sf*W%]zN*
4,                                          "Get the array [0,1,2,3]";
  Sf*                                       "Covert each number to that many spaces to";
                                            "get ["", " ", "  ", "   "] array";
     '-A*                                   "String '----------'";
         [q~]                               "Input numbers in an array";
             {    }/                        "For each input number";
              ('ot                          "Put 'o' at the corresponding index";
                    3,                      "Array [0,1,2]";
                      {     }%              "For each of the above number";
                       )                    "Increment the number";
                        /                   "Split the string into pieces of that length";
                         (\s                "Take the first string and join the rest back";
                              Sf*           "Riffle each string in array with space";
                                 W%         "Reverse the array of strings";
                                   ]z       "Zip together the space array and this one";
                                     N*     "Join by new line";

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


3

এপিএল (35)

⊖4 7⍴'.O'[1+⎕∊⍨⍳10]\⍨17110357⊤⍨28/2

টেস্ট:

      ⊖4 7⍴'.O'[1+⎕∊⍨⍳10]\⍨17110357⊤⍨28/2
⎕:
      1 3 5 6 9 10
. . O O
 . O O 
  . O  
   O   

ব্যাখ্যা:

  • 17110357⊤⍨28/2: এর 28-বিট উপস্থাপনা 17110357:

          4 7⍴17110357⊤⍨28/2
    0 0 0 1 0 0 0
    0 0 1 0 1 0 0
    0 1 0 1 0 1 0
    1 0 1 0 1 0 1
    
  • \⍨: প্রত্যেকের জন্য 0, একটি স্থান দিন এবং প্রত্যেকের জন্য 1, বাম দিকের স্ট্রিং থেকে একটি আইটেম নিন।

  • ⎕∊⍨⍳10: কীবোর্ড থেকে একটি লাইন পড়ুন এবং এটি ( ) মূল্যায়ন করুন , তারপরে প্রতিটি সংখ্যা 1 থেকে 10 ( ⍳10) পর্যন্ত ইনপুট ( ∊⍨) এ অন্তর্ভুক্ত রয়েছে কিনা তা পরীক্ষা করে দেখুন check
  • '.O'[1+... ]: প্রতিটি মানকে 1 যোগ করুন (0 এবং 1 এর পরিবর্তে 1s এবং 2s দিন) এবং তারপরে প্রতি 1 .এবং প্রতি 2 দ্বারা প্রতিস্থাপন করুন O
  • 4 7⍴: উত্পন্ন স্ট্রিংটিকে 4-বাই-7 ম্যাট্রিক্সে পরিণত করুন
  • : এটি অনুভূমিকভাবে ফ্লিপ করুন

3

পাওয়ারশেল: 109

ইনপুট $ i তে রয়েছে

(7..10),(4..6),(2,3),1|%{$c=0}{$_|%{$o=(" "*$c++)}{$o="$o $(if($i.split() -contains $_){'O'}else{'.'})"};$o}

ঐটা মজা ছিল. পাইপলাইন কীভাবে কাজ করে তা সম্পর্কে প্রচুর স্টাফ শিখেছি।


3

হাস্কেল: 163 160 বাইট

এটি থেকে স্থান বিভাজিত সংখ্যার একটি লাইন গ্রহণ করে stdin

m=map
y?x|x`elem`y="O "|0<1=". "
f y=putStr.unlines.zipWith(++)(m(`replicate`' ')[0..])$m(concat.m(y?))[[7..10],[4..6],[2,3],[1]]
main=getLine>>=f.m read.words

Ungolfed:

layout :: [[Int]]
layout = [[7,8,9,10]
         ,[ 4,5,6  ]
         ,[  2,3   ]
         ,[   1    ]
         ]

indentBy :: Int -> String
indentBy n = replicate n ' '

indentLines :: [String] -> [String]
indentLines
  = zipWith (++)
            (map indentBy [0..])

bowling :: [Int] -> String
bowling pins
  = unlines
  . indentLines
  $ map (concatMap showPlace)
        layout
  where
    showPlace :: Int -> String
    showPlace index
      | index `elem` pins = "O "
      | otherwise         = ". "

parseInput :: String -> [Int]
parseInput = map read . words

main :: IO ()
main = do
  pins <- fmap parseInput getLine
  putStr (bowling pins)

এবং একটি বোনাস:

সি: 250 বাইট

এই সংস্করণটি তার কমান্ড লাইন আর্গুমেন্টগুলির সংখ্যা হিসাবে প্রত্যাশা করে।

#define w int
main(w
z,char**a){w
b[10]={1,3,2,6,5,4,10,9,8,7};w
q=9;for(w
k=4;k>0;--k){w
i;for(i=0;i<4-k;++i)printf(" ");for(i=0;i<k;++i,--q){w
g=0;w
c;for(w
p=1;p<z;++p){sscanf(a[p],"%d",&c);g|=b[q]==c;}c=g?'O':'.';printf("%c ",c);}printf("\n");}}

2

পার্ল, 73

$_="7 8 9 10\n 4 5 6\n  2 3\n   1";for$v(<>=~/\d+/g){s/$v/O/g};s/\d+/./g;print

এবং একটি বোকা বোনাস পদ্ধতির, যা 90 টি অক্ষর প্যান করে না:

srand(1488068);$i=<>;print+(($i=~/$_\b/?O:".")." "x rand 5)=~s/  /\n /r for 7..10,4..6,2,3,1

2

গণিত, 109 বাইট

ফাংশন:

f=(i=0;Reverse@Table[Row@Table[If[MemberQ[ToExpression/@StringSplit@#,++i],O,"."],{n}],{n,4}]~Column~Center&)

ফোন করেছেন:

f@"3 5 7 9 10"

যদি বেনামী ফাংশনগুলির অনুমতি দেওয়া হয় তবে এটি 105 বাইটে সংক্ষিপ্ত করা যেতে পারে :

i=0;Reverse@Table[Row@Table[If[MemberQ[ToExpression/@StringSplit@#,++i],O,"."],{n}],{n,4}]~Column~Center&

যদি ইনপুটটি কোনও স্পেস-সীমাবদ্ধ স্ট্রিং না হয়ে থাকে তবে আকারে সংখ্যার একটি অ্যারে হতে পারে তবে {3,5,7,9,10}এটি আরও সংক্ষিপ্ত করে 79৯ বাইট করা যেতে পারে :

i=0;Reverse@Table[Row@Table[If[MemberQ[#,++i],O,"."],{n}],{n,4}]~Column~Center&

2

খাঁটি বাশ (কোনও কোরিউটিল নেই), 85

সাধারণ প্যাটার্ন প্রতিস্থাপন:

f="7 8 9 0
 4 5 6
  2 3
   1"
a=${@/10/0}
f="${f//[${a// /}]/O}"
echo "${f//[0-9]/.}"

কমান্ড-লাইন আর্গের মাধ্যমে তালিকাটি ইনপুট।


2

রিবোল - 117

s: array/initial 10"."b:""foreach n to-block input[s/:n:"0"]for n 4 1 -1[prin b print take/last/part s n append b" "]

Ungolfed:

s: array/initial 10 "."
b: ""
foreach n to-block input [s/:n: "0"]
for n 4 1 -1 [prin b print take/last/part s n append b " "]

2

ব্রেইনফাক, 179 বাইট

++++++++++[-[<<+>>-]+<<]>,[<[-]-[>-<-----]>++[-[>>+<<-]>>]>+++[<<],>,]<[,>>---[>
>]<<+++[<<]]>->>->>>>->>>>>>->[[>>]>,<<+[++[>+++++++++++<-]<+]>>[++.>-.>]>++++++
++++[>>]<<[.[<]<]<]

বিন্যাসকৃত:

++++++++++
[
  -[<<+>>-]
  +<<
]
>,
[
  <[-]
  -[>-<-----]
  >++
  [
    -[>>+<<-]
    >>
  ]
  >+++[<<]
  ,>,
]
<
[
  ,>>---[>>]
  <<+++[<<]
]
>->>->>>>->>>>>>->
[
  [>>]
  >,<
  <+
  [
    ++[>+++++++++++<-]
    <+
  ]
  >>[++.>-.>]
  >++++++++++[>>]
  <<[.[<]<]
  <
]

কোনও পূর্ববর্তী নিউলাইন ছাড়াই ইনপুট আশা করে।

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

টেপটি দশটি নোড দিয়ে শুরু করা হয়, যার প্রতিটি শূন্যের পরে একটি করে থাকে। একটি পিনের প্রাথমিক মান এবং শূন্যটি নেভিগেশনকে সহায়তা করে এবং স্থান অক্ষরের স্থানধারক হিসাবে কাজ করে। ইনপুটটিতে প্রতিটি সংখ্যার জন্য, সেই পিনটি 3 দ্বারা বাড়ানো হয়; লক্ষ্য করুন যে, ord('O') - ord('.') = 33, এবং প্রিন্টিং সময়ে, পিন মান (এই গুণ এছাড়াও স্থান অক্ষর জেনারেট করতে ব্যবহার করা হয়।) পিনের ক্রম টেপ বাঁ দিক থেকে ডানদিকে 11. দ্বারা গুন করা হবে সহজভাবে হয় 1পর্যন্ত 10। যদি ইনপুটটি a দিয়ে শেষ হয় তবে একটি 10সংশোধন করা হয়, যেহেতু 10প্রাথমিকভাবে এটিকে হিসাবে ধরা হয় 1

ইনপুট প্রক্রিয়া করার পরে, প্রতিটি সারির পরে একটি নেতিবাচক একটি স্থাপন করা হয়। তারপরে সারিগুলি একটি লুপে মুদ্রিত হয়, পূর্বে প্রক্রিয়াজাত সারিগুলির সংখ্যা দ্বারা নির্ধারিত নেতৃস্থানীয় স্পেসগুলির সংখ্যা সহ।


1

ক্লোজার, 216 টি অক্ষর (উঘ)

আমি নিশ্চিত এটি আরও গল্ফ করা যেতে পারে।

(let[s(map #(dec(read-string %))(.split(slurp *in*)" +"))](println(apply str(replace(apply hash-map(interleave(map #(char(+ 48 %))(range 10))(map #(if(some #{%}s)"O"".")(range 10))))"6 7 8 9\n 3 4 5\n  1 2\n   0"))))

এটি ব্যবহার করুন:

echo -n "2 4 9 8 10 5" | clojure a-file-which-contains-this-program.clj

1

এডাব্লুকে: 96 বাইট

{gsub(/ /,"");a="6 7 8 9\n 3 4 5\n  1 2\n   0";gsub("["$0"]","O",a);gsub(/[0-9]/,".",a);print a}

বিঃদ্রঃ:

  • ইনপুট মানটিতে স্পেস বিভাজকগুলি alচ্ছিক (তবে এটি তাদের সাথে প্রয়োজনীয় হিসাবে কাজ করে)
  • নম্বরগুলি ক্রমযুক্ত হতে হবে না
  • ইনপুটটি STDIN এ পড়ে is

1

সি # - 192 বাইট

কারণ সি #!

আমি গণিত দিয়ে আউটপুট তৈরির চেষ্টা শুরু করেছিলাম, তবে সরল প্রতিস্থাপন-টোকেন-ইন-স্ট্রিং পদ্ধতি উচ্চ স্তরের ভাষার জন্য সেরা বলে মনে হচ্ছে seems লিনাক নির্ভরতা দীর্ঘায়িত তবে কাউন্টার রাখার এবং পরিসীমা পরীক্ষা করার চেয়ে কম still

using System.Linq;class A{static void Main(string[]a){var s=@"7 8 9 0
 4 5 6
  2 3
   1";for(int c=11;c-->1;)s=s.Replace((char)(48+c%10),a.Contains(""+c)?'O':'.');System.Console.Write(s);}}

সম্পাদনা: ইউনিক্স লাইনের রিটার্ন (-3 বাইট)


1

স্কালা, 150 148

def t(n:Any)=("G H I J D E F   B C     A"/:('A'to'J'))((j,i)=>j.replace(i,(if((n+" ").indexOf((i-64)+" ")>=0)'0'else'.'))).grouped(7).maxBy(println)

স্পেস-সীমাবদ্ধ স্ট্রিংয়ের সেট গ্রহণ করে


1

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

F=i=>'7890\n 456\n  23\n   1'.replace(/\d/g,e=>'0.'[+!~i.search(e+'\\b')]+' ')

পরীক্ষার জন্য নিম্নলিখিত স্নিপেট ব্যবহার করুন। এটি পরীক্ষার সহজ করার জন্য প্রম্পট এবং সতর্কতা এবং নিয়মিত ফাংশন স্বরলিপি ব্যবহার করে।

i=prompt()
alert('7890\n 456\n  23\n   1'.replace(/\d/g,function(e){return'0.'[+!~i.search(e+'\\b')]+' '}))


1

ভিবি / মৌলিক- 229

আমার লক্ষ্য ছিল জাভা beat

Dim f
Sub m()
f = " 1 2 3 4 5 6 7 8 9 10"
a = l(7, 10) + l(4, 6) + l(2, 3) + l(1, 1)
MsgBox a
End Sub
Function l(b, e)
r = Space(3 - (e - b))
For i = b To e
r = r + IIf(InStr(f, Str(i)), "0 ", ". ")
Next
l = r + vbCr
End Function

chr এর পরিবর্তে vbCr সম্পাদনা করুন (13)

r = r + স্পেস (3 - (ই - বি))

শর্টহ্যান্ড যদি

সাব পরিবর্তে ফাংশন ব্যবহার

সাব মেইন () -> সাব এম ()


আপনি কি দয়া করে আপনার উত্তরে কোডের দৈর্ঘ্যকে বাইটে অন্তর্ভুক্ত করতে পারেন?
ProgramFOX

আমি করব, তবে আমি এখনও কোডটি নিয়ে কিছুটা
ফিড করছি

1

জাভা - 223 অক্ষর

public class Pins {public static void main(String[] args) {String s = "7 8 9 0\n 4 5 6\n  2 3\n   1";for (String arg : args) {s = s.replace(arg.replace("10", "0"), "o");}s = s.replaceAll("\\d", ".");System.out.println(s);}}

আমি এটি করার এই পদ্ধতিটি পছন্দ করতাম, তারপরে আমি বুঝতে পারি আমার একটি ছোট হ্যাক দরকার, এখনও আমার ধরণের সমাধানের মতো।

public class Pins {
public static void main(String[] args) {
    String s = "7 8 9 0\n 4 5 6\n  2 3\n   1";
    for (String arg : args) {
        s = s.replace(arg.replace("10", "0"), "o");
    }
    s = s.replaceAll("\\d", ".");
    System.out.println(s);
}
}

1

কে, 57 বাইট

এখনও খুব প্রতিযোগিতামূলক নয়, তবে এটি একটি শুরু:

`0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),.

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

  `0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),."3 5 7 9 10"
O . O O 
 . O . 
  . O 
   . 
  `0:((!4)#\:" "),',/'|0 1 3 6_(". ";"O ")@|/(1+!10)=/:(),."1"
. . . . 
 . . . 
  . . 
   O 

আমি ইনপুট স্ট্রিংটি মূল্যায়ন করে শুরু করি .- ভাগ্যক্রমে, স্পেস বিভাজিত সংখ্যাগুলি কে-তে একটি বৈধ তালিকার আক্ষরিক। তারপরে আমি পিনের অবস্থানের প্রতিনিধিত্ব করে একটি বুলিয়ান ভেক্টর তৈরি করব:

  (1+!10)=/:3 5 7 9 10
(0 0 1 0 0 0 0 0 0 0
 0 0 0 0 1 0 0 0 0 0
 0 0 0 0 0 0 1 0 0 0
 0 0 0 0 0 0 0 0 1 0
 0 0 0 0 0 0 0 0 0 1)
  |/(1+!10)=/:3 5 7 9 10
0 0 1 0 1 0 1 0 1 1

তারপরে প্রতিটি পিন পজিশনের জন্য স্পেস-প্যাডযুক্ত অক্ষরগুলি পেতে স্ট্রিংগুলির তালিকায় আমি সূচীকরণ করি।

  (". ";"O ")@0 0 1 0 1 0 1 0 1 1
(". "
 ". "
 "O "
 ". "
 "O "
 ". "
 "O "
 ". "
 "O "
 "O ")

আমি সেই অনুক্রমটিকে সারিগুলিতে টুকরো টুকরো করে ফেলেছি ( _), তাদের বিপরীত ( |) এবং প্রতিটি খণ্ডে একসাথে যোগদান ( ,/'):

  ,/'|0 1 3 6_(". ";"O ")@0 0 1 0 1 0 1 0 1 1
("O . O O "
 ". O . "
 ". O "
 ". ")

এখন এটি আমরা চাই যে প্যাটার্ন মত দেখতে শুরু হয়। যা বাকি আছে তা হ'ল প্রতিটি সারিতে কয়েকটি নেতৃস্থানীয় স্পেস পরীক্ষা করা ( ((!4)#\:" "),') এবং সারিগুলি স্টাডআউট ( 0:) এ মুদ্রণ করা ।


1

পাস্কাল (এফপিসি) , 165 বাইট

var f:string='. . . .'#10' . . .'#10'  . .'#10'   .';i:byte;z:array[1..10]of byte=(25,18,20,10,12,14,1,3,5,7);begin repeat read(i);f[z[i]]:='O'until eof;write(f)end.

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

স্ট্যান্ডার্ড আউটপুট থেকে সংখ্যা গ্রহণ করে, গঠনটি স্ট্যান্ডার্ড আউটপুটে প্রিন্ট করে।

পাস্কাল (এফপিসি) , 175 বাইট

function f(q:array of byte):string;var i:byte;z:array[1..10]of byte=(25,18,20,10,12,14,1,3,5,7);begin f:='. . . .'#10' . . .'#10'  . .'#10'   .';for i in q do f[z[i]]:='O'end;

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

একটি ফাংশন যা একই কাজ করে, পিনের অবস্থানের অ্যারে নিয়ে এবং বিন্যাসিত স্ট্রিংটি ফিরিয়ে দেয়।


1

পাওয়ারশেল, 84 বাইট

$p='6789
 345
  12
   0'
-split$args|%{$p=$p-replace($_-1),'O '}
$p-replace'\d','. '

পরীক্ষার স্ক্রিপ্ট:

$f = {

$p='6789
 345
  12
   0'
-split$args|%{$p=$p-replace($_-1),'O '}
$p-replace'\d','. '

}

# one space at the end of each line with pins
@(
,("1 2 3 4 5 6 7 8 9 10",
@"
O O O O 
 O O O 
  O O 
   O 
"@)

,("7 10",
@"
O . . O 
 . . . 
  . . 
   . 
"@)

,("3 5 7 9 10",
@"
O . O O 
 . O . 
  . O 
   . 
"@)

,("1",
@"
. . . . 
 . . . 
  . . 
   O 
"@)
) | % {
    $s, $expected = $_
    $result = &$f $s
    $result-eq$expected
    $result
}

আউটপুট:

True
O O O O
 O O O
  O O
   O
True
O . . O
 . . .
  . .
   .
True
O . O O
 . O .
  . O
   .
True
. . . .
 . . .
  . .
   O

0

জাভা - 371 316 294 অক্ষর

public class Bowling{public static void main(String[] a){boolean[] o=new boolean[10];int i;for(String s:a){i=Integer.parseInt(s)-1;o[i]=true;}for(int j=9;j>=0;j--){p((o[j]?"0 ":". "));p(j==6?"\n ":"");p(j==3?"\n  ":"");p(j==1?"\n   ":"");}p("\n");}static void p(String l){System.out.print(l);}}

প্রথমবার এটি করার সময়, আমি বেশ নিশ্চিত যে এটি ছিটেফোঁটা, তবে আমি একজন শিক্ষানবিশ। সংখ্যাগুলি অর্ডার না করাতেও এটি কাজ করে। নম্বরটি ভুল তবে এটি কীভাবে ঠিক করবেন তা জানার জন্য আমার কাছে সময় নেই ...

public class Bowling {
    public static void main(String[] args) {
        boolean[] ordened = new boolean[10];
        int i;
        for (String s : args) {
            i = Integer.parseInt(s) - 1;
            ordened[i] = true;
        }
        for (int j = 9; j >= 0; j--) {
            p((ordened[j] ? "0 " : ". "));
            p(j == 6 ? "\n " : "");
            p(j == 3 ? "\n  " : "");
            p(j == 1 ? "\n   " : "");
        }
        p("\n");
    }
    static void p(String l){
        System.out.print(l);
    }
}

java B 1 2 3 5 10উদাহরণস্বরূপ ইনপুট দেওয়া হয় । আউটপুট তখন হবে:

0 . . . 
 . 0 . 
  0 0 
   0 

1
নম্বরটি ভুল।
অপ্টিমাইজার

আমি এটি ঠিক করার চেষ্টা করব
Haroen Viaene

0

জাপট -Rx , 29 19 18 17 বাইট

5ÇÆ".O"gUø°TøÃÔû

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


ব্যাখ্যা

                      :Implicit input of integer array U
5Ç                    :Map each Z in the range [0,5)
  Æ                   :  Map the range [0,Z)
          °T          :    Increment T (initially 0)
        Uø            :    Does U contain T? (false=0, true=1)
   ".O"g              :    Get the character in the string ".O" at that index
            Ã         :  End mapping
             ¸        :  Join with spaces
              Ã       :End mapping
               Ô      :Reverse
                û     :Centre pad each element with spaces to the length of the longest
                      :Implicitly join with newlines, trim (not strictly necessary) and output
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.