Code Golf Measurer © 2019


20

Code Golf Measurer © 2019

Birlikte kullanılan onaltılık pompalar şöyle xxdgörünür:

00000000: 666f 6f20 6261 7220 7370 616d 2065 6767  foo bar spam egg
00000010: 730a                                     s.

Göreviniz bu formdaki bir hexdump'ı kullanılan bayt sayısına dönüştürmektir.

Kurallar:

  • Her zamanki boşluklar yasaktır.
  • Bu , bayt en kısa geçerli cevap kazanır.
  • Yeni satırı metnin sonuna ( 0a) ekleyebilir veya eklemeyebilirsiniz . Bu, hexdump bir satırsonu ( 0a) ile biterse , bu girdinin çıktısını bir azaltabileceği anlamına gelir .
  • Boş bir giriş (kelimenin tam anlamıyla hiçbir şey: boş liste / dize / vb.) 0 çıktısı almalıdır.
  • Giriş herhangi bir biçimde alınabilir
  • Giriş, kontrol karakteri olmadan geçerli ASCII olacak
  • Giriş tüm hexdump'ı içermelidir

Test senaryoları:

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 2120 4865  Hello, world! He
00000010: 6c6c 6f2c 2077 6f72 6c64 210a            llo, world!.

28 veya 27 döndürür

00000000: 0a                                       .

1 veya 0 döndürür

00000000: 6368 616c 6c65 6e67 650a                 challenge.

10 veya 9 döndürür

00000000: 4865 6c6c 6f2c 2077 6f72 6c64 21         Hello, world!

13 döndürür


0 döndürür (Bu tam anlamıyla hiçbir şey değildir: boş liste / dize / vb.)

Standart olmayan diller için açıklamalar iyi olurdu.


Girdinin ascii olduğunu varsayabilir miyiz? Kontrol karakterleri içerebilir mi? Giriş kuralları nelerdir? Bazı diller girişi birden çok satır üzerinden yapamaz. Son çizgiyi tüm çizgiler eşit uzunlukta olacak şekilde doldurabilir miyiz? Neden boş girdi dahil edilmeli?
Stewie Griffin

@StewieGriffin Evet; Hayır; Evet; çünkü xxdboş bir dize beslenirse hiçbir şey çıktılamaz.
gadzooks02

1
@StewieGriffin Ben yanıtlarken yorumunuzu düzenlediniz, işte bir genişleme: Evet; Hayır; tüm dökümü dahil edilirse, istediğiniz şekilde girilebilir; Son cevaba bakınız; Evet; Çünkü
xxd

1
@JonathanAllan Ah evet, iyi tespit ettim.
gadzooks02

1
Sağda ASCIIfied verileri içermeyen bir hexdump formatı saymak ilginç olabilir. Herkes sadece altıgen kısmı soyup geri kalanını byte saymaya gidiyor. Eğer bu sadece onaltılık son satırın son satırı verildiğinde bunu yapmak olsaydı, bu onaltılık sayıyı (konum) ayrıştırmaya ve o satırdaki onaltılık basamak sayısını saymaya zorlardı. ( Makine kodu cevapları için objdumpsökme veya nasmlistelere bakarken elimle yaptığım gibi .) Sanırım bunu kum havuzuna göndermeliyim ...
Peter Cordes

Yanıtlar:


12

Retina 0.8.2 , 8 bayt

.{51}

.

Çevrimiçi deneyin! Açıklama:

.{51}

Her satırın ilk 51 karakterini silin. (Satırlar yalnızca 52 ila 67 karakter içerebilir, bu nedenle bu satır her zaman bir kez eşleşir.)

.

Kalan yeni satır olmayan karakterleri sayın.

Boş girişin desteklenmesi gerekmiyorsa 7 bayt:

.{52}


Çevrimiçi deneyin! Açıklama:

.{52}

Her satırın ilk 52 karakterini silin. (Satırlar yalnızca 52 ila 67 karakter içerebilir, bu nedenle bu satır her zaman bir kez eşleşir.)


Kalan karakter sayısından (yeni satırlar dahil) 1 daha fazla sayın.


7 ile &`.{52}.
Grimmy

@Grimy Bu sadece ... harika ... bunu kendi cevabınız olarak göndermelisiniz.
Neil

İlk başta fark etmedim ama aslında neredeyse aynı bir cevap var .
Grimmy


7

V (vim) , 7 bayt

Î51x
Ø.

Çevrimiçi deneyin!

Açıklama:

Î       " On every line...
 51x    "   Delete the first 51 characters
Ø.      " Count the number of remaining characters on any line

HexDump:

00000000: ce35 3178 0dd8 2e                        .51x...


5

APL (Genişletilmiş Dyalog) , 18 bayt

Tam program. Dizelerin (örneğin karakter listelerinin) listesini ister.

2÷⍨≢∊(1↓≠⊆⊢)¨49↑¨⎕

Çevrimiçi deneyin!

 Komut istemi

49↑¨ her birinden ilk 49 karakteri al

(Her birine aşağıdaki tacit işlevini uygulayın:

 argüman

 karakter koşular halinde doğramak

 dolgu karakterinden farklı (boşluk)

1↓ ilk "kelimeyi" bırak

ϵ nlist (düzleştir)

 çetele

2÷⍨ ikiye böl


4

Jöle , 5 bayt

Ẉ_51S

Tamsayı bayt sayısını veren satırların listesini kabul eden bir monadik Bağlantı.

Çevrimiçi deneyin!

Nasıl?

Ẉ_51S - Link: list of lists of characters, H
Ẉ     - length of each (line in H)
  51  - literal fifty-one
 _    - subtract (vectorises)
    S - sum

Satır listesini kabul edebilirsiniz. Ayrıca, bir açıklama eklemek ister misiniz?
gadzooks02

Ah, boş giriş boş bir liste mi yoksa tek bir boş satırlı bir liste mi? (Bu, bir son durum olduğu
Jonathan Allan

Bu ve boş liste / string / etc. Bunu biraz açıkladım.
gadzooks02

Teşekkürler, şimdi açıklama eklendi.
Jonathan Allan

3

C (gcc) , 64 55 bayt

r;s[];f(l){while(*s=0,gets(s),l=strlen(s))r+=l-51;l=r;}

Çevrimiçi deneyin!

YSC sayesinde 9 bayt tıraş oldu!

Arnauld'un JavaScript çözümünden esinlenerek muhtemelen uzun girdiler için başarısız olan daha kırılgan bir sürüm:

C (gcc) , 50 bayt

s[];f(l){l=read(0,s,1<<31);l=l?l/68*16+l%68-51:0;}

Çevrimiçi deneyin!


1
Değiştirerek 59 byte return riçinl=r
girobuz

2
@JonathanFrech undefined davranışı mükemmel bir kod golf için gayet iyi!
G. Sliepen

1
@YSC Hm, ama b global yapmak, bir şey yapmak için bir işlev tanımlarsanız (ve değilse main), bunu birkaç kez çağırmanın mümkün olması kuralını ihlal ettiğini düşünüyorum .
G. Sliepen


2
@girobuz while()ile aynı sayıda bayta sahiptir for(;;). Böylece ;while()bir bayt daha uzundur for(;;).
Jonathan Frech

3

Python 3, 48 46 bayt

lambda s:(len(s)or 51)+1-52*len(s.split('\n'))

Girdi, işleve dize olarak geçirilir. İşlev girişin uzunluğunu arttırır (yeni satırlar dahil), sonra her satır için 52 çıkartır.

Çevrimiçi deneyin


2
Gördüğüm kadarıyla f=, başlığa `f =` olarak taşınabilir, sadece lambda'yı kod olarak bırakarak ve iki bayt kaydedebilir: Çevrimiçi deneyin!
gadzooks02

@ gadzooks02 Teşekkürler, düzenleyecek. f=Ben Python anlaşmazlık sunucusundan alıp bir alışkanlıktır.
IFcoltransG

2

Japt -x , 5 bayt

Bir satır dizisi olarak girin.

®Ê-51

Dene

®Ê-51     :Implicit input of array
®         :Map
 Ê        :  Length
  -51     :  Subtract 51
          :Implicit output of sum of resulting array


2

05AB1E , 8 6 bayt

€g51-O

Çevrimiçi deneyin!

Dizelerin bir listesi olarak girin.

€g     get lengths of each line
51-    subtract 51 from each
O      push the sum of the resulting list
       implicitly print

1
Maalesef, giriş tüm hexdump'ı içermelidir. (Sevgiler her satırın sonunda harfleri atlar)
gadzooks02

Ah benim hatam. Bunu akıllı telefonumda yaptım. Onaltılı kodların arkasında bir şey görmedim. Bir düzeltme yaptım.
Dorian

2

IBM / Lotus Notes Formül Dili, 53 bayt

@Sum(@Length(@Explode(@Right(@Left(i;"  ");": ")))/2)

Formula için TIO yoktur, bu yüzden test senaryolarının ekran görüntüleri:

enter image description here enter image description here enter image description here enter image description here enter image description here

Formül "Döndür" den sonraki değeri sağlayan hesaplanan alandadır.

açıklama

Bu, Formula'nın bir döngüye ihtiyaç duymadan bir listeye bir işlevi tekrar tekrar uygulayacağının iyi bir göstergesidir. Formül, düzenlenebilir giriş alanı `i 'ile aynı formda hesaplanan bir alandadır.

  1. Ortadan başlayın. @Leftve @Rightbir dize sınırlayıcının veya birkaç karakterin kullanılmasına izin verin. Bu nedenle :, iki boşluğun ilk oluşumunun sağında ve ardından solunda arama yaparız . Formula, yeni satırı bir liste ayırıcı olarak gördüğünden, bunu girişteki her satıra uygular.
  2. @ExplodeFormül bir splitişleve eşdeğerdir ve varsayılan olarak boşluktur ,veya; . Yine alandaki her satıra uygulanır, ancak bu sefer sonuçlar tek bir listede birleştirilir.
  3. @Lengthdaha sonra listenin her üyesine uygulanır. Her durumda, dönüş değerini 2'ye böleriz.
  4. @Sum tüm liste ve sonuç çıktı.

1
Bir çevirmenle bağlantınız var mı (çevrimiçi veya indirilmiş)?
gadzooks02

Ne yazık ki değil. Formula, IBM ürününe bağlı tescilli bir dildir (Meta'ya bir süre önce bu sitede izin verilip verilmediğini ve cevabın "evet" olup olmadığını sordum, ancak Polisler ve Soyguncular için değil). En son baktığımda, Domino Designer (Formula'yı destekleyen) IBM'den ücretsiz olarak indirilebilir. Ne yazık ki sadece Windows ve evde Linux çalıştırırken onaylayamıyorum. Bu cevap, bazı eski Notes uygulamalarını hala destekleyecek kadar talihsiz olduğum ve iş
yerinde makinemde

1
BTW, Lotus Notes'u bu sitede
ararsanız

1

JavaScript (ES6), 34 bayt

s=>(n=s.length)&&(n/68<<4)+n%68-51

Çevrimiçi deneyin!

Yorumlananlar

s =>                // s = input string
  (n = s.length) && // n = length of s; return 0 right away if n = 0 (special case)
  (n / 68 << 4) +   // otherwise compute the number of full lines and multiply it by 16
  n % 68 - 51       // add the length of the last line minus 51





0

zsh , 36 bayt

Zsh'ın varsayılan bayrakları ile:

for l (${(f)1})((c+=$#l-52))
<<<$[c]

Çevrimiçi deneyin!

${(f)1}$1satır sonlarına böler ve boş satırları atar. $[ arithmetic expansion ]Döngü hiç batmadığı boş durumda, karşı korumalar $c.

zsh , 28 bayt

İle -o extendedglob:

<<<${#${(F)${(f)1}#?(#c52)}}

Çevrimiçi deneyin!

(f)Yeni satırlara bölün, ${ #?(#c52)}önde gelen 52 karakteri kaldırın (F), yeni satırlara katılın; böylece sayım, listwise yerine karaktersel olsun, ${# }karakterleri sayın.


0

asm2bf , 135 bayt

Golf versiyonu:

lbl 3
mov r2,51
lbl 1
in_ r1
dec r2
jz_ r1,4
jnz r2,1
lbl 2
in_ r1
jz_ r1,4
sub r1,10
jz_ r1,3
inc r3
jmp 2
lbl 4
out r3

Yorumlanan sürüm:

lbl 3               ; Main loop - the kinda entry point

    mov r2, 51      ; Loop 51 times.
    lbl 1           ; Loop start.
        in_ r1      ; Read character
        dec r2      ; Decrement the loop accumulator.
        jz_ r1, 4   ; If zero was read, end.
        jnz r2, 1   ; If we still loop, loop again.

    lbl 2           ; Second loop, accumulating the result.
        in_ r1      ; Read a character.
        jz_ r1, 4   ; If character is zero, end the loop and print result.
        sub r1, 10  ; Decrement r1 by 10 for next check.
        jz_ r1, 3   ; If the character - 10 (the newline) is zero, jump to 3
        inc r3      ; Increment character read amount.
        jmp 2
lbl 4
    out r3          ; Print out the result as an ASCII character.
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.