চলচ্চিত্রের শিরোনাম স্টাইলড স্ট্রিং


19

চ্যালেঞ্জ

এই সিনেমার ট্রেলার শিরোনামগুলি (যাহা মার্টিয়ান, ইন্টারস্টেলার ইত্যাদি) দেখেছেন যেখানে আস্তে আস্তে ছড়িয়ে যাওয়ার চিঠির মাঝে তাদের বিশাল ফাঁক রয়েছে?

চ্যালেঞ্জ হ'ল অক্ষরের মধ্যে যথাযথ পরিমাণ ফাঁকা স্থান সরিয়ে একটি স্ট্রিং, ব্যবধান গুণক এবং দিকনির্দেশ দিয়ে এই প্রভাবটি পুনরায় তৈরি করা।

উদাহরণ

ইনপুট : 'ইন্টারস্টেল্লার', গ্যাপ গুণক: 1.0, দিক: দিকের বাড়ানো

Output: I N  T   E    R     S      T     E    L   L  A R

ব্যবধানটি হল: [1, 2, 3, ..., 3, 2, 1]; '' দিয়ে স্পেস প্রতিস্থাপন করা হচ্ছে। ব্যবধানটি আরও ভালভাবে প্রদর্শন করতে:

I.N..T...E....R.....S......T.....E....L...L..A.R

ইনপুট : 'ইন্টারস্টেল্লার', গ্যাপ গুণক: ০.৫, দিকনির্দেশ: অভ্যন্তরে বাড়ছে

Output: IN T E  R  S   T  E  L L AR

ব্যবধানটি 0.5 দ্বারা গুণিত হয়, সুতরাং আমরা পূর্ণসংখ্যা বিভাগ থেকে [0, 1, 1, 2, ... 2, 1, 1, 0] পাই; ব্যবহার '.':

IN.T.E..R..S...T..E..L.L.AR

ইনপুট : 'কোডিওএলএফ', গ্যাপ গুণক: ২.০, দিকনির্দেশ: বহির্মুখী বৃদ্ধি

Output: C        O      D    E  G    O      L        F

ব্যবধানটি 2 দিয়ে গুণিত হয়, বহির্মুখী বৃদ্ধি পাচ্ছে, সুতরাং আমরা [8,6,4,2,4,6,8] পাই; '।' এর সাথে প্রতিস্থাপন করা হচ্ছে:

C........O......D....E..G....O......L........F

ইনপুট : 'কোডিওএলএফ', গ্যাপ গুণক: 0.4, দিক: বহির্মুখী বাড়ানো

Output: C O DEGO L F

ব্যবধানটি 0.4 দ্বারা গুণিত হয়, বহির্মুখী বৃদ্ধি পাচ্ছে, সুতরাং আমরা [1,1,0,0,0,1,1] পাই; '।' এর সাথে প্রতিস্থাপন করা হচ্ছে:

C.O.DEGO.L.F

বিধি

  • 3 ইনপুট লাগে: স্ট্রিং, ফাঁক গুণক এবং দিক
  • যদি ইনপুট স্ট্রিং দৈর্ঘ্যে বিজোড় হয় (এমনকি ফাঁকের # টি ক্ষেত্রেও) যেমন 'হেলো' হয় তবে অভ্যন্তরের সর্বাধিক 2 ফাঁকের ব্যবধান একই হওয়া উচিত H E L L O
  • আপনি চান তবে দিক এবং গ্যাপের গুণককে পার্স করা যেতে পারে, যেমন আপনি '2 এর গুণক দিয়ে অভ্যন্তরীণ বৃদ্ধি', 1 হিসাবে '1 এর গুণক সহ বহির্মুখী বৃদ্ধি' ইত্যাদি ব্যবহার করতে পারেন etc.
  • কেবলমাত্র স্পেস ব্যবহার করা দরকার, তবে চরিত্র পূরণ করা কাস্টমাইজযোগ্য হলে এটি বোনাস।

রেফারেন্স অ্যানিমেশন

রেফারেন্স জিএফ

মজা গল্ফিং আছে!


1
হ্যালো, এবং পিপিসিজিতে আপনাকে স্বাগতম! আপনি এই একটি পরিবর্তন করে সহজ বিট করতে চাইতে পারেন Increasingকরার 1 => Inward, 0 => Outwardবিপরীতভাবে বা ভাইস।
NoOneIsHere

1
নিবন্ধন করুনহেরা ধন্যবাদ! দিক 3 এবং অনুপাতের পার্সিংটি নমনীয়, নিয়ম 3 অনুসারে আপনি দিকনির্দেশ নির্দিষ্ট করতে 0,1 ব্যবহার করতে পারেন বা উভয় প্যারামিটারগুলিকে এক হিসাবে মিশ্রিত করতে পারেন, যেমন 4 টি 4 অভ্যন্তরের জন্য +4, ০.০ বহির্মুখী ইত্যাদির জন্য, এটি কেবল সংজ্ঞায়িত করা দরকার সমাধান সহ।
জুলুকাবার্গ

3
এটি একটি খুব আকর্ষণীয় চ্যালেঞ্জ! সাইটে স্বাগতম। :)
ডিজেএমসিএমহেম

আমি দেখতে পাচ্ছি না যে কেন 2 এর ব্যবধান অনুপাতটিকে বাইরের দিকে বাড়ানো হিসাবে ব্যাখ্যা করা হয়, যখন 1 এবং 0.5 উভয়ই অভ্যন্তরের দিকে বৃদ্ধি পায়।
xnor

@ এক্স ওহ, এই বিভ্রান্তির জন্য দুঃখিত না, অনুপাতের সাথে দিকটির কোনও যোগসূত্র নেই, দিক এবং অনুপাত পৃথক পরামিতি, ২.০ অভ্যন্তরীণ মত দেখতে হবে:C..O....D......E........G......O....L..F
জুলুবার্গ

উত্তর:


3

জাভাস্ক্রিপ্ট (ES6), 86 82 81 80 বাইট

ইনপুটটি সিনট্যাক্স কারিঙে প্রত্যাশিত f(s)(r), এর সাথে:

  • s = স্ট্রিং
  • r = অনুপাত + দিক: অভ্যন্তরের জন্য নেতিবাচক ভাসা বা বাহ্যিকের জন্য ধনাত্মক ভাসা

let f =

s=>r=>s.replace(/./g,(c,i)=>c+' '.repeat(n+=i<l?-r:r),l=s.length/2,n=r>0&&l*r+r)

console.log(f("INTERSTELLAR")(-1));
console.log(f("INTERSTELLAR")(-0.5));
console.log(f("CODEGOLF")(2));
console.log(f("CODEGOLF")(0.4));



1

এপিএল, 40 বাইট

{⍵\⍨0~⍨∊1,⍨1,¨-⌊⍺×(1+⌈/-+)⍣⍺⍺(⌽⌊+)⍳⍴1↓⍵}

এটি স্ট্রিংটিকে তার ডান আর্গুমেন্ট হিসাবে, তার বাম আর্গুমেন্টের অনুপাত এবং তার বাম অপারেণ্ডের দিক (দিকের দিকে 0 এবং বাহ্যিক ক্ষেত্রে 1) হিসাবে গ্রহণ করে।

      1 (0 {⍵\⍨0~⍨∊1,⍨1,¨-⌊⍺×(1+⌈/-+)⍣⍺⍺(⌽⌊+)⍳⍴1↓⍵}) 'INTERSTELLAR'
I N  T   E    R     S      T     E    L   L  A R
      0.5 (0 {⍵\⍨0~⍨∊1,⍨1,¨-⌊⍺×(1+⌈/-+)⍣⍺⍺(⌽⌊+)⍳⍴1↓⍵}) 'INTERSTELLAR'
IN T E  R  S   T  E  L L AR
      2 (1 {⍵\⍨0~⍨∊1,⍨1,¨-⌊⍺×(1+⌈/-+)⍣⍺⍺(⌽⌊+)⍳⍴1↓⍵}) 'CODEGOLF'
C        O      D    E  G    O      L        F
      0.4 (1 {⍵\⍨0~⍨∊1,⍨1,¨-⌊⍺×(1+⌈/-+)⍣⍺⍺(⌽⌊+)⍳⍴1↓⍵}) 'CODEGOLF'
C O DEGO L F

ব্যাখ্যা:

  • ⍳⍴1↓⍵: 1 থেকে N-1 পর্যন্ত সংখ্যার একটি তালিকা পান যেখানে N স্ট্রিংয়ের দৈর্ঘ্য
  • (⌽⌊+): তালিকাটি উল্টান এবং প্রতিটি অবস্থানে উভয় তালিকার সর্বনিম্ন সংখ্যা পান (এটি যদি অভ্যন্তরের দিকে বাড়তে থাকে তবে ফাঁকগুলির মাপ দেয়)
  • (1+⌈/-+)⍣⍺⍺: তালিকার সর্বোচ্চ সংখ্যা থেকে তালিকার প্রতিটি সংখ্যা বিয়োগ করুন এবং 1 যুক্ত করুন this এবার করুন ⍺⍺। (যদি ⍺⍺=0, কিছু না ঘটে এবং যদি ⍺⍺=1বাইরে থেকে বাড়ানো যায় তবে এটি ফাঁকগুলির আকার দেবে))
  • -⌊⍺×: প্রতিটি ফাঁককে আরও নীচে দিকে গোল করুন, এবং এটিকে প্রত্যাখ্যান করুন।
  • ∊1,⍨1,¨: প্রতিটি ফাঁকের সামনে একটি 1 এবং তালিকার একেবারে শেষে 1 যুক্ত করুন।
  • 0~⍨: যে কোনও শূন্য সরান।
  • ⍵\⍨: প্রসারণের জন্য ফলাফলের তালিকাটি ব্যবহার করুন । বিস্তৃত ( \) নিম্নলিখিত পদ্ধতিতে কাজ করে: প্রতিটি ধনাত্মক সংখ্যার জন্য, বর্তমান চরিত্রটি প্রতিলিপি করা হয় যে বহুবার এবং প্রতিটি নেতিবাচক সংখ্যার জন্য, অনেকগুলি স্পেস সন্নিবেশ করা হয়, সেই সতর্কতার সাথে 0এবং ¯1একই কাজটি করে, যার জন্য সমস্ত কারণ রয়েছে শূন্যগুলি আগে সরিয়ে ফেলতে হয়েছিল।

1

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

nq:tPvX<i?tX>Qw-]*kQ1whYs''1Gb(

ইনপুটগুলি হ'ল: স্ট্রিং; 0বা 1অভ্যন্তরীণ বা বাহ্যিক বৃদ্ধির জন্য; গুণক।

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

ব্যাখ্যা

ইনপুট বিবেচনা করুন 'INTERSTELLAR', 1, 0.5একটি উদাহরণ হিসাবে।

nq:    % Input string implicitly. Push [1 2 ... N-1] where N is the string length
       %   STACK: [1 2 3 4 5 6 7 8 9 10 11]
tP     % Duplicate, reverse
       %   STACK: [1 2 3 4 5 6 7 8 9 10 11], [11 10 9 8 7 6 5 4 3 2 1]
vX<    % Vertically concatenate. Minimum of each column
       %   STACK: [1 2 3 4 5 6 5 4 3 2 1]
i      % Input direction flag
       %   STACK: [1 2 3 4 5 6 5 4 3 2 1], 1
?      % If input flag was 1 (meaning outward increasing)
  tX>  %   Duplicate. Maximum
       %     STACK: [1 2 3 4 5 6 5 4 3 2 1], 6
  Q    %   Add 1
       %     STACK: [1 2 3 4 5 6 5 4 3 2 1], 7
  w-   %   Swap. Subtract
       %     STACK: [6 5 4 3 2 1 2 3 4 5 6]
]      % End
*k     % Input multiplier implicitly. Multiply. Round down
       %   STACK: [3 2 2 1 1 0 1 1 2 2 3]
Q      % Add 1
       %   STACK: [4 3 3 2 2 1 2 2 3 3 4]
1wh    % Prepend a 1
       %   STACK: [1 4 3 3 2 2 1 2 2 3 3 4]
Ys     % Cumulative sum
       %   STACK: [1  5  8 11 13 15 16 18 20 23 26 30]
''     % Push empty string
       %   STACK: [1  5  8 11 13 15 16 18 20 23 26 30], ''
1G     % Push input string again
       %   STACK: [1  5  8 11 13 15 16 18 20 23 26 30], '', 'INTERSTELLAR'
b      % Bubble up
       %   STACK: '', 'INTERSTELLAR', [1  5  8 11 13 15 16 18 20 23 26 30]
(      % Assign the characters from the top string into the empty string at the 
       % given positions. Intermediate positions are filled with character 0, 
       % which is displayed as a space
       %   STACK: 'I   N  T  E R ST E L  L  A   R'
       % Dispaly implicitly

1

রেকেট 348 বাইট

(define(f s)(let*((c #\space)(sp(λ(l)(define ol'())(for((i(length l)))(for((j i))
(set! ol(cons c ol)))(set! ol(cons(list-ref l i)ol)))(for((n(floor(/(length l)2))))
(set! ol(cons c ol)))ol))(m(floor(/(string-length s)2)))(s1(sp(string->list(substring s 0 m)
)))(s2(sp(reverse(string->list(substring s m))))))(list->string(append(reverse s1)s2))))

Ungolfed:

(define(f s)
  (let* ((c #\space)
         (sp (λ (l)           ; subfn to add increasing spaces to list of characters
               (define ol '())
               (for ((i (length l)))
                 (for ((j i))
                   (set! ol (cons c ol)))
                 (set! ol (cons (list-ref l i)ol)))
               (for ((n (floor(/ (length l)2)))) 
                 (set! ol (cons c ol)))
               ol))
         (m (floor (/ (string-length s) 2)))                 ; find midpoint
         (s1 (sp (string->list (substring s 0 m))))          ; add spaces to first part
         (s2 (sp (reverse (string->list (substring s m)))))) ; add spaces to second part
    (list->string (append (reverse s1) s2))                  ; re-combine 2 parts
    ))

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

(f "INTERSTELLAR")

আউটপুট:

"I N  T   E    R     S      T     E    L   L  A R"

1

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

@ টিটাস দ্বারা 12 টি বাইট সংরক্ষণ করা হয়েছে আপনাকে ধন্যবাদ

স্ট্রিং = $ আরজিভি [1], অনুপাত = $ আরজিভি [2], দিক = $ আরজিভি [3] অভ্যন্তরীণ = 0, বাহ্যিক = 1

for($i=0;$i+1<2*$l=strlen($t=($x=$argv)[1]);)echo$i%2?str_pad("",$x[2]*abs($x[3]*(0^$l/2+1)-($i++>=$l?$l-$i/2:$i/2))):$t[$i++/2];

str_pad4 বাইট সংরক্ষণ করা উচিত ব্যবহার করে দেখুন ++$i>$l?$l-$i/2:$i/2এবং $t[$i++]/2লুপ পোস্ট অবস্থায় বৃদ্ধি পরিবর্তে; যে 9 বাঁচাতে হবে কেন 0^?
তিতাস

@ টাইটাস 0^3.12ফলাফল 3যার ফলশ্রুতিতে প্রয়োজনীয়
জার্গ হ্যালসারম্যান

$i=0অপ্রয়োজনীয় ++$i>এখনও একটি বাইট ওভার সাশ্রয় $i++>=। এবং আপনি এই বর্ধিত অবস্থাটিকে পূর্ব শর্তে নিয়ে গিয়ে আরও একটি বাইট সংরক্ষণ করতে পারেন: ++$i<2*$l=...পরিবর্তে $i+1<2*$l=..., এর $iপরিবর্তে ++$iএবং $t[$i/2-.5]পরিবর্তে বাইরের অংশের সত্য এবং মিথ্যা শাখাগুলি অদলবদল করুন $t[$i++/2]
টাইটাস

অভ্যন্তরীণ হিসাবে 1এবং বাহ্যিক হিসাবে সংজ্ঞা দেওয়া 2, আপনাকে আরও 3 বাইট বাঁচাতে সক্ষম করা উচিত: ($l>>1)পরিবর্তে (0^$l/2+1); তবে আমি এর কোনটিই পরীক্ষিত করতে পারি না।
টাইটাস

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