Metni Ortala!


40

Metni Ortala!

Bu mücadelede çeşitli çizgileri merkez alacaksınız.

Örnekler

Foo
barbaz

 Foo
barbaz
Hello
World

Hello
World
Programming Puzzles
&
Code Golf

Programming Puzzles
         &
     Code Golf

Özellikler

Her giriş satırında her zaman en az bir boşluk olmayan karakter bulunur, yalnızca boşluk karakterinin boşluk ( ) ve yeni satır olduğunu varsayabilirsiniz . Her giriş satırında izleyen ve / veya baştaki boşluklar olmayacak (yeni satır hariç). Çıktıda sonlarındaki boşluk olduğu değil izin verdi.

Girişteki en uzun çizgi arasında merkez olmalısınız. Bu çizgi uzunsa bile, programınız / işleviniz sola merkezlenmeyi tercih etmelidir. Maksimum satır uzunluğu, diliniz ne olursa olsun, programınız en az 500 uzunluktaki satırlarda çalışmalıdır.


Liderler Sıralaması

Burada hem düzenli bir lider tablosu hem de kazananların dile göre genel bir bakış oluşturması için bir Stack Snippet'i var.

Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:

# Language Name, N bytes

Gönderinizin Nbüyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :

# Perl, 43 + 2 (-p flag) = 45 bytes

Dil adını, daha sonra büyük afiş snippet'inde görünecek bir bağlantı da yapabilirsiniz:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


Bu yani bayt cinsinden en kısa kod kazanır!


Asla birden fazla iç boşluk olmayacak mı?
kedi

asla olmayacağı @cat herhangi bir hat üzerinde başlangıç boşluğu veya sondaki boşluk (eğer varsa Yenisatır için beklemek)
Downgoat

evet, ama kelimeler arasındaki boşlukları kastediyorum
kedi,

1
@ cat oh, kelimeler arasında birden fazla boşluk olabilir. Örneğin foo(space)(space)(space)bar, mükemmel bir şekilde kabul edilebilir bir girdidir
Downgoat

Her zaman 1'den fazla satır olacağını varsayabilir miyiz?
GamrCorps

Yanıtlar:


15

Pyth, 19 17 bayt

Jakube sayesinde 2 bayt

V.ztr+1.[l.T.zNd6

gösteri

Bence bu, merkezleme işlevi ilk defa .[faydalı oldu. En uzun çizginin uzunluğu, truncating transpose ( .T) kullanılarak bulunur.

İzleyen boşluklar, öne boşluk bırakmayan bir karakter ekleyerek, boşlukları sıyırarak ve ardından eklenen karakteri kaldırarak kaldırılır.


1
Muhtemelen dizide maksimum uzunluğa ihtiyacımız var. Çok sık geliyor. +1
Maltysen,

Spesifikasyonlar "çıktıdaki boşluk beyazlığına izin verilmediğini" söylüyor. Bu, çıktıdaki her kısa satırda arkada boşluk var gibi görünüyor, bu yüzden sayıldığından emin değilim.
patates

@potato Teşekkürler - cevapladığımdan beri eklendi.
isaacg

31

vim, 43 36 35 bayt

VGrx:sor
G:let &tw=col("$")
uu:%ce

Göndermemek çok iyi. Sondaki yeni satırı not edin; önemli.

Bir karakteri kaydettiği için @Marth'a teşekkürler !

vim dostu format:

VGrx:sor<cr>G:let &tw=col("$")<cr>uu:%ce<cr>

Açıklama:

VGrx                   replace every character with an "x"
:sor<cr>               sort (since all chars are now same, sorts by line length)
G                      go to the very last line
:let &tw=col("$")<cr>  set &tw to column number of last char on this line
                         "let &tw" is equivalent to "set tw"
                         tw is short for textwidth, used in :center
uu                     undo the sort, and the replacing-with-x too
:%ce<cr>               center over entire file (%), using textwidth set earlier

1
Elbette, bunların hepsi Insert modunda yapılmalı, değil mi?
Alex A.

9
@AlexA. Bunların hiçbiri insert modunda yapılmaz. ಠ_ಠ
Doorknob

Eğer kullanırsanız sor!sıralama düzenini tersine çevirmek için kullanabileceğiniz col("$")kullanmak yerine (şimdi sırayla beri en uzun tersine çevrilir) ilk satırın uzunluğunu almak için G$, 1 byte büyük bir toplam tasarruf! düzenleme : ya da sıralama düzenini koruyabilir ve G:let &tw=col("$")onun yerine kullanabilirsiniz .
Marth

@Marth Teşekkürler! Ben ikincisini seçtim (özel bir sebep olmadan).
Doorknob

İçinden bakıyor :h :sortI sadece kullanabilirsiniz böylece, sıralamada eşleşen metni atlamak için bir normal ifade geçebilir öğrendim :sor /./uzunluğuna (4 bayt) sıralamak için kaldırmak sağlayan, VGrx(-4 bayt) ve ikinci geri alma ( -1 bayt). Komutları zincirlemek |yerine ayırıcıları da kullanabilirsiniz <cr>; bu, :önceki let(-1 bayt) atlamanıza izin verir ( sor!çözümü kullanmanız gerektiğine dikkat edin, Geski bir komut değildir). Bu yüzden :sor! /./|let &tw=col("$")|u|%ce (sonunda bir <CR>) 2 bayt kurtarmanız gerekir.
Marth

23

Mathematica, 96 bayt

StringRiffle[#~StringPadLeft~Floor[Max@(l=StringLength)@a/2+l@#/2]&/@(a=#~StringSplit~"
"),"
"]&

Bana nasıl çalıştığını sorma, doğru çıktıyı üretene kadar kustum.


27
+1 "Nasıl çalıştığını sorma, doğru çıktıyı verene kadar onunla uğraştım"
kedi

4
@ Kedi bütün golfümü böyle yapıyorum.
lirtosiast

11

Eğlence , rekabetçi olmayan

Bu zorluk, tembel sekanslar için “maksimum değer” (ve minimum değer) fonksiyonunun sıkıntısını vurguladı, bu yüzden ... Onları çekirdek kütüphaneye ekledim (sırasıyla ⊤ ve ⊥ olarak adlandırılırlar). Bu nedenle, bunu golflü bir cevap olarak sunma zahmetinde bulunmadım (geçerli olacak ⊤ fonksiyon bildirimini içermelidir), bu yüzden işte sadece ana program.

Daha (function(){$('pre,code').css({lineHeight:5/4,fontFamily:'DejaVu Sans Mono'});})()iyi render almak için tarayıcı konsolunuzda yürütün .

   ╓───╖         ╔════╗  ┌───╖  ╔═══╗
 ┌─╢ ‡ ╟─┐       ║ 10 ╟──┤ ǁ ╟──╢   ║
 │ ╙───╜ │       ╚════╝  ╘═╤═╝  ╚═══╝
 │ ┌───╖ │  ┌──────────────┴──────────────────┐
 └─┤ ‼ ╟─┘┌─┴─╖ ┌───╖ ┌───╖ ┌───╖ ┌───╖       │     │
   ╘═╤═╝  │ ɱ ╟─┤ ⊤ ╟─┤ + ╟─┤ ~ ╟─┤ ℓ ╟───┐ ┌─┴─╖ ┌─┴─╖ ╔════╗
     │    ╘═╤═╝ ╘═══╝ ╘═╤═╝ ╘═══╝ ╘═══╝   │ │ ɱ ╟─┤ ʝ ╟─╢ 10 ║
    ┌───╖ ╔═╧═╕ ╔═══╗ ┌─┴──╖ ┌───╖ ╔════╗ │ ╘═╤═╝ ╘═══╝ ╚════╝
  ┌─┤ ℓ ╟─╢   ├─╢ 1 ║ │ >> ╟─┤ … ╟─╢ 32 ║ │   │
  │ ╘═══╝ ╚═╤═╛ ╚═╤═╝ ╘═╤══╝ ╘═╤═╝ ╚════╝ │ ╔═╧═╕ ╔═══╗
  └─────────┘     └─────┘      │   ┌───╖  ├─╢   ├─╢ 0 ║
                               └───┤ ‡ ╟──┘ ╚═╤═╛ ╚═══╝
                                   ╘═╤═╝      │
                                     └────────┘

açıklama

Bunun, lambda ifadelerini kullanan bu sitede ilk Funciton cevabı olabileceğine inanıyorum.

  • Öncelikle, ǁgiriş dizgisini newlines'ta bölmek için kullanıyoruz (ASCII 10). Bu tembel bir dizi döndürür.
  • Her bir dizinin ɱuzunluğunu hesaplayan bir lambda vererek bu diziyi (harita) geçip, en uzun çizginin uzunluğunu elde etmek için son diziyi geçiyoruz .
  • Biz ayrıca, diğeri vasıtasıyla bu diziyi geçmesi ɱ, 2 (1 aslında shift-sağ) birçok boşluk oluşturur, daha önce hesaplanan maksimum satır uzunluğu çıkarır o, o böler her bir dize uzunluğunu hesaplar bir lambda vererek (ASCII 32), ve sonra dizgiyi bu boşluklara birleştirir. (Geometrik nedenlerle, parametreleri ters çevrilmiş olarak çağıran (string bitiştirme) bir işlev ilan ettim .)
  • Son ʝolarak, ayırıcı olarak newlines (ASCII 10) kullanarak tüm dizeleri bir araya getirmek için kullanıyoruz.

Bunun ne kadar harika olduğu için +1 ve "Bu 716 karakter, toplam 1,508 bayt"
kedi

9

Retina , 54 52 bayt

+m`^(.)+$(?<=(?=[^\t]*^..(?<-1>.)+(?(1)^))[^\t]*)
 $0 

\tS gerçek sekmeleri ile değiştirilir, ama ben kullandım \taksi GD boşluk sekmeleri dönüştürmek, çünkü burada. İkinci satırda öncü bir boşluk olduğuna dikkat edin.

Çevrimiçi deneyin.

açıklama

Temel fikir, en uzun çizgiden en az iki karakterden (veya teknik olarak, diğer herhangi bir çizgiden iki karakterden daha kısa) bir çizgiyle eşleşmek ve onu iki alanda çevrelemektir. Bu tür bir hat bulamadığımıza kadar bu tekrarlanır, bu, tüm satırların maksimum uzunluğun bir karakterinde olduğu anlamına gelir (bir karakter parite uyumsuzluklarını hesaba katar ve bu satırların sola kaymasını garanti eder) ortada).

Gerçek regex gelince:

^(.)+$

1Her karakter için bir çekimi gruba basarken sadece herhangi bir satırla eşleşir .

(?<=...[^\t]*)

Sağdan sola eşleşen ve imleci dizenin başlangıcına hareket ettiren bir gözbebekidir, böylece içerdeki gözetmen dizenin tamamını kontrol edebilir. Dübelli olmadığından, bakışın başka bir yerden uygulanabileceğini, ancak ek eşleşmeler yaratmadığını unutmayın. [^\t]Bunun her zaman dizedeki herhangi bir karakterle eşleşeceğini biliyoruz , çünkü girişin boşlukla ilgili olarak yalnızca boşluklar ve satır beslemeleri içerdiği garanti edilir.

(?=[^\t]*^..(?<-1>.)+(?(1)^))

Bu bakış açısı, şu anda eşleştiğimizden en az iki karakter uzunluğunda bir çizgi bulmaya çalışır. [^\t]*Herhangi bir çizgiyi eşleştirmek için dizginin içinde hareket eder. ^hattın başından başlamamızı sağlıyor. ..daha sonra, daha uzun satır için ihtiyaç duyduğumuz iki ek karakterle eşleşir. Şimdi (?<-1>.)+gruptan çıkarken o satırdaki bireysel karakterlerle eşleşiyor 1( .satır beslemeyle eşleşmeyeceğini unutmayın , bu nedenle bu bir satırla sınırlıdır). Sonunda, (?(1)^)tüm grubu boşaltmayı başardığımızı iddia ediyor 1. Satır gerekenden daha kısaysa, bu mümkün değildir, çünkü satırda 1. gruptan çıkacak kadar karakter yok, onu boşaltması için genellikle yeterli.


7

Jolf , 3 bayt

Rekabet etmeyen, son tarihler sorusunu güncelleyin.

Burada dene! .

pci
pc  center
  i  string input

¯ \ _ (ツ) _ / ¯ Faydalı bir işlev olacağını düşündüm.


1
Bu standart bir boşluktur ve açıkça bırakılmasa da, oluşturduğunuz bir dilde değil, bulduğunuz dile gömülmediği sürece kötü bir hal alır.
Elias,

3
@EliasBenevedes Yarışmadan önce bu özelliği ekledim. Relavent olana kadar kodumu sık sık güncellemiyorum.
Conor O'Brien,

7

JavaScript (ES6), 93 91 bayt

s=>(m=l=s.split`
`).map(x=>(v=x.length/2)<m?v:m=v).map((x,i)=>" ".repeat(m-x)+l[i]).join`
`

@ Edc65 sayesinde 2 bayt kaydedildi !

açıklama

s=>(
  m=                // m = max line length (divided by 2)
    l=s.split`
`)                  // l = array of lines
.map(x=>            // for each line
  (v=x.length/2)    // v = current line length / 2
    <m?v:m=v        // set m to the max line length and return v
)
.map((x,i)=>        // for each line length / 2
  " ".repeat(m-x)   // add spaces before
    +l[i]           // add line text
)
.join`
`                   // return lines as a newline-separated string

Ölçek


.repeattamsayı olmayan değerleri kabul eder ve keser, bu yüzden gerek yok|0
edc65

7

CJam, 26 23 19 bayt

qN/_z,f{1$,m2/S*\N}

CJam'ı ilk kez kullanıyorum! Martin Büttner sayesinde dört bayt kurtarıldı. Çevrimiçi deneyin.

açıklama

qN/    e# Read input and split each line
_z,    e# Transpose a copy and get its length to find the longest line
f{     e# For each line...
  1$,- e# Subtract its length from the longest length
  2/   e# Divide by two to get just the spaces to add to the left
  S*\  e# Add a string with that many spaces to the beginning
  N    e# Add a newline to go on to the next line
}

1
İşte bazı öneriler :)qN/_z,f{1$,m2/S*\N}
Martin Ender

6

LabVIEW, 3 veya 35 LabVIEW Primitives

Hiçbiri kalmayana kadar satırları bulur, sonra ne kadar boşluk ekleyeceğini hesaplar ve her şeyi bir araya getirir.

Alternatif olarak, dize göstergelerinde yerleşik merkez hizalamasını kullanabilirsiniz, hile yapmak gibi hissettirir.


6

Python 2, 83 81 bayt

def f(s):
 t=s.split('\n')
 for y in t:print(max(len(f)for f in t)-len(y))/2*' '+y  

2 karakter kaydettiğiniz için @xnor'a teşekkürler

Örnek giriş:

f("""Programming Puzzles
&
Code Golf""")

Örnek çıktı:

Programming Puzzles
         &
     Code Golf

Ve str.center () ve str.rstrip (teşekkürler @JF) kullanarak 84 bayt ile ikinci sırada biter.

def f(s):
 t=s.split('\n')
 for y in t:print y.center(max(len(f)for f in t)).rstrip()

Karakterleri leniki kez kullandığınız bir değişkene atamaktan kurtarmaz - 5 karakterde bile (örneğin range) kırılır . Ayrıca, mapliste için kullanabilirsiniz .
xnor

@Willem, arkadaki boşluktan kurtulmak için str.rstrip()çağırdıktan sonra kullanabilirsiniz center.
JF

7 bayt'ı tam bir programla kaydedebilir ve kullanabilirsiniz len(max(a,key=len)), buna bakın .
ბიმო

5

TeaScript , 24 bayt

£p.R((aßln)¯-ln)/2)+l,§)

Satırlar arasında dolaşır floor((max line length - line length) / 2), başlangıcına boşluk ekler .

Ungolfed

£   p.R((aß  ln)¯  -ln)/2)+l,§   )
xl(#p.R((am(#ln)X()-ln)/2)+l,`\n`)

xl(#    // Loops through newlines
    p.R(   // Repeats spaces
      (
       am(#ln)    // Map all line lengths
              X() // Get largest line length
       -ln)       // Subtract current line length
      /2)  // Divide by two
      +l,  // Add current line text
`\n`)

Çevrimiçi deneyin


5
Neden cevaplarım indirilmeye devam ediyor? Sanırım kullanıcı adı / avatarını değiştirme zamanı: p
Downgoat

2016-07-27 itibariyle düzeltildi. : P
user48538

5

PowerShell, 58 67 bayt

mazzy adlı kullanıcının yorumu sayesinde 58 bayta kadar:

param($a)$a|%{$_|% *ft(($a|% le*|sort)[-1]/2+$_.length/2)}


# It takes an array of strings as input
PS C:\Temp> .\center.ps1 'aaa','bb','c'
aaa
bb
 c


# Or here, read from a file
PS C:\Temp> .\center.ps1 (gc t.txt)
info0:info1:info2:info3
      info0:info1
          ttt
          tt
           t
  • $aHer bir dizgenin üzerinde bulunan bir dizi dizgiyi alır |%{...}.
  • string.padleft()her dize üzerindeki yöntemi, % -memberistenen son satır uzunluğunu parametre olarak alan kısayol ile çağırır .
    • ihtiyacımız var array_longest_line_length/2 + current_line_length/2
    • son kısım current_line_length/2->$_.length/2
    • diğer kısım, dizinin maksimum çizgi uzunluğunu döngü boyunca her seferinde yeniden hesaplamakta ve bunu, iç içe geçmiş bir döngü ile bir dizi uzunluk uzunluğunda yapmakta, daha sonra sonuncuyu almaktadır.


1
@mazzy bu daha iyi! Cevap olarak yayınlamadığınızdan beri, krediyle olan cevabımı yazdım.
TessellatingHeckler

3

Emacs Lisp, 203 bayt

(let((f 0)(l 0))(dolist(s(split-string(buffer-string)"\n"))(set'l(string-width s))(when(> l f)(set'f l)))(let((fill-column f))(goto-char(point-min))(while(<(point)(point-max))(center-line)(next-line)))))

Ungolfed:

(let ((f 0) (l 0))
  (dolist (s (split-string(buffer-string) "\n"))
    (set 'l (string-width s))
    (when (> l f)
      (set 'f l)))
    (let ((fill-column f))
      (goto-char (point-min))
      (while (< (point) (point-max))
        (center-line)
        (next-line)))))

merkezli:

               (let ((f 0) (l 0))
 (dolist (s (split-string(buffer-string) "\n"))
           (set 'l (string-width s))
                 (when (> l f)
                  (set 'f l)))
             (let ((fill-column f))
            (goto-char (point-min))
         (while (< (point) (point-max))
                 (center-line)
                (next-line)))))

3

HTML, 40 bayt

<xmp style=float:left;text-align:center>

Kod </xmp>pasajı, kod pasajı görüntüleyici etiketlerimin dengelenmesini istediğinden etiket içerir .


2

MATL , 22 31 bayt

`jtYz~]xXhc4X4H$ZuZ{Zv

Her satır sonunda bir satır (yani bir entertuş vuruşuyla) girilir . Boş bir satır (iki entertuş vuruşu) girişin sonunu işaretler.

Örnek

>> matl `jtYz~]xXhc4X4H$ZuZ{Zv
> foo
> barbaz
> 
 foo
barbaz

açıklama

`          % do...
  j        % input one string
  tYz~     % is it not empty?
]          % ...while
x          % delete last input (empty string)
Xh         % concatenate all inputs into a cell array
c          % convert to char (2D array). This fills with spaces to the right
4X4H$Zu    % center justify
Z{         % convert to cell array of strings
Zv         % remove trailing blanks of each string

2

Ruby, 76 68 61 bayt

->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}

Örnek çalışma:

2.1.5 :001 > puts ->t{(s=t.split$/).map{|l|l.center(s.map(&:size).max).rstrip}}["Programming Puzzles\n&\nCode Golf"]
Programming Puzzles
         &
     Code Golf

53 bayt:->t{(s=t.split$/).map{|l|l.center s.map(&:size).max}}
daniero

Ben de centerilk denemeyi denedim , ama anladığım kadarıyla, tek başına “Çıktıdaki boşluk boşluğuna izin verilmiyor” kuralını kıracağım. Rolün için teşekkürler &:size- Ben de denedim, ama kesinlikle sözdizimi etrafında bir şey çarptım.
Manat çalışması

2

Haskell, 111 81 77 bayt

l=length
f s|q<-lines s=unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q]

F işlevine giriş yapıldığında, çıktı yazdırılmaz.

Kullanımı: tercümana yükleyin ghci center.hsve ardından f'nin çıktısını verilen bir diziye yazdırmak istiyorsanızputStr$f"Programming Puzzles\n&\nCode Golf"

Düzenleme: 34 bayt için nimi sayesinde , harika bir iş! : D


İki şey daha: Prelude son sürümü bir infix sürümünü içerir map: <$>. replicate(...)' 'tarafından değiştirilebilir [1.. ...]>>" ". Sonuçta: unlines[([1..div(maximum(l<$>q)-l w)2]>>" ")++w|w<-q].
nimi

Ah evet, yaptığım önceki gönderimde yeni harita ekinden bahsettiğinizi hatırlıyorum. Yinelenen numara nasıl çalışır?
basile-henry

l1 >> l2(l1 uzunluğu) l2 kopyasını yapar ve birleştirir. Örn "abcd" >> [1,2]-> [1,2,1,2,1,2,1,2](tek bir listede 1,2 - <4 kopya). Bizim durumumuzda [1..n]>>" "neyin aynısı olan bir mekanın n kopyasıdır replicate.
nimi

Güzel, açıklama için teşekkürler! :)
basile-henry

2

R, 126 bayt

kod

for(z in 1){l=scan(,"");m=sapply(l,nchar);t=max(m[m==max(m)]);for(i in 1:length(m))cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")}

ungolfed

for(z in 1){                          # any way to get rid of this?
  l=scan(,"")
  m <- sapply(l,nchar)
  t <- max(m[m==max(m)])
  for(i in 1:length(m)){
    cat(rep(" ",(t-m[i])/2),l[i],"\n", sep="")
  }
}

Muhtemelen, bunun üzerinde çalışmanın hala daha iyi yolları vardır.


1

Gema, 160 bayt

\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}}
?=
\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o

Çoğunlukla merakım için, uygun dizi yapısı ve uygun döngü talimatı olmadan bir dilde neler yapılabileceğini görmek için yazılmıştır.

Örnek çalışma:

bash-4.3$ gema '\L<T>=@push{i;$0}@set{m;@cmpn{@length{$0};${m;};$m;$m;@length{$0}}};?=;\Z=@repeat{@sub{@line;1};@set{o;@right{@div{@add{$m;@length{$i}};2};$i}\n${o;}}@pop{i}}$o' <<< $'Programming Puzzles\n&\nCode Golf'
Programming Puzzles
         &
     Code Golf

1

Perl 6 , 61 bayt

$/=(my@l=lines)».chars.max;for @l {put ' 'x($/-.chars)/2~$_} # 61 bytes

kullanımı:

$ perl6 -e '$/=(my@l=lines)».chars.max;for @l {put " "x($/-.chars)/2~$_}' <<< \
'Programming Puzzles
&
Code Golf'
Programming Puzzles
         &
     Code Golf

Perl 5 Eğer gibi şeyler boşluk bırakmak için izin verecek for @l {tıraş 2 byte, ve değişime put " "karşı put" "başka bayt tıraş. Perl 6 için bu doğru mu? (Perl 6'yı tanımıyorum.) Ayrıca, burada görüntülendiği şekilde çıktınız istenen çıktınıza uymuyor; bu bir yazım hatası mı?
msh210

@ msh210 Perl 6, sözdizimi ile biraz daha kısıtlayıcıdır. Diğer alanlarda olsa telafi etmekten daha fazla.
Brad Gilbert

1

Japt, 28 25

¡V=VwXl}R;¡Sp½*(V-Xl¹+X}R

Çevrimiçi deneyin!

Nasıl çalışır

¡     V=VwXl}R;¡     Sp½*(V-Xl¹ +X}R
UmXYZ{V=VwXl}R;UmXYZ{Sp½*(V-Xl) +X}R

           // Implicit: U = input string, V = 0
UmXYZ{  }  // Map each item X in U through this function,
         R // splitting U at newlines beforehand:
  V=VwXl   //  Set V to max(X, Y.length).
           // V is now set to the length of the longest line.

UmXYZ{  }  // Map each item X in U with this function,
         R // again splitting U at newlines beforehand:
 ½*(V-Xl)  //  Take V minus X.length, and multiply by 1/2.
Sp         //  Repeat a space that many times.
        +X //  Concatenate X to the end.

0

PHP , 98 bayt

function($s){foreach($a=explode("
",$s)as$l)echo str_pad($l,max(array_map(strlen,$a)),' ',2),"
";}

Çevrimiçi deneyin!

Ungolfed:

function str_center( $s ) {
    $a = explode( PHP_EOL, $s );
    $m = max( array_map( 'strlen', $a ) );
    foreach( $a as $l ) {
        echo str_pad( $l, $m, ' ', STR_PAD_BOTH ), PHP_EOL;
    }
}

Çıktı:

Programming Puzzles
         &         
     Code Golf   


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.