স্পেস-আউট সংখ্যা


20

Nঅ-নেতিবাচক পূর্ণসংখ্যার একটি তালিকা দেওয়া , স্পেস দ্বারা প্রতিটি বাম-প্যাডযুক্ত দৈর্ঘ্যে এই সংখ্যাগুলি আউটপুট করুন N। (বিকল্পভাবে, একটি অক্ষর / স্ট্রিংয়ের তালিকাটি ফিরিয়ে দিন)) আপনি ধরে নিতে পারেন যে Nতালিকার বৃহত্তম সংখ্যার সংখ্যার চেয়ে বড় বা সমান। আউটপুটে ট্রেলিং স্পেসের অনুমতি রয়েছে।

আপনি এই সংখ্যাগুলি সমন্বিত একটি স্ট্রিংও নিতে পারেন, তবে Nস্ট্রিংটির দৈর্ঘ্য নয়, বরং তালিকার উপাদানগুলির সংখ্যা; এছাড়াও, আপনি উদাহরণস্বরূপ স্ট্রিংয়ের একটি তালিকা নিতে পারেন ["1", "2", "3"]

এটি একটি কোড-গল্ফ, তাই বাইটের মধ্যে সংক্ষিপ্ততম প্রোগ্রামটি জিতে।

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

input => 'output'
0 => '0'
1 => '1'
2 3 => ' 2 3'
2 10 => ' 210'
4 5 6 => '  4  5  6'
17 19 20 => ' 17 19 20'
7 8 9 10 => '   7   8   9  10'
100 200 300 0 => ' 100 200 300   0'
1000 400 30 7 => '1000 400  30   7'
1 33 333 7777 => '   1  33 3337777'
0 0 0 0 0 0 => '     0     0     0     0     0     0'

সংখ্যাগুলি প্রতিটি লাইনে একটি করে মুদ্রণ করা যায় (সঠিক প্যাডিং সহ)?
লুইস মেন্ডো

@ লুইস মেন্ডো হ্যাঁ
কনর ও'ব্রায়েন

উত্তর:


8

05 এ বি 1 , 3 বাইট

কোড:

Dgj

ব্যাখ্যা:

D    # Duplicate the input array
 g   # Get the length 
  j  # Left-pad with spaces to the length of the array

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন


1
উহু. ভাল যে দ্রুত শেষ হয়েছিল। সুন্দর কাজ!
কনর ওব্রায়েন

16

পাইথন, 32 বাইট

lambda l:'%%%ds'%len(l)*len(l)%l

একটি অনামী কাজ যা ইনপুট হিসাবে একটি tuple লাগে। উভয়ই সংখ্যা বা স্ট্রিংয়ের কাজ করে।

উদাহরণ:

l=(1,33,333,7777)

'%%%ds'
## A "second-order" format string

'%%%ds'%len(l)           -> '%4s'
## Inserts the length as a number in place of '%d'
## The escaped '%%' becomes '%', ready to take a new format argument
## The result is a format string to pad with that many spaces on the left

'%%%ds'%len(l)*len(l)    -> '%4s%4s%4s%4s'
## Concatenates a copy per element

'%%%ds'%len(l)*len(l)%l  -> '   1  33 3337777'
## Inserts all the tuple elements into the format string 
## So, each one is padded with spaces

7

জাভাস্ক্রিপ্ট (ES7), 37 বাইট

a=>a.map(v=>v.padStart(a.length,' '))

ইনপুট: স্ট্রিংগুলির
অ্যারে আউটপুট: স্ট্রিংগুলির অ্যারে


5

পাওয়ারশেল ভি 2 +, 36 বাইট

param($a)$a|%{"{0,$($a.count)}"-f$_}

ইজারসের $aঅ্যারে হিসাবে ইনপুট নেয় int। তাদের মাধ্যমে লুপ $a|%{...}। প্রতিটি পুনরাবৃত্তি, -fmatচ্ছিক Alignment Component(উপর ভিত্তি করে) ormat অপারেটর ব্যবহার করে$a.count শূন্যস্থানের যথাযথ সংখ্যার বাম-প্যাডে ) । সেই ফলস্বরূপ স্ট্রিংটি পাইপলাইনে রেখে যায়। প্রোগ্রামের প্রয়োগের শেষে, ফলাফলযুক্ত স্ট্রিংগুলি অ্যারে হিসাবে পাইপলাইনে সমস্ত অবশিষ্ট থাকে।


উদাহরণ

আউটপুট প্রতিটি রানে নিউলাইন-বিভক্ত হয়, কারণ এটি Write-Outputঅ্যারের জন্য প্রোগ্রামের সমাপ্তিতে ডিফল্ট হয়।

PS C:\Tools\Scripts\golfing> @(0),@(1),@(2,3),@(2,10),@(4,5,6),@(17,19,20),@(7,8,9,10),@(100,200,300,0),@(1000,400,30,7),@(1,33,333,7777),@(0,0,0,0,0,0)|%{""+($_-join',')+" -> ";(.\spaced-out-numbers $_)}
0 -> 
0
1 -> 
1
2,3 -> 
 2
 3
2,10 -> 
 2
10
4,5,6 -> 
  4
  5
  6
17,19,20 -> 
 17
 19
 20
7,8,9,10 -> 
   7
   8
   9
  10
100,200,300,0 -> 
 100
 200
 300
   0
1000,400,30,7 -> 
1000
 400
  30
   7
1,33,333,7777 -> 
   1
  33
 333
7777
0,0,0,0,0,0 -> 
     0
     0
     0
     0
     0
     0

5

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

a=>a.map(n=>" ".repeat(a.length-n.length)+n)

আর্গুমেন্টগুলিকে স্ট্রিংগুলির তালিকা হিসাবে গ্রহণ করে এবং স্ট্রিংগুলির একটি তালিকাও প্রদান করে।

ব্যাখ্যা:

a=>                                                   An unnamed function, which takes one argument, a
   a.map(n=>                               )          Do the following to each element n in a:
            " ".repeat(a.length-n.length)             Generate the spaces needed to justify the number
                                         +n           Append the number

1
স্ট্রিংগুলির একটি অ্যারে গ্রহণযোগ্য, সুতরাং এটির .join("")প্রয়োজন নেই।
কনর ও'ব্রায়েন

1
a=>a.map(n=>(" ".repeat(l=a.length)+n).slice(-l))একই দৈর্ঘ্য কিন্তু স্ট্রিং পাশাপাশি পূর্ণসংখ্যার উপর কাজ করে।
নিল

5

পার্ল, 26 বাইট

-৪ বাইট @ টন হসপেলকে ধন্যবাদ

25 বাইট কোড + -aপতাকা।

printf"%*s",~~@F,$_ for@F

সাথে চালান:

perl -ae 'printf"%*s",~~@F,$_ for@F' <<< "10 11 12"

(পার্লের কিছু পুরানো সংস্করণে আপনার যোগ করার দরকার হতে পারে -n)


1
-aবিকল্পটি ব্যবহার করা আপনার
কোডকে আরও

@ টনহোস্পেল হুম, এটি মোটামুটি সুস্পষ্ট মনে হচ্ছে, আমাকে বোকা বানিয়েছে .. অনুস্মারকটির জন্য ধন্যবাদ
দাদা

সামান্য ভিন্ন পদ্ধতি লুপটি এড়িয়ে যায় এবং একটি বাইট সংরক্ষণ করে: অনলাইনে চেষ্টা করে দেখুন!
এক্সকালি

5

বাশ, 14

printf %$#d $@

কমান্ড লাইনে প্রদত্ত ইনপুট তালিকা।

এখানে ব্যাখ্যা করার মতো বেশি কিছু নেই। printfপাসিং অর্গগুলির সংখ্যাকে ভিত্তিতে প্রয়োজনীয় প্যাডিং করতে কেবল অন্তর্নির্মিত সুবিধাদি ব্যবহার করে :

  • $# পাস করা আরগের সংখ্যা
  • %<n>d একটি প্রিন্টফ ফর্ম্যাট স্পেসিফায়ার যা কোনও পূর্ববর্তী স্থান পর্যন্ত এন পূর্ণসংখ্যা মুদ্রণ করে
  • $@ পাস করা সমস্ত আরগগুলির তালিকা
  • বিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা প্রতিটি সদস্যের জন্য পুনঃব্যবহৃত করা হয় $@

ভাবনা


4

ভিম, 19 বাইট

YPPG!{<C-F>|R%ri<CR>djVGgJ

এক-প্রতি-লাইনে সংখ্যার একটি তালিকা নেয়। নির্ভর করে :set expandtab, যা জনপ্রিয়, তবে সর্বজনীন নয়।

আপনি :rightএই জন্য পরিষ্কারভাবে ব্যবহার করতে চান । কমান্ড লাইনে লাইনের সংখ্যা কীভাবে পাওয়া যায় তা প্রশ্ন। Traditionalতিহ্যবাহী উপায়টি :%ri<C-R>=line('$')কিন্তু সমস্ত পাঠ্য দীর্ঘ।

সংক্ষিপ্ততর, আরও উদ্যোগের পদ্ধতি হল সাধারণ মোড !কমান্ডটি ব্যবহার করে কমান্ড লাইনটি তৈরি করা । এটিতে কিছু অদ্ভুত পরিশ্রম জড়িত রয়েছে, 2 লাইনের মাধ্যমে ফাইলটি প্রসারিত করে আবার এগুলি সরিয়ে ফেলা হয় তবে এটি 2 বাইট সংক্ষিপ্ত আকারে আসে। এবং আমি কিন্ডল্ড কমান্ড লাইনটি পেয়েছি যা পেয়েছি (যেমন :%ri+4!) আসলে কাজ করে তবে আমি তা করতে পারি।


আমি মনে করি না আপনি কোনও বৈশিষ্ট্যের উপর নির্ভর করতে পারেন যা ডিফল্টরূপে বন্ধ রয়েছে।
ডিজেএমসিএমহেম

@ ডিজেএমসিমেহেম আমি আমার জীবনের অনেকগুলি ঘন্টা ভিমগল্ফের খারাপ ইনডেন্ট সেটিংসের সাথে লড়াই করে কাটিয়েছি। সুস্পষ্টভাবে সেটিংস expandtabএই সমাধানটিতে 7 টি স্ট্রোক যুক্ত করে। যে সমস্যার কারণ তা হ'ল আমাকে যে ট্যাবগুলি এখন জিততে পারে এড়ানো / অপসারণের জন্য অন্যান্য পদ্ধতির জন্য আমাকে পরীক্ষা করতে হবে। এটি অনেক সময়, মোটেও মজাদার নয়, আমার সমাধানের গুণমানকে আরও খারাপ করে তোলে এবং সরবরাহিত কোনও পরীক্ষার ক্ষেত্রেও প্রভাবিত করে না (কারওরও 8+ সংখ্যা নেই)। এটি যদি নিয়ম হয়, তবে এটিই নিয়ম, তবে আমি এটি না করে বরং প্রতিদ্বন্দ্বিতাকে চিহ্নিত করব expandtab
udioica

@DJMcMayhem সম্পর্কে Ypp!{। এটা আসলে খাটো। এটিও কাজ করে না। ফাইলের দৈর্ঘ্য নির্বিশেষে এটি সর্বদা 1 নম্বর কমান্ড লাইনে আনবে।
udioica

4

রুবি, 40 36 34 বাইট

->m{m.map{|i|$><<i.rjust(m.size)}}

আরও কাজ করা যেতে পারে।

ল্যাম্বদা বলে ডাকে।

ব্যাখ্যা:

->m{m.map{|i|$><<i.rjust(m.size)}}
->m{                             } # lambda taking array m
    m.map{|i|                   }  # map over array using variable i
             $><<                  # output to $> (stdout)
                 i.rjust(m.size)   # right justify i to m's length

2

জেলি , 7 6 বাইট

L⁶xaUU

ইনপুট স্ট্রিংগুলির একটি অ্যারে। এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

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

L⁶xaUU  Main link. Argument: A (array of strings)

L       Yield the l, the length of A.
 ⁶x     Repeat ' ' l times.

    U   Upend; reverse all strings in A.
   a    Perform vectorizing logical AND, replacing spaces with their corresponding
        digits and leaving spaces without corresponding digits untouched.
     U  Upend; reverse the strings in the result to restore the original order of
        its digits, moving the spaces to the left.

2

গণিত, 25 বাইট

#~StringPadLeft~Length@#&

ইনপুট এবং আউটপুট উভয়ই স্ট্রিংয়ের তালিকা।

ব্যাখ্যা

Length@#

ইনপুটটির দৈর্ঘ্য (উপাদানের সংখ্যা) পান।

#~StringPadLeft~...

প্যাড প্রতিটি উপাদানকে ইনপুটটিতে রেখে দেয় যাতে দৈর্ঘ্যের সাথে ইনপুটটির দৈর্ঘ্য মেলে।


2

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

বেনামে ফাংশন, ইনপুট: স্ট্রিংগুলির অ্যারে, আউটপুট: স্ট্রিংগুলির অ্যারে
একটি পুনরাবৃত্ত প্যাডিং ফাংশন ব্যবহার করে

a=>a.map(x=>p(x),p=x=>x[a.length-1]?x:p(' '+x))

ইনপুট হিসাবে একটি পূর্ণসংখ্যার / স্ট্রিং অ্যারের জন্য, 49 বাইট:

a=>a.map(x=>p(x),p=x=>(y=' '+x)[a.length]?x:p(y))

পরীক্ষা

f=
a=>a.map(x=>p(x),p=x=>x[a.length-1]?x:p(' '+x))

function update() {
  var l=I.value.match(/\d+/g)||[]
  O.textContent = f(l)
}

update()
 
<input id=I oninput='update()' value='1000,400,30,7'>
<pre id=O></pre>


2

পিএইচপি, 55 বাইট

<?foreach($a=$_GET[a]as$i)printf("%".count($a)."s",$i);

স্পষ্ট সংস্করণ 59 বাইট

<?foreach($a=$_GET[a]as$i)echo str_pad($i,count($a)," ",0);

1
কেন str_pad ব্যবহার করবেন, যখন প্রিন্টফ যথেষ্ট? foreach($a=$_GET[a]as$i)printf("%".count($a)."s",$i);
ক্রিপ্টো

2

জে, 4 বাইট

":~#

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

অ্যানারি ফাংশন অ্যারে হিসাবে ডানদিকে সংখ্যার তালিকা নিয়ে এবং প্যাডযুক্ত স্ট্রিংটি ফিরিয়ে আনছে।

এখানে এটি আরপিএলে ব্যবহৃত হয় in নোট করুন যে ইনপুট লাইনগুলি তিনটি ফাঁকা স্থান যুক্ত।

   f=: ":~#
   f 2 3
 2 3
   f 2 10
 210
   f 1111 222 33 4
1111 222  33   4

কি দারুন. তুমি আমার রেফারেন্স সলিউশনকে জেতে পেলে! খুব সুন্দর.
কনর ও'ব্রায়েন


1

কোটলিন, 90 বাইট

Golfed:

fun main(a:Array<String>){a.forEach{b->for(i in 1..a.size-b.length){print(" ")};print(b)}}

Ungolfed:

fun main(a: Array<String>) {
    a.forEach { b ->
        for (i in 1..a.size - b.length) {
            print(" ")
        }
        print(b)
    }
}

1

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

k=length
f l=map(\s->replicate(k l-k s)' '++s)l

এটি জাভাস্ক্রিপ্ট উত্তরের মত স্ট্রিংগুলির তালিকা থেকে স্ট্রিংয়ের তালিকার একটি ফাংশন। replicateএকজনকে প্রদত্ত আকারের একটি তালিকা (হাস্কেল স্ট্রিংগুলি অক্ষরের তালিকাগুলি রয়েছে) পেতে দেয়, সুতরাং আমি এটি ব্যবহার করি - এবং সমস্যাটির সাহসী অনুমান N- প্রতিটি উপাদানটির জন্য প্যাডিং তৈরি করতে (এর দৈর্ঘ্যটি - <উপাদানটির দৈর্ঘ্য>) ইনপুট তালিকার)। আমি এটির printfপরিবর্তে একটি ভিত্তিক সমাধানটি ব্যবহার করতে পছন্দ করতাম replicate(এটি একটির জন্য আরও সংক্ষিপ্ত হত) তবে আমদানি বিবৃতিটি ফাংশনটিতেই করা কোনও সঞ্চয়কে হত্যা করে।


1

জাভা, 83 82 বাইট

a->{String s="";for(int i=a.length,j=i;i-->0;)s+="%"+j+"s";return s.format(s,a);};

অ্যারের দৈর্ঘ্যের সমান একাধিক স্পেস দিয়ে প্রদত্ত আর্গুমেন্টগুলিকে প্যাড করার জন্য ডিজাইন করা একটি ফর্ম্যাট স্ট্রিং তৈরি করে। বিন্যাসের স্ট্রিংটি আর্গুমেন্ট হিসাবে ব্যবহৃত হয় String.formatএবং ফলাফলটি পরে ফিরে আসে। ক্রিয়ামূলক ইন্টারফেস এক String[]বা এক Integer[]বা অনুরূপ গ্রহণ করতে পারে ।

সম্পূর্ণ শ্রেণি:

public class Test {
    public static void main(String[] args) {
        java.util.function.Function<Integer[], String> f = a -> {
            String s = "";
            for (int i = a.length, j = i; i-- > 0;)
                s += "%" + j + "s";
            return s.format(s, a);
        };

        System.out.println(f.apply(new Integer[] {0}));
        System.out.println(f.apply(new Integer[] {2, 10}));
        System.out.println(f.apply(new Integer[] {7, 8, 9, 10}));
        System.out.println(f.apply(new Integer[] {1, 33, 333, 7777}));
        System.out.println(f.apply(new Integer[] {0, 0, 0, 0, 0, 0}));
    }
}

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

-1 বাইট @ কেভিন ক্রুজসেনকে ধন্যবাদ thanks


ভাল পন্থা, +1। আপনি এটিকে 1 টি বাইট দ্বারা এর মতো করে int ...এবং এর s+=...ভিতরে রেখে গল্ফ করতে পারেন if:for(int i=a.length,j=i;i-->0;s+="%"+j+"s");
কেভিন ক্রুইজসেন


1

এমএটিএল, 14 বাইট

'%%%dd'inYDGYD

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

এটি প্রথমে বিন্যাসের স্ট্রিংটি তৈরি করে ফর্ম্যাট করা স্ট্রিং সৃষ্টি ব্যবহার করে: %(NUM)dএবং তারপরে এই বিন্যাসের স্ট্রিং এবং ইনপুট ব্যবহার করে আবার স্ট্রিং ফর্ম্যাটিং প্রয়োগ করে।


1

জাভাস্ক্রিপ্ট 33 বাইট

@ হেইডি-এর মতো - তবে ডিফল্ট প্যাডিং '', তাই এর 4 টি অক্ষর কম

a=>a.map(s=>s.padStart(a.length))

f=a=>a.map(s=>s.padStart(a.length))

console.log(f(["0"]))
console.log(f(["1"]))
console.log(f(["2","3"]))
console.log(f(["2","10"]))
console.log(f(["17" ,"19" ,"2"]))
console.log(f(["1000" ,"400" ,"30" ,"7"]))


1

কে (ওকে) , 11 বাইট

সমাধান:

,/(-#x)$$x:

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

ব্যাখ্যা:

ডান থেকে বামে ব্যাখ্যা করা। তালিকার দৈর্ঘ্য সহ স্ট্রিং এবং বাম-প্যাডে রূপান্তর করুন, তারপরে সমতল করুন:

,/(-#x)$$x: / the solution                      | example:
         x: / save as 'x'                       |
        $   / string                            | $10 20 30 -> "10","20","30"
       $    / pad right by left                 | 5$"abc" -> "abc  "
  (   )     / do the stuff in brackets together |
    #x      / count x                           | #10 20 30 -> 3
   -        / negate                            |
,/          / flatten (concatenate-over)        | ,/" a"," b"," c" -> " a b c"


0

সি #, 39 বাইট

s=>s.ConvertAll(c=>c.PadLeft(s.Count));

একটি নেয় List<string>এবং আউটপুট নেয়List<string>

ব্যাখ্যা:

/*Func<List<string>, List<string>> Lambda =*/ s =>
    s.ConvertAll(c =>                                // Create a new List<string> by...
        c.PadLeft(s.Count)                           // ...padding each element by 'N'
    )
;

যদি আমদানি গণনা না করা হয় এবং তারপরে ফিরে আসে তবে লিনকিউ ব্যবহার করতে কয়েক বাইট সংক্ষিপ্ত হত IEnumerable<string> একটি পূর্ণ ব্লোন্ড তালিকার পরিবর্তে :

সি #, 35 + 18 = 53 বাইট

using System.Linq;s=>s.Select(c=>c.PadLeft(s.Count));

0

আর, 47 বাইট

cat(sprintf("%*.f",length(n<-scan()),n),sep="")

স্টিডিনের কাছ থেকে ইনপুট পড়ে এবং এর সাথে সি-স্টাইল বিন্যাস ব্যবহার করে sprintfcatফাংশনটির প্রয়োজন নেই এমন কিছু উপায় থাকতে হবে তবে এটি ছাড়া প্রতিটি উপাদানটির উদ্ধৃতি দমন করার কোনও উপায় খুঁজে পাওয়া যায়নি। আমরা যদি কেবলমাত্র শুরু এবং শেষের উদ্ধৃতি চাই তবে আমরা কিছুটা দীর্ঘতর বিকল্পটি ব্যবহার করতে পারি:

paste0(sprintf("%*.f",length(n<-scan()),n),collapse="")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.