코드 골프 측정기 © 2019


20

코드 골프 측정기 © 2019

함께 사용되는 16 진 덤프 xxd는 다음과 같습니다.

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

귀하의 임무는이 형태의 16 진 덤프를 사용 된 바이트 수로 변환하는 것입니다.

규칙 :

  • 일반적인 허점은 금지되어 있습니다.
  • 이것은 이므로 바이트 단위의 가장 짧은 유효한 답변이 이깁니다.
  • 텍스트 끝에 줄 바꿈 문자를 포함하거나 포함하지 않을 수 있습니다 ( 0a). 이는 16 진수 덤프가 개행 ( 0a)으로 끝나는 경우 해당 입력의 출력이 1 씩 감소 될 수 있음을 의미합니다.
  • 빈 입력 (문자 그대로 : 빈 목록 / 문자열 등)은 0을 출력해야합니다.
  • 어떤 형태로든 입력 가능
  • 입력은 제어 문자가없는 유효한 ASCII입니다.
  • 입력은 전체 16 진 덤프를 포함해야합니다.

테스트 사례 :

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

28 또는 27을 반환

00000000: 0a                                       .

1 또는 0을 반환

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

10 또는 9를 반환

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

13을 반환


0을 리턴합니다 (문자 그대로 아무것도 없음 : 빈 목록 / 문자열 등).

비표준 언어에는 설명이 좋습니다.


입력이 ASCII라고 가정 할 수 있습니까? 제어 문자를 포함 할 수 있습니까? 입력 규칙은 무엇입니까? 일부 언어는 여러 줄을 통한 입력을 처리 할 수 ​​없습니다. 모든 줄이 동일하게되도록 마지막 줄을 채울 수 있습니까? 공백 입력을 왜 포함해야합니까?
Stewie Griffin

@StewieGriffin 예; 아니; 예; xxd빈 문자열이 공급되면 아무것도 출력하지 않기 때문 입니다.
gadzooks02

1
@StewieGriffin 응답하는 동안 주석을 편집 했으므로 다음과 같이 확장됩니다. 예; 아니; 전체 덤프가 포함되어 있으면 원하는대로 입력 할 수 있습니다. 마지막 답변을보십시오; 예;
xxd에

1
@JonathanAllan 아, 잘 발견되었습니다.
gadzooks02

1
오른쪽에 ASCII 데이터를 포함하지 않은 16 진 덤프 형식을 계산하는 것이 흥미로울 수 있습니다. 모든 사람들은 16 진수 부분을 벗기고 나머지는 바이트 계산합니다. 16 진수 덤프의 마지막 행 에서만 이 작업을 수행해야한다면 16 진수 숫자 (위치)를 구문 분석하고 해당 행의 16 진수 숫자를 세는 것입니다. ( 기계 코드 답변에 대한 objdump분해 또는 nasm목록을 볼 때 직접 손으로하는 것처럼 ) 샌드 박스에 게시해야한다고 생각합니다.
Peter Cordes

답변:


12

레티 나 0.8.2 , 8 바이트

.{51}

.

온라인으로 사용해보십시오! 설명:

.{51}

각 줄의 처음 51자를 삭제하십시오. 줄은 52 ~ 67 자까지만 사용할 수 있으므로 줄당 한 번만 일치합니다.

.

줄 바꾸기가 아닌 나머지 문자를 계산하십시오.

빈 입력을 지원할 필요가없는 경우 7 바이트 :

.{52}


온라인으로 사용해보십시오! 설명:

.{52}

각 줄의 처음 52자를 삭제하십시오. 줄은 52 ~ 67 자까지만 사용할 수 있으므로 줄당 한 번만 일치합니다.


나머지 문자 수 (줄 바꾸기 포함)보다 1을 더 세십시오.


와 7 &`.{52}.
그리미

@ 그림은 그저 ... 굉장합니다 ... 당신은 그것을 당신의 자신의 답변으로 게시해야합니다.
Neil

처음에는 눈치 채지 못했지만 실제로 는 거의 동일한 대답이 있습니다.
그리미




5

APL (Dyalog Extended) , 18 바이트

전체 프로그램. 문자열 목록 (즉, 문자 목록)을 묻습니다.

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

온라인으로 사용해보십시오!

 신속한

49↑¨ 각각에서 처음 49자를 가져옵니다.

(다음의 암묵적 기능을 각각에 적용하십시오.

 논쟁 거리

 있는 캐릭터를 잘라

 패딩 문자 (공백)와 다름

1↓ 첫 번째 "단어"를 삭제

ε NLIST (편평한)

 세다

2÷⍨ 둘로 나누다


4

젤리 , 5 바이트

Ẉ_51S

정수 바이트 수를 산출하는 행 목록을 승인하는 모나드 링크.

온라인으로 사용해보십시오!

어떻게?

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

라인리스트를 승인 할 수 있습니다. 또한 설명을 추가하고 싶습니까?
gadzooks02

아 멋지다, 빈 입력이 빈 목록 또는 빈 줄이 하나 인 목록입니까? (이것은 엣지 케이스이기 때문에 게시물에서 분명해야합니다.)
Jonathan Allan

빈 목록 / 문자열 등입니다. 방금 이것을 명확히했습니다.
gadzooks02

감사합니다. 설명도 추가되었습니다.
Jonathan Allan

3

C (gcc) , 64 55 바이트

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

온라인으로 사용해보십시오!

YSC 덕분에 9 바이트가 줄었습니다!

Arnauld의 JavaScript 솔루션에서 영감을 얻은 더 취약한 버전은 다음과 같습니다.

C (gcc) , 50 바이트

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

온라인으로 사용해보십시오!


1
return rl=r
girobuz

2
@JonathanFrech 정의되지 않은 동작은 코드 골프에 완벽하게 좋습니다!
G. Sliepen

1
@YSC Hm, 그러나 r global을 만드는 것은 무언가를 수행하는 함수를 정의하면 (그리고 그렇지 않은 경우 main) 여러 번 호출 할 수 있어야한다는 규칙을 위반한다고 생각 합니다.
G. Sliepen


2
@girobuz while()의 바이트 수 는와 같습니다 for(;;). 따라서 ;while()1 바이트보다 깁니다 for(;;).
조나단 프레 치

3

파이썬 3, 48 46 바이트

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

입력은 문자열로 함수에 전달됩니다. 이 함수는 입력 길이 (줄 바꾸기 포함)를 증가시킨 다음 각 줄마다 52를 뺍니다.

온라인으로 사용해보십시오


2
내가 본 것에서, f=코드는 람다를 코드로 남기고 2 바이트를 절약하면서 헤더로`f =`로 이동할 수 있습니다 : 온라인으로보십시오!
gadzooks02

@ gadzooks02 감사합니다, 편집합니다. 이것은 f=Python discord 서버에서 얻은 습관입니다.
IFcoltransG



2

05AB1E , 8 6 바이트

€g51-O

온라인으로 사용해보십시오!

문자열 목록으로 입력하십시오.

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

1
입력에 16 진 덤프 전체가 포함되어 있어야합니다. (각 줄 끝에서 문자를 건너 뜁니다)
gadzooks02

오, 나빠 나는 이것을 스마트 폰에서 만들었다. 16 진 코드 뒤에 무언가가있는 것을 보지 못했습니다. 수정했습니다.
도리안

2

IBM / Lotus Notes 공식 언어, 53 바이트

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

공식에 대한 TIO가 없으므로 다음은 테스트 사례의 스크린 샷입니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

수식은 "Returns"뒤에 값을 제공하는 계산 된 필드에 있습니다.

설명

이것은 루프가 필요없이 수식이 목록에 재귀 적으로 함수를 적용하는 방식을 잘 보여줍니다. 수식은 편집 가능한 입력 필드`i '와 같은 형식으로 계산 된 필드에 있습니다.

  1. 중간에서 시작하십시오. @Left@Right문자열 구분 기호 또는 문자의 수를 사용할 수 있습니다. 따라서 우리는 오른쪽으로 검색: 는 두 공백이 처음 나타나는 에서 왼쪽으로 합니다. Formula는 개행을 목록 구분 기호로 간주하므로 입력의 각 행에이를 적용합니다.
  2. @ExplodeFormula는 split함수와 동일 하며 기본적으로 공백 ,또는 ;입니다. 다시 필드의 각 행에 적용되지만 이번에는 결과가 단일 목록으로 결합됩니다.
  3. @Length그런 다음 목록의 각 멤버에 적용됩니다. 각각의 경우에 우리는 반환 값을 2로 나눕니다.
  4. @Sum 전체 목록과 결과를 출력합니다.

1
통역사 (온라인 또는 다운로드)에 대한 링크가 있습니까?
gadzooks02

불행히도. Formula는 IBM 제품과 연계 된 독점 언어입니다 (Meta에서이 사이트에서 이것이 허용되는지 대답하고 "응답"이지만 Cops & Robbers 챌린지에는 해당되지 않는지 물었습니다). 내가 마지막으로 보았을 때, Domino Designer (Formula를 지원하는)는 여전히 IBM에서 무료로 다운로드 할 수있었습니다. 불행히도 Windows 전용이며 집에서 Linux를 실행하면 확인할 수 없습니다. 이 답변은 점심 시간 동안 작성되어 일부 레거시 Notes 앱을 계속 지원할 정도로 유감 스럽지만 직장에서 내 컴퓨터에 여전히 노트를 가지고 있습니다. :-)
ElPedro

1
BTW,이 사이트에서 Lotus Notes를 검색하면 내가이 언어로 골프를
타기

1

자바 스크립트 (ES6), 34 바이트

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

온라인으로 사용해보십시오!

댓글

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 바이트

zsh의 기본 플래그를 사용하여 :

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

온라인으로 사용해보십시오!

${(f)1}$1줄 바꿈을 나누고 빈 줄을 버립니다. $[ arithmetic expansion ]루프가 설정 결코 비어있는 경우, 시스템을 보호합니다 $c.

Zsh , 28 바이트

-o extendedglob:

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

온라인으로 사용해보십시오!

(f)개행을 분할 ${ #?(#c52)}하고 선행 52자를 제거 (F)하고 개행을 결합하여 목록을 계산하는 대신 문자를 ${# }계산합니다.


0

asm2bf , 135 바이트

골프 버전 :

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

댓글 버전 :

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.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.