Sadece bir girdi hatasıydı


17

Devam ediyor Sadece bir hata meydan okumaydı:

Giriş:

Boşluksuz veya yeni satır içermeyen yazdırılabilir ASCII karakterlerinden oluşan bir dize.

Çıktı:

İlk olarak, girişi döndürerek ve orta karakter hariç (yani bir girdi ile 1234567890, olur 0987654321234567890) kendisinden önce ekleyerek girişi bir palindrom haline getirin .

Ve sonra bu metni çıktılayın:

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

(Her iki yönde ortadan dışa doğru, her karakter bir önceki satırdan bir boşluk daha ayrılır.)

Zorluk kuralları:

  • Girişin iki katı, eksi 3 satır yazdırmanız gerekir. Yani girişte 1234567890, yukarıda gösterilen çıktı 17 satırdır (uzunluk 10 * 2 - 3).
  • Giriş yalnızca yazdırılabilir ASCII içerir (boşluk, sekme ve yeni satır hariç).
  • Sondaki boşluklar isteğe bağlıdır.
  • Tek bir sondaki yeni satır isteğe bağlıdır.
  • (Ek) önde gelen alanlara veya önde gelen yeni satırlara izin verilmez.
  • Girişin her zaman en az dört karakter uzunluğunda olacağını varsayabilirsiniz.
  • Benim aksine Bu sadece bir hata meydan okuma, hem giriş hem de çıkış formatları esnektir. Böylece sonucu bir String-array, String-list, vb. Olarak çıkarmanıza izin verilir.

Genel kurallar:

  • Bu , bayt en kısa cevap kazanır.
    Kod golf dillerinin, kod yazmayan dillerle yanıt göndermenizi engellemesine 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 / yöntem uygun parametreler ve dönüş tipi, tam programlar ile kullanılabilir. Çağrınız.
  • Varsayılan Loopholes yasaktır.
  • Mümkünse, lütfen kodunuz için test içeren bir bağlantı ekleyin.
  • Ayrıca, gerekirse bir açıklama ekleyin.

Test senaryoları:

Input: 1234567890
Output:
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                                        0987654321234567890
                                                               0 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 0
                                                      0  9  8  7  6  5  4  3  2  1  2  3  4  5  6  7  8  9  0
                                             0   9   8   7   6   5   4   3   2   1   2   3   4   5   6   7   8   9   0
                                    0    9    8    7    6    5    4    3    2    1    2    3    4    5    6    7    8    9    0
                           0     9     8     7     6     5     4     3     2     1     2     3     4     5     6     7     8     9     0
                  0      9      8      7      6      5      4      3      2      1      2      3      4      5      6      7      8      9      0
         0       9       8       7       6       5       4       3       2       1       2       3       4       5       6       7       8       9       0
0        9        8        7        6        5        4        3        2        1        2        3        4        5        6        7        8        9        0

Input: ABCD
Output:
D  C  B  A  B  C  D 
   D C B A B C D
      DCBABCD
   D C B A B C D
D  C  B  A  B  C  D

Input: =>)}]
Output:
]   }   )   >   =   >   )   }   ]
    ]  }  )  >  =  >  )  }  ]
        ] } ) > = > ) } ]
            ]})>=>)}]
        ] } ) > = > ) } ]
    ]  }  )  >  =  >  )  }  ]
]   }   )   >   =   >   )   }   ]

Input: XXxxXX
Output:
X    X    x    x    X    X    X    x    x    X    X
     X   X   x   x   X   X   X   x   x   X   X
          X  X  x  x  X  X  X  x  x  X  X
               X X x x X X X x x X X
                    XXxxXXXxxXX
               X X x x X X X x x X X
          X  X  x  x  X  X  X  x  x  X  X
     X   X   x   x   X   X   X   x   x   X   X
X    X    x    x    X    X    X    x    x    X   X

Her satırda eşit miktarda önde gelen boşluk var mı?
Adám

@ Adám Üzgünüm ama hayır. Herhangi bir sayıda arka boşluk iyi, ancak önde gelen boşluklar iyi değil. Meydan okumada bu kuralı belirleyeceğim.
Kevin Cruijssen

2
"Giriş eksi 3 satır uzunluğunu yazdırmanız gerekiyor." sonra "(uzunluk 10 * 2-3)". İlk cümle "çift yok", ikincisi "çift" diyor. Peki hangisi?
Olivier Grégoire

@ OlivierGrégoire Hata! İlk satır 2 kat uzunluk eksi 3
içermelidir

Yanıtlar:


5

Kömür , 14 bayt

E⁻Lθ¹⪫θ× ι‖O←↑

Çevrimiçi deneyin!

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up

16 kod noktası olabilir, ancak UTF-8 Python 3'ün 41 bayt olduğunu bildirdiği gibi. 16 bayt yapmak için hangi karakter setini kullanıyorsunuz?
Janus Troelsen

@JanusTroelsen Özel bir karakter kümesi.
Outgolfer Erik

Ha, dizelerde çalışıyor? Bir dahaki sefere bunu hatırlamalıyız ...
Neil

@Neil Evet mantıklı değil mi?
Outgolfer Erik

Teknik olarak düzenlemeniz rakipsizdir, çünkü ilgili taahhüt bu soruna son verir.
Neil

7

Japt , 22 21 bayt

¬Å£¬qYîÃy w ê y w ê ·

Çevrimiçi test edin!

açıklama

İlk 8 bayt, desenin sağ alt çeyreğini oluşturur:

 ¬ Å  £    ¬ qYîÃ
Uq s1 mXY{Uq qYî} 

Uq                 : Split the input into characters.
   s1              : Slice off the first.
      mXY{      }  : Map each item X and index Y to
          Uq       :   the input split into chars,
             q     :   joined with
              Yî   :     Y spaces.

Bu noktada, örneğin bir dizi var ["ABCD", "A B C D", "A B C D"]. Ne yazık ki, bunun karesi 13 bayt sürer:

y w ê y w ê ·
y w ê y w ê qR
y                : Pad each line to the same length with spaces and transpose.
  w              : Reverse the array, and
    ê            : palindromize. Now we have the bottom half of the output transposed.
      y          : Transpose back.
        w ê      : Reverse and palindromize again, giving the full output.
            qR   : Join with newlines.
                 : Implicit: output result of last expression

Transpose kullanmayı düşündüğümü dilerdim - güzel yapılmış :)
Shaggy

Cevabını bilmek için korktuğum bir soru sorabilir miyim? Siz ve burada kalanlar bunu minimize edilmiş haliyle kodlıyor musunuz?
gdbj

Eğer cüret edersen. Muhtemelen değil.
CalculatorFeline

1
@gdbj Genellikle yaparım ... bu kötü bir işaret mi? : P
ETHproductions

@ETHproductions Sadece bir arkadaşınıza bunun gerçek golf ile benzer olduğunu söylüyordum: öğrenmek için sinir bozucu, garip bir şekilde bağımlılık yapmak ve bu konuda beceri göstermek saygıyı emrediyor.
gdbj


5

JavaScript (ES6) , 159 136 129 127 bayt

f=(i,x=1-(l=i.length-1),y=x<0?-x:x,[,...b]=i)=>l>x?''.padEnd(l*(l+~y))+[...b.reverse(),...i].join(''.padEnd(y))+`
`+f(i,x+1):''

Çevrimiçi deneyin! Aşağıdaki açıklama

// This is a recursive function
// First, inputs and various variable initializations
// by using defaults
let func = (
  // Text input, will not be modified through recursion
  input,

  // Current line, for the first function call we start from -lines to +lines
  // It's roughly equivalent to lines*2 but this helps us computing the spacing
  // Also computing the total amount of lines
  currentLine = 1 - (totalLines = input.length - 1),

  // Getting the absolute value of the current line (like Math.floor)
  absCurrentLine = currentLine < 0 ? -currentLine : currentLine,

  // Getting the input without it's first letter, useful for the palidrome of the input
  [,...slicedInput] = input

// Base case, stopping the recursion if the current line
// is still below the total amount of lines
) => totalLines > currentLine

  // Leading spacing
  ? ''.padEnd(totalLines * (totalLines + ~absCurrentLine)) + 

  // Putting together the palindrome version and adding spaces between the chars
    [...slicedInput.reverse(), ...input].join(''.padEnd(absCurrentLine)) + `

  // Line return + recursion call
` + f(input, currentLine + 1)
  : ''

Codegolf'a ilk girişte, açık hatalar için şimdiden özür dilerim.

23 bayt kazandığı için Justin Mariner'a teşekkürler! Craig Ayre'e 11 bayt kaydettiği ve hata raporu için teşekkürler.


Güzel ilk cevap, benden +1 ve PPCG'ye hoş geldiniz. Ben Js ile çok aşina değilim ama başlamak mümkündür x-1 en -2 yerine ve değişim x<=liçin ++x<=lkaldırmak böylece x++bir byte ve kaydetme?
Kevin Cruijssen

Denedim ama başaramadı çünkü linesaralıklarla dolaşmış, bu yüzden tüm tekrar çalışması için daha fazla bayt maliyet sona erer. Ancak, kodu düzenlemenin ve önerinizi eklemenin hem daha iyi bir yolu olduğundan oldukça eminim.
17'de Saming

1
PPCG'ye hoş geldiniz, güzel bir ilk gönderi ve açıklama! Burada 133 bayt aşağı golf . Neyin değiştiğinin açıklamasını içerir.
Justin Mariner

Ne yazık ki çıktınız beklenen çıktıyla tam olarak eşleşmiyor: buraya bakın
Craig Ayre

1
Bu harika, yeni işlevinizi ekledim ve açıklamayı güncelledim
Saming

4

SOGL V0.12 , 22 18 bayt

ā,⁄H{,čFH@*∑Κ}▓±╬-

Buradan Deneyin!

Açıklama:

ā                   push an empty array - canvas
 ,⁄H{        }      input length-1 times do
     ,                push the input
      č               chop it into chars
       FH@*           get the current iteration-1 amount of spaces
           ∑          join the chopped input with the spaces
            Κ         prepend it to the array
              ▓     space to a square
               ±    reverse each string in that list
                ╬-  quad-palindromize with 1 X and 1 Y overlap and without swapping characters

Mi ╬-dört-yollu palindromize komut? Biraz önce Japt böyle bir şey istiyordu ...: P
ETHproductions

@ETHproductions FWIW, bir çok şey
dzaima

Bu yüzden neden belirttiğimi biliyorum ╬-. Ama teşekkürler, bu sayfayı bir nedenden dolayı bulamadım
ETHproductions

@ETHproductions Oh. Yalnızca tercümanın SOGLOnline kopyasında bulunur: / Bir noktada ikisine birlikte katılmalıyım: |
dzaima

Hmm ... otomatik uygulamak gerekir Fiçin gerekli eğer.
Outgolfer Erik

4

Python 3 , 149141 95 bayt

def f(s):l=len(s)-1;[print((' '*abs(i)).join(s[:0:-1]+s).center(2*l*l+1))for i in range(1-l,l)]

Çevrimiçi deneyin!

@KevinCruijssen ve @ETHproductions'a bazı baytları kaydettiği için teşekkürler

@Notjagan'a 46 bayt kazandığı için özel teşekkürler!


1
Değişen l=len(s);için l=len(s)-1;ve daha sonra ilgili tüm değerlerini değiştirerek l(yani l-1-> l; -l+2-> -l+1; vs.) 8 kısa bayt olduğunu. Burada deneyin.
Kevin Cruijssen

1
-l+2-> 2-l:)
ETHproductions

@KevinCruijssen, maalesef şu anda düzenleyemiyorum, lütfen düzenleyebilir misiniz?
Bay Xcoder

@KevinCruijssen Çok teşekkürler!
Bay Xcoder

3
Aşağı için 95 bayt kullanarak centeryerine fordöngü!
notjagan

4

PHP, 145131 bayt

Bu ek baytın golf oynaması biraz düşündü; ama buna değdi.

while($y<=2*$e=strlen($a=$argn)-1)echo($p=str_pad)("
",$e*($e-$d=abs($y++-$e))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$d));

önde gelen bir yeni satır yazdırır. Pipo ile çalıştırın -nRveya çevrimiçi deneyin .

Yıkmak

while($y<=2*$e=strlen($a=$argn)-1)  # $e=length-1, loop through rows
                                        # 1. print linebreak and left padding
    echo($p=str_pad)("\n",$e*($e-$d=abs($y++-$e))+1),
        chunk_split(
            $a.substr(strrev($a),1)     # 2. palindromize input
            ,1,$p("",$d));              # 3. insert $e..0..$e spaces between characters

alternatif çözüm , aynı uzunluk:

for($d=-$e=strlen($a=$argn)-1;$d<$e;)echo($p=str_pad)("
",$e*($e-$b=abs($d++))+1),chunk_split($a.substr(strrev($a),1),1,$p("",$b));


3

APL (Dyalog) , 37 bayt

⎕IO←0Birçok sistemde varsayılan olanı gerektirir .

{⍉m(2-d)↓⍉(m←⊖⍪1↓⊢)↑∊¨(1↓⍳d←≢⍵)↑¨¨⊂⍵}

{} Argümanın temsil edildiği anonim işlev

(… Aşağıdaki sayıların )↑¨¨⊂⍵ her biri için ( ¨) her birinden çok sayıda karakter ()¨ tüm (bir) ) argümanı, gerektiğinde boşluklarla padding:

  ≢w argümandaki karakter sayısı

  d← bunu d'de sakla

   o kadar çok şey (0… d - 1)

  1↓ birini düşür (sıfır)

∊¨ε nlist (düzleştirmek) her

 sıralamayı yükseltmek (liste listesini bir matrise dönüştürmek)

(m←) Aşağıdaki tacit fonksiyonunu uygular m Olarak tanımlanan :

   baş aşağı argüman

   üstünde

  1 bir [satır]

   düştü

   argüman

 devrik

()↓ Düşür:

  2-d = - ( d - 2), yani d - 2 alttan satır

mm  uygula

 devrik

Çevrimiçi deneyin!


3

Java (OpenJDK 8) , 201 196 bayt

s->{for(int l=s.length()-1,i=-l,x=0;++i<l;x+=i<0?l:-l)System.out.printf("%1$"+(x<1?"":x)+"s"+s.join("%1$"+(i<0?-i:i>0?i:"")+"s",(new StringBuffer(s.substring(1)).reverse()+s).split(""))+"%n","");}

Çevrimiçi deneyin!

Bir önceki meydan okuma için kullandığımla aynı fikir , ancak jeneratör dizisi şimdi biraz daha uzun ve kullanımı daha zor vakalar.

%1$Ns0%1$Ns9%1$Ns8%1$Ns7%1$Ns6%1$Ns5%1$Ns4%1$Ns3%1$Ns2%1$Ns1%1$Ns2%1$Ns3%1$Ns4%1$Ns5%1$Ns6%1$Ns7%1$Ns8%1$Ns9%1$Ns0%n

3

Python 3 , 134124 bayt

f=lambda s:'\n'.join([' '*(len(s)-1)*abs(len(s)-abs(i)-2)+(' '*abs(i)).join(s[::-1]+s[1:]) for i in range(2-len(s),len(s)-1)])

Çevrimiçi deneyin!

Bir süre gizlendikten sonra PPCG'ye ilk gönderi. Herhangi bir öneri / tavsiye arıyorum!


@LyricLy ve @ Łukasz Rogalski'ye iyileştirmeler için teşekkürler!


1
Çıktıyı fonksiyonun içinde yazdırmak zorunda değilsiniz, çıktı bir dönüş değerinde verilebilir. Ayrıca, f=bayt hesabında saymak zorunda değilsiniz , sadece anonim bir işlev sağlamak iyidir.
LyricLy

1
Ayrıca, -len(s)+2sadece 2-len(s)bir bayt daha az.
asukasz Rogalski

Teşekkürler @ asukasz Rogalski ve @LyricLy; beni 10 bayt kurtardın!
Chase Vogeli

3

Haskell, 177 163 bayt

import Data.List
k n=[1..n]>>" "
f s=let n=length s in map(\x->(k(((n-1)*(n-(abs x)))))++(intercalate (k(abs x))$map(\z->[z])$((++)=<<reverse.tail) s))[n,n-1.. -n]

İşlev f, meydan okuma işlevidir ve üzerinde [String]kullanılan unlinestest dizileri ( main = putStr $ unlines $ f "test string"derlemek için) ile aynı görsel çıktıyı sağlamalıdır .

Çevrimiçi deneyin!

@Nimi sayesinde -14 bayt


1
kolarak k n=[1..n]>>" "ve polarak tanımlanabilir p=(++)=<<reverse.tail(bu tanımı satır içi bile yapabilirsiniz).
nimi

2

Mathematica, 141 bayt

Column[Join[Reverse@(s=Row/@Table[Riffle[Reverse@Rest@b~Join~b,""<>Table[" ",i]],{i,0,Length[b=Characters@#]-1}]),Rest@s],Alignment->Center]&
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.