Mã đo Golf © 2019


20

Mã đo Golf © 2019

Hexdumps được sử dụng với xxdcái nhìn như thế này:

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

Nhiệm vụ của bạn là chuyển đổi một hexdump ở dạng này thành số byte được sử dụng.

Quy tắc:

  • Sơ hở thông thường bị cấm.
  • Đây là , vì vậy câu trả lời hợp lệ ngắn nhất tính theo byte thắng.
  • Bạn có thể hoặc không bao gồm dòng mới ở cuối văn bản ( 0a). Điều này có nghĩa là nếu hexdump kết thúc trong một dòng mới ( 0a), đầu vào đó có thể khiến đầu ra của nó giảm đi một.
  • Một đầu vào trống (không có nghĩa đen: danh sách trống / chuỗi / v.v.) phải xuất 0.
  • Đầu vào có thể được thực hiện dưới mọi hình thức
  • Đầu vào sẽ là ASCII hợp lệ, không có ký tự điều khiển
  • Đầu vào phải chứa toàn bộ hexdump

Các trường hợp thử nghiệm:

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

trả lại 28 hoặc 27

00000000: 0a                                       .

trả về 1 hoặc 0

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

trả lại 10 hoặc 9

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

trả lại 13


trả về 0 (Đây đúng là không có gì: danh sách trống / chuỗi / v.v.)

Giải thích sẽ tốt cho các ngôn ngữ không chuẩn.


Chúng ta có thể giả sử đầu vào là ascii? Nó có thể chứa các ký tự điều khiển không? Các quy tắc đầu vào là gì? Một số ngôn ngữ không thể xử lý đầu vào trên nhiều dòng. Chúng ta có thể đệm dòng cuối cùng để tất cả các dòng đều dài bằng nhau không? Tại sao bao gồm đầu vào trống?
Stewie Griffin

@StewieGriffin Có; Không; Vâng; bởi vì nếu xxdđược cung cấp một chuỗi rỗng, nó không tạo ra kết quả gì.
gadzooks02

1
@StewieGriffin Bạn đã chỉnh sửa nhận xét của mình trong khi tôi đang trả lời, vì vậy đây là bản mở rộng: Có; Không; nó có thể là đầu vào theo cách bạn muốn, miễn là bao gồm toàn bộ kết xuất; Xem câu trả lời cuối cùng; Vâng; Bởi vì nếu xxd được cung cấp một chuỗi rỗng, nó sẽ không tạo ra kết quả gì
gadzooks02

1
@Jonathan ALLan Ồ vâng, phát hiện tốt.
gadzooks02

1
Đếm một định dạng hexdump không bao gồm dữ liệu ASCIIfied ở bên phải có thể rất thú vị. Mọi người sẽ chỉ cần tước phần hex và đếm byte phần còn lại. Nếu thử thách là thực hiện điều này chỉ đưa ra dòng hexdump cuối cùng, điều đó sẽ buộc phân tích số hex (vị trí) cũng như đếm số chữ số hex trên dòng đó. (Giống như tôi làm bằng tay khi xem phần objdumptháo gỡ hoặc nasmliệt kê các câu trả lời bằng mã máy.) Tôi đoán tôi nên đăng nó trong hộp cát ...
Peter Cordes

Câu trả lời:


12

Võng mạc 0.8.2 , 8 byte

.{51}

.

Hãy thử trực tuyến! Giải trình:

.{51}

Xóa 51 ký tự đầu tiên của mỗi dòng. (Các dòng chỉ có thể có từ 52 đến 67 ký tự, vì vậy, dòng này luôn khớp một lần trên mỗi dòng.)

.

Đếm các ký tự không phải dòng mới.

7 byte nếu đầu vào trống không phải được hỗ trợ:

.{52}


Hãy thử trực tuyến! Giải trình:

.{52}

Xóa 52 ký tự đầu tiên của mỗi dòng. (Các dòng chỉ có thể có từ 52 đến 67 ký tự, vì vậy, dòng này luôn khớp một lần trên mỗi dòng.)


Đếm 1 nhiều hơn số lượng ký tự còn lại (bao gồm cả dòng mới).


7 với &`.{52}.
Grimmy

@Grimy Điều đó thật ... tuyệt vời ... bạn phải đăng nó dưới dạng câu trả lời của riêng bạn.
Neil

Tôi đã không nhận thấy nó lúc đầu nhưng thực sự đã có một câu trả lời gần như giống hệt nhau .
Grimmy




5

APL (Dyalog mở rộng) , 18 byte

Chương trình đầy đủ. Lời nhắc cho danh sách các chuỗi (tức là danh sách các ký tự).

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

Hãy thử trực tuyến!

 lời nhắc

49↑¨ lấy 49 ký tự đầu tiên từ mỗi ký tự

(... áp dụng các chức năng ngầm sau đây để mỗi:

 tranh luận

 chặt chém các nhân vật

 khác với ký tự đệm (dấu cách)

1↓ bỏ "từ" đầu tiên

ε nlist (flatten)

 kiểm đếm

2÷⍨ chia cho hai


4

Thạch , 5 byte

Ẉ_51S

Một liên kết đơn âm chấp nhận một danh sách các dòng mang lại số byte nguyên.

Hãy thử trực tuyến!

Làm sao?

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

Bạn có thể chấp nhận một danh sách các dòng. Ngoài ra, bạn có quan tâm để thêm một lời giải thích?
gadzooks02

Thật tuyệt, vậy đầu vào trống có phải là một danh sách trống HOẶC một danh sách với một dòng trống không? (Điều này cần được làm rõ trong bài vì đây là trường hợp cạnh.)
Jonathan Allan

Đó là danh sách trống / chuỗi / v.v. Tôi vừa mới làm rõ điều này.
gadzooks02

Cảm ơn, giải thích thêm bây giờ quá.
Jonathan Allan

3

C (gcc) , 64 55 byte

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

Hãy thử trực tuyến!

9 byte bị loại bỏ nhờ YSC!

Đây là một phiên bản mỏng manh hơn được lấy cảm hứng từ giải pháp JavaScript của Arnauld, có thể thất bại đối với các đầu vào dài:

C (gcc) , 50 byte

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

Hãy thử trực tuyến!


1
59 byte bằng cách thay đổi return rthànhl=r
girobuz

2
@JonathanFrech hành vi không xác định là hoàn toàn tốt cho mã golf!
G. Sliepen

1
@YSC Hừm, nhưng tôi nghĩ rằng làm cho toàn cầu vi phạm quy tắc rằng nếu bạn xác định một chức năng để làm một cái gì đó (và nó không phải main), thì có thể gọi nó là nhiều lần.
G. Sliepen


2
@girobuz while()có cùng số byte như for(;;). Như vậy ;while()là một byte dài hơn for(;;).
Jonathan Frech

3

Python 3, 48 46 byte

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

Đầu vào được truyền dưới dạng một chuỗi cho hàm. Hàm tăng chiều dài của đầu vào (bao gồm cả dòng mới), sau đó trừ 52 cho mỗi dòng.

Dùng thử trực tuyến


2
Từ những gì tôi đã thấy, f=có thể chuyển sang tiêu đề dưới dạng `f =`, chỉ để lại lambda dưới dạng mã và lưu hai byte: Hãy thử trực tuyến!
gadzooks02

@ gadzooks02 Cảm ơn, sẽ chỉnh sửa. Đây f=là một thói quen tôi nhặt được từ máy chủ bất hòa Python.
IFcoltransG

2

Japt -x , 5 byte

Đầu vào như một mảng của dòng.

®Ê-51

Thử nó

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


2

05AB1E , 8 6 byte

€g51-O

Hãy thử trực tuyến!

Nhập dưới dạng danh sách các chuỗi.

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

1
Xin lỗi, đầu vào phải chứa toàn bộ hexdump. (Bạn bỏ qua các chữ cái ở cuối mỗi dòng)
gadzooks02

Ôi lỗi của tôi. Tôi đã làm điều này trên điện thoại thông minh của tôi. Không thấy có gì đó đằng sau mã hex. Tôi đã sửa.
Dorian

2

MathGolf , 7 6 byte (không cạnh tranh)

m£Ex-Σ

Nó không cạnh tranh (hiện tại) vì hiện tại có lỗi trong MathGolf đối với các chuỗi đầu vào có chứa khoảng trắng. Chúng được tự động chuyển thành một danh sách (chia theo dấu cách). Trong TIO tôi đã thay thế tất cả các không gian bằng một Bđể hiển thị nó hoạt động như dự định.

Nhập dưới dạng danh sách các chuỗi.

-1 byte bằng cách tìm một phương thức để tạo 51thành 2 byte (xem lịch sử để biết hơn 10 cách thực hiện trong 3 byte ..)

Hãy thử trực tuyến.

Giải trình:

m    # Map each string in the (implicit) input-list
 £   #  Pop the string and get the length
E    # Push 15
 x   # Reverse, but keep it an integer
     # (NOTE: simply `51` would be interpret as two values on the stack: 5 and 1)
  -  # Subtract each of the lengths by this
Σ    # Take the sum of the list
     # (after which the entire stack joined together is output implicitly as result)

Giả sử bạn chưa sửa lỗi trong MathGolf kể từ khi bạn đăng câu trả lời này, nó không hợp lệ, không phải là không cạnh tranh.
pppery

2

Ngôn ngữ công thức ghi chú của IBM / Lotus, 53 byte

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

Không có TIO cho Công thức, vì vậy đây là ảnh chụp màn hình của các trường hợp thử nghiệm:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Công thức nằm trong trường được tính toán cung cấp giá trị sau "Trả về".

Giải trình

Đây là một minh chứng tốt về cách Công thức sẽ áp dụng đệ quy một hàm cho danh sách mà không cần vòng lặp. Công thức nằm trong một trường được tính toán trên cùng một dạng với trường đầu vào có thể chỉnh sửa `i '.

  1. Bắt đầu ở giữa. @Left@Rightcho phép một dấu phân cách chuỗi hoặc một số ký tự được sử dụng. Do đó, chúng tôi tìm kiếm ở bên phải của: và sau đó ở bên trái của sự xuất hiện đầu tiên của hai không gian. Vì Công thức xem dòng mới dưới dạng phân tách danh sách, nên nó sẽ áp dụng điều này cho từng dòng trong đầu vào.
  2. @Explodelà công thức tương đương với một splithàm và mặc định cho không gian, ,hoặc; . Một lần nữa, nó được áp dụng cho từng dòng trong trường nhưng lần này kết quả được kết hợp thành một danh sách.
  3. @Lengthsau đó sẽ được áp dụng cho từng thành viên trong danh sách. Trong mỗi trường hợp, chúng tôi chia giá trị trả về cho 2.
  4. @Sum toàn bộ danh sách và xuất kết quả.

1
Bạn có một liên kết đến một thông dịch viên (trực tuyến hoặc tải xuống)?
gadzooks02

Không may măn. Công thức là ngôn ngữ độc quyền gắn liền với sản phẩm của IBM (tôi đã hỏi trên Meta một thời gian trước nếu điều này được cho phép trên trang web này và câu trả lời là "có" nhưng không phải cho các thách thức của Cops & Robbers). Lần trước tôi đã xem, Domino Designer (hỗ trợ Công thức) vẫn có sẵn dưới dạng bản tải xuống miễn phí từ IBM. Thật không may, chỉ Windows và khi tôi chạy Linux tại nhà, tôi không thể xác nhận. Câu trả lời này được viết trong giờ nghỉ trưa của tôi vì tôi không may vẫn hỗ trợ một số ứng dụng Ghi chú cũ và vẫn có Ghi chú trên máy của tôi tại nơi làm việc :-)
ElPedro

1
BTW, nếu bạn tìm kiếm Lotus Notes trên trang web này, bạn sẽ thấy rằng tôi là người duy nhất đủ ngu ngốc để thử chơi golf bằng ngôn ngữ này :-)
ElPedro

1

JavaScript (ES6), 34 byte

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

Hãy thử trực tuyến!

Đã bình luận

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 byte

Với các cờ mặc định của zsh:

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

Hãy thử trực tuyến!

${(f)1}chia nhỏ $1trên dòng mới và loại bỏ các dòng trống. Các $[ arithmetic expansion ]vệ sĩ chống lại trường hợp trống rỗng, khi vòng lặp không bao giờ thiết lập $c.

Zsh , 28 byte

Với -o extendedglob:

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

Hãy thử trực tuyến!

(f)Tách trên các dòng mới, ${ #?(#c52)}loại bỏ 52 ký tự hàng đầu, (F)tham gia vào các dòng mới để việc đếm theo từng ký tự thay vì liệt kê, ${# }đếm các ký tự.


0

asm2bf , 135 byte

Phiên bản chơi gôn:

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

Phiên bản đã bình luận:

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.