ক্রসওয়ার্ড নম্বর


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 সংস্করণ মুদ্রণের জন্য কল করবে will


একক-চরিত্রের স্প্যানগুলি সংখ্যাযুক্ত নয়, তাই না?
কিথ র্যান্ডাল

@ কিয়েট: আমি এমন নিয়মকে পছন্দ করি যেখানে এমন কোনও স্প্যান নেই তবে আমি এখানে এটি নির্দিষ্ট করে নেই কারণ গ্রিডকে বৈধতা দেওয়ার বিষয়টি অন্য একটি সমস্যা হিসাবে পরিকল্পনা করা হয়েছে। আমি মনে করি আপনি যা ব্যবহার করেন তা স্বাদের বিষয়।
ডিএমকেই --- প্রাক্তন-মডারেটর বিড়ালছানা

ইনপুট ফাইলটি txt এ থাকবে?
www0z0k

@ www0z0k: হ্যাঁ। আমার মধ্যে ইউনিক্স গীক সবসময় পাঠ্যের ডিফল্ট হয়।
ডিএমকেই --- প্রাক্তন-মডারেটর বিড়ালছানা

1
@ www0z0k: আপনার প্ল্যাটফর্মের স্থানীয় যাই হোক না কেন লাইন ব্রেকগুলি। এটি খনিতে ASCII দশমিক 20 এবং '\n'সমস্ত প্ল্যাটফর্মে সি হিসাবে প্রতিনিধিত্ব করা । অনুমানটি হ'ল ইনপুট ফাইলটি একই সিস্টেমে তৈরি করা হয়েছিল যা এটি প্রক্রিয়া করবে, সুতরাং এই সমস্যাটি স্বচ্ছ হওয়া উচিত। কোড-গল্ফ সম্পর্কে একটি সাধারণ নোট: আপনি যদি কোনও অদ্ভুত ভাষায় বা কোনও অদ্ভুত প্ল্যাটফর্মে কাজ করছেন তবে এমন কোনও বিষয়কে নোট করুন যা পাঠককে অবাক করে দিতে পারে। আপনার জমা দেওয়ার বিচার করার জন্য লোকেরা এর জন্য ভাতা দেবে।
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

উত্তর:


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

রুবি ১.৯ দিয়ে পরীক্ষা করা হয়েছে।


আমি তার বেশিরভাগ অনুসরণ করি। S.shift.split.map কী করে তা নিশ্চিত নয় তবে এটি অবশ্যই ইনপুট থেকে অ্যারে গঠন করবে।
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

বিটিডব্লিউ-- আমি কীভাবে এটি ইউনিক্স কমান্ড লাইনে প্রার্থনা করব। আমি এটি আমার সিস্টেমে উপযুক্ত একটি শেবাং দেওয়ার চেষ্টা করেছি, তবে এটি অভিযোগ করে ./temp.ruby:4: wrong argument type Symbol (expected Proc) (TypeError)
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

s.shift প্রথম লাইন নেয়, বিভক্ত আয় ["m", "n"], মানচিত্রের ফেরত আসে [মি, এন]। আমি এটা ভালো ruby1.9 দিয়ে চলছে করছি: ruby1.9 test.rb
আরনাউড লে ব্ল্যাঙ্ক

3

পিএইচপি - 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);

আমি ভাবলাম কখন কেউ 1 ডি অ্যারে এটি করতে যাচ্ছে।
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

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 --- প্রাক্তন-মডারেটর বিড়ালছানা

@ ডিএমকেকে, হ্যাঁ আমি প্রান্ত চিহ্নিত করতে অতিরিক্ত # টি ব্যবহার করছি আপনি কি মনে করেন যে এটি ব্যর্থ হয়েছে এমন কোনও পরীক্ষার কেস পোস্ট করতে পারেন?
কিথ র্যান্ডাল 17

@ কিয়েট: উপরের পরীক্ষার ক্ষেত্রে আমি 12 আউটপুট লাইন পাচ্ছি (এবং প্রথম 10 টি মিলছে না)। আমার ম্যাকটিতে পাইথন 2.6 বা 2.7 ব্যবহার করা। এটি দিয়ে চালানো, এটা echo test_input_file_name | python golf.pyকি ভুল?
ডিএমকেকে --- প্রাক্তন-মডারেটর বিড়ালছানা

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

আমি একসাথে পুরো ক্রসওয়ার্ডটি পড়তে এবং একক লুপ ব্যবহার করে চেষ্টা করেছি।
তবে 'character 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);}

এখানে খুব বেশি বলার কিছু নেই; যুক্তি বেশ মৌলিক। প্রোগ্রামটি রানটাইমে স্ট্যান্ডার্ড ইনপুটটিতে ফাইলের নাম নেয়। (এটি এত বিরক্তিকর যে প্রোগ্রামটিকে একটি ফাইল নাম দিয়ে কাজ করতে হবে, এবং কেবল স্ট্যান্ডার্ড ইনপুট থেকে ফাইলের বিষয়বস্তু সরাসরি পড়তে পারে না pip তবে যে পাইপার প্রদান করে তাকে টিউন বলে!)

অদ্ভুত fscanf()প্যাটার্নটি হ'ল নতুন লাইন সহ সম্পূর্ণ প্রথম লাইনটি স্ক্যান করার চেষ্টা করা তবে নীচের লাইনের শীর্ষস্থানীয় সাদা স্থানকে অন্তর্ভুক্ত নয় । কেউ ব্যবহার না করার কারণ রয়েছে scanf()


আমি মনে করি আপনি সারি এবং কলাম নম্বর বিপরীত। যদি আমি সঠিকভাবে বুঝতে পারি তবে প্রথম সংখ্যাটি হ'ল সারিগুলির সংখ্যা, তবে আপনি এটি কলামের সংখ্যা হিসাবে গণ্য করেন।
উগোরেন

আমি যা বলতে পারি তা থেকে, আমার প্রোগ্রামটির আউটপুট বর্ণনায় প্রদত্ত উদাহরণের সাথে এবং রেফারেন্স বাস্তবায়ন থেকে আউটপুটটির সাথে মেলে। আপনি যা উল্লেখ করছেন তার একটি নির্দিষ্ট উদাহরণ আমাকে দিতে পারেন?
ব্রেডবক্স

সারণী এবং কলামগুলির সংখ্যা সমান নয় এমন কোনও উদাহরণ।
ugoren

ঠিক আছে, তবে দয়া করে নির্দিষ্ট পেতে দিন get যখন বর্ণনায় প্রদত্ত উদাহরণস্বরূপ গ্রিডটি দেওয়া হবে তখন আমার প্রোগ্রামের আউটপুটগুলি (১,২) নম্বর ১. আপনি কি বলছেন যে আমার প্রোগ্রামটি আউটপুট করা উচিত (২,১)?
ব্রেডবক্স

আমি আউটপুট নয়, ইনপুট সম্পর্কে বলছি। যখন প্রথম লাইনটি হয় 5 5, আপনি প্রথম 5 টি প্রস্থ হিসাবে গ্রহণ করেন, যখন আপনি দ্বিতীয়টি গ্রহণ করা উচিত ছিল (এটি অবশ্যই উদাহরণস্বরূপ, কোনও ব্যাপার নয়)।
21:56

1

রেফারেন্স বাস্তবায়ন:

C99 সেখানে ungolfed এবং বরং 2000 চেয়ে বেশি অক্ষরের বিভিন্ন ডিবাগ frobs সহ এখনও।

#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

পার্লটেক্স : ১১৩৩ টি চর (তবে আমি এখনও এটি গল্ফ করিনি)

\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 ক্রসওয়ার্ডগ্রীড.টেক্সট

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

আমি প্রয়োজনীয়তাগুলি পুরোপুরি বুঝতে পারি নি, যেমন আমি প্রদত্ত আই / ও থেকে কেবল বোঝার চেষ্টা করেছি, দয়া করে সমাধানটি যদি নির্দিষ্ট কোনও ক্ষেত্রে কার্যকর সমাধান হয় তবে দয়া করে ক্ষমা করুন :)
আমান জেক ভার্মা

/bin/sh১১ লাইন সম্পর্কে আমার অভিযোগ আপনি কী শেল ব্যবহার করছেন তা বলতে পারবেন (সংস্করণ নম্বর সহ)?
dmckee --- প্রাক্তন-মডারেটর বিড়ালছানা

লাইন 8 লাইন 11 এর মতো বলে মনে হচ্ছে .. না? ash বাশ - রূপান্তর জিএনইউ বাশ, সংস্করণ 3.1.17 (1) -রিলেজ (x86_64-সুস-লিনাক্স)
আমান জেক ভার্মা

#! বিন / শ থেকে # /! / বিন / ব্যাশে পরিবর্তন করার চেষ্টা করুন, এটি এখনই কাজ করা উচিত!
আমান জিক ভার্মা

0

এএনএসআই সি 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

এই কোডটি সঠিকভাবে # _ # উলম্ব এবং অনুভূমিক একক স্পেস ফাঁকগুলি পরিচালনা করে, যা যদিও তারা একক সংযুক্ত স্থান হিসাবে নাও দেখা যায়, তবে এটি অনুমোদিত হিসাবে প্রদর্শিত হয়, যেমন, অনুভূমিক শব্দের শেষ অক্ষর হিসাবে প্রদর্শিত হবে appear
জোনাথন ওয়াটমফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.