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!


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

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

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.


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)


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!


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

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)


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

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!


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!



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

Haskell, 52 50 44 byte

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

Cobalah online!


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.


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.


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!


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.


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!



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.


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.


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!


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




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.


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.

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.


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                 

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!


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.