लेजर मिरर पोर्टल पार्टी


27

एक 2D बोर्ड में निम्नलिखित वस्तुएं होंगी :

  • ^, >, v, या <: ऊपर की ओर emitter एक लेजर, सही, नीचे, या क्रमशः छोड़ दिया है। एक से अधिक भी हो सकते हैं। लेजर रिक्त स्थान में एक सीधी रेखा में यात्रा करेगा (रिक्त स्थान को डॉट के साथ दर्शाया गया है .)। लेजर उत्सर्जक से नहीं गुजरते हैं।
  • *: एक लक्षय। लेज़र लक्ष्य से गुजरते हैं। एक से अधिक भी हो सकते हैं।

बोर्ड में निम्नलिखित वस्तुएं भी हो सकती हैं:

  • @: एक ठोस दीवार। लेजर यहां से नहीं गुजरेगा।
  • \: एक वाम-झुकाव परावर्तक। निम्न तालिका के अनुसार लेज़रों की दिशा में परिवर्तन:

    Direction laser is travelling     Direction of laser after hitting reflector
    Up                                Left
    Right                             Down
    Down                              Right
    Left                              Up
    

    यह बहुत सहज होना चाहिए कि रिफ्लेक्टर कैसे काम करते हैं। बस उन्हें वास्तविक दो तरफा दर्पण के रूप में कल्पना करें और दिशाएं स्पष्ट होनी चाहिए।

  • /: एक सही झुकाव परावर्तक। निम्न तालिका के अनुसार लेज़रों की दिशा में परिवर्तन:

    Direction laser is travelling     Direction of laser after hitting reflector
    Up                                Right
    Right                             Up
    Down                              Left
    Left                              Down
    
  • 1, 2, 3... 9: एक पोर्टल । संख्या पोर्टल के चैनल को इंगित करती है - एक ही चैनल के दो पोर्टल्स होंगे (उदाहरण के लिए, वहाँ तीन नहीं होंगे 1)। पोर्टल में परिवर्तन की स्थिति एक ही चैनल के अन्य पोर्टल के पद पर लेज़रों के। उदाहरण के लिए:

    >     1     @     1     *
    

    लेज़र लक्ष्य से टकराएगा क्योंकि जब यह पहला हिट करता है 1, तो इसे 1दूसरी तरफ दूसरे को टेलीपोर्ट किया जाता है । लेज़र उसी दिशा को बनाए रखते हैं जो वे पहले थे।

    एक पोर्टल लेजर को अलग चैनल के पोर्टल पर 1नहीं भेजेगा (यानी लेजर को टेलीपोर्ट नहीं करेगा 9

आपका कार्यक्रम इनपुट के रूप में बोर्ड के 2 डी प्रतिनिधित्व को प्राप्त करेगा। बोर्ड हमेशा आयताकार आकार का होगा। आउटपुट होना चाहिए Trueअगर सभी लक्ष्यों को लेज़रों से गुजरना है, या Falseअन्यथा।

यहाँ कुछ परीक्षण मामले हैं:

  1. इनपुट

    >....\
    ..*...
    >./../
    ..*...
    

    उत्पादन

    True
    
  2. इनपुट

    >..........\
    1........../
    2..........1
    3..........2
    4..........3
    5..........4
    6..........5
    7..........6
    8..........7
    9..........8
    *..........9
    

    उत्पादन

    True
    
  3. इनपुट

    >.@............*
    >..@...........*
    >...@..........*
    >....@.........*
    >.....@........*
    >...*..@........
    >.......@......*
    

    उत्पादन

    False
    
  4. इनपुट

    ../\.
    >./**
    

    उत्पादन

    False
    
  5. इनपुट

    /.......*.......\/3.....
    @..............//\.\....
    *.............2\.1\/\...
    \..............///.....<
    .........*...//\\/.....\
    >.............\.1.///.4.
    4.......*/...\2\/3/\/..^
    

    उत्पादन

    True
    
  6. इनपुट

    vvvvvvvvvvvvvvvvv
    \\\\\\\\\\\\\\\\\
    /////////////////
    \\\\\\\\\\\\\\\\\
    /////////////////
    \\\\\\\\\\\\\\\\\
    /////////////////
    *****************
    

    आउटपुट (दाईं ओर लक्ष्य को नोट करें)

    False
    

यदि दाएं-झुकाव वाले परावर्तक (/) ने लेजर बीम की दिशा को बाएं (make) से डाउन (sense) में बदल दिया तो क्या यह अधिक समझ में नहीं आएगा?
स्क्वीमिश ossifrage

@squeamish ossifrage मुझे क्षमा करें, मैं आपके प्रश्न को नहीं समझता। कौन सा प्रतिबिंब छोड़ दिया झुकाव परावर्तक तालिका करना आपको लगता है पर नियम सही नहीं है?
चिरायता

मुझे लगता है कि आप बाएं और दाएं मिश्रित हो गए हैं
स्क्विश ऑस्फीराज

1
यदि ग्रिड ग्रिड सीमा तक पहुंच जाए तो क्या होता है?
डेविड

2
@DavidG कुछ भी नहीं है, या यह वापस आ जाता है जिस तरह से यह आया था। (ये इस मामले में बराबर हैं)। यह उदाहरण के रूप में देखा जा सकता है चारों ओर 'लपेटो' नहीं है
डेनिस जहरुद्दीन

जवाबों:


8

अजगर, 310 302 287 278 277 260

मौजूदा पायथन पोस्ट की तुलना में मौलिक रूप से भिन्न नहीं है, लेकिन एक या दो उल्लेखनीय चालें हैं, मुझे लगता है। यह "नॉन-टर्मिनेटिंग" इनपुट को भी हैंडल करता है, जैसे कि 1>1 संपादित करें : उफ़! एमिटर ब्लॉक लेजर।

def t(b):
 w=len(b[0])+1;B=list('@'*w+'@'.join(b));i=l=len(B);C="<>^v@"
 while i:
    j=l-i;i-=1;d=C.find(B[j]);c='.'
    while c not in C:
     if'+'>c:B[j]='.'
     if'0'<c<C:j=(B*2).index(c,j+1)%l
     elif'.'<c:d^=2+(c<C)
     j-=[1,-1,w,-w,j][d];c=B[j%l]
 return'*'not in B

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

यहाँ कोड का एक अच्छा gif नीचे गिरा दिया जा रहा है:

यहाँ छवि विवरण दर्ज करें

EDIT : विल के Awsome gif शिष्टाचार। धन्यवाद!


यह निर्दिष्ट करता है कि "लेजर उत्सर्जक से नहीं गुजरता है।" इसलिए 1>1समाप्त होगा। मुझे कुछ ऐसा नहीं मिला है जो समाप्त नहीं होता है, हालांकि मैंने इसमें बहुत प्रयास नहीं किया है और बहुत कुछ यह मान लिया है कि यह मेरे कार्यान्वयन के लिए नहीं होता है। अगर कोई एक पेश कर सकता है, तो मैं निश्चित रूप से पुनर्विचार करूंगा।
विजुअलमेल

4
@VisualMelon: नियम समय-सममिति हैं उन स्थानों को छोड़कर जहां लेज़र पैदा होते हैं या मर जाते हैं, जिसका अर्थ है कि सब कुछ समाप्त हो जाना है (क्योंकि आप हमेशा विशिष्ट रूप से इसे उस स्थान पर वापस ट्रेस कर सकते हैं जहां यह पैदा हुआ था, और एमिटर खुद का हिस्सा होना चाहिए। लूप का)।
मीका

@ मायका हेहे, एक उचित स्पष्टीकरण के लिए धन्यवाद, जैसे मैंने कहा कि मैं अंतर्ज्ञान के साथ गया था और इसके बारे में ज्यादा चिंता नहीं की, मेरे बॉक्स में एक और टूल डालने के लिए धन्यवाद।
विजुअलमेल

हाँ, मैंने इसे गलत पढ़ा।
एलए

ऐल को सलाम! बहुत अच्छी तरह से किया। मुझे लगता है कि आप इस तथ्य का उपयोग करके कुछ और बाइट्स को दाढ़ी कर सकते हैं कि .find(d)अगर नहीं मिला तो रिटर्न -1। यदि आप if-1<d:स्टेटमेंट को हटाते हैं और इसके बजाय j+=[-1,1,w,-w,-i][d]लूप के शीर्ष पर करते हैं, तो एक पाया हुआ -1 उस एरे में अंतिम तत्व को जोड़ने में बदल जाएगा j, जो j0 बना देगा , जिसे हम जानते हैं @...?
विल

7

पर्ल, 647

कोड-गोल्फ में यह मेरा पहला प्रयास है, और मैं थोड़ा शर्मिंदा हूं कि मैंने सी # स्कोर को भी नहीं हराया, लेकिन मुझे लगा कि यह दिलचस्प होगा (या मजेदार, या सिर्फ मर्दाना) पूरी बात को एक के रूप में करना रेगेक्स प्रतिस्थापन की श्रृंखला। (मैंने यह भी सोचा कि मेरे पर्ल पर ब्रश करना मजेदार होगा, लेकिन अंत तक मुझे रूबी या पायथन में इसे लागू नहीं करने का गहरा अफसोस था।)

मैंने बहुत परीक्षण नहीं किया है, लेकिन मुझे लगता है कि इसे हर मामले को संभालना चाहिए।

ग्रिड STDIN के माध्यम से इनपुट है। इनपुट में कम से कम एक न्यूलाइन होनी चाहिए (यानी न्यूलाइन के बिना एक ही पंक्ति काम नहीं करेगी)।

%s=(d,'[|+#$vk%ZX]',u,'[|+#$^W%KX]',r,'[-G+#>k%KX]',l,'[-G+#<W%ZX]');%o=(d,'[-.*G/k\\\\Z',u,'[-.*G/W\\\\K',r,'[|.*$\\\\/kK',l,'[|.*$\\\\/ZW');for$d(d,u,r,l){$o{$d}.='123456789qwertyuio]'}%u=(d,'.|-+*$G#/Wk%\KZX',u,'.|-+*$G#/kW%\ZKX',r,'.-|+*G$#/Wk%\ZKX',l,'.-|+*G$#/kW%\KZX');@q=split//,"qwertyuio";local$/;$_=<STDIN>;for$i(1..9){$m{$i}=$q[$i-1];$m{$m{$i}}=$i;s/$i/$m{$i}/e}/.*?\n/;$l='.'x((length$&)-1);do{$c=0;for$d(d,u,r,l){%p=(d,"(?<=$s{d}$l)$o{d}",u,"$o{u}(?=$l$s{u})",r,"(?<=$s{r})$o{r}",l,"$o{l}(?=$s{l})");%h=split//,$u{$d};$c+=s!$p{$d}!$h{$&}||($v=$&,($o{$d}=~s/$v// && $s{$d}=~s/]/$m{$v}]/),$v)!es}}while($c);print/\*/?"False\n":"True\n"

स्पष्टीकरण: कोड पुनरावृत्ति ग्रिड स्ट्रिंग को अद्यतन करता है क्योंकि लेजर इसके माध्यम से गुजरता है। -एक क्षैतिज लेजर, का प्रतिनिधित्व करता है |एक ऊर्ध्वाधर लेजर, +पार लेजर, Kएक \एक लेजर शीर्ष, से बाउंस के साथ दर्पण kएक /एक लेजर नीचे, बंद उछल साथ दर्पण Zएक \एक लेजर दूर नीचे उछल साथ दर्पण, और Wएक /दर्पण एक लेजर से बाउंस के साथ शिखर। %एक है /, जबकि, दोनों पक्षों पर लेज़रों के साथ दर्पण Xएक है \दोनों पक्षों पर लेज़रों के साथ दर्पण। (ये मामला संवेदनशील है। मैंने उन पत्रों को लेने की कोशिश की, जो कुछ हद तक उचित लगते हैं - उदाहरण के लिए, kऔरKकुछ हद तक स्पष्ट विकल्प हैं - लेकिन दुर्भाग्य से प्रभाव वास्तव में मददगार नहीं है। मुझे वास्तव में इस जानकारी को एक तालिका में रखना चाहिए, लेकिन मैं अभी समाप्त हो रहा हूं।)

उसी तरह से हैंडलिंग पोर्टल्स (यानी प्रत्येक अंक को संभावित इनपुट / आउटपुट लेजर पदों के आधार पर अतिरिक्त वर्णों का एक सेट सौंपने) को 144 अक्षरों (मूल 9 सहित) की आवश्यकता होगी, इसलिए, इसके बजाय, जब एक लेजर "इनपुट" पोर्टल को हिट करता है, मैं "आउटपुट" पोर्टल चरित्र को उन पात्रों के सेट में जोड़ता हूं जो उचित दिशा में लेजर का उत्सर्जन करते हैं। (यह इनपुट और आउटपुट पोर्टल्स के बीच अंतर करने की आवश्यकता है; मैंने इसके लिए अक्षरों का उपयोग किया है qwertyuio।)

थोड़े अन-गोल्फ, प्रिंट स्टेटमेंट के साथ, ताकि आप घटित होने वाली बारीकियों को देख सकें (प्रत्येक प्रतिस्थापन लेजर-प्रगति के एक "दौर" का प्रतिनिधित्व करता है), और gध्वज के साथ मुख्य जोड़ा जाता है s///ताकि यह बहुत सारे पुनरावृत्तियों को न ले:

# Throughout, d,u,r,l represents lasers going down, up, left, or right
# `sources` are the character classes representing laser "sources" (i.e. any
# character that can, on the next round, cause a laser to enter the space
# immediately adjacent to it in the proper direction)
%sources=(d,'[|+#$vk%ZX]',u,'[|+#$^W%KX]',r,'[-G+#>k%KX]',l,'[-G+#<W%ZX]');
# `open` characters will not block a laser
%open=(d,'[-.*G/k\\\\Z',u,'[-.*G/W\\\\K',r,'[|.*$\\\\/kK',l,'[|.*$\\\\/ZW');
# One of each portal is changed into the corresponding letter in `qwertyuio`.
# At the start, each portal is 'open' and none of them is a source.
for$d(d,u,r,l){$open{$d}.='123456789qwertyuio]'}
# A mapping of 'open' characters to the characters they become when a laser
# goes through them. (This is used like a hash of hashes; see the assignment
# of `%h` below.)
%update=(d,'.|-+*$G#/Wk%\KZX',
    u,'.|-+*$G#/kW%\ZKX',
    r,'.-|+*G$#/Wk%\ZKX',
    l,'.-|+*G$#/kW%\KZX');
@q=split//,"qwertyuio";
local$/;$_=<STDIN>;
for$i(1..9){
    $m{$i}=$q[$i-1];
    $m{$m{$i}}=$i;
    s/$i/$m{$i}/e}
print "After substituting portals:\n";
print;
print "\n";
# Find the number of characters in each line and create a string of `.`'s,
# which will be used to correlate characters above/below one another in the
# grid with each other.
/.*?\n/;
$l='.'x((length$&)-1);
do{
    $changes=0;
    for$d(d,u,r,l){
        # `patterns` is a mapping from each direction to the regex representing
        # an update that must occur (i.e. a place where a laser must progress).
        # Each pattern is either a lookahead or lookbehind plus the necessary
        # "open" character class.
        %patterns=(d,"(?<=$sources{d}$l)$open{d}",
            u,"$open{u}(?=$l$sources{u})",
            r,"(?<=$sources{r})$open{r}",
            l,"$open{l}(?=$sources{l})");
        %h=split//,$update{$d};
        # Match against the pattern for each direction. Note whether any
        # matches were found.
        $changes+=s!$patterns{$d}!
            # If the "open" character for a map is in the `update` map, return
            # the corresponding value. Otherwise, the "open" character is a
            # portal.
            $h{$&} || ($v=$&,
                        # For portals, remove the input portal from the
                        # proper "open" list and add the output portal to
                        # the proper "source" list.
                       ($open{$d}=~s/$v// && $sources{$d}=~s/]/$m{$v}]/),
                       $v)
                    # This whole substitution should allow `.` to match
                    # newlines (see the definition of `$l` above), and the
                    # replacement must be an expression rather than a string
                    # to facilitate the portal logic. The `g` allows multiple
                    # updates per "frame"; it is left out of the golfed code.
                    !egs
    }
    # Print the next "frame".
    print;
    print "\n";
# Continue updating until no "open" spaces are found.
}while($changes);
# Print whether `*` is still present in the input.
print/\*/?"False\n":"True\n"

मैंने पायथन में इस तरह के दृष्टिकोण (रीगेक्स के बजाय बूल एरे का उपयोग करके) के साथ प्रयोग किया, लेकिन इस छोटे के करीब कहीं भी नहीं मिला। मुझे लगता है कि यह वास्तव में सोचा-समझा दृष्टिकोण है! मेरे प्रयास गलत headedly से प्रभावित थे catpad.net/michael/apl अच्छा vid साथ youtube.com/watch?v=a9xAKttWgP4 और petercollingridge.co.uk/blog/python-game-of-life-in-one-line
विल

1
@ धन्यवाद! मुझे निश्चित रूप से एहसास हुआ कि गोएल के समान मेरे प्रयास उस समय के आसपास थे जब मैंने काम किया था कि एक पोर्टल के भीतर और बाहर जाने वाले लेज़रों के प्रत्येक संभावित संयोजन के लिए एक अलग चरित्र का उपयोग करना कितना संभव होगा। मुझे लगता है कि मैं कुछ और चरित्रों को शेव करने में सक्षम हो सकता हूं, लेकिन ... यह स्पष्ट रूप से इष्टतम दृष्टिकोण नहीं है!
काइल स्ट्रैंड

इसके अलावा, अगर किसी को पहले कुछ पंक्तियों में चरित्र वर्गों में ट्रिपल-बच गए `` के तरीके को संभालने का एक बेहतर तरीका पता है, तो यह प्यारा होगा ...
काइल स्ट्रैंड

6

अजगर 338 351

def t(b):
 L=len;w=L(b[0])+3;b=list("@"*w+"@@".join(b)+"@"*w);w-=1;I=b.index
 for i in range(L(b)):
  c=b[i];d={"^":-w,"<":-1,">":1,"v":w}.get(c)
  if d:
   while c!='@':
    i+=d;c=b[i]
    if c=='*':b[i]='.'
    elif c in '/\\':d={-w:-1,w:1,1:w,-1:-w}[d]*(-1 if c=='/' else 1)
    elif c>'0':i+=I(c)-i or I(c,i+1)-i
 return "*" not in b

मेरा unminified संस्करण वास्तव में बोर्ड पर लेजर पथ प्लॉट करता है, जो सुंदर है:

>-+--\
..X..|
>-/--/
..X...

>----------\
1----------/
2----------1
3----------2
4----------3
5----------4
6----------5
7----------6
8----------7
9----------8
X----------9

>-@............*
>--@...........*
>---@..........*
>----@.........*
>-----@........*
>---X--@........
>-------@......*

/-------X+------\/3.....
@........|.....//\+\....
X........|....2\+1\/\...
\--------+----+///+++--<
.........X...//\\/+++--\
>--------+---+\+1+///-4|
4-------X/...\2\/3/\/..^

vvvvvvvvvvvvvvvvv
\\\\\\\\\\\\\\\\\
/////////////////
\\\\\\\\\\\\\\\\\
/////////////////
\\\\\\\\\\\\\\\\\
/////////////////
XXXXXXXXXXXXXXXX*

def debug(board,x,y):
    emit_dir = {
        "^":    ( 0, -1),
        "<":    (-1,  0),
        ">":    ( 1,  0),
        "v":    ( 0,  1),
    }
    class PortalException(Exception): pass
    xdir, ydir = emit_dir[board[y][x]]
    while True:
        # print "step (%d, %d) (%d, %d)" % (x, y, xdir, ydir)
        x += xdir
        y += ydir
        if y < 0 or y >= len(board) or x < 0 or x >= len(board[y]):
            return
        ch = board[y][x]
        if ch == '/':
            xdir, ydir = -ydir, -xdir
        elif ch == '\\':
            xdir, ydir = ydir, xdir
        elif ch in '@^><v':
            return
        elif ch == '*':
            board[y] = board[y][:x] + 'X' + board[y][x+1:]
        elif ch in '.-|':
            ch = ('-' if xdir else '|') if ch == '.' else '+'
            board[y] = board[y][:x] + ch + board[y][x+1:]
        elif ch in '123456789':
            try:
                for r in range(len(board)):
                    for c in range(len(board[r])):
                        if board[r][c] == ch and (r != y or c != x):
                            x, y = c, r
                            raise PortalException()
                raise Exception("could not find portal %s (%d,%d)" % (ch, x, y))
            except PortalException:
                pass

5

सी # - 515 414 400 बाइट्स

पूरा सी # कार्यक्रम, विल की तरह कोई अच्छा उत्पादन। प्रत्येक व्यक्ति के लिए लेज़र पथ का अनुसरण करके काम करता है, और हमने कौन-कौन से कक्षों का दौरा किया है इसकी एक सरणी रखते हुए, ताकि हम यह जांच सकें कि हमने अंत में सभी तारों का दौरा किया है। संपादित करें: सब कुछ 1 डी बनाकर और वर्तमान चार्ट को संग्रहीत करने के लिए एक इंट के बजाय चार का उपयोग करके बड़ी संख्या में बाइट्स को धारीदार किया गया

w0lf ने मुझे याद दिलाया कि मैंने अपने कोड के बीच में सही-पाश का इस्तेमाल किया है, इसलिए मुझे लगा कि मैं एक आखिरी कोशिश करूंगा और इसे काम पर रखूंगा, और अब मैं पूरी तरह से न्यूनतम संख्या में घुंघराले हो गया हूं ब्रेसिज़। मैं लूप के लिए दूसरे के ढहने की तरह का नाटक नहीं करूंगा, कोड अब बुरी तरह से अव्यवस्थित है, लेकिन इसने कुछ बाइट्स बचाए। इस प्रक्रिया में मैंने पोर्टल हैंडलिंग को फिर से लिखा। मुझे कुल मिलाकर सशर्त संचालन के बजाय नेस्टेड के साथ "चाल" प्रदर्शन करने के लिए एक छोटा तरीका मिला।

गोल्फ कोड:

using C=System.Console;class P{static void Main(){var S=C.In.ReadToEnd().Replace("\r","");int W=S.IndexOf('\n')+1,l=S.Length,i=l,d,m,n;var M=new int[l];for(char c;i-->0;)for(d="^<v>".IndexOf(c=S[m=i]);c>14&d>-1;d=(m+=d==2?W:d>0?d-2:-W)>=0&m<l&&"@^<v>".IndexOf(c=S[m])<0?d:-1)for(d=c==47?3-d:c==92?d^1:d,M[n=m]=1;c%49<9&&(m=S.IndexOf(c,m+1))==n|m<0;);for(;l-->0;)W*=S[l]==42?M[l]:1;C.WriteLine(W>0);}}

कम गोल्फ वाला कोड:

using C=System.Console;

class P
{
    static void Main()
    {
        var S=C.In.ReadToEnd().Replace("\r",""); // read the grid, remove pesky carriage returns
        int W=S.IndexOf('\n')+1,l=S.Length,i=l,d,m,n; // find "width"
        var M=new int[l]; // defaults to 0s

        for(char c;i-->0;) // for each cell

            for(d="^<v>".IndexOf(c=S[m=i]); // find initial direction, if any
                c>14&d>-1; // loop only if we have direction
                d=(m+=d==2?W:d>0?d-2:-W) // move (after iteration)
                >=0&m<l&&"@^<v>".IndexOf(c=S[m])<0?d:-1) // terminate if we hit something or go off edge

                for(d=c==47?3-d:c==92?d^1:d, // mirrors
                    M[n=m]=1; // we have seen this spot
                    c%49<9&&(m=S.IndexOf(c,m+1))==n|m<0;); // portals

        for(;l-->0;) // for each cell
            W*=S[l]==42?M[l]:1; // if *, then mul by whether seen

        C.WriteLine(W>0);
    }
}

नया पोर्टल हैंडलिंग कोड इस तथ्य का उपयोग करता है कि String.IndexOf फ़ंक्शन ख़ुशी से -1 लौटाता है (यानी चार नहीं मिला) यदि आप पूछते हैं कि यह स्ट्रिंग से परे 1 वर्ण को देखना शुरू कर देता है (यदि आप इसे आगे से आगे शुरू करने के लिए कहें तो अपवाद छोड़ देता है)। यह मेरे लिए खबर थी, लेकिन इस उदाहरण में बहुत सुविधाजनक था।


+1 विस्मयकारी गोल्फ! मैं सिर्फ एक चाल के बारे में सोचा: यदि आप समय लग सकता है m+=(d>0?d-2:0)+(d<3?d-1:0)*W;और में धक्का for, इस तरह: for(char c;i-->0;m+=(d>0?d-2:0)+(d<3?d-1:0)*W)। इस तरह, आप एक चार को बचाएंगे, क्योंकि आप एक अर्धविराम खो देंगे।
क्रिस्टियन लुपस्क्यू

); @ w0lf एक अंतिम प्रयास किया जाता है और पूरी तरह छोरों के लिए संक्षिप्त करने के लिए, कुहनी से हलका धक्का के लिए धन्यवाद कामयाब
VisualMelon
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.