पॉलीग्लॉट प्रतिबंधित


20

पॉलीग्लॉट ऐसे प्रोग्राम हैं जो एक साथ कई प्रोग्रामिंग भाषाओं में मान्य हैं। अधिकांश ऐसे बहुभाषाविदों को इस तरह से लिखा जाता है कि एक भाषा के कुछ निर्माणों की व्याख्या किसी अन्य भाषा की टिप्पणियों के रूप #defineमें की जाती है (जैसे सी में कई स्क्रिप्टिंग भाषाओं में एक टिप्पणी के रूप में व्याख्या की जा रही है)।

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

ठोस नियम इस प्रकार हैं:

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

प्रतिबंध का नियम कई पात्रों को हटाने पर लागू नहीं होता है। यही है, यह ठीक है अगर एक साथ कई वर्णों को हटाने से आपकी किसी भाषा के लिए कोई परिवर्तन नहीं होता है।

ध्यान दें कि प्रतिबंध नियम का अर्थ है कि आप अपनी भाषा में से किसी एक के रूप में व्हॉट्सएप का उपयोग नहीं कर सकते हैं, क्योंकि किसी भी गैर-व्हाट्सएप चरित्र को हटाने से व्हॉट्सएप कार्यक्रम का व्यवहार नहीं बदलेगा।

पायथन 2 और पायथन 3: भाषाओं के लिए उपरोक्त सभी प्रतिबंधों को पूरा करने वाले एक कार्यक्रम का एक सरल उदाहरण यहां दिया गया है।

print("Hello World!")

किसी भी चरित्र को हटाने से printदोनों भाषाओं को फेंकने का कारण होगा NameError; किसी भी ब्रैकेट या उद्धरण को SyntaxErrorहटाने से एक फेंक दिया जाएगा , और किसी भी स्ट्रिंग वर्ण को हटाने से दोनों भाषाओं में आउटपुट बदल जाएगा। (ध्यान दें कि print("hello", "world")उपरोक्त नियमों के तहत एक अधिक सूक्ष्म, लेकिन अभी भी मान्य कार्यक्रम है)।

यह उदाहरण थोड़ा लंगड़ा है क्योंकि पायथन 2 और पायथन 3 बहुत समान हैं, इसलिए मैं किसी भी अन्य समाधान को स्वीकार नहीं करूंगा जो केवल एक ही भाषा के विभिन्न संस्करणों का उपयोग करते हैं (विशेष रूप से पायथन 2 और पायथन 3)।


@ IngoBürk: नियम आपको एक कार्यात्मक पॉलीग्लॉट लिखने से रोकता है जिसमें व्हाट्सएप शामिल है, जब तक कि किसी भी तरह आपकी अन्य भाषा भी व्हाट्सएप नहीं होती।
nnonneo

1
एफडब्ल्यूआईडब्ल्यू आपका उदाहरण है, print("Hello World!")रूबी कोड भी मान्य है
क्रिस्टियन लुपस्कु

यह थोड़ा कष्टप्रद है कि [बहुभुज] के सरल उत्तर (मेरी तरह) में इतनी सारी भाषाएँ हैं।
जस्टिन

5
असंख्य भाषा वेरिएंट या समान सिंटैक्स वाली भाषाओं से बचने के लिए, यह आवश्यक होगा कि दो भाषाओं की गणना अलग-अलग हो, यदि प्रोग्राम अलग-अलग आउटपुट का उत्पादन करता है।
गाइल्स 'एसओ- बुराई को रोकें'

जवाबों:


13

बैश + गोल्फस्क्रिप्ट + सीजाम

"echo" []
{ cat<&3;} \
3<""<("echo" 'p'~)

उत्पादन

दे घुमा के:

[]
p~

GolfScript:

"echo"
echo{ cat<&3;}0

CJam:

echo{ cat<&3;}-1echop

\x7fCJam के आउटपुट के अंत में एक है।


... रुको, यह तीनों भाषाओं में कैसे काम करता है, बिना निरर्थक?
nnonneo

@nneonneo यह बस अन्य भाषाओं में सभी अप्रयुक्त कोड को प्रिंट करता है।
jimmy23013

8

बैश + बेफुंगे

"echo" $,$,"ol":,,,@

un हेलो ’प्रिंट में।


1
मैं इस बात की पुष्टि कर सकता हूं कि हर पात्र (स्थान को छोड़कर) बेफुन्ज में कुछ करता है। मैं हालांकि बैश के लिए ऐसा नहीं कर सकता। यह प्रभावशाली है।
जस्टिन

7

बीसी, गोल्फस्क्रिप्ट, होम्सप्रिंग, हुह, ओक्टेव, सिलाब (0 बाइट्स)

नियम का पालन करने की गारंटी 4. विजेता नहीं, लेकिन टाई ब्रेक में अच्छा करेगा।

उत्पादन

बीसी

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.

GolfScript


Homespring

In Homespring, the null program is not a quine.

हुह

?

सप्टक

GNU Octave, version 3.6.4
Copyright (C) 2013 John W. Eaton and others.
This is free software; see the source code for copying conditions.
There is ABSOLUTELY NO WARRANTY; not even for MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  For details, type `warranty'.

Octave was configured for "x86_64-redhat-linux-gnu".

Additional information about Octave is available at http://www.octave.org.

Please contribute if you find this software useful.
For more information, visit http://www.octave.org/get-involved.html

Read http://www.octave.org/bugs.html to learn how to submit bug reports.

For information about changes from previous versions, type `news'.

साइलैब

Startup execution:
  loading initial environment

-->

2
मुझे पता है कि एक एसोलैंग है जो विशेष रूप से इस तरह की चीज़ों को करने से 0 लंबाई के खानों को रोकता है (ओह प्रतीक्षा करें, यह होमस्प्रिंग है )। मुझे विश्वास है हुह? कुछ का उत्पादन करता है।
जस्टिन

धन्यवाद! अफसोस की बात है कि मैं हुह को मना नहीं सकता? लिनक्स पर चलाने के लिए ...
डेनिस

1
मुझे केवल मोनो के लिए एक अतिरिक्त पैकेज की आवश्यकता थी। आपका कार्यक्रम प्रिंट करता है What?\n?, वैसे।
डेनिस

1
जीएनयू मेक (यदि यह एक प्रोग्रामिंग भाषा है) में भी काम करता है:make: *** No targets. Stop.
jimmy23013

1
@ user23013: सही है। उस स्थिति में, यह वैध प्रविष्टि नहीं है, क्योंकि मेक का निकास कोड 2. है
डेनिस

6

GolfScript + PHP + CJam + Mathematica + bc + Pyth + /// + TI-Basic + R + Octave + Matlab + Scilab + Numeric Topline +? फ्यू + हुह?

10

Golscript, PHP, CJam, Mathematica, bc, Pyth, ///, और TI-Basic में, यह आउटपुट करता है 10

आर में, यह आउटपुट करता है [1] 10

ऑक्टेव में, यह आउटपुट करता है ans = 10

Matlab और Scilab में, यह आउटपुट करता है ans = 10

न्यूमेरिक टॉपलाइन में, यह आउटपुट करता है 0

अगर मैं Fueue ठीक से समझ है, यह एक नई पंक्ति आउटपुट, तो एक बिल्ली कार्यक्रम के रूप में कार्य करता है।

हुह में ?, यह आउटपुट

What?
?

1
इसके अलावा CJam में काम करता है
अगस्त

5
मुझे नहीं लगता कि इंटरएक्टिव दुभाषियों की गिनती होनी चाहिए।
nnonneo

2
यह बहुत सी भाषाओं में ठीक चलता है, लेकिन इतने में आउटपुट नहीं देता ...
जस्टिन

1
यह भी में मान्य है एचटीएमएल , बीसी , मैटलैब और साइलैब । यदि आप इसे बदलते 72हैं 10, तो इसे न्यूमेरिक टॉपलाइन0 में प्रिंट करना चाहिए ।
डेनिस

HTML मेटा चर्चा के अनुसार एक प्रोग्रामिंग भाषा नहीं है क्योंकि इसमें सरल अंकगणित या लूप का कोई साधन नहीं है।
इंगो बुर्क

3

ऐसा लगता है कि यह उत्तर पूरी तरह से सही नहीं है।
मैं आंशिक रूप से यह तय हो गई है, और कुछ ही दिनों में अन्य भाग में सुधार करने के लिए जा रहा।

सी ++ और जावास्क्रिप्ट

विचार है:

void eval(bool="main=function(){alert('Hi from Javascript!')};puts=function(){};int=0");
int
main()
{
puts("Hi from C++!");
}

C ++: http://codepad.org/SK2wbIDL
जावास्क्रिप्ट: ब्राउज़र कंसोल में बस कोड कॉपी करें

और सुधारों का एक सेट यह संतुष्ट करने के लिए

(प्रतिबंध)। आपके कोड से किसी भी एक गैर-व्हाट्सएप चरित्र को हटाने से आपके कार्यक्रम को आपकी प्रत्येक भाषा के तहत अपना व्यवहार बदलने का कारण होना चाहिए। कार्यक्रम हो सकता है "बदलाव" उस भाषा के लिए अमान्य बनने, या उत्पादन उत्पादन किया है कि बदल कर।

जावास्क्रिप्ट ओर से:

परिवर्तन int, mainया putsअघोषित चर के पढ़ने के साथ दुर्घटनाग्रस्त हो जाएगा। लेकिन boolऔर Hi from C++!सुरक्षित रूप से बदलता है हो सकता है। के इसे ठीक करते हैं:

puts=function(){}
puts=function(s){s=='Hi from C++!'?bool:nope}

यदि तार बराबर हैं, तो यह मौजूद है की जाँच करता है bool, अन्य यह अघोषित के साथ दुर्घटनाग्रस्त हो जाता है nope

अब, वहाँ 2 अनुगामी अर्धविराम कि हटाया जा सकता है कर रहे हैं। पहले esyly तय हो गई है - बस से पहले न्यू लाइन को दूर int:

void eval(bool="main=function(){alert('Hi from Javascript!')};puts=function(){};int=0");int

दूसरे से पहले है }, इसलिए मैं कुछ कसना, दोनों भाषाओं में वैध और सी ++ में अंत में अर्धविराम की आवश्यकता होती है या js में अर्धविराम forsing नहीं की जरूरत है। ठीक:

while(0);

whileशरीर में आवश्यकतानुसार सेमीकॉलोन को छोड़ना असंभव है ।

तो इस समय कार्यक्रम है:

void eval(bool="main=function(){alert('Hi from Javascript!')};puts=function(s){s=='Hi from C++!'?bool:nope};int=0");int
main()
{
puts("Hi from C++!");while(0);
}

सी ++ ओर से:

2 समस्याएं हैं: evalकोई भी नाम हो सकता है और सभी js कोड को बदला जा सकता है।

मैं कुछ ही दिनों में उन्हें ठीक करने की कोशिश करेंगे।


2

सीजेएम + गोल्फस्क्रिप्ट

ठीक है, यह कुछ हद तक उबाऊ है, लेकिन यह एक शुरुआत है।

1,

दोनों भाषाओं में "0" प्रिंट। इसके 1कारण त्रुटि को दूर करने के ,बजाय प्रिंट "1" को हटा दिया जाता है।

उसी के साथ किया जा सकता है 1)या 1(। कई विकल्प हैं।

(हां, मुझे पता है कि यह कोड-गोल्फ नहीं है)


2

C और C ++

#include <stdio.h>
int main() { puts("Hello!"); return 0; }

C और C ++ अलग-अलग भाषाएँ हैं जो लगभग एक-दूसरे के साथ संगत हैं - आप जो सुन सकते हैं उसके विपरीत C ++ सी का सुपरसेट नहीं है। कुछ मतभेदों के लिए http://en.wikipedia.org/wiki/Compatibility_of_C_and_C_2_2%2B देखें। । ऊपर दिया गया उदाहरण मुहावरेदार C ++ नहीं है, लेकिन यह काम करता है और C और C ++ दोनों में समान उत्पादन करता है।


आप 0सी
डेनिस

@ C89 में डेनिस नहीं।
गिलेस एसओ- बुराई को रोकें '

@ गिल्स: यदि मुख्य फ़ंक्शन एक रिटर्न निष्पादित करता है जो कोई मूल्य निर्दिष्ट नहीं करता है, तो मेजबान वातावरण में लौटाए गए समाप्ति की स्थिति अपरिभाषित है। ( C89 मसौदा - 2.1.2.2 होस्ट किया गया वातावरण ) यह कार्यक्रम अवैध नहीं है और न ही वह अपने उत्पादन को बदलने करता है, इसलिए इस सवाल के प्रयोजनों के लिए, 0हटाया जा सकता है।
डेनिस

@ मुझे लगता है कि एक अनिर्दिष्ट निकास कोड इस प्रश्न के नियमों के अनुसार कार्यक्रम को अमान्य बनाता है। यदि ऐसा नहीं होता है, तो यह सुनिश्चित करें कि एक C89 कार्यान्वयन जहाँ यह प्रोग्राम नॉनज़ेरो एग्जिट कोड लौटाता है, जैसे कि gcc -ansix86 (या कई अन्य आर्किटेक्चर): क्या होता है कि putsरजिस्टर में समाप्त होने का रिटर्न मान जहाँ रनटाइम मान को पढ़ता है mainसमारोह से लौटने के लिए )।
गिल्स एसओ- बुराई को रोकें '

@ गिल्स: नियम 3 की मेरी व्याख्या यह है कि कंपाइलर को 0 वापस करना चाहिए, प्रोग्राम को नहीं।
डेनिस

2

JavaScipt, Lua, R और Python 3 - 24 बाइट्स

कुछ अन्य भाषाओं पर काम कर सकता हूं, बाद में परीक्षण करूंगा।

alert=print;alert(1)

जावास्क्रिप्ट फ़ायरफ़ॉक्स के कंसोल और अन्य भाषाओं पर परीक्षण किया गया था यहाँ , यहाँ और यहाँ


1

पर्ल + रूबी + पायथन

मुझे लगता है कि PHP में इस अर्धविराम की आवश्यकता होगी, तो आप के साथ चल रहे हैं -R

print "Hello World!"

यह अच्छी तरह से अजगर में काम करता है।
अगस्त

1
इसके अलावा लुआ के साथ काम करता है।
Trebuchette

1

बैश + श + zsh + ksh, 4 बाइट:

echo

वास्तव में सरल और संतुष्ट हर नियम:

  1. भाषाओं में से प्रत्येक में एक नई पंक्ति आउटपुट।
  2. आउटपुट वर्तमान में है नहीं भाषाओं के बीच किसी भी तरह से बदलती हैं।
  3. भाषाओं में से किसी में एक त्रुटि का उत्पादन नहीं करता ...
  4. ... को छोड़कर जब वर्णों के किसी भी निकाल दिए जाते हैं / बदल दिया है।

0

बैश + श + zsh + ksh + विंडोज बैच, 4 बाइट्स:

echo

वास्तव में सरल और संतुष्ट हर नियम:

एक नई पंक्ति जो भाषाओं में से प्रत्येक में बदलता नहीं है (लेकिन Windows बैच है, जो आउटपुट आउटपुट ECHO is on, आप का उपयोग भाषा पर), नहीं त्रुटि है, जब कोई पत्र निकालने या बदलने को छोड़कर करता है।


1
: आपका जवाब यह एक लगभग समान प्रतीत होता है codegolf.stackexchange.com/a/100654/65326
ऊरीएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.