স্ট্রিংগুলি স্থিতিস্থাপক করতে একটি প্রোগ্রাম লিখুন


33

শিরোনামে সেখানে ভাল ক্রিয়াপদ।

একটি ইনপুট স্ট্রিং দেওয়া একটি প্রোগ্রাম লিখুন, এই স্ট্রিং "স্থিতিস্থাপক" এবং ফলাফল আউটপুট। একটি স্ট্রিং স্থিতিস্থাপকতা নিম্নলিখিত হিসাবে সম্পন্ন করা হয়:

প্রথম চরিত্রটি একবার দেখানো হয়েছে। দ্বিতীয় চরিত্রটি দু'বার দেখানো হয়েছে। তৃতীয় চরিত্রটি তিনবার দেখানো হয়েছে, ইত্যাদি।

আপনি দেখতে পাচ্ছেন যে কোনও নির্দিষ্ট চরিত্রের নকলের পরিমাণটি স্ট্রিংয়ের পূর্ববর্তী ঘটনার বিপরীতে চরিত্রের সূচকের সাথে সম্পর্কিত।

আপনি কেবল মুদ্রনযোগ্য এএসসিআইআই অক্ষর পাওয়ার আশা করতে পারেন। নিম্নলিখিত লিঙ্কটির ভিত্তিতে এই অক্ষরগুলির দশমিক মান রয়েছে 32-126।

উদাহরণ:

Why: Whhyyy

SKype: SKKyyyppppeeeee

LobbY: LoobbbbbbbYYYYY (প্রথম খ 3 বার এবং দ্বিতীয় খ মোট 4 বি এর তৈরি করে 4 বার প্রদর্শিত হয়েছে সেহেতু কীভাবে 7 খ রয়েছে তা দ্রষ্টব্য)

A and B: A aaannnnddddd BBBBBBB

সবচেয়ে কম বাইট জিতল :)


2
এটি "স্পেস ক্যারেক্টার ব্যতীত হোয়াইটস্পেসের জন্য কোনও সমর্থন প্রয়োজন নেই" এর সাথে একমত নয় বলে মনে হয়। আউটপুট কি তখন ইনপুটটির মতো হওয়া উচিত? (দুটি একটি অক্ষরের শব্দের?) এছাড়াও নোট করুন আমাদের স্যান্ডবক্স নামে একটি সুন্দর জায়গা আছে যেখানে আপনি লোকদের পোস্ট দেওয়ার আগে আপনাকে প্রতিক্রিয়া জানাতে চ্যালেঞ্জ রাখতে পারেন।
FryAmTheEggman

FryAmTheEggman আপনার অনুমান বৈধ। @ টিমিডি আমি বুঝতে পারি যে আমি কোথায় অস্পষ্ট ছিলাম, আপনি স্ট্রিংগুলি দিয়ে আমার একাধিক স্পেসকে পৃথক করে দিতে পারেন, যেমন ফ্রিআআম দ্য এজম্যান পোস্ট করেছেন উদাহরণে দেখা যায়।
মারিও ইসহাক

আমি ধরে নিচ্ছি যে সংক্ষিপ্ততম কোডটি জিতেছে? ;)
আদনান

@ আদনান ইয়েপ, যদিও আমি নিশ্চিত নই যে আমার গ্রহণযোগ্য হিসাবে শর্টেড প্রোগ্রামটির সাথে উত্তরটি চিহ্নিত করা উচিত কিনা, কারণ কিছু ভাষা অন্যদের মতো গল্ফিংয়ের উদ্দেশ্যে তৈরি করা হয়।
মারিও ইসহাক

2
সম্পর্কিত: 1 , 2
Sp3000

উত্তর:


34

জেলি , 3 বাইট

কোড:

ĖP€

Explanation:

Ė     # Enumerate.
 P€   # Product of each.
      # Implicit joining of everything.

Uses the Jelly encoding. Try it online!.


16
Nice abuse of the fact that Python's * does string multiplication. That's not really intended, but it works.
Dennis

1
@Dennis: which *? There's no such thing in the whole answer.
Thomas Weller

10
@Thomas: Jelly is written in Python, and the Jelly P command calculates product behind the scenes using the Python * operator. This post is abusing the leaky abstraction of the underlying code actually being in Python, so doing a P (product) command on a string works as expected.
mellamokb

16

J, 4 bytes

#~#\

Usage

   f =: #~#\
   f 'Why'
Whhyyy
   f 'SKype'
SKKyyyppppeeeee
   f 'LobbY'
LoobbbbbbbYYYYY
   f 'A and B'
A  aaannnnddddd      BBBBBBB

Explanation

#~#\  Input: s
  #\  Computes the length of each prefix of s
      This forms the range [1, 2, ..., len(s)]
#~    For each value in the range, copy the character at the
      corresponding index that many times
      Return the created string

12

Brainfuck, 15 bytes

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

Pretty straightforward implementation, shifting the memory space by 1 for each input char. Requires an interpreter that gives 0 on EOF, and 32-bit/arbitrary precision cells for inputs longer than 255 chars.

Try it online! (Note: TIO uses 8-bit cells)


1
Also, I think that this doesn't work for strings longer than 255 characters.
Ismael Miguel

@IsmaelMiguel That would depend on whether the interpreter in question has arbitrary precision integers or not (but indeed, for most implementations, it would cap at 255)
Sp3000

The convention is to use 8-bits. Which is 1 character. But some may indeed implement with 32-bit numbers. Since you specify you need that EOF be 0 (which is a compiler/interpreter-specific behaviour), it should be noted that for strings longer than 255 characters, you need a compiler/interpreter with 32-bit cells. I just though that it should be added to the answer, since it is also a compiler/interpreter-specific behaviour.
Ismael Miguel

1
@IsmaelMiguel Sure, noted.
Sp3000

8

Java, 158 121 bytes

Saved a whopping 37 bytes thanks to Kevin Cruijssen!

interface a{static void main(String[]A){int b=0,B;for(char c:A[0].toCharArray())for(B=b+++2;--B>0;)System.out.print(c);}}

As a bonus, this program can handle all Unicode characters in the existence, including the control characters located at the very end of Basic Multilingual Plane.


3
Huh, this is very short for a Java code.
Ave

1
You can shorten it by 1 byte by replacing for(int C=c+1;C>0;C--) with for(int C=c+2;--C>0;)
Kevin Cruijssen

2
Or even shorter (121 bytes): interface a{static void main(String[]A){int x=0,i;for(char c:A[0].toCharArray())for(i=x+++2;--i>0;)System.out.print(c);}}
Kevin Cruijssen

Well, just make it a lambda or a method
Leaky Nun

2
Wow, using an interface for the default public methods. That's smart.
Justin

7

Perl, 16 bytes

s/./$&x$+[0]/ge

+1 byte for the -p flag.

s/./        /    find every character
             g   globally
              e  and replace with the eval'd result of
    $&           the matched string
      x          repeated
       $+[0]     by the index of the character after the match

7

Haskell, 29 bytes

concat.zipWith replicate[1..]

Usage example: concat.zipWith replicate[1..] $ "SKype" -> "SKKyyyppppeeeee".

replicate n c makes n copies of c and concat makes a single list out of all the sublists.


id=<< is a nice touch. :)
sudee

I just wanted to try it, but assigning f = id=<<zipWith replicate[1..] (in a file) did result in an ugly error, can you tell what I'm doing wrong?
flawr

Shouldn't it be possible to assign this (unnamed, right?) function to a name, such that we can use it as a function? I mean if it is a function, then (id=<<zipWith replicate[1..] ) "SKype" should still work? Otherwise I would consider it as a snippet. The full program you provided does have "SKype" hardcoded.
flawr

I'd say if you cannot use it like any other function, it is not a function. E.g. :t does not regard id=<<zipWith replicate[1..] as a function (it just throws an error) however (id=<<).zipWith replicate[1..] is considered as a function. I'd say the first one is just a snipped, that just works if you hardcode the input, but the second one that you just postet is a function (and :t agrees), would you agree on that?
flawr

Ok, great! If you disagree with my "definition", I think we should start a meta post for clearing this up. In the mean time I'm trying to find some other haskellians for their opinion on this, as this is just my view.
flawr

7

CJam, 9 8 7 bytes

Thanks to jimmy23013 for saving 1 byte.

Sl+eee~

Test it here.

Explanation

Using the LobbY example:

                                      Stack:
S    e# Push space.                   [" "]
l    e# Read input.                   [" " "LobbY"]
+    e# Append.                       [" LobbY"]
ee   e# Enumerate.                    [[[0 ' ] [1 'L] [2 'o] [3 'b] [4 'b] [5 'Y]]]
e~   e# Run-length decode.            ["LoobbbbbbbYYYYY"]


5

Javascript ES6, 39 bytes

x=>x.replace(/./g,(y,i)=>y+y.repeat(i))

Same length, but more fun:

x=>x.replace(i=/./g,y=>y.repeat(i=-~i))

Snippet demo:

f= x=>x.replace(/./g,(y,i)=>y+y.repeat(i))
run.onclick=_=>output.textContent=f(input.value)
<input id="input" value="SKype">
<button id="run">Go</button>
<pre id="output"></pre>


Small error, the program does not support spaces, which is required as a submission (check the OP).
Mario Ishac

@MarDev I changed the snippet to use <pre> instead of <div>, that should help.
Neil

1
@Neil Ah, so the result was correctly computed, but the output was rendered incorrectly by the HTML. Forgot that <div> does that.
Mario Ishac

..."and output the result"
spender

1
@spender returning is a valid form of output for functions
cat

4

APL (8)

{⍵/⍨⍳⍴⍵}

I.e.:

      {⍵/⍨⍳⍴⍵} ¨  'Why' 'SKype' 'LobbY'
┌──────┬───────────────┬───────────────┐
│Whhyyy│SKKyyyppppeeeee│LoobbbbbbbYYYYY│
└──────┴───────────────┴───────────────┘

Explanation:

  • ⍴⍵: length of given vector
  • : numbers 1..N
  • ⍵/⍨: replicate each element in N times.

4

MATLAB, 45 bytes

g=@(m)sort(m(m>0));@(s)s(g(hankel(1:nnz(s))))

Explanation: The key is hankel, which produces a Hankel matrix of a given vector. From this matrix, we can extract a vector of indices, which defines which character of the string is at which position in the output. E.g. hankel(1:4) produces following matrix:

 1  2  3  4
 2  3  4  0
 3  4  0  0
 4  0  0  0

From this matrix we can extrac the vector 1,2,2,3,3,3,4,4,4,4,4. This vector allows us to output the first character of the string once, the second one twice e.t.c.


4

NARS2000, 6 chars = 12 bytes

⍳∘⍴/⊙⊢

⍳∘⍴ enumeration of the argument... (indices of its length)
/⊙ replicates the elements of...
the unmodified argument


link to interpreter?
cat

@cat See edit (in header).
Adám

@cat What was your edit?
Adám

Identical to yours down to the character, because I googled it myself and my edit took 10 minutes to submit
cat

Also, in which codepage is this 6 bytes?
cat

3

PowerShell v2+, 36 bytes

-join([char[]]$args[0]|%{"$_"*++$i})

Takes input $args[0], explicitly casts it as a char array, sends that into a loop |%{...}. Each iteration we take the current letter/character "$_" and use the * overloaded operator to concatenate the string pre-incremented $i times. The result of each loop iteration is encapsulated in parens to form an array and then -joined together to form a string. That string is left on the pipeline and output is implicit.

Examples

PS C:\Tools\Scripts\golfing> .\elasticize-a-word.ps1 Why
Whhyyy

PS C:\Tools\Scripts\golfing> .\elasticize-a-word.ps1 SKype
SKKyyyppppeeeee

PS C:\Tools\Scripts\golfing> .\elasticize-a-word.ps1 LobbY
LoobbbbbbbYYYYY

PS C:\Tools\Scripts\golfing> .\elasticize-a-word.ps1 'a b'
a  bbb

3

Brachylog, 13 bytes

:ImC,0:Ie,Cw\

This prints the result to STDOUT.

Explanation

This is a good example of exploiting backtracking to loop.

:ImC            C is the Ith character of the Input
    ,
     0:Ie       Unify an implicit variable with an integer between 0 and I
         ,
          Cw    Write C to STDOUT
            \   False, trigger backtracking. It will go back to 0:Ie and unify the implicit
                variable with another integer, until all integers were used. After that, it
                will backtrack to :ImC and unify I and C with the next character.

3

MATLAB, 23 bytes

@(x)repelem(x,1:nnz(x))

Creates an anonymous function ans that can be called using ans('stringtoelacticize')


What version are you using? Cannot find repelem in my (relatively old) version =(
flawr

1
@flawr repelem was introduced in R2015a
Luis Mendo


3

Perl 6,  22 20  19 bytes

{S:g/(.)/{$0 x$/.to}/}
{S:g[(.)]=$0 x$/.to}
{[~] .comb Zx 1..*}

Explanation:

{          # implicit parameter $_
  [~]      # string concatenate the following list
    .comb  # the NFG characters from $_
    Z[x]   # zip combined using the string repetition operator
    1 .. * # 1 to infinity
}

3

VBA, 75 bytes

Function e(s):For a=1 To Len(s):e=e &String(a,Mid(s,a,1)):Next:End Function

Call as e.g. a user function in a spreadsheet.

=e(A1)

┌─────────┬───────────────┐
│   SKype │SKKyyyppppeeeee│
└─────────┴───────────────┘

It truncates if you feed it its own output a few times :-).


2
Welcome to the site! =)
DJMcMayhem

3

PHP, 68 bytes

<?php foreach(str_split($argv[1])as$i=>$a)echo str_repeat($a,$i+1);

Hi, and welcome to PPCG! Nice first post!
Rɪᴋᴇʀ

You can get it down to 47 bytes: for(;$a=$argv[1][$i++];)echo str_repeat($a,$i);.
insertusernamehere

3

Javascript ES6, 42 41 bytes

s=>[,...s].map((e,i)=>e.repeat(i)).join``

Example runs:

f=s=>[,...s].map((e,i)=>e.repeat(i)).join``

f("Why")   => "Whhyyy"
f("SKype") => "SKKyyyppppeeeee"
f("LobbY") => "LoobbbbbbbYYYYY"

Same length: s=>[...s].reduce((a,b,i)=>a+b.repeat(i+1))
Bassdrop Cumberwubwubwub

2
-1 byte: s=>[,...s].map((e,i)=>e.repeat(i)).join``
nderscore

@nderscore Aha, thats clever, thanks!
Dendrobium

3

Retina, 22 bytes

Byte count assumes ISO 8859-1 encoding.

.
$&$.`$*·
+`(.)·
$1$1

Try it online!

Basically, we insert the right amount of · as placeholders between the characters (since these extended ASCII characters can't appear in the input), then fill them up with the adjacent character in the second stage.


3

R, 83 50 bytes

-23 Thanks to Giuseppe, though he used essentially an entire new method altogether

function(s)intToUtf8(rep(utf8ToInt(s),1:nchar(s)))

My original post:

function(s){r="";for(i in 1:nchar(s))r=paste0(r,strrep(el(strsplit(s,""))[i],i));r}

Try it online!

I feel like there's definitely a better way to do this, but with my new knowledge of a few functions in R, this is my approach.


1
Not a golfing tip, but your code link output was messed up. Here
Robert S.

Ah, I see. I'm new to TIO, so I didn't quite understand the header/footer portions. Thank You!
Sumner18


1
Very nice! However, using rep and the argument collapse="" to paste is shorter, and utf8ToInt is shorter still! TIO
Giuseppe

2

Actually, 7 bytes

' +ñ♂πΣ

Try it online!

Explanation:

' +ñ♂πΣ
' +      prepend a space
   ñ     enumerate ("abc" -> [[0, 'a'], [1, 'b'], [2, 'c']])
    ♂π   map: for each character, repeat it n times
      Σ  concatenate


2

Python 3, 48 47 bytes

Thanks to mego for saving a byte with the -~i trick.

lambda s:''.join(c*-~i for i,c in enumerate(s))

This is mostly self-explanatory. One thing for those not versed in Python: The * operator is overloaded to act like Perl's x operator, repeating its string argument the number of times specified by its numeric argument. E.g. 'foo' * 3 == 'foofoofoo'


c*-~i is shorter than c*(i+1).
Mego

2

C#, 81 Bytes

void f(string s){for(int i=0;i<s.Length;i++)Console.Write(new String(s[i],i+1));}

you can save 1 byte by changing to a foreach loop, e.g. foreach(var a in s)Console.Write(new C(a,1*i++));
Abbath

but if its a foreach we don't have the i variable so you'd need to declare it.
ScifiDeath

It seems you're missing a using System or a System. in front of the Console.
Martin Ender

@ScifiDeath That's true - but the end result is still one byte shorter. Sorry for omitting it and causing confusion int i=1;
Abbath

Also one byte shorter using Linq: void f(string s){s.Select((c,i)=>{Console.Write(new string(c,i+1));return c;});}. The need for a (unused) return value is ugly though. Edit: just found similar snippets in other answers further back.
linac

2

MATL, 5 bytes

tn:Y"

Try it Online

Explanation

    % Implictly grab input as a string
tn  % Duplicate and compute the length (N)
:   % Create an array from [1...N]
Y"  % Perform run-length decoding to elacticize the string
    % Implicitly display the result


2

Julia, 34 bytes

!s=s>""?!s[1:(e=end)-1]*s[e:e]^e:s

Try it online!


Your solution was good. But I managed to beat it.
Glen O

I saw. I had c%n="$c"^n;~s=join([s[r=1:end]...].%r), but that's actually longer. split was the missing piece of the puzzle.
Dennis

2

TSQL, 97 bytes

Golfed:

DECLARE @x varchar(max)='Lobby'
DECLARE @ int=LEN(@x)WHILE @>0SELECT
@x=STUFF(@x,@,1,REPLICATE(SUBSTRING(@x,@,1),@)),@-=1PRINT @x

Ungolfed:

DECLARE @x varchar(max)='Lobby'

DECLARE @ int=LEN(@x)
WHILE @>0
  SELECT 
    @x=STUFF(@x,@,1,REPLICATE(SUBSTRING(@x,@,1),@)),
    @-=1

PRINT @x

Try it online

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