Batalkan komentar untuk program COBOL!

64

COBOL adalah bahasa yang sangat tua, pada saat penulisan ini berusia 58 tahun. Sebenarnya sudah sangat tua sehingga memiliki kekhasan yang sangat menarik: enam karakter pertama dari setiap baris adalah komentar.

Mengapa ini, Anda bertanya? Nah, 6 karakter itu dimaksudkan untuk digunakan sebagai nomor baris, kembali pada hari di mana program tidak sepenuhnya digital dan diketik di komputer.

Selain itu, karakter ketujuh hanya bisa menjadi bagian dari set yang sangat kecil (biasanya *untuk mengomentari garis atau spasi untuk memisahkan nomor baris dari kode)

Tetapi bagaimana jika Anda menggunakan sistem yang lebih digital, dan Anda hanya menginginkan program mentah?

Sistem komentar

Ada dua jenis komentar di COBOL: komentar baris dan komentar "nomor baris" yang disebutkan di atas.

Nomor garis komentar sederhana adalah sederhana: hanya mengambil tujuh (enam ditambah satu spasi) karakter pertama dari setiap baris.

000000 apple
000001 banana
celery donuts

akan menjadi:

apple
banana
donuts

Komentar garis membuatnya sedikit lebih sulit. Komentar baris dimulai dengan tanda bintang yang *ditempatkan di posisi karakter ketujuh di baris, seperti:

000323* this is a comment

Ini bukan komentar baris:

*00000 this isn't a comment

Untuk menghapus komentar baris, cukup hapus seluruh baris.

Contoh berkomentar "program":

000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges

Versi tanpa komentar:

blah blah
oranges?
love me some oranges

Dengan kata lain, untuk menghapus tanda komentar pada sebuah string, hapus enam karakter pertama dari setiap baris, lalu kembalikan semua kecuali karakter pertama dari setiap baris yang tidak dimulai dengan bintang.

Tantangan

Buat program atau fungsi yang mengambil program yang dikomentari dan mengembalikan varian yang tidak diomortasikan.

Klarifikasi

  • Tanda bintang ( *) tidak akan pernah ditemukan di mana pun di luar tujuh karakter pertama pada sebuah baris (kami tidak meminta Anda memverifikasi sintaksis)
  • Setiap baris akan selalu memiliki setidaknya 7 karakter.
  • Anda mungkin menganggap karakter ketujuh selalu tanda bintang atau spasi.
  • Input atau output dapat berupa matriks atau daftar.
  • Hanya karakter ASCII yang dapat dicetak (ditambah baris baru) yang harus ditangani.
  • Anda dapat menampilkan dengan baris baru tambahan. Anda juga dapat berasumsi bahwa input tersebut akan memiliki baris tambahan, jika Anda memilihnya.

Mencetak gol

Karena ini adalah , jawabannya dengan byte paling sedikit menang!

PENOLAKAN: Saya tidak benar-benar tahu COBOL dan tidak mengklaim. Jika ada klaim tentang COBOL yang saya buat dalam pertanyaan ini salah, saya tidak bertanggung jawab.

Lirik
sumber
23
Nomor baris bukan komentar. Mereka adalah kolom. Tolong, istilahnya.
user207421
1
Semua contoh Anda memiliki ruang setelah *. Apakah ini suatu kebetulan?
Neil
6
Tua tidak secara otomatis menyiratkan buruk. Saya telah bekerja di toko Agile COBOL. Mereka bisa melakukan hal-hal di AS / 400 yang tidak bisa kita lakukan di Jawa.
Thorbjørn Ravn Andersen
1
Heh ... Saya benar-benar menulis parser COBOL CopyBook yang hanya berfungsi jika bidang tidak dikemas. Hanya mengubahnya menjadi JSON key:{key:{key:length,key:length}}. Hapus semua format data dan ketikkan data.
Magic Gurita Guci
4
Bisakah ada spasi dalam 6 karakter pertama?

Jawaban:

104

COBOL (GnuCOBOL), 191 + 17 = 208 byte

Saya "belajar" COBOL untuk jawaban ini, jadi mungkin tidak sepenuhnya golf.

Ini adalah program lengkap, mengambil input tentang apa yang saya anggap sebagai input standar dan menulis apa yang saya anggap sebagai output standar. Mungkin suatu hari saya akan kembali ke ini dan (1) menentukan apakah COBOL memiliki fungsi dan, jika demikian, (2) melihat apakah solusi fungsi akan lebih pendek.

Hitungan byte termasuk flag program dan compiler ( -freedan -frelax-syntax).

program-id.c.select i assign keyboard line sequential.fd i. 1 l pic X(80). 88 e value 0.open input i perform until e read i end set e to true end-read if not e and l(7:1)<>'*'display l(8:73).

Cobalah secara Online

Program tidak digabungkan

program-id. c.

select i assign to keyboard organization line sequential.

fd i.
    1 l pic X(80).
    88 e value 0.

open input i
perform until e
    read i
        end set e to true
    end-read
    if not e and l(7:1) <> '*'
        display l(8:73).

Keterbatasan

Outputnya, secara teknis, tidak benar. Dari penelitian sepintas saya, tampaknya satu-satunya cara praktis untuk menyimpan string dalam COBOL adalah dalam buffer ukuran tetap. Saya telah memilih ukuran buffer 80 karakter, karena ini adalah batas panjang garis untuk program format tetap. Ini menyajikan dua batasan:

  • Baris yang lebih panjang dari 80 karakter terpotong.
  • Baris yang lebih pendek dari 80 karakter diisi dengan spasi.

Saya kira ini bisa diterima karena, well, itu COBOL. Jika tidak, saya bersedia mencari alternatif.

Ucapan Terima Kasih

  • -166 bytes terima kasih kepada Edward H
  • -2 byte terima kasih kepada hornj
Jakob
sumber
10
Tanda bintang (*) tidak akan pernah ditemukan di mana pun di luar tujuh karakter pertama dalam satu baris ... namun ...;)
Cœur
@ Cœur Haha ya ... tapi solusi saya tidak menggunakan asumsi itu, jadi mungkin itu tepat!
Jakob
8
Anda memenangkan satu internet.
Joshua
@ Cœur kecuali dalam pernyataan KOMPUTE.
ClickRick
1
Selamat atas lencana emas Anda!
caird coinheringaahing
20

Python 2 , 39 38 37 byte

-1 byte terima kasih kepada LyricLy. -1 byte terima kasih kepada Mego.

lambda s:[i[7:]for i in s if'*'>i[6]]

Cobalah online!

I / O sebagai daftar string.

benar-benar manusiawi
sumber
2
Simpan byte dengan mengganti !=dengan <, karena titik kode ruang lebih rendah dari satu tanda bintang itu, dan karakter ketujuh akan selalu menjadi ruang atau tanda bintang.
LyricLy
Jadi, karakter ke-7 akan selalu menjadi spasi atau tanda bintang?
totallyhuman
Iya. You may assume the seventh character is always an asterisk or a space.
LyricLy
1
Simpan 1 byte denganif'*'!=i[6]
Mego
13

Perl 5 , 19 + 1 (-p) = 20 16 byte

-4 byte dengan saran Pavel

s/.{6}( |.*)//s

Cobalah online!

Xcali
sumber
2
Anda dapat menyimpan tiga byte jika Anda menggantinya (\*.*$| )dengan( |.*)
Pavel
Tidak sesingkat komentar Pavel, tetapi / /;$_=/\* /?$,:$'merupakan alternatif lain
Dom Hastings
Anda juga tidak perlu ^.
Pavel
11

V , 13 11 10 byte

Î6x<<
çª/d

Cobalah online!

Penjelasan

Î       ' On every line
  x     ' delete the first...
 6      ' 6 characters
   <<   ' and unindent the line (removes the leading space)
ç /     ' on every line
 ª      ' matching \*
   d    ' delete the line

Hexdump:

00000000: ce36 783c 3c0a e7aa 2f64                 .6x<<.../d
nmjcman101
sumber
Tidak bisa Anda lakukan 7xbukan 6x<<?
DJMcMayhem
1
Kemudian ia menghapus*
nmjcman101
Apakah akan berhasil menghapus lins dengan yang *pertama dan kemudian lakukan Î7x? (dengan asumsi * tidak bisa tidak dalam karakter 0-5)
12431234123412341234123
@ 12431234123412341234123 sayangnya tidak, karena mungkin ada *dalam 6 karakter pertama.
nmjcman101
9

Paradoc (v0.2.8 +), 8 byte (CP-1252)

µ6>(7#;x

Mengambil daftar garis, dan menghasilkan daftar garis yang tidak diomentari.

Penjelasan:

μ        .. Map the following block over each line (the block is terminated
         .. by }, but that doesn't exist, so it's until EOF)
 6>      .. Slice everything after the first six characters
   (     .. Uncons, so now the stack has the 6th character on top
         .. and the rest of the line second
    7#   .. Count the multiplicity of factors of 7 in the character
         .. (treated as an integer, so '*' is 42 and ' ' is 32)
      ;  .. Pop the top element of the stack (the rest of the line)...
       x .. ...that many times (so, don't pop if the 6th character was a
         .. space, and do pop if it was an asterisk)

Hai, saya menulis bahasa pemrograman golf. :)

Saya masih mengembangkan ini dan menambahkan / men-tweak sekelompok built-in setelah mencoba menulis ini sehingga ada cara yang lebih masuk akal untuk membedakan antara spasi dan tanda bintang daripada " 7#", tapi saya merasa seperti itu akan membuat ini tidak bersaing. Untungnya masih bekerja (ini hanya menggunakan fitur dari v0.2.8, yang saya lakukan tiga hari yang lalu).

betaveros
sumber
"Hai, saya menulis bahasa pemrograman golf." Apakah versi yang Anda gunakan dirilis sebelum atau setelah tantangan ini diposting?
Tiang
1
Ini berfungsi pada versi ini mulai tiga hari lalu: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros
Benar, Anda menyebutkan itu, tapi entah bagaimana itu tidak mendaftar secara eksplisit ...
Tiang
1
@Mast Tidak masalah.
Martin Ender
7

Oktaf, 23 byte

@(s)s(s(:,7)~=42,8:end)

Cobalah online!

rahnema1
sumber
4
Saya tidak pernah tahu Octave bisa melakukan string seperti itu ... Ambil itu, MATLAB. xD
Sanchises
Sejak R2016b memperkenalkan array string , saya cukup yakin ini akan bekerja di MATLAB juga @Sanchises! Saya hanya memiliki akses ke R2015b saat ini jadi saya tidak dapat mengkonfirmasi. MATLAB dapat melakukannya dalam 74 byte, mungkin lebih sedikit @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), di mana sarray sel, bukan array string. Menggunakan regexp atau sesuatu mungkin akan lebih pendek, tetapi metode yang saya tulis ini sebanding dengan metodologi dalam jawaban ini hanya untuk MATLAB lama
Wolfie
6

Jelly , 11 9 byte

ṫ€7Ḣ⁼¥Ðf⁶

Cobalah online!

Input dan output sebagai daftar garis.

-2 byte terima kasih kepada @EriktheOutgolfer dan @JonathanAllan

Bagaimana itu bekerja

ṫ€7Ḣ=¥Ðf⁶
 €           On each line:
ṫ 7            Replace the line with line[7:]
      Ðf     Keep all lines that meet condition:
     ¥         Dyad:
   Ḣ             First Element (modifies line)
    =            Equals
        ⁶    Space
fireflame241
sumber
7$€bisa€7
Erik the Outgolfer
turun ke 9 seperti:ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan
5

PowerShell , 32 byte

$input-replace'^.{6}( |.*)'-ne''

Cobalah online!

Input pipeline datang sebagai array string, -replacebekerja pada setiap string, dan -ne ''(tidak sama dengan string kosong) yang diterapkan pada array, bertindak untuk menyaring baris kosong.

TessellatingHeckler
sumber
4

C, 63 59 55 48 47 46 byte

Berkat " pengguna anonim " karena telah menyingkirkan byte lain.

Terima kasih kepada Felix Palmen karena mengingatkan saya pada " Anda dapat menganggap karakter ketujuh selalu merupakan tanda bintang atau spasi. ", Yang memangkas satu byte lagi.

f(char**a){for(;*a;++a)(*a)[6]&2||puts(*a+7);}

Gunakan seperti:

char** program = { "000000 apple", "000001 banana", "celery donuts", 0 };
f(program);

Cobalah online!

simon
sumber
3

Sebenarnya , 13 byte

⌠6@tp' =*⌡M;░

Input dan output dilakukan sebagai daftar string.

Penjelasan:

⌠6@tp' =*⌡M;░
⌠6@tp' =*⌡M    for each line:
 6@t             discard the first 6 characters
    p            pop the first character of the remainder
     ' =         is it a space?
        *        multiply the string by the boolean - returns the string if true, and an empty string if false
           ;░  filter out empty strings

Cobalah online!

Mego
sumber
3

Gaia , 9 byte

6>¦'*«⁈ḥ¦

Fungsi menerima daftar string dan mengembalikan daftar string.

Cobalah online!

Penjelasan

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each
Kucing Bisnis
sumber
Saya menghitung sepuluh karakter, dan karena tiga adalah non-ASCII, tidakkah mereka mengambil lebih dari satu byte?
WGroleau
@WGroleau dan «keduanya 1 karakter. Bahasa pegolf keluar yang menggunakan karakter non-ascii (mungkin kecuali untuk Neim) menggunakan penyandian khusus, yang memungkinkan semua non-ASCII dihitung sebagai satu byte. Ini adalah halaman kode Gaia .
Tn. Xcoder
@ Mr.Xcoder Neim juga memiliki penyandian.
Erik the Outgolfer
3

Pyth , 9 byte

Perhatikan bahwa ini hanya berfungsi jika setidaknya 1 baris bukan komentar dan setidaknya 1 baris adalah komentar. Semua solusi lain berfungsi dalam semua kasus.

-2 byte terima kasih kepada @pizzakingme !

m>d7.m@b6

Coba di sini!

Penjelasan

m>d7.m@b6     - Full program with implicit input. Takes input as a list of Strings.

m>d7          - All but the first 7 letters of 
    .m   (Q)  - The input, filtered for its minimal value using the < operator on
      @b6     - the 7th character -- note that "*" is greater than " "
              - Implicitly Output the result.

Pyth , 11 byte

tMfqhTdm>d6

Coba di sini!

Penjelasan

tMfqhTdm> d6 - Program Lengkap dengan input implisit. Mengambil input sebagai daftar String.

       m> d6 - Hapus 6 karakter pertama dari setiap baris.
    hT - Dapatkan karakter pertama masing-masing.
  fq d - Menjaga mereka yang memiliki karakter pertama tanda bintang.
tM - Hapus karakter pertama masing-masing.
            - Keluaran tersirat.

Pyth , 11 byte

m>d7fqd@T6Q

Coba di sini!

Penjelasan

m> d7fq @ T6dQ - Program lengkap. Mengambil input sebagai daftar String.

      @ T6 - Karakter keenam masing-masing.
    fq dQ - Menjaga garis yang memiliki spasi sebagai ^.
m> d7 - Pangkas 7 karakter pertama.
             - Output tersirat.

Pyth , 12 byte

tMfnhT\*m>d6

Coba di sini!

Penjelasan

tMfnhT \ * m> d6 - Program Lengkap dengan input implisit. Mengambil input sebagai daftar String.

        m> d6 - Hapus 6 karakter pertama dari setiap baris.
    hT - Dapatkan karakter pertama masing-masing.
  fn \ * - Saring yang tidak sama dengan tanda bintang.
tM - Hapus karakter pertama masing-masing.
             - Keluaran tersirat.

Pyth , 12 byte

m>d7fn@T6\*Q

Coba di sini!

Penjelasan

m> d7fn @ T6 \ * Q - Program lengkap. Mengambil input sebagai daftar String.

      @ T6 - Dapatkan karakter keenam dari setiap string
    fn \ * Q - Dan filter yang tidak sama dengan tanda bintang.
m> d7 - Pangkas 7 karakter pertama.
              - Output tersirat.
Tuan Xcoder
sumber
" Buat mereka yang memiliki asterisk karakter pertama. " Saya pikir Anda bermaksud "Simpan yang karakter pertama BUKAN asterisk."
Kevin Cruijssen
m>d7.m@b6harus bekerja pada 9 byte, menyalahgunakan yang *setelah ruang dalam urutan leksikografis
Dave
Saya dapat mengeditnya dengan tautan penjelasan / uji jika Anda mau!
Dave
@pizzakingme Saya akan senang jika Anda mengedit, karena saya di ponsel. Terima kasih banyak dan jangan lupa untuk memuji diri sendiri untuk solusi baru!
Tn. Xcoder
Apakah ini berfungsi jika semua baris adalah komentar baris? (Saya tidak yakin apakah Anda harus menangani kasus ini)
betaveros
3

GNU Sed, 19 + 2 = 21 karakter

Membutuhkan -Eargumen untuk sedmengaktifkan ekspresi reguler yang diperluas.

/^.{6}\*/d;s/^.{7}/
Daniel Schepler
sumber
Anda dapat melakukan hal yang sama dengan perl pria,s/^.{6}( |.*)//g
markasoftware
3

Java 8, 40 byte

Ekspresi reguler: hanya tentang, tetapi tidak cukup, alat yang salah untuk pekerjaan itu. Lambda dari Stringke String(menetapkan ke Function<String, String>). Input harus memiliki baris tambahan tambahan.

s->s.replaceAll("(?m)^.{6}( |.*\\n)","")

Cobalah secara Online

Ucapan Terima Kasih

Jakob
sumber
Alat yang tepat! :)
Olivier Grégoire
3

Haskell , 27 25 byte

Versi Laikoni lebih pendek dari versi saya:

f n=[x|' ':x<-drop 6<$>n]

Cobalah online!

Versi saya:

f n=[drop 7x|x<-n,x!!6<'*']

Cobalah online!

jferard
sumber
25 bytes: f n=[x|' ':x<-drop 6<$>n].
Laikoni
@Laikoni Itu bagus !! Saya tidak tahu apakah mungkin untuk mencocokkan pola dalam generator pemahaman daftar.
jferard
3

C (gcc) , 53 48 46 byte

x;main(y){for(y=&x;gets(y-6);x&2||puts(y+1));}

Cobalah online!

-5 byte: Sangat sulit untuk " keseluruhan program " ini turun ke ukuran yang sama dengan fungsi gurka . Sekarang menulis di luar batas (di kedua arah) dari array jenis yang salah dan bergantung pada sedikit bilangan bulat endian dan 4 byte untuk menemukan tanda bintang ... tapi hei, itu berfungsi;)

-2 byte: Baiklah, jika kita sudah menulis ke beberapa .bsslokasi "acak" , mengapa repot-repot mendeklarasikan array sama sekali! Jadi di sini datang program penanganan string yang menggunakan baik yang charjenis atau array.

Felix Palmen
sumber
Bagus! Dan *x&2membuat saya ingat, jadi saya harus bisa mencukur beberapa byte off jawaban saya :-) "Anda mungkin menganggap karakter ketujuh selalu tanda bintang atau ruang."
simon
@urka terima kasih: D -2, hehe
Felix Palmen
3

R, 47 45 byte

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)
Sven Hohenstein
sumber
Jika Anda mengambil input sebagai daftar string, saya pikir Anda dapat mempersingkat regex menjadi "^. {6} (|. * ​​$)" Untuk -6.
CriminallyVulgar
@KriminalVulgar Benar. Dalam hal ini, saya juga bisa menjatuhkan pe=Targumen. Namun, saya tidak yakin apakah input sebagai daftar string diperbolehkan.
Sven Hohenstein
Dari OP:Input or output may be a matrix or list.
totallyhuman
@CriminallyVulgar Masalahnya adalah keberadaan string kosong di output.
Sven Hohenstein
@ SvenHohenstein Ah tentu saja, saya tidak mempertimbangkan itu.
CriminallyVulgar
3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 byte

R	INPUT POS(6) (' '  REM . OUTPUT | '*') :S(R)
END

Cobalah online!

Pencocokan pola di SNOBOL sangat berbeda dari regex tetapi idenya di sini masih sama: Jika sebuah baris cocok dengan "enam karakter dan kemudian tanda bintang", hapus, jika tidak, hapus tujuh karakter pertama dari garis dan cetak hasilnya.

Ini sekarang benar-benar mengambil keuntungan lebih baik dari operator penugasan bersyarat SNOBOL.

Pola inilah POS(6) (' ' REM . OUTPUT | '*')yang diartikan sebagai:

Mulai dari posisi 6, cocokkan spasi atau tanda bintang, dan jika Anda cocok dengan spasi, tetapkan sisa baris ke OUTPUT.

Giuseppe
sumber
3

Vim, 14 byte

Ctrl-VG5ld:%g/\*/dEnter

Memuat file input sebagai buffer untuk diedit, lalu masukkan perintah di atas. Output adalah buffer baru.

David Heyman
sumber
2

Ruby , 39 38 36 29 23 22 20 + 1 = 21 byte

$_[/.{6}( |.*
)/]=''

Cobalah online!

Menggunakan -pbendera

Penjelasan:

The -pbendera menambahkan blok implisit sekitar kode, sehingga kode yang benar-benar akan dijalankan terlihat seperti ini:

while gets
    $_[/.{6}( |.*
)/]=''

    puts $_
end

getsmembaca sebaris teks dan menyimpan hasilnya dalam $_.

$_[/.../]=''menghapus kemunculan pertama regex ...di $_.

/.{6}( |.*\n)/cocok dengan 6 karakter apa pun di awal baris, diikuti spasi atau sisa baris. Karena spasi muncul pertama, itu akan mencoba untuk menghapus hanya 6 karakter pertama dan spasi sebelum mencoba untuk menghapus seluruh baris.

$_ kemudian dicetak, dan proses ini diulang untuk setiap baris.

Pavel
sumber
1
Metode panggilan di Ruby tidak perlu tanda kurung, menghapusnya akan menghemat satu byte.
m-chrzan
2

Pyke , 9 byte

36 4C 3E 23 64 DE 29 6D 74

Coba di sini!

Dapat dibaca:

6L>#d.^)mt

Coba di sini!

6L>        -   [i[6:] for i in input]
   #d.^)   -  filter(i.startswith(" ") for  i in ^)
        mt - [i[-1:] for i in ^]
Biru
sumber
2

JavaScript (ES6), 48 byte

s=>s.map(c=>c[6]<"*"?console.log(c.substr(7)):1)

Cobalah online!

sgtdck
sumber
1
Ini bukan fungsi, atau program lengkap karena mengasumsikan input disimpan z, yang tidak diizinkan di sini. Namun Anda dapat mengubahnya menjadi fungsi panah anonim, agar membuatnya valid.
caird coinheringaahing
1
@cairdcoinheringaahing Anda memang benar. Memperbarui solusinya - tidak yakin apa aturannya mengenai (dan )seputar fn, menambahkannya untuk memastikan.
sgtdck
1
Anda tidak memerlukan ()fungsi di sekelilingnya, tetapi jika tidak, fungsi ini akan terlihat baik.
caird coinheringaahing
2

> <>, 57 53 Bytes

>i~i~i~i~i~i~i67*=\
<o$/?:$/?=a:;?(0:i<
\~$/~\ $
/  <o\?/

coba online

Penjelasan

>i~i~i~i~i~i~i67*=    Read in the first seven bytes of the line
 i~i~i~i~i~i~         Read, and discard 6 characters
             i        Read the seventh
              67*=    Check if the seventh character was an 
                      asterisk (and leave that value on the stack );

<o$/?:$/?=a:;?(0:i<    Read characters until a newline or eof
                 i     Read the next character of the line
            ;?(0:      If it's a -1, terminate the program
       /?=a:           If it's a newline, break out of the loop
   /?:$                If the seventh character was not an asterisk
<o$                    Output this character
\~$/                   otherwise discard it

   /~\ $    Having reached the end of the line, output
/  <o\?/    the newline only if it was not a comment

Edit: 53 byte

>   i~i~i~i~i~i~i67*=\
/?=a<o/?$@:$@:$;?(0:i<
~   \~/

Pada dasarnya hal yang sama seperti sebelumnya, tetapi sedikit terstruktur

Sebagai catatan: Saya kecewa belum ada yang melakukan ini di cobol.

Sasha
sumber
2

C #, 160 145 90 89 byte

t=>{var o="";foreach(var s in i.Split('\n'))if(s[6]!=42)o+=s.Substring(7)+"\n";return o;}

Terima kasih kepada Pavel & auhmaan untuk mengurangi ukurannya.

snorepion
sumber
Selamat datang di PPCG! Saya sarankan menambahkan tautan coba online ke jawaban Anda sehingga orang lain dapat menguji kode Anda. Selain itu, jawaban bagus pertama (baik, kedua)!
LyricLy
Anda dapat membuat ini lebih singkat dengan menulis lambda dalam bentukt=>{...}
Pavel
@ LyricLy Saya mencoba melakukan itu, sebenarnya, tetapi untuk beberapa alasan, ini tidak berhasil di sana. Ini bekerja dengan sangat baik di aplikasi konsol VS.
snorepion
@Pavel Seperti itu? Saya tidak yakin apakah saya melakukannya dengan benar; Saya tidak pernah perlu menggunakan ekspresi lambda sebelumnya.
snorepion
Ya persis. Anda dapat mengujinya dengan menetapkannya ke func<string, string>.
Pavel
2

Python 3, 71 byte (tanpa regexp)

def f(s):
 for w in s.split('\n'):
  t=w[6:]
  if t[0]!='*':print(t[1:])

Berhasil!

>>> s="""000000 blah blah
000001* apples
000002 oranges?
000003* yeah, oranges.
000*04 love me some oranges"""
>>> f(s)
blah blah
oranges?
love me some oranges
Sagittarius
sumber
1

JavaScript, 44 34 byte

Dicoret 44 masih teratur 44.

6 byte disimpan berkat tsh

a=>a.replace(/^.{6}( |.*\n)/gm,'')

Cobalah online!


sumber
s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
tsh
s.match(/(?<=^.{6} ).*/mg) ESNext (Tidak Standar, Stage3) Chrome62 +
tsh
@ tsh. Sampai ada interpreter stabil yang memungkinkannya, saya kira itu tidak dihitung sebagai bahasa pemrograman yang valid.
Sepertinya ini tidak memberikan output yang benar jika baris terakhir adalah baris komentar.
LyricLy
@LyricLy. Itu karena saya berasumsi bahwa input akan selalu mengandung baris baru yang tertinggal. Anda bisa melihatnya berfungsi adalah ada baris kosong setelah input. Jika saya tidak boleh berasumsi, maka biaya perbaikan akan 1 byte (menambahkan? setelah \n).
1

C ++ (GCC), 121 112 byte

Terima kasih kepada @urka untuk menghemat 9 byte!

#import<bits/stdc++.h>
void f(std::list<std::string>l){for(auto s:l)if(s[6]-42)std::cout<<s.substr(7,s.size());}

Mengambil input sebagai daftar baris.

Cobalah online!

Steadybox
sumber
#import? Juga, saya pikir tidak masalah untuk menghilangkan standar termasuk.
simon
#importbukan C ++ standar, tetapi setidaknya GCC dan MSVC mendukungnya. Menghilangkan beberapa termasuk karya dengan C, tetapi tidak dengan C ++. Kode tidak berfungsi tanpa menyertakan, jadi mereka harus dihitung dalam total bytecount.
Steadybox
Aha, saya pikir Anda bisa melewatkan menyertakan karena Anda tidak melihat importjawaban python atau usingdalam jawaban C #. Juga, bukankah #include <bits/stdc++.h>jawaban Anda lebih pendek?
simon
@gurka Ya, akan lebih pendek. Terima kasih!
Steadybox
@gurka impor yang dihitung dalam jawaban Python, hanya saja Python memiliki banyak fungsi yang tidak perlu mengimpor. C # cenderung tidak menggunakan pernyataan karena umumnya lebih pendek untuk menulis system.foo()daripadausing system;foo()
Pavel
1

Java 8, 95 54 53 byte

s->s.filter(x->x.charAt(6)<33).map(x->x.substring(7))

-42 byte terima kasih @ OliverGrégoire , dengan menggunakan Stream<String>alih - alih Stringsebagai in- dan output.

Penjelasan:

Coba di sini.

s->                          // Method with Stream<String> as parameter and return-type
  s.filter(x->x.charAt(6)<33)//  Filter out all lines containing an asterisk as 7th char
   .map(x->x.substring(7))   //  And remove the first 7 characters from the remaining lines
                             // End of method (implicit / single-line body)
Kevin Cruijssen
sumber
Sepertinya Anda dapat menggunakan String[]atau List<String>sebagai input untuk -12 byte.
Jakob
Atau Stream<String>jika itu bisa membantu. Contoh:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire
1
Oh, perlu disaring ... lalu s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))sebesar 54 byte.
Olivier Grégoire
1
Gunakan <42alih-alih !=42karena "Anda dapat menganggap karakter ketujuh selalu merupakan tanda bintang atau spasi."
Olivier Grégoire
1
@ OlivierGrégoire Ah, ketinggalan aturan itu, kalau tidak saya akan melakukannya sendiri. Terima kasih atas koreksinya.
Kevin Cruijssen