피즈-끈을 끈다


21

영어 알파벳 문자 (소문자와 대문자) 만 포함 된 문자열이 제공됩니다 (ASCII 65-90 및 97-122). 당신의 임무는 Fizz-Buzzified 버전의 String을 출력하는 것입니다.

문자열을 Fizz-Buzzify하는 방법?

  • 영어 알파벳의 경우에도 인덱스가 각각의 문자 (알파벳이 있어야합니다 (1) - 색인 : a->1,b->2,...,z->26)으로 전환 될 것이다 fizz는 소문자되는 경우 FIZZ가 대문자 인 경우 ( f -> fizz, F -> FIZZ).

  • 영어 알파벳에 홀수 색인이있는 각 문자 buzz는 소문자 BUZZ이거나 대문자 ( e -> buzz, E -> BUZZ) 이면 바뀝니다 .

  • 문자열 CodeGolf(명확성을 위해 추가 된 공백)을 사용하여 알고리즘을 설명하는 예를 보도록하겠습니다 .

    "C o d e G o l f" ->  "BUZZ buzz fizz buzz BUZZ buzz fizz fizz"
     ^ ^ ^ ^ ^ ^ ^ ^
     1 1 0 1 1 1 0 0       (1 is odd index, 0 is even index)
    
  • 귀하의 언어에 더 편리한 경우 그룹 사이에 공백을 두어도 됩니다 ( fizz, buzz, FIZZ, BUZZ). 따라서 같은 결과도로 fizzBUZZbuzzbuzz반환 될 수 있습니다 fizz BUZZ buzz buzz. 다른 구분 기호는 사용할 수 없습니다.


테스트 사례 :

입력-> 출력 

"계란"-> "버즈 버즈 버즈"
"CodeGolf"-> "BUZZbuzzfizzbuzzBUZZbuzzfizzfizz"
"재설정"-> "FIZZbuzzbuzzbuzzfizz"
"ATOM"-> "BUZZFIZZBUZZBUZZ"
"yOuArEgReAt"-> "buzzBUZZbuzzBUZZfizzBUZZbuzzFIZZbuzzBUZZfizz"

  • 모든 I / O 표준 방법을 사용할 수 있습니다.

  • 기본 허점이 적용됩니다.

  • 언어의 기본 문자열 유형으로 만 입력 할 수 있습니다. 출력에도 동일하게 적용됩니다.

  • 입력이 비어 있지 않다고 가정 할 수 있습니다.

  • 모든 언어에서 가장 짧은 바이트 코드가 이깁니다. 행운과 피즈 버즈!


답변:


7

, 26 24 바이트

FθF⎇﹪℅ι²buzz¦fizz⎇№αι↥κκ

온라인으로 사용해보십시오! 원래 @CarlosAlejo에서 영감을 얻었습니다. 편집 : 임시에 할당하는 대신 fizz / buzz 문자를 반복하여 2 바이트를 절약했습니다. 설명:

Fθ          Loop over the input (i = loop variable)
  F         Choose and loop over the word (k = loop variable)
   ⎇        Ternary
    ﹪℅ι²    If i has an odd ASCII code
    buzz
    fizz
            Print (implicit)
  ⎇         Ternary
   №αι      If i is an uppercase letter
    ↥κ      Uppercase(k)
     κ      k

나는 마침내 당신의 해결책을 이해하게되었습니다. 원래 문자열에서 char Ordinal(i)의 위치 를 반환 한다고 생각 i했지만 ASCII 값 (문자 코드)을 반환합니다. 매우 영리한 솔루션, 여전히 내 숯 기술을 많이 향상시켜야합니다!
Charlie

이 작업을 숯에서 24 바이트로만 수행하는 방법 ...
Outgolfer Erik

이 24 바이트는 어떤 인코딩입니까?
Ruslan

@Ruslan에서 숯의 사용자 지정 코드 페이지 .
Neil

6

C #, 92 바이트

using System.Linq;a=>string.Concat(a.Select(x=>x%2<1?x<97?"FIZZ":"fizz":x<97?"BUZZ":"buzz"))

거의 같은 시간에 게시하지만 당신은 삼항에게 짧은 방법 일 주문하여 내 솔루션에 바이트를 저장
TheLethalCoder

@ TheLethalCoder 아아, 죄송합니다.
LiefdeWen

12 초 간격으로 게시 한 것에 대해 죄송합니다! 그리고 당신은 더 짧습니다!
TheLethalCoder

C #을 사용 x%2하면 <1부분이 없어도 부울로 직접 사용할 수 있습니까? 그렇다면 일부 바이트를 그런 식으로 저장할 수 있습니다.
브라이언 J

@BrianJ 아니 그것은 암시 적으로하지 않습니다
LiefdeWen



4

자바 (오픈 JDK 8) , 105 (100) 94 91 90 바이트

s->{for(int i:s.getBytes())System.out.print(i%2<1?i>90?"fizz":"FIZZ":i>90?"buzz":"BUZZ");}

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

많은 골프, 매우 바이트, 그래서 자바!

@KevinCruijssen이 9 바이트 씩 골프를 쳤습니다!


스트림이 더 짧아 질 것이라고 생각했기 때문에 하나를 썼습니다. s->s.join("",s.chars().mapToObj(i->i>90?i%2<1?"fizz":"buzz":i%2<1?"FIZZ":"BUZZ").toArray(String[]::new));아아, 그것은 105 자 길이입니다 : (만 join스트림에 직접 추가 하거나 toList실제로 통합 할 수 있다면 , 현명한 것이 좋을 것입니다.
Olivier Grégoire

1
문자열을 반환하는 대신 직접 인쇄하는 것이 6 바이트 짧고 getBytes()대신 사용 하는 toCharArray()것이 3 바이트 더 짧습니다.s->{for(int i:s.getBytes())System.out.print(i>90?i%2<1?"fizz":"buzz":i%2<1?"FIZZ":"BUZZ");}
Kevin Cruijssen 2016 년

당신은 변경하여 추가로 3 바이트를 잊었 toCharArray()getBytes(). :)
Kevin Cruijssen

1
나는 당신의 편집 전에 클릭했고 나중에 그것을 보지 못했습니다;) 또한, 나는 단지 당신의 의견을보기 전에 그것을 생각했습니다 xD
Olivier Grégoire

3

자바 스크립트 (ES6), 79 77 바이트

s=>s.replace(/./g,c=>['BUZZ','buzz','FIZZ','fizz'][parseInt(c,36)%2*2|c>'Z'])

테스트 사례


3

C #, 97 바이트

using System.Linq;s=>string.Concat(s.Select(c=>"fizzbuzzFIZZBUZZ".Substring(c%2*4+(c>96?0:8),2)))

저는 C #을 모르지만 사용할 수 없습니다c%2>1?c>96?"fizz":"buzz":...
Mr. Xcoder



3

일반 영어 , 820 632 610 바이트

Xcoder 는 불필요한 오류 트랩을 제거하여 22 바이트를 절약 할 것을 제안했습니다.

A fizzy string is a string.
To convert a s string to a z fizzy string:
Clear the z.
Slap a r rider on the s.
Loop.
If the r's source's first is greater than the r's source's last, exit.
Put the r's source's first's target in a b byte.
If the b is not any letter, bump the r; repeat.
Put "FIZZ" in a t string.
If the b is d, put "BUZZ" in the t.
If the b is _, lowercase the t.
Append the t to the z.
Bump the r.
Repeat.
To decide if a b byte is d:
Put the b in a n number.
If the n is odd, say yes.
Say no.
To decide if a b byte is _:
Put the b in a c byte.
Lowercase the c.
If the c is the b, say yes.
Say no.

Ungolfed 코드 :

A fizzy string is a string.

To convert a string to a fizzy string:
  Clear the fizzy string.
  Slap a rider on the string.
  Loop.
    If the rider's source's first is greater than the rider's source's last, exit.
    Put the rider's source's first's target in a byte.
    If the byte is not any letter, bump the rider; repeat.
    Put "FIZZ" in another string.
    If the byte is odd, put "BUZZ" in the other string.
    If the byte is lower case, lowercase the other string.
    Append the other string to the fizzy string.
    Bump the rider.
  Repeat.

To decide if a byte is odd:
  Put the byte in a number.
  If the number is odd, say yes.
  Say no.

To decide if a byte is lower case:
  Privatize the byte.
  Lowercase the byte.
  If the byte is the original byte, say yes.
  Say no.

일반 영어 IDE는 github.com/Folds/english 에서 사용할 수 있습니다 . IDE는 Windows에서 실행됩니다. 32 비트 x86 코드로 컴파일됩니다.


1
"입력이 비어 있지 않다고 가정 할 수 있습니다." 그래서 나는 당신이 떨어질 수 있다고 생각If the s is "", exit.
씨 Xcoder

@ Mr.Xcoder-감사합니다. s가 비어 있어도 트랩이 필요하지 않은 것으로 판명되었습니다.
재스퍼

2

, 40 36 바이트

Fθ¿№αι¿﹪⌕αι²FIZZ¦BUZZ¿﹪⌕βι²fizz¦buzz

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

설명:

Fθ                                      for every char i in the input:
   ¿№αι                                    if i is found in the uppercase alphabet
       ¿﹪⌕αι²                             if i is an even uppercase char
              FIZZ¦BUZZ                    print "FIZZ" or else "BUZZ"
                       ¿﹪⌕βι²             if i is an even lowercase char
                              fizz¦buzz    print "fizz" or else "buzz"

동일한 바이트 수를 가진 대안 :

AfizzφAbuzzχFθ¿№αι¿﹪⌕αι²↥φ↥χ¿﹪⌕βι²φχ

온라인으로 사용해보십시오! ( 자세한 버전 )

  • Neil 덕분에 4 바이트가 절약되었습니다!

1
일부 바이트를 저장하는 대신 Count또는 Ordinal각각을 사용하십시오 Find.
Neil

전체 if는 하나의 진술로 간주되므로 {}s 가 필요하지 않습니다 . 또한 Uppercase내부 를 이동하여 바이트를 저장했습니다 Ternary: 온라인으로보십시오!
Neil

더 좋은 방법 Fθ«A⎇﹪℅ι²buzz¦fizzχ⎇№αι↥χχ은 26 바이트입니다. (Deverbosifier는이 버전을 좋아하지 않습니다.)
Neil

@Neil 대단히 감사하지만 마지막 버전을 이해할 수 없으므로 크레딧을받을 수 없습니다. 제 답변이 아닌 것 같습니다. 당신이 당신의 자신의 게시물을 작성하면 나는 당신에 의해 outgolfed 영광입니다. :-)
Charlie

2

> <> , 68 바이트

<vv?("^"$%2:;?(0:i
v\?\"zzif"
v \\"zzub"
v \ "ZZIF"
v  \"ZZUB"
\oooo

온라인으로 시도 하거나 물고기 놀이터 에서 시청하십시오 !

(그러나 13 바이트 더 짧은 Aaron의 대답 을보십시오!)

> <>에 익숙하지 않은 경우 코드를 통해 2D로 수영하는 물고기가 있고 가장자리가 줄 바꿈됩니다. 기호는 >, <, ^v물고기의 방향을 설정 /하고 \그것을 반영하는 거울,있는 ?수단 "스택의 맨 위의 것은 제로가 아닌 경우, 그렇지 않으면, 다음 명령을 다음 명령을 통해 점프"가.

첫 번째 줄에서 물고기는 입력 문자 ( i)를 취합니다 . EOF의 경우 -1이면 중지됩니다 ( :0(?;). charcode mod 2 ( :2%$)를 얻습니다 . 그리고 문자 코드가 문자 "^"보다 작거나 큰지 여부에 따라 스택에서 1 또는 0을 푸시합니다."^"( ) . 다음 세 줄은 물고기를 오른쪽 fizz / 버즈 문자열로 리디렉션 한 다음 마지막 줄은 물고기를 인쇄하고 ( o각 문자마다 하나씩) 물고기를 처음으로 다시 보냅니다.


@Aaron, 훌륭합니다! 나는 그 아이디어를 생각했지만 작동시키지 못했습니다. 귀하의 솔루션으로 게시 하시겠습니까?
나무가 아닙니다

@Aaron, 당신은 또한 인터프리터 나 TIO 나 온라인 인터프리터 에서 버그를 발견했습니다. 인터프리터 !?그 뒤에 공백 만 건너 뛰지 만 공백이 아닌 다음 건너 뛰기를 기다릴 때까지 기다립니다.
트리가 아닙니다.

@Aaron, 귀하의 제출물이 내 것보다 훨씬 낫기 때문에 직접 게시하여 삭제할 수 있습니다.
나무가 아닙니다

!공백을 건너 뛰어야하지만 온라인 인터프리터는 코드 공간을 공백으로 채 웁니다. 아마도 여러분이보고 계신 것입니다
Aaron


2

> <> , 55 바이트

나무가 아닌 대답 에 기초 .

<v%2$)"^":;?(0:i
 \?v"ZZIF"
~v >"ZZUB"!
^>{:}" "*+ol1=?

코드에서 4 개의 가능한 출력을 나타내는 대신 대문자로만 된 버전 만 나타내고 문자 코드에 32를 추가하여 작은 대소 문자를 구합니다.

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

빈 공간으로 코드 공간을 채우는 온라인 인터프리터 용 수정 된 코드 :

<v%2$)"^":;?(0:i
 \?v"ZZIF"
~v >"ZZUB"     !
^>{:}" "*+o l1=?

2

Perl5 , 50 + 1 바이트

perl -nE'say+((FIZZ,BUZZ)x48,(fizz,buzz)x16)[unpack"C*",$_]'

ASCII 문자를 적절한 코드 단어에 매핑하는 128 개 항목 목록을 만듭니다.


1

05AB1E , 22 바이트

v‘FIZZÒÖ‘#yÇÉèAyåil}J?

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

설명

v                        # for each char y of input string
 ‘FIZZÒÖ‘#               # push the list ['FIZZ','BUZZ']
          yÇÉ            # check if y has an odd character code
             è           # use this to index into the list
              Ayåi       # if y is a member of the lowercase alphabet
                  l}     # convert to lowercase
                    J?   # unwrap from list and print

대체 22 바이트 솔루션

ÇÉAISå·+‘FIZZÒÖ‘#Dl«èJ


1

F # , 154 153 145 바이트

저장 9 바이트 덕분에 @Mr. Xcoder

let g s=
 Seq.map(fun c->match int c with
|x when x>64&&x<91->if x%2=0 then"FIZZ"else"BUZZ"
|x->if x%2=0 then"fizz"else"buzz")s
|>String.concat""

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


사이의 공간을 제거하여 1 바이트를 저장 concat하고 ""마지막 줄에
씨 Xcoder


145 바이트 , 불필요한 공백 제거
Mr. Xcoder

감사합니다 @ Mr.Xcoder 나는 여전히 F #에 익숙해지고 들여 쓰기가 중요 할 때!

1
그리고 BTW, PPCG에 오신 것을 환영합니다! 나는 F #을 전혀 모른다. 단지 무슨 일이 일어나는지보기 위해 물건을 제거했다. :)
Mr. Xcoder

1

수학, 134 바이트

""<>{(s=Max@ToCharacterCode@#;If[96<s<123,If[EvenQ@s,c="fizz",c="buzz"]];If[64<s<91,If[EvenQ@s,c="FIZZ",c="BUZZ"]];c)&/@Characters@#}&

1

자바 8, 89 바이트

s->s.chars().mapToObj(i->i%2<1?i>90?"fizz":"FIZZ":i>90?"buzz":"BUZZ").collect(joining());

가정 import static java.util.stream.Collectors.*;


1

q / kdb +, 48 바이트

해결책:

raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$

예 :

q)raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$"egg"
"buzzbuzzbuzz"
q)raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$"CodeGolf"
"BUZZbuzzfizzbuzzBUZZbuzzfizzfizz"
q)raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$"Reset"
"FIZZbuzzbuzzbuzzfizz"
q)raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$"ATOM"
"BUZZFIZZBUZZBUZZ"
q)raze{@[($)`fizz`buzz x mod 2;(&)x<91;upper]}"i"$"yOuArEgReAt"
"buzzBUZZbuzzBUZZfizzBUZZbuzzFIZZbuzzBUZZfizz"

설명:

매우 간단, ASCII 값으로 주조 입력 문자열을 가지고 그 홀수 또는 짝수 (힌트 A = 65 = 홀수)인지를 1 또는 0 따라 목록을 생성 한 다음 목록에 색인이리스트를 사용 fizz하고 buzz. 이것을 문자열로 캐스트 한 다음 입력이 <91 (Z보다 낮음) 인 경우 upper함수를 적용하여 a FIZZ또는 a 를 얻습니다 .BUZZ .

q는 오른쪽에서 왼쪽으로 해석됩니다.

raze{@[string `fizz`buzz x mod 2;where x < 91;upper]}"i"$ / ungolfed version
                                                     "i"$ / cast input to ascii values
    {                                               }     / anonymous lambda
     @[                         ;            ;     ]      / apply 
                                              upper       / upper-case
                                 where x < 91             / indices where input is less than 91 (ie uppercase)
                         x mod 2                          / returns 0 if even and 1 if odd
              `fizz`buzz                                  / 2 item list, which we are indexing into
       string                                             / cast symbols to strings `buzz -> "buzz"
raze                                                      / raze (merge) list into a single string

나는이 언어를 모른다, 그러나 당신은 사이의 공간을 제거 할 수 있습니다 mod2?
Mr. Xcoder 2016 년

불행히도, 그것은 로 기록 될 mod[x;2]우리가 공백을하지 않은 경우 -하지만 1 바이트 이상되는 바람이!
streetster


1

스위프트 4 , 144135 바이트

func f(s:String){print(s.map{let d=Int(UnicodeScalar("\($0)")!.value);return d%2<1 ?d>90 ?"fizz":"FIZZ":d>90 ?"buzz":"BUZZ"}.joined())}

언 골프 :

func f(s:String){
    print(
        s.map{
            let d=Int(UnicodeScalar("\($0)")!.value)
            return d%2 < 1 ? d > 90 ? "fizz" : "FIZZ" : d > 90 ? "buzz" : "BUZZ"
        }.joined()
    )
}

내가하고있는 일은 문자열의 각 문자를 반복하는 것입니다. 각각을 ASCII 값으로 변환 한 다음 짝수 또는 홀수인지 확인한 다음 대문자 또는 소문자인지 확인하고 루프에서 일치하는 값을 출력합니다. 그런 다음 결과 배열의 모든 요소를 ​​단일 문자열로 결합하여 인쇄합니다.

이 솔루션은 Swift 4를 사용하므로 온라인에서 쉽게 테스트 할 수있는 방법이 없습니다.

9 바이트를 절약 해 준 @ Mr.Xcoder에게 감사합니다!


error: value of type 'String' has no member 'map'런타임시 문자열이 자동으로 목록으로 변환되지 않기 때문입니다.
Mr. Xcoder 2016 년

또한 그 서비스는 무료가 아닙니다. 복사하여 붙여 넣지 않은 경우 제출을 테스트하려면 신용 카드를 추가해야합니다. 테스트 서비스 변경을 고려하십시오.
Mr. Xcoder 2016 년

그것이 작동되도록하려면로를 설정해야합니다$0.characters.map{...}
씨 Xcoder

@ Mr.Xcoder Cloud 9에는 프리 티어가 있으며, 여기에는 하나의 개인용 작업 공간과 무제한의 공용 작업 공간 만 있습니다. GitHub를 통해 로그인 할 수 있어야합니다. 나는 그것과 아무것도 공유하지 않았으므로 그것이 효과가 있는지 확신하지 못했습니다. 또한 String이 Collection을 준수하는 Swift 4를 사용하고 있다고 언급해야합니다. 이것은 맵 기능이 있다는 것을 의미합니다.
Caleb Kleveter 2018 년

1
내가 볼 수있는 것처럼, 기존의 함수 선언은 여전히 스위프트 4 유효 func f(s:String){...}따라서 다음과 같은 코드를 사용하여 9 바이트를 저장할 수 있다는 사용 print하는 대신 return: pastebin.com/06kiiGaJ . 그래도 작동하지 않으면 알려주세요.
Mr. Xcoder 2016 년

1

R, 150 (123) 108 바이트

i=ifelse
cat(i(sapply(el(strsplit(scan(,''),'')),utf8ToInt)>91,i(x%%2,'buzz','fizz'),i(x%%2,'BUZZ','FIZZ')))

ASCII를 사용하여 더 짧아야합니까? 더 짧았습니다. 사용 된 이전 답변에 대한 수정 기록을 참조하십시오 letters.

각 문자가 (1) 대문자인지 아닌지 ( >91), a fizz인지 a 인지 확인합니다 buzz.


-3

자바

str.chars().forEach(ch ->{
    if(ch >= 97)
        strb.append(ch % 2 == 0 ? "fizz" : "buzz");
    else
        strb.append(ch % 2 == 0 ? "FIZZ" : "BUZZ");
});

6
안녕하세요! PPCG에 오신 것을 환영합니다! 우리는 골프 커뮤니티이므로 가능한 한 많은 바이트를 제거하려고합니다. 여기에는 변수 이름과 공백의 바이트가 포함되며 답에서 제거 할 수 있습니다. 또한 제출물은 전체 프로그램 (예 : 보일러 플레이트 포함 public static void main) 또는 기능 이어야합니다 . 현재 귀하는 스 니펫입니다.
Stephen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.