क्रॉसवर्ड नंबरिंग


9

एक क्रॉसवर्ड ग्रिड को सही ढंग से संख्या देने के लिए एक कार्यक्रम का निर्माण करें।

इनपुट

इनपुट क्रॉसवर्ड ग्रिड का प्रतिनिधित्व करने वाली फ़ाइल का नाम होगा। इनपुट फ़ाइलनाम को एक इनपुट के रूप में, मानक इनपुट पर, या हार्डकॉडिंग के अलावा अन्य पारंपरिक साधनों द्वारा पारित किया जा सकता है।

ग्रिड फ़ाइल स्वरूप: एक पाठ फ़ाइल। पहली पंक्ति में दो श्वेत-रिक्त पृथक पूर्णांक स्थिरांक होते हैं Mऔर N। उस पंक्ति का अनुसरण करने वाली M रेखाएँ हैं जिनमें से प्रत्येक Nवर्ण (साथ में एक नई पंक्ति) को चुना गया है [#A-Z ]। इन वर्णों की व्याख्या इस तरह की जाती है कि '#' एक अवरुद्ध वर्ग को इंगित करता है, ' 'पहेली में एक खुला वर्ग जिसमें कोई ज्ञात सामग्री नहीं होती है और कोई भी पत्र एक खुला वर्ग होता है जिसमें वह अक्षर होता है।

उत्पादन

आउटपुट एक नंबरिंग फ़ाइल होगी, और मानक आउटपुट को एक फ़ाइल में भेजा जा सकता है, जिसका नाम इनपुट फ़ाइल नाम से प्राप्त होता है, उपयोगकर्ता निर्दिष्ट फ़ाइल या किसी अन्य पारंपरिक गंतव्य पर।

नंबर फ़ाइल प्रारूप एक पाठ फ़ाइल। '#' से शुरू होने वाली लाइनों को अनदेखा किया जाता है और टिप्पणियों के लिए इस्तेमाल किया जा सकता है। अन्य सभी लाइनों एक टैब अलग त्रिक शामिल i, m, nजहां iएक नंबर ग्रिड पर मुद्रित करने के लिए प्रतिनिधित्व करता है, और mऔर nपंक्ति और वर्ग जहां यह मुद्रित किया जाना चाहिए के स्तंभ का प्रतिनिधित्व करते हैं। दोनों पंक्तियों और स्तंभों की संख्या 1 से शुरू होती है।

नंबरिंग योजना

सही ढंग से गिने ग्रिड में निम्नलिखित गुण होते हैं:

  1. संख्या 1 से शुरू होती है।
  2. खुले वर्गों का कोई कॉलम या स्पैन नहीं है। (आप मान सकते हैं कि समस्या में कोई एकल वर्ण उत्तर मौजूद नहीं होगा।)
  3. मतगणना क्रम में शीर्ष पंक्ति से लेकर नीचे तक प्रत्येक पंक्ति को बाएं से दाएं की ओर ले जाकर संख्याओं का सामना किया जाएगा। (इसलिए, प्रत्येक क्षैतिज अवधि को उसके सबसे बाएं वर्ग में गिना जाता है, और प्रत्येक स्तंभ को उसके सबसे ऊपरी वर्ग पर गिना जाता है।)

परीक्षण इनपुट और अपेक्षित आउटपुट

इनपुट:

5   5
#  ##
#    
  #  
    #
##  #

आउटपुट (टिप्पणी लाइनों की उपेक्षा):

1       1       2
2       1       3
3       2       2
4       2       4
5       2       5
6       3       1
7       3       4
8       4       1
9       4       3
10      5       3

अलग

यह उम्मीद है कि कई क्रॉसवर्ड संबंधित चुनौतियों में से पहला होगा। मैं इस प्रक्रिया में फ़ाइल-स्वरूपों के एक सुसंगत सेट का उपयोग करने और प्रक्रिया में क्रॉसवर्ड संबंधित उपयोगिताओं के सम्मानजनक सूट के निर्माण की योजना बना रहा हूं। उदाहरण के लिए बाद की पहेली इस पहेली के इनपुट और आउटपुट के आधार पर क्रॉसवर्ड के ASCII संस्करण को प्रिंट करने के लिए बुलाएगी।


सिंगल-कैरेक्टर स्पैन गिने नहीं गए, है ना?
कीथ रान्डेल

@ कीथ: मैं उस नियम को पसंद करता हूं जहां इस तरह के स्पान नहीं हैं, लेकिन मैंने इसे यहां निर्दिष्ट नहीं किया है क्योंकि ग्रिड को मान्य करने की योजना एक और समस्या से है। मुझे लगता है कि जो आप उपयोग करते हैं वह स्वाद का मामला है।
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

क्या इनपुट फ़ाइल txt में होगी?
www0z0k

@ www0z0k: हाँ। मुझ में यूनिक्स geek हमेशा पाठ के लिए चूक।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा

1
@ www0z0k: लाइन ब्रेक आपके प्लेटफॉर्म पर मूल निवासी हैं। यह ASCII दशमलव 20 मेरा है और '\n'सभी प्लेटफार्मों पर सी के रूप में प्रतिनिधित्व किया है। धारणा यह है कि इनपुट फ़ाइल उसी सिस्टम पर बनाई गई थी जो इसे संसाधित करेगी, इसलिए यह समस्या पारदर्शी होनी चाहिए। कोड-गोल्फ के बारे में एक सामान्य नोट: यदि आप एक अजीब भाषा में काम कर रहे हैं या एक अजीब मंच पर सरल कुछ भी है कि पाठक को आश्चर्य हो सकता है का एक नोट बनाते हैं। लोग आपकी अधीनता को देखते हुए उसके लिए भत्ता बनाएंगे।
dmckee --- पूर्व-संचालक बिल्ली का बच्चा

जवाबों:


4

रूबी - 210 139 वर्ण

o=0
(n=(/#/=~d=$<.read.gsub("
",S='#'))+1).upto(d.size-1){|i|d[i]!=S&&(i<n*2||d[i-1]==S||d[i-n]==S)&&print("%d\t%d\t%d
"%[o+=1,i/n,i%n+1])}

माणिक 1.9 के साथ परीक्षण किया गया।


मैं उस सबसे का पालन करता हूं। निश्चित नहीं है कि s.shift.split.map क्या करता है, लेकिन यह इनपुट से सरणी का गठन होना चाहिए।
dmckee --- पूर्व-संचालक

BTW-- मुझे इसे यूनिक्स कमांड लाइन पर कैसे लागू करना चाहिए। मैंने इसे अपने सिस्टम के लिए उपयुक्त एक शेबंग देने की कोशिश की, लेकिन यह शिकायत करता है ./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

s.shift पहली लाइन लेता है, स्प्लिट रिटर्न ["m", "n"], मैप रिटर्न [m, n]। मैं इसे ruby1.9 के साथ इस तरह से चला रहा हूं ruby1.9 test.rb:।
अरनौद ले ब्लैंक

3

PHP - 175 वर्ण

<?for($i=$n=strpos($d=strtr(`cat $argv[1]`,"\n",$_="#"),$_)+$o=1;isset($d[$i]);++$i)$d[$i]!=$_&($i<$n*2|$d[$i-1]==$_|$d[$i-$n]==$_)&&printf("%d\t%d\t%d\n",$o++,$i/$n,$i%$n+1);

मुझे आश्चर्य हुआ कि जब कोई इसे 1d सरणी में करने जा रहा था।
dmckee --- पूर्व-मध्यस्थ बिल्ली का बच्चा

3

पायथन, 194 177 176 172 वर्ण

f=open(raw_input())
V,H=map(int,next(f).split())
p=W=H+2
h='#'
t=W*h+h
n=1
for c in h.join(f):
 t=t[1:]+c;p+=1
 if'# 'in(t[-2:],t[::W]):print"%d\t%d\t%d"%(n,p/W,p%W);n+=1

आप का उपयोग करने में सक्षम होना चाहिए h.join(f)मुझे लगता है
gnibbler

और next(f)इसके बजाय f.readline()अगर आप हैं = = 2.6 औरf.next()
gnibbler

मेरा अजगर कभी बहुत अच्छा नहीं था, लेकिन ऐसा लगता है कि आप किनारे के मामलों को संभालने के लिए अतिरिक्त # का उपयोग कर रहे हैं, नहीं? हालाँकि, मुझे अतिरिक्त आंकड़ों सहित परीक्षण डेटा पर कुछ विषम आउटपुट मिल रहे हैं।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का बच्चा

@ मार्की, हां मैं किनारे को चिह्नित करने के लिए अतिरिक्त # का उपयोग कर रहा हूं। क्या आप एक परीक्षण मामला पोस्ट कर सकते हैं जहां आपको लगता है कि यह विफल हो गया है?
कीथ रान्डेल

@ कीथ: ऊपर के टेस्ट केस के लिए मुझे 12 आउटपुट लाइन मिल रही हैं (और पहले 10 मैच नहीं हुए)। मेरे मैक पर python2.6 या 2.7 का उपयोग करना। इसके साथ चल रहा है echo test_input_file_name | python golf.py, क्या यह गलत है?
dmckee --- पूर्व-संचालक बिल्ली का बच्चा

2

सी ++ 270 264 260 256 253 चार

#include<string>
#include<iostream>
#define X cin.getline(&l[1],C+2)
using namespace std;int main(){int r=0,c,R,C,a=0;cin>>R>>C;string l(C+2,35),o(l);X;for(;++r<=R;o=l)for(X,c=0;++c<=C;)if(l[c]!=35&&(l[c-1]==35||o[c]==35))printf("%d %d %d\n",++a,r,c);}

काम में लाना:

g++ cross.cpp -o cross
cat puzzle |  cross

अच्छी तरह से स्वरूपित:

#include<string>
#include<iostream>
// using this #define saved 1 char
#define X cin.getline(&l[1],C+2)

using namespace std;

int main()
{
    int r=0,c,R,C,a=0;
    cin>>R>>C;
    string l(C+2,35),o(l);
    X;

    for(;++r<=R;o=l)
        for(X,c=0;++c<=C;)
            if(l[c]!=35&&(l[c-1]==35||o[c]==35))
                printf("%d %d %d\n",++a,r,c);
}

मैंने एक बार में पूरे क्रॉसवर्ड को पढ़ने और एक ही लूप का उपयोग करने की कोशिश की।
लेकिन '\ n वर्ण की भरपाई की लागत ने कोई लाभ प्राप्त किया:

#include <iostream>
#include <string>
#define M cin.getline(&l[C+1],R*C
using namespace std;

int main()
{
    int R,C,a=0,x=0;
    cin>>R>>C;
    string l(++R*++C,35);
    M);M,0);

    for(;++x<R*C;)
        if ((l[x]+=l[x]==10?25:0)!=35&&(l[x-1]==35||l[x-C]==35))
            printf("%d %d %d\n",++a,x/C,x%C);
}

संपीड़ित: 260 वर्ण

#include<iostream>
#include<string>
#define M cin.getline(&l[C+1],R*C
using namespace std;int main(){int R,C,a=0,x=0;cin>>R>>C;string l(++R*++C,35);M);M,0);for(;++x<R*C;)if((l[x]+=l[x]==10?25:0)!=35&&(l[x-1]==35||l[x-C]==35))printf("%d %d %d\n",++a,x/C,x%C);}

मुझे ले गया कुछ इसे सही आह्वान करने की कोशिश करता है। स्लिक।
dmckee --- पूर्व-मध्यस्थ ने बिल्ली का

2

सी, 184 189 चर

char*f,g[999],*r=g;i,j,n;main(w){
for(fscanf(f=fopen(gets(g),"r"),"%*d%d%*[\n]",&w);fgets(r,99,f);++j)
for(i=0;i++<w;++r)
*r==35||j&&i>1&&r[-w]-35&&r[-1]-35||printf("%d\t%d\t%d\n",++n,j+1,i);}

यहां कहने के लिए कुछ अधिक नहीं; तर्क बहुत बुनियादी है। कार्यक्रम रनटाइम पर मानक इनपुट पर फ़ाइल नाम लेता है। (यह इतना कष्टप्रद है कि कार्यक्रम को एक फ़ाइलनाम के साथ काम करना पड़ता है, और मानक इनपुट से सीधे फ़ाइल सामग्री को नहीं पढ़ सकता है। लेकिन जो भुगतान करता है वह ट्यूनर को कॉल करता है!)

नई fscanf()पद्धति सहित पूर्ण प्रथम पंक्ति को स्कैन करने के लिए अजीब पैटर्न मेरा प्रयास है, लेकिन निम्नलिखित पंक्ति में प्रमुख व्हाट्सएप शामिल नहीं है । वहाँ एक कारण है कि कोई भी उपयोग नहीं करता है scanf()


मुझे लगता है कि आप पंक्तियों और कॉलम संख्या को उलटते हैं। अगर मैं सही तरीके से समझूं, तो पहली संख्या पंक्तियों की संख्या है, लेकिन आप इसे कॉलम की संख्या मानते हैं।
बदसूरत

मैं जो बता सकता हूं, मेरे कार्यक्रम का आउटपुट विवरण में दिए गए उदाहरण और संदर्भ कार्यान्वयन से आउटपुट से मेल खाता है। क्या आप मुझे इसका एक विशिष्ट उदाहरण दे सकते हैं जिसका आप उल्लेख कर रहे हैं?
ब्रेडबॉक्स

कोई भी उदाहरण जहाँ पंक्तियाँ और स्तंभ संख्याएँ समान नहीं हैं।
बदसूरत

ठीक है, लेकिन चलो विशिष्ट कृपया प्राप्त करें। जब वर्णन में प्रदान की गई उदाहरण ग्रिड दी जाती है, तो मेरा प्रोग्राम आउटपुट (1,2) संख्या 1 के लिए है। क्या आप कह रहे हैं कि मेरे कार्यक्रम को आउटपुट (2,1) चाहिए?
ब्रेडबॉक्स

मैं इनपुट की बात कर रहा हूं, आउटपुट की नहीं। जब पहली पंक्ति होती है 5 5, तो आप पहले 5 को चौड़ाई के रूप में लेते हैं, जब आपको दूसरा (जो कि कोई बात नहीं, निश्चित रूप से इस उदाहरण में) लेना चाहिए था।
बदसूरत

1

संदर्भ कार्यान्वयन:

c99 अनप्लग्ड और 2000 से अधिक वर्णों सहित विभिन्न डिबगिंग मेंढक अभी भी वहाँ हैं।

#include <stdio.h>
#include <string.h>

void printgrid(int m, int n, char grid[m][n]){
  fprintf(stderr,"===\n");
  for (int i=0; i<m; ++i){
    for (int j=0; j<n; ++j){
      switch (grid[i][j]) {
      case '\t': fputc('t',stderr); break;
      case '\0': fputc('0',stderr); break;
      case '\n': fputc('n',stderr); break;
      default: fputc(grid[i][j],stderr); break;
      }
    }
    fputc('\n',stderr);
  }
  fprintf(stderr,"===\n");
}

void readgrid(FILE *f, int m, int n, char grid[m][n]){
  int i = 0;
  int j = 0;
  int c = 0;
  while ( (c = fgetc(f)) != EOF) {
    if (c == '\n') {
      if (j != n) fprintf(stderr,"Short input line (%d)\n",i);
      i++;
      j=0;
    } else {
      grid[i][j++] = c;
    }
  }
}

int main(int argc, char** argv){
  const char *infname;
  FILE *inf=NULL;
  FILE *outf=stdout;

  /* deal with the command line */
  switch (argc) {
  case 3: /* two or more arguments. Take the second to be the output
         filename */
    if (!(outf = fopen(argv[2],"w"))) {
      fprintf(stderr,"%s: Couldn't open file '%s'. Exiting.",
          argv[0],argv[2]);
      return 2;
    }
    /* FALLTHROUGH */
  case 2: /* exactly one argument */
    infname = argv[1];
    if (!(inf = fopen(infname,"r"))) {
      fprintf(stderr,"%s: Couldn't open file '%s'. Exiting.",
          argv[0],argv[1]);
      return 1;
    };
    break;
  default:
    printf("%s: Number a crossword grid.\n\t%s <grid file> [<output file>]\n",
       argv[0],argv[0]);
    return 0;
  }

  /* Read the grid size from the first line */
  int m=0,n=0;
  char lbuf[81];
  fgets(lbuf,81,inf);
  sscanf(lbuf,"%d %d",&m,&n);

  /* Intialize the grid */
  char grid[m][n];
  for(int i=0; i<m; ++i) {
    for(int j=0; j<n; ++j) {
      grid[i][j]='#';
    }
  }

/*    printgrid(m,n,grid); */
  readgrid(inf,m,n,grid);
/*    printgrid(m,n,grid);  */

  /* loop through the grid  produce numbering output */
  fprintf(outf,"# Numbering for '%s'\n",infname);
  int num=1;
  for (int i=0; i<m; ++i){
    for (int j=0; j<n; ++j){
/*       fprintf(stderr,"\t\t\t (%d,%d): '%c' ['%c','%c']\n",i,j, */
/*        grid[i][j],grid[i-1][j],grid[i][j-1]); */
      if ( grid[i][j] != '#' &&
       ( (i == 0) || (j == 0) ||
         (grid[i-1][j] == '#') ||
         (grid[i][j-1] == '#') )
         ){
    fprintf(outf,"%d\t%d\t%d\n",num++,i+1,j+1);
      }
    }
  }
  fclose(outf);
  return 0;
}

1

PerlTeX : 1143 वर्ण (लेकिन मैंने इसे अभी तक गॉकेट नहीं किया है)

\documentclass{article}

\usepackage{perltex}
\usepackage{tikz}

\perlnewcommand{\readfile}[1]{
  open my $fh, '<', shift;
  ($rm,$cm) = split /\s+/, scalar <$fh>;
  @m = map { chomp; [ map { /\s/ ? 1 : 0 } split // ] } <$fh>;
  return "";
}

\perldo{
  $n=1;
  sub num {
    my ($r,$c) = @_;
    if ($r == 0) {
      return $n++;
    }
    if ($c == 0) {
      return $n++;
    }
    unless ($m[$r][$c-1] and $m[$r-1][$c]) {
      return $n++;
    }
    return;
  }
}

\perlnewcommand{\makegrid}[0]{
  my $scale = 1;
  my $return;
  my ($x,$y) = (0,$r*$scale);
  my ($ri,$ci) = (0,0);
  for my $r (@m) {
    for my $open (@$r) {
      my $f = $open ? '' : '[fill]';
      my $xx = $x + $scale;
      my $yy = $y + $scale;
      $return .= "\\draw $f ($x,$y) rectangle ($xx,$yy);\n";

      my $num = $open ? num($ri,$ci) : 0;
      if ( $num ) {
        $return .= "\\node [below right] at ($x, $yy) {$num};";
      }

      $x += $scale;
      $ci++;
    }
    $ci = 0;
    $x = 0;
    $ri++;
    $y -= $scale;
  }
  return $return;
}

\begin{document}
\readfile{grid.txt}

\begin{tikzpicture}
  \makegrid
\end{tikzpicture}

\end{document}

यह एक फ़ाइल की जरूरत है जिसे grid.txtयुक्ति कहा जाता है , फिर उसके साथ संकलित करें

perltex --nosafe --latex=pdflatex grid.tex

1

स्केल 252:

object c extends App{val z=readLine.split("[ ]+")map(_.toInt-1)
val b=(0 to z(0)).map{r=>readLine}
var c=0
(0 to z(0)).map{y=>(0 to z(1)).map{x=>if(b(y)(x)==' '&&((x==0||b(y)(x-1)==35)||(y==0||b(y-1)(x)==35))){c+=1
println(c+"\t"+(y+1)+"\t"+(x+1))}}
}}

संकलन और आह्वान:

scalac cg-318-crossword.scala && cat cg-318-crossword | scala c

0

शेल स्क्रैप

#!/bin/sh
crossWordFile=$1

totLines=`head -1 $crossWordFile | cut -d" " -f1`
totChars=`head -1 $crossWordFile | awk -F' ' '{printf $2}'`

NEXT_NUM=1
for ((ROW=2; ROW<=(${totLines}+1); ROW++))
do
   LINE=`sed -n ${ROW}p $crossWordFile`
   for ((COUNT=0; COUNT<${totChars}; COUNT++))
   do
      lineNumber=`expr $ROW - 1`
      columnNumber=`expr $COUNT + 1`
      TOKEN=${LINE:$COUNT:1}
      if [ "${TOKEN}" != "#" ]; then
      if [ ${lineNumber} -eq 1 ] || [ ${columnNumber} -eq 1 ]; then
          printf "${NEXT_NUM}\t${lineNumber}\t${columnNumber}\n"
          NEXT_NUM=`expr $NEXT_NUM + 1`
      elif [ "${TOKEN}" != "#" ] ; then
          upGrid=`sed -n ${lineNumber}p $crossWordFile | cut -c"${columnNumber}"`
          leftGrid=`sed -n ${ROW}p $crossWordFile | cut -c${COUNT}`
          if [ "${leftGrid}" = "#" ] || [ "${upGrid}" = "#" ]; then
          printf "${NEXT_NUM}\t${lineNumber}\t${columnNumber}\n"
          NEXT_NUM=`expr $NEXT_NUM + 1`
          fi
      fi
      fi
   done
done

नमूना I / O:

./numberCrossWord.sh crosswordGrid.txt

1       1       2
2       1       3
3       2       2
4       2       4
5       2       5
6       3       1
7       3       4
8       4       1
9       4       3
10      5       3

मैं आवश्यकताओं को पूरी तरह से समझ नहीं पाया होगा, जैसा कि मैंने अभी प्रदान की I / O से समझने की कोशिश की, कृपया क्षमा करें यदि समाधान दिए गए विशेष मामले के लिए सिर्फ एक समाधान है :)
अमन ZeeK वर्मा

मेरी /bin/shशिकायत लाइन 11 के बारे में है। क्या आप कह सकते हैं कि आप किस शेल का उपयोग कर रहे हैं (संस्करण संख्या सहित)?
dmckee --- पूर्व-संचालक बिल्ली का बच्चा

पंक्ति 8 पंक्ति 11 के समान प्रतीत होती है .. है न? $ bash --version ग्नू bash, संस्करण 3.1.17 (1) -release (x86_64-suse-linux)
अमन ZeeK वर्मा

# संशोधित करने का प्रयास करें! बिन / श # को # /! / बिन / बाश, यह अब काम करना चाहिए!
अमन ZeeK वर्मा

0

ANSI C 694 वर्ण

यह एक सी संस्करण है जो दो स्थानों के क्षैतिज या ऊर्ध्वाधर रन के लिए दिखता है जो या तो किनारे के खिलाफ या एक '#' चरित्र के खिलाफ ब्यूटेड हैं।

इनपुट फ़ाइल स्टड से ली गई है और होनी चाहिए:

<rows count> <cols count><newline>
<cols characters><newline> x rows
...

इसे संकुचित करने के लिए कोई भी सुझाव कृतज्ञतापूर्वक प्राप्त किया जाएगा।

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define H '#'

char *p,*g;
int m=0,d=0,r=0,c=0,R=0,C=0;
void n() {
    while(!isdigit(d=getchar()));
    m=d-'0';
    while(isdigit(d=getchar()))
        m=m*10+d-'0';
}

int t() {
    return (((c<1||*(p-1)==H)&&c<C-1&&*p!=H&&p[1]!=H)||
            ((r<1||*(p-C-1)==H)&&r<R-1&&*p!=H&&p[C+1]!=H));
}

int main (int argc, const char * argv[]) 
{
    n();R=m;m=0;n();C=m;
    p=g=malloc(R*C+R+1);
    while((d=getchar())!=EOF) {
        *p++=d;
    }
    int *a,*b;
    b=a=malloc(sizeof(int)*R*C+R+1);
    p=g;m=0;
    while(*p) {
        if(t()) {
            *a++=++m;
            *a++=r+1;
            *a++=c+1;
        }
        if(++c/C) r++,p++;
        c-=c/C*c;
        p++;
    }
    while(*b) {
        printf("%d\t%d\t%d\n",*b,b[1],b[2]);
        b+=3;
    }
}

उदाहरण के लिए आउटपुट प्रदान किया गया

1   1   2
2   1   3
3   2   2
4   2   4
5   2   5
6   3   1
7   3   4
8   4   1
9   4   3
10  5   3

यह कोड सही ढंग से # _ # वर्टिकल और हॉरिजॉन्टल सिंगल स्पेस गैप्स को हैंडल करता है, जो कि हो सकता है कि वे सिंगल अनकनेक्टेड स्पेस के रूप में न हो, उदाहरण के लिए, जैसे कि, क्षैतिज शब्द के अंतिम अक्षर के रूप में अनुमति दी जाती है।
जोनाथन वाटमॉफ़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.