Banyak orang di situs ini menggunakan bahasa esoterik , dan karena bahasa-bahasa ini tidak biasa dan sulit dimengerti, mereka akan sering menulis penjelasan dalam format tertentu. Misalnya, jika kodenya
abcdefghijklmnop
Dan bahasa ini digunakan #
untuk komentar, mereka akan menulis penjelasan seperti ini:
a #Explanation of what 'a' does
bc #Bc
d #d
e #Explanation of e
fgh #foobar
ij #hello world
k #etc.
l #so on
mn #and
op #so forth
Saya sering melakukan ini juga, tetapi setiap kali saya melakukan ini, saya merasa seperti membuat tata letak teks benar-benar menjengkelkan dan memakan waktu. Jadi saya ingin Anda membuat "Esolang-Comment-Template-Generator" untuk saya. Misalnya, jika kita mengabaikan komentar, kode sebelumnya memiliki templat ini:
a #
bc #
d #
e #
fgh #
ij #
k #
l #
mn #
op #
Tantangan:
Anda harus menulis program atau fungsi yang mengambil dua string sebagai input, dan menampilkan "Esolang-Comment-Templat" ini. Input pertama adalah kode, tetapi dengan bilah ( |
) disisipkan di mana baris baru pergi. Masukan kedua adalah apa yang akan kita gunakan untuk komentar. Jadi contoh terakhir kita akan memiliki ini untuk input:
"a|bc|d|e|fgh|ij|k|l|mn|op", "#"
Sayangnya, ini mengecualikan bilah agar tidak menjadi bagian dari input kode, tetapi tidak apa-apa. Anda dapat mengasumsikan bahwa input komentar akan menjadi satu karakter. Demi kesederhanaan, char komentar tidak akan menjadi bilah. Input kode hanya akan berisi ASCII yang dapat dicetak, dan tidak akan berisi baris baru.
Semoga Anda dapat menyimpulkan apa yang harus dilakukan dari testcases, tetapi saya akan mencoba mengklarifikasi beberapa hal.
Anda harus membagi input kode menjadi "bagian kode" di setiap bilah. Kemudian, setiap bagian dari kode adalah output pada barisnya sendiri dan dibiarkan dengan panjang semua kode sebelumnya (tidak termasuk bar). Kemudian, setiap baris diisi dengan spasi yang cukup sehingga dua karakter terakhir pada setiap baris adalah "Satu ruang tambahan" + "Karakter komentar".
Satu trailing newline diperbolehkan.
Ini adalah contoh lain. Untuk input
"Hello|World", "/"
Pertama bagian dari kode "Hello" dan yang kedua adalah "Dunia". Jadi itu harus memberikan output:
Hello /
World /
Berikut beberapa contoh lainnya:
Input:
"a|b|c|d|e|f|g", ","
Output:
a ,
b ,
c ,
d ,
e ,
f ,
g ,
Input:
"abcdefg", ":"
Output:
abcdefg :
Input:
"4|8|15|16|23|42", "%"
Output:
4 %
8 %
15 %
16 %
23 %
42 %
Input:
"E|ac|h s|ecti|on is| one c|haracte|r longer| than the| last!", "!"
Output:
E !
ac !
h s !
ecti !
on is !
one c !
haracte !
r longer !
than the !
last! !
Input:
"This|Code|has||empty||sections", "@"
Output:
This @
Code @
has @
@
empty @
@
sections @
Aturan:
Anda dapat mengambil input dan output ini dalam format apa pun yang masuk akal. Misalnya, membaca / menulis file, STDIN / STOUT, argumen fungsi / nilai pengembalian, dll. Seperti biasa, ini adalah kode-golf , jadi cobalah membuat kode Anda sesingkat mungkin dan Anda menang jika Anda bisa mendapatkan solusi terpendek dalam bahasa anda! Saya juga akan memilih solusi terpendek sebagai pemenang keseluruhan. Celah standar dilarang.
|
karakter akan menyenangkan, sehingga Anda dapat menjelaskan diri Anda sendiri|
)?Jawaban:
Pyth -
28272423 byteBisa bermain golf sedikit.Tampaknya banyak sekali!Cobalah online di sini .
sumber
Retina ,
3534 byteHitungan byte mengasumsikan penyandian ISO 8859-1.
Dua string input dipisahkan oleh spasi (yang tidak ambigu karena kita tahu bahwa pembatas komentar selalu berupa karakter tunggal).
Cobalah online!
sumber
Java 10,
189159 byte-30 byte mengkonversi Java 7 ke Java 10 dan mengoptimalkan loop.
Cobalah online.
Penjelasan:
sumber
Pyke,
312824 byteCoba di sini!
sumber
JavaScript (ES6), 92 byte
sumber
GNU sed (85 +1 untuk -r) 86
Input adalah string yang dipisahkan oleh spasi.
Pengujian:
input.txt:
Keluaran:
sumber
:
adalah fitur sed GNU / bug dan\S
saya pikir ekstensi, jadi mungkin judulnyaGNU sed
. Selain itu, kode yang bagus.Haskell,
139135 byteDisimpan 4 byte dengan menggariskan definisi.
Tidak Disatukan:
sumber
Groovy,
120113111 Bytestidak berserat *
(Draf Pertama dengan 120 Bytes)
tidak berserat *
Tes
sumber
.padRight(s.replace('|','').size()+1)+c)
Python 2,
125 124132 byte-1 byte terima kasih kepada @TuukkaX (tidak ada golf dari ruang
i, v
)Semua uji kasus pada ideone
sumber
c
sebagai komentar char, bukan#
.Python 2,
10710510299 byteDiuji dengan semua kasus uji di atas
EDIT Golfed off 2 byte dengan mengubah d = a.split ("|"); i = 0 ke d, i = a.split ("|"), 0 Tidak yakin bagaimana saya melewatkan yang satu itu. Terima kasih @liver Ni
3 byte lagi hilang. Terima kasih lagi.
Saran dari @Jonathan sebenarnya menyimpan 3 byte dan membawanya ke keajaiban 99. Terima kasih.
sumber
" "*i
hingga 2 bytelen(e)
sukafor e in d:z=len(e)....
menyimpan byte karena digunakan dua kali05AB1E ,
29383129 byteDapat dipastikan golf, tetapi setidaknya ini berfungsi sekarang ..
+9 byte karena
¡
(split) menghapus item kosong secara otomatis, jadi saya harus menambahkan'|„ǝʒ:'ǝ¡'ʒм
..-2 byte berkat @MagicOctopusUrn dengan mengubah
'|„ǝʒ:'ǝ¡'ʒм
ke'|¶:.BεðÜ}
(solusi saat ini tidak bekerja pada item dengan spasi tambahan, tapi saya berasumsi itu diizinkan sesuai dengan kasus uji).Cobalah online.
Penjelasan:
sumber
ǝʒ
.'|¶:.B
bisa bekerja tho.'|¶:.B
?.B
waktu kedua setelah menambahkan ruang sebelumnya..B
sudah ada.'|¶:.BεðÜ}εD®>úsg®+©s}.BεðIJ,
? 29 byte. Kembali ke iterasi 1 :)..B
terpecah pada baris baru, yang merupakan fitur yang tidak banyak orang tahu. Itu satu-satunya cara saya tahu untuk menjaga elemen kosong. Saya akan meminta ini sebagai fitur..¡
harus berarti terbelah, tetapi tetap elemen kosong ..PowerShell v2 +,
10399 byteMengambil input sebagai dua string,
-split
yang pertama pada pipa literal (karena split menggunakan sintaks regex), dan mengumpankan elemen ke dalam sebuah loop|%{...}
.Setiap iterasi, kami membangun string sebagai sejumlah ruang yang ditentukan oleh
$l
digabungkan dengan elemen saat ini. Untuk loop pertama,$l
inisialisasi ke$null
, yang akan dievaluasi di sini sebagai0
.String itu selanjutnya digabungkan dengan jumlah spasi lain (ditentukan oleh berapa lama
$a
jika kita-replace
d setiap pipa tanpa apa-apa, plus1
untuk padding tambahan antara kode dan komentar, minus.length
elemen saat ini, minus$l
berapa banyak ruang yang kita isi tersisa di iterasi ini), disatukan dengan karakter komentar kami$b
. Tersisa di saluran pipa.Kami kemudian memperbarui
$l
untuk iterasi berikutnya.Semua string yang dihasilkan ditinggalkan di pipeline, dan output melalui implisit
Write-Output
terjadi pada eksekusi program, dengan baris baru di antara mereka secara default.Contohnya
sumber
Vim,
3938 penekanan tombol-1 byte berkat DJMcMayhem
Diharapkan sebagai input buffer (misalnya file) yang karakter pertamanya adalah pembatas komentar, diikuti oleh kode, misalnya
#foo|bar|baz
.Penjelasan
("
_
" menunjukkan ruang literal.)sumber
mm
kem`
dan kemudian mengubah`m
ke<C-o>
Floroid - 94 byte
Menggunakan pendekatan yang mirip dengan @ JonathanAllan solusi Python '.
Testcases
sumber
C #
176167154 byteTidak disatukan
Solusi LINQ seharusnya 146 tetapi perlu
using System.Linq;
membawanya kembali ke 164:Solusi lama:
167 byte:
176 byte menggunakan interpolasi string
sumber
PHP,
120117116110109 byteatau
sumber
MATL ,
3331 byteCobalah online!
Penjelasan
Fungsi builtin
Yd
(blkdiag
), yang membangun matriks blok-diagonal dari inputnya, melakukan sebagian besar pekerjaan. Nilai isi dalam matriks adalah 0, dan karakter 0 diperlakukan sebagai ruang untuk menampilkan tujuan. Kode hanya akan terpecah|
, membangun matriks dari blok yang dihasilkan, dikonversi ke char, dan menambahkan dua kolom dengan simbol spasi dan komentar.Namun, kemungkinan bagian kosong di string input menjadi
rumitmenjadi membuat masalah lebih menarik: blok yang dihasilkan akan kosong dan dengan demikian tidak akan ditampilkan dalam matriks yang dihasilkan.Untuk mengatasi ini, kami memperkenalkan char 0 sebelum masing-masing
|
, jadi tidak ada blok yang kosong; dan kemudian dalam matriks char yang dihasilkan, kami menghapus kolom yang dibentuk oleh char 0 saja. Bagian kode yang tidak kosong akan memiliki beberapa karakter ASCII yang dapat dicetak, dan dengan demikian kolom yang dibentangnya akan bertahan. Bagian kosong akan menyumbang satu baris, tetapi tidak akan memperkenalkan kolom tambahan.sumber
|
( cocokkan subekspresi sebelum atau sesudah|
) benar-benar membutuhkannya, setidaknya di mesin regexp Matlab / OctavePyth, 30 byte
atau
Keduanya adalah program penuh yang mengambil input pada STDIN dari string komentar, dan kemudian string program, dipisahkan oleh baris baru.
Coba versi pertama online
Coba versi kedua daring
Bagaimana mereka bekerja
sumber
Dyalog APL 16.0 (non-bersaing),
4337 byteMeminta karakter komentar, lalu untuk kode.
Non-bersaing karena versi 16.0 lebih baru dari tantangan ini.
sumber
Perl, 63 byte
Termasuk +5 untuk
-Xpi
Jalankan dengan masukan pada STDIN dan karakter komentar setelah -i:
esolang.pl
:Solusi langsung yang benar-benar membosankan
sumber
Turtlèd , 35 byte (tidak bersaing)
Mengambil satu input, karakter terakhir adalah karakter komentar. Tidak berfungsi dengan karakter komentar sebagai spasi, tetapi saya menganggap itu tidak perlu.
Penjelasan:
sumber
Funky , 89 byte
Cobalah online!
sumber
Scala, 123 byte
Kode tes + Output:
sumber
Ruby,
9680 byteLihat di eval.in: https://eval.in/639012
Saya benar-benar harus belajar Retina.
sumber
Jelly , 41 byte
Sepertinya ini memiliki banyak peningkatan, dan mungkin terlalu banyak tautan ...
Uji di TryItOnline
Bagaimana?
sumber
CJam, 32 byte
Penjelasan
Cobalah online
sumber
GolfScript, 85 byte
Cobalah online
Pembaruan 2017 - GolfScript - 71 byte
Penjelasan
sumber
Jelly , 10 byte
Cobalah online!
sumber