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 String
merupakan tempat belaka dan mengacu pada kombinasi karakter. Pola-pola ini biasanya disertai dengan It took me a lot of time to make this, pls like
atau 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 - 1
substring 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 kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang!
YouTube Comments #1
dalam judul.""
? Bagaimana dengan satu karakter seperti"H"
? Jika demikian, apa yang harus menjadi output untuk kedua kasus tersebut?Jawaban:
brainfuck , 32 byte
Cobalah online!
Loop yang sama digunakan untuk kedua bagian dari pola.
Penjelasan:
sumber
JavaScript (ES6), 36 byte
Cobalah online!
Berkomentar
sumber
Unix (LF)
. Masalah terpecahkan sekali dan untuk semua. :)05AB1E (legacy) ,
43 byteDicoret
4
tidak lagi 4 :)Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
Dalam versi baru 05AB1E, dan eksplisit
»
diperlukan setelah ituη
, itulah sebabnya saya menggunakan versi lama dari 05AB1E di sini untuk menghemat satu byte.sumber
\xce\xb7\x2e\xe2\x88\x8a
08 2e 17
, yang dapat Anda jalankan dan verifikasi dengan--osabie
flag: tio.run/…IBM PC DOS, 8088 assembly,
4443Belum dirakit:
Penjelasan
Ulangi
2 * input length - 1
untuk 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+1
adalah byte yang lebih sedikit daripada struktur percabangan if / else).Program mandiri yang dapat dieksekusi, mengambil string input dari baris perintah.
Keluaran
Unduh YT2.COM (43 byte)
sumber
SHR SI, 1
.Python 2 ,
6052 byteCobalah online!
Python 3.8 (pra-rilis) , 50 byte
Cobalah online!
sumber
x:=s[:n]
.MATL , 8 byte
Cobalah online!
Silakan suka posting ini untuk smiley
:)
dalam kode yang membuat saya banyak waktu untuk membuatnya.sumber
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)sumber
[:(
dan}:,|
terlihat sangat sedih ...Perl 6 , 31 byte
Cobalah online!
Blok kode anonim yang mengambil string dan mengembalikan daftar baris.
Penjelasan:
sumber
Japt -R , 4 byte
Mengurangi kumulatif pada string.
-1 byte terima kasih kepada @Shaggy
Cobalah online!
sumber
-flag
atau <bahasa>-flag
. Juga,: | Saya lupa pengurangan kumulatif adalah suatu hal, saya bersumpah saya melewatinya setiap kali melihatnya-flag
?Japt
-R
,97 byte-2 byte terima kasih kepada Shaggy
Cobalah online!
sumber
Ã
adalah suatu halPerl 5 (
-p
), 26 byteTIO
sumber
Haskell,
525044 byteinstance Semigroup b => Semigroup (a -> b)
Cobalah online!
sumber
inits
membutuhkan impor untuk digunakan sehingga Anda perlu menambahkanimport Data.List
atau sesuatu yang serupa.import Data.List putStr.unlines.((++)<*>reverse.init).tail.inits
R ,
79656258 byteCobalah online!
-14 oleh pengetahuan fungsi superior Giuseppe
-3 dengan pengindeksan lebih bersih
Terima kasih atas kepindahan Nick Kennedy dan Giuseppe ke
scan
danwrite
Menghindari loop (dan
substr
) itu bagus.sumber
sapply
-substring
akan melakukan apa yang Anda inginkan (dengan tambahan baris kosong tambahan), dan untuk 65 byte ! Saya pasti tidak akan memikirkansubstring
jika saya tidak melihat penggunaan Anda disubstr
sini.scan
danwrite
? Hanya 59 byte!""
dengan1
.Jelly ,
54 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
Pendekatan lain, yang diusulkan oleh @JonathanAllan, adalah
;\ŒḄ
, yang secara kumulatif mengurangi (\
) rangkaian (;
), yang merupakan cara lain untuk menghasilkan awalan.sumber
Y
keluar dari kode (saya akan membuat footer baikÇY
atauÇŒṘ
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ÇŒṘ
)Python 3.8 (pra-rilis) , 48 byte
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
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.
Cobalah online!
sumber
print('\n'.join(f(s)))
?x=[s[:i+1]for i in range(len(s))];x+x[-2::-1]
s=input();x=[s[:i+1]for i in range(len(s))];print x+x[-2::-1]
. Lihat contoh di atas di sini .Arang , 5 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
G
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.sumber
C # (Visual C # Interactive Compiler) ,
123109948474 byteAsumsikan 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)
Cobalah online!
sumber
Attache , 15 byte
Cobalah online!
Cukup mudah.
Bounce
(menambahkan terbalik tanpa tengah)Prefixes
input.Atau, 21 byte
Bounce@{_[0..0:~-#_]}
:, menerapkan kembali awalan.sumber
Brachylog (v2), 6 byte
Cobalah online!
Pengiriman fungsi, mengembalikan array garis. Longgar berdasarkan jawaban @ Fatalize .
Penjelasan
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.sumber
PowerShell,
898766 byte-2 byte terima kasih kepada @AdmBorkBork
Cobalah online!
Sebenarnya tidak berfungsi seperti yang ditentukan sebelumnya, maaf soal itu! Saya telah mengeditnya dan juga berhasil mencukur beberapa byte.
sumber
--$d
bukannya($d-1)
menyimpan pasangan di akhir.PowerShell , 46 byte
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.
Cobalah online!
sumber
APL (Dyalog Unicode) , 9 byte SBCS
Fungsi awalan diam-diam anonim. Mengembalikan daftar string.
Cobalah online!
,\
daftar awalan (menyala, gabungan kumulatif)(
...)
terapkan fungsi berikut ke daftar itu:⌽
daftar terbalik1↓
jatuhkan item pertama,
lebih dulu⊢
daftar yang tidak dimodifikasisumber
Ruby ,
514240 byteCobalah online!
Berkat Doorknob untuk -2 byte.
sumber
...
dengan,
JavaScript (Node.js) , 90 byte
Ini mungkin bisa bermain golf lebih banyak, Arnauld sudah memiliki cara yang lebih pendek tapi aku bersenang-senang minimal!
Cobalah online!
sumber
SNOBOL4 (CSNOBOL4) , 118 byte
Cobalah online!
Tampaknya ada bug dalam implementasi SNOBOL ini; mencoba mengganti label
D
dengan label2
menyebabkan kesalahan, meskipun manual untuk Vanilla SNOBOL menunjukkan bahwa (penekanan ditambahkan)Anggapan saya adalah bahwa juru bahasa CSNOBOL hanya mendukung satu label yang dimulai dengan integer.
sumber
APL + WIN, 31 byte
Anjuran untuk input string:
Penjelasan:
sumber
F # (.NET Core) ,
6761 byteCobalah online!
Input adalah a
string
dan 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.sumber
sed ,
3135 byteCobalah 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.
sumber
sed
. Sama di TIO.sed
Implementasi mana yang Anda gunakan dan bagaimana Anda memberikan input? (BTW, mengubah substitusi untuks/.\n.*\|.$//
memperbaikinya.)sed
implementasi 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.Python 2 ,
13110084 byteJawaban pertama saya di Code Golf!
-47 byte secara keseluruhan berkat @ SriotchilismO'Zaic
Cobalah online!
sumber
;
s alih-alih baris baru untuk menghindari lekukan. Juga tidak perlu ada spasi di antaraprint
dan''
a
string daripada daftar, Anda tidak perlu lagijoin
sama sekali dan Anda bisa sajaprint a
.x
.J , 12 byte
Cobalah online!
Masih 1 byte lebih lama dari Adám
K (oK) ,
1211 byte-1 byte terima kasih kepada ngn
Cobalah online!
sumber
{x,1_|x}@,\