मैं आपको जानता हूं, लेकिन आप मुझे नहीं जानते


18

आपको दो प्रोग्राम लिखने का काम सौंपा गया है। कार्यक्रम एक सभी आदानों पर कुछ भी नहीं प्रिंट आउट करना होगा छोड़कर जब कार्यक्रम बी इनपुट है, ऐसी स्थिति में इसे प्रिंट चाहिए 1। कार्यक्रम बी प्रिंट आउट करना होगा 1सभी आदानों पर छोड़कर जब कार्यक्रम एक इनपुट है, ऐसी स्थिति में यह कुछ भी नहीं मुद्रित करना चाहिए।

स्कोरिंग:

  • +1 दोनों कार्यक्रमों के प्रत्येक चरित्र के लिए ।
  • सबसे कम स्कोर जीतता है।

3
क्या यह quine-ish इसे quine के रूप में टैग करने के लिए पर्याप्त है ? यह निश्चित रूप से मुझे ऐसा लगता है।
जस्टिन

जैसा कि पहले पोस्ट किए गए दो उत्तर इंगित करते हैं, "जा रहा है" एक और कार्यक्रम इस विवरण में बहुत अच्छी तरह से परिभाषित नहीं है। और, मैं @Quincunx के साथ हूँ कि यह कुछ बहुत ही क्वीन-प्रकृति की तरह है।
dmckee

@Quincunx मैंने क्वीन टैग जोड़ा है।
टाइमटेक

1
@Quincunx सच है, लेकिन अब तक कोई भी ऐसा नहीं कर रहा है, जब तक कि आप किसी क्वीन को किसी प्रोग्राम को कॉल न करें, जो डिस्क से उसके सोर्स कोड को पढ़ता है और उसे प्रिंट करता है: p
aditsu

2
@aditsu मैं उन जवाबों को पसंद नहीं करता। मुझे लगता है कि मैं एक बहुत ही दत्तक जवाब देता हूं जो ऐसा नहीं करता है। मुझे व्यक्तिगत रूप से लगता है कि फ़ाइलों के माध्यम से सोर्स कोड पढ़ना धोखा है; कार्यक्रम कहीं भी काम करना चाहिए!
जस्टिन

जवाबों:


5

जीटीबी , 25

TI-84 कैलकुलेटर से निष्पादित

कार्यक्रम A

`_@_eq;"$w;&

कार्यक्रम B

`_@_eq;"$#w;&

व्याख्या

`_ एक स्ट्रिंग इनपुट करें

@_eq;"जांचें कि क्या यह स्रोत कोड के बराबर है ( #स्वचालित रूप से लोअरकेस अक्षर के साथ छीन लिया गया है)

$w;&यदि हां, तो प्रदर्शित 1 (अन्यथा कुछ भी नहीं) [के लिए Bयह है $#w;&- यदि नहीं, तो प्रदर्शन 1 (अन्यथा कुछ भी नहीं)]


12

बैश - 32 अक्षर

स्क्रिप्ट ए - 16 अक्षर

cmp -s b&&echo 1

स्क्रिप्ट बी - 16 अक्षर

cmp -s a||echo 1

प्रयोग

$> echo "foo" | ./a
$> cat b | ./a
1
$> echo "foo" ./b
foo ./b
$> cat a | ./b

5

रूबी, ५४

$><<1if$<.read==IO.read(?B)

बी

$><<1if$<.read!=IO.read(?A)

उदाहरण:

bash-3.2$ ruby A < A
bash-3.2$ ruby A < B
1bash-3.2$ ruby B < A
bash-3.2$ ruby B < B
1bash-3.2$ 

4

जे (62)

चूंकि आपने इसे मना नहीं किया था ...

क्रमशः Aऔर कार्यक्रमों को स्टोर करें B

कार्यक्रम ए (30):

exit echo#~(1!:1<'B')-:1!:1[3

कार्यक्रम बी (32):

exit echo#~-.(1!:1<'A')-:1!:1[3

यह कैसे काम करता है (प्रोग्राम बी, ए समान है):

  • 1!:1[3: स्टडिन पढ़ें
  • 1!:1<'A': फ़ाइल पढ़ें A
  • -:: देखें कि क्या वे समान हैं
  • -.: परिणाम को नकारें
  • #~: अपने आप में परिणाम को दोहराने (हां, तो 1एक में परिणाम 1और 0शून्य में परिणाम 0है, यानी कुछ भी नहीं)
  • echo: आउटपुट
  • exit: फ़ाइल के अंत तक पहुँचने पर (J दुभाषिया डिफ़ॉल्ट रूप से बाहर नहीं निकलता)
$ जकोनोस ए <बी
1
$ जकोनोस ए <फू
$ जकोनोस बी <ए
$ जकोनोस बी <फू
1
$

क्या आप इसका संक्षिप्त विवरण दे सकते हैं कि यह क्या करता है?
आइक

@ike: वैसा ही किया _______
मारीनस

3

हास्केल - लोडिंग स्रोत के बिना - 478 644 अक्षर

यह मान लिया जाता है कि ALWAYS एक नई पंक्ति के साथ समाप्त होता है और इसलिए अंतिम वर्ण को बिना जांचे छोड़ देता है क्योंकि मुझे ऐसा महसूस नहीं होता

main=interact$($'1').replicate.(1-).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='-'='*'|n=='*'='-'|True=n;d="main=interact$($'1').replicate.(1-).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='-'='*'|n=='*'='-'|True=n;d="

बी

main=interact$($'1').replicate.(1*).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='*'='-'|n=='-'='*'|True=n;d="main=interact$($'1').replicate.(1*).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='*'='-'|n=='-'='*'|True=n;d="

यह एक मानक क्वीन की तरह काम करता है, लेकिन अन्य प्रोग्राम प्राप्त करने के लिए * स्वैपिंग के लिए * (उन वर्णों को कहीं और टालना)।

उम्मीद के अनुसार निम्नलिखित परीक्षण प्रिंट करता है (मुख्य की जगह = a और b = के साथ $ बातचीत करें)

main=do
  putStrLn "START"
  putStrLn$a "FOO"
  putStrLn$a "main=interact$($'1').replicate.(1*).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='*'='-'|n=='-'='*'|True=n;d=\"main=interact$($'1').replicate.(1*).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='*'='-'|n=='-'='*'|True=n;d=\"\n"
  putStrLn$b "FOO"
  putStrLn$b "main=interact$($'1').replicate.(1-).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='-'='*'|n=='*'='-'|True=n;d=\"main=interact$($'1').replicate.(1-).fromEnum.(/=map r(d++shows d[toEnum 10]))where r n|n=='-'='*'|n=='*'='-'|True=n;d=\"\n"
  putStrLn "END"

-

START

1
1

END

इसके अलावा अगर अखंड एकल लाइन फ़ंक्शंस को प्रारूपित करने का एक पसंदीदा तरीका है जो आसान होगा, तो meta.stackexchange.com/questions/22186/… इसे कवर नहीं करता है
Toeofdoom

2

पायथन 2.7 - 82

फ़ाइल A (शाब्दिक रूप से नाम मात्र a):

if raw_input()==open('b').read():print 1

फ़ाइल बी (शाब्दिक रूप से नाम मात्र b):

if raw_input()!=open('a').read():print 1

कुल दुरुपयोग वहाँ के बिना .py- यह भी काम करता है?
समयटेक

मुझे यकीन है कि @LegoStormtroopr मेरे रूबी उदाहरणों के रूप में उसी तरह चल रहा होगा, कुछ मिनट पहले। ;-)
डैरेन स्टोन

1
@Timtech यह करता है अगर आप उन्हें कमांड लाइन से चलाते हैं python a

मेरा मतलब है कि क्या बिना एक्सटेंशन के भी फाइल जेनरेट करना संभव है?
टाइमटेक

5
निश्चित रूप से यह है? यदि आप एक Posix मशीन पर हैं, touch aतो आपके पास अनुमतियाँ होने पर एक खाली फ़ाइल बन जाएगी। अतिरिक्त क्रूर मज़े के लिए आप ऐसा भी कर सकते हैं touch \~जो एक एकल टिल्ड ( ~) के साथ नाम से एक फ़ाइल बनाता है - फिर किसी को मूर्खता से देखने के बाद इसे हटाने की कोशिश करता है;)

2

रूबी, 166 वर्ण, कोई पठन स्रोत नहीं

ए:

(gets(p)==<<2.tr('&|','|&')*2+'2')&&p(1)
(gets(p)==<<2.tr('&|','|&')*2+'2')&&p(1)
2

बी:

(gets(p)==<<2.tr('|&','&|')*2+'2')||p(1)
(gets(p)==<<2.tr('|&','&|')*2+'2')||p(1)
2

सुनिश्चित करें कि आपका टेक्स्ट एडिटर अनुगामी न्यूलाइन के साथ सेव नहीं करता है।

उपयोग (उदाहरण):

 $ ruby know_a.rb know_b.rb 
1
 $ ruby know_a.rb know_a.rb 
 $ ruby know_b.rb know_a.rb 
 $ ruby know_b.rb know_b.rb 
1

प्रत्येक प्रोग्राम एक HEREdoc और स्ट्रिंग ट्रांसफ़ॉर्म का उपयोग करके दूसरे प्रोग्राम के स्रोत का निर्माण करता है, फिर परिणाम की तुलना इनपुट से करता है।


यह लिखना काफी आसान था, लेकिन अब मेरे दिमाग का कुछ हिस्सा जो पुनरावृत्ति को नहीं समझता है, यह जोर दे रहा है कि इसे अनुकूलित किया जा सकता है, लेकिन यह पता नहीं है कि कैसे।
हिस्टोक्रेट

पी क्या है? और वंशानुगत कहाँ समाप्त होता है?
aditsu

pएक बिल्ट-इन रूबी विधि है जो उस पर पारित तर्कों को प्रिंट करती है, फिर उन तर्कों को लौटा देती है, जो इसे गोल्फ आउटपुट के लिए उपयोगी बनाते हैं। जब कोई तर्क नहीं दिया जाता है तो यह शून्य हो जाता है। तर्क getsएक सीमांकक है, इसलिए pएक शून्य परिसीमन में परिणाम गुजरता है, जिसका अर्थ है कि यह STDIN तक पढ़ता है जब तक कि यह ईओएफ तक नहीं पहुंचता है। वंशानुगत अभिव्यक्ति है <<2, इसलिए यह फ़ाइल के अंत में (और शामिल नहीं है), 2 पर समाप्त होती है।
हिस्टोक्रेट

2हेरेडोक सीमांकक के रूप में उपयोग एक पारंपरिक सा ऑबफ्यूजन है। यह लगभग किसी भी स्ट्रिंग हो सकता है।
हिस्टोक्रेट

क्या हेरेडोक की सामग्री का मूल्यांकन किसी तरह किया गया है?
aditsu

1

हास्केल - 138

वास्तव में एक अच्छा जवाब नहीं है, लेकिन दोनों कार्यक्रमों को एक ही स्रोत का उपयोग करना चाहते हैं। फ़ाइल का नाम बदलकर कुछ वर्णों को सहेज सकता है, लेकिन यह इसे एक विजयी समाधान नहीं बनाने वाला है, इसलिए मुझे नहीं लगता कि यह इसके लायक है।

import System.Environment
import Control.Monad
main=do{i<-getContents;p<-getProgName;f<-readFile "ab.hs";when((f==i)/=(p=="B"))(print 1)}

इस स्रोत को दोनों के रूप में संकलित करें Aऔर B

परीक्षा:

% ghc -o A ab.hs
[1 of 1] Compiling Main             ( ab.hs, ab.o )
Linking A ...
% cp A B
% ./A < ab.hs
1
% ./B < ab.hs
% ./A < ab.hi
% ./B < ab.hi
1

क्यों दो बार में संकलन A, और फिर कॉपी Aकरने के लिए B?
मन्नीप

कोड को कॉपी करने के दौरान मेरे हिस्से में यह गलती थी। यह बात बताने के लिए धन्यवाद। ठीक कर देंगे।
शियोना

1

नोड.जेएस - 142 वर्ण

स्क्रिप्ट |(अन्यथा स्क्रिप्ट ए के रूप में जाना जाता है) - 80 वर्ण

f=require('fs').readFileSync;f('/dev/stdin','hex')==f('&','hex')&&console.log(1)

स्क्रिप्ट &(अन्यथा स्क्रिप्ट बी के रूप में जाना जाता है) - 62 वर्ण

eval(require('fs').readFileSync('|','utf8').replace(/&/g,'|'))

प्रयोग

# \| is Script A
# \& is Script B

$> echo "foo" | node \| 
$> cat \& | node \| 
1
$> echo "foo" | node \& 
1
$> cat \| | node \&

विवरण

Script B स्क्रिप्ट A की सामग्री को पढ़ता है और फ़ाइल नामों और andऑपरेटर को स्वैप करने के बाद इसे निकाल देता है or

मैंने फाइलों को नाम दिया है &और |इसलिए मैं स्क्रिप्ट बी में एक एकल प्रदर्शन कर सकता हूं।


1

पायथन 3 - 102 वर्ण

प्रिंट 1 यदि इनपुट प्रोग्राम 2 के समान है, अन्यथा कुछ भी नहीं:

if input()==open('a.py').read():print('1')

प्रिंट 1 यदि इनपुट प्रोग्राम 1 के समान नहीं है, तो कुछ नहीं:

if input()==open('a.py').read():print('1')

क्या व्हाट्सएप को हटाया नहीं जा सकता है? इसके अलावा, आप t.py और tt.py से स्क्रिप्ट को छोटा कर सकते हैं।
टाइमटेक

@Timtech ज़रूर, अच्छा विचार है। इसके अलावा, मैं व्हाइट-स्पेस की गिनती नहीं कर रहा था - यह सिर्फ पठनीयता के लिए है। हालाँकि नई-लाइनें नहीं निकाली जा सकतीं।
होशे २५०

हां, मैं पायथन की न्यूलाइन संवेदनशीलता के बारे में जानता हूं।
टाइमटेक

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

@AJMansfield हां, मुझे पता है, लेकिन मैंने वैसे भी नई संख्या की गणना नहीं की है।
होशे २५०

0

bash / grep - 59 चार्ट

51 चार्ट अगर हम केवल वास्तविक प्रोग्राम स्ट्रिंग की गिनती करते हैं।

$ a='grep -cx "$b" | grep -x 1'
$ b='grep -vcx "$a" | grep -x 1'
$ echo 'foo' | eval $a
$ echo $b | eval $a
1
$ echo 'foo' | eval $b
1
$ echo $a | eval $b

-1

आर (62 वर्ण)

i=identical
A=function(x)if(i(x,B))1
B=function(x)if(!i(x,A))1

पैदा करता है:

> A(123)
> A(A)
> A(B)
[1] 1
> B(123)
[1] 1
> B(A)
> B(B)
[1] 1

मेटा टिप्पणी: कोड गोल्फ पर अपेक्षाकृत खराब मेलों के रूप में कोई शॉर्टकट नहीं है function...

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