Itu hanya bug input

17

Melanjutkan saya Itu hanya tantangan bug :

Memasukkan:

String yang terdiri dari karakter ASCII yang dapat dicetak tanpa spasi putih atau baris baru.

Keluaran:

Pertama-tama ubah input menjadi palindrome dengan mengembalikan input, dan menambahkannya sebelum itu sendiri, tidak termasuk karakter tengah (yaitu dengan input 1234567890, itu akan menjadi 0987654321234567890).

Dan kemudian menampilkan teks ini:

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

(Dari tengah ke luar di kedua arah, setiap karakter dipisahkan oleh satu spasi lebih banyak dari baris sebelumnya.)

Aturan tantangan:

  • Anda perlu mencetak dua kali panjang input, minus 3 baris. Jadi dengan input 1234567890, output yang ditampilkan di atas adalah 17 baris (panjang 10 * 2 - 3).
  • Input hanya akan berisi ASCII yang dapat dicetak (tidak termasuk spasi, tab, dan baris baru).
  • Ruang tambahan adalah opsional.
  • Satu baris baru yang tertinggal adalah opsional.
  • Ruang tambahan (tambahan) atau baris baru terkemuka tidak diizinkan.
  • Anda bisa berasumsi bahwa input akan selalu paling tidak panjangnya empat karakter.
  • Tidak seperti saya. Itu hanya tantangan bug , baik format input dan output fleksibel. Jadi, Anda diizinkan untuk menampilkan hasilnya sebagai String-array, String-list, dll.

Aturan umum:

  • Ini adalah , jadi jawaban tersingkat dalam byte menang.
    Jangan biarkan bahasa kode-golf mencegah Anda memposting jawaban dengan bahasa non-codegolf. Cobalah untuk memberikan jawaban sesingkat mungkin untuk bahasa pemrograman 'apa saja'.
  • Aturan standar berlaku untuk jawaban Anda, jadi Anda diperbolehkan menggunakan STDIN / STDOUT, fungsi / metode dengan parameter yang tepat dan tipe pengembalian, program lengkap. Panggilanmu.
  • Celah default tidak diperbolehkan.
  • Jika memungkinkan, silakan tambahkan tautan dengan tes untuk kode Anda.
  • Juga, silakan tambahkan penjelasan jika perlu.

Kasus uji:

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
Kevin Cruijssen
sumber
Apakah jumlah ruang utama yang sama di setiap baris OK?
Adám
@ Adám Maaf tapi tidak. Sejumlah ruang tambahan baik-baik saja, tetapi ruang utama tidak. Saya akan menentukan aturan ini dalam tantangan.
Kevin Cruijssen
2
"Anda harus mencetak panjang input minus 3 baris." lalu "(panjang 10 * 2 - 3)". Kalimat pertama mengatakan "no double", yang kedua mengatakan "double". Jadi yang mana?
Olivier Grégoire
@ OlivierGrégoire Ups, baris pertama seharusnya berisi 2x panjang minus 3. Tetap
Kevin Cruijssen

Jawaban:

5

Arang , 14 byte

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

Cobalah online!

AST:

Program
├Print
│└E: Map
│ ├⁻: Difference
│ │├L: Length
│ ││└θ: Identifier θ
│ │└1: Number 1
│ └⪫: Join
│  ├θ: Identifier θ
│  └×: Product
│   ├' ': String ' '
│   └ι: Identifier ι
└‖O: Reflect overlap
 └Multidirectional
  ├←: Left
  └↑: Up
Erik the Outgolfer
sumber
Mungkin 16 codepoint, tetapi seperti yang dilaporkan UTF-8 Python 3 bahwa itu adalah 41 byte. Charset mana yang Anda gunakan untuk membuatnya 16 byte?
Janus Troelsen
@JanusTroelsen Ini adalah charset khusus.
Erik the Outgolfer
Huh, ⪫ bekerja pada string? Harus ingat itu untuk waktu berikutnya ...
Neil
@Neil Ya, masuk akal bukan?
Erik the Outgolfer
Secara teknis hasil edit Anda tidak bersaing karena komit yang relevan memposting tantangan.
Neil
7

Japt , 22 21 byte

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

Uji secara online!

Penjelasan

8 byte pertama menghasilkan kuadran kanan bawah dari pola:

 ¬ Å  £    ¬ 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.

Pada titik ini kita memiliki array eg ["ABCD", "A B C D", "A B C D"]. Sayangnya, dibutuhkan 13 byte untuk menyelesaikannya:

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
Produksi ETH
sumber
Seandainya saya berpikir untuk menggunakan transpose - dilakukan dengan baik :)
Shaggy
Bisakah saya mengajukan pertanyaan yang saya takut tahu jawabannya? Apakah Anda dan yang lainnya di sini sebenarnya mengkodekan ini dalam versi yang diperkecil?
gdbj
Jika kamu berani. Mungkin tidak.
CalculatorFeline
1
@ gdbj biasanya saya lakukan ... apakah itu pertanda buruk? : P
ETHproduk
@ ETHproductions Baru saja memberi tahu seorang teman bahwa ini mirip dengan golf asli: frustrasi belajar, anehnya membuat ketagihan, dan menunjukkan keterampilan di dalamnya menuntut rasa hormat.
gdbj
5

05AB1E , 17 byte

g<F¹RSðN×ýû})Rû.c

Cobalah online!

-1 berkat kalsowerus .

Erik the Outgolfer
sumber
Anda dapat menyimpan satu byte dengan menggantinya .c.∊denganû.c
kalsowerus
@kalsowerus Dan saya tahu akan ada cara untuk menggunakan û... terima kasih!
Erik the Outgolfer
5

JavaScript (ES6) , 159 136 129 127 byte

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):''

Cobalah online! Penjelasan di bawah ini

// 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)
  : ''

Entri pertama ke codegolf, saya minta maaf sebelumnya atas kesalahan yang jelas.

Terima kasih kepada Justin Mariner karena telah menghemat 23 byte! Terima kasih kepada Craig Ayre karena telah menyimpan 11 byte dan untuk laporan bug.

Saming
sumber
Jawaban pertama yang bagus, +1 dari saya dan selamat datang di PPCG. Aku tidak terlalu akrab dengan Js, tapi apakah mungkin untuk memulai xdi -2 bukan -1, dan perubahan x<=lke ++x<=lsehingga Anda dapat menghapus x++dan menyimpan byte?
Kevin Cruijssen
Saya mencoba tetapi tidak berhasil karena linesterjerat dengan spasi juga sehingga akhirnya menghabiskan lebih banyak byte untuk membuat semuanya bekerja lagi. Tapi saya cukup yakin bahwa ada cara yang lebih baik untuk mengatur kode dan menambahkan saran Anda.
Saming
1
Selamat datang di PPCG, posting pertama yang bagus dan penjelasan! Golf turun ke 133 byte di sini . Termasuk penjelasan tentang apa yang diubah.
Justin Mariner
Sayangnya output Anda tampaknya tidak cukup cocok dengan output yang diharapkan: lihat di sini
Craig Ayre
1
Ini luar biasa, saya menambahkan fungsi baru Anda dan memperbarui penjelasannya
Saming
4

SOGL V0.12 , 22 18 byte

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

Coba Di Sini!

Penjelasan:

ā                   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
dzaima
sumber
Apakah ╬-perintah empat arah palindromize? Saya hanya di sini berharap Japt memiliki sesuatu seperti itu ...: P
ETHproduksi
@ETHproductions FWIW, ada banyak hal
dzaima
Saya tahu, karenanya mengapa saya menentukan ╬-. Tapi terima kasih, saya tidak dapat menemukan halaman itu karena alasan tertentu
ETHproduksi
@ ETProduk Oh. Itu hanya ada dalam salinan SOGLOnline dari juru bahasa: / Pada titik tertentu saya harus menggabungkan keduanya: |
dzaima
Hmm ... Anda harus menerapkan otomatis Funtuk jika diperlukan.
Erik the Outgolfer
4

Python 3 , 149 141 95 byte

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)]

Cobalah online!

Terima kasih kepada @KevinCruijssen dan @ETHproduk untuk menghemat beberapa byte

Terima kasih khusus kepada @notjagan untuk menghemat 46 byte!

Tuan Xcoder
sumber
1
Mengubah l=len(s);ke l=len(s)-1;dan kemudian mengubah semua nilai yang melibatkan l(yaitu l-1-> l; -l+2-> -l+1; dll.) Adalah 8 byte lebih pendek. Coba di sini.
Kevin Cruijssen
1
-l+2-> 2-l:)
ETHproduksi
Terima kasih @KevinCruijssen, sayangnya saya tidak dapat mengedit sekarang, bisakah Anda mengeditnya?
Tn. Xcoder
@KevinCruijssen Terima kasih banyak!
Tn. Xcoder
3
Turun ke 95 byte menggunakan centerbukan forloop!
notjagan
4

PHP, 145 131 byte

Butuh beberapa pemikiran untuk golf byte tambahan itu; tapi itu sepadan.

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));

mencetak baris baru terkemuka. Jalankan sebagai pipa dengan -nRatau coba online .

kerusakan

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

solusi alternatif , panjang yang sama:

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));
Titus
sumber
1
Anda dapat menyimpan 13 Bytes dengan Coba online!
Jörg Hülsermann
3

APL (Dyalog) , 37 byte

Membutuhkan ⎕IO←0yang default pada banyak sistem.

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

{... } fungsi anonim di mana argumen diwakili oleh

(...)↑¨¨⊂⍵  untuk setiap ( ¨) dari angka-angka berikut ini mengambil ( ) bahwa banyak karakter dari masing-masing ( ¨) dari seluruh argumen ( ), padding dengan spasi seperlunya:

  ≢w jumlah karakter dalam argumen

  d← simpan di d

   sebanyak itu ɩ ndices (0… d - 1)

  1↓ jatuhkan satu (nol)

∊¨ε daftar masing-masing (ratakan)

 naikkan peringkat (konversi daftar daftar menjadi matriks)

(m←... ) terapkan fungsi diam-diam berikut m , didefinisikan sebagai:

   argumen terbalik

   diatas dari

  1 satu [baris]

   dijatuhkan dari

   argumen

 mengubah urutan

(...)↓  jatuhkan:

  2-d = - ( d - 2), yaitu d - 2 baris dari bawah

m terapkan m

 mengubah urutan

Cobalah online!

Adm
sumber
3

Java (OpenJDK 8) , 201 196 byte

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","");}

Cobalah online!

Itu ide yang sama dengan yang saya gunakan untuk tantangan sebelumnya , kecuali bahwa string generator sekarang sedikit lebih lama dan dengan lebih sulit untuk menangani kasus.

%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
Olivier Grégoire
sumber
3

Python 3 , 134 124 byte

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)])

Cobalah online!

Posting pertama ke PPCG setelah mengintai untuk sementara waktu. Mencari saran / saran!


Terima kasih kepada @LyricLy dan @ Łukasz Rogalski untuk peningkatan!

Chase Vogeli
sumber
1
Anda tidak perlu mencetak output di dalam fungsi, output dapat diberikan dalam nilai balik. Juga, Anda tidak harus menghitung f=dalam bytecount, cukup memberikan fungsi anonim baik-baik saja.
LyricLy
1
Juga, -len(s)+2hanya saja 2-len(s), satu byte lebih sedikit.
Łukasz Rogalski
Terima kasih @ Łukasz Rogalski dan @LyricLy; Anda telah menyelamatkan saya 10 byte!
Chase Vogeli
3

Haskell, 177 163 bytes

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]

Fungsi fadalah fungsi tantangan dan mengembalikan daftar string ( [String]), menggunakannya unlinesharus memberikan output visual yang sama dengan kasus uji ( main = putStr $ unlines $ f "test string"untuk mengkompilasinya).

Cobalah online!

-14 byte terima kasih kepada @nimi

Mephy
sumber
1
kdapat didefinisikan sebagai k n=[1..n]>>" "dan psebagai p=(++)=<<reverse.tail(Anda bahkan dapat sebaris definisi ini).
nimi
2

Mathematica, 141 byte

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