Ben bir uzay gemisi maw yaptım!


39

Giriş:

Esinlenilen bu yorumun @MagicOctopusUrn üzerinde @Emigna 'ın 05AB1E cevap sıramı ' Bu sadece bir hata oldu meydan okuma' :

8F9ÝÀNð×ý}».∊Ben bir uzay gemisi maw yaptım! Ve 12 baytlık bir düzenleme önerdiğim için çok heyecanlıydım. - Magic Octopus Urn 17:17, 20:10

Bu, bununla sonuçlanan bir 05AB1E (eski) programıdır:

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

Çevrimiçi deneyin.

Meydan okuma:

Giriş: Boş olmayan bir dize

Çıktı: Dışarıdan içeriye doğru, her karakterin arasına, her bir satır arasına, yukarıdaki çıktıda olduğu gibi, eşittir length - 1. Dolayısıyla bir girdi 1234567890için çıktı bunun yerine olacaktır:

1234567890
1 2 3 4 5 6 7 8 9 0
1  2  3  4  5  6  7  8  9  0
1   2   3   4   5   6   7   8   9   0
1    2    3    4    5    6    7    8    9    0
1     2     3     4     5     6     7     8     9     0
1      2      3      4      5      6      7      8      9      0
1       2       3       4       5       6       7       8       9       0
1        2        3        4        5        6        7        8        9        0
1         2         3         4         5         6         7         8         9         0
1        2        3        4        5        6        7        8        9        0 
1       2       3       4       5       6       7       8       9       0
1      2      3      4      5      6      7      8      9      0
1     2     3     4     5     6     7     8     9     0
1    2    3    4    5    6    7    8    9    0
1   2   3   4   5   6   7   8   9   0
1  2  3  4  5  6  7  8  9  0
1 2 3 4 5 6 7 8 9 0
1234567890

Neden? Uzunluğu 1234567890IS 10. Böylece 10 satır çıktısı ile başlıyoruz: boşluksuz ilk satır; ikincisi bir boşluk sınırlayıcıyla; üçüncü iki; Ve sonra ( length - 1boşlukları olan orta çizgiye sahip olmadan ), aşağı inerken ilk girişe geri döneriz.

Meydan okuma kuralları:

  • Girişin boş olmadığı garantilidir (uzunluk >= 1). (Tek char girişleri için sadece bu karakteri çıkarırız.)
  • Çıktının kendisi (ekranın herhangi bir yerinde) doğru olduğu sürece, her miktar izleyen / baştaki boşluklara / yeni satırlara izin verilir. (Çıkış hatları arasındaki boş satırlara da izin verilmez.)
  • Girdi yalnızca beyaz alanlar hariç yazdırılabilir ASCII karakterleri içerecektir (kod noktası aralığı [33, 126])
  • G / Ç esnektir. Giriş, STDIN, argüman veya işlev parametresi olarak alınabilir. Dize yerine bir liste / dizi / karakter akışı olabilir. Çıktı, dizeler yerine bir liste / dizi / karakter akışı da olabilir; STDOUT'a basılabilir; newline ayrılmış dize olarak döndürüldü; vb.

Genel kurallar:

  • Bu , bayt cinsinden en kısa cevap kazanır.
    Code-golf dillerinin, codegolfing olmayan dillerle cevap göndermekten vazgeçmesine izin vermeyin. Herhangi bir programlama dili için mümkün olduğunca kısa bir cevap bulmaya çalışın.
  • Cevabınız için standart kurallar geçerlidir , bu nedenle STDIN / STDOUT fonksiyonlarını, uygun parametrelerle fonksiyonlarını ve geri dönüş tipini, tam programları kullanmanıza izin verilir. Senin çağrı.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, cevabınız için bir açıklama eklemek şiddetle tavsiye edilir.

Test durumları:

Input: @
Output:
@

Input: test
Output:
test
t e s t
t  e  s  t
t   e   s   t
t  e  s  t
t e s t
test

Input: ?!
Output:
?!
? !
?!

Input: Spaceship
Output:
Spaceship
S p a c e s h i p
S  p  a  c  e  s  h  i  p
S   p   a   c   e   s   h   i   p
S    p    a    c    e    s    h    i    p
S     p     a     c     e     s     h     i     p
S      p      a      c      e      s      h      i      p
S       p       a       c       e       s       h       i       p
S        p        a        c        e        s        h        i        p
S       p       a       c       e       s       h       i       p
S      p      a      c      e      s      h      i      p
S     p     a     c     e     s     h     i     p
S    p    a    c    e    s    h    i    p
S   p   a   c   e   s   h   i   p
S  p  a  c  e  s  h  i  p
S p a c e s h i p
Spaceship

Input: 05AB1E
Output:
05AB1E
0 5 A B 1 E
0  5  A  B  1  E
0   5   A   B   1   E
0    5    A    B    1    E
0     5     A     B     1     E
0    5    A    B    1    E
0   5   A   B   1   E
0  5  A  B  1  E
0 5 A B 1 E
05AB1E

Input: )}/\
Output:
)}/\
) } / \
)  }  /  \
)   }   /   \
)  }  /  \
) } / \
)}/\

1
Tüm sadece sarsıntılı alır !!!
WallyWest,

1
Bu çıktıyı tanıdığımı biliyordum. Bu fikrin hala devam etmesini seviyorum.
Carcigenicate

2
Bir sorudaki belli bir şekli belli belirsizce tanıdığınızda ಠ_ಠ, bunu bir yıl önce yanlışlıkla yaptığınız için farkına varırsınız ಠ⌣ಠ.
Magic Octopus Urn

1
@ MagicOctopusUrn İlham için teşekkürler. D
Kevin Cruijssen

3
@KevinCruijssen goofy alıntı haha ​​tutmak için teşekkürler!
Magic Octopus Urn

Yanıtlar:


11

Japt , 8 6 bayt

Girdiyi karakter dizisi olarak alır, dizge dizisi çıkarır.

£qYçÃê

Dene


açıklama

£          :Map each element at (0-based) index Y
 q         :  Join input with
  Yç       :   Space repeated Y times
    Ã      :End Map
     ê     :Palindromise

Orijinal, 8 bayt

G / Ç bir dizedir. -RBayrağı kullanır . Her satırdaki sondaki boşlukları içerir.

¬£múYÄÃê

Dene

açıklama

             :Implicit input of string U
¬            :Split
 £           :Map each character at 0-based index Y
  m          :  Map original U
   ú         :    Right pad with spaces to length ...
    YÄ       :     Y+1
      Ã      :End map
       ê     :Palindromise
             :Implicitly join with newlines

S.ç()FTW bir kez daha :-)
ETHproductions 4'18

1
Ciddi soru: Bunun gibi bir yapboz için 1-6 bayt uzunluğundaki çözümler arasında yinelemeli bir şekilde arama yapmak uygun olur mu?
filip

2
@filip No: 256'dan fazla ** 6 = 281474976710656 (en az saf) kombinasyon var. Bir şifre tahmin etmek gibi bir şey.
Kirill Bulygin

3
@KirillBulygin, 37 trilyondan fazla (37,764,717,485,592) Japt'taki karakterleri 1-6 karakter uzunluğunda bir dizgede bir araya getirmenin olası yolları vardır. Dize değişmezlerinde veya sıkıştırılmış dizelerde kullanılabilecek diğer tüm 1 bayt karakterleri eklerseniz , bu sayı 276 trilyondan (276,024,445,697,280) artar. Yani, hayır, hepsini üretmek için bir bot yazmak, daha sonra geçerli Japt programlarını filtrelemek ve daha sonra eldeki zorluk için işe yarayan birini bulmak muhtemelen mümkün olmaz. Ayrıca bir botun senin için golf yapmasına izin vermenin eğlencesi nerede ?!
Shaggy

6
@Shaggy: "Bir botun sizin için golf yapmasına izin vermenin eğlencesi nerede ?!" Ya botu gerçekten çok kısa yaptıysanız?
Tuhaf,

11

R , 105 99 85 84 79 bayt

-6 @Kevin Cruissen ve @Giuseppe'e teşekkürler

-14 regex tabanlı bir yönteme geçmek

@Giuseppe sayesinde -1

-5 @digEmALl sayesinde

function(w,n=nchar(w)-1)write(trimws(Map(gsub,"",strrep(" ",n-abs(n:-n)),w)),1)

Çevrimiçi deneyin!


Boşluğu kaldırarak 1 bayt golf yapabilirsiniz in(r<-.
Kevin Cruijssen

1
ve yalnızca bir skez kullanırsınız, writedoğrudan doğrudan bir argüman olarak kullanabilirsiniz ; sizi 99 bayta
Giuseppe

1
bu olmalıdır 1yerine bir ""de write? Kullanımınızı kazıyorum Map!
Giuseppe


1
Bunu collapseargümanla yenebileceğime ikna olmuştum, pasteama bu olmayacak ...
JDL


6

Kömür , 10 bayt

Eθ⪫θ× κ‖O↓

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Açıklama:

Eθ          Map over characters of input string
  ⪫θ        Join characters of input string using
    ×       a literal space repeated 
      κ     current index number of times
            Implicitly print each result on its own line
       ‖O↓  Reflect vertically with overlap

Kömür gibi şeyler yansıtmamaktadır [için ]- ya da başka ayrı komuta bu?
Magic Octopus Urn

@MagicOctopusUrn Yansımayı dönüştürmek istiyorsanız ayrı komutlar vardır. Örneğin codegolf.stackexchange.com/a/127164 adresine bakın .
Neil

Daha önce yansıttığımı sanıyordum ama emin değildim. Temiz!
Magic Octopus Urn


6

Python 2 , 72 70 68 66 65 bayt

Kevin Cruijssen sayesinde -2 bayt Ovs
sayesinde -3 bayt

w=input();c=s=-1
while c:print(' '*~c).join(w);s*=w[:c]>'';c+=s|1

Çevrimiçi deneyin!


c==len(w)-11 byte ile golf edilebilir c+2>len(w). EDIT: Yeni 70-byte versiyonunuzda 0<colabilir c.
Kevin Cruijssen

6

05AB1E , 10 9 bayt

Adnan sayesinde 1 bayt kaydedildi

εINð×ý}û»

Çevrimiçi deneyin!

açıklama

ε            # apply to each in input
 I           # push the input
  Nð×        # push <index> spaces
     ý       # merge the input on the spaces
      }      # end loop
       û     # palendromize
        »    # join on newlines

Bırakabilirsiniz S. Giriş esnektir, bu yüzden listeye giriş yapılmasına izin verilir.
Kevin Cruijssen

1
@KevinCruijssen: İlk sürümünüz, »ihmal edilebileceği gibi eskilerde 9 byte .
Emigna

1
»Döngü vbir haritayı kaldırır ve değiştirilirse, gerçekte 9 bayt'taki mirası çalışır ε.
Kevin Cruijssen

1
Cevap gönderildi . Ve şu anda Japt korktuğum 6 byte ile bizi yeniyor. Yoksa 05AB1E (Elixir rewrite) ve 05AB1E (Python legacy) 'de en kısa olanı mı demek istediniz? :)
Kevin Cruijssen

2
Does εINð×ý}û»da işe?
Adnan


4

Japt , 9 8 bayt

@Shaggy'den -1 bayt

ÊƬqXîÃê

ÊƬqXîÃê        Full program, implicity input U
ÊÆ              Rage from 0 to U length and map
  ¬             split U at ""
   qXîà     join U using " " times range current value
        ê       horizontal mirror

Çevrimiçi deneyin!


Dang; Görünüşe göre beni tekrar ninjaed! Benimkileri silmemi isteyip istemediğini bilmek istiyorum.
Shaggy

1
@Shaggy hayır, cevabını sakla, bir dize kullanırken diziyi girdi olarak kullanıyorsun, bu yüzden farklı bir xD
Luis felipe De jesus Munoz

1
SpX-> 1 baytlık bir tasarruf için.
Shaggy

4

PowerShell , 66 54 bayt

Mazzy sayesinde -12 bayt

0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}

Çevrimiçi deneyin!

TIO'da her karakter için ayrı komut satırı argümanları olarak ortaya çıkan sıçrama yoluyla girdi alır.

İlk önce $a=$argsgiriş argümanı olarak ayarladık . Sonra set $xeşit .countolduğu dizinin -1. Daha sonra uzay gemisini inşa etmek için harflerin arasında dolaşmamız gerekiyor. Yani bir aralık oluşturarak yapılır 0için $x, sonra $xgeri aşağı için 0daha sonra kullanarak, Get-Uniquesadece uygun bir aralık dışarı çekmek için.

Her yineleme, girdi argümanlarımızı ve -joinonları karşılık gelen boşluk sayısı ile birlikte alırız . Bu dizelerin her biri boru hattında bırakılmıştır ve örtük bir Write-Outputprogram tamamlandığında bize ücretsiz yeni çizgiler verir.


Bunu dene:0..($x=($a=$args).count-1)+$x..0|gu|%{$a-join(' '*$_)}
mazzy

1
@mazzy Ne ... poligonda nasıl Get-Uniqueçalışır? Çılgınca! Teşekkürler!
AdmBorkBork

4

05AB1E (eski) , 9 bayt

εINúíJ}û»

Karakter listesi olarak giriş yapın.

Çevrimiçi deneyin veya tüm test durumlarını doğrulayın .

Açıklama:

ε     }    # Map each character in the input to:
 I         #  Take the input
  Nú       #  Prepend each with the 0-indexed amount of spaces
           #   i.e. ["t","e","s","t"] & 3 → ["   t","   e","   s","   t"]
    í      #  Reverse each item
           #   i.e. ["   t","   e","   s","   t"] → ["t   ","e   ","s   ","t   "]
     J     #  Join them together to a single string
           #   i.e. ["t   ","e   ","s   ","t   "] → "t   e   s   t   "
       û»  # Palindromize the list, and join by newlines
           #  i.e. ["test","t e s t ","t  e  s  t  ","t   e   s   t   "]
           #   → "test\nt e s t \nt  e  s  t  \nt   e   s   t   \nt  e  s  t  \nt e s t \ntest"

1
Ayna / istikametini değiştirir yansıtılmış, \ kısmına, aynı çünkü Oooooo de bu geçerli değil [, ]ve (, ). Kömür yakalamak için bu davaları eklemek isteyebilirsiniz. (Diğer yorumları Emigna'nın cevabına taşıdı, çünkü ilk başta yorum yaptığım cevaptı)
Magic Octopus Urn

@MagicOctopusUrn Haber verdiğiniz için teşekkür ederiz. Kullanarak bu düzeltildi û»yerine .∊.
Kevin Cruijssen

4

Haskell , 60 59 bayt

(init<>reverse).(scanl(?)<*>tail)
a?_=do u<-a;u:[' '|' '<u]

Çevrimiçi deneyin!

açıklama

Bir dize için (örn. "abc") Önce uygulanır

scanl (?) <*> tail

hangisi aynı

\str -> scanl (?) str (tail str)

Bu arda uygulanır (?)(aralığındaki her karakter bir boşluk ekler [.. 33] kadar) strolarak birçok dizeleri kalmayıncaya kadar strkarakterleri:["abc","a b c ", "a b c "]

Şimdi sonucu (eksi son elemanı eksi) ters sayaç kısmıyla birleştirmeliyiz:

init<>reverse

4

MATL , 25 22 13 bayt

zZv"Gtz@he!1e

Çevrimiçi deneyin!

5 baytlık bir golf önerdiği için Luis Mendo'ya teşekkür ederim, bu da 4 baytı daha tıraş etmem için bana ilham verdi!

Örnek girdiyle açıklama 'abc':

         # Implicit input, 'abc'
z        # find number of nonzero elements (length of string)
         # stack: [3]
Zv       # symmetric range
         # stack: [[1 2 3 2 1]]
"        # begin for loop, iterating over [1 2 3 2 1] as the loop indices
G        # push input
         # stack: ['abc']
tz       # dup and push length
         # stack: ['abc', 3]
@        # push loop index, i (for example, 2)
         # stack: ['abc', 3, 2]
h        # horizontally concatenate
         # stack: ['abc', [3, 2]]
e!       # reshape to matrix of 3 rows and i columns, padding with spaces, and transpose
         # stack: [['abc';'   ';'   ']]
1e       # reshape to matrix of 1 row, leaving last value on stack
         # stack: ['a  b  c  ']
         # implicit end of for loop
         # implicit end of program, display stack contents

3

Jöle , 9 bayt

jⱮLḶ⁶ẋƲŒḄ

Çevrimiçi deneyin!

Satır listesini döndürür; TIO üzerinden çıktı çıktı.


9 biraz farklı: ,€⁶$LСŒḄ. Diğer, daha benzer, 9's: J’⁶ẋŒḄɓjⱮve J’⁶ẋŒḄjⱮ@(daha kısa ama neşe
Jonathan Allan

Ben çok emin bu en uygunudur olduğum @JonathanAllan, ben yazma için herhangi kısa bir yol var olduğunu sanmıyorum LḶ⁶ẋya ŒḄ. Ancak, bir tasarruf bulmayı başarırsanız, bana ping yapın. :-)
Outgolfer Erik

Bunu biraz düşünmek benim ,€⁶$LСŒḄiçin geçerli olmayabilir, çünkü çılgın yuvalara sahip olabilir Yve bu nedenle tam bir program olabilir.
Jonathan Allan

@JonathanAllan Evet, elbette değil. ['I', 'f', [[' '], 't', 'h', [['i']], 's'], ' ', 'i', ['s', ' '], 'a', [[' ', 's', 't'], 'r', ['i', 'n', 'g'], ' '], 'w', ['e', ' ', 'a', 'r', 'e'], ' ', 'd', 'o', ['o'], 'm', [[[[['e']]]]], [[[['d']]]], '!']En azından 05AB1E ... 'yi geçtim ...
Outgolfer Erik

05AB1E’den daha üstün olduğumu söyledim, ha? Bah, artık değil. : /
Outgolfer Erik


3

Stax , 10 bayt

Ç·9ƒù▌╘Ä┘e

Koş ve hata ayıkla

Her satırda sondaki boşlukla çıktılar.

Açıklama:

%R|pmx{]n(m Full program, unpacked, implicit input
%           Length of input
 R          1-based range
  |p        Palindromize
    m       Map:
     x{   m   Map over characters of input:
       ]        Character -> string
        n(      Right-pad to length given by outer map value
              Implicit flatten and output


3

K (oK) , 25 24 bayt

Çözüm:

,/'(1+a,1_|a:!#x)$\:+,x:

Çevrimiçi deneyin!

Açıklama:

K4 çözümümün limanı :

,/'(1+a,1_|a:!#x)$\:+,x: / the solution
                      x: / save input as x
                     ,   / enlist
                    +    / flip
                 $\:     / pad ($) right by each-left (\:)
   (            )        / do this together
              #x         / count length of input,           e.g. 3
             !           / range 0..length,                 e.g. 0 1 2
           a:            / save as a
          |              / reverse it,                      e.g. 2 1 0
        1_               / drop first,                      e.g. 1 0
      a,                 / join to a,                       e.g. 0 1 2 1 0
    1+                   / add 1,                           e.g. 1 2 3 2 1
,/'                      / flatten (,/) each (')

Notlar:

  • Ngn sayesinde -1 bayt

1
,:'-> +,
ngn

2

Pascal (FPC) , 143 135 bayt

var s:string;i,j,l:word;begin read(s);l:=length(s);repeat i:=i+1;for j:=1to l do write(s[j],'':l-abs(l-i)-1);writeln until i=l*2-1 end.

Çevrimiçi deneyin!

Muhtemelen sadece Lenguage'ye karşı kazanacağım ...


2

PHP, 88 89 bayt

for(;++$i<2*$e=count($a=str_split($argn));)echo join(str_pad("",~-$e-abs($i-$e)),$a),"\n";

PHP 5 veya üstü gerektirir str_split. Pipe ile çalıştırın -nRveya çevrimiçi deneyin .


Deneyin çevrimiçi bağlantınız, korkarım yanlış çıktı veriyor. Çıktınızda, tüm satırlarda yalnızca karakterler (veya isteğe bağlı olarak izleyen) yerine baştaki boşluklar bulunur. İlk karakterin çıktıda aynı sütunda olması gerekir.
Kevin Cruijssen

1
@KevinCruijssen Çıktıya yeterince bakmadım. Sabit. (Her ne kadar önceki çıktım bir rokete benziyor olsa da) ;-)
Titus

Bana bir ok başı gibi görünüyordu. : D Ama + 1 şimdi düzeltildi.
Kevin Cruijssen

\ N yerine gerçek bir yeni satır yerleştirirseniz, bir bayt kurtarırsınız :)
Martijn

@Martijn Aslında sadece buraya bir bayt saydım ... kodu buraya yapıştırdığımda değiştirmeyi unuttum.
Titus,

2

K4 , 23 bayt

Çözüm:

,/'(1+a,1_|a:!#x)$\:$x:

Örnek:

q)k),/'(1+a,1_|a:!#x)$\:$x:"Spaceship"
"Spaceship"
"S p a c e s h i p "
"S  p  a  c  e  s  h  i  p  "
"S   p   a   c   e   s   h   i   p   "
"S    p    a    c    e    s    h    i    p    "
"S     p     a     c     e     s     h     i     p     "
"S      p      a      c      e      s      h      i      p      "
"S       p       a       c       e       s       h       i       p       "
"S        p        a        c        e        s        h        i        p        "
"S       p       a       c       e       s       h       i       p       "
"S      p      a      c      e      s      h      i      p      "
"S     p     a     c     e     s     h     i     p     "
"S    p    a    c    e    s    h    i    p    "
"S   p   a   c   e   s   h   i   p   "
"S  p  a  c  e  s  h  i  p  "
"S p a c e s h i p "
"Spaceship"

Açıklama:

Her satırda izleyen boşluk var.

,/'(1+a,1_|a:!#x)$\:$x: / the solution
                     x: / save input as x,                 e.g. "abc"
                    $   / string,                          e.g. (,"a";,"b";,"c")
                 $\:    / pad ($) right by each-left (\:)
   (            )       / do this together
              #x        / count length of input,           e.g. 3
             !          / range 0..length,                 e.g. 0 1 2
           a:           / save as a
          |             / reverse it,                      e.g. 2 1 0
        1_              / drop first,                      e.g. 1 0
      a,                / join to a,                       e.g. 0 1 2 1 0
    1+                  / add 1,                           e.g. 1 2 3 2 1
,/'                     / flatten each

2

C #, 113 105 98 bayt

s=>{for(int l=s.Length,i=-l;++i<l;)WriteLine(Join("",s.Select(c=>$"{c}".PadRight(i<0?l+i:l-i))));}

Çevrimiçi deneyin!


Merhaba. Şu anda cevabınız bir fonksiyon veya tam program yerine bir pasaj. Bu lambda işlevini yapmak için s=>{önce ve }sonra ekleyerek ucuza sabitlenebilir . Ek olarak, golf oynamak için bir şey for-loop etrafındaki parantezleri çıkarmaktır. Çevrimiçi deneyin.
Kevin Cruijssen

@KevinCruijssen Teşekkürler! Göndermeden önce bunu düzeltmek için unuttum ...
RobIII 5:18

2

Scala , 82 bayt

for(i<-(0 to a.size)union(-a.size to 0))println(a.map(_+" "*Math.abs(i)).mkString)

Çevrimiçi deneyin

Scala'nın burada bana yardımcı olan ve çok okunaklı olan birçok kısayolu var! Scala'yı deneyin


Merhaba, PPCG'ye hoş geldiniz! Güzel bir cevap olsa da, korkarım iki şey biraz yanlış. En fazla boşluk içeren çizgi, ortada iki kez yerine yalnızca bir kez çıkarılmalıdır. Ve şu anda yazdırmak 0için lengthyerine, boşluk miktarı 0için length-1boşluk miktarı. Scala'yı çok iyi tanımıyorum, ancak her iki sorunu da +4 baytla (toplamda 86 bayt) düzeltebilirsiniz, öyle: for(i<-(0 to a.size-1)union(-a.size+2 to 0))println(a.map(_+" "*Math.abs(i)).mkString)Yine hoş geldiniz ve konaklamanızın tadını çıkarın! :)
Kevin Cruijssen

2

Oracle SQL, 115 bayt

Golf dili değil ama ...

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))FROM t CONNECT BY LEVEL<2*LENGTH(v)

Değerin vtablo sütununda olduğunu varsayarak t:

SQL Fiddle

Oracle 11g R2 Şema Kurulumu :

CREATE TABLE t ( v ) AS
  SELECT 'test' FROM DUAL;

Sorgu 1 :

SELECT TRIM(REGEXP_REPLACE(v,'(.)',LPAD('\1',1+LENGTH(v)-ABS(LEVEL-LENGTH(v)))))
FROM   t
CONNECT BY LEVEL<2*LENGTH(v)

Sonuçlar :

(SQLFiddle, bir sebepten dolayı sütunda doğru hizalanmış değerleri basar ... hiçbir satır aralığı yoktur)

| TRIM(REGEXP_REPLACE(V,'(.)',LPAD('\1',1+LENGTH(V)-ABS(LEVEL-LENGTH(V))))) |
|---------------------------------------------------------------------------|
|                                                                      test |
|                                                                   t e s t |
|                                                                t  e  s  t |
|                                                             t   e   s   t |
|                                                                t  e  s  t |
|                                                                   t e s t |
|                                                                      test |

SQL Fiddle sonuçlarınızda karakterler arasında yalnızca tek boşluk var mı? Bu ekran görüntüsüne bakınız . Bunun SQL Fiddle nedeniyle olduğunu ve yerel olarak çalıştığını varsayıyorum. Btw, emin SQL standart regex kurallarını kullanır, ancak eğer (.)üzere golfed edilmesi .kullanarak \0yerine \1örneğin Java olabilir gibi? EDIT: Boşver, bunun için $0değil, \0.. ( Ne demek istediğimi Java örneği ).
Kevin Cruijssen

1
@KevinCruijssen "SQL Çalıştır" düğmesinin yanındaki aşağı oka tıklayın ve çıktıyı "Plaintext Output" veya "Markdown Output" olarak değiştirin; boşlukları göreceksiniz.
MT0

Teşekkürler. Bu durumda gerçekten iyi görünüyor!
Kevin Cruijssen

2

8086 makine kodu, 56 53 bayt

00000000  bf 35 01 57 ba 01 00 52  be 82 00 b3 ff ac 59 51  |.5.W...R......YQ|
00000010  aa 3c 0d 74 07 b0 20 e2  f7 43 eb f1 b0 0a aa 59  |.<.t.. ..C.....Y|
00000020  00 d1 e3 08 38 cb d6 08  c2 51 eb dc c6 05 24 5a  |....8....Q....$Z|
00000030  b4 09 cd 21 c3                                    |...!.|
00000035

Şuradan toplandı:

org 0x100
use16
        mov di, buffer
        push di
        mov dx, 1
        push dx
nextl:  mov si, 0x82
        mov bl, -1
nextc:  lodsb
        pop cx
        push cx
stor:   stosb
        cmp al, 0x0d
        je cr
        mov al, ' '
        loop stor
        inc bx
        jmp nextc
cr:     mov al, 0x0a
        stosb
        pop cx
        add cl, dl
        jcxz done
        cmp bl, cl
        salc
        or dl, al
        push cx
        jmp nextl
done:   mov [di], byte '$'
        pop dx
        mov ah, 0x09
        int 0x21
        ret
buffer:

Test durumu:

ekran görüntüsü


Merhaba. Sanırım 8086 makine kodu için derlenmiş çevrimiçi bir şey yok, ancak test senaryolarından birinin çıktısının ekran görüntüsünü ekleyebilir misiniz? Sonra her şeyin doğru olup olmadığını kontrol edebilirim. :)
Kevin Cruijssen

Bitti. Ayrıca bir bayt daha kaldı :)
user5434231

Ekran görüntüsü için teşekkürler! Maalesef çıktıda küçük bir hata var. Orta satırda artık lengthboşluk var ve toplamda 9 satır var, ancak orta satırda length-1boşluk var ve bunun yerine toplam 7 satır olmalı (4 harfli 'test' kelimesi için) ..: (Umarım düzeltilmesi için bayt açısından pahalı değildir?
Kevin Cruijssen 5:18

1
Ohh anlıyorum. Şimdi düzeltildi, hatta bir bayt daha azalttım.
user5434231

2

Haskell, 64 60 59 bayt

(""#)
a#s|l<-(:a)=<<s,w<-' ':a=l:[x|w<(' '<$s),x<-w#s++[l]]

Çevrimiçi deneyin!

a#s                         -- take a string of spaces 'a' and the input string 's'
 |l<-(:a)=<<s               -- let 'l' be the current line, i.e. the spaces in 'a'
                            -- appended to each char in 's'
  w<-' ':a                  -- let 'w' be 'a' with an additional space   
 =l                         -- return that 'l'
   :[   |w<(' '<$s)   ]     -- and, if 'w' is shorter than 's',
     x  ,x<-w#s++[l]        -- followed by a recursive call with 'w' 
                            -- and by another copy of 'l'

(""#)                       -- start with an empty 'a'

2

Bash , 115 , 109 , 105 , 100 , 97 , 96 , 92 , 91 , 90 bayt

-5 ve -3 Kevin Cruissen sayesinde

read s;for((c=f=1;f;c-=2*(f>=${#s}),f+=c))
{ printf '%-'${f}'.c' `grep -o .<<<"$s"`
echo
}

Çevrimiçi deneyin!


Çünkü o Not \bir kabuk kaçış karakter olduğunu test durumu )}/\bir ekstra ile girilmelidir \böyle: )}/\\.


Merhaba. Test durumları ile birlikte bir TIO bağlantısı eklemek mümkün müdür ? Ayrıca, Bash'i çok iyi tanımıyorum ama Python'da sonradan inve sonradan boşlukları kaldırmak mümkün printfmü?
Kevin Cruijssen

1
@KevinCruijssen, Teşekkürler, revize edilmiş cevaba bakınız. Ancak TIO bağlantısında yeniyim ve birden fazla test senaryosunun nasıl kullanılacağından emin değilim, çünkü bu bashkod yalnızca bir dize giriyor ( yani yalnızca bir satır). Bununla birlikte, test durumlarının tümü işe yarıyor, ancak )}/\ böyle tek alıntı yapılması gerekiyor <<< ')}/\' read s; ...etc. . Sonra inve printfgerekli boşluklar .
agc

Teşekkürler. Ve TIO için tek bir test durumu iyi. Esas olarak her şeyin beklendiği gibi çalışıp çalışmadığını doğrulamak, ki bu gerçekten durum böyle görünüyor. Benden +1. :)
Kevin Cruijssen

1
Yeni sürümünüzde bunun gibi 5 bayt daha golf oynayabilirsiniz . Sonra boşluklar forve dokaldırılabilir. f=1olarak değiştirilebilir c=f=1. Ve f=f+colabilir f+=c.
Kevin Cruijssen

1
Oh, golf oynamak için bir küçük şey daha. O Bash mümkün olduğundan emin eğer değildi, ama görünüşe göre, (a TIO-link kullanışlı olmasının nedeni bir neden daha;) 'dir), değişen gereğidir f!=0için fFor döngüsü içinde. Tıpkı JavaScript ve Python'da olduğu gibi, 0falsey ve Bash'deki her pozitif / negatif tamsayı görünüşte açıktır.
Kevin Cruijssen

2

Perl 6 , 43 bayt

{(0....comb-1...0)>>.&{join ' 'x$^a,.comb}}

Çevrimiçi deneyin!

Satır listesini döndürür.

Açıklama:

 {                                         }  # Anonymous code block
  (0....comb-1...0) # A list from
   0                  # 0
    ...               # to
       .comb-1        # the length of the input string -1
              ...     # back to
                 0    # 0
                   >>.&{                  }  # Map each number to
                        join        ,.comb   # Join the list of characters
                             ' 'x$^a         # With the number of spaces

2

C (gcc) , 131 129 111 bayt

i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

Çevrimiçi deneyin!

-Katiği sayesinde 20 bayt !

#import<string.h>
i;x;f(k,j)char*k,*j;{x=strlen(k)-1;for(i=0;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

Çevrimiçi deneyin!

Veya, uzunluk parametre olarak kabul edilebilirse:

C (gcc), 105 102 bayt

Ceilingcat sayesinde -1 bayt!

i;x;f(k,x,j)char*k,*j;{for(i=!x--;i<x-~x;i+=puts(""))for(j=k;*j;)printf("%c%*s",*j++,i<x?i:2*x-i,"");}

Çevrimiçi deneyin!


@ceilingcat ha!
Conor O'Brien

1
102 bayt uzunluğundaki golfünüzde bence küresel xgölgeli ve böylece gereksiz olarak ilan edildi.
Jonathan Frech

2

PHP, 148 146 143 141 Bayt

function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

Bu şekilde test edebilirsiniz:

<?php
error_reporting(0);

$s = 1234567890;
function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))."
";}

Çıktı

1234567890
1 2 3 4 5 6 7 8 9 0 
1  2  3  4  5  6  7  8  9  0  
1   2   3   4   5   6   7   8   9   0   
1    2    3    4    5    6    7    8    9    0    
1     2     3     4     5     6     7     8     9     0     
1      2      3      4      5      6      7      8      9      0      
1       2       3       4       5       6       7       8       9       0       
1        2        3        4        5        6        7        8        9        0        
1         2         3         4         5         6         7         8         9         0         
1        2        3        4        5        6        7        8        9        0        
1       2       3       4       5       6       7       8       9       0       
1      2      3      4      5      6      7      8      9      0      
1     2     3     4     5     6     7     8     9     0     
1    2    3    4    5    6    7    8    9    0    
1   2   3   4   5   6   7   8   9   0   
1  2  3  4  5  6  7  8  9  0  
1 2 3 4 5 6 7 8 9 0 
1234567890

Kum havuzu

Genişletilmiş sürüm

 function s($s){
    //loop upwards 0-10
    for(;$i<strlen($s);++$i) f($i,$s);
     //decrement so it's odd, from 9 loop downwards to 0
    for(--$i;--$i>=0;)f($i,$s);
 }
 //2nd function to save space
 function f($i,$s){
     //chunk it, split 1 char, insert $i number of spaces
     echo chunk_split($s,1,str_repeat(' ',$i))."
";}

Deneme 2, 92 bayt

@Titus'un cevabını gördükten sonra, benimkini buna düşürdüm:

for(;++$i<2*$e=strlen($s=$argn);)echo chunk_split($s,1,str_repeat(' ',~-$e-abs($i-$e)))."
";

2 yerine 1 döngü kullanmanın bir yolunu düşünmeye çalışıyordum ... İster inanın ister inanmayın, neredeyse for"gerçek" koddaki döngüyü kullanmam . Öyleydi~ ben kayıp olduğunu, Değil bitsel ...

Daha küçük bir eşik daha var 92bu yüzden kendimi kötü hissetmiyorum. Ama yine de ikinci bir girişim olarak koyacağım.

$argn komut satırından giriş

-NR ile boru olarak çalıştırın veya çevrimiçi deneyin.

Kum havuzu


Adlandırılmış işlevi kullanıldığında ilk sürüm 4 bayt kısa olacağını geliyor bana fyerine isimsiz birini üzere atama $f- function f(over 2 bayt kaydeder $f=function(başka byte tasarrufu çağrı her gün sayısını ve f(...)yerine $f(...). Alternatif olarak, $s2 bayt kaydederek yakalayabilirsiniz - ($i)use($s)4 bayttan daha uzundur ($i,$s), ancak her arama için $f($i)yerine 3 bayt kaydedersiniz $f($s,$i); JS gibi otomatik yakalama olan dillerde bu daha uygun bir tasarruftur, çünkü useifadenin cezasını ödemezsiniz .
IMSoP

Yardımın için minnettarım, golf kodlaması konusunda oldukça yeniyim ve gerçekten çok fazla yapma, biri normal SO sayfalarında sıkılıyor. Kullanmayı düşündüm useama daha uzun geliyor, bu anlamda $idinamik yapmak için, referans olarak kabul edilmek zorunda kalacaktı. Bu yüzden referans gösterilmeden önce use(&$i)ve $itanımlanmalı $f. Bu, ana işlevde veya diğerlerinden önce ayarlanması anlamına gelir. İşlev için olabilir function s($s,$i)ve sadece çağrılması gerektiğini bilir, s($s,0) ama çirkin görünür ve bu civarındadır11 bytes, use(&$i),$i
ArtisticPhoenix

Yine de kullanabiliriz $sve \nbunu gerçek bir satır başı olarak değiştirebiliriz. Bu, sondan 143 2'ye ve kullanımdan 1'e alır
ArtisticPhoenix

Evet, $ i'nin kullanılmasını bile düşünmedim, çünkü $ s "doğal" yakalamayı hissetti, ancak net tasarrufun hesaplanmasında her zaman fayda var. Ancak, sadece fkapatma yerine adlandırılmış bir işlev bildirerek 2 bayttan tasarruf edebilirsiniz : function s($s){for(;$i<strlen($s);++$i)f($i,$s);for(--$i;--$i>=0;)f($i,$s);}function f($i,$s){echo chunk_split($s,1,str_repeat(' ',$i))." ";}Bu meta gönderiye
IMSoP

Güncelleme, birkaç kaydedilen
ArtisticPhoenix
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.