अपना खुद का लाल और काला बनाएँ


9

लेस मिजरेबल्स के संगीतमय प्रस्तुतीकरण में, "रेड एंड ब्लैक" नामक एक गीत दिखाई देता है। यहाँ उस गीत का हिस्सा है:

लाल - क्रोधी पुरुषों का खून!

काला - अतीत के अंधेरे!

लाल - सुबह के बारे में एक दुनिया!

काली - रात जो अंत में समाप्त होती है!

स्रोत।

आपका काम इनपुट को "रेड एंड ब्लैक" गान में बदलना है।

इनपुट

टेक्स्ट को नई सीमा या एक समान उपयुक्त टेक्स्ट इनपुट द्वारा सीमांकित किया गया। उदाहरण के लिए,

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!


"या इनपुट की लंबाई विषम है", क्या आप लाइनों या वर्णों के बारे में बात कर रहे हैं?
टटलमैन

@ टटलमैन लाइनों की संख्या, मैं स्पष्ट कर दूंगा
स्टीफन

3
मुझे लगता है कि यह चुनौती ठीक है जैसा कि है, लेकिन सामान्य तौर पर, सबमिशन को अमान्य इनपुट से निपटना वास्तव में बहुत कुछ नहीं जोड़ता है । सिर्फ भविष्य के संदर्भ के लिए।
जेम्स

@DJMcMayhem के बाद से कोई जवाब नहीं आया है, मैं खाली इनपुट को अपरिभाषित कर दूंगा - अधिक समझ में आता है, धन्यवाद (मैं विषम लंबाई के इनपुट को जैसा रखना चाहता हूं)
स्टीफन

जवाबों:


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

वी , 31 , 30 बाइट्स

êuòIRed - 
IBlack - 
òñFRdH

इसे ऑनलाइन आज़माएं!

Hexdump:

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

यह वी में तुच्छ है, लेकिन विषम इनपुट के किनारे का मामला इसे मुश्किल बनाता है क्योंकि वी में वास्तव में सशर्त नहीं हैं। शुक्र है, हम इसे +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एक फ़ंक्शन है जो स्ट्रिंग्स की सूची लेता है (उर्फ एस की सूची की एक सूची Char), और Maybeवही लौटाता है। हास्केल के कार्य काफी "शुद्ध" हैं, और इसलिए हमें यह स्पष्ट करने की आवश्यकता है कि यह फ़ंक्शन कुछ भी वापस नहीं कर सकता है। (प्रकार का एक समारोह Maybe aरिटर्न या तो Nothingया Just a)।

|सशर्त का एक प्रकार - ऑपरेटर एक गार्ड है। यदि even $ length $ x(जो लेखन का दूसरा तरीका है even (length x)) पहली शाखा का अनुसरण किया जाता है True। अन्यथा, दूसरा वाला ( 1<2गोल्फ के उदाहरण में, जो निश्चित रूप से हमेशा सच होता है) का पालन किया जाता है और हम लौटते हैं Nothing

zipWithदो-तर्क फ़ंक्शन लेता है और इसे दो सूचियों के प्रत्येक तत्व पर लागू करता है। हमारे द्वारा उपयोग किया जा रहा फ़ंक्शन है \(h : t) x -> x ++ toLower h : th : tस्पष्ट रूप से हमारे पहले तर्क से पहला चरित्र अलग हो जाता है, जो कि हास्केल में आप कर सकते हैं। पहली सूची इनपुट है (जिसे हम पहले से ही जानते हैं कि एक समान संख्या में रेखाएं हैं), और दूसरा केवल "रेड -" और "ब्लैक -" को वैकल्पिक रूप से वैकल्पिक कर रहा है (अनंत सूची एक और अच्छी बात है जो इस बार संभव है, क्योंकि हास्केल है आलसी - यह केवल उतनी ही परवाह करता है जितना आप उपयोग करते हैं)।


(h:t)!x=x++toLower h:tकुछ बाइट्स बचाता है।
लकोनी

दो मामलों को स्विच करने से एक और बाइट f x|odd$length$x=Nothing|1<2=Just ...
बचती है

@Laikoni इन के लिए धन्यवाद! मैं हास्केल के लिए बहुत नया हूँ और यह मेरा पहली बार गोल्फ है - और मैं वास्तव में इसे पसंद कर रहा हूँ!
felixphew

memptyकी तुलना में 1 बाइट बचाता है Nothing!
बर्तवेल्ले

इसके बजाय परिभाषित c="Red - ":"Black - ":cऔर उपयोग करके आप एक और बाइट बचा सकते हैं : इसे ऑनलाइन आज़माएं! ccycle["Red - ","Black - "]
लैकोनी

3

जेली , 29 बाइट्स

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

एक पूरा कार्यक्रम।
विषम संख्या वाली लाइनों के इनपुट के लिए "फाल्सी" आउटपुट विकल्प का उपयोग करता है।

इसे ऑनलाइन आज़माएं!

कैसे?

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

सी, 112 107 105 103 99 बाइट्स

-4 ASCII- केवल
-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(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 ओह हाँ, धन्यवाद!
एमडी एक्सएफ





1

जावास्क्रिप्ट (ईएस 6), 93 बाइट्स

गाने को लाइनों की एक सरणी के रूप में लेता है।

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


@ स्टीफन-एस क्या इस इनपुट को मान्य मानता है?
विटिम।

1

पायथन 2 , 215-> 184-> 165 बाइट्स

स्टीफन एस की टिप्पणी के अनुसार 31 बाइट्स बचाए

चैलेंजर 5 ने इसे 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:]

इसे ऑनलाइन आज़माएं!


क्या आप इंडेंटेशन के लिए सिंगल स्पेस का उपयोग करके कुछ बाइट्स बचा सकते हैं? मैं अजगर को अच्छी तरह से नहीं जानता लेकिन मुझे लगता है कि वह काम करता है
स्टीफन

@ स्टीफन एस: हां, मुझे लगता है कि आप सही हैं।
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

परीक्षा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.