Tạo màu đỏ và đen của riêng bạn


9

Trong bản tái hiện âm nhạc của Les Miserables, một bài hát xuất hiện có tên là "Red and Black". Đây là một phần của bài hát đó:

Màu đỏ - máu của những người đàn ông giận dữ!

Đen - bóng tối của thời đại đã qua!

Màu đỏ - một thế giới sắp bình minh!

Đen - đêm cuối cùng kết thúc!

Nguồn.

Nhiệm vụ của bạn là biến đầu vào thành một giai điệu "Đỏ và Đen" vang dội.

Đầu vào

Văn bản được phân định bởi các dòng mới hoặc một kiểu nhập văn bản phù hợp tương tự. Ví dụ,

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

Đầu vào trống không được xác định (ngoài phạm vi).

Đầu ra

Nếu độ dài (số dòng hoặc độ dài của mảng đầu vào hoặc tương tự) của đầu vào là số lẻ, thì đầu ra không có gì hoặc đầu ra falsey. Việc gửi của bạn có thể không xuất ra lỗi hoặc cố gắng để xuất đầu ra chính xác.

Nếu không, hãy chuyển đầu vào thành một lời bài hát Đỏ / Đen. Biến bất kỳ chữ in hoa nào ở đầu dòng thành chữ thường. Thêm Redcộng với một dấu phân cách ở phía trước của các dòng lẻ và Blackcộng với một dấu phân cách (hiển thị) ở phía trước của các dòng chẵn. Dấu phân cách cũng phải được bao quanh trong các khoảng trắng, vì vậy đầu ra trông không bị tắc nghẽn (và không được mã hóa;)).

Bây giờ bạn có đầu ra của bạn.

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

Dấu phân cách đầu ra là -.

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!


Bởi "hoặc độ dài của đầu vào là số lẻ", bạn đang nói về các dòng hoặc ký tự?
Người hướng dẫn

@Tutman số dòng, tôi sẽ làm rõ
Stephen

3
Tôi nghĩ rằng thách thức này vẫn ổn, nhưng nói chung, việc gửi bài xử lý đầu vào không hợp lệ không thực sự bổ sung nhiều . Chỉ để tham khảo trong tương lai.
James

@DJMcMayhem vì không có câu trả lời, tôi sẽ làm cho đầu vào trống không xác định - có ý nghĩa hơn, cảm ơn (tôi muốn giữ nguyên đầu vào có độ dài lẻ)
Stephen

Câu trả lời:


4

05AB1E , 26 byte

Mã số:

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

Sử dụng mã hóa 05AB1E . Hãy thử trực tuyến!

Giải trình:

|                               # 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 byte

êuòIRed - 
IBlack - 
òñFRdH

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

Hexdump:

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

Điều này là không quan trọng trong V, nhưng trường hợp cạnh của đầu vào lẻ ​​làm cho nó khó khăn vì V không thực sự có điều kiện. Rất may, chúng ta có thể xử lý việc này với chi phí +6byte tương đối nhỏ .


5

Haskell , 104 120 113 112 111 110 byte

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

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

Ung dung với lời giải thích

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

flà một hàm lấy danh sách các chuỗi (còn gọi là danh sách các danh sách Char) và trả về Maybecùng. Các chức năng của Haskell khá "thuần túy", và vì vậy chúng tôi cần phải làm rõ rằng chức năng này có thể không trả về bất cứ điều gì. (Một hàm kiểu Maybe atrả về Nothinghoặc Just a).

Các |nhà điều hành là một người bảo vệ - một loại có điều kiện. Nhánh đầu tiên được theo sau nếu even $ length $ x(đó là một cách viết khác even (length x)) True. 1<2Mặt khác, cái thứ hai ( trong ví dụ về golf, tất nhiên luôn luôn đúng) được theo sau và chúng tôi quay lại Nothing.

zipWithnhận một hàm hai đối số và áp dụng nó cho từng phần tử của hai danh sách. Chức năng chúng tôi đang sử dụng ở đây là \(h : t) x -> x ++ toLower h : t. h : tngầm tách nhân vật đầu tiên ra khỏi đối số đầu tiên của chúng tôi, đó là điều tốt đẹp bạn có thể làm trong Haskell. Danh sách đầu tiên là đầu vào (mà chúng ta đã biết chứa số dòng chẵn) và danh sách thứ hai chỉ là xen kẽ "Đỏ -" và "Đen -" (danh sách vô hạn là một điều tốt đẹp khác có thể xảy ra, lần này là vì Haskell là lười biếng - nó chỉ quan tâm đến nhiều thứ bạn sử dụng).


(h:t)!x=x++toLower h:tlưu một số byte.
Laikoni

Chuyển đổi hai trường hợp lưu một byte khác:f x|odd$length$x=Nothing|1<2=Just ...
Laikoni

@Laikoni cảm ơn vì những điều này! Tôi khá mới mẻ với Haskell và đây là lần đầu tiên tôi chơi golf trong đó - và tôi thực sự thích nó!
felixphew

memptytiết kiệm 1 byte so với Nothing!
bartavelle

Bạn có thể lưu một byte khác bằng cách xác định c="Red - ":"Black - ":cvà sử dụng cthay vì cycle["Red - ","Black - "]: Dùng thử trực tuyến!
Laikoni

3

Thạch , 29 byte

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

Một chương trình đầy đủ.
Sử dụng tùy chọn đầu ra "falsey" cho các đầu vào có số lượng dòng lẻ.

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

Làm sao?

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 byte

-4 cảm ơn ASCII - chỉ
-2 nhờ Mego

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);}

Lấy một "mảng" làm đầu vào. Thí dụ:

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!

Làm thế nào nó hoạt động

  • itạo một biến ibên ngoài tất cả các hàm, có nghĩa là nó tự động được khởi tạo thành 0.
  • main(a,s)char**s;{khai báo hàm chính, trong đó có hai đối số - một int a(# đối số dòng lệnh) và char ** s(mảng đối số dòng lệnh).
  • for(;a%2&++i<a;)là một vòng lặp kiểm tra xem achẵn ( a%2) và nếu nó nhỏ hơn số lượng đối số dòng lệnh được truyền ( i<a).
  • printf("%s - %c%s\n",i%2"Red":"Black",tolower(*s[i]),s[i]+1 in:
    • "Đỏ" nếu ilà số lẻ, "Đen" nếu ilà số chẵn ( i%2?"Red":"Black")
    • Chữ cái đầu tiên của đối số dòng lệnh hiện tại bằng chữ thường ( tolower(*s[i]))
    • Chuỗi, không có chữ cái đầu tiên ( s[i]+1)

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


Các biến toàn cục được khởi tạo mặc định, vì vậy bạn có thể bỏ qua =0phần này để lưu thêm 2 byte.
Cody Grey

@CodyGray Ồ vâng, cảm ơn!
MD XF





1

JavaScript (ES6), 93 byte

Đưa bài hát như một mảng các dòng.

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


@ Stephen-S liệu đầu vào này có được tính là hợp lệ không?
Vitim.us

1

Python 2 , 215-> 184-> 165 byte

Đã lưu 31 byte theo nhận xét của Stephen S '

Challenger5 đã giảm xuống còn 165 byte

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:]

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


Bạn có thể lưu một số byte bằng cách sử dụng các khoảng trắng đơn để thụt lề không? Tôi không biết rõ về Python nhưng tôi nghĩ nó hoạt động
Stephen

@Stephen S: Vâng, tôi nghĩ bạn đúng.
LMD


1

Javascript, 118 byte

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

Kiểm tra

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.