나만의 레드와 블랙 만들기


9

Les Miserables의 음악 공연에서 "Red and Black"이라는 노래가 나타납니다. 그 노래의 일부는 다음과 같습니다.

레드-화난 남자의 피!

검은-과거의 어둠!

레드-새벽이 다가올 세상!

블랙-마침내 끝나는 밤!

출처.

당신의 임무는 입력을 울리는 "빨간색과 검은 색"국가로 바꾸는 것입니다.

입력

줄 바꿈으로 구분 된 텍스트 또는 이와 유사한 텍스트 입력. 예를 들어

The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!

빈 입력이 정의되지 않았습니다 (범위를 벗어남).

산출

입력의 길이 (라인 수 또는 입력 배열의 길이 등)가 홀수이면 아무 것도 출력하지 않거나 거짓을 출력합니다. 제출물이 오류를 출력하지 않거나 올바른 출력을 시도하지 않을 수 있습니다.

그렇지 않으면 입력을 빨강 / 검정 가사로 바꿉니다. 줄의 시작 부분에서 대문자를 소문자로 바꿉니다. Red홀수 라인 앞에 구분 기호를 추가 하고 짝수 라인 앞에 구분 기호를 추가하십시오 Black. 구분 기호도 공백으로 묶어야하므로 출력이 혼잡하지 않은 것처럼 보입니다 (및 골퍼되지 않은;)).

이제 출력이 있습니다.

테스트 사례

출력 분리 문자는 -입니다.

In:
The blood of angry men!
The dark of ages past!
A world about to dawn!
The night that ends at last!

Out:
Red - the blood of angry men!
Black - the dark of ages past!
Red - a world about to dawn!
Black - the night that ends at last!

In:
test test
1
[][][]
BBB

Out:
Red - test test
Black - 1
Red - [][][]
Black - bBB

In:
I feel my soul on fire!
The color of desire!
The color of despair!
Out:
falsey OR nothing

In:
Red - I feel my soul on fire!
Black - My world if she's not there!

Out:
Red - red - I feel my soul on fire!
Black - black - My world if she's not there!


"입력 길이가 이상하다"는 말이나 줄에 대해 이야기하고 있습니까?
Tutleman

@Tutleman 줄 수, 명확히하겠습니다
Stephen

3
나는이 도전이 그대로 괜찮다고 생각하지만 일반적으로 제출이 유효하지 않은 입력을 처리 한다고해서 실제로 많은 것을 추가하지는 않습니다 . 나중에 참조 할 수 있습니다.
James

@DJMcMayhem 대답이 없었기 때문에 빈 입력을 정의하지 않을 것입니다-더 의미가 있습니다. 감사합니다 (홀수 길이 입력을 그대로 유지하고 싶습니다)
Stephen

답변:


4

05AB1E , 26 바이트

암호:

|©v”†¾ƒÏ”#Nè… - yćlìJ®gÈ×,

05AB1E 인코딩을 사용합니다 . 온라인으로 사용해보십시오!

설명:

|                               # Take the input as an array of inputs
 ©                              # Keep a copy of this in the register
  v                             # Map over the array
   ”†¾ƒÏ”#                      #   Push the array ["Red", "Black"]
          Nè                    #   Get the Nth element (where N is the iteration index)
            … -                 #   Push the string " - "
                yć              #   Push the current element and extract the first element
                  lì            #   Convert to lowercase and prepend back to it's
                                    original place
                    J           #   Join the entire stack into a single string
                     ®g         #   Get the length of the input
                       È        #   Check if it is even (results in 1 or 0)
                        ×       #   String multiply the result by the string
                         ,      #   Pop and print with a newline

5

V , 31 , 30 바이트

êuòIRed - 
IBlack - 
òñFRdH

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

16 진 덤프 :

00000000: 16ea 75f2 4952 6564 202d 201b 0a49 426c  ..u.IRed - ..IBl
00000010: 6163 6b20 2d20 1b0a f2f1 4652 6448       ack - ....FRdH

이것은 V에서는 사소한 것이지만 홀수 입력의 경우에는 V에 실제로 조건이 없기 때문에 까다로워집니다. 고맙게도 비교적 적은 비용으로 +6바이트를 처리 할 수 ​​있습니다 .


5

하스켈 , 104 120 113 112 111 110 바이트

import Data.Char
f x|odd$length$x=mempty|1<2=Just$zipWith(\(h:t)x->x++toLower h:t)x$cycle["Red - ","Black - "]

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

설명이 담겨 있지 않은

import Data.Char

f :: [String] -> Maybe [String]
f x
  | even $ length $ x = Just $ zipWith (\(h : t) x -> x ++ toLower h : t) x $ cycle ["Red - ","Black - "]
  | otherwise         = Nothing

f문자열 목록 (일명 Chars 목록 목록)을 가져 오는 함수입니다 Maybe. Haskell의 함수는 "순수"하므로이 함수가 아무 것도 반환하지 않을 수 있음을 분명히해야합니다. (유형의 기능 Maybe a반환하거나 Nothing또는 Just a).

|조건의 종류 - 연산자는 가드입니다. 첫 번째 브랜치는 다음과 같은 경우 even $ length $ x에 작성 됩니다 (또 다른 작성 방법 even (length x)) True. 그렇지 않으면 두 번째 1<2예제 ( 골프 예제에서는 물론 항상 참)가 따르고 우리는을 반환 Nothing합니다.

zipWith두 개의 인수 함수를 사용하여 두 목록의 각 요소에 적용합니다. 여기서 사용하는 기능은 \(h : t) x -> x ++ toLower h : t입니다. h : t첫 번째 문자에서 첫 번째 문자를 암시 적으로 분리합니다. Haskell에서 할 수있는 좋은 일입니다. 첫 번째 목록은 입력 (우리가 이미 짝수 개의 행을 포함하고 있음)이고 두 번째 목록은 "빨간색-"과 "검은 색-"을 무한대로 번갈아 가며 (무한 목록은 이번에는 Haskell이 있기 때문에 가능한 또 다른 좋은 일입니다. 게으른-그것은 당신이 사용하는 것만 큼 많은 것에 관심이 있습니다).


(h:t)!x=x++toLower h:t바이트를 절약합니다.
Laikoni

두 경우를 전환하면 다른 바이트가 절약됩니다.f x|odd$length$x=Nothing|1<2=Just ...
Laikoni

@Laikoni 감사합니다! 나는 Haskell을 처음 접했고 이것이 처음으로 골프를 타는 것입니다. 정말 좋아합니다!
felixphew

mempty에 비해 1 바이트를 절약합니다 Nothing!
bartavelle

대신 다음을 정의 c="Red - ":"Black - ":c하고 사용하여 다른 바이트를 저장할 수 있습니다 . 온라인으로 시도하십시오! ccycle["Red - ","Black - "]
Laikoni

3

젤리 , 29 바이트

0
“ZœĠk»ḲṁJżj€“ - ”Y
ỴŒl1¦€LĿ

전체 프로그램.
홀수 행이있는 입력에 "falsey"출력 옵션을 사용합니다.

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

어떻게?

0 - Link 1, return a falsey value: no arguments
0 - well, yeah, zero - that's falsey.

“ZœĠk»ḲṁJżj€“ - ”Y - Link 2, format the lines: list of lists of characters, the lines
“ZœĠk»             - "Red Black"
      Ḳ            - split at spaces -> ["Red","Black"]
        J          - range(length(lines)) -> [1,2,3,...,nLines]
       ṁ           - mould -> ["Red","Black","Red","Black",...,"Red","Black"]
         ż         - zip with lines -> [["Red",l1],["Black",l2],...]
            “ - ”  - " - " (really I cant find any save :/)
          j€       - join for each -> ["Red - l1","Black - l2",...]
                 Y - join with newlines

ỴŒl1¦€LĿ - Main link: string
Ỵ        - split at newlines
   1¦€   - apply to index 1:
 Œl      -   convert to lower case
       Ŀ - call link at index:
      L  -   length - Note: this is modular, so:
         -                  link 2 is called for even, and
         -                  link 1 is called for odd.


3

C, 112 (107) 105 (103) 99 바이트

ASCII 전용
-4 덕분에 -2 Mego 덕분에 -2

i;main(a,s)char**s;{for(;a%2&++i<a;)printf("%s - %c%s\n",i%2?"Red":"Black",tolower(*s[i]),s[i]+1);}

"배열"을 입력으로 사용합니다. 예:

bash$ ./a.out "The blood of angry men!" "The dark of ages past!" "A world about to dawn!"
bash$ ./a.out "The blood of angry men!" "The dark of ages past!" "A world about to dawn!" "The night that ends at last!"                                                 
Red - the blood of angry men!
Black - the dark of ages past!
Red - a world about to dawn!
Black - the night that ends at last!

작동 원리

  • ii모든 함수 외부에 변수를 만듭니다. 즉, 자동으로 0으로 초기화됩니다.
  • main(a,s)char**s;{주 함수를 선언합니다.이 함수는 int a(명령 줄 인수의 #)와 char ** s(명령 줄 인수의 배열 )의 두 가지 인수를 사용 합니다.
  • for(;a%2&++i<a;)a짝수 ( a%2)이고 전달 된 명령 줄 인수 ( i<a) 의 수보다 적은지 확인하는 루프입니다 .
  • printf("%s - %c%s\n",i%2"Red":"Black",tolower(*s[i]),s[i]+1 인쇄물:
    • i홀수 이면 "빨간색", 짝수이면 "검정색" i( i%2?"Red":"Black")
    • 현재 명령 행 인수의 첫 글자 (소문자) ( tolower(*s[i]))
    • 첫 글자가없는 문자열 ( s[i]+1)

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


전역 변수는 기본적으로 초기화되므로 =02 바이트를 더 절약하기 위해 파트를 생략 할 수 있습니다 .
코디 그레이

@CodyGray 오 예, 감사합니다!
MD XF





1

JavaScript (ES6), 93 바이트

노래를 줄의 배열로 가져옵니다.

S=>S.length%2?0:S.map((L,i)=>(i%2?'Black':'Red')+' - '+L[0].toLowerCase()+L.slice(1)).join`
`


@ Stephen-S이 입력은 유효합니까?
Vitim.us 2016 년

1

파이썬 2 , 215-> 184-> 165 바이트

Stephen S의 의견에 따라 31 바이트 저장

Challenger5는 165 바이트로 줄였습니다.

l=[]
b=["Red","Black"]
d=" - "
while 1:
 a=raw_input()
 if a:l.append(a)
 else:break
q=len(l)
if q%2<1:
 for i in range(q):n=l[i];print b[i%2]+d+n[0].lower()+n[1:]

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


들여 쓰기를 위해 단일 공백을 사용하여 바이트를 절약 할 수 있습니까? 나는 파이썬을 잘 모르지만 그것이 효과가 있다고 생각합니다
Stephen

@ Stephen S : 네, 당신이 옳다고 생각합니다.
LMD


1

자바 스크립트, 118 바이트

v=s=>(s=s.split`\n`).length%2==0?s.map((l,i)=>(i%2==0?'Red':'Black')+' - '+l[0].toLowerCase()+l.substr`1`).join`\n`:!1

테스트

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