इसे बारिश के पात्र बनाओ


31

इस चैट से प्रेरित है मिनी-चैलेंज।

इनपुट (ASCII प्रिंट करने योग्य वर्ण) के रूप में एक स्ट्रिंग को देखते हुए, स्ट्रिंग को "बारिश" के अक्षरों के साथ आउटपुट करें। प्रत्येक अक्षर को नीचे की ओर एक यादृच्छिक संख्या (यादृच्छिक के बीच) होनी चाहिए0 और स्ट्रिंग की लंबाई, प्रत्येक गैर-शून्य संभावना वाले) की और प्रति कॉलम केवल एक वर्ण होना चाहिए। सभी संभावित आउटपुट में फिर से गैर-शून्य होने की संभावना होनी चाहिए।

शायद यह थोड़ा भ्रमित करने वाला है, इसलिए यहाँ एक उदाहरण (उस CMC से लिया गया है):

Hello World

          d
H
       o
  llo

         l
      W
 e
        r

ध्यान दें कि Hएक स्थान नीचे कैसे है, dशून्य नीचे है, और lloसभी लाइन अप करने के लिए होते हैं। r, सब से अधिक दूर नीचे है पर 9, लेकिन अभी भी कम ऊपर से दूर स्ट्रिंग की लंबाई की तुलना में है। यह सिर्फ एक उदाहरण है, इनपुट के लिए दर्जनों अन्य संभावनाएं हैं Hello World

अन्य उदाहरण हो सकते हैं:

test

t
 e
  s
   t


PP&CG

  & G
 P

P  C

  • इनपुट और आउटपुट किसी भी सुविधाजनक विधि द्वारा दिया जा सकता है
  • इनपुट गैर-रिक्त की गारंटी है (यानी, आपको ""इनपुट के रूप में कभी भी प्राप्त नहीं होगा )।
  • आप इसे STDOUT में प्रिंट कर सकते हैं या इसे फ़ंक्शन परिणाम के रूप में वापस कर सकते हैं।
  • या तो एक पूर्ण कार्यक्रम या एक समारोह स्वीकार्य हैं।
  • विलुप्त हो रही व्हाट्सएप की कोई भी राशि स्वीकार्य है, इसलिए जब तक पात्र उचित रूप से पंक्तिबद्ध हो जाते हैं (जैसे, एक आयत के रूप में पैड करने के लिए स्वतंत्र महसूस)।
  • मानक खामियों को मना किया जाता है।
  • यह इसलिए सभी सामान्य गोल्फिंग नियम लागू होते हैं, और सबसे छोटा कोड (बाइट्स में) जीतता है।

2
सोचा था कि जब मैं शीर्षक पढ़ूंगा तो इसमें एनीमेशन शामिल होगा। क्या हमारे पास इसका कोई एनिमेटेड संस्करण है?
झबरा

@ शैगी नहीं है कि मैंने देखा है या खोजने में सक्षम है।
AdmBorkBork

"विलुप्त हो रही व्हाट्सएप की कोई भी राशि स्वीकार्य है" - क्या व्हॉट्सएप की एक अग्रणी पंक्ति शामिल है?
जोनाथन एलन

मुझे पता है कि हमारे पास मैट्रिक्स कोड के आधार पर एक है, लेकिन यह सौभाग्य उन 2 कीवर्ड के साथ मिल रहा है! क्या आपको बुरा लगा अगर मैं विचार को सैंडबॉक्स करूं?
झबरा

लागू करने के लिए अधिकतम इनपुट आकार उत्तरों की क्या आवश्यकता है? मैं कई लोगों को यादृच्छिक कार्यों का उपयोग करते हुए देख रहा हूं जो बैकएंडग्राउंड में "छद्म यादृच्छिक" का उपयोग करते हैं, और कुछ इनपुट शब्द उन जनरेटर में उपयोग किए गए बीज के आकार से बड़े होते हैं, और वे "सभी संभावित आउटपुट फिर से एक होने चाहिए" गैर-शून्य होने की संभावना। ” आपके द्वारा निर्दिष्ट बाधा
फेरीबिग

जवाबों:


5

आर , 104 बाइट्स

function(s){m=matrix(" ",l<-nchar(s),l)
m[cbind(1:l,sample(l,l,T))]=el(strsplit(s,""))
write(m,1,l,,"")}

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

एक स्ट्रिंग के रूप में इनपुट; स्टडआउट को लिखता है।


आप scan(,'')कॉल का एक गुच्छा का उपयोग और नामकरण करके एक बाइट को बचा सकते हैं, लेकिन ईमानदारी से मैं फ़ंक्शन दृष्टिकोण को पसंद करता हूं, यह एक अन्य न्यूनतम लाभ के लिए छिपाना है। हालांकि कुछ विचारों को चिंगारी लग सकती है। इसे ऑनलाइन आज़माएं!
क्रिमिनल

मुझे लगता है कि (-1 बाइट) के sample(l,,T)बजाय पर्याप्त है sample(l,l,T)
रोबिन राइडर

4

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

वर्णों की सूची के रूप में इनपुट लेता है। वर्णों का एक मैट्रिक्स लौटाता है।

a=>a.map((_,y)=>a.map((c,x)=>Math.random()<.5|!a[y+1]?(a[x]=' ',c):' '))

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


मुझे लगता है कि आप टर्नरी अभिव्यक्ति की उपेक्षा न करके एक बाइट बचा सकते हैं।
ऑर्थोप्लेक्स

2
@orthoplex जो काम नहीं करेगा क्योंकि (0|'A') === (0|undefined)और शेष पत्रों को अंतिम पंक्ति में प्रदर्शित होने की कोई गारंटी नहीं होगी। (इसलिए, मूल रूप से, यह बिल्कुल वैसा ही है जैसे |!a[y+1]पूरी तरह से हटा दिया गया था।)
अरनौल्ड

Google कहता है कि Math.random()[0, 1) में एक नंबर देता है, इसलिए नहीं Math.random()<.5बन सकता है Math.random()>0?
nedla2004

@ nedla2004 सिद्धांत रूप में, हाँ। व्यवहार में, मुझे लगता है कि यह बहुत संभावना है कि PRNG के कार्यान्वयन (s) संभवतः वापस नहीं लौट सकते हैं (अकेले लगभग 0 को बंद करें ताकि सभी कॉन्फ़िगरेशन वास्तव में होने का मौका हो)। क्योंकि हम किसी भाषा को उसके कार्यान्वयन से परिभाषित करते हैं, इसलिए मुझे लगता है कि यह अमान्य है। 0 0
अरनुलद

किस मंच के लिए आपने अपनी जावास्क्रिप्ट बनाई? चूंकि चुनौती की विशिष्टता की आवश्यकता होती है, और अधिकतम इनपुट निर्दिष्ट नहीं करता है, यह वास्तव में मायने रखता है, क्योंकि अधिकांश प्लेटफ़ॉर्म एक math.random()कार्यान्वयन का उपयोग कर रहे हैं जिसमें आंतरिक स्थिति है, और इस प्रकार अद्वितीय आउटपुट उत्पन्न नहीं कर सकता है।
फेरीबिग

4

पायथ - 9 बाइट्स

आउटपुट लाइनों की सूची।

.tm+*;OlQ

 .t                       Transpose, padding with spaces
  m      (Q implicit)     Map over input
   +    (d implicit)      Concatenate to loop var
    *                     String repeat
     ;                    This refers to the var replaced by loop var, which is d=" "
     O                    Random number less than
      lQ                  Length of input

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


4

जे , 30 19 बाइट्स

|:@,.]{.~"+_2-#?@##

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


1
0|:]{.~"+_1-#?#के लिए 15 बाइट्स
गैलेन इवानोव

@GalenIvanov मैं इस विचार से प्यार करता हूं लेकिन चूंकि डियाड सौदा बिना पुनरावृत्ति के होता है, इसलिए आउटपुट की सीमा पूरी संभावनाओं की सीमा नहीं होगी। उदाहरण के लिए, 2 अक्षरों के लिए बेतरतीब ढंग से एक ही ऊंचाई पर गिरना संभव नहीं होगा।
जोना

@ कनेक्ट, आप 0|:]{.~"+_2-#?@##अपने जवाब के व्यवहार को बदलने के बिना 17 बाइट्स के लिए कर सकते हैं ।
योना

1
@ जोना हां, सही है। मुझे एहसास हुआ कि और एक और 17-बाइट समाधान था।
गैलेन इवानोव

4

जाप , 8 बाइट्स

-1 बग्गी से @ बाइट

y_iUÊö ç

y_iUÊö ç        Full Program. Implicit input U
y_              transpose and map each row in U (Call it X)
  i             Insert at the beginning of X:
       ç        " " repeated ↓ many times
   UÊö          random integer in [0, length of U] 
                implicit transpose back and output

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



lol @Shagy मुझे कुछ समय पहले वही जवाब मिला, मैं सिर्फ एक स्पष्टीकरण जोड़ रहा था। वैसे भी धन्यवाद c:
लुइस felipe De jesus Munoz

3

एपीएल (डायलॉग यूनिकोड) , 16 बाइट्स SBCS

बेनामी tacit उपसर्ग समारोह

⍉∘↑⊢↑¨⍨∘-∘?≢⍴1+≢

 स्ट्रिंग की लंबाई

1+ उसमें एक जोड़ा गया

≢⍴ उस की "लंबाई" प्रतियां

∘? सीमा 1 में यादृच्छिक पूर्णांक ... वे, और फिर ...

∘- नकारात्मक, और फिर ...

⊢↑¨⍨ प्रत्येक वर्ण से कई तत्वों को लें, रिक्त स्थान के साथ बाईं ओर पैडिंग

∘↑ मैट्रिक्स में स्ट्रिंग्स की मिक्स सूची, दाईं ओर रिक्त स्थान के साथ पैडिंग

 पक्षांतरित

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


2

जाप , 8 बाइट्स

yÈùUÊö Ä

कोशिश करो

yÈùUÊö Ä     :Implicit input of string U
y            :Transpose
 È           :Pass each column through the following function and transpose back
  ù          :  Left pad with spaces to length
   UÊ        :    Length of U
     ö       :    Random number in the range [0,UÊ)
       Ä     :    Plus 1

2

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

³LŻX⁶x;)z⁶

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

      )    | For each input character
³L         | Length of original input
  Ż        | 0..length
   X       | Random number from that list
    ⁶x     | That number of spaces
       ;   | Concatenate to the character
        z⁶ | Finally transpose with space as filler

हम रिक्त स्थान की एक प्रमुख पंक्ति का उत्पादन कर सकते हैं, इसलिए 9 बाइट्स (हालांकि मुझे लगता है कि एक 8 हो सकता है ...)
जोनाथन एलन

@JonathanAllan रेंज के बराबर नहीं होगा 0..(length - 1)? प्रश्न 0 और स्ट्रिंग लंबाई के बीच निर्दिष्ट करता है। या क्या मैं कुछ न कुछ भूल रहा हूं?
निक केनेडी

अरे हाँ, मैं समावेशी-नेस के बारे में भूल गया था - जब मैंने तीन दिन पहले प्रमुख व्हाट्सएप के बारे में पूछा तो मुझे पूरा यकीन है कि मेरे पास एक 9 था, और मुझे लगता है कि यह नहीं था जो मैंने ऊपर सुझाया था ... हम्म
जोनाथन एलन


2

PHP , 88 बाइट्स

for($o='';$i<$l=strlen($argn);$o[$i+$l*rand(0,$l)]=$argn[$i++]);echo chunk_split($o,$l);

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

या PHP के क्रिप्टोग्राफिक रैंडम पूर्णांक फ़ंक्शन का उपयोग करके 94 बाइट्स

for($o='';$i<$l=strlen($argn);$o[$i+$l*random_int(0,$l)]=$argn[$i++]);echo chunk_split($o,$l);

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

से STDINआउटपुट, से इनपुट STDOUT। ऐसे दोड़ो:

$ echo Hello World|php -nF rain.php
   l  W    
  l        

 e      r d

H      o   

         l 


    o 

-1 बाइट (अंतरिक्ष के बजाय खाली स्ट्रिंग) और +1 बाइट (नियमों के आधार पर) @ ASCII- केवल!


आश्चर्य नहीं कि इस करते हैं, की अनुमति दी है के बाद से आप शामिल नहीं हैं <?phpकि ?>बंद करता है। यह भी लगता है कि अगर यह ठीक $oस्ट्रिंग है तो ठीक है
ASCII-only

@ ASCII- केवल, आप सही हैं, खाली स्ट्रिंग भी काम करेगी (थोड़ी और शिकायत के साथ)। मुझे यकीन नहीं है कि बंद करने और पुनः खोलने के टैग का उपयोग करने पर सत्तारूढ़ है, मैं इसे अद्यतन करूंगा, हालांकि ऊपर और ऊपर रहने के लिए। धन्यवाद!
640KB

ध्यान दें कि इस चुनौती के लिए नियम कहते हैं "सभी संभावित आउटपुट में फिर से गैर-शून्य संभावना होने की संभावना है", यह PHP randफ़ंक्शन के साथ संभव नहीं है , क्योंकि आपके पास एक इनपुट टेक्स्ट हो सकता है जिसमें आंतरिक के आकार की तुलना में अधिक यादृच्छिक की आवश्यकता होती है बीज रैंड का उपयोग करता है, इसलिए तकनीकी रूप से आपका उत्तर सभी स्थितियों में इस स्थिति को संतुष्ट करने में विफल रहता है
फेरीबग

@Ferrybig मैं मानता हूं कि विरासत PHP / libc randबहुत उपयोगी नहीं है, हालांकि PHP के सभी समर्थित / उत्पादन संस्करण (7.1+) mt_randएक यादृच्छिक संख्या पीढ़ी के लिए आंतरिक रूप से Mersenne Twister RND ( ) का उपयोग करते हैं । क्या आपकी चिंता यह है कि यह इस चुनौती के लिए पर्याप्त रूप से यादृच्छिक नहीं है?
640KB

mt_randआंतरिक रूप से एक छद्म यादृच्छिक संख्या प्रणाली का भी उपयोग करता है, और इसकी सीमाएँ भी हैं। यह मानते हुए कि PHP को 64 बिट संख्याओं के साथ संकलित किया गया है (और यह कि बीज, इस पूरी श्रृंखला के लिए उपयोग किया जाता है randया mt_randस्वीकार करता है) 13 वर्णों या उससे कम के शब्दों के लिए अद्वितीय आउटपुट उत्पन्न करेगा। बहुत ही सीमित अगर आप मुझसे पूछें
Ferrybig

1

चारकोल , 10 9 बाइट्स

↑Eθ◧ι⊕‽Lθ

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। संपादित करें: @ ASCII- केवल के लिए 1 बाइट धन्यवाद सहेजा गया। स्पष्टीकरण:

  θ         Input string
 E          Map over characters
        θ   Input string
       L    Length
      ‽     Random value
     ⊕      Incremented
    ι       Current character
   ◧        Padded to length
↑           Print rotated

जैसा कि ASCII- केवल इंगित करता है, आप समान प्रभाव के लिए अक्षरों को बेतरतीब ढंग से ऊपर ले जा सकते हैं (सिवाय इसके कि शीर्ष के बजाय नीचे की तरफ अतिरिक्त सफेद स्थान हो सकता है)। वर्णों की एक सरणी को ऊपर की तरफ प्रिंट करना सामान्य रूप से एक स्ट्रिंग को प्रिंट करने के बराबर है, इसलिए पैडिंग तब प्रत्येक वर्ण को यादृच्छिक रूप से लंबवत रूप से बंद कर देता है।


आश्चर्य है कि अगर मुद्रण के बजाय काम करेंगे?
एएससीआईआई-केवल

1

05AB1E (विरासत) , 9 बाइट्स

εIgÝΩú}ζ»

एक स्ट्रिंग या वर्णों की सूची के रूप में इनपुट (या तो ठीक है)।

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

बहुत धीमी 9-बाइट्स वैकल्पिक:

gDÝsãΩúζ»

वर्णों की सूची के रूप में इनपुट।

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

दोनों ने 05AB1E की विरासत संस्करण का उपयोग किया है, क्योंकि नए संस्करण के लिए €Sपहले एक स्पष्ट की आवश्यकता हैζ ..

स्पष्टीकरण:

ε       # Map each character in the (implicit) input to:
 Ig     #  Take the length of the input
   Ý    #  Create a list in the range [0, input-length]
    Ω   #  Pop and push a random integer from this list
     ú  #  Pad the current character with that many leading spaces
      # After the map: zip/transpose; swapping rows/columns (with space as default filler)
  »     # Then join all strings by newlines (and it output implicitly as result)

g          # Get the length of the (implicit) input-list
 D         # Duplicate this length
  Ý        # Create a list in the range [0, input-length]
   sã      # Take the cartesian product of this list that many times
     Ω     # Pop and push a random list from this list of lists of integers
      ú    # Pad the characters in the (implicit) input-list with that many spaces
       ζ   # Zip/transpose; swapping rows/columns (with space as default filler)
        »  # Then join all strings by newlines (and it output implicitly as result)

की तर्ज पर सोच रहा था gD¸s∍ÝδΩलेकिन यह लंबा है ... और ऊ ... यह भी नए 05AB1E में काम नहीं करता है;)।
मैजिक ऑक्टोपस Urn


1

जूलिया, 69 बाइट्स

f(s)=(n=length(s);z=fill(' ',n,n);for i=1:n z[rand(1:n),i]=s[i]end;z)

यह एक फ़ंक्शन को परिभाषित करता है जो एक fको स्वीकार करता है Stringया Vector{Char}वापस करता हैMatrix{Char}

Ungolfed:

function f(s)
    n = length(s)
    z = fill(' ', n, n)  # an n×n matrix of spaces
    for i = 1:n
        # set a random entry in the ith column to the ith character in s
        z[rand(1:n),i] = s[i] 
    end
    z
end

उदाहरण:

julia> f("test")
4×4 Array{Char,2}:
 't'  ' '  ' '  ' '
 ' '  ' '  ' '  ' '
 ' '  'e'  ' '  't'
 ' '  ' '  's'  ' '

यह निश्चित रूप से बेहतर हो सकता है; मेरे गोल्फ कौशल बहुत जंग खाए हुए हैं।

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


1

पर्ल 5 -F , 50 49 बाइट्स

-1 @ होमहैस्टिंग्स द्वारा

map$;[rand@F][$i++]=$_,@F;say map$_||' ',@$_ for@

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


अच्छा, वास्तव में काम करता है! : पी आप के साथ map$_||$",@$_भी बाइट्स के एक जोड़े को बचा सकता है!
डोम हेस्टिंग्स

1

पॉवरशेल , 108 102 98 बाइट्स

-4 बाइट्स mazzy के लिए धन्यवाद

$a=1..($z=($y=$args|% t*y).count)|%{random $z}
1..$z|%{-join($y|%{" $_"[$a[$i++%$z]-eq+$r]});$r++}

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

मूल रूप 1..lengthसे स्ट्रिंग के दो बार पुनरावृत्त होते हैं, एक बार प्रत्येक वर्ण के लिए यादृच्छिक रेखा स्थान प्राप्त करने के लिए, और दूसरी बार वास्तव में प्रत्येक सूचकांक का उपयोग करके प्रत्येक पंक्ति का निर्माण करने के लिए। यह पता लगाना कि एक स्वीप में यह कैसे करना है, जहां बड़ी बाइट बचत होती है।



0

स्माइलबासिक 3, 62 बाइट्स

LINPUT T$L=LEN(T$)CLS
FOR I=0TO L-1LOCATE,RND(L+1)?T$[I];
NEXT


0

पायथन - 92 बाइट्स

import random
lambda s:map(None,*[(random.randrange(len(s))*' '+c).ljust(len(s))for c in s])

आप शामिल करने के लिए हैimport random
MilkyWay90


1
आप from random import*इसके बजाय का उपयोग करके 1 बाइट बचा सकते हैं ।
आर्थोपलेक्स

मुझे लगता map(None,...है कि पायथन 3 में काम नहीं करता है, इसलिए आपको अपने शीर्षक में पायथन 2 को निर्दिष्ट करना चाहिए।
आर्थोपलेक्स



0

Python 3, 208 bytes

import random as r;x=input();R=range(len(x));c=[r.choice(R) for i in R];y=[' '*c[i]+x[i]+' '*(len(x)-c[i]) for i in R];R=range(len(y));print('\n'.join([''.join(r) for r in [[y[i][j] for i in R] for j in R]]))

Creates a list of random choices, then makes a list of columns with blank space everywhere except at the index specified by each random choice. The columns are transposed into rows and printed out with newlines between them.

Try it online!

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