* Overwrit * লেবেল


23

যদি আপনি কখনও সত্যিই ঘন চক্রান্তের সাথে লেবেল যুক্ত করার চেষ্টা করে থাকেন তবে আপনি বুঝতে পারবেন যে কখনও কখনও লেবেল একে অপরকে ওভারল্যাপ করে দেবে, যাতে সেগুলি পড়া শক্ত হয়। আমরা অনুরূপ কিছু করতে যাচ্ছি কিন্তু 1 ডি তে।

ইনপুট (label, x-coordinate)জোড়াগুলির ক্রম হবে এবং প্রদত্ত ক্রমে প্রতিটি পয়েন্ট এবং লেবেল আঁকার ফলাফল আউটপুট হবে। *বিন্দুর প্রতিনিধিত্বকারী একটি নক্ষত্রটি প্রদত্ত এক্স-কোর্ডিনেটে স্থাপন করা উচিত এবং লেবেলটি অনুসরণ করা উচিত। যে কোনও বিদ্যমান অক্ষর ওভাররাইট করা হবে।

উদাহরণস্বরূপ, যদি ইনপুট ছিল

Hello  0
World  8
Fizz   3
Buzz   5
PPCG   16
X      9

তারপরে নিম্নলিখিতটি ঘটবে:

*Hello
*Hello  *World
*He*Fizz*World
*He*F*Buzzorld
*He*F*Buzzorld  *PPCG  
*He*F*Buz*Xrld  *PPCG

চূড়ান্ত লাইনটি তখন আউটপুট করা উচিত।

আই / ও বিধি

  • ইনপুটটিতে কোনও সংখ্যক জোড়া থাকতে পারে। প্রতিটি লেবেলে কেবল বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর থাকবে এবং লেবেলের দৈর্ঘ্য সর্বাধিক 127 অক্ষর হবে। প্রতিটি এক্স-সমন্বয় 0 এবং 127 এর মধ্যে থাকবে between

  • ইনপুটটি কোনও সুবিধাজনক তালিকা বা স্ট্রিং ফর্ম্যাটে এমন হতে পারে যে জোড়াটি দ্ব্যর্থহীন এবং লেবেলগুলি / এক্স-স্থানাঙ্কগুলি বিকল্প হিসাবে ইনপুট থাকে in উদাহরণস্বরূপ, মতো [("Hello", 0), ("World", 8) ...]বা একটি ফর্ম্যাট [0 "Hello" 8 "World" ...]ভাল। তবে আপনি দুটি আলাদা লেবেল এবং এক্স-স্থানাঙ্কের তালিকা ধরে নাও নিতে পারেন।

  • ফাংশন এবং সম্পূর্ণ প্রোগ্রাম দুটি ঠিক আছে।

  • কোনও লেবেল দ্বারা আচ্ছাদিত কোনও দাগ স্থানের সাথে উপস্থাপন করা উচিত। তবে একক alচ্ছিক ট্রেলিং নিউলাইনকে বাদ দিয়ে কোনও বহিরাগত নেতৃত্বের বা পিছনের শ্বেত স্পেস থাকতে পারে না।

উদাহরণ

ইনপুট:

OneLabel   10

আউটপুট:

          *OneLabel

ইনপুট:

Heathrow   0
Edinburgh  2
London     4
Liverpool  6
Oxford     8

আউটপুট:

*H*E*L*L*Oxfordl

ইনপুট:

alpha     20
beta       4
gamma     57
delta      3
epsilon   22
zeta      32
eta       53
theta     27

আউটপুট:

   *delta           *a*epsi*thetazeta                *eta*gamma

ইনপুট:

abc  5
d    5
abc  10
ABCDEFGHIJKLMNOPQRSTUVWXYZ 127

আউটপুট:

     *dbc *abc                                                                                                                 *ABCDEFGHIJKLMNOPQRSTUVWXYZ

নোট করুন এবং লেবেলগুলি এবং / অথবা এক্স-স্থানাঙ্কগুলি পুনরাবৃত্তি হতে পারে।


যদি এক্স কোর্ডগুলি [0,127] হয় এবং স্ট্রিংগুলি (0,127] হয় তবে কোনও লেবেল লাইনটির ডানদিকের প্রান্তে চলে যেতে পারে, বা এটি সুরক্ষিত আছে? অর্থাৎ, "ফু 127" "লাইন" "*" দিয়ে শেষ করে বা "* ফু"? কেবল স্ট্রিংটির কোনও নরম বা কঠোর সমাপ্তি হওয়া উচিত কিনা তা
খতিয়ে দেখছি

3
@ পোটাটো ওলেটলেট স্যান্ডউইচ আমার উদ্দেশ্যটি ছিল যাতে মোট দৈর্ঘ্য 255-এর মধ্যে ফিট হয়ে যায়, তাই এক্স-কোর্ডিনেট 127 এ দৈর্ঘ্য 127 লেবেল উপস্থিত থাকলে সর্বাধিক আউটপুট দৈর্ঘ্য ঘটবে tra শেষের আউটপুটটি কোনওভাবেই ছাঁটাই করা উচিত নয়, পেছনের শ্বেত স্থানটি অপসারণ ব্যতীত ।
Sp3000

উত্তর:


7

সিজোম, 24 23 19 বাইট

l~Sf.*'*f*:.{S^+1=}

এটি সমন্বয়-লেবেল জোড়াগুলির সিজেএম অ্যারে হিসাবে ইনপুটটি পড়ে।

ব্যবহার করে দেখুন এই বেহালার CJam অনুবাদক অথবা একবার এ সব পরীক্ষার বিষয় যাচাই করুন।

আমাকে 4 মার্টিন বাঁচাতে সাহায্য করার জন্য @ মার্টিনব্যাটনারকে ধন্যবাদ!

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

l~                   Read a line from STDIN and evaluate it.
  Sf                 For each pair, push the pair and " "; then:
    .*                 Perform vectorized repetition.
                         [X "label"] " " .* -> [(X spaces) "label"]
      '*f*           Join each resulting pair, using '*' as separator.
          :.{     }  Reduce by the following vectorized operator:
                       Push two characters (A and B).
             S^        Compute the symmetric difference of B and " ".
                       This pushes "B " for a non-space B and "" otherwise.
                +1=    Append and select the second character (with wrap).
                       This selects B for "AB " and A for "A".

2
আমি সবেমাত্র একটি পরীক্ষার কেস যুক্ত করেছি এবং ভেবেছিলাম যে আমি একটি মন্তব্য রেখে বলছি যে না, এটি এই জমাটি ভেঙে দেয় না - সিজেমের দোভাষীর আউটপুট কেবল শব্দের মোড়কে। ঠিক যদি কেউ বিভ্রান্ত হয়।
Sp3000

4

পাইথ, 20 বাইট

V.Tmrj" *"d9Qpe+d-Nd

অনলাইনে চেষ্টা করুন: বিক্ষোভ বা পরীক্ষার স্যুট

ব্যাখ্যা

V.Tmrj" *"d9Qpe+d-Nd
   m        Q         map each pair d of the input to:
     j" *"d             join d by the string " *"
    r      9            range-length encode 
                        (this gives x-coordinate spaces, a star and the label)
 .T                   transpose this table 
V                     for N in ^:
                 -Nd    remove spaces from N
               +d       add a space at the beginning
              e         take the last character
             p          and print it (without newline)

1
এটি আমার যা ছিল তার চেয়ে ভাল।
isaacg

4

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

c=>(a=Array(255).fill(" "))&&c.map(([u,v])=>a.splice(u,v.length+1,..."*"+v))&&a.join``.replace(/ +$/,"")

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

অনুগত কনসোল ইনপুট:

t = [[0,"Hello"],[8,"World"],[3,"Fizz"],[5,"Buzz"],[16,"PPCG"],[9,"X"]];
(c=>(a=Array(255).fill(" "))&&c.map(([u,v])=>a.splice(u,v.length+1,..."*"+v))&&a.join``.replace(/ +$/,""))(t);

শেষ বিবৃতি থেকে ফলাফল:

"*He*F*Buz*Xrld  *PPCG"

ব্যাখ্যা

এটি cতিনটি এক্সপ্রেশন থেকে অজানা ফাংশন তৈরি করে যা যৌক্তিকভাবে-একসাথে করা হয়েছে। প্রথম দুটি বিবৃতি সর্বদা সত্য এবং জেএস শর্ট সার্কিটের বিধিগুলি বলে যে প্রথম যখনই সত্যবাদী হয় তখন ডানদিকে পুরো মানটি ফিরিয়ে দিন (বুলিয়ানকে জোর না করে): সুতরাং এটি আনুষ্ঠানিকভাবে সমান

(function (c) {
    a = Array(255).fill(" ");                    // global variable `a` overwritten
    c.map(function (x) {                         // only side-effects are used here.
       var u = x[0], v = x[1];                   // ES6 destructuring
       a.splice(u, v.length + 1, ..."*" + v));   // main logic
    });
    return a.join("").replace(/ +$/, "");        // postprocessing and trim
})

প্রথম বিবৃতিটি উপরের বন্ধনীগুলিতে আবৃত করতে হবে কারণ অ্যাসাইনমেন্ট অপারেটরের =লজিক্যাল-এন্ড অপারেটরের চেয়ে কম অগ্রাধিকার রয়েছে &&

"রেস্ট প্যারামিটার" ..."*"+vসমাবেশটিও ES6 এর অংশ; এটি *স্ট্রিংয়ের একটি নেতৃস্থানীয়কে সম্মতি দেয় এবং তারপরে এটিকে তালিকার মতো পরামিতি হিসাবে ব্যাখ্যা করে এটি সরবরাহ করা হয় এমন একটি আর্গুমেন্টে বিভক্ত করে Array.prototype.splice, যা উপাদানগুলি সরানোর জন্য (m, n, ...rest)অবস্থানটিতে তার অ্যারেটি গ্রহণ করে এবং পরে সমস্ত যুক্তি সন্নিবেশ করে । ES6 এর পূর্বে এটি সম্পাদন করতে আপনি আরও জটিল ব্যবহার করবেন:mnrest

[].slice.apply(a, [u, v.length + 1].concat(("*" + v).split("")))

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


4

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

z=''
for a,b in input():z=(z+' '*b)[:b]+'*'+a+z[len(a)-~b:]
print z

ইনপুট লাগে [('Heathrow', 0), ('Edinburgh', 2), ('London', 4), ('Liverpool', 6), ('Oxford', 8)] এবং ফলাফল মুদ্রণ।

পাইথন স্ট্রিংগুলিকে সংশোধন করার অনুমতি দেয় না এবং একটি তালিকাতে এবং থেকে রূপান্তর করা ব্যয়বহুল। সুতরাং, এটি zএকটি নতুন শব্দ যুক্ত করতে স্ট্রিং পুনরায় তৈরি । আমরা bশব্দের আগে অক্ষরগুলি গ্রহণ করি , প্রয়োজনে ফাঁকা স্থান সহ প্যাডিং, তারপরে একটি নক্ষত্র সহ নতুন পাঠ্য, তারপরে অংশz নতুন শব্দের after নোট করুন যে পিছনে স্থানগুলি কখনই যুক্ত হয় না।

reduceসংস্করণ 3 টি অক্ষর আর (70) হল:

lambda I:reduce(lambda z,(a,b):(z+' '*b)[:b]+'*'+a+z[len(a)-~b:],I,"")

3

রুবি, 94 81 75 বাইট

Golfed:

s=" "*128;$<.map{|l|w,p=l.split;p=p.to_i;s[p..w.size+p]="*"+w};$><<s.rstrip

নিরবধি কোডটি এখানে:

s = " "*128
$<.map{|l|                 # for each line entered via stdin, ctrl+D to stop
  w,p = l.split            # had to move the chomp down here
  p = p.to_i               # there's no 'to_i!'...
  s[p..w.size+p] = "*"+w   # in the range of *foobar, replace the string
}
$><<s.rstrip               # output suggested by w0lf

ইনপুট ম্যাপ করার পরামর্শের জন্য @ w0lf ধন্যবাদ!

একটি পরিবর্তনশীল অপসারণ করার জন্য চিন্তার জন্য চার্লসকে ধন্যবাদ @ w0lf এবং @ না কিছুই N


দেখুন রুবি golfing টিপস । এই ক্ষেত্রে আপনি প্রয়োগ হতে পারে $ <মানচিত্র {| ঠ | ...} যখন ঠ তুলনায় খাটো = পায়;। ...; শেষ ডগা এবং সম্ভবত প্রতিস্থাপন puts সঙ্গে $><<(যা অতিরিক্ত স্থান প্রয়োজন হয় না)।
ক্রিশ্চিয়ান লুপাস্কু

এছাড়াও, আমি মনে করি .chompএটি সরানো যেতে পারে।
ক্রিশ্চিয়ান লুপাস্কু

এই ক্ষেত্রে, এখন আপনি এটি উল্লেখ করেছেন বলে আমি মনে করি এটি সম্ভবত খুব নিরাপদ অপসারণ করা সম্ভব .to_iহবে যা এটি ধরা পড়বে। ভালো চিন্তা. ধন্যবাদ @ w0lf!
আলু ওমেলেটস্যান্ডউইচ

আপনাকে স্বাগতম! এখানে একটি সংক্ষিপ্ত সংস্করণ রয়েছে যাতে আমি উপরের টিপগুলি এবং আরও কয়েকটি টি প্রয়োগ করেছি: আদর্শ one.com/BiOvV5 । যদি আপনার ভাল লাগে তবে আপনার উত্তরে এটি নির্দ্বিধায় পোস্ট করুন।
ক্রিশ্চিয়ান লুপাস্কু

3
@ পোটাটো ওমেলেটস্যান্ডভিচ আপনার রুবি আপগ্রেড করুন। 1.8.7 শেষ- lifed হয়! এছাড়াও, আপনার জন্য 1 চরের s[int, int]পরিবর্তে ফর্মটি ব্যবহার করতে সক্ষম হওয়া উচিত s[range]
চার্লস

3

জাভাস্ক্রিপ্ট 121 অক্ষর

অ-মানক বৈশিষ্ট্য ব্যবহার করে ফায়ারফক্সে কাজ করে।
x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.trimRight()

পুরানো সংস্করণ: x=Array(255).fill(" ");eval(prompt()).map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"});x=x.join``.replace(/ +$/,"")

x=Array(255).fill(" ");      //Creates an array with spaces
eval(prompt())               //Gets some input, has to look like [["Hello",4],["Hi",14],["Oi",0]]
.map(s=>{s[0].split``.map((n,i)=>x[s[1]+i+1]=n);x[s[1]]="*"}); //Main "logic"
x=x.join``.replace(/ +$/,"") //Gets rid of the trailing spaces

1
/ +/ হতাশের চেয়ে অনেক বেশি বোধগম্যতা \sআমি মিস করেছি! আপনি কি ব্যবহার করে x=' '.repeat(255);এবং এড়ানো বাইট সংরক্ষণ করতে পারেন .join?
ডম হেস্টিংস

1
@ ডোমহাস্টিংস: জেএস স্ট্রিংগুলি অপরিবর্তনীয় তাই আপনার .split('')এটিতে একটি পরিবর্তনীয় ডেটা কাঠামোতে পরিণত করতে হবে তবে সেই সময়ে Array(255).fill(' ')সংক্ষিপ্ত। আমার সংস্করণে আমার বেশিরভাগ সঞ্চয়গুলি আসে (ক) eval(prompt())এর বিনিময়ে মুছে ফেলার জন্য "আপনি কোনও ফাংশন বা প্রোগ্রাম দিতে পারেন" বিধিটি ব্যবহার করে c=> এবং (খ) Array.prototype.sliceযুক্তি অংশটি কিছুটা ছোট করার জন্য বিশ্রামের প্যারামিটার দিয়ে বিল্টিন পদ্ধতিটি ব্যবহার করে using ।
সিআর ড্রস্ট

1
@ ক্রিসড্রোস্ট আহ অবশ্যই ... আমি ভুলে গেছি এটি কেবল একজন অ্যাক্সেসর! লজ্জা [].map.call(s[0],কোনটিই বাঁচায় না ...
ডম হেস্টিংস

2

পাইথন, 85 বাইট

def g(p):
 z=[' ']*256
 for a,b in p:z[b:b+len(a)+1]='*'+a
 return''.join(z).rstrip()

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


1
আপনার এক বাইট সংরক্ষণ করার 'z'[2::5]পরিবর্তে (অ্যাডাস্ট্রোফের পরিবর্তে ব্যাকটিক্স) সক্ষম হওয়া উচিত এবং পরামিতিগুলিতে ''.join(z)যাওয়ার পরে z=[' ']*256অন্যটি সংরক্ষণ করা উচিত। এছাড়াও, আমার মনে হয় আপনি পরিবর্তন করতে পারেন returnথেকে print
কেড

আমি মনে করি আপনি p=input()কোনও ফাংশনের পরিবর্তে (পাইথন 2) দিয়ে একটি প্রোগ্রাম লিখে অক্ষর সংরক্ষণ করতে পারেন যা ইনডেন্টেশন এড়ায়। এছাড়াও, b+len(a)+1হতে পারেb-~len(a)
xnor

1
আসলে, একটি প্রোগ্রাম কেবল আপনাকে করতে দেয় for a,b in input():
xnor

2

পার্ল, 66 বাইট

63 বাইট স্ক্রিপ্ট + 3 বাইট জন্য -p

$}||=$"x128;/\s+/,substr$},$',1+length$`,"*$`"}{$_=$};s/\s+$/
/

খুব বেশি বিশেষ কিছু নয়, ভেরিয়েবলগুলি ব্যবহার করে $`এবং $'যা স্ট্রিং বিভাজনের পরিবর্তে যথাক্রমে 'ম্যাচের আগে' এবং 'ম্যাচের পরে'। আমি $}স্ট্রিং ভেরিয়েবলের জন্য মূলত এটি ব্যবহার করেছিলাম এটি আমার একটি বাইট সংরক্ষণ করছিল, তবে আর নেই!

উদাহরণ রান:

$perl -p overwritlabels.pl <<< 'Hello  0
World  8
Fizz   3
Buzz   5
PPCG   16
X      9'
*He*F*Buz*Xrld  *PPCG

পার্ল, 65 বাইট

62 বাইট স্ক্রিপ্ট + 3 বাইট জন্য -p

অন্য একটি সংস্করণ যা প্রতিটি লাইন প্রিন্ট করে (একটি কম বাইটের জন্য!)। (হ্যাঁ, আমি এটি তৈরি করেছি কারণ আমি প্রশ্নটি সঠিকভাবে পড়িনি ...)

$}||=$"x128;/\s+/;substr$},$',1+length$`,"*$`";$_=$};s/\s+$/
/

উদাহরণ রান:

$perl -p overwritlabels.pl <<< 'Hello  0
World  8
Fizz   3
Buzz   5
PPCG   16
X      9'
*Hello
*Hello  *World
*He*Fizz*World
*He*F*Buzzorld
*He*F*Buzzorld  *PPCG
*He*F*Buz*Xrld  *PPCG

2

পিএইচপি - 84 বাইট

<? foreach(array_chunk(array_slice($argv,1),2) as $p) echo "␣[".($p[1]+1)."G*$p[0]";
                                                            ^ ESC character (\x1b)

কার্সারটি অবস্থানের জন্য এএনএসআই এস্কেপ কোডগুলি ব্যবহার করে ( \x1b[XGযেমন এস্কেপ অক্ষর এবং এক্সটি 1-ভিত্তিক স্থানাঙ্ক হিসাবে চিহ্নিত করা হয়), *তারপরে সেই সারির তত্কালীন ইনপুট স্ট্রিং। ফর্মের কমান্ড লাইনে ইনপুট গ্রহণ করে:

php filename.php Heathrow 0 Edinburgh 2 London 4 Liverpool 6 Oxford 8
php filename.php abc 5 d 5 abc 10 ABCDEFGHIJKLMNOPQRSTUVWXYZ 127

মাল্টি-ওয়ার্ড এন্ট্রি গ্রহণ করে যদি তারা উদ্ধৃতিতে থাকে, কারণ তারা কমান্ড লাইন আর্গুমেন্ট।


1

সি ++ 11, 95 বাইট

কেন না?

একটি ফাংশন হিসাবে, অবস্থান এবং স্ট্রিং সহ একটি map<int, string>নাম হিসাবে ইনপুট পান v

string t(255,' ');for(auto&m:v){int i=m.first;t[i++]='*';for(auto&c:m.second)t[i++]=c;}cout<<t;

ব্যবহার

#include <iostream>
#include <map>
using namespace std;
int main(){
    map<int,string> v{{0,"Heathrow"},{2,"Edinburgh"},{4,"London"},{6,"Liverpool"},{8,"Oxford"}};
    string t(255,' ');for(auto&m:v){int i=m.first;t[i++]='*';for(auto&c:m.second)t[i++]=c;}cout<<t;
}

এটি এখানে চলমান দেখুন

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