একটি প্রোগ্রামকে একটি প্যালিনড্রমিক প্রোগ্রামে রূপান্তর করুন


15

একটি প্যালিনড্রোম একটি স্ট্রিং যা একই ধরণের সামনে এবং পিছনের দিকে থাকে, যেমন "রেসকার"।

কিছু ভাষায় একটি প্রোগ্রাম লিখুন এল, যেটি কোনও প্রোগ্রাম পি 1 কে ভাষা এল এ ইনপুট হিসাবে গ্রহণ করে এবং একটি প্যালিনড্রমিক প্রোগ্রাম পি 2 আউটপুট করে ভাষাগুলিতে L যা P1 এর মতো একই কাজ করে।

সিনট্যাক্স ত্রুটি সহ ইনপুট প্রোগ্রামগুলি পরিচালনা করার বিষয়ে আপনাকে চিন্তা করার দরকার নেই।

এটি কোড গল্ফ , সুতরাং কয়েকটি সংখ্যক বাইটের সাথে সমাধানটি সমাধান।


আমরা কী এল ভাষা সংজ্ঞায়িত করতে পারি?
গ্রেগ হিউগিল

1
@ গ্রেগ হিউগিল হ্যাঁ এল আপনি যে ভাষায় আপনার প্রোগ্রাম লিখতে পছন্দ করে নয়।
জাস্টিন

কিছু ভাষায়, এটি আশ্চর্যজনকভাবে শক্ত।
জাস্টিন

3
পাইথন একটি টুরিং সম্পূর্ণ উপসেট সঙ্গে, এই একটি বৈধ এন্ট্রি হল: x=input();print(x+'#'+x[::-1])। সাবসেটটি এমন সমস্ত প্রোগ্রামের সেট যা নতুন লাইনে অন্তর্ভুক্ত হয় না।
জাস্টিন

উত্তর:


17

পার্ল, 55 54 বাইট

undef$/;$a=<>."\n__END__\n";print$a,scalar reverse$a;

স্টিডিনের থেকে প্রোগ্রাম উত্স পড়েন এবং স্টাডআউটে লেখেন।

নিজের উপর দৌড়ানোর ফলাফল:

undef$/;$a=<>."\n__END__\n";print$a,scalar reverse$a;

__END__

__DNE__

;a$esrever ralacs,a$tnirp;"n\__DNE__n\".><=a$;/$fednu

মন্তব্যগুলি ব্যবহার না করার জন্য +1

3
আমি এটি পছন্দ করি যে এটি "ডিএনই" দিয়ে নীচের অংশে আপাত জখম চিহ্নিত করে - "ডট নট ইরেজ" এর একটি সাধারণ শর্টহ্যান্ড চকবোর্ড / হোয়াইটবোর্ডগুলিতে জিনিস চিহ্নিত করে যাতে লোকেরা তাদের গুরুত্বহীন স্ক্রিবিবলিংয়ের জন্য ভুল না করে এবং সেগুলি মুছে দেয়।
anaximander

এটি কীভাবে কাজ করে, আমি পার্লকে চিনি না, আরও নির্দিষ্টভাবে কীভাবে এটি কুইন করে (লাইনটি যে এটির বিপরীত হচ্ছে তা পান)?
ক্রંચার

2
1+ প্রোগ্রাম __DATA__পড়ার সাথে শেষ না হওয়া ব্যতীত বেশিরভাগ ক্ষেত্রে কাজ করে .. যেমন। print while(<DATA>);\n__DATA__আচরণ বদলাবে।
সিলেস্টার

1
@ সিলওয়েস্টার: সত্য। এটি পার্ল স্ক্রিপ্টগুলি ব্যবহার করে না এমন সাবসেটের জন্য কাজ করে __DATA__। :)
গ্রেগ হিউগিল

11

জাভা, 225 বাইট

class c{public static void main(String[]a){String s="";java.util.Scanner r=new java.util.Scanner(System.in);while(r.hasNext())s+=r.nextLine()+"\n";s=s.replace("\n","//\n");System.out.print(s+new StringBuilder(s).reverse());}}

নিজেই আউটপুট (পূর্বে প্রাক্কৃত যখন):

class c {//
    public static void main(String[] a) {//
        String s = "";//
        java.util.Scanner r = new java.util.Scanner(System.in);//
        while (r.hasNext()) s += r.nextLine() + "\n";//
        s = s.replace("\n", "//\n");//
        System.out.print(s + new StringBuilder(s).reverse());//
    }//
}//

//}
//}
//;))(esrever.)s(redliuBgnirtS wen + s(tnirp.tuo.metsyS        
//;)"n\//" ,"n\"(ecalper.s = s        
//;"n\" + )(eniLtxen.r =+ s ))(txeNsah.r( elihw        
//;)ni.metsyS(rennacS.litu.avaj wen = r rennacS.litu.avaj        
//;"" = s gnirtS        
//{ )a ][gnirtS(niam diov citats cilbup    
//{ c ssalc

1
* মন্তব্য শেষ হওয়াতে সমস্যা। মন্তব্য
edc65

10

পাইথন 2, 68 বাইট

import sys
x=''.join(l[:-1]+'#\n'for l in sys.stdin)
print x+x[::-1]

আইডিএল থেকে চালিত হলে কাজ করে না, কারণ প্রোগ্রামটিকে ইনপুট থেকে অপেক্ষা করা থেকে বিরত রাখতে আপনাকে একটি EOF অক্ষর তৈরি করতে হবে।

নিজে চালিত হলে আউটপুট:

import sys#
x=''.join(l[:-1]+'#\n'for l in sys.stdin)#
print(x+x[::-1])#

#)]1-::[x+x(tnirp
#)nidts.sys ni l rof'n\#'+]1-:[l(nioj.''=x
#sys tropmi

সমস্যার হাতুড়ি এবং গল্ফকে সাহায্য করার জন্য গ্রেগ হিউগিলকে ধন্যবাদ।


খুব ভাল কাজ, পাইথনের প্রচেষ্টায় আমার মারাত্মক খোঁড়া মার।
গ্রেগ হিউগিল

1
@ গ্রেগ হিউগিল আমি একটি ভাল মন্তব্যে একটি চমৎকার আপভোট পছন্দ করি ;-)
জাস্টিন

1
ঠিক আছে ... আমি সাধারণত নিজের বিরুদ্ধে ভোট দিই না :)
গ্রেগ হিউগিল

5
@GregHewgill আমি ভোট নিজেকে "বিরুদ্ধে" অনেক । আমি উত্তরগুলি উত্তর দিয়েছি কি না তার ভিত্তিতে নয়, তাদের যোগ্যতার ভিত্তিতে উত্তরগুলি upvote করি।
জাস্টিন

8

গল্ফস্ক্রিপ্ট, 10 9 বাইট

"
}"+.-1%

মিনিটেকের সমাধানের সাথে বেশ সমান , তবে এটি নতুন লাইনের সাথে ভাল কাজ করে। এটি তুলনাহীন (এবং নিরবিচ্ছিন্ন) }, পাশাপাশি এটি অনুসরণকারী সবকিছু উপেক্ষা করার জন্য গল্ফস্ক্রিপ্টের মজাদার (এবং অননুমোদিত) আচরণের উপর নির্ভর করে ।

ইনপুটটিতে কোনও মিল নেই তবে এটি ব্যর্থ হবে {, তবে এটি প্রযুক্তিগতভাবে একটি বাক্য গঠন ত্রুটি তৈরি করবে।

কিভাবে এটা কাজ করে

"
}"   # Push the string "\n}".
+    # Concatenate it with the input string.
.    # Duplicate the modified string.
-1%  # Reverse the copy.

উদাহরণ

$ echo -n '1{"race{car"}
> {"foo\"bar"}
> if#' | golfscript make-palindrome.gs
1{"race{car"}
{"foo\"bar"}
if#
}}
#fi
}"rab"\oof"{
}"rac{ecar"{1
$ echo '1{"race{car"}
> {"foo\"bar"}
> if#
> }}
> #fi
> }"rab"\oof"{
> }"rac{ecar"{1' | golfscript
race{car

আপনার ইনপুট হিসাবে চেষ্টা করুন 1\n2#( \nএকটি আসল নিউলাইন চরিত্র হবে)।
জাস্টিন

1
@ কুইনকুনস: পেস্কি মন্তব্য ... কোঁকড়া বন্ধনীটির আগে একটি নতুন লাইনে এটি ঠিক করা উচিত।
ডেনিস

আগে এবং পরে। প্যালিনড্রোম থাকা দরকার।
জাস্টিন

@ কুইনকুনেক্স: অবশ্যই এটি এখন কাজ করা উচিত।
ডেনিস

5

ডস-এ x86 মেশিন কোড (.com ফাইল) এ - 70 বাইট

.COM ফাইলগুলির সাথে লেনদেন করা, একটি প্যালেন্ড্রোম তৈরি করা সহজ - যেহেতু COM "লোডার" কেবল ফাইলটির বিষয়বস্তু ঠিকানায় রাখে 100h এবং সেখানে লাফ দেয়, প্রোগ্রামটি ইতিমধ্যে অবশ্যই কোনওরকমে তার শেষটি হার্ডকোড করে এবং তার পরে সমস্ত কিছু উপেক্ষা করতে হবে, তাই আমরা কেবল যুক্ত করতে পারি প্রথম এন -1 বাইটের বিপরীত (কেবল সতর্কতা: প্রোগ্রামটি যদি কোনওভাবে ফাইলের দৈর্ঘ্যের বিরতিতে কৌশলগুলি চেষ্টা করে))

এখানে আমার- .COMপ্যালেন্ড্রোমাইজিংয়ের হেক্স ডাম্প রয়েছে .COM:

00000000  31 db 8a 1e 80 00 c6 87  81 00 00 ba 82 00 b8 00  |1...............|
00000010  3d cd 21 72 30 89 c6 bf  ff ff b9 01 00 ba fe 00  |=.!r0...........|
00000020  89 f3 b4 3f cd 21 3c 01  75 18 b4 40 bb 01 00 cd  |...?.!<.u..@....|
00000030  21 85 ff 75 e5 89 f3 f7  d9 88 ee b8 01 42 cd 21  |!..u.........B.!|
00000040  eb d8 47 74 f0 c3                                 |..Gt..|

এটি কমান্ড লাইনে ইনপুট ফাইল নেয়, এবং স্ট্যান্ডআউটে আউটপুট লিখে; প্রত্যাশিত ব্যবহার যেমন কিছুcompalyn source.com > out.com

মন্তব্য সমাবেশ:

    org 100h

section .text

start:
    ; NUL-terminate the command line
    xor bx,bx
    mov bl, byte[80h]
    mov byte[81h+bx],0
    ; open the input file
    mov dx,82h
    mov ax,3d00h
    int 21h
    ; in case of error (missing file, etc.) quit
    jc end
    ; si: source file handle
    mov si,ax
    ; di: iteration flag
    ; -1 => straight pass, 0 reverse pass
    mov di,-1
loop:
    ; we read one byte at time at a bizarre memory
    ; location (so that dl is already at -2 later - we shave one byte)
    mov cx,1
    mov dx,0feh
    mov bx,si
    mov ah,3fh
    int 21h
    ; if we didn't read 1 byte it means we either got to EOF
    ; or sought before the start of file
    cmp al,1
    jne out
    ; write the byte on stdout
    mov ah,40h
    mov bx,1
    int 21h
    ; if we are at the first pass we go on normally
    test di,di
    jnz loop
back:
    ; otherwise, we have to seek back
    mov bx,si
    ; one byte shorter than mov cx,-1
    neg cx
    ; dl is already at -2, fix dh so cx:dx = -2
    mov dh,ch
    mov ax,4201h
    int 21h
    jmp loop
out:
    ; next iteration
    inc di
    ; if it's not zero we already did the reverse pass
    jz back
end:
    ret

নিজে এবং পরীক্ষিত আগের প্রশ্নের সমাধানগুলি ডসবক্সে ঠিকঠাক কাজ করে বলে মনে হচ্ছে, "ক্যানোনিকাল" ডস এক্সিকিউটেবলের উপর আরও কিছু বিস্তৃত পরীক্ষা করা হবে।


3

গল্ফস্ক্রিপ্ট, ৮

.-1%'#'\

নিউলাইনগুলি হ্যান্ডেল করে না, তবে কেউ গল্ফস্ক্রিপ্টগুলিতে ব্যবহার করে না।


6
স্ট্রিং লিটারেলগুলিতে নিউলাইন ব্যবহার করা বেশিরভাগ সময় ব্যবহার করা যেতে পারে ;-)
হাওয়ার্ড

2

বাশ + কোর্টিলস, 39 বাইট

f="`cat`
exit"
echo "$f"
tac<<<"$f"|rev

STDIN এবং আউটপুট থেকে STDOUT এ পড়ে:

$ cat hello.sh 
#!/bin/bash

echo 'Hello, World!'

$ ./palin.sh < hello.sh 
#!/bin/bash

echo 'Hello, World!'
exit
tixe
'!dlroW ,olleH' ohce

hsab/nib/!#
$ 

@ user23013 ভাল কাজ মনে হচ্ছে। কমপক্ষে একটি সাধারণ পরীক্ষা ( echo 'Hello, World!' )। বাশ বেশ পরে সমস্ত কিছু উপেক্ষা করে exit
ডিজিটাল ট্রমা

2

জাভাস্ক্রিপ্ট ( ES6 ) মাল্টি-লাইন - 71

কিন্ডা সার্টা কুইঞ্চুনস চুরি করেছে এখানে মন্তব্য পদ্ধতিটি করেছে:

alert((x=prompt().replace(/\n/g,'//\n')+'/')+[...x].reverse().join(''))

একক লাইন - 49

alert((x=prompt()+'/')+[...x].reverse().join(''))

2

সি ++, 214 209 বাইট

#include<cstdio>
#include<stack>
int main(){std::stack<char>s;int c;while((c=getc(stdin))>EOF){if(c=='\n')for(int i=2;i;i--)s.push(putchar('/'));s.push(putchar(c));}while(s.size()){putchar(s.top());s.pop();}}

নিজের উপর দৌড়ানোর ফলাফল:

#include<cstdio>//
#include<stack>//
int main(){std::stack<char>s;int c;while((c=getc(stdin))>EOF){if(c=='\n')for(int i=2;i;i--)s.push(putchar('/'));s.push(putchar(c));}while(s.size()){putchar(s.top());s.pop();}}//

//}};)(pop.s;))(pot.s(rahctup{))(ezis.s(elihw};))c(rahctup(hsup.s;))'/'(rahctup(hsup.s)--i;i;2=i tni(rof)'n\'==c(fi{)FOE>))nidts(cteg=c((elihw;c tni;s>rahc<kcats::dts{)(niam tni
//>kcats<edulcni#
//>oidtsc<edulcni#

ধারাবাহিকতা চর '\' ব্যবহার করা হলে ব্যর্থ। [ Ideone.com/TCZHr9]
edc65

@ এডসি 65: হ্যাঁ, আমি পরে এটি সম্পর্কে ভেবেছিলাম। আমি হ্যান্ডেল করার একমাত্র সুস্পষ্ট উপায়টি হ'ল প্রথমে ভাঁজ করা রেখাগুলি প্রকাশ করা।
গ্রেগ হিউগিল

স্বল্প ব্যয়ে করা যাবে - আমার সি উত্তরটি দেখুন
edc65

2

ব্রেইনফাক, সাদা জায়গা ছাড়াই 9৪৯ (গল্ফড নয়)

এটি ব্রেনফাক প্রোগ্রাম তৈরি করে যা প্যালিনড্রোমগুলি মিরর করে, অর্থাৎ তারা নিজেরাই মিরর চিত্র images

++++++++++
[->++++>+++++++++<<]>+++.>+..<.>++.
>>>>+[>,]<-[+<-]
>[
  [-<+<<+>>>]
  +<-------------------------------------------[-<+>>[-]<]>[-<<<.>>>]
  +<<-[->+>[-]<<]>>[-<<<.>>>]
  +<-[-<+>>[-]<]>[-<<<.>>>]
  +<<-[->+>[-]<<]>>[-<<<.>>>]
  +<--------------[-<+>>[-]<]>[-<<<.>>>]
  +<<--[->+>[-]<<]>>[-<<<.>>>]
  +<-----------------------------[-<+>>[-]<]>[-<<<.>>>]
  +<<--[->+>[-]<<]>>[-<<<.>>>]
  <[-]>>
]
<<<<[<]
<--.<.>++..--..<.>++.
>>[>]
<[
  [->+>>+<<<]
  +>-------------------------------------------[->+<<[-]>]<[->>>.<<<]
  +>>-[-<+<[-]>>]<<[->>>.<<<]
  +>-[->+<<[-]>]<[->>>.<<<]
  +>>-[-<+<[-]>>]<<[->>>.<<<]
  +>--------------[->+<<[-]>]<[->>>++.--<<<]
  +>>--[-<+<[-]>>]<<[->>>--.++<<<]
  +>-----------------------------[->+<<[-]>]<[->>>++.--<<<]
  +>>--[-<+<[-]>>]<<[->>>--.++<<<]
  >[-]<<
]
<--.<.>++..<.

একটি প্রোগ্রাম দেওয়া হয়েছে এটি আউটপুট করে

+[[+]PROGRAM[+]][[+]MIRROR[+]]+

সঙ্গে PROGRAMএবং MIRRORপ্রোগ্রাম (অ brainfuck অক্ষর ছাড়া) এবং তার মিরর ইমেজ দ্বারা প্রতিস্থাপিত।


2

সি 168 175

সোর্স কোডের অভ্যন্তরে সঠিকভাবে নিউলাইনটি থেকে রক্ষা পেয়েছে হ্যান্ডলগুলি

সর্বশেষ নিউলাইন অনুপস্থিত যখন 1 টি স্থির বাগ
সম্পাদনা করুন মন্তব্যের অভ্যন্তরে যখন লাইনটি শেষ হয় তখন 2 টি স্থির বাগ সম্পাদনা করুন* : //মন্তব্যের আগে একটি ট্যাব চর যুক্ত করুন
(এবং আরও গল্ফ করেছেন)

b[999999];main(c,z){char*p,for(p=b;(*p=c=getchar())>=0;z=c,p++)c-10||(z-92?*p++=9,*p++=47,*p++=47,*p=c:(p-=2));*p=47;for(p=b;*p;)putchar(*p++);for(;p>b;)putchar(*--p);}

C99 স্ট্যান্ডার্ড, বৈধ কোড, অনেক সতর্কতা

Ungolfed

b[999999]; // working buffer ~ 4M on 32 bit machine, max source size
// c is current char, z is previous char,
main(c,z) // z  start as argv pointer, will be out of char range
{
  char *p;
  for(p = b; 
      (*p=c=getchar()) >= 0; // while testing EOF copy char to buffer set c variable
      z=c, p++) // at end loop increment p and set previous = current
  {
      c-'\n' || // if newline 
       (z - '\\' // check if escaped
          ? *p++='\t',*p++='/',*p++='/', *p=c // if not escaped, add tab,/,/ and newline
          : (p-=2) // if escaped, drop both escape and newline
       ); 
  }
  *p='/'; // if last newline missing, will add a comment anyway
  for(p=b;*p;) putchar(*p++); // ouput buffer 
  for(;--p>=b;) putchar(*p); // outbut buffer reversed
}

1
এটি একটি সামান্য বাগ আছে। চেষ্টা করুন/* *<NL> */int main(){}
jimmy23013

1

সি # - 174

using System;using System.Linq;class c{public static void Main(){var a="";var b="";while((a=Console.ReadLine())!="")b+=a+"//\n";Console.Write(b+string.Concat(b.Reverse()));}}

পরীক্ষার ইনপুট:

using System; 
using System.Linq; 
class c 
{ 
    public static void Main() 
    { 
        var a = ""; 
        var b = ""; 
        while ((a = Console.ReadLine()) != "") 
            b += a + "//\n"; 
        Console.Write(b+string.Concat(b.Reverse())); 
    } 
} 

পরীক্ষার আউটপুট:

using System; 
using System.Linq; 
class c 
{ 
    public static void Main() 
    { 
        var a = ""; 
        var b = ""; 
        while ((a = Console.ReadLine()) != "") 
            b += a + "//\n"; 
        Console.Write(b+string.Concat(b.Reverse())); 
    } 
} 

// }
// }
// ;)))(esreveR.b(tacnoC.gnirts+b(etirW.elosnoC
// ;"n\//" + a =+ b
// )"" =! ))(eniLdaeR.elosnoC = a(( elihw
// ;"" = b rav
// ;"" = a rav
// {
// )(niaM diov citats cilbup
// {
// c ssalc
// ;qniL.metsyS gnisu
// ;metsyS gnisu

আমি মনে করি আপনি হয়ত কোনও একটি নির্দেশকে ভুল বুঝে থাকতে পারেন। আপনার প্রোগ্রামটি যে কোনও প্রোগ্রামকে ইনপুট হিসাবে নিতে সক্ষম হবে এবং একটি প্যালিনড্রমিক প্রোগ্রাম লিখতে সক্ষম হবে যা মূল প্রোগ্রামের মতোই কাজ করে।
গ্রেগ হিউগিল

এটি পারে .. যদি আমি আপনার উত্তর থেকে সি ++ কোড ইনপুট করি তবে এটি আপনার কাছে যা আছে ঠিক তা ফিরে আসে।
জাজম

আপনার সমস্ত প্রোগ্রাম এর ইনপুট বিপরীত হয়। আপনার প্রোগ্রামের আউটপুট সম্পূর্ণ প্যালিনড্রমিক প্রোগ্রাম নয়।
গ্রেগ হিউগিল

ওহ হ্যাঁ, আমি তোমাকে পেয়েছি আপডেট হয়েছে - এখন আরও ভাল?
jzm

2
হ্যাঁ, এটা। আপনার পরীক্ষার আউটপুটটিতে //এখন প্রতিটি লাইনের শেষে হওয়া উচিত ।
গ্রেগ হিউগিল

0

পিএইচপি, 96 বাইট

function a($b){
    echo $c = "a('$b')" . strrev("a)'" . $b . "'(");
    $d = substr($c, 0, strlen($b) + 5);
    eval("$d;");
}

নমুনা ব্যবহার:

a('apple'); // echoes a('apple')('elppa')a until your bytes get exhausted

এটি চালাক কিছুই না। এটি কোডের একটি সহজ টুকরো যা কাজটি করে ... আমি খেলার মুডে ছিলাম। আমি জানি যে এই কোডটি খারাপ প্রোগ্রামিং অনুশীলনের সাথে ছড়িয়ে পড়েছে!

অবশেষে, আমি এই কোডটিতে কোনও সমালোচনা এবং সম্পাদনা সানন্দে গ্রহণ করব!


কোড গল্ফ স্বাগতম। এটি একটি অনুষ্ঠান, কোনও প্রোগ্রাম নয়। অন্যান্য উত্তরগুলি দেখুন, তারা ভাল উদাহরণ সরবরাহ করে।
এএল

0

কোবরা - 134

class P
    def main
        i=List<of String?>(Console.readLine.split('\n'))
        print '/#\n[i.reversed.join("\n")]\n#/#\n[i.join("\n")]\n#/'

0

র‌্যাকেট 133

(require srfi/13)(let((r read-line)(w display))(let l((i(r)))(when
(not(eq? eof i))(w i)(w";\n")(l(r))(w"\n;")(w(string-reverse i)))))

অবহেলিত (তবে এখনও খুব জরুরি):

(require srfi/13)
(let recurse ((instr (read-line)))
  (when (not (eof-object? instr))
    (display instr)
    (display ";\n")
    (recurse (read-line))
    (display "\n;")
    (display (string-reverse instr))))

ইনপুট হিসাবে অদ্বিতীয় সংস্করণ দেওয়া হলে আউটপুট:

(require srfi/13);
(let recurse ((instr (read-line)));
  (when (not(eof-object? instr));
    (display instr);
    (display ";\n");
    (recurse (read-line));
    (display "\n;");
    (display (string-reverse instr))));

;))))rtsni esrever-gnirts( yalpsid(    
;)";n\" yalpsid(    
;))enil-daer( esrucer(    
;)"n\;" yalpsid(    
;)rtsni yalpsid(    
;))rtsni ?tcejbo-foe(ton( nehw(  
;)))enil-daer( rtsni(( esrucer tel(
;)31/ifrs eriuqer(
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.