Saya butuh banyak waktu untuk membuat ini, silakan. (Komentar YouTube # 1)

84

Tahan ..... ini bukan trolling.


Latar Belakang

Saat ini di YouTube, bagian komentar dipenuhi dengan pola-pola seperti:

S
St
Str
Stri
Strin
String
Strin
Stri
Str
St
S

di mana Stringmerupakan tempat belaka dan mengacu pada kombinasi karakter. Pola-pola ini biasanya disertai dengan It took me a lot of time to make this, pls likeatau sesuatu, dan seringkali OP berhasil mengumpulkan sejumlah suka.


Tugas

Meskipun Anda memiliki talenta hebat mengumpulkan upvote di PPCG dengan keterampilan golf Anda yang memukau, Anda jelas bukan pilihan utama untuk membuat komentar yang cerdas atau referensi meme di bagian komentar YouTube. Dengan demikian, komentar konstruktif Anda dibuat dengan pemikiran yang disengaja mengumpulkan beberapa suka atau tidak suka di YouTube. Anda ingin ini berubah. Jadi, Anda memilih untuk membuat pola-pola klise di atas untuk mencapai ambisi utama Anda, tetapi tanpa membuang waktu mencoba untuk menulisnya secara manual.

Sederhananya, tugas Anda adalah untuk mengambil string, katakanlah s, dan output 2*s.length - 1substring dari s, dibatasi oleh baris baru, sehingga memenuhi pola berikut:

(untuk s= "Halo")

H
He
Hel
Hell
Hello
Hell
Hel
He
H

Memasukkan

Satu string s. Standar input komunitas berlaku. Anda dapat mengasumsikan bahwa string input hanya akan berisi karakter ASCII yang dapat dicetak.


Keluaran

Beberapa garis dipisahkan oleh baris baru, membentuk pola yang sesuai seperti yang dijelaskan di atas. Default output komunitas berlaku. Garis depan dan belakang kosong (tidak mengandung karakter atau karakter yang tidak dapat dilihat, seperti spasi) di output diizinkan.


Kasus cobaan

Kasus uji multi-kata:

Input => "Oh yeah yeah"

Output =>

O
Oh
Oh 
Oh y
Oh ye
Oh yea
Oh yeah
Oh yeah 
Oh yeah y
Oh yeah ye
Oh yeah yea
Oh yeah yeah
Oh yeah yea
Oh yeah ye
Oh yeah y
Oh yeah 
Oh yeah
Oh yea
Oh ye
Oh y
Oh 
Oh
O

Perhatikan bahwa ada distorsi yang terlihat jelas pada bentuk keluaran test case di atas (misalnya, baris dua dan baris tiga dari output tampak sama). Itu karena kita tidak bisa melihat spasi putih tertinggal. Program Anda TIDAK perlu mencoba memperbaiki distorsi ini.


Kriteria Kemenangan

Ini adalah , jadi kode terpendek dalam byte di setiap bahasa menang!

Arjun
sumber
19
Saya berencana untuk membuat lebih banyak lagi komentar YouTube terkait tantangan di masa depan; maka YouTube Comments #1dalam judul.
Arjun
1
Apakah mengembalikan array garis diperbolehkan?
seseorang
2
Bisakah kita mengambil input sebagai array karakter dan mengembalikan array array karakter?
Shaggy
3
Erat terkait
Giuseppe
3
Bisakah inputnya ""? Bagaimana dengan satu karakter seperti "H"? Jika demikian, apa yang harus menjadi output untuk kedua kasus tersebut?
AdmBorkBork

Jawaban:

103

brainfuck , 32 byte

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

Cobalah online!

Loop yang sama digunakan untuk kedua bagian dari pola.

Penjelasan:

,             Take first input character as initial line
[             Until line to output is empty:
  [<]>        Move to beginning of line
  [.>]        Output all characters in line
  ++++++++++. Output newline
  ,           Input next character
  [>>]        Move two cells right if input character nonzero
  <[-]        Otherwise remove last character in line
  <           Move to new last character in line
]
Nitrodon
sumber
2
Itu benar-benar luar biasa. Saya mencoba melakukan sesuatu di brainfuck tetapi hasilnya sekitar 10 kali selama ini dan masih tidak berfungsi dengan baik.
ElPedro
34
Tidak pernah terpikir saya akan melihat tantangan di mana jawaban brainfuck sebenarnya mencetak secara kompetitif, pekerjaan yang luar biasa!
Tanda Tanya
54

JavaScript (ES6), 36 byte

f=([c,...r],s=`
`)=>c?s+f(r,s+c)+s:s

Cobalah online!

Berkomentar

f = (             // f is a recursive function taking:
                  //   the input string split into:
  [c,             //     c   = next character (may be undefined if we've reached the end)
      ...r],      //     r[] = array of remaining characters
  s = `\n`        //   the output string s, initialized to a linefeed
) =>              // 
  c ?             // if c is defined:
    s +           //   append s (top of the ASCII art)
    f(r, s + c) + //   append the result of a recursive call to f, using r[] and s + c
    s             //   append s again (bottom of the ASCII art)
  :               // else:
    s             //   append s just once (this is the final middle row) and stop recursion
Arnauld
sumber
3
jawaban yang sangat bagus: D
lois6b
10
@ MartinBarker Di Windows, saya menggunakan Notepad ++ dengan Line Ending default diaktifkan Unix (LF). Masalah terpecahkan sekali dan untuk semua. :)
Arnauld
3
Luar biasa! Bisakah Anda menulis penjelasan untuk ini bagi mereka yang baru mulai dari JS?
Akhoy
3
@Akhoy Saya telah menambahkan versi komentar.
Arnauld
3
Terima kasih. Jauh lebih jelas sekarang.
Akhoy
47

05AB1E (legacy) ,  4  3 byte

Dicoret &nbsp;4&nbsp;tidak lagi 4 :)

η.∊

Cobalah secara online atau verifikasi semua kasus uji .

Penjelasan:

η     # Get the prefixes of the (implicit) input-string
 .∊   # Vertically mirror everything with the last line overlapping
      # (which implicitly joins by newlines in the legacy version of 05AB1E)
      # (and output the result implicitly)

Dalam versi baru 05AB1E, dan eksplisit »diperlukan setelah itu η, itulah sebabnya saya menggunakan versi lama dari 05AB1E di sini untuk menghemat satu byte.

Kevin Cruijssen
sumber
7
Hmm, ini tampaknya 6 byte di UTF8:\xce\xb7\x2e\xe2\x88\x8a
rubenvb
10
@rubenvb Di UTF-8 memang lebih. 05AB1E menggunakan, sama seperti beberapa bahasa pemrograman yang digunakan dalam jawaban lain (yaitu Jelly; Japt; Charcoal) itu kode sumber sendiri (yaitu CP-1252 dalam kasus 05AB1E), di mana masing-masing dari 256 karakter yang diketahuinya adalah satu byte.
Kevin Cruijssen
Baiklah, cukup adil :).
rubenvb
@KevinCruijssen PHP tampaknya berpikir bahwa karakter ini tidak valid untuk CP-1252, tetapi bisa saja berupa bug PHP: 3v4l.org/UC1QE
hanshenrik
7
@hanshenrik Pertanyaan bagus. Memang bukan CP-1252, tetapi sebenarnya pengkodean 05AB1E , yang merupakan pengkodean kustom yang digunakannya. Bytes kode ini dalam hex adalah 08 2e 17, yang dapat Anda jalankan dan verifikasi dengan --osabieflag: tio.run/…
Adnan
21

IBM PC DOS, 8088 assembly,  44  43

d1ee ad8b d6b4 0948 8af8 8ac8 d0e1 49b3 243a cf7d 024e
4e46 861c cd21 861c 52ba 2901 cd21 5ae2 eac3 0d0a 24

Belum dirakit:

    SHR  SI, 1              ; point SI to DOS PSP at 80H (SI intialized at 100H)
    LODSW                   ; load arg length into AL, advance SI to 82H
    MOV  DX, SI             ; save start of string pointer
    MOV  AH, 9              ; DOS API display string function
    DEC  AX                 ; remove leading space from string length
    MOV  BH, AL             ; save string len in BH (AL gets mangled by INT 21H,9)
    MOV  CL, AL             ; set up loop counter in CL
    SHL  CL, 1              ; number of lines = 2 * string length - 1
    DEC  CX
    MOV  BL, '$'            ; end of string marker
LINE_LOOP:
    CMP  CL, BH             ; if CL >= string length, ascend
    JGE  ASCEND
    DEC  SI                 ; descend by backing up two places (always increments)
    DEC  SI                 ; (this is fewer bytes than 'SUB SI, 2' or two branches)
ASCEND:
    INC  SI                 ; increment current string position
    XCHG BL, [SI]           ; swap current string byte with end of string delimiter
    INT  21H                ; write substring to console
    XCHG BL, [SI]           ; restore string byte
    PUSH DX                 ; save output string pointer
    MOV  DX, OFFSET CRLF    ; load CRLF string
    INT  21H                ; write to console
    POP  DX                 ; restore output string pointer
    LOOP LINE_LOOP          ; move to next line
    RET
CRLF DB 0DH,0AH,'$'

Penjelasan

Ulangi 2 * input length - 1untuk setiap baris. Fungsi tampilan string API DOS ( INT 21H,9) menulis $string -minminasi ke layar, sehingga setiap kali melalui loop karakter setelah yang terakhir ditampilkan ditukar dengan terminator ujung-string.

Penghitung loop dibandingkan dengan panjang string, dan jika lebih besar (berarti bagian naik dari output) posisi string / swap bertambah, jika tidak maka akan dikurangi (sebenarnya itu -1-1+1adalah byte yang lebih sedikit daripada struktur percabangan if / else).

Program mandiri yang dapat dieksekusi, mengambil string input dari baris perintah.

Keluaran

masukkan deskripsi gambar di sini

Unduh YT2.COM (43 byte)

640KB
sumber
1
Kebanyakan rasa DOS memiliki SI = 100j setelah memuat file COM. Ini dapat menghemat satu byte dengan mengganti instruksi pertama dengan SHR SI, 1.
gastropner
@gastropner sangat pintar! Ternyata yang asli tidak akan berjalan pada DOS 1.0 karena ia mengandalkan CH menjadi 0 (akan dikenakan biaya +2 ​​byte untuk diinisialisasi, yang tidak layak hanya untuk DOS 1). Diperbarui dengan versi baru!
640KB
Apakah Anda harus memasukkan tanggal setiap kali Anda membuka terminal?
user14492
1
@ user14492 ha, tidak! Saya hanya lupa memotong bagian itu dari tangkapan layar DOS!
640KB
19

Python 2 , 60 52 byte

f=lambda s,n=1:s[n:]and[s[:n]]+f(s,n+1)+[s[:n]]or[s]

Cobalah online!

Python 3.8 (pra-rilis) , 50 byte

f=lambda s,n=1:s>(x:=s[:n])and[x,*f(s,n+1),x]or[s]

Cobalah online!

TFeld
sumber
2
Apakah ini tergantung pada fitur 3,8 yang akan datang? Fitur apa?
alexis
7
@alexis ini menggunakan ekspresi tugas : x:=s[:n].
Arnauld
1
Ah, saya melihatnya sekarang terima kasih :-) Saya sudah membaca tentang fitur sebelumnya, menantikannya. Masih merindukannya dari hari C saya ...
alexis
1
Ini tidak mencetak hasilnya. Mereka hanya membuat array, kan?
Jaden Travnik
@JadenTravnik Python secara otomatis menyalin hasil ekspresi terakhir jika berjalan secara interaktif melalui konsol
Xeverous
18

MATL , 8 byte

nZv"G@:)

Cobalah online!

Silakan suka posting ini untuk smiley :)dalam kode yang membuat saya banyak waktu untuk membuatnya.

n  % Length of the input string
Zv % Symmetric range ([1 2 ... n ... 1])
"  % For each k in above range
G  % Push input
@: % Push [1 2 ... k]
)  % Index
Sanchises
sumber
17

J , 11 byte

Fungsi awalan diam-diam anonim. Mengembalikan matriks karakter yang diisi ruang.

[:(}:,|.)]\

Cobalah online!

]\ daftar awalan

[:(... ) terapkan fungsi berikut ke daftar itu

|. daftar terbalik

, diawali dengan

}: daftar yang dibatasi (tanpa item terakhir)

Adm
sumber
18
[:(dan }:,|terlihat sangat sedih ...
Adám
Tapi ini adalah (}: orang yang bahagia dengan kumis mewah
DonFusili
13

Perl 6 , 31 byte

{[\~](@_)[0...@_-1...0]}o*.comb

Cobalah online!

Blok kode anonim yang mengambil string dan mengembalikan daftar baris.

Penjelasan:

{                      }o*.comb   # Pass the list of characters into the codeblock
 [\~](@_)                 # Triangular reduce by concatenation
                          # e.g. The list [1,2,3,4] turns into [1,12,123,1234]
         [0...@_-1        # Return the elements from 0 to length of string minus 1
                  ...0]   # And back down to 0
Jo King
sumber
5
Sangat lucu bahwa hari ini bahkan golf Perl adalah salah satu kontestan yang paling mudah dibaca.
Berhenti menghidupkan counterclockwis
7
@ceasedtoturncounterclockwis Yah, ini Perl 6. Jawaban Perl 5 masih belum dapat dibaca
Jo King
12

Japt -R , 4 byte

å+ ê

Mengurangi kumulatif pada string.

-1 byte terima kasih kepada @Shaggy

Cobalah online!

Quintec
sumber
Skeptis tentang "-R" yang harus dimasukkan dalam string (tanpa itu output tidak berfungsi)
Flying Thunder
3
@FlyingThunder Jadilah skeptis lagi :) lihat di sini
Quintec
@ Quintec, saya telah menghubungkan bendera di header solusi saya ke pos meta itu untuk mencoba mendahului komentar semacam ini.
Shaggy
1
Cukup yakin bahwa konvensi adalah <bahasa> + -flagatau <bahasa> -flag. Juga,: | Saya lupa pengurangan kumulatif adalah suatu hal, saya bersumpah saya melewatinya setiap kali melihatnya
hanya ASCII
@ ASCII-only Sama, saya hanya mengingatnya karena saya berpikir bagaimana saya akan menyelesaikan ini di APL dan berkata "Saya ingin tahu apakah Japt memiliki builtin ini". Juga, bukankah saya menggunakan <bahasa> -flag?
Quintec
11

Japt -R , 9 7 byte

-2 byte terima kasih kepada Shaggy

Êõ@¯XÃê

Cobalah online!

Khusus ASCII
sumber
7 byte
Shaggy
1
@Shaggy oh tunggu ... Ãadalah suatu hal
ASCII-satunya
300 rep lain dalam perjalanan segera setelah pertanyaan ini memenuhi syarat untuk hadiah.
Shaggy
1
@ Quintec, kumulatif mengurangi karya pada string, juga, jadi Anda tidak perlu membagi di awal. Saya juga mengatakan itu cukup berbeda untuk menjamin mempostingnya sendiri.
Shaggy
10

Perl 5 ( -p), 26 byte

s,.,$\=$`.$/.$\;"$`$&
",ge

TIO

Nahuel Fouilleul
sumber
10

Haskell, 52 50 44 byte

f x=unlines$init<>reverse$scanr(\_->init)x x

Cobalah online!

Joseph Sible
sumber
Selamat datang di situs ini. initsmembutuhkan impor untuk digunakan sehingga Anda perlu menambahkan import Data.Listatau sesuatu yang serupa.
Wheat Wizard
@ SriotchilismO'Zaic Tidak yakin apakah itu perlu dihitung atau tidak. Ditambahkan, terima kasih!
Joseph Sible
4
Juga saya harus menyebutkan kami memiliki ruang obrolan untuk berbicara golf Haskell. Jika Anda memiliki pemikiran atau pertanyaan, itu adalah tempat yang tepat.
Wheat Wizard
1
Saya tidak percaya Anda datang dengan tepat apa yang akan saya posting:import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
Axman6
9

R , 79 65 62 58 byte

write(substring(s<-scan(,""),1,c(1:(r=nchar(s)),r-1:r)),1)

Cobalah online!

-14 oleh pengetahuan fungsi superior Giuseppe

-3 dengan pengindeksan lebih bersih

Terima kasih atas kepindahan Nick Kennedy dan Giuseppe ke scandanwrite

Menghindari loop (dan substr) itu bagus.

Kriminal kriminal
sumber
2
loop benar-benar tidak perlu, karena sapply- substringakan melakukan apa yang Anda inginkan (dengan tambahan baris kosong tambahan), dan untuk 65 byte ! Saya pasti tidak akan memikirkan substringjika saya tidak melihat penggunaan Anda di substrsini.
Giuseppe
1
Haha, tangkapan bagus! Saya pikir saya telah belajar lebih banyak tentang fungsi-fungsi alternatif untuk pekerjaan yang sama dari suntingan Anda daripada di tempat lain pada saat ini.
CriminallyVulgar
2
Haha, R memiliki jumlah sinonim yang bodoh dengan perbedaan yang halus. Setiap kali saya merasa seperti saya tahu alat terbaik untuk pekerjaan itu, saya menemukan sesuatu yang sedikit lebih baik dalam kasus tepi yang aneh ...
Giuseppe
3
Bagaimana kalau Coba online! menggunakan scandan write? Hanya 59 byte!
Nick Kennedy
1
@NickKennedy 58 byte jika Anda ganti ""dengan 1.
Giuseppe
7

Jelly , 5 4 byte

-1 byte terima kasih kepada @JonathanAllan !

¹ƤŒḄ

Cobalah online! Saya pikir ini adalah jawaban Jelly kedua saya? Saya tidak tahu apakah ini optimal.Saya lebih yakin itu optimal. Mengembalikan array garis.

Penjelasan

¹ƤŒḄ     input: "Hi!"
¹Ƥ       prefixes of the input: [["H"], ["H", "i"], ["H", "i", "!"]]
  ŒḄ     bounce, using each array: [["H"], ["H", "i"], ["H", "i", "!"], ["H", "i"], ["H"]]

Pendekatan lain, yang diusulkan oleh @JonathanAllan, adalah ;\ŒḄ, yang secara kumulatif mengurangi ( \) rangkaian ( ;), yang merupakan cara lain untuk menghasilkan awalan.

Conor O'Brien
sumber
Kami diizinkan untuk menghasilkan array baris, sehingga Anda dapat Ykeluar dari kode (saya akan membuat footer baik ÇYatau ÇŒṘuntuk menghindari cetak smashing implisit program penuh). Di samping catatan ini juga diterapkan sebagai setara;\ŒḄ untuk byte-count yang sama (juga Anda dapat melewati argumen "blah"seperti Jelly menafsirkan ini sebagai daftar karakter - milik Anda sebenarnya adalah daftar daftar karakter, seperti yang akan Anda lihat jika Anda membuat catatan kaki ÇŒṘ)
Jonathan Allan
@ Jonathan Allan, terima kasih! sangat menarik :)
Conor O'Brien
7

Python 3.8 (pra-rilis) , 48 byte

lambda s,r='':(l:=[r:=r+c for c in s])+l[-2::-1]

Cobalah online!

Menggunakan ekspresi penugasan dengan :=untuk mengakumulasikan daftar awalan dan sekali lagi untuk menyimpan hasil untuk menyatukan kebalikannya (tanpa karakter pertama).

Python 2 , 51 byte

f=lambda s,l=[]:s and f(s[:-1],[s]+l)or l+l[-2::-1]

Cobalah online!

Kami hampir memiliki solusi 45 byte yang bagus berikut, tetapi memiliki string asli dua kali dan saya tidak melihat cara singkat untuk memperbaikinya.

f=lambda s,l=[]:s and f(s[:-1],[s]+l+[s])or l

Cobalah online!

Tidak
sumber
Tidakkah Anda perlu menambahkan beberapa baris baru dan mencetak untuk mendapatkan hasil yang diinginkan?
Jaden Travnik
Sesuatu seperti print('\n'.join(f(s))) ?
Jaden Travnik
@JadenTravnik Default komunitas (yang diikuti oleh tantangan ini) memungkinkan fungsi selain program. Dan penulis tantangan mengatakan dalam komentar bahwa mereka OK dengan daftar string dalam bergabung sebagaimana diizinkan secara default , meskipun saya sendiri tidak suka ini sebagai default dan telah menurunkannya. Lihat juga ringkasan aturan Python .
xnor
Hah. Ok, terima kasih sudah menunjukkannya. Saya baru ¯_ (ツ) _ / ¯. Jika demikian, berikut adalah solusi 45-byte yang bersaing:x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
Jaden Travnik
@JadenTravnik Tidak masalah, aturannya sayangnya tersebar di tempat itu. Contoh Anda adalah cuplikan yang tidak diizinkan. Perlu melakukan input dan output seperti s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]. Lihat contoh di atas di sini .
xnor
6

Arang , 5 byte

G^Lθθ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: menggambar poligon terisi, ^menentukan bahwa sisi-sisi turun kanan dan kiri bawah (poligon kemudian secara otomatis menutup sendiri), Lθmenetapkan panjang sisi-sisi tersebut sebagai panjang input asli dan final θmenentukan string pengisi.

Neil
sumber
6

C # (Visual C # Interactive Compiler) , 123 109 94 84 74 byte

Asumsikan kita dapat mengembalikan array array char (saya percaya kita bisa, karena array char adalah representasi yang valid untuk sebuah string dan array string adalah representasi yang valid untuk beberapa baris)

a=>new int[a.Length*2-1].Select((b,i)=>a.SkipLast(Math.Abs(a.Length-i-1)))

Cobalah online!

some one
sumber
5

Attache , 15 byte

Bounce@Prefixes

Cobalah online!

Cukup mudah. Bounce(menambahkan terbalik tanpa tengah)Prefixes input.

Atau, 21 byte Bounce@{_[0..0:~-#_]} :, menerapkan kembali awalan.

Conor O'Brien
sumber
5

Brachylog (v2), 6 byte

a₀ᶠ⊆.↔

Cobalah online!

Pengiriman fungsi, mengembalikan array garis. Longgar berdasarkan jawaban @ Fatalize .

Penjelasan

a₀ᶠ⊆.↔
    .↔  Find a palindrome
   ⊆      that contains, in order,
  ᶠ       all
a₀        prefixes of {the input}

Urutan tiebreak di sini diatur oleh , yang, ketika digunakan dengan pola aliran ini, lebih suka output sesingkat mungkin, tiebroken dengan menempatkan elemen yang diberikan sedini mungkin . Output terpendek yang mungkin adalah yang kita inginkan di sini (karena itu tidak mungkin untuk memiliki duplikat awalan), dan menempatkan elemen yang diberikan (yaitu awalan) sedini mungkin akan menempatkannya di babak pertama (dibulatkan) dari keluaran. Mengingat bahwa kami juga mengharuskan mereka untuk ditempatkan dalam urutan yang sama, kami mendapatkan pola yang persis kami butuhkan meskipun deskripsi yang kami berikan kepada Brachylog sangat umum; tiebreak berhasil dengan tepat, menyebabkan Brachylog untuk memilih output yang kita inginkan daripada beberapa output lain yang mematuhi deskripsi.

ais523
sumber
5

PowerShell, 89 87 66 byte

-2 byte terima kasih kepada @AdmBorkBork

param($a)0..($d=$a.Length-1)|%{$b+=,-join$a[0..$_]};$b+$b[--$d..0]

Cobalah online!

Sebenarnya tidak berfungsi seperti yang ditentukan sebelumnya, maaf soal itu! Saya telah mengeditnya dan juga berhasil mencukur beberapa byte.

Gabriel Mills
sumber
Anda bisa --$dbukannya ($d-1)menyimpan pasangan di akhir.
AdmBorkBork
@ AdmBorkBork Terima kasih.
Gabriel Mills
Sayangnya, ini tidak berfungsi untuk input karakter tunggal.
AdmBorkBork
5

PowerShell , 46 byte

($l=$args|% t*y|%{($s+=$_);++$i})+$l[$i..0]|gu

Cobalah online!


PowerShell , 42 byte (khusus YouTube, kotor)

Diketahui bahwa panjang maksimum komentar di youtube adalah 10.000 karakter. Ok, gunakan ini sebagai batas atas.

($l=$args|% t*y|%{($s+=$_)})+$l[1e4..0]|gu

Cobalah online!

mazzy
sumber
4

APL (Dyalog Unicode) , 9 byte SBCS

Fungsi awalan diam-diam anonim. Mengembalikan daftar string.

(⊢,1↓⌽),\

Cobalah online!

,\ daftar awalan (menyala, gabungan kumulatif)

(... ) terapkan fungsi berikut ke daftar itu:

 daftar terbalik

1↓ jatuhkan item pertama

, lebih dulu

 daftar yang tidak dimodifikasi

Adm
sumber
4

Ruby , 51 42 40 byte

f=->s,i=1{s[i]?[t=s[0,i],*f[s,i+1],t]:s}

Cobalah online!

Berkat Doorknob untuk -2 byte.

Kirill L.
sumber
1
Anda dapat menyimpan 2 byte dengan menggantinya ...dengan,
Doorknob
4

JavaScript (Node.js) , 90 byte

Ini mungkin bisa bermain golf lebih banyak, Arnauld sudah memiliki cara yang lebih pendek tapi aku bersenang-senang minimal!

s=>{a=[];for(c=s.length-1;c--;)a[c]=s.slice(0,c+1);return[...a,s,...a.reverse()].join`\n`}

Cobalah online!

T. Dirks
sumber
4

SNOBOL4 (CSNOBOL4) , 118 byte

	N =INPUT
	L =1
1	X =LT(X,SIZE(N)) X + 1	:F(D)
O	N ARB . OUTPUT POS(X)	:($L)
D	X =GT(X) X - 1	:F(END)
	L ='D'	:(O)
END

Cobalah online!

Tampaknya ada bug dalam implementasi SNOBOL ini; mencoba mengganti label Ddengan label 2menyebabkan kesalahan, meskipun manual untuk Vanilla SNOBOL menunjukkan bahwa (penekanan ditambahkan)

Jika label ada, itu harus dimulai dengan karakter pertama dari garis. Label memberikan nama untuk pernyataan, dan berfungsi sebagai target untuk transfer kontrol dari bidang GOTO dari pernyataan apa pun. Label harus dimulai dengan huruf atau angka, secara opsional diikuti oleh serangkaian karakter yang berubah-ubah. Bidang label diakhiri oleh karakter kosong, tab, atau titik koma. Jika karakter pertama dari suatu baris kosong atau tab, bidang label tidak ada.

Anggapan saya adalah bahwa juru bahasa CSNOBOL hanya mendukung satu label yang dimulai dengan integer.

Giuseppe
sumber
4

APL + WIN, 31 byte

Anjuran untuk input string:

 ⊃((⍳n),1↓⌽⍳n)↑¨(¯1+2×n←⍴s)⍴⊂s←⎕

Penjelasan:

(¯1+2×n←⍴s)⍴⊂s create a nested vector of the string of length =1+2x length of string

((⍳n),1↓⌽⍳n)↑¨ progressively select elements from each element of the nested vector 
              following the pattern 1  2 ...to n to n-1 ... 1

⊃ convert nested vector into a 2d array.
Graham
sumber
4

F # (.NET Core) , 67 61 byte

let l=s.Length
[1..l*2-1]|>Seq.map(fun i->s.[..l-abs(i-l)-1])

Cobalah online!

Input adalah a stringdan output adalah aseq<string>

Solusi lain bisa let f(s:string)=for i=1 to s.Length*2-1 do printfn"%s"s.[..s.Length-abs(i-s.Length)-1]untuk 80ish byte ... Saya tidak yakin bahwa itu layak dilihat.

aloisdg
sumber
4

sed , 31 35 byte

:x
h
s/.\n.*\|.$//
/^$/{x;q}
H
G
bx

Cobalah online!

Penjelasan

Pada awal setiap iterasi dari loop, ruang pola adalah beberapa "central chunk" dari output yang diinginkan, dan setiap loop menambahkan salinan yang disingkat ke atas dan bawah.

:x                 
h                  Copy the current chunk to hold space
s/.\n.*\|.$//      Remove the last letter of the first line, and all other lines (if there are any)
/^$/{x;q}          If pattern space is empty we're done; output hold space
H                  Add the shortened line to the end of hold space
G                  and add the new hold space to pattern space.
bx                 
Sophia Lechner
sumber
1
Bagus, tetapi garis tengah (input asli lengkap) tampaknya menjadi output 3 kali. Setidaknya dengan GNU sed. Sama di TIO. sedImplementasi mana yang Anda gunakan dan bagaimana Anda memberikan input? (BTW, mengubah substitusi untuk s/.\n.*\|.$//memperbaikinya.)
manatwork
2
Ah kamu benar Ini bukan masalah dengan sedimplementasi saya (menggunakan GNU versi 4.2.1), saya hanya tidak melihat bug. Saya telah bermain-main dengan beberapa perbaikan lain dan tidak dapat menemukan apa pun yang menambahkan kurang dari empat byte jadi saya mengadopsi perbaikan Anda, terima kasih.
Sophia Lechner
4

Python 2 , 131 100 84 byte

Jawaban pertama saya di Code Golf!

-47 byte secara keseluruhan berkat @ SriotchilismO'Zaic

a,b=[],len(x)
for i in range(2*b-1):
 if i<b:a+=x[i]
 else:a=a[:-1]
 print''.join(a)

Cobalah online!

Yoni Matz
sumber
1
Selamat datang di PCG! Pastikan untuk membaca tur dan kode etik . Solusi bagus!
akozi
2
Untuk python, Anda dapat menggunakan ;s alih-alih baris baru untuk menghindari lekukan. Juga tidak perlu ada spasi di antara printdan''
Wheat Wizard
Terima kasih atas tipnya @ SriotchilismO'Zaic, sangat membantu mengurangi jumlah byte saya!
Yoni Matz
2
Dan satu hal lagi, jika Anda membuat astring daripada daftar, Anda tidak perlu lagi joinsama sekali dan Anda bisa saja print a.
Wheat Wizard
4
Valid, perlu menjadi program penuh atau fungsi, sedangkan Anda menganggap input di x.
ASCII
4

J , 12 byte

]\,[:}.@|.]\

Cobalah online!

Masih 1 byte lebih lama dari Adám

K (oK) , 12 11 byte

-1 byte terima kasih kepada ngn

{x,1_|x}@,\

Cobalah online!

Galen Ivanov
sumber
2
Apakah saya mengungguli master‽
Adám
@ Adám Saya jauh dari menjadi master J :) Ada banyak coders J di sini lebih baik daripada saya.
Galen Ivanov
1
-1 byte untuk oK:{x,1_|x}@,\
ngn
@ ngn Terima kasih!
Galen Ivanov