Bir COBOL programını uncomment!


64

COBOL çok eski bir dildir, yazı yazarken 58 yaşındadır. Aslında o kadar eski ki, çok ilginç bir tuhaflığa sahip: her satırın ilk altı karakteri yorum.

Neden bu soruyorsun? Eh, bu 6 karakter, programların tamamen dijital olmadığı ve bir bilgisayara yazıldığı gündeki satır numaraları olarak kullanılmak üzere tasarlandı.

Ek olarak, yedinci karakter yalnızca çok küçük bir kümenin parçası olabilir (genellikle *satır satırını koddan ayırmak için satır veya boşluk yorumlamaktır)

Peki ya daha dijital bir sistemdeyseniz ve sadece ham programı istiyorsanız

Yorum sistemi

COBOL'de iki tür yorum vardır: satır yorumları ve yukarıda belirtilen "satır numarası" yorumları.

Sıra dışı satır numaraları basittir: her satırdan ilk yedi (altı artı tek boşluk) karakterini almanız yeterlidir.

000000 apple
000001 banana
celery donuts

olacaktı:

apple
banana
donuts

Satır yorumları biraz daha zorlaştırır. Satırdaki *yedinci karakter konumuna yerleştirilmiş bir yıldız işaretiyle bir satır yorumu başlatılır , şöyle:

000323* this is a comment

Bu bir satır yorumu değildir:

*00000 this isn't a comment

Bir satır yorumunu yorumlamak için, tüm satırı kaldırmanız yeterlidir.

Bir program "program" yorumladı:

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

Açıklanmayan sürüm:

blah blah
oranges?
love me some oranges

Başka bir deyişle, bir dizgenin satırını açmak için, her satırın ilk altı karakterini kaldırın, ardından yıldızla başlamayan her satırın ilk karakterinin dışındaki hepsini döndürün.

Meydan okuma

Yorumlanmış bir programı alan ve yorumlanmamış değişkenini döndüren bir program veya işlev oluşturun.

Açıklamalar

  • Yıldızlar (* ) hiçbir zaman bir satırın ilk yedi karakterinin dışında hiçbir yerde bulunmaz (sizden sözdizimini doğrulamanızı istemiyoruz)
  • Her satırda her zaman en az 7 karakter bulunur.
  • Yedinci karakterin her zaman bir yıldız veya boşluk olduğunu varsayabilirsin.
  • Giriş veya çıkış bir matris veya liste olabilir.
  • Yalnızca yazdırılabilir ASCII karakterleri (artı yeni satır) kullanılmalıdır.
  • İzleyen bir newline ile çıktı alabilirsiniz. İsterseniz, girişin izleyen bir yeni satır alacağını da varsayabilirsiniz.

puanlama

Bu , en az bayt olan cevap kazanır!

YASAL UYARI: Aslında COBOL'u tanımıyorum ve iddiada bulunmadım. COBOL ile ilgili bu soruda yaptığım iddialardan herhangi birinin yanlış olması durumunda sorumluluk kabul etmem.


23
Satır numaraları yorum değildir. Onlar bir sütun. Terminoloji lütfen.
user207421

1
Örneklerin hepsinden sonra bir boşluk var *. Bu bir tesadüf mü?
Neil

6
Eski otomatik olarak kötü anlamına gelmez. Çevik bir COBOL mağazasında çalıştım. AS / 400'de Java'da yapamadığımız şeyleri yapabilirlerdi.
Thorbjørn Ravn Andersen

1
Heh ... Aslında sadece alanlar dolu değilse işe yarayan bir COBOL CopyBook ayrıştırıcısı yazdım. Sadece JSON'a dönüştürür key:{key:{key:length,key:length}}. Tüm biçimlendirme verilerini ve veri yazmayı olsa da sorar.
Magic Octopus Urn,

4
İlk 6 karakterde boşluk olabilir mi?

Yanıtlar:


104

COBOL (GnuCOBOL), 191 + 17 = 208 bayt

Bu cevap için COBOL'u "öğrendim", bu yüzden muhtemelen tam olarak golf oynamamıştır.

Bu, standart girdi olduğunu düşündüğüm şeyin girişini alan ve standart çıktı olduğunu düşündüğüm şeyi yazan tam bir programdır. Belki bir gün buna geri döneceğim ve (1) COBOL'un işlevlerinin olup olmadığını belirleyeceğim ve eğer öyleyse, (2) bir işlev çözümünün daha kısa olup olmayacağını göreceksiniz.

Bayt sayısı, program ve derleyici bayraklarını ( -freeve -frelax-syntax) içerir.

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).

Çevrimiçi Deneyin

Ungolfed programı

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).

Sınırlamalar

Çıktı teknik olarak doğru değil. Benim araştırmalarımdan, bir diziyi COBOL'de saklamanın tek pratik yolu, sabit boyutlu bir tamponda görünmesi. Sabit formatlı programlar için satır uzunluğu sınırı olduğundan 80 karakterlik bir tampon boyutu seçtim. Bu iki sınırlama sunar:

  • 80 karakterden uzun satırlar kesiliyor.
  • 80 karakterden kısa çizgiler boşluklarla sağa doludur.

Sanırım bu kabul edilebilir bir şey çünkü peki, bu COBOL. Olmazsa alternatiflere bakmak isterim.

Teşekkür

  • Edward H sayesinde -166 bayt
  • Hornj sayesinde -2 bayt

10
Yıldız işaretleri (*) hiçbir zaman bir satırın ilk yedi karakterinin dışında hiçbir yerde bulunmaz ... ... ama);)
Augur

@ Cœur Haha evet ... ama çözümüm bu varsayımı kullanmıyor, bu yüzden belki uygun!
Jakob

8
Bir interneti kazandın.
Joshua,

Bir COMPUTE deyimi dışında @ Cœur.
ClickRick

1
Altın rozetin için tebrikler!
caird coinheringaahing

20

Python 2 , 39 38 37 bayt

LyricLy sayesinde -1 bayt. Mego sayesinde -1 bayt.

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

Çevrimiçi deneyin!

Dizelerin listesi olarak G / Ç.


2
Bir boşluğun kod noktası yıldız işaretinden düşük olduğundan ve yedinci karakter her zaman bir boşluk veya yıldız işareti olacağından, !=ile değiştirerek bir bayt kaydedin <.
LyricLy

Öyleyse, 7. karakter her zaman bir boşluk mu, yıldız mı olacak?
tamamen insan

Evet. You may assume the seventh character is always an asterisk or a space.
LyricLy

1
1 bayt ile kaydetif'*'!=i[6]
Mego


11

V , 13 11 10 bayt

Î6x<<
çª/d

Çevrimiçi deneyin!

açıklama

Î       ' 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

7xBunun yerine yapamaz mısın 6x<<?
DJMcMayhem

1
Sonra siler*
nmjcman101

*Önce ile sonra da siloları silmek işe yarar Î7xmı? (bir farz
edersek

@ 12431234123412341234123 Maalesef hayır, çünkü *ilk 6 karakterde bir tane olabilir.
nmjcman101

9

Paradok (v0.2.8 +), 8 bayt (CP-1252)

µ6>(7#;x

Satırların bir listesini alır ve yorumlanmamış satırların bir listesini verir.

Açıklama:

μ        .. 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)

Merhaba, bir golf programlama dili yazdım. :)

Bunu geliştirmeye devam ediyorum ve bunu yazmaya çalıştıktan sonra bir sürü yerleşik yapı ekledim / çimdikledim, böylece bir boşlukla yıldız işareti arasında " 7#" den farklılaşmanın daha makul yolları olabilir , ancak bunun rekabetsiz hale geleceğini düşünüyorum. Hala işe yaradığı için şanslı (bu sadece üç gün önce işlediğim v0.2.8'deki özellikleri kullanıyor).


"Merhaba, bir golf programlama dili yazdım." Kullandığınız sürüm bu meydan okuma yayınlanmadan önce veya sonra yayınlandı mı?
Mast

1
Bu sürümde üç gün önce çalışır: github.com/betaveros/paradoc/releases/tag/v0.2.8
betaveros

Doğru, bundan bahsettin, ama bir şekilde açıkça kayıt olmadı ...
Mast


7

Octave, 23 bayt

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

Çevrimiçi deneyin!


4
Octave'ın böyle ipler yapabileceğini hiç bilmiyordum ... Al bunu MATLAB. xD
Sanchises

R2016b'nin string dizileri tanıtılmasından bu yana MATLAB'da @Sanchises'ın da işe yarayacağından eminim! Sadece şu anda R2015b'ye erişebiliyorum, bu yüzden onaylayamıyorum. MATLAB bunu 74 baytta yapabilir, muhtemelen daha azdır @(s)cellfun(@(r)r(8:end),s(cellfun(@(r)r(7)~=42,s)),'uniformoutput',false), nerede sbir hücre dizisidir, bir dizi dizisi değil. Regexp veya başka bir şeyin kullanılması muhtemelen daha kısa olacaktır, ancak yazdığım yöntem bu cevaptaki metodoloji ile sadece eski MATLAB
Wolfie

6

Jöle , 11 9 bayt

ṫ€7Ḣ⁼¥Ðf⁶

Çevrimiçi deneyin!

Satır listesi olarak giriş ve çıkış.

@EriktheOutgolfer ve @JonathanAllan sayesinde -2 bayt

Nasıl çalışır

ṫ€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

7$€olabilir€7
Outgolfer Erik,

9 gibi aşağı çekmek:ṫ€7Ḣ⁼¥Ðf⁶
Jonathan Allan


4

C, 63 59 55 48 47 46 bayt

" İsimsiz bir kullanıcı " sayesindeBaşka bir bayttan kurtulmak için " " .

Felix Palmen'e , " Yedinci karakterin her zaman bir yıldız veya boşluk olduğunu varsayabilirsin " olduğunu hatırlattığı için teşekkür ederim, bir bayt daha kesildi.

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

Gibi kullanın:

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

Çevrimiçi deneyin!


3

Aslında , 13 bayt

⌠6@tp' =*⌡M;░

Giriş ve çıkış, dizelerin bir listesi olarak yapılır.

Açıklama:

⌠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

Çevrimiçi deneyin!


3

Gaia , 9 bayt

6>¦'*«⁈ḥ¦

Dizelerin listesini kabul eden ve dizelerin listesini döndüren bir işlev.

Çevrimiçi deneyin!

açıklama

6>¦        Remove the first 6 characters of each string
   '*«⁈    Filter out ones that start with *
       ḥ¦  Remove the initial space from each

On karakter sayıyorum ve üçü ASCII olmadığından, bayttan daha fazlasını almıyorlar mı?
WGroleau

@WGroleau ve «ikisi de 1 karakterdir. ASCII olmayan karakterleri kullanan (belki Neim hariç) golf dillerinde, ASCII olmayanların hepsinin tek bayt olarak sayılmasını sağlayan özel kodlamalar kullanılır. İşte Gaia'nın kod sayfası .
Bay Xcoder

@ Mr.Xcoder Neim'in de kodlaması var.
Outgolfer Erik,

3

Pyth , 9 bayt

Bunun yalnızca en az 1 satır bir yorum olmaması ve en az 1 satır olması durumunda işe yaradığını unutmayın. bir açıklama. Diğer tüm çözümler her durumda çalışır.

@Pizzakingme sayesinde -2 bayt !

m>d7.m@b6

Burada dene!

açıklama

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 bayt

tMfqhTdm>d6

Burada dene!

açıklama

tMfqhTdm> d6 - Örtük girişli Tam Program. Dizelerin bir listesi olarak girdi alır.

       m> d6 - Her satırın ilk 6 karakterini kaldır.
    hT - Her birinin ilk karakterini al.
  fq d - İlk karaktere sahip olanları yıldız olarak tutun.
tM - Her birinin ilk karakterini kaldır.
            - Çıktı Kapalı.

Pyth , 11 bayt

m>d7fqd@T6Q

Burada dene!

açıklama

m> d7fq @ T6dQ - Tam program. Dizelerin bir listesi olarak girdi alır.

      @ T6 - Her birinin altıncı karakteri.
    fq dQ - Boşluğu olan satırları ^ olarak tutar.
m> d7 - İlk 7 karakteri keser.
             - Çıktı kapalı.

Pyth , 12 bayt

tMfnhT\*m>d6

Burada dene!

açıklama

tMfnhT \ * m> d6 - Örtük girişli Tam Program. Dizelerin bir listesi olarak girdi alır.

        m> d6 - Her satırın ilk 6 karakterini kaldır.
    hT - Her birinin ilk karakterini al.
  fn \ * - Yıldız işaretine eşit olmayanları filtreler.
tM - Her birinin ilk karakterini kaldır.
             - Çıktı Kapalı.

Pyth , 12 bayt

m>d7fn@T6\*Q

Burada dene!

açıklama

m> d7fn @ T6 \ * Q - Tam program. Dizelerin bir listesi olarak girdi alır.

      @ T6 - Her dizenin altıncı karakterini al
    fn \ * Q - Ve yıldız işaretine eşit olmayanları da filtreler.
m> d7 - İlk 7 karakteri keser.
              - Çıktı kapalı.

" İlk karaktere yıldız işareti koy. " İlk karaktere yıldız işareti koymuş olanları sakla. "
Kevin Cruijssen

m>d7.m@b69 baytta çalışmalı, bunun *sözlüksel sıraya göre boşluktan sonra kullanılması
Dave

İsterseniz açıklama / test bağlantısı ile düzenleyebilirim!
Dave,

@pizzakingme Düzenlemek istersen sevinirim, çünkü cep telefonum var. Çok teşekkürler ve yeni çözüm için kendinize kredi vermeyi unutmayın!
Bay Xcoder

Bu, tüm satırların satır yorumu olması halinde çalışır mı? (Bu davayı ele almanız gerekip gerekmediğinden emin değilim)
betaveros

3

GNU Sed, 19 + 2 = 21 karakter

Genişletilmiş düzenli ifadeleri etkinleştirmek -Eiçin argüman gerektirir sed.

/^.{6}\*/d;s/^.{7}/

perl adamla aynı şeyi yapabilirsin,s/^.{6}( |.*)//g
markasoftware



3

C (gcc) , 53 48 46 bayt

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

Çevrimiçi deneyin!

-5 bayt: Bunu almak çok zor oldu " bütün programı " gurka'nın işlevi ile aynı boyuta getirmek . Şimdi yanlış türde bir dizi sınırları (her iki yönde de) yazmak ve yıldız işareti bulmak için küçük endian ve 4 byte tam sayılarına dayanıyor ... ama hey, işe yarıyor;)

-2 bayt: Zaten "rastgele" bir .bssyere yazdıysak, neden bir dizi bildirmekle uğraşmıyorsun ? Yani işte bu, ikisini de kullanmayan dizi işleme programıchar tür ne de bir dizi.


Güzel! Ve *x&2"Sen yedinci karakteri daima yıldız veya bir boşluk olduğunu varsayalım olabilir" beni hatırla yapılmış, bu yüzden cevabım :-) kapalı bazı bayt tıraş gerekir
Simon

@ gurka teşekkürler: D -2, hehe
Felix Palmen

3

R, 47 45 bayt

function(x)gsub("(?m)^.{6}( |.*\\n)","",x,,T)

Girdiyi bir dizge listesi olarak alırsanız, regex'i -6 için "^. {6} (|. * ​​$)" Olarak kısaltabileceğinizi düşünüyorum.
CriminallyVulgar

@CriminallyVulgar Doğru. Bu durumda, pe=Ttartışmayı da bırakabilirim . Ancak, bir dizge listesi olarak girişe izin verilip verilmediğinden emin değilim.
Sven Hohenstein

Input or output may be a matrix or list.
OP’den

@CriminallyVulgar Sorun çıktıda boş dizelerin varlığıdır.
Sven Hohenstein

@SvenHohenstein Ah tabii ki, bunu düşünmemiştim.
CriminallyVulgar

3

SNOBOL4 (CSNOBOL4) , 72 70 66 50 bayt

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

Çevrimiçi deneyin!

SNOBOL içindeki kalıp eşleştirme regex'ten oldukça farklı, ancak buradaki fikir hala aynı: Eğer bir çizgi "altı karakter ve sonra bir yıldız işareti" ile eşleşiyorsa, onu kaldırın, aksi takdirde çizginin ilk yedi karakterini kaldırın ve sonucu yazdırın.

Bu aslında SNOBOL'un şartlı görevlendirme operatöründen daha iyi bir şekilde faydalanıyor.

Desen şöyle POS(6) (' ' REM . OUTPUT | '*')yorumlanır:

6. pozisyondan başlayarak, bir boşlukla veya yıldızla eşleştirin ve bir boşlukla eşleşirseniz, satırın kalanını atayın OUTPUT.


3

Vim, 14 bayt

Ctrl-VG5ld:%g/\*/dEnter

Giriş dosyasını düzenlemek için tampon olarak yükleyin, sonra yukarıdaki komutları girin. Çıktı yeni arabellektir.


2

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

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

Çevrimiçi deneyin!

-pBayrak kullanır .

Açıklama:

-pBayrak kodunun çevresindeki örtülü blok ekler, böylece aslında koþulur kod şöyle görünür:

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

    puts $_
end

getsbir metin satırı okur ve sonucunu saklar $_.

$_[/.../]=''regex ilk oluşumunu ortadan kaldırır ...içinde $_.

/.{6}( |.*\n)/Bir satırın başlangıcındaki herhangi bir karakterin 6'sı ile eşleşir, ardından satırın kalanını veya boşluk bırakır. Boşluk ilk önce göründüğü için, tüm çizgiyi kaldırmayı denemeden önce yalnızca ilk 6 karakteri ve boşluğu kaldırmaya çalışır.

$_ sonra yazdırılır ve bu işlem her satır için tekrarlanır.


1
Ruby'deki yöntem çağrıları parantez gerektirmez, bunları kaldırmanız bayt kazandıracaktır.
m-chrzan

2

Pyke , 9 bayt

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

Burada dene!

Okunabilir:

6L>#d.^)mt

Burada dene!

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


2

JavaScript (ES6), 48 bayt

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

Çevrimiçi deneyin!


1
Bu ne işlevdir ne de girişin saklandığı varsayıldığı gibi tam bir programdır ve zburada izin verilmez. Ancak, geçerli kılmak için onu adsız bir ok işlevine dönüştürebilirsiniz.
caird coinheringaahing

1
@cairdcoinheringaahing kesinlikle haklısın. Çözüm güncellendi - fn ile ilgili (ve )fn ile ilgili kuralların ne olduğundan emin değil, emin olmak için bunları ekledi.
sgtdck

1
()Fonksiyonun etrafına ihtiyacınız yok , ancak aksi halde iyi görünüyor.
caird coinheringaahing

2

> <>, 57 53 Bayt

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

çevrimiçi dene

açıklama

>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

Düzenleme: 53 bayt

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

Temelde eskisi gibi aynı, ancak biraz yeniden yapılandırıldı

Yan not olarak: Henüz kimsenin kobolda yapmadığını hayal kırıklığına uğrattım.


2

C #, 160 145 90 89 bayt

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

Pavel ve auhmaan'a bedeninizi küçültdüğü için teşekkürler.


PPCG'ye Hoşgeldiniz! Diğerlerinin kodunuzu test edebilmesi için cevabınıza çevrimiçi bir deneme bağlantısı eklemenizi öneririz . Bunun yanı sıra, büyük önce (iyi, ikinci) cevap!
LyricLy

Şeklinde bir lambda yazarak bu kısaltmayı yapabilirsinizt=>{...}
Pavel

@LyricLy Bunu yapmaya çalıştım, aslında, ama nedense, bu orada çalışmıyor. Yine de bir VS konsolu uygulamasında mükemmel çalışıyor.
horlama

@Pavel Öyle mi? Tamamen doğru yaptım mı emin değilim; Daha önce hiç lambda ifadesi kullanmaya ihtiyacım olmadı.
horlama

Evet kesinlikle. A atayarak test edebilirsiniz func<string, string>.
Pavel

2

Python 3, 71 bayt (düzenli ifade yok)

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

İşe yarıyor!

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


1

JavaScript, 44 34 bayt

Geçiş 44 hala normal 44.

Tsh sayesinde 6 bayt kaydedildi

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

Çevrimiçi deneyin!


s=>s.replace(/^.{6}( |\*.*\s)?/mg,'')
tsh


@tsh. Buna izin veren kararlı bir tercüman olana kadar geçerli bir programlama dili sayılmaz.

Son satır bir yorum satırı ise bu doğru çıktı veriyor gibi görünmüyor.
LyricLy,

@LyricLy. Bunun nedeni, girişin her zaman sondaki yeni bir satır içereceğini varsaydım. Bunu görebiliyorum çalışır girdi sonra boş bir çizgi vardır olduğunu. Bunu varsaymamam gerekirse, düzeltme 1 bayta mal olur ( ?sonradan eklenir \n).

1

C ++ (GCC), 121 112 bayt

9 byte tasarruf ettiğin için @gurka'ya teşekkürler!

#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());}

Satır listesi olarak girdi alır.

Çevrimiçi deneyin!


#import? Ayrıca, standart içermediğini atlamanın doğru olduğunu düşünüyorum.
Simon

#importstandart C ++ değil, en azından GCC ve MSVC bunu destekliyor. Bazıları atlamak, C ile çalışır ancak C ++ ile çalışmaz. Kod, içermediği sürece çalışmaz, bu nedenle toplam bytecount içinde sayılmalıdır.
Steadybox

Aha, importpython cevabında veya usingC # cevabında hiç bir şey göremediğiniz için sadece içerilenleri atlayabileceğinizi düşündüm . Ayrıca, #include <bits/stdc++.h>cevabınız için daha kısa olmaz mıydı ?
simon,

@gurka Evet, daha kısa olurdu. Teşekkürler!
Steadybox

ithalat @gurka edilir Python cevapları sayılır, Python ithal gerekmez fonksiyonları bir yeri vardır sadece. C # ifadesi kullanma eğiliminde değildir, çünkü genellikle yazmaktan system.foo()daha kısadırusing system;foo()
Pavel

1

Java 8, 95 54 53 bayt

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

-34 byte @ OliverGrégoire sayesinde , Stream<String>yerine Stringve çıktısı kullanmak yerine .

Açıklama:

Burada dene.

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)

Bir kullanabilirsiniz benziyor String[]Or List<String>-12 bayt için girdi olarak.
Jakob

Ya Stream<String>da yardım edebilirse. Örnek:s->s.map(x->x.charAt(6)!=42?x.substring(7):"")
Olivier Grégoire

1
Oh, filtrelemelisin ... sonra s->s.filter(x->x.charAt(6)!=42).map(x->x.substring(7))54 byte.
Olivier Grégoire

1
<42Bunun yerine !=42"Yedinci karakterin her zaman bir yıldız veya boşluk olduğunu varsayabilirsin" yerine kullanın .
Olivier Grégoire

1
@ OlivierGrégoire Ah, bu kuralı kaçırdı, aksi takdirde kendim yapardım. Düzeltme için teşekkürler.
Kevin Cruijssen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.