“bzzt”게임을하십시오


56

수상자 : Aditsu의 CJam 답변 ! 무려 25 바이트! 좋은!

답변을 계속 제출할 수 있지만 더 이상 이길 수 없습니다. 후손을 위해 보관 된 원본 게시물 :


"Bzzt"게임은 숫자 (이 경우 500)까지 세어야하는 게임입니다. 그러나 숫자에 3이 있거나 3으로 나눌 수 있으면 숫자를 말하지 않습니다. 대신 "Bzzt"라고 말합니다.

규칙 :

  • 숫자를 하드 코딩 할 수 없습니다.
  • 이 숫자는 다음 요구 사항 중 하나 이상 만 충족하면됩니다.
    • 3으로 나누기
    • 숫자는 3을 포함합니다
  • 일부 유형의 구분 기호는 필수입니다 (12bzzt14는 계산되지 않음)
  • 점수는 바이트 단위로 측정됩니다.
  • 1 또는 0 (선택한)부터 정확히 500까지 계산해야합니다.
  • 숫자를 출력해야하지만 방법 (예 : stdout, 텍스트 파일 쓰기 등)은 중요하지 않습니다.
  • 0은 3으로 나눌 수 있거나 나눌 수 없습니다. 선택할 수 있습니다.
  • 한 번에 하나씩 (예 : 출력 1, 2, bzzt, 4 등) 또는 한 번에 모두 출력 할 수 있습니다 (예 : 출력 1 2 bzzt 4 5).
  • 문자 3을 단어 "bzzt"로 바꿔야합니다. 대소 문자를 구분하지 않습니다 (bZzt, Bzzt, bzzt는 모두 괜찮습니다).

  • 이것은 도전이므로 가장 짧은 코드가 승리합니다.
  • 이 콘테스트는 2014 년 6 월 30 일에 게시됩니다 (게시 후 7 일).

1
이 질문의 목적으로 0을 3으로 나눌 수 있습니까?
OUurous

2
"버즈"또는 "bzzt"입니까? 지금까지 "버즈"를 두 번 썼습니다.
aditsu

3
명확히하십시오. 나는 출력이 있습니까 buzz또는 bzzt요구 사항을 모두 적용 할 경우? 나는 출력이 있습니까 12bzzt4또는 bzzt위해 1234?
nyuszika7h

4
bzzt대해 말하고 싶습니다 1234. 그것은 (단지 우리가 자주 (7)와 함께 할) 여기에서 '일반'마시는 게임이다
마티

66
"0은 3으로 나눌 수 있거나 나눌 수 없습니다. 선택할 수 있습니다." 나는 당신이 선택할 수 있다고 생각하지 않습니다. 0 mod 3은 0입니다. 그것은 실제로 의견의 문제가 아닙니다.
David Conrad

답변:


33

CJam-25

501{3sI3%<Is-I"bzzt"?N}fI

감사합니다 Howard :)

http://cjam.aditsu.net/ 에서 시도 하십시오

설명:

501{…}fI이다 기본적으로 for(int I=0; I<501; ++I) {…}
3s즉, "3", 문자열 3 변환
I3%입니다 I% 3
<왼쪽 문자열을 얻는다 - "3".substring(0, I % 3)- "를"어떤 I% 3 == 0 "3"그렇지 않으면
Is변환 I문자열로
-, 빈의 차 집합 결과 않습니다 2 문자열 IFF 문자열 I% 3 == 0 (제 문자열이 비어) 또는 I그것의 3 디지트
…I"bzzt"?같다 … ? I : "bzzt"; 이전 문자열이 거짓이며, 다른 문자열이 사실이다 ""부울 값으로 처리됩니다
N개행을 추가


내 골프 스크립트 솔루션과 동일한 트릭을 사용하고 논리 및 :을 저장할 수 있습니다 501{3sI3%<Is-I"bzzt"?N}fI.
Howard

29

루비, 43

501.times{|a|puts"#{a}"[?3]||a%3<1?:Bzzt:a}

꽤 직설적 인.

편집 : 하워드 덕분에 1 바이트를 절약했습니다!


1
쓰면 하나의 공백을 저장할 수 있습니다 "#{a}"[?3]||a%3<1.
Howard

@Howard : 정말 고마워요!
Ventero

1
더 읽을 수 없지만 불행히도 같은 길이 : "#{a}"[?3[0,a%3]].
Howard

무엇 교체에 대한 putsp3 개 문자를 저장?
David Unric 2016 년

1
@DavidUnric 은 인수 p를 호출 한 결과를 출력합니다 inspect(puts와 비교하여 호출 to_s). 따라서 인쇄 Bzzt() 대신 출력 사양과 일치하지 않는을 :Bzzt.to_s인쇄 :Bzzt합니다.
Ventero

25

seq와 GNU sed- 42 33 31 30

대시로 직접 작동합니다. 다른 쉘에서는 bash와 같이 히스토리 확장을 비활성화해야 할 수도 있습니다 set +H.

seq 500|sed 0~3!{/3/!b}\;cbzzt

어떻게 작동합니까?
nbubis 2016 년

쉘 스크립트에서는 히스토리 확장이 기본적으로 사용되지 않습니다.
nyuszika7h

@ nyuszika7h : 사실이지만 많은 사람들이 대화 형 쉘에서 답을 시도 할 것으로 기대합니다.
Thor

1
@nbubis : seq로 시퀀스를 생성하여 업데이트 된 버전이 작동합니다. 0~3!실행 {/3/!b}이 아닙니다 의해 나눌 경우와 같이 함께 이러한 표현은 선을 떠나 마지막 비트가 "수정"는 3. 라인이 bzzt에 포함되어 있지 않습니다.
Thor

18

DOS의 x86 기계 코드 (.com 파일)-71 바이트

00000000  31 c9 68 20 24 89 e5 89  c8 bb 03 00 31 d2 f7 f3  |1.h $.......1...|
00000010  85 d2 74 1a 89 c8 b3 0a  31 d2 f7 f3 80 fa 03 74  |..t.....1......t|
00000020  0d 80 c2 30 86 d6 52 44  85 c0 75 ea eb 08 89 ec  |...0..RD..u.....|
00000030  68 7a 74 68 62 7a 89 e2  b4 09 cd 21 89 ec 41 81  |hzthbz.....!..A.|
00000040  f9 f4 01 7e c2 59 c3                              |...~.Y.|

공백으로 구분 기호로 필요한 출력을 stdout에 인쇄합니다. DosBox에서 문제없이 실행할 수 있습니다.

주석이 달린 어셈블리 :

    org 100h

start:
    ; 0 - 500 counter
    xor cx,cx
    ; we'll use the stack as scratch space to build the strings to print
    ; first of all, push ' $' on the stack (in reverse order); this will be
    ; the end of each string we'll print
    push 2420h
    ; save the stack pointer, to get back to this position after each print
    mov bp,sp
mainloop:
    ; first try to divide by three
    mov ax,cx
    mov bx,3
    xor dx,dx
    div bx
    test dx,dx
    ; no remainder => bzzt
    jz bzzt
    ; otherwise, go into the decimal-print loop
    mov ax,cx
divloop:
    ; bh is already at zero due to the mov bx,3 above
    mov bl,10
    xor dx,dx
    ; divide by 10
    div bx
    ; remainder is 3 => bzzt
    cmp dl,3
    je bzzt
    ; convert number to digit
    add dl,'0'
    ; trick: we move the digit to the upper byte of dx: this allows us to
    ; push the whole dx (you cannot do push dl) but to easily kill the
    ; undesidered byte by touching the stack pointer (it will be overwritten
    ; by the next stack operation/ignored by the print)
    xchg dl,dh
    push dx
    inc sp
    ; check is there anything left to print, rinse & repeat
    test ax,ax
    jnz divloop
    ; skip straight to print
    jmp print
bzzt:
    ; since we may be here from inside divloop, reset the stack pointer to
    ; where we left ' $'
    mov sp,bp
    ; push 'bzzt'
    push 747ah
    push 7a62h
print:
    ; print what is on the stack
    mov dx,sp
    mov ah,9h
    int 21h
    ; move us back to ' $'
    mov sp,bp

    ; increment cx and repeat while we are <=500
    inc cx
    cmp cx,500
    jle mainloop
end:
    ; fix back the stack pointer to the original value (=kill the first push)
    pop cx
    ; quit
    ret

5
존경!!!!! 놀랄 만한!
yossico

@ 요시코 : 감사합니다! :) 실제로, 그것은 실제로 특별하지 않습니다. 실제로 DOS 용 어셈블리를 작성한 사람들은 확실히 더 많은 바이트를 줄일 수 있다고 확신합니다.
Matteo Italia


17

PHP, 구분 기호 없음 -62, 61,59,58,52,49 47

그들 사이에 공백 / 줄 바꿈 / 구분 기호가 있어야한다고 말하지는 않습니다.

while(++$i<501)echo$i%3*!strpbrk($i,3)?$i:bzzt;

분리기 사용시 68,67,65,64,58 / 55,53 / 52 51/50

while(++$i<501)echo$i%3*!strpbrk($i,3)?$i:bzzt,' '; // 51
while(++$i<501)echo$i%3*!strpbrk($i,3)?$i:bzzt,~õ; // 50
  • 작은 '속임수'를 발견 한 후 공백이 필요하지 않아 echo조금 절약되었습니다.
  • 줄 바꿈을 만듭니다
  • 또 다른 작은 '속임수'인 bzzt는 따옴표가 필요하지 않습니다 (테스트 됨). 갈 길은 아니지만 작동합니다.

자바 스크립트 -54,51 50

동일한 원칙이지만 자바 스크립트 함수 :

for(i=0;i++<500;)alert(i%3<1|/3/.test(i)?'bzzt':i)

괄호 및 for () 팁에 대한 Thanks @ core 에 대한 몇 번 내 브라우저 충돌 충돌 ^^
Martijn

하하. 나는 console.log()분명히 그것을 테스트 했지만 이것은 더 짧습니다.
Martijn

1
자바 스크립트 솔루션은 501 개입니다.
nderscore

1
PHP for 52 : <?for(;500>$i++;)echo$i%3*!strpbrk($i,3)?$i:bzzt,~õ;The õchar 245, 비트 반전 \n입니다.
primo

1
당신은 대체 할 수 !strpbrk($1,3)trim(3,$i)4 바이트를 저장
aross

16

자바 스크립트 50 49

core1024 덕분에 -1 바이트

for(i=0;i++<500;)alert(i%3*!/3/.test(i)?i:'bzzt')

나는 그것이 가능하다는 것을 알았습니다! 그러나 방법을 찾지 못했습니다
edc65

1
JavaScript 솔루션이 LiveScript 솔루션을 능가 할 때 내 얼굴을 상상할 수 있습니다.
nyuszika7h

두 번째 솔루션에서 하나를 제거하고 서명 할 수 있으며 여전히 작동합니다.
user902383

@ user902383 부울 &&연산자가 없으면 올바른 결과가 아닙니다 . 예 : 497 % 3 = 2=> 2 & true = 0=>bzzt
nderscore

for(i=0;++i<501;)alert(!/3/.test(i)*i%3?i:'bzzt')-49 : P
core1024

11

GolfScript, 30 29 자

501,{:^`3`^3%<?)'bzzt'^if n}/

GolfScript의 간단한 구현은 여기에서 테스트 할 수 있습니다 .


10

펄, 36

print$_%3&&!/3/?$_:Bzzt,$/for 1..500

편집 : 나는 펄 스님이 아니므로 core1024는 그의 대답 에서 이것으로부터 다른 바이트를 골프로 처리 한 것 같습니다 .


1
say4 바이트 저장에 사용 :say$_%3&&!/3/?$_:bzzt for 1..5e2
Zaid

@Zaid 500이 아닌 5e2 인 이유는 무엇입니까?
아니 찰스

@Charles : 그것들은 동일합니다
Zaid

1
@Zaid 그래서 왜 더 명확하지 않습니까?
찰스

4
@Charles : 코드 골프 도전과 관련하여 걱정해야합니까?
Zaid

10

C # (71)

LinqPad에서 직접 실행할 수 있습니다.

for(var i=0;++i<501;)(i%3<1|(i+"").Contains("3")?"buzz":i+"").Dump();

1
|논리 또는 비트 대신 비트 또는 ( )를 사용하여 문자를 저장할 수 있습니다 .
Johnbot 2016 년

@Johnbot 제안 해 주셔서 감사합니다.
EvilFonti 2016 년

조건부 주위의 괄호도 제거 할 수 있습니다.
Johnbot

@ Johnbot : 그것은 비트 단위가 아닙니다. 피연산자가 부울이므로 논리 단락이 아닙니다.
Ryan M

덤프는 LinqPad 일뿐입니다. 맞습니까? C #에서 응용 프로그램으로이 작업을 수행하려면 확장 방법을 추가해야합니다. (그리고 그것은 '버즈'가 아닌 'bzzt'=)입니다.
Paul

9

파이썬 (52)

감사합니다 grc!

for i in range(501):print[i,'Bzzt'][i%3<1or'3'in`i`]

구 버전:

print['Bzzt'if'3'in`i`or i%3<1 else`i`for i in range(501)]

1
조금 더 짧은 :for i in range(501):print[i,'Bzzt'][i%3<1or'3'in`i`]
grc

4
한 글자 더 짧은 :['3'[:i%3]in`i`]
xnor

7

하스켈 : 88 82 80 79

main=mapM_ f[1..500]
f n|n`mod`3<1||'3'`elem`show n=putStrLn"bzzt"
f n=print n

대답을 쓰고 있다면 IO를 버리고 문자열 값을 반환합니다.
자랑스런 Haskeller

1
또한 전환해야 ==0<1
자랑 haskeller

또한 elem 접두사를 만들어보십시오. 나는 당신이 쓸 수 있어야한다고 생각합니다 elem'3'$show n. 아님 나는 확인하지 않았다.
자랑스런 Haskeller

@proudhaskeller : 스펙은 "숫자가 출력되어야한다"고 명시하고 있으므로 IO가 관련되어야합니다. 그리고 elem접두사 표기법을 사용 하면 아포스트로피 앞에 공백이 있어야하므로 문자를 저장하지 않습니다. 그렇지 않으면 당신은 얻을 것이다 Not in scope: elem'3'. <1그래도 좋은 눈 !
Taylor Fausak

6

자바 스크립트 66 63 60

for(a=i=[];i<500;)a[i++]=i%3&&!/3/.test(i)?i:'bzzt';alert(a)

배열 사용 제안에 대한 edc65 덕분 입니다. 이제 출력이 쉼표로 구분됩니다.


이전 버전

1a-66 버전

규칙에 따라 경고 상자에 1에서 500까지 인쇄하십시오. 출력은 공백으로 구분됩니다.

a="";for(i=1;i<501;i++)a+=i%3&&!/3/.test(i)?i+" ":"bzzt ";alert(a)

1b-65 장

0을 3으로 나눌 수 없다고 생각하면 솔루션을 65 자로 줄일 수 있습니다.

a=0;for(i=1;i<501;i++)a+=i%3&&!/3/.test(i)?" "+i:" bzzt";alert(a)

2-63 화

for(a=i="";i<501;)a+=++i%3&&!/3/.test(i)?i+" ":"bzzt ";alert(a)

길이를 줄이는 제안에 대한 grc 덕분에 .


1
나는 당신이 시작할 수 있다고 생각합니다for(a=i="";i<500;)a+=++i ...
grc

쉼표로 구분 된 출력이 정상이면 배열이 짧아집니다. for (o = i = []; i <500;) o [i ++] = i % 3 &&! / 3 / .test (i)? i : 'bzzt' ; alert (o)
edc65

6

PowerShell, 42

1..500|%{($_,'bzzt')[$_-match3-or!($_%3)]}

주로 Ventero의 작품, 저의 구문에 대한 약간의 도움;;)


6

R, 49 자

a=1:500;b='bzzt';a[!a%%3]=b;a[grep(3,a)]=b;cat(a)

설명 :

a=1:500 #Creates a vector with all integers from 1 to 500
b='bzzt'
a[!a%%3]=b #Replace all multiples of 3 by 'bzzt', thus coercing all other integers to character strings
a[grep(3,a)]=b #Replaces the character strings containing 3 by 'bzzt'
cat(a) #Print to stdout

용법:

> a=1:500;b='bzzt';a[!a%%3]=b;a[grep(3,a)]=b;cat(a)
1 2 bzzt 4 5 bzzt 7 8 bzzt 10 11 bzzt bzzt 14 bzzt 16 17 bzzt 19 20 bzzt 22 bzzt bzzt 25 26 bzzt 28 29 bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt 40 41 bzzt bzzt 44 bzzt 46 47 bzzt 49 50 bzzt 52 bzzt bzzt 55 56 bzzt 58 59 bzzt 61 62 bzzt 64 65 bzzt 67 68 bzzt 70 71 bzzt bzzt 74 bzzt 76 77 bzzt 79 80 bzzt 82 bzzt bzzt 85 86 bzzt 88 89 bzzt 91 92 bzzt 94 95 bzzt 97 98 bzzt 100 101 bzzt bzzt 104 bzzt 106 107 bzzt 109 110 bzzt 112 bzzt bzzt 115 116 bzzt 118 119 bzzt 121 122 bzzt 124 125 bzzt 127 128 bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt 140 bzzt 142 bzzt bzzt 145 146 bzzt 148 149 bzzt 151 152 bzzt 154 155 bzzt 157 158 bzzt 160 161 bzzt bzzt 164 bzzt 166 167 bzzt 169 170 bzzt 172 bzzt bzzt 175 176 bzzt 178 179 bzzt 181 182 bzzt 184 185 bzzt 187 188 bzzt 190 191 bzzt bzzt 194 bzzt 196 197 bzzt 199 200 bzzt 202 bzzt bzzt 205 206 bzzt 208 209 bzzt 211 212 bzzt 214 215 bzzt 217 218 bzzt 220 221 bzzt bzzt 224 bzzt 226 227 bzzt 229 bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt 241 242 bzzt 244 245 bzzt 247 248 bzzt 250 251 bzzt bzzt 254 bzzt 256 257 bzzt 259 260 bzzt 262 bzzt bzzt 265 266 bzzt 268 269 bzzt 271 272 bzzt 274 275 bzzt 277 278 bzzt 280 281 bzzt bzzt 284 bzzt 286 287 bzzt 289 290 bzzt 292 bzzt bzzt 295 296 bzzt 298 299 bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt 400 401 bzzt bzzt 404 bzzt 406 407 bzzt 409 410 bzzt 412 bzzt bzzt 415 416 bzzt 418 419 bzzt 421 422 bzzt 424 425 bzzt 427 428 bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt bzzt 440 bzzt 442 bzzt bzzt 445 446 bzzt 448 449 bzzt 451 452 bzzt 454 455 bzzt 457 458 bzzt 460 461 bzzt bzzt 464 bzzt 466 467 bzzt 469 470 bzzt 472 bzzt bzzt 475 476 bzzt 478 479 bzzt 481 482 bzzt 484 485 bzzt 487 488 bzzt 490 491 bzzt bzzt 494 bzzt 496 497 bzzt 499 500

6

코브라-70

class P
    def main
        for i in 501,print if('3'in'[i]'or i%3<1,'Bzzt',i)

배치-222

나는이 언어를 진정으로 사랑하기 때문에 ... 어떤 이유로 ...

SETLOCAL ENABLEDELAYEDEXPANSION
for /l %%n in (1,1,500) do (
    set a=%%n&set /ai=!a!%%3
    if "!a:~0,1!"=="3" set a=Bzzt
    if "!a:~1,2!"=="3" set a=Bzzt
    if "!a:~2,3!"=="3" set a=Bzzt
    if !i!==0 set a=Bzzt
    echo !a!>>x)

if하나 이상의 숫자가 있음을 알고 있으므로 첫 번째 피연산자 주위에 따옴표를 놓을 수 있어야합니다. 또한 forwith 내에서 전체 블록을 연결하면 &괄호를 저장할 수 있습니다.
Joey

또한, 당신은 여기저기서 약간의 공백 ==대신에 사용할 수 있습니다 EQU.
Joey

@Joey 제안 해 주셔서 감사합니다!
OUurous

6

TI- 기본-31 (32) (34) (35) (36) (43)

:While X<500
:X+1→X
:If not(fPart(X/3
:"bzzt
:Disp Ans
:End

Total: 25 + 6 lines = 31

TI-BASIC의 대부분의 명령은 1 바이트 엔터티로 표시됩니다.

이 코드는 X를 0으로 초기화해야합니다 (그렇지 않으면 추가 3 바이트).

몇 바이트를 면도하려고 여러 번 시도 했으므로 게시물을 어지럽히 지 않기 위해 여기에서 한 모든 것을 자세히 설명하지는 않습니다. 그들은 대부분 루프를 단축하는 데 중점을 두었습니다.이 버전에서는 While 루프를 사용하고 Ans변수를 사용하여 If 조건을 단축했습니다 .


내가 틀렸다면 정정하되 bzzt, 예를 들어 13을 포함 하는 숫자 가 아닌 것 같습니다.
Thor

@Thor 당신은 정확하지만 규칙 bzzt에 있습니다. 3으로 나눌 수있는 숫자로만 인쇄 할 수 있다고 명시되어 있으므로 다른 방법을 추가하는 것이 가능할 수 있지만 더 많은 지침이 필요합니다.
Doktoro Reichard 2016 년

1
규칙에 따르면 숫자에 3이 있거나 3으로 나눌 수 있으면 숫자를 말하지 않는 것입니다. 대신 "Bzzt" 라고 말하면 둘 다 교체해야한다고 말합니다.
Thor

@Thor 저를 가장 귀찮게하는 것은 문장 중간에 작은 작은 쉼표입니다. 내가 해석 한 방식, 두 가지 방식 모두 똑같이 유효하며 두 번째 규칙도 설명합니다 . 숫자는 요구 사항 중 하나만 충족하면됩니다 ... (3을 갖거나 3으로 나눌 수 있음)
Doktoro Reichard

1
소문자가 2 바이트 토큰이므로 여기에서 바이트 수를 잘못 계산했습니다. 나는 위의 모든 답변이 사용하는 규칙이므로 Thor의 해석에 동의합니다.
lirtosiast

5

C, 93

그냥 지옥을 위해서 ...

main(i){char s[9]="bzzt";while(i<498+sprintf(s+5,"%d",i))puts(s+5*(i++%3&&!strchr(s+5,51)));}

그것의 출력 건너 뜁니다 -이 작은 결함이있다i = 0
anatolyg

4
@anatolyg "1 또는 0 (선택한)부터 정확히 500까지 계산해야합니다." — 1에서 시작하기로 결정했습니다.
squeamish ossifrage

그 비트를 놓쳤다. 죄송합니다!
anatolyg

인수를 전달하면 더 많이 건너 뜁니다. lol. 그러나 골프는 잘되어 있습니다. sprintf의 반환 값을 사용하여 세 자리 숫자로 추세를 조정하면서 while을 제어하십시오. 너무 나쁘다 ... 하하!
DreamWarrior

5

줄리아 64 바이트

map(x->x%3==0||contains(string(x),"3")?"Bzzt":string(x),[1:500])

2
[println(a%3==0||3 in digits(a)?"bzzt":a) for a=1:500]54 바이트입니다. 또한 배열을 반환해도 전체 배열이 인쇄되지 않으므로 "출력"으로 계산되는지 확실하지 않습니다. 배열 카운트를 반환하면 [a%3==0||3 in digits(a)?"bzzt":a for a=1:500]45를 계산하고 점수를 매길 수 있습니다.
gggg

5

cmd.exe-91

for /l %x in (1,1,500)do @set/a %x%3|find "0">nul&&echo bzzt||echo %x|find/v"3"||echo bzzt

... 완벽한 직선 라이너가 존재할 때 배치 파일을 사용하는 이유는 ... :-)


5

그루비-51

500.times{println"$it".find('3')||it%3<1?'bzzt':it}

편집 : times인쇄 버전을 사용 하는 것은 "표시"만큼 짧습니다. 감사합니다 @ will-p


1
+1. 당신은 교체 할 수 있습니다 (1..500).each에 대한500.times
LP 것

4

C, 80

줄 바꿈 대신 공백을 구분 기호로 사용합니다.

n;main(){for(;n++<500;)printf(n%10^3&&n/10%10^3&&n/100^3&&n%3?"%d ":"bzzt ",n);}

1 bzzt 3 4 bzzt 6 7 bzzt 9 10 bzzt bzzt 13 bzzt... 여기에 문제가 있습니다.
squeamish ossifrage

나는 너무 욕심이 많고 정의되지 않은 동작 (시퀀스 포인트 사이에서 변수가 수정되고 읽혀 짐)으로 넘어졌습니다. 이제 수정되었습니다.
anatolyg

지금 작업 :-)
으스스한 ossifrage

4

매스 매 티카, 54 자

너무 간단한 느낌입니다. 더 짧은 솔루션이 가능해야합니다.

If[DigitCount[#][[3]] > 0 || #~Mod~3 < 1, Bzzt, #] & /@ Range@500

아포스트로피가 필요하지 않습니다 :)
Dr. belisarius

@belisarius 님. 감사.
Michael Stern

4

T-SQL 2008-80

@domager 덕분에 이겼습니다.

declare @ int=0t:if(@)like'%3%'or @%3=0print'bzzt'print @;set @+=1if @<501goto t

조금 알려진 사실 @은 변수의 유효한 이름입니다. 세트 기반 코드가 더 많은 SQL 변형이기 때문에 이상하게 느껴지지만 짧을수록 짧습니다! 이 버전은 모든 데이터베이스에서 작동합니다. 편집 : 필요하지 않은 두 개의 세미를 제거 할 수있었습니다. 나는 이것이 최대한 최적이라고 확신합니다.

Edit2 : 절대 말하지 마십시오. 이제 goto를 사용하면 더욱 거칠지 만 블록을 피할 수 있습니다. 우리는 대체 할 수 있습니다. 시작하기, 더 짧은 if, t :, goto 6 자로 저장하십시오. 또한 루프를 의사 도피 (pseudo do-while)로 다시 작성함으로써 의미를 재정렬합니다. 편집 3 : 예, 어떻게 든 지금은 더 짧습니다. 기발한:

select top 501iif(number like'%3%'or number%3=0,'bzzt',str(number))from spt_values where'p'=type

마스터 데이터베이스에서 실행해야합니다. 시끄럽고 못생긴 방법에도 불구하고 T-SQL을 좋아합니다. 이 작업을 더 간단하게 만드는 방법이있을 수 있지만 불행히도 iif내장 기능을 사용하려면 양측이 형식에 동의해야합니다. SQL Server 우선 순위 규칙은 문자열보다 우선 순위가 높습니다. 숫자도 실제로 길지만 앨리어싱은 가치보다 더 많은 문자입니다. 숫자를 문자열로 바꾸는 더 좋은 방법이있을 수 있습니다. 편집 : str도 작동합니다. ltrim보다 2 자 적은 문자


처음에는 코드 길이가 2012.96 바이트라고 생각했습니다.
nyuszika7h

@ 101에서 약간 더 길지만 테이블에 의존하지 않음declare @i int=1;while(@i<501)begin;if(@i)like'%3%'or @i%3=0 print'bzzt'else print @i;set @i=@i+1 end
domager

@domager, 완전히 맞습니다. 그리고 변수를로 바꾸면 상당히 많은 문자를 절약 할 수 있습니다 @. 그런 다음 iif ()를 사용하는 것이 if (...) print else print보다 여전히 짧으므로 iif표현식 을 사용하여 약간을 얻을 수 있습니다. 또한 우리는 더 짧은 @+=1문자를 사용하여 문자를 저장할 수 있습니다
Michael B

T-SQL 지원을 몰랐습니다 +=. 테스트하기가 쉽지 않지만 ''+@변하지 않는 로케일을 사용하여 문자열 변환을 지원한다고 확신합니다 .
피터 테일러

+=''+ @를 지원하지만 원하는 작업을 수행하지 않습니다. 내가 말했듯이, 그것은 캐스트 있도록 먼저 int로 캐스팅 우선 순위 규칙은 ''제로 그래서 결과적으로 int로 ''+@되어 @여전히로 입력 int. str작동하고 다른 것보다 훨씬 비싸지 않습니다 (병원을위한 2 문자 추가). 나는 IIF2016 년 출시 SQL이 약간의 소음을 제거하고 경쟁 가능성이 낮다는 것을 알고 있는 운영자 때문에 t-sql 2012를 선택했습니다 .
Michael B

4

VBA : 54

for x=0to 500:?iif(x/3=x\3=instr(1,x,3),x,"Bzzt"):next

자주 사용하는 Office 프로그램을 열고 alt + F11을 눌러 VBA IDE를 열고 코드를 즉시 창에 붙여 넣고 Enter 키를 누릅니다.

VBA에서 :는 행 구분 기호입니다. 인쇄의 줄임말입니다. iif는 (x를 생각합니까? "Y": "N") 인라인을 의미하고, x / 3는 부동 소수점을 나누고 x \ 3은 정수를 나눕니다. instr은 문자열에서 char의 위치를 ​​반환하거나 0 그렇지 않으면 true = -1이고 false = 0입니다.

코드는 기본적으로 x를 증가시키고 x / 3 = x \ 3 = instr (1, x, 3)이 true이면 x를 출력하고 그렇지 않으면 "Bzzt"를 출력합니다. x / 3 = x \ 3은 (float) (x / 3)를 (int) (x / 3)와 비교하고 부울을 반환합니다 (0은 false, -1은 true). instr (1, x, 3)은 "3"이 숫자가 아닌 경우 0을 반환하고 그렇지 않으면 양의 정수를 반환합니다. 식이 true를 반환하는 유일한 시간은 (x / 3 = x \ 3)이 false (0)이고 instr (1, x, 3)이 0 일 때, 즉 x가 3으로 나눌 수없고 그렇지 않은 경우입니다. 우리가 찾고있는 숫자 "3"을 포함합니다.


4

k4 (37) (35)

{$(x;`bzzt)(|/51=$x)|~"."in$x%3}'!501

k4내장 된 모듈로 명령이없고, 명령을 사용 q하면 추가 문자가 필요합니다. 이 버전 (ab)은 내장 출력 형식을 사용하여 x3 으로 나눈 결과의 문자열에 소수점이 있는지 확인 합니다.

편집하다:

{$(x;`bzzt)(|/51=$x)|x=3*_x%3}'!501

소수점과 일치하는 것이 영리 할 수 ​​있지만 3*floor x%3여전히 확인하여 2 바이트를 면도 할 수 있습니다 x.


소수점을 현명하게 일치시키는 것으로 찬성했습니다!
Mark

모든 답변을 하나로 업데이트하지 마십시오. 그러면 현재 진행중인 모든 문제가 첫 페이지에서 사라집니다. 한 번에 한두 번만했다면 좋을 것입니다. (난 사이의 변화는 생각하지 않지만 h1h2처음에 편집을 보증 할만큼 중요합니다.)
마틴 청산을

3

세게 때리다, 53 52 48 46

seq 500|factor|sed '/3.*:\| 3 */cBzzt
s/:.*//'

GNU sed가 필요합니다 ( c확장자 사용).


3

자바, (142) 131 WozzeC 제안에 감사드립니다

public class a{public static void main(String[]a){for(int i=1;i<501;i++)System.out.println(i%3>0&(""+i).indexOf(51)<0?i:"bzzt");}}

1
내 Java는 약간 녹슨입니다. 그러나 피연산자로 짧을까요? i % 3> 0 && ( ""+ i) .indexOf (51) <0? i : "bzzt"입니다. forloop에 대해 {}을 건너 뛸 수도 있습니다.
WozzeC 2016 년

이것은 122 바이트, 9 적은 :class A{public static void main(String[]a){for(int i=0;++i<501;System.out.println(i%3>0&(""+i).indexOf(51)<0?i:"bzzt"));}}
Luigi Cortese

3

R (40) (36)

이것은 기본적으로 plannapus 답변이며 약간 단축되었지만 아직 댓글을 달 수 없습니다

업데이트 : -4 자 (plannapus의 의견 참조)

a=1:500;a[grepl(3,a)|!a%%3]='bzzt';a

산출:

  [1] "1"    "2"    "bzzt" "4"    "5"    "bzzt" "7"    "8"    "bzzt" "10"   "11"   "bzzt" "bzzt" "14"   "bzzt" "16"   "17"   "bzzt" "19"   "20"   "bzzt" "22"   "bzzt" "bzzt" "25"   "26"   "bzzt" "28"   "29"   "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "40"   "41"   "bzzt" "bzzt" "44"   "bzzt" "46"   "47"   "bzzt" "49"   "50"   "bzzt" "52"   "bzzt" "bzzt" "55"   "56"   "bzzt" "58"   "59"   "bzzt" "61"   "62"   "bzzt" "64"   "65"   "bzzt" "67"   "68"   "bzzt" "70"   "71"   "bzzt" "bzzt" "74"   "bzzt" "76"   "77"   "bzzt" "79"   "80"   "bzzt" "82"   "bzzt" "bzzt" "85"   "86"   "bzzt" "88"   "89"   "bzzt" "91"   "92"   "bzzt" "94"   "95"   "bzzt" "97"   "98"   "bzzt" "100"  "101"  "bzzt" "bzzt" "104"  "bzzt" "106"  "107"  "bzzt" "109"  "110"  "bzzt" "112"  "bzzt" "bzzt" "115"  "116"  "bzzt" "118"  "119"  "bzzt" "121"  "122"  "bzzt" "124"  "125"  "bzzt" "127"  "128"  "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "140"  "bzzt" "142"  "bzzt" "bzzt" "145"  "146"  "bzzt" "148"  "149"  "bzzt" "151"  "152"  "bzzt" "154"  "155"  "bzzt" "157"  "158"  "bzzt" "160"  "161"  "bzzt" "bzzt" "164"  "bzzt" "166"  "167"  "bzzt" "169"  "170"  "bzzt" "172"  "bzzt" "bzzt" "175"  "176"  "bzzt" "178"  "179"  "bzzt" "181"  "182"  "bzzt" "184"  "185"  "bzzt" "187"  "188"  "bzzt" "190"  "191"  "bzzt" "bzzt" "194"  "bzzt" "196"  "197"  "bzzt" "199"  "200"  "bzzt" "202"  "bzzt" "bzzt" "205"  "206"  "bzzt" "208"  "209"  "bzzt" "211"  "212"  "bzzt" "214"  "215"  "bzzt" "217"  "218"  "bzzt" "220"  "221"  "bzzt" "bzzt" "224"  "bzzt" "226"  "227"  "bzzt" "229"  "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "241"  "242"  "bzzt" "244"  "245"  "bzzt" "247"  "248"  "bzzt" "250"  "251"  "bzzt" "bzzt" "254"  "bzzt" "256"  "257"  "bzzt" "259"  "260"  "bzzt" "262"  "bzzt" "bzzt" "265"  "266"  "bzzt" "268"  "269"  "bzzt" "271"  "272"  "bzzt" "274"  "275"  "bzzt" "277"  "278"  "bzzt" "280"  "281"  "bzzt" "bzzt" "284"  "bzzt" "286"  "287"  "bzzt" "289"  "290"  "bzzt" "292"  "bzzt" "bzzt" "295"  "296"  "bzzt" "298"  "299"  "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "400"  "401"  "bzzt" "bzzt" "404"  "bzzt" "406"  "407"  "bzzt" "409"  "410"  "bzzt" "412"  "bzzt" "bzzt" "415"  "416"  "bzzt" "418"  "419"  "bzzt" "421"  "422"  "bzzt" "424"  "425"  "bzzt" "427"  "428"  "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "bzzt" "440"  "bzzt" "442"  "bzzt" "bzzt" "445"  "446"  "bzzt" "448"  "449"  "bzzt" "451"  "452"  "bzzt" "454"  "455"  "bzzt" "457"  "458"  "bzzt" "460"  "461"  "bzzt" "bzzt" "464"  "bzzt" "466"  "467"  "bzzt" "469"  "470"  "bzzt" "472"  "bzzt" "bzzt" "475"  "476"  "bzzt" "478"  "479"  "bzzt" "481"  "482"  "bzzt" "484"  "485"  "bzzt" "487"  "488"  "bzzt" "490"  "491"  "bzzt" "bzzt" "494"  "bzzt" "496"  "497"  "bzzt" "499"  "500"

strsplit문자가 아닌 문자를 제공 할 때 많은 문자열 연산 함수 (예 :)가 오류를 발생시키기 grepl때문에 가정 했습니다. 좋은 캐치! +1
plannapus

2
그건 그렇고 당신이 그것을 하나의 표현으로 줄인 이후로 당신은 그 b전에 정의 할 필요가 없습니다 :a=1:500;a[grepl(3,a)|!a%%3]='bzzt';a
plannapus

3

파스칼 - 118 114 111

원래 펀치 카드에 맞도록 개발되었지만 희망이없는 후보입니다. 과거의 모호한 구성을 모두 사용하면 몇 가지 짧은 코드가 여전히 작성 될 수 있습니다.

do3 i=1,500
j=i
if(mod(i,3))2,1,2
1 print*,'bzzt'
cycle
2 goto(1)mod(j,10)-2
j=j/10
if(j>0)goto2
3 print*,i
end

"계산 된 goto"는 goto(L1,L2,...,Ln) x1 <= x <= n 인 경우에만 레이블 L 중 하나로 분기됩니다.

편집 : 숫자 3을 확인하는 루프를 재정렬하여 4 바이트를 면도하도록 관리했습니다. 보너스로 코드에는 산술 if-statement도 포함되어 있습니다.이 경우 if(x) a,b,c항상 세 레이블 중 하나로 분기됩니다. x == 0이면 c 또는 x> 0이면 c

불행히도 처음 두 버전은 올바른 출력을 생성하지 못했습니다. 이제 Digit-3 루프가 올바르게 작동하고 코드에 최신 논리 if 문도 포함됩니다. 누가 enddo문장이 필요하기 때문에 3 바이트가 더 사라 졌 습니까? 출력은 여기에서 확인할 수 있습니다 .

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