एक बहुभाषाविद लिखें जो भाषा के नाम को प्रिंट करता है


65

आपका कार्य एक ऐसा कार्यक्रम लिखना है जो जितनी संभव हो उतनी भाषाओं में निष्पादित होता है, जितने कम अक्षर आप कर सकते हैं। तुच्छ समाधानों से बचने के लिए, प्रोग्राम को उस भाषा का नाम प्रिंट करना होगा जिसे वह चलाया गया था।

स्कोरिंग

आपके प्रोग्राम को कम से कम 5 भाषाओं में काम करना होगा। एक कार्यक्रम का स्कोर इस प्रकार है:

(number of languages)1.5 / (length of program)

पहले वैध जवाब के बाद 10 दिनों से अधिक नहीं, उच्चतम स्कोर जीतता है।


क्या print()पर्ल, पायथन, पीएचपी, प्रोसेसिंग और आर के लिए एक समाधान का उपयोग करना तुच्छ माना जाएगा या यह स्वीकार्य है?
रोब

3
एक इसके साथ कोई समस्या नहीं देख सकता है। कठिनाई प्रति भाषा प्रिंट के इनपुट को स्विच करना होगा।
mjgpy3

मुझे भाषाओं की संख्या के लिए अधिक वजन देना चाहिए था ... ऐसा लगता है कि वास्तव में 5 सबसे इष्टतम है। मुझे आश्चर्य है कि विजेता की प्रविष्टि में कितनी भाषाएँ होती अगर स्कोर होताn * n / length
vsz

मैं यह भी सुझाव देने जा रहा था। प्रदान किए गए उत्तरों के आधार पर, मुझे विश्वास नहीं होता कि मैंने आपके प्रश्न की ठीक से व्याख्या की है।
रोब

जवाबों:


39

बैश, सी, सी ++, ओबज-सी, ओब्ज-सी ++, पर्ल, पीएचपी, रूबी, 183 वर्ण

स्कोर ~ 0.1236

सी और सी जैसे कोड के लिए मैं @ बच्चे-खरगोश पर कर्ज चुकाता हूं। अन्य लोग इस मान्यता से प्रेरित होते हैं कि कई भाषाओं में एक evalकथन है जो अनजाने में वाक्य रचना को स्वीकार कर लेगा।

मानक आउटपुट के लिए भाषा का नाम आउटपुट। कभी-कभी मानक त्रुटि पर बहुत सारे त्रुटि संदेश उत्पन्न होते हैं, इसलिए 2>/dev/nullजैसे ही आप उन्हें चलाते हैं, उन्हें दबा दें।

#if 0
'PHP<?/*';eval "print\$=?'Perl':'Ruby';echo Bash";exit
__END__
#endif
#include <stdio.h>
main(){puts(
#ifdef __OBJC__
"obj-"
#endif
"C"
#ifdef __cplusplus
"++"
#endif
);}//*/?>'

Php सॉल्यूशन आउटपुट 'PHP'(सिंगल कोट्स सहित), जो नियमों को थोड़ा-थोड़ा झुका सकता है।

अंतिम संपादन: अंतर्दृष्टि है कि से 12 वर्ण मुंडा $=है falseरूबी में, 60पर्ल में, और print$=?...लगभग निश्चित रूप से बैश में कोई त्रुटि है। पर्ल / रूबी / बैश परीक्षण की अंतर्दृष्टि से 7 अधिक मुंडा अब एक एकल स्पष्ट बयान में जा सकते हैं।

यदि नियम अधिक झुकने को सहन कर सकते हैं, तो मैं यह 8 भाषा, 43 चरित्र समाधान प्रस्तुत करता हूं (स्कोर 0.5262)

print("phperluarscriptrubypythoncatebg13");

जिसके लिए उत्पादन के लिए दुभाषिया का नाम शामिल php, perl, lua, rscript, ruby, python, cat, और rot13


1
TI-Basic अंतिम का समर्थन करता है; बस 6 अक्षर print("phperluarscriptrubypythontibasicatebg13");
जोड़िए

1
@Timtech नहीं, TI-Basic Dispया Output(या text(टोकन का उपयोग करता है , कोई print(आदेश नहीं है । और एक स्ट्रिंग के साथ अन्यथा वास्तविक-मूल्यवान अभिव्यक्ति के भाग में परिणाम होता है ERR:INVALID SYNTAX, न कि स्ट्रिंग का प्रदर्शन (रिटर्न मान के रूप में भी नहीं)। (इसके अलावा, ;टीआई-बेसिक उपयोग नहीं है :)
AJMansfield

@AJMansfield बहुत सच है, मैं कैसे भूल सकता है:?
तैमूर

12
आप के echo Bashसाथ बदल सकते हैं ps -ocomm= -p$$? यह कम से कम बैश, zsh, ksh, csh और tsh के लिए शेल के नाम का उत्पादन करेगा, शायद अन्य।
डिजिटल ट्रॉमा

19

सी, सी ++, बीएफ, बीएचएस और रूबी; 280 चरस

स्कोर लियोन के बारे में है

#include "stdio.h"
#define s "C"
#ifdef __cplusplus
#define s "C++"
#endif
#ifndef s
#"+++++++++[>++++++++++>+++++++++<<-]>>-.<++++.>-.++++++++.<----.>---.<+++++++.>---.++++++++.<<++++++++++.[-]"
if [ 1 == 2 ];then
puts "Ruby"
exit
fi
echo "BASH"
exit
end
#endif
main(){puts(s);}

ध्यान दें कि मैं लिनक्स सिस्टम का उपयोग कर रहा हूं।

कोड निम्न आदेशों के साथ चलाया जाता है या संकलित किया जाता है (फ़ाइल का नाम है test.c)

सी:

gcc test.c

जब साथ चलाया जाता है ./a.out, आउटपुट होता हैC

सी ++:

c++ test.c

जब साथ चलाया जाता है ./a.out, आउटपुट होता हैC++

दे घुमा के:

./test.c

आउटपुट: BASH

माणिक:

ruby test.c

आउटपुट: Ruby

BrainF ***:

निम्नलिखित का उपयोग करके सत्यापित:

आउटपुट: brainfuck

ध्यान दें कि यदि JS डीबगर का उपयोग किया जाता है, तो पहले दो माइनस संकेतों को हटाने की आवश्यकता होती है। उन्हें स्ट्रिंग शाब्दिक में प्लस संकेतों को ऑफसेट करने के लिए शामिल किया गया था "C++"। यह एक बहुत ही मजेदार प्रोजेक्ट था, मैं अधिक भाषाओं को जोड़ने पर काम कर रहा हूं।

बस आगे स्पष्टता जोड़ने के लिए, यहाँ मेरे दुभाषिया / संकलक के चश्मे हैं:

  • gcc संस्करण 4.6.3

  • माणिक 1.9.3p194 (2012-04-20 संशोधन 35410) [x86_64-linux]

  • GNU बैश, संस्करण 4.2.24 (1) -release (x86_64-pc-linux-gnu)

पक्षीय लेख

@ बेबी-खरगोश की चाल का उपयोग करके मैं 7 भाषाओं में निष्पादन योग्य होने के लिए अपने कोड का विस्तार करने में सक्षम था (उद्देश्य-सी और उद्देश्य-सी ++ जोड़ा जा रहा है)। यह मेरा समाधान नहीं है क्योंकि मैंने कुछ कॉपी किया था, लेकिन मुझे लगा कि मैं इसे दिखाऊंगा।

अपडेट 9.12 गेन-स्मालटॉक के साथ स्मॉलटॉक रन जोड़ा गया!

SmallTalk, C, C ++, Objective-C, Objective-C ++, BASH, BF, Ruby; 384 चार्ट (स्कोर: 0.059)

#if (a)
##(true) ifTrue: ['SmallTalk' printNl]
##(ObjectMemory quit)
#"+++++++++++[>++++++++++>+++++++++<<-]>>-.<++++.>-.++++++++.<----.>---.<+++++++.>---.++++++++.<<++++++++++.[-]"
if [ 1 == 2 ];then
puts 'Ruby'
exit
fi
echo 'BASH'
exit
end
=begin
#endif
#include "stdio.h"
main(){puts(
#ifdef __OBJC__
"Objective-"
#endif
"C"
#ifdef __cplusplus
"++"
#endif
);}
#ifdef b
=end
#endif

उपरोक्त कोड में आपको उद्देश्य-सी, ओबज-सी ++, सी और सी ++ के लिए लैंगगेज के नाम का उत्पादन करने के लिए फ़ाइल का नाम बदलना होगा।


यदि आप आउटपुट करते हैं तो क्या यह कम होगा brainf***?
भीड़

हाँ, यह मेरा मानना ​​है।
mjgpy3

आपको if [ 1 = 2 ]इसके बजाय का उपयोग करना चाहिए if [ 1 == 2 ], क्योंकि हैशबैंग के बिना स्क्रिप्ट श द्वारा निष्पादित की जाती है, न कि बैश। श देब पर हो सकता है या मार नहीं सकता है, यह पानी का छींटा है।
nyuszika7h

12

bash, c, c ++, obj-c, obj-c ++; 134 वर्ण; स्कोर = 0.083

#if x
echo "bash"
exit
#endif
#include <stdio.h>
int main(){puts(
#ifdef __OBJC__
"obj-"
#endif
"c"
#ifdef __cplusplus
"++"
#endif
);}

फ़ाइल का नाम बदलें और चलाएं / संकलित करें:

  • श फाइल.श
  • cc फ़ाइल
  • cc file.cpp
  • cc फ़ाइल
  • cc file.mm

(जहाँ cc क्लैंग -421.10.42 है)


+1 चूंकि कई अन्य उत्क्रमित उत्तर आपके द्वारा प्रेरित थे।
केविन

11

लुआ, रूबी, विमल, सेड, बेफुंज (129 वर्ण; ~ 0.087 अंक)

सुनिश्चित नहीं है कि यह एक मायने रखता है - सीड-पार्ट शेबंग लाइन में एम्बेडेड है जो कि प्रतिबंध के आसपास प्राप्त करने के लिए यकीनन एक हैक है। इसका मतलब यह भी है कि इसे एक निष्पादन योग्य के रूप में चलाया जाना चाहिए और सीधे साथ नहीं sed

मैं भाग्यशाली था कि अन्य सभी भाषाएं (sans Befunge) स्वचालित रूप से शेलबैंग लाइन को अनदेखा करती हैं (हालांकि जाहिरा तौर पर रूबी ने फ़ाइल को चलाने से इंकार कर दिया है यदि इसमें एक शेलबैंग लाइन है जिसमें स्ट्रिंग 'माणिक' नहीं है)।

#!sed sanava;s/.*/sed/;q;ruby
--"".to_i#>"egnufeB">:#,_@
if 0
then
if IO
then
puts"Ruby"
else
print"Lua"
end
else
echo"VimL"
end

नमूना उपयोग:

% lua tmp/glot.poly
Lua
% ruby tmp/glot.poly
Ruby
% ./tmp/glot.poly
sed
% cfunge tmp/glot.poly       # Requires Befunge-98
Befunge

:source tmp/glot.poly        # from vim
VimL                         # displayed as message

5
वाह, एक समाधान जिसमें
बजे

8

BF, बैश, बैच, C, vi (163 अक्षर; स्कोर 86 .0686)

( <ESC>ASCII कोड 27 के लिए खड़ा है।)

rem (){ ((0));};true /*
rem ;goto(){ rem;}
rem ivi<ESC>ZZ'++++++++[>NUL ++++++++<NUL -]>NUL ++.++++.*/;main(){puts("C");}/*'
goto a
echo Bash
exit
:a
echo Batch
rem */

मैंने एक बैच फ़ाइल के रूप में, COMMAND.COM के MS-DOS 6.22 संस्करण के साथ यह परीक्षण किया। डिफ़ॉल्ट रूप से, वह दुभाषिया आउटपुट के साथ सोर्स कोड की लाइनों को मिलाता है। ऐसा होने से रोकने के लिए, echo offबैच फ़ाइल चलाने से पहले निष्पादित करें ।

Vi कोड निष्पादित करने के लिए, जिसे मैंने केवल विम का उपयोग करके परीक्षण किया है, निम्नलिखित कमांड का उपयोग करें:

cat /dev/null > tmpfile && vi -s polyglot.sh tmpfile > /dev/null 2>&1 && cat tmpfile

1
आप touch tmpfileया के : > tmpfileबजाय का उपयोग कर सकते हैं cat /dev/null > tmpfile
nyuszika7h

5

बैश, zsh, ksh, csh, tsh, 15 chars, स्कोर 0.745

यह एक सा खिंचाव है क्योंकि वे सभी संबंधित भाषाएं हैं, लेकिन मतभेद हैं:

ps -ocomm= -p$$

डैश के बारे में क्या?
इलियट ए।

4

हर पायथन रिलीज, 18.37291 अंक

import sys
print('Python '+'.'.join(map(str,sys.version_info[:-2])))

तकनीकी रूप से मान्य है, अगर आप सभी अजगर संस्करणों को अलग-अलग भाषा मानते हैं। वर्तमान में 116 पायथन संस्करण हैं, जो मुझे लगता है कि मुझे लगभग 18.37291 का स्कोर देता है।

(हालांकि मैं समझता हूं कि यदि यह एक वैध उत्तर नहीं माना जाता है, तो यह सिर्फ मनोरंजन के लिए था)


आप अभी भी मेरे +1 को केवल मनोरंजन के लिए प्राप्त करते हैं।
१५

क्या संपूर्ण संस्करण संख्या व्यवहार्य है? (यह 4 बाइट्स नीचे गोल्फ करता है और संभव पायथन संस्करणों को बढ़ाता है।)
ए _

यह भी ठीक है? tio.run/##K6gsycjPM/7/…
A _

3

बैश, सी, गौक, पर्ल, vi (145 अक्षर; स्कोर) .077)

( <BS>ASCII कोड <ESC>के लिए खड़ा है। ASCII कोड 27 के लिए खड़ा है।)

#define echo//<BS><BS><BS>vi<ESC>ZZ
#define BEGIN A()
#define B\
{
echo Bash ;exit;
#define C\
}
BEGIN {printf(A=="A"?"Perl":"Gawk");exit;}
main(){puts("C");}

Vi कोड निष्पादित करने के लिए, जिसे मैंने केवल विम का उपयोग करके परीक्षण किया है, इस कमांड का उपयोग करें:

cat /dev/null > tmpfile && vi -s polyglot.sh tmpfile > /dev/null 2>&1 && cat tmpfile

3

यह भाषाओं का एक सस्ता चयन है, लेकिन यहाँ जाता है:

CoffeeScript, JScript, Mozilla Javascript () जावास्क्रिप्ट 1.3), ECMAScript संस्करण 5, ECMAScript संस्करण 3, 223 वर्ण, स्कोर 5 0.0501)

a="undefined"
x="ECMAScript 3"
if(Array.prototype.map)
 x="ECMAScript 5"
if(typeof CoffeeScript!=a)
 x="CoffeeScript"
if(typeof uneval!=a)
 x="Mozilla JavaScript"
if(typeof WScript!=a)
 WScript.echo("JScript")
else alert(x)

5
जावास्क्रिप्ट, जावास्क्रिप्ट, जावास्क्रिप्ट () जावास्क्रिप्ट), जावास्क्रिप्ट, जावास्क्रिप्ट, 263 वर्ण, (स्कोर) 0)। आप इसे a="undefined";if(typeof arguments!=a)...else if(typeof WScript!=a...ओह ओह भी बना सकते हैं और आप इसे गॉल्फ़ करने की कोशिश भी कर सकते हैं ....
मठ चिलर

@tryingToGetProgrammingStandard सब कुछ एक लाइन पर रखना जैसे कि कॉफीस्क्रिप्ट (जो जावास्क्रिप्ट से एक अलग भाषा है) में मान्य वाक्यविन्यास नहीं है। अन्य तर्कपूर्ण हैं, लेकिन चूंकि यह निर्दिष्ट नहीं किया गया था कि भाषाएं कितनी अलग हैं, इसलिए मुझे लगता है कि अलग-अलग कार्यान्वयन के अलग-अलग निर्दिष्ट व्यवहार हैं, उन्हें अलग-अलग व्यवहार करने की अनुमति देता है।
पीटर ओल्सन

मैं भी एक बहु-पंक्ति टिप्पणी नहीं लिख सकता, केवल गोल्फ जो आपने उपयोग किया है लगता है कि बाहर निकल रहा है {/ }/ ;... aपुन: उपयोग से बचने के लिए विचार का उपयोग करना है "undefined", आप भी कर सकते हैं b=alertऔर फिर b("this is also still just javascript")। वैसे भी The golden rule of CoffeeScript is: "It's just JavaScript"( coffeescript.org से ), आप छठी भाषा जोड़ने के लिए कुछ jquery का भी उपयोग कर सकते हैं ....
गणित चिलर

1
@tryingToGetProgrammingStrect जोड़ना jQuery बेतुका होगा, क्योंकि jQuery एक पुस्तकालय है, भाषा नहीं। कॉफीस्क्रिप्ट निश्चित रूप से ईसीएमएस्क्रिप्ट के समान भाषा नहीं है। भाषा की परिभाषा एक परिमित वर्णमाला पर परिमित तारों का एक समूह है। मान्य कॉफीस्क्रिप्ट कार्यक्रमों का प्रतिनिधित्व करने वाले तार का सेट वैध ईसीएमएस्क्रिप्ट का प्रतिनिधित्व करने वाले तार के सेट के समान नहीं है।
पीटर ओल्सन

1
क्या आप इसके [].mapबजाय कर सकते हैं Array.prototype.map?
ETHproductions

3

जावा, लिस्प, व्हॉट्सएप, इंटरकाल, पीएचपी, बेफुंज -98; स्कोर = .0189

यह मूल रूप से इस का जवाब था ।

 ;\\0"egnufeB">:#,_@SSSTTTSTTTL
;TL
;SSSSSTTSTSSSL
;TL
;SSSSSTTSTSSTL
;TL
;SSSSSTSTSTSSL
;TL
;SSSSSTTSSTSTL
;TL
;SSSSSTSTSSTTL
;TL
;SSSSSTTTSSSSL
;TL
;SSSSSTTSSSSTL
;TL
;SSSSSTTSSSTTL
;TL
;SSSSSTTSSTSTL
;SSL
;L
;L
;L
;public class H{ public static void main(String []a){System.out.println("JAVA");}}
;/*
(print "LISP")
;*/
;//<?php
; echo "PHP"
;//?>
;/*
#|
DO ,1 <- #8
DO ,1 SUB #1 <- #110
DO ,1 SUB #2 <- #32
DO ,1 SUB #3 <- #72
DO ,1 SUB #4 <- #136
DO ,1 SUB #5 <- #88
DO ,1 SUB #6 <- #136
PLEASE DO ,1 SUB #7 <- #64
DO ,1 SUB #8 <- #80
PLEASE READ OUT ,1
PLEASE NOTE |#
;*/
;// PLEASE GIVE UP

यह जावा में काम नहीं करेगा; हर लाइन जब तक public class...एक संकलक समस्या का कारण होगा।
Ypnypn

दिलचस्प है ... मैं इसे एक संकलक में परीक्षण करना और इसे काम करना याद रखता हूं ... या शायद मेरी याददाश्त मुझे विफल कर देती है ...
जुआन सेबेस्टियन लोज़ानो

@Ypnypn याद रखें कि "T" एक टैब है, "S" एक स्पेस है, और "L" व्हाइट-स्पेस में एक लाइन फीड है, यही कारण है कि यह कंपाइलर एरर का कारण नहीं बनता है।
जुआन सेबेस्टियन लोज़ानो

ओह, यह समझ आता है।
यपनीप

3

विंडोज बैच, TI-Basic, Golf-Basic 84 , Quomplex , और GTB 5 * 2/93 = 0.11

::¤Quomplex¤:"'*[]'":~"GTB":g;1:d`"GOLF-BASIC 84":g`1:"TI-BASIC":Lbl 1:End
echo Windows Batch

यह काम किस प्रकार करता है

विंडोज बैच सबसे आसान था, क्योंकि ::एक टिप्पणी शुरू होती है। लागू करने के लिए काफी सरल है।

d`"GOLF-BASIC 84":g`1TI- बेसिक लोअरकेस लेटर्स या बैकटिक्स को सपोर्ट नहीं करता है, जिससे यह स्टेटमेंट्स को छोड़ देता है , जो कि Golf-Basic evaulate करता है, मैसेज को प्रदर्शित करता है और लेबल 1 को फॉरवर्ड करता है, जहां यह तुरंत समाप्त हो जाता है। यह, अपने काम के प्रदर्शन के चरित्र के साथ GTB के लिए इसी तरह की है, ~। वैसे, बिना डिस्प्ले वाले तार को अंदर डाला जाएगा Ans। यदि इसके बाद कोई प्रदर्शन कमांड नहीं हैं, Ansतो आउटपुट किया जाएगा (यहां मामला नहीं)।

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

प्रोग्रामिंग सिंटैक्स की महारत

:"'*[]'"

प्रतिभाशाली। Quomplex अनदेखा करता है :और ले जाता है "'और '"तार के रूप में, यह लूप ( []) में अनंत में स्टैक और पेरिश को आउटपुट करने के लिए छोड़ देता है । इस बीच, गोल्फ-बेसिक और टीआई-बेसिक पूरे "'*[]'"को एक स्ट्रिंग के रूप में लेते हैं , क्योंकि 'एक गणितीय ऑपरेटर है, न कि एक स्ट्रिंग ऑपरेटर।


सख्ती से बोलना, :एक बैच फ़ाइल में एक लेबल को इंगित करता है, एक टिप्पणी नहीं। यह सच है कि यह अपने आप में कुछ भी निष्पादित नहीं करता है, हालांकि।
मार्क

@ मर्क ट्रू, लेकिन है ::(अभी भी एक लेबल हालांकि)। मैं इसके बजाय इसका उपयोग करना चाहता हूँ REM, खासकर जब से यह TI-Basic में आवश्यक है।
टिमटेक

सही - मुझे सिर्फ पांडित्य हो रहा था। इसके अलावा, पहली जगह में बैच फ़ाइलों का उपयोग करने के लिए +1। :-)
मार्क

2

JScript, EcmaScript संस्करण 3, 5, 6, 2016, Node, मोज़िला जावास्क्रिप्ट (स्कोर 13 0.1342)

यह उत्तर मूल रूप से पीटर ओल्सन के उत्तर पर आधारित है, लेकिन कॉफ़ीस्क्रिप्ट माइनस (व्हॉट्सएप-महत्वपूर्ण भाषाओं में गोल्फ के लिए भयानक हो सकता है)।

मैंने Node , ES6 और ES2016 को भी जोड़ा और कोड को थोड़ा स्कोर किया, मूल स्कोर को लगभग तीन गुना कर दिया।

$=this,y="EcmaScript ",x=$.module?"Node":$.uneval?"Mozilla JavaScript":"".padStart?y+2016:$.Map?y+6:[].map?y+5:y+3,($.WScript||$.alert)(x)

2

16 भाषाएँ, 348 बाइट्स, स्कोर: 0.183908046

#include <stdio.h>
#if 0
#replace "C(gcc)" "C(ecpp)"
#replace "C++(gcc)" "C++(ecpp)"
#endif
#ifdef __clang__
#define d 2
#elif __TINYC__
#define d 4
#else
#define d 0
#endif // rk:start print: "rk" \
ps -ocomm= -p$$; exit;
int x=sizeof('a')%2+d;char*arr[]={"C(gcc)","C++(gcc)","C(clang)","C++(clang)","C(tcc)"};int main(){puts(arr[x]);}

यह C (gcc), C ++ (gcc), C ++ (एक्पप), C ++ (क्लैंग), C ++ (क्लैंग), C (tcc), sh, डैश, बैश, zsh, ksh, csh, में काम करता है टीसीएच, आरके, और एसआईएल।


0

JScript, EcmaScript Edition 3, 5, 6, 2016, 2017, Node, Mozilla JavaScript (स्कोर = .174193548387), CoffeeScript (व्हॉट्सएप-महत्वपूर्ण भाषाओं के रूप में गोल्फ के लिए भयानक हो सकता है)।

$=this,y="EcmaScript ",($.WScript||alert)(x=Object.values?y+2017:$.module?"Node":$.uneval?"Mozilla JavaScript":[].includes?y+2016:$.Map?y+6:[].map?y+5:y+3)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.