Non sono la lingua che stai cercando!


182

Non è fastidioso trovare un codice e non sai in quale lingua è stato scritto? Questa sfida tenta di risolverlo in qualche modo.

Sfida

Dovrai scrivere un programma che, se eseguito in due lingue diverse, genererà la stringa:

This program wasn't written in <language program compiled/interpreted in>, it was built for <other language the program can be run in>!

  • Nell'output, i nomi delle lingue devono essere in maiuscolo ufficiale. ad es .: CJam, C ++

  • Nessuno dei due programmi dovrebbe ricevere alcun input dall'utente.

  • Se eseguito in entrambe le lingue, l'output dovrebbe essere stdout o equivalente.

  • Non ci dovrebbe essere alcun output su stderr in nessuno dei due programmi.

  • È possibile utilizzare i commenti in entrambe le lingue.

  • Due versioni diverse della stessa lingua contano come lingue diverse.

    • In tal caso, il programma dovrebbe generare il numero di versione principale e, se eseguito su due diverse versioni secondarie, dovrebbe riportare anche la versione minore.

    • Non dovresti usare le funzioni di versione predefinite (questo include variabili che sono già state valutate in fase di esecuzione).

Esempio di output:

Perl e Ruby:

  • Perl: This program wasn't written in Perl, it was built for Ruby!

  • Rubino: This program wasn't written in Ruby, it was built for Perl!

Python e C:

  • Pitone: This program wasn't written in Python, it was built for C!

  • C: This program wasn't written in C, it was built for Python!

Python 2 e Python 3:

  • Python 2: This program wasn't written in Python 2, it was built for Python 3!

  • Python 3: This program wasn't written in Python 3, it was built for Python 2!

Python 2.4 e Python 2.7:

  • Python 2.4: This program wasn't written in Python 2.4, it was built for Python 2.7!

  • Python 2.7: This program wasn't written in Python 2.7, it was built for Python 2.4!

Questo è il codice golf, quindi vince il codice più breve in byte.


2
"Due versioni diverse della stessa lingua contano come lingue diverse." Quindi, l'inganno come con C pre e gli ultimi 99 commenti è valido? facile ^^
Zaibis,

1
Aggiunto, sembra paradossale ma si adatta alle tue regole.
Zaibis,

1
Nessuno sta facendo un poliglotta Whitespace / Python?
Non che Charles, il

non importa. Ho visto l'implementazione del 23
Non che Charles il

Fare affidamento sul programma da eseguire con un determinato interprete viene considerato come input? cioè accendere argv[0]?
gatto,

Risposte:


86

Foo / CJam, 70 byte

"This program wasn't written in ""Foo"", it was built for ""CJam"\@"!"

In Foo, come molti hanno scoperto, stampa tutto tra virgolette doppie e ignora la maggior parte degli altri personaggi o fa qualcosa che non influenza l'output nella maggior parte dei casi. In breve, \@non fa nulla e le stringhe sono tutte stampate così come sono.

In CJam, \scambia i primi due elementi e @sposta il terzo elemento in alto, che dispone le stringhe nell'ordine giusto. E al termine del programma, tutto ciò che rimane nella pila viene automaticamente stampato.


7
E solo per divertimento, c'è una soluzione simile a 75 byte per Fission / CJam:R"This program wasn't written in ""Fission"", it was built for ""CJam"\@'!O
Martin Ender

3
Bello. Ho avuto "This program wasn't written in Clip, it was built for CJam!"3{4-_36+e\}/per Clip / CJam.
Dennis,

5
Sono entrato in questo thread per pubblicare una soluzione Foo, avrei dovuto rendermi conto che ormai tutti sanno quanto sia facile scrivere un poliglotta Foo.
histocrat,

Esiste un collegamento alle specifiche del linguaggio di programmazione Foo?
solo

1
@ErikE Aggiunte alcune spiegazioni.
jimmy23013,

140

C89 / C99, 171 152 136 114 111 107 105 byte

Grazie a @Hurkyls, @Qwertiys, @ jimmy23013 e @MD XF per i tuoi suggerimenti.

versione golfizzata:

c;main(){c=-4.5//**/
-4.5;printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);}

versione non golfata:

c;

main()
{
    c = -4.5//**/
    -4.5;
    printf("This program wasn't written in C%d, it was built for C%d!",90-c,98+c);
}

Piccola descrizione:

Le versioni C precedenti C99 avevano appena il commento multilinea come questo:

/*foo*/

con C99 è stato introdotto il commento a riga singola. come questo:

//foo

quindi se compili una linea come questa:

c =-4.5//**/
-4.5;

il codice relativo alla compilazione per il compilatore c99 sarebbe:

c = -4.5 -4.5;

mentre il codice rilevante per un compilatore c89 sarebbe:

(poiché il primo /non fa parte di un commento e quindi da trattare come operatore)

c = -4.5 / -4.5;

10
+1 per una risposta meravigliosa. Un po 'di spiegazione per chi non ha familiarità con C sarebbe carino però.
ace_HongKongIndipendenza

4
@ace Credo che questo si basi su commenti in stile C99. Nella quarta riga, notare il //**/. In C89, questo è l'operatore di divisione seguito da un commento vuoto. In C99, //inizia un commento a riga singola, quindi il resto della riga è vuoto. Pertanto, in C89, diventa (90-(-4.5/-4.5)), che è 89, mentre in C99, diventa (90-(-4.5-4.5)), che è 99.
kirbyfan64sos

14
Per salvare alcuni byte, utilizzare 188-cinvece di c==99?89:99.

1
Non penso che tu abbia bisogno dello spazio e della parentesi esterna con il compito.
PurkkaKoodari,


88

JavaScript / Ruby, 170 byte

Potrebbe essere solo 2.0, non sembra funzionare almeno in 2.1.5 ... Modifica: Aggiornamenti secondo i consigli di @Jordan, si spera che ora funzionino in alcune altre versioni!

a='1';c=console=console||eval('def c.log s;$><<s end;c');c.log("This program wasn't written in "+(d=['JavaScript','Ruby'])[b= ~(a=~/1/)]+', it was built for '+d[b+1]+'!')

Abusi l' ~operatore a che Ruby tratteranno =~come una corrispondenza regex ritorno alla posizione della prima corrispondenza nella stringa ( 0), ma tratterà JavaScript come = ~/1/che è -1(dato che /1/viene convertito NaNper operazioni numeriche, che ha 0valore).


Questa risposta non funziona per me in Ruby 2.1.5. Ottengo:NoMethodError: undefined method `log' for :log:Symbol
EMBLEMA

@EMBLEM Il mio test è stato eseguito su Ruby 2.0 integrato in OS X, non ho provato nulla oltre a quello, ma aggiungerò sicuramente un commento che indica che potrebbe essere rotto in un'altra versione!
Dom Hastings,

Nelle versioni più recenti di Ruby, una definizione del metodo restituisce il nome del metodo come simbolo, quindi il tuo evalsta tornando :log. Penso che potresti risolverlo mettendo ;cdopo end. Il =~/ = ~trucco è fantastico, però!
Giordania,

Potresti anche salvare. Alcuni byte usando $><<sanziché puts se usando le virgolette doppie in modo da poter inserire la barra rovesciata wasn\'t.
Giordania,

@Jordan Grazie! Non sono sicuro di come non abbia individuato la rimozione delle \'virgolette doppie, ma $><<significa che posso applicare la correzione che hai citato e mantenere lo stesso conteggio dei byte!
Dom Hastings,

82

Python 2 / Python 3, 92

Utilizza il controllo di versione "standard" di Python (intero o divisione float).

print("This program wasn't written in Python %d, it was built for Python %d!"%(3/2*2,4-3/2))

3
Di questo si parlava nella sandbox e il consenso era di consentire questo genere di cose
Blue

14
@flawr Sarebbe permesso a Python e Cobra? ;)
Beta Decay

7
@flawr Python prende il nome dalla commedia ~~ group ~~ gods, Monty Python.
Mutantoe,

@Mutantoe Ti potrebbe sembrare che "Monty" non essendo il nome di un animale, il gioco di parole non funzionerebbe.
Pierre Arlaud,

57

Pesca / > <> 233 217 byte

v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC
\   "This program wasn't written in ""><>"  ", it was built for Fishing!"
>r!`ol?!;32.                         Fishing                     ><>!`N

La pesca è una lingua basata su un pescatore che va in giro a pescare. Per creare un programma in questa lingua che deve prima definire un dock su cui si aggira. Il dock fornisce solo il flusso di controllo a un programma. Il dock in questo programma è:

v++C-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC+CCCCCCC-CCCCCCCCCCCCCCCCCCC+CCCCCC

Ogni volta che Cviene trovato il comando, il pescatore lancia la sua linea per catturare un'istruzione. Le istruzioni +e -diminuiscono e aumentano rispettivamente la lunghezza della sua linea. vcambia la sua direzione di lancio verso il basso. I pesci che cattura in questo programma sono:

`This program wasn't written in Fishing, it was built for ><>!`N

> <> è una lingua basata su un pesce che si muove attraverso l'acqua. Il vcomando avvia il pesce che si sposta verso il basso, dove viene quindi riflesso a destra con il \comando. Tutto tra virgolette viene inserito nello stack. Dopo che la corda viene spinta sulla pila, il pesce si avvolge dall'altra parte dove viene riflesso verso il basso \. Quindi stampa il contenuto dello stack con:

>r!`ol?!;32.

È possibile ridurre il codice di 13 byte inserendo il ciclo di stampa per> <> nello spazio bianco sulla terza riga (che non credo interferirà con la parte di pesca, anche se non conosco quella lingua). Non sono sicuro di come questo commento gestirà l'intero codice, quindi ecco un link hastebin: hastebin.com/quqinozizi (potrei aver incasinato la spaziatura sulla terza riga ma penso che tutto sia allineato correttamente).
Cole

@Cole Funziona. In realtà il tuo suggerimento rimuove effettivamente 16 caratteri.
TheNumberOne

14
Pesce e poliglotta da pesca ... forse il primo del suo genere!
Mark K Cowan,

è così divertente cosa!
Data del

55

23 / Malbolge, 5688 byte

                    bCBA@?>=<;:987
                                                                                        6543210/.-,+*)
                                                                                          ('&%$#"!~}|{zy
                                                                                               xwvutsrqponmlk
                                                                                                  jihgfedcba`_^]
                                                                                     \[ZYXWVUTSRQPO
                                                                                               NMLKJIHGFEDCBA
                                                                                    @?>=<;:9y76543
                                                                210/(L,l*)(!E}
                   |B"!~}|{zyxwvu
                                                                                                     tsrqponmlkjiha
                                                                                                  fed]#a`_^]?zZY
                                                                                         XWVUTSRQ3ONMLK
                   JIHGFEDCBA:^>=
                                                                                                       <;:98705.R21q/
                                                                                               .-,+*#G'&%${"!
                                                                                            x>|{zyxwYutm3k
                                                                                                        ponmlkjihg`&^c
                                                                                     ba`_^]\[ZYXWVO
                   sSRQPONMLEi,HG
                                                                                                      FEDCBA@?>=6Z:9
                                                                                    y76543210/.-,+
                                                                                                          *)('&%$#"y?w|u
                   ;sxwvutm3qSonm
                                                                                                       fkjiha'edcba`_
                                                                                            ^]\[ZYXWVUTSRQ
                   PONM/EiIHGFEDC
                               BA@?>7[;:987w5
                                      432+O/o-,%I)('
                                     &}$#z@~}|{zsxw
                   vutsrqponmlkji
                                                                                                 ha'&dFba`_^]\U
                                                                                            yYXWVUTMRQPONM
                   LKDhH*F?DCBA@?
                                                                                                 8\<;:98765432r
                                                                                        0/.-&J*)('&f$#
                                                                                                       "!~}|{zyxwvuts
                                                                                                       rqj0nmOkjihaf_
                                                                                            %cE[!_^]\[=SwW
                                                                                                     VU7SLpPONMLEJI
                                                                                                          HAeEDC%A@?>=<;
                   :9876543210/.-
                                                                                                       ,+$H('&}${A!xw
                          ={]yxwvutsrk1o
                                                                                                 nmOejib(fedcE"
                                                                                                      `_^]?[ZYRvVUT6
                                                                                     RKo2HMLKJIHAe
                                                                                                           EDCBA@?>=<;:9
                    87w5432+O/.-,
                                                                                                 +*)('&%e#"y?w
                                                                                     |{zs9wvun4rqp
                                                                                                      onmlNjib(fedc
                                                                                           ba`_^]\[ZYXWV
                                                                                                   8TMqKPONMLKDh
                                                                                                      +GFEDCB;_?>=<
                                                                                                    ;:9y7654321*N
                    .-,+*)('&f|{A
                                                                                                       !~}|{]yxwvo5s
                                                                                             rqpinmlkjihg`
                                                                                            &dcbD`_^]\[Tx
                                                                        ;WVUTMRQJnN0F
                                                 KDhH*FEDC<A@?
     >=<5Y92765.R?

Si noti che il programma richiede un avanzamento riga finale. Nessuna riga contiene spazi vuoti finali, quindi copia / incolla dovrebbe funzionare bene.

Verifica

Per testare il codice Malbolge in questo interprete online , incollarlo nell'area Codice Malbolge e fare clic su Load/Reset, quindi Execute.

Per testare il codice 23 in questo interprete online , incollarlo nell'area Origine , premere Enterper inserire il trascinamento della riga finale, digitare 23nell'area Console (per passare dalla notazione 23.dezsy predefinita al rilevamento automatico) e fare clic Run Interpreter!.


20
Amico ... sembra che una bomba sia esplosa nel tuo codice!
Data del

8
o_0 come hai scritto il codice Malbolge
Pavel


55

Lua / C - 182 164 byte

#if 0
print"This program wasn't written in Lua, it was built for C!"--[[
#endif
main(){printf("This program wasn't written in C, it was built for Lua!\n");}/*]]--*/

Sfrutta la funzionalità in cui Lua tratta un segno di hash sulla prima riga come un commento per consentire le trans di Unix. Altrimenti avvolge i commenti dell'altra lingua nei propri commenti.

Per radere i byte, mi affido al comportamento implicito che emette solo avvisi in GCC e Clang: dichiarazione implicita di int per la definizione principale e implicita di printf.


3
Fatto molto abilmente!
Cack quack

2
Se la rimozione di "include <stdio.h>" è troppo estrema, ripristinerò la risposta.
benpop,

2
Perché non usare il //commento nella parte C? Salva 2 byte.
BrainStone,

54

JavaScript / Haskell, 158 byte 147 byte

Idea generale: intrufolarsi nella sintassi dei commenti di ognuno nell'altra.

In una riga:

u="This program wasn't written in ";v=", it was built for ";j="JavaScript";h="Haskell";{-console.log(u+j+v+h+"!")}//-}main=putStrLn$u++h++v++j++"!"

Che aspetto ha Haskell:

-- some variable definitions
u = "This program wasn't written in "
v = ", it was built for "
j = "JavaScript"
h = "Haskell"

-- a comment
{-console.log(u+j+v+h+"!")}//-}

-- the main method that does the dirty deed
main = putStrLn $ u ++ h ++ v ++ j ++ "!"

Che aspetto ha JavaScript:

/* variables can be declared without `var` */
u = "This program wasn't written in ";
v = ", it was built for ";
j = "JavaScript";
h = "Haskell";

/* hey look, an anonymous block! */
{ 
  /* we negate the `undefined` that comes out of console.log */
  -console.log(u+j+v+h+"!")
} 
/* there are two automatic semicolon insertions here:
   one before `}` and one before EOF. */

/* a one-line comment. */
//-}main=putStrLn$u++h++v++j++"!"

3
alertè più golfista.
wizzwizz4,

51

Brainfuck / Foo, 769 byte

-[--->+<]>-.[---->+++++<]>-.+.++++++++++.+[---->+<]>+++.[-->+++++++<]>.++.---.--------.+++++++++++.+++[->+++<]>++.++++++++++++.[->+++++<]>-.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.-----.[++>---<]>++.[->+++<]>-.[---->+<]>+++.--[->++++<]>-.-----.---------.+++++++++++..+++[->+++<]>.+++++++++.-[->+++++<]>-.-[--->++<]>-.+++++.-[->+++++<]>-.+[->++<]>.---[----->+<]>-.+++[->+++<]>++.++++++++.+++++.--------.-[--->+<]>--.+[->+++<]>+.++++++++.+++[----->++<]>.------------.-[--->++<]>-.+++++++++++.[---->+<]>+++.--[->++++<]>-.-[->+++<]>-.--[--->+<]>--.+[---->+<]>+++.[->+++<]>++.[--->+<]>-.------------.+++.++++++++.[---->+<]>+++.++[->+++<]>.+++++++++.+++.[-->+++++<]>+++.+++[->++<]>.+[--->+<]>++..[--->+<]>----."This program wasn't written in Foo, it was built for Brainfuck!"

Una risposta estremamente intricata e complessa ... o no.


21
Dannazione, non ancora tu Foo: D
Decadimento beta

5
Mi piace come pensi.
Pierre Arlaud,

13
Quando viene eseguito questo in Brainfuck, Brainfuck attenderà l'input a causa del ,testo nel finale. Credo che vada contro le regole di assegnazione.
Simon Forsberg,

1
@SimonForsberg è molto tempo, ma in un interprete come provarlo online, e la maggior parte degli altri penso, ,imposta la cella a 0, per EOF
Destructible Lemon

41

C / Python, 238 caratteri

Questo non stampa al 100% esattamente ciò che è richiesto, ma abbastanza vicino.
Un riavvio della mia carta di San Valentino .

#define def main(){0?
#define print printf(
#define return 0)));}
#define pass 0);

def main():
    print "This program wasn't written in ",
    pass
    print "Python",
    print ", it was built for ",
    print "C",
    return

main();

5
Cosa stampa se non è esatto?
Decadimento beta

4
Quella cosa nidificata è brillante ...
immibis,

4
Questo non è valido. C. Clang si lamenta defe :dopo def main(), e in realtà non si apre un corpo funzione per main. Hai davvero provato a compilare la tua risposta in C?
C0deH4cker

5
#define def main(){0?Manca la linea
kay

3
#define returnmi fa piangere un po '...
corsiKa

32

C / C ++, 136

#include<stdio.h>
int main(){
char*a="++",z=sizeof'c'/2;
printf("This program wasn't written in C%s, it was built for C%s!\n",a+z,a+2-z);
}

Newline aggiunti per la formattazione. Provalo in C o C ++ .


32
Cosa succede se mi trovo su una piattaforma in cui int è 2 byte? Dove posso trovare un compilatore C +?
immibis,

@immibis haha: P ma su una nota seria il trucco della struttura vuota potrebbe funzionare:struct{}s;z=2*sizeof s
GRC

31

Befunge / > <> , 141 138 134 133 130 byte

3 byte salvati grazie a @Cole .

Per l'esattezza, sto usando Befunge-98.

\"!><> rof tliub saw ti ,egnufeB"   >" rof nettirw t'nsaw margorp sih"'T>:#,_@'~~~~~~
>l?v"!egnufeB rof tliub saw ti ,><>"^
?!;>ol

Utilizzando i fatti che:

  • \ è un mirror in> <> e scambia in Befunge
  • 'string'è una stringa in> <> ed 'cè un carattere in Befunge

A meno che tu non ne abbia bisogno per il codice Befunge (cosa che non credo tu faccia), puoi radere 3 byte sostituendo la linea di fondo con?!;>ol
cole

23

PHP / MySQL, 147 byte

-- $argc;die("This program wasn't written in PHP, it was built for MySQL!");
SELECT("This program wasn't written in MySQL, it was built for PHP!");

17
Finalmente, quello che ho capito.
MikeTheLiar,

1
Dovresti riuscire a sbarazzarti delle parentesi della seconda riga, per due byte in meno:SELECT"This program wasn't written in MySQL, it was built for PHP!";
msh210

2
Ma ciò non funzionerà più in PHP - causerà un errore di analisi. SELECT "..." non è un'espressione PHP valida.
Razvan

22

Python 3 / > <> , 177 173 172 167 byte

Grazie a @mathmandan per aver rasato 5 byte!

Bene, questa è stata un'esperienza, e anche una prova. Qualsiasi suggerimento sul golf è il benvenuto, poiché è piuttosto lungo. Ho fatto del mio meglio per riutilizzare il testo, ma è stato abbastanza difficile.

Tecnicamente, sarebbe Python 3 che questo programma avrebbe prodotto (e potrei cambiarlo se non avessi soddisfatto le specifiche - ma nell'esempio è Pythonstato elencato l' output di Python / C ).

aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"                 #v   "><>"r~/
a=", it was built for "+v#\a
print(aa[-3::-1]+"Pytho" +"n"+a)
#  .4b;!?lor"!nohtyP r"~/

Provalo su un interprete> <> online e un interprete Python 3 (l' interprete > <> richiede di inserire il codice manualmente)

ritorna

This program wasn't written in ><>, it was built for Python!

in> <> e

This program wasn't written in Python, it was built for ><>!

in Python.

Spiegazione (Python)

Per il lato Python delle cose, è piuttosto semplice. Ecco il codice a cui teniamo (fondamentalmente il codice senza commenti, che sono indicati da a #in Python). Nota che in Python \è un carattere di escape quando usato nelle stringhe, quindi \"valuta "nella stringa.

aa=" ni nettirw t'nsaw margorp sihT\"\""
v="><>!"
a=", it was built for "+v
print(aa[-3::-1]+"Pytho" +"n"+a)

Ciò che ci interessa di più qui sono le operazioni eseguite sulla variabile aa:

aa[-3::-1]: reverses the string and chops off the quotation marks (thanks to @mathmandan)

L'istruzione print quindi valuta

"This program wasn't written in " + "Pytho" + "n" + ", it was built for ><>!"

Spiegazione (> <>)

Ora arriviamo alla parte più difficile. Ancora una volta, ecco il codice con i bit non necessari rimossi.

aa=" ni nettirw t'nsaw margorp sihT\"\
                          v   "><>"r~/
a=", it was built for "+v \a

   .4b;!?lor"!nohtyP r"~/

Linea 1:

aa=" ni nettirw t'nsaw margorp sihT\"\

aa=         pushes 1 onto the stack (evaluates 10==10, basically)
" ni ... \" pushes the first part plus a \ onto the stack.
\           deflects the pointer downwards

La pila in questo momento (se stampata): \This program wasn't written in

Linea 2:

Nota che la linea 2 inizia a /causa della posizione del puntatore dalla linea 1 e si sposta da destra a sinistra.

v   "><>"r~/

/     deflects the pointer leftwards
~r    pops the / off the stack and then reverses it
"><>" pushes ><> onto the stack
v     deflects the pointer downwards

La pila in questo momento: ><> ni nettirw t'nsaw margorp sihT

Linea 3:

Come la riga precedente, questa inizia da \, che è dove la riga 2 invia il puntatore. Si noti che poiché il puntatore si avvolge intorno alla linea quando raggiunge il primo a, scriverò la mia spiegazione in ordine di dove va il puntatore (e quindi cosa viene eseguito)

a=", it was built for "+v \a

\aa=       deflect and push 1 onto the stack
", i ... " push the string onto the stack
+v         sum the last two values pushed and deflect

La pila in questo momento ( xè il personaggio formato dall'aggiunta di "r" e uno spazio. - Non è il personaggio reale, solo un mio segnaposto):

xof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT

Linea 4:

Il puntatore continua semplicemente verso il basso, quindi questa linea non garantisce ulteriori spiegazioni.

Linea 5:

A partire da /e andando verso sinistra.

.4b;!?lor"!nohtyP r"~/

~"r Python!" pops x off and adds back r and a space
r            reverses the stack
o            pops and prints a character
l?!;         pushes the length of the stack and stops if it's 0
b4.          pushes 11 then 4 then moves to that location (where o is)

Lo stack in questo momento (l'output è invertito):

!nohtyP rof tliub saw ti ,><> ni nettirw t'nsaw margorp sihT

E quello dovrebbe essere per la spiegazione. Fammi sapere se c'è qualche incoerenza tra la spiegazione / codice o se ho fatto qualcosa di sbagliato; Ho analizzato il mio codice un po 'di più mentre ero nel mezzo della stesura della spiegazione, quindi avrei potuto mescolare frammenti di codice vecchio e nuovo.


Sarebbe sbagliato se dicessi che devi aggiungere il 3 perché non è Python 2. Va bene.
Blu

Se questo fosse solo Python, credo che si potrebbe sostituire aa[:-2][::-1]con aa[-3::-1]. In questo caso, ovviamente, ciò potrebbe interferire con la formattazione> <>, ma forse vale la pena considerare se non l'hai già fatto. In particolare, sono abbastanza sicuro che hai bisogno di uno spazio al di sotto della vriga precedente, ma sembra che print(aa[-3::-1]+"Pytho"si adatterebbe ai 24 caratteri sottostanti a=", it was built for "+e quindi potresti inserire uno spazio seguito da +"n"+a). Non sono sicuro che questo rompa qualcos'altro, ma se funziona risparmierà qualche byte.
Mathmandan,

@mathmandan Ottima idea, aggiornerò il mio codice e ti accrediterò.
Cole

Bel lavoro! Cordiali saluti, penso che questo avrebbe funzionato bene in Python 2, e in Python 2 è possibile salvare un byte facendo cadere parentesi nella dichiarazione stampa: print aa[-3::-1]+"Pytho" +"n"+a. Un'altra domanda però: nella versione> <>, cosa succede 1all'origine originariamente inserita nello stack?
Mathmandan,

@mathmandan Penso che l'interprete che ho usato non stampi il personaggio se non è valido o il personaggio stampato non lo mostra affatto. Sinceramente non sono sicuro al 100% del perché la stampa di quel personaggio non abbia importanza; L'ho scoperto per caso.
Cole

19

File batch .BAT / File batch .CMD, 194 185 byte

@ECHO OFF
SET a=BAT
SET b=CMD
CALL :F&&GOTO :C||GOTO :O
:C
SET a=CMD
SET b=BAT
:O
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF
:F
md;2>nul
SET v=1

Modifica: salvato 9 byte e corretto un errore mancante !grazie a DLosc

Sì, ci sono differenze tra i file BAT e CMD. Riferimento. In sostanza, CMD imposta il ERRORLEVELsu un SETcomando mentre la BAT non lo fa, il che significa che qui il ERRORLEVELset dal malformati mdcomando viene autorizzata dallaSET v=1 in una versione, ma non l'altro. Questo script si basa sull'esempio fornito da "Ritchie" nel thread di quel newsgroup.

Si noti che lo script abbreviato sopra presume ENABLEEXTENSIONSdi essere impostato ON(è di default su ogni piattaforma). Lo script espanso di seguito lo imposta esplicitamente, per garantire la corretta funzionalità. Senza quello, il SETcomando per CMD non consente tutte le estensioni e (su alcuni sistemi, forse) potrebbe non impostare ilERRORLEVEL appropriato.

Ampliato e osservato

@ECHO OFF
setlocal ENABLEEXTENSIONS

REM Call the :FUNC subroutine and branch based on the resulting errorlevel
CALL :FUNC&&GOTO :CMD||GOTO :BAT

REM Just in case. If we reach this, though, hoo-boy ...
GOTO :EOF

:BAT
REM We're a BAT file, so set variables and goto output
SET a=BAT
SET b=CMD
GOTO :OUTPUT

:CMD
REM We're a CMD file, so set variables and goto output
SET a=CMD
SET b=BAT
GOTO :OUTPUT

:OUTPUT
REM Print out the result, then go to end of file
ECHO This program wasn't written for %a% File, it was built for %b% File!
GOTO :EOF

:FUNC
REM Simple subroutine to set the ERRORLEVEL appropriately
md;2>nul
REM Right now, ERRORLEVEL on both CMD and BAT is 1
SET v=1
REM Right now, ERRORLEVEL on CMD is 0, but BAT is still 1

... c'è una differenza tra CMD e BAT?
Stan Strum,


16

CJam / GolfScript, 81 78 byte

"This program wasn't written in "o"GolfScript"", it was built for ""CJam"oo"!"

Versione originale a 81 byte:

"This program wasn't written in "["CJam"", it was built for ""GolfScript"]-1a%"!"

14

PHP / Perl, 98 96 byte

$a="HP";$b="erl";
//;$a=$b;$b=HP;
print"This code wasn't written in P$a, it was built for P$b!";

Non so se questo è barare o no, dal momento che per quanto posso dire, l'unico modo per eseguire PHP senza un <?tag di apertura è qualcosa di simile php -r $(cat codefile.php). Ma supporre che sia legale ... //è un commento di PHP, ma in Perl è una regex (che, in una dichiarazione da sola, non fa nulla). Il resto dovrebbe essere abbastanza autoesplicativo.

Modifica: ora usa una parola nuda nella parte solo Perl. Volevo usarli in primo luogo per entrambe le lingue, ma PHP mostra un avvertimento quando lo fai, contrariamente a "Non dovrebbe esserci output su stderr".


1
<?'>#';è una sintassi valida in entrambe le lingue.
primo

14

Ruby / Python, 105 caratteri

a=["Ruby","Python"];a.sort();print("This program wasn't written in "+a[0]+", it was built for "+a[1]+"!")

Questo è veramente buono! Mi piace soprattutto che non ci siano commenti utilizzati.
Styfle

14

JavaScript 1.8 / JavaScript 1.7, 89 byte

a=![].reduce;`This program wasn't written in JS 1.${8-a}, it was built for JS 1.${7+a}!`

Perché Array.prototype.reduce è nuovo in 1.8

EDIT: golfato 7 byte inizializzando direttamente ainvece di utilizzarereverse()

MODIFICARE: JavaScript può essere scritto comeJS , salvando 8 byte

MODIFICARE: Grazie Hedi per aver ricordato che posso risparmiare altri 3 byte se non uso la variabile bpiù

EDIT: golfato fuori 6 byte dal calcolo 7+ae8-a , a=1se è definita la riduzione (JS 1.8) e a=0se non è definita (JS 1.7)

MODIFICARE: Hedi ha golfato altri 6 byte suggerendo l'uso della stringa di template

EDIT: ETHproductions ha golfato 2 byte suggerendoa=!![].reduce; invece dia=[].reduce?1:0;

EDIT: no1xsyzy ha scartato un altro byte suggerendo di invertire il controllo booleano


Con "JS" anziché "JavaScript", utilizzare due volte "JS 1." nella tua stringa è più breve rispetto all'uso della variabile b.
Hedi,

È possibile utilizzare la stringa modello per renderla più breve: `Questo programma non è stato scritto in JS 1. $ {7 + a}, è stato creato per JS 1. $ {8 + a}!`
Hedi

2
Io penso che è possibile salvare due byte cambiando a=[].reduce?1:0;a a=!![].reduce;.
ETHproductions

@ETHproductions Grazie, ma non credo che funzionerebbe. Ho bisogno adi tenere il valore 1o 0non trueofalse
Mario Trucco

@ETHproductions scusa, hai ragione, ho provato e funziona. Grazie!
Mario Trucco,

13

SWI-Prolog 6 / SWI-Prolog 7, 156 byte

P='SWI-Prolog ',A=6,B=7,(is_list(""),N=A,M=B;N=B,M=A),atomic_list_concat(['This program wasn\'t written in ',P,N,', it was built for ',P,M,'!'],W),write(W).

Utilizza il fatto che le virgolette doppie ""sono codici stringa (ovvero elenco di codici carattere) nelle versioni SWI-Prolog precedenti alla 7 e che sono un tipo String appropriato nella versione 7. is_list("")sarà quindi falso nella versione 7 e vero nelle versioni precedenti.


12

BF / SPL, 5342 byte

Sono abbastanza sicuro che questo sia il primo poliglotta del linguaggio di programmazione Shakespeare su questo sito.

Probabilmente non vincerà alcun premio. Funziona inserendo il codice BF in titoli di act / scene / program. Il codice SPL utilizza punti esclamativi anziché punti, tranne alcuni casi. I programmi non dovrebbero ricevere input, quindi le virgole nelle dichiarazioni dei personaggi vengono "commentate" azzerando le celle e mettendo parentesi quadre attorno alle virgole. La stessa procedura si applica quando si nascondono le parentesi quadre attorno alle istruzioni enter / exeunt.

[-][.
Ford,.
Page,.
Act I:]+++++++++[>+++++++++<-]>+++.
Scene I:>[.
[Enter Ford and Page]
Ford:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad day and bad bad day!Speak thy mind!
Scene II:]<<++[>++++++++++<-]>.
Page:
You is sum of bad bad bad bad bad bad day and sum of bad bad bad bad bad day and bad bad bad day!Speak thy mind!
Scene III:+.
Page:
You is sum of thyself and day!Speak thy mind!
Scene IV:++++++++++.
Page:
You is sum of thyself and sum of bad bad bad day and bad day!Speak thy mind!
Scene V:>++++[>++++++++<-]>.
Ford:
You is fat fat fat fat fat cat!Speak thy mind!
Scene VI:[-<+>]<<---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene VII:++.
Page:
You is sum of thyself and fat cat!Speak thy mind!
Scene VIII:---.
Page:
You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene IX:--------.
Page:
You is sum of thyself and big big big pig!Speak thy mind!
Scene X:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XI:<++++[->----<]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XII:++++++++++++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and big big pig!Speak thy mind!
Scene XIII:>.
Ford:
Speak thy mind!
Scene XIV:<++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XV:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XVI:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XVII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XVIII:>+++++++.
Ford:
You is sum of thyself and sum of fat fat fat cat and pig!Speak thy mind!
Scene XIX:<++++++.
Page:
You is sum of thyself and sum of fat fat cat and fat cat!Speak thy mind!
Scene XX:>-------.
Ford:
You is sum of thyself and sum of big big big pig and cat!Speak thy mind!
Scene XXI:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXII:-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIII:---------.
Page:
You is sum of thyself and sum of big big big pig and pig!Speak thy mind!
Scene XXIV:+++++++++++.
Page:
You is sum of thyself and sum of cat and sum of fat cat and fat fat fat cat.Speak thy mind!Speak thy mind!
Scene XXV:<+++[>-----<-]>.
Page:
You is sum of thyself and sum of big big big big pig and cat!Speak thy mind!
Scene XXVI:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene XXVII:>.
Ford:
Speak thy mind!
Scene XXVIII:<-----.
Page:
You is sum of thyself and sum of big big pig and pig!Speak thy mind!
Scene XXIX:+++++.
Page:
You is sum of thyself and sum of fat fat cat and cat!Speak thy mind!
Scene XXX:>.
Ford:
Speak thy mind!
Scene XXXI:[->++<]>++.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat cat and cat!Speak thy mind!You is sum of thyself and sum of big pig and pig!Speak thy mind!
Scene XXXII:++++.
Page:
You is sum of thyself and big red hog!Speak thy mind!
Scene XXXIII:<+++++[>-----<-]>-.
Page:
You is sum of thyself and big big big big big pig!Speak thy mind!
Scene XXXIV:[-<+>]<------------.
Ford:
Speak thy mind!
Scene XXXV:<-----.
Page:
You is sum of thyself and sum of fat fat fat fat fat fat cat and sum of big pig and pig!Speak thy mind!
Scene XXXVI:+++++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XXXVII:>.
Ford:
Speak thy mind!
Scene XXXVIII:<+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XXXIX:<++++[->-----<]>--.
Page:
You is sum of thyself and sum of big big big big big pig and sum of fat fat fat cat and fat cat!Speak thy mind!
Scene XL:<++++[>++++<-]>++.
Page:
You is sum of thyself and sum of fat fat fat fat cat and fat cat!Speak thy mind!
Scene XLI:>.
Ford:
Speak thy mind!
Scene XLII:<<++++[>----<-]>-.
Page:
You is sum of thyself and sum of big big big big pig and pig!Speak thy mind!
Scene XLIII:<+++++[>++++<-]>-.
Page:
You is sum of thyself and sum of fat fat fat fat cat and sum of fat cat and cat!Speak thy mind!
Scene XLIV:------------.
Page:
You is sum of thyself and sum of big big big big pig and fat fat cat!Speak thy mind!
Scene XLV:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene XLVI:++++++++.
Page:
You is sum of thyself and fat fat fat cat!Speak thy mind!
Scene XLVII:>.
Ford:
Speak thy mind!
Scene XLVIII:<--------------.
Page:
You is sum of thyself and sum of big big big big pig and fat cat!Speak thy mind!
Scene XLIX:+++++++++.
Page:
You is sum of thyself and sum of fat fat fat cat and cat!Speak thy mind!
Scene L:+++.
Page:
You is sum of thyself and sum of fat cat and cat!Speak thy mind!
Scene LI:>.
Ford:
Speak thy mind!
Scene LII:>+++++++[<+++++++>-]<++.
Page:
You is sum of thyself and sum of big big big big big pig and big big big big pig!Speak thy mind!
Scene LIII:---.
Page:
You is sum of thyself and fat fat cat!Speak thy mind!
Scene LIV:----.
Ford:
You is sum of thyself and cat!Speak thy mind!
Scene LV:>+++++++[<------>-]<-.
Ford:
You is cat!
Scene LVI:>[.
[Exeunt]

Prova BF su https://repl.it/E8Hh/23 .

Il codice SPL è stato testato dal compilatore trovato qui: https://github.com/drsam94/Spl/ .


11

Ruby 1.8 / Ruby 1.9, 87

puts"This program wasn't written in Ruby 1.#{?9%49}, it was built for Ruby 1.#{?8%47}!"

In Ruby 1.8, ?9è il valore ASCII di "9", che è 8 modulo 49. In Ruby 1.9, è la stringa "9", ed %49è un'operazione di formattazione che non fa nulla poiché "9" non ha stringhe di formato in esso.


11

Python 2.7.9 / Python 2.7.10, 127 byte

Abbiamo pubblicato un paio di post che utilizzavano versioni secondarie, ma nessuno è passato al livello successivo ...

import types
n=len(dir(types))
print"This program wasn't written in Python 2.7.%d, it was made for Python 2.7.%d!"%(n%33,-n%52)

Provalo su Ideone (Python 2.7.10) e repl.it (tecnicamente Python 2.7.2, ma dovrebbe dare lo stesso risultato di 2.7.9).

Python 2.7.10, secondo il changelog :

Aggiunto un __all__al typesmodulo.

Questo è passato len(dir(types))da 42 a 43, dando una differenza numerica che possiamo sfruttare per generare l'output desiderato.


10

Python / QBasic, 160 142 byte

Testato con Python 3 e QBasic 1.1 . Non funzionerà in Python 2 senza aggiungere from __future__ import print_functionalla linea 4.

1# DEFSTR A-B
a = "QBasic"
b = "Python"
'';a,b=b,a;PRINT=print
PRINT ("This program wasn't written in " + a + ", it was built for " + b + "!")
  • In Python, 1#è l'espressione 1(no-op) seguita da un commento. In QBasic, è un numero di riga (con il suffisso type che lo contrassegna come a DOUBLE). L' DEFSTRistruzione dice a QBasic che tutte le variabili i cui nomi iniziano con Ao B(senza distinzione tra maiuscole e minuscole) sono variabili di stringa. In questo modo, possiamo chiamare le nostre variabili aeb invece di a$eb$ (che non funzionerebbe in Python).
  • In QBasic, 'inizia un commento. In Python ''è la stringa vuota (no-op). Quindi scambiamo i nomi delle lingue e definiamo un alias perprint funzione (poiché le parole chiave QBasic sono formattate automaticamente in maiuscolo).
  • Le parentesi sull'ultima riga non sono necessarie in QBasic, ma non fanno male a nessuno.

Se mi è permesso di disattivare l'autoformatter (che è un'opzione in QB64 , sebbene non nel QBasic originale), posso farlo scendere a 114 byte usando Python 2 :

1#DEFSTR A-B
a="QBasic"
b="Python"
'';a,b=b,a
print"This program wasn't written in "+a+", it was built for "+b+"!"

-3 byte: passa all'effettivo QB64.
CalculatorFeline

Autoformattazione.
Calcolatrice

QB64 / Python 2 è 131 byte! O Python 3 per 133 byte.
CalculatorFeline

9

Perl / Ruby, 129 byte

0&&eval('def sort a,b;[b,a] end');printf"This program wasn't written in %s, it was built for %s!",(@a=sort"Perl","Ruby")[0],@a[1]

Nessun abuso di espressioni regolari in questo, solo sfruttando il fatto che 0 è vero in Ruby a evaluna definizione per sort(che in realtà reverseè) e printfing. A Ruby non piaceva usare la lista per gli argomenti, quindi ho dovuto fare ognuno singolarmente.


Perché adeve essere una variabile di istanza, anziché una locale?
Nic Hartley,

@QPaysTax Il @sigillo su una variabile in Perl indica che si tratta di un elenco, in cui Perl memorizza in, diciamo $ainvece, non produce alcun output.
Dom Hastings,

Ah, capisco. Grazie per la spiegazione.
Nic Hartley,

9

/// e Retina , 95 + 3 = 98 byte

/
//

This program wasn't written in \/\/\/, it was built for Retina!
/?./....(.*)(R.*)!
$2$1///!

+3 byte per il -s bandiera in Retina.

Spiegazione per ///

La prima istruzione è

/
//

rimuove tutte le nuove righe dal resto del codice, risultando in

This program wasn't written in \/\/\/, it was built for Retina!/?./....(.*)(R.*)!$2$1///!

Tutto fino a quando !è solo un letterale e stampato su STDOUT. La prossima istruzione è

/?./....(.*)(R.*)!$2$1/

Ma la stringa di ricerca ?.non può essere trovata, quindi non succede nulla. Quindi il codice rimanente è//! è un'istruzione incompleta, quindi il programma termina, dopo aver stampato la stringa corretta.

Spiegazione per Retina

/
//

Questo dice a Retina di sostituirlo /con //. Ma l'input è vuoto, quindi questo non corrisponde a nulla.

<empty>
This program wasn't written in \/\/\/, it was built for Retina!

Questo sostituisce l'input con la stringa nella seconda riga.

/?./....(.*)(R.*)!
$2$1///!

Questo corrisponde alla stringa \/\/\/, it was built for Retina!e la sostituisce con Retina, it was built for ///!per dare il risultato corretto.


Sai, penso che sarebbe banale fare uno tra Retina e rs ...;)
kirbyfan64sos

@ kirbyfan64sos Probabilmente, ma quanto sarebbe corto? ;)
Martin Ender,

Bene, finora ho ottenuto circa 85 byte + 3 per -s, anche se dire quello che ho fatto rovinerebbe il divertimento! : D
kirbyfan64sos,

1
@ kirbyfan64sos Vai avanti e pubblicalo, non credo che avrò tempo di esaminare rs presto.
Martin Ender,

9

sed / Hexagony 251 byte

/$/cThis program wasn't written in sed, it was built for Hexagony!
#...>32;p;r;o;g;r;\+/;a;w;23+;m;a<.;.>s;n;+39;t;+32\s/;n;e;;t;i;r;w;<. |.>+32;i;n;+32;H;e\ ;/4+;y;n;o;g;a;x;< i>4;+32;i;t;+32;\;/u;b;23+;s;a;w<h>;i;l;t;+32;f\;/;s;23+;r;o;< T>e;d;+33;@

sed: provalo online!
Esagonia: provalo online!


In sed, stampa la stringa corretta se corrisponde alla stringa vuota alla fine (sempre). La seconda riga è un commento. Ciò richiede una stringa su STDIN, ma può essere vuota ( consentita in base a questo consenso ).

Esempio:

echo '' | sed -f whatLanguage.sed

In Hexagony, i primi /reindirizzano verso il basso a sinistra, seguono il lato sinistro fino a dove inizia la parte sed, quindi si avvolge da sinistra a destra, lungo una linea, da destra a sinistra, lungo una linea e così via. L'esagono espanso è simile al seguente:

         / $ / c T h i s p r 
        o g r a m w a s n ' t 
       w r i t t e n i n s e d 
      , i t w a s b u i l t f o 
     r H e x a g o n y ! # . . . 
    > 3 2 ; p ; r ; o ; g ; r ; \
   + / ; a ; w ; 2 3 + ; m ; a < .
  ; . > s ; n ; + 3 9 ; t ; + 3 2 \
 s / ; n ; e ; ; t ; i ; r ; w ; < . 
| . > + 3 2 ; i ; n ; + 3 2 ; H ; e \ 
 ; / 4 + ; y ; n ; o ; g ; a ; x ; < 
  i > 4 ; + 3 2 ; i ; t ; + 3 2 ; \
   ; / u ; b ; 2 3 + ; s ; a ; w <
    h > ; i ; l ; t ; + 3 2 ; f \
     ; / ; s ; 2 3 + ; r ; o ; < 
      T > e ; d ; @ . . . . . .
       . . . . . . . . . . . .
        . . . . . . . . . . .
         . . . . . . . . . .

Non capirò mai Hexagony ...
DJgamer98

@ DJgamer98 Neanche io lo capisco davvero. Questa è la prima volta che lo uso.
Riley,

Puoi accorciare un po 'l'esagonia facendo uso del fatto che ;prende la cella corrente mod 256 per determinare un valore di byte (ad esempio puoi stampare uno spazio P0;indipendentemente dal valore di cella corrente). Questo script di CJam genera tutte le coppie: cjam.tryitonline.net/…
Martin Ender,

9

Python / Retina, 133 120 119 117 115 byte

Ora che so di più su Retina e regex, l'ho giocato un po 'di più. Funziona anche adesso.

#?.*
print"This program wasn't written in Python, it was built for Retina!"
#?.*t"

#?(\w+)(,.* )(.+)!"
#$3$2$1!
#

Python stampa solo la dichiarazione. Retina sostituisce qualsiasi cosa con l'istruzione di stampa Python, quindi rimuove le printvirgolette. Poi, sostituisco Pythone Retinae rimuovere il #.

Prova in Python | Prova a Retina



@ jimmy23013 Non esistevano limiti al momento della pubblicazione della sfida. Questa è una caratteristica relativamente nuova di Retina.
mbomb007,


8

JavaScript / CoffeeScript, 125 124 byte

console.log("This program wasn't written in",(a=['Coffee','Java'])[+(b=0=='0')]+"Script, it was built for",a[b^1]+"Script!")

In CoffeeScript, a==bè compilato fino aa===b , il che rende falsa la condizione intermedia. Ho usato un po 'di magia per convertire il valore booleano in un numero intero.

Salvato 1 byte grazie a @DomHastings!

Versione a 125 byte:

console.log("This program wasn't written in",(a=['Coffee','Java'])[(b=0=='0')+0]+"Script, it was built for",a[b^1]+"Script!")

Bello! Penso che puoi salvare un byte con +(b=0=='0')invece di +0!
Dom Hastings,

Invece di b^1, penso che tu possa usare~b
Ismael Miguel il

@IsmaelMiguel Nope. Dice che è stato costruito per undefinedScript.
Kirbyfan64sos,

L'ho dimenticato ~1 == -2. Ma (b=0=='0')+0può essere scritto come +(b=0=='0'). Or b=+(0=='0'). Quello dovrebbe tagliare 1 byte.
Ismael Miguel,

@IsmaelMiguel L'ho già fatto nella versione più recente ...
kirbyfan64sos
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.