La versatile stampante di numeri interi


93

Scrivi un pezzo di codice eseguibile in almeno tre lingue diverse. Il codice deve generare l'intero 1nella lingua numero uno, 2nella lingua numero due, 3nella lingua numero tre ecc.

Regole:

  • L'output deve essere solo il numero intero, ma le nuove righe finali sono OK.
  • Il codice non può accettare input di alcun tipo
  • Diverse versioni principali della stessa lingua sono considerate uniche. Pertanto, il codice può essere eseguibile in Python 2 e Python 3, tuttavia Python 2.5 e Python 2.7 non sono considerati univoci.
  • È possibile utilizzare una nuova lingua se e solo se ha un articolo esolang / wiki, un interprete e una documentazione disponibili ed è stato utilizzato da almeno due utenti su PPCG prima di utilizzarlo in questa sfida. Deve anche aderire a queste 4 regole .

Il punteggio dell'invio è il numero di byte nel codice diviso per il numero di lingue che può essere eseguito in cubi. Pertanto, una soluzione a 54 byte eseguibile in 3 lingue avrà un punteggio di 2:

54 / 3^3 = 2  

Il punteggio più basso è migliore.


Classifica


6
@muddyfish Potreste essere in grado di recuperare la versione minore all'interno del codice, che sarebbe poi dare soluzioni gratuite per tutti 2.7.1a 2.7.n. (In realtà, sweerpotato fa proprio questo con le versioni principali.)
Martin Ender il

14
Penso che forse la soluzione più breve per lingua non abbia senso qui ...: P
FryAmTheEggman

3
@Mego Neanch'io, è per questo che lascio commenti sarcastici sul problema in modo che altre persone lo
scoprano

12
Volevo solo congratularmi con te per quanto sia equilibrato il tuo punteggio. Quando le sfide del codice mescolano due quantità in un punteggio, il saldo è quasi sempre in modo tale che la risposta migliore ottimizzerà solo uno dei punteggi senza dover considerare affatto l'altro. Il peso cubo del numero di lingue era perfetto qui ... mentre era sempre possibile aggiungere un'altra lingua era sempre una sfida molto bella (ma fattibile) farlo nel numero di byte disponibili. :)
Martin Ender,

20
In questa sfida PPCG abbiamo collaborato alla costruzione di un poliglotta. Ora ha un punteggio migliore su questa sfida rispetto alle voci principali presentate a questa sfida, ma non avrebbe senso copiare uno sforzo di gruppo che viene costantemente migliorato, quindi sto solo lasciando cadere una menzione nei commenti qui.

Risposte:


90

30 lingue, 248 byte, 248/30 ^ 3 = 0,009185

#|#?15g,@           kkmNmSaIeoe99+{\#/-;n@0ea
#[9!@>.>.eeaww#-1@*"12" L
#{  
###
#`{
25
print(4^2 +7)/2


"""
Jo is here.
$'main'MoO OOM
 7
>Jo, 30
>X Jo
f::=~27
::=]##}#(prin 29)
print (7/6*24)###;alert 2#-[>+<-----]>-.|#(write(if(= 1/5 .2)26 3))"""

Modifica: Beatnik rimosso poiché i test di primalità in Beatnik potrebbero non essere possibili.

Il codice contiene delle schede (che vengono alterate da Stack Exchange) e una nuova riga finale, quindi ecco il xxd:

00000000: 237c 233f 3135 672c 4020 2020 0920 2020  #|#?15g,@   .   
00000010: 206b 6b6d 4e6d 5361 4965 6f65 3939 2b7b   kkmNmSaIeoe99+{
00000020: 5c23 2f2d 3b6e 4030 6561 0a23 5b39 2140  \#/-;n@0ea.#[9!@
00000030: 3e2e 3e2e 6565 6177 7723 2d31 402a 2231  >.>.eeaww#-1@*"1
00000040: 3222 094c 0a23 7b20 090a 2323 230a 2360  2".L.#{ ..###.#`
00000050: 7b0a 3235 0a70 7269 6e74 2834 5e32 202b  {.25.print(4^2 +
00000060: 3729 2f32 0a0a 0a22 2222 0a4a 6f20 6973  7)/2...""".Jo is
00000070: 2068 6572 652e 0a24 276d 6169 6e27 4d6f   here..$'main'Mo
00000080: 4f20 4f4f 4d0a 2037 0a3e 4a6f 2c20 3330  O OOM. 7.>Jo, 30
00000090: 0a3e 5820 4a6f 0a66 3a3a 3d7e 3237 0a3a  .>X Jo.f::=~27.:
000000a0: 3a3d 5d23 237d 2328 7072 696e 2032 3929  :=]##}#(prin 29)
000000b0: 0a70 7269 6e74 2028 372f 362a 3234 2923  .print (7/6*24)#
000000c0: 2323 3b61 6c65 7274 2032 232d 5b3e 2b3c  ##;alert 2#-[>+<
000000d0: 2d2d 2d2d 2d5d 3e2d 2e7c 2328 7772 6974  -----]>-.|#(writ
000000e0: 6528 6966 283d 2031 2f35 202e 3229 3236  e(if(= 1/5 .2)26
000000f0: 2033 2929 2222 220a                       3))""".

In alternativa, puoi copiare e incollare il codice da questo "Provalo online!" link .

Questo è piuttosto maledetto, ma volevo sminuire l'idea che, una volta che hai abbastanza lingue, il conteggio dei byte non ha più importanza. Detto questo, ci sono alcune lingue che potrei ancora facilmente aggiungere (ad esempio Objeck) ma al momento sono troppo lunghe per essere utili. Sono a corto di buone lingue, quindi per ora potrei fermarmi qui.

Esegui tutti i programmi con </dev/null 2>/dev/null(ovvero input vuoto, STDERR compresso).

La spiegazione è piuttosto lunga, quindi ecco un riassunto esecutivo:

No.  Lang.              Non-esolang?     2D esolang?      BF/BF-deriv?
--------------------------------------------------------------------------
1    COW                                                       ✓
2    CoffeeScript            ✓
3    Common Lisp             ✓
4    Retina
5    Befunge-93                               ✓
6    Python 2                ✓
7    Rail                                     ✓
8    ETA
9    Prelude
10   Gol><>                                   ✓
11   evil
12   Foo                                                       ✓
13   Ruby                    ✓
14   ><>                                      ✓
15   Brian & Chuck                                             ✓
16   Whitespace
17   3var
18   Axo                                      ✓
19   Labyrinth                                ✓
20   Starry
21   Fission                                  ✓
22   Brainfuck                                                 ✓
23   Julia                   ✓
24   Lily                    ✓
25   GolfScript
26   Chicken Scheme          ✓
27   Thue
28   Perl 6                  ✓
29   Picolisp                ✓
30   TRANSCRIPT

1. MUCCA

COW è un derivato di Brainfuck con comandi aggiuntivi, uno dei quali è un output numerico. Tutto ciò che non è valido viene ignorato, quindi il programma eseguito è semplicemente

MoO OOM

che aumenta la cella a 1, quindi la stampa come un numero.

2. CoffeeScript (include interprete)

CoffeeScript vede:

# comments
###
multiline comment
###;alert 2# comment

che avvisa semplicemente 2.

(Sì, probabilmente sarebbe meglio se un'altra lingua prendesse questo slot, ma sono troppo pigro per rimescolare a questo punto: P)

3. Lisp comune | Ideone

Common Lisp (clisp) vede:

#|
multiline comment
|#(write(if(= 1/5 .2)26 3))"""

1/5è un valore razionale e non uguale a 0.2, quindi viene stampato 3. Il procedimento """è un errore di sintassi.

Si noti che printsembra generare una nuova riga precedente e spazio finale in Common Lisp. Tuttavia, per fortuna, writefunziona sia in Common Lisp che in Chicken Scheme.

4. Retina | Provalo online!

Restrizioni introdotte : ogni seconda riga a partire dalla prima deve essere una regex valida.

Ogni coppia di righe forma una fase di sostituzione, sostituendo le istanze di corrispondenze della regex della prima riga con la seconda riga. Nel mezzo, abbiamo la coppia

"""

che sostituisce la stringa vuota iniziale con """. L'ultima riga vuota, che non fa parte di nessuna coppia, viene trattata come una fase della partita, contando il numero di partite della regex. Ci sono quattro istanze di stringa vuota in """, vale a dire 1"2"3"4.

5. Befunge-93 | Interprete

Befunge è un linguaggio 2D e le relative istruzioni sono

# # 15g,@

nella prima riga e 5nella 25riga. #salta l'istruzione successiva, 15gottiene il carattere in posizione (1, 5)nel codice (il 5nella 25riga), ,emette il carattere e si @ferma.

6. Python 2 | Ideone

Python vede:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

(4^2+7)/2 = (xor(4,2)+7)/2 = (6+7)/2 = 13/2 = 6, che viene printed.

7. Ferrovia | Provalo online!

Rail è un linguaggio 2D e l'esecuzione inizia dalla $funzione principale, in direzione sud-est. Pertanto, la parte pertinente del codice è

$'main'
 7
  o
   J

con oe Jproveniente dalle linee utilizzate da TRANSCRIPT. Dopo aver emesso 7, il treno riceve Jun'istruzione non riconosciuta , che arresta in modo anomalo il programma.

8. ETA | Provalo online!

Restrizioni introdotte: i caratteri prima del programma ETA non dovrebbero essere presenti etaoinsh.

ETA riconosce solo le lettere etaoinshe le loro versioni maiuscole, il che significa che il codice inizia con

NSaIeoe

n...espinge un numero di base 7 in base a ciò che è all'interno dei delimitatori, che per SaIè 624, o 312 in decimale. oquindi emette come carattere, apparentemente dopo il modulo 256, dando il carattere 8(codice punto 56). equindi tenta di dividere con uno stack vuoto, che non riesce.

9. Preludio | Provalo online!

Restrizioni introdotte: non più di una di ()ogni colonna, ()abbinata alla lettura di una colonna alla volta, nessun loop infinito causato da ().

Ciò richiede che l'interprete Python sia NUMERIC_OUTPUT = Trueimpostato.

Preludio è una lingua in cui ogni riga viene eseguita separatamente. Molti caratteri vengono eseguiti, ma la parte importante è il

9!

sulla seconda riga, che produce 9. ()in Prelude denotano un loop, ma grazie alla prominenza di #s (che salta dallo stack), le cime degli stack sono sempre 0 quando viene colpito un loop, quindi nessuno di loro sono gestiti. Le restrizioni del codice sorgente di Prelude in merito hanno ()introdotto alcuni spazi estranei.

10. Gol> <> | Interprete

Questa parte (e> <>) funziona come la risposta di Martin . Il codice rilevante è

#                                      ;n@0ea

Gol> <> è un linguaggio 2D e #riflette l'IP, facendolo viaggiare verso sinistra. Si avvolge, spinge 10, 14 e 0 nello stack. @quindi ruota lo stack, portando 10 in alto, lo nemette e ;ferma il programma.

11. male | Provalo online!

Questa parte è anche simile alla risposta di Martin.

il male ignora tutto tranne le lettere minuscole. Ignorando qualche altro personaggio, la parte rilevante è

aeeeaeeaww

dove aincrementa la variabile A, eè la funzione di intreccio del male che mescola i bit di A, ed wemette A. Quindi abbiamo prodotto 1due volte, dando 11.

Ma per quanto riguarda il resto delle istruzioni, e in particolare quello wdell'ultima riga? Diciamo solo che a volte è più semplice pasticciare con il codice e pregare che funzioni ancora in tutto ciò che, qui, in qualche modo ha fatto ...

12. Foo | Provalo online!

Foo emette qualcosa tra virgolette doppie, quindi la parte rilevante è il

"12"

sulla seconda riga. Tuttavia, poiché in seguito abbiamo bisogno di virgolette doppie, utilizziamo un metodo simile alla risposta di Martin per eliminare l'errore Foo, vale a dire il precedente #-1@. Non è chiaro il motivo per cui funziona in una lingua su cui i soldati affrontano lo stack vuoto e la divisione per zero errori, ma sono contento che lo faccia.

13. Ruby | Ideone

Come Python, Ruby vede:

# comments
25
print(4^2 +7)/2


"""
multiline string
"""

Tuttavia, vale la pena notare che la stringa multilinea è in realtà tre stringhe separate ( "", "...", "") concatenato insieme. La linea di stampa (4^2+7) = xor(4,2)+7 = 6+7 = 13viene emessa, prima di sbagliare cercando di dividere nilper 2.

14. > <> | Provalo online!

Questa parte è uguale alla parte Gol> <>, tranne per il fatto che @porta 14 in cima, che viene emesso.

15. Brian & Chuck | Provalo online!

Brian & Chuck è un derivato BF con due nastri, in cui il puntatore alle istruzioni di un nastro è il puntatore di memoria dell'altro nastro. In assenza di ```, le prime due righe del codice sorgente vengono utilizzate per inizializzare i nastri.

I caratteri rilevanti nelle prime due righe sono:

   ?15
#     >.>.

Il ?nastro di Brian passa il controllo a Chuck nella cella a cui viene indicato (il #) è diverso da zero. Chuck quindi esegue >.>., emettendo i due caratteri dopo il punto interrogativo.

16. Spazio bianco | Interprete

Utilizzando rispettivamente STLper spazio, tabulazione e avanzamento riga, l'avvio del programma è:

SSSTSSSSL
TL
STL
L
L

La prima riga spinge 16 ( +10000base 2), la precedente la TLSTstampa come numero. Le tre righe successive interrompono il programma.

Si noti, tuttavia, che questo programma è specifico dell'interprete. Il resto degli errori di sintassi del codice nella maggior parte degli interpreti, quindi è necessario un interprete più indulgente, come quello sopra indicato.

17. 3var | Provalo online!

Della prima riga, viene eseguita una serie di istruzioni, ma quelle pertinenti lo sono

kkmmao#/

A causa della restrizione dell'ETA, usiamo kper ridurre la variabile B piuttosto che aper aumentarla. kkdiminuisce da B a -2 e mmpiazza B due volte a 16, che viene incrementato a 17 con a. Questo viene quindi emesso con o.

#viene quindi utilizzato per reimpostare B su 0 e /causa l'errore del programma tramite divisione per 0.

18. Axo | Provalo online!

Restrizioni introdotte: nessuna istruzione prima del programma Axo che modifica la direzione dell'IP

Ancora una volta, una serie di istruzioni viene eseguita nella prima riga, ma quelle pertinenti lo sono

# # 15 ,@            9 9  + {   \

Axo è un linguaggio 2D come Befunge ed #è allo stesso modo un bridge che salta l'istruzione successiva, ma solo se la parte superiore dello stack è zero. 15,spingere verso lo stack, ma lo stack viene svuotato con @. 99+quindi spinge 18, {esce e si \ferma.

19. Labyrinth | Provalo online!

Labyrinth è un altro linguaggio 2D e le istruzioni eseguite sono

#|#
 [9!@

#spinge la lunghezza della pila, che è 0 la prima volta. |è OR bit a bit, non cambia nulla poiché lo stack ha solo 0s a questo punto, e il secondo #ora spinge 1 a causa dello zero solitario. Giriamo a destra a causa dell'1, lo 9converte in 1 1*10+9 = 19, lo !stampa e si @ferma.

Questo programma si basa sul fatto che [attualmente non è un'istruzione riconosciuta, e quindi viene trattato come un muro.

20. Stellato | Provalo online!

Restrizioni introdotte: tutti gli +s devono avere almeno uno spazio precedente

Se eliminiamo i caratteri non riconosciuti, la parte rilevante del codice è

,       +.. +

,viene immesso, ma dal momento che eseguiamo il pipe da /dev/nulllì non c'è nessuno, spingendo 0 nello stack. A +con n >= 5spazi precedenti spinge n-5, quindi l'istruzione successiva spinge 2. ..quindi emette queste due cifre in ordine inverso.

Successivamente abbiamo un +con un unico spazio precedente, che duplica. Tuttavia, lo stack è vuoto, quindi eliminiamo l'errore.

21. Fissione | Provalo online!

L'unica parte rilevante per Fission è

*"12"L

Lgenera un atomo che si muove verso sinistra, "21"stampa 21 e si *ferma.

22. Brainfuck | Provalo online!

Restrizioni introdotte: No .prima del primo[

Ciò richiede un interprete che dia 0 su EOF e abbia celle a 8 bit. Il codice rilevante è

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

L'iniziale -serve per compensare il +, e il primo [...]non viene eseguito poiché la cella è 0. Quanto segue -[>+<-----]>-imposta la cella sul codice char di 2, e la ..emette due volte.

23. Julia | Provalo online!

Julia vede:

# comments
25
print(4^2 +7)/2

Ciò che è stampato è 4^2+7 = pow(4,2)+7 = 16+7 = 23 , e il programma si spegne cercando di dividere nothingper 2. Nota che a Julia non sembra importare il fatto che il resto del codice provocherebbe comunque un errore di sintassi.

24. Lily |Interprete

Lily vede:

# comment
#[
multiline comment
]## comment
print (7/6*24)# comment

7/6*24 = 1*24 = 24 è stampato.

25. GolfScript | Provalo online!

GolfScript vede:

# comments
25
print(

GolfScript è basato sullo stack, quindi 25 viene inserito nello stack, quindi visualizzato e stampato con print.(quindi tenta di decrementare la stringa vuota implicita nello stack, che non riesce ed elimina il programma.

26. Schema di pollo | Ideone

Chicken Scheme ha la stessa #| ... |#sintassi dei commenti multilinea di Common Lisp. Tuttavia, in

(write(if(= 1/5 .2)26 3))

1/5è un galleggiante che è uguale a 0.2, quindi 26 viene emesso invece.

27. Gio | Provalo online!

Quindi è un linguaggio basato sulla riscrittura delle stringhe. La prima parte rilevante è

f::=~27
::=

che definisce una sostituzione f -> 27quindi indica la fine delle sostituzioni con ::=. Il lone fin ifviene quindi sostituito con 27, che viene emesso.

28. Perl 6 | Ideone

Perl 6 ha una nuova sintassi di commento, vale a dire #`(some bracket)che è un commento multilinea fino alla parentesi corrispondente. Pertanto, Perl 6 vede:

# comments
#`{
multiline comment
}# comment
print (7/6*24)# comment

che stampa 7/6*24 = 28.

29. Picolisp | Ideone

Picolisp vede:

# comment
#{
multiline comment
}#(prin 29)

che stampa 29. La riga successiva provoca quindi un errore di sintassi.

30. TRANSCRIPT | Provalo online!

TRANSCRIPT è un esolang tematico modellato su avventure testuali. Le righe non riconosciute vengono ignorate (il che consente di aggiungere un ulteriore testo storia / sapore tra le istruzioni del codice effettivo), quindi le righe pertinenti sono:

Jo is here.
>Jo, 30
>X Jo

La prima riga dichiara una variabile stringa Jo, usando un nome di due lettere poiché i nomi di una lettera sembrano fallire. La seconda riga imposta questa stringa su "30", che viene emessa da X("esaminare") nella terza riga.


12
Daaaaaaaaaang ...
AdmBorkBork,

9
Sospetto che questo possa essere il punteggio inferiore a zero su qualsiasi domanda qui.
Morgan Thrapp,

Questo è incredibile. Sono sbalordito.
Nic Hartley,

2
* positivo, ci sono alcuni punteggi negativi per risposte brevi con bonus.
Calcolatrice

Suggerimento per il futuro: le tue schede non verranno incasinate se circondi il codice nei pretag anziché utilizzare un blocco di codice in stile Markdown.
Jakob,

148

15 lingue, 68 66 65 byte / 15 ^ 3 = 0,019 ...

Retina , Starry , Prelude , ETA , Axo , Labyrinth , Hexagony , Foo , Brian & Chuck , Gol> <> , evil , Whitespace , Fission , > <> e GolfScript .

Dopo un'enorme riscrittura, sono riuscito ad adattarmi in altre quattro lingue. Il codice contiene le poche schede per Whitespace. Poiché Stack Exchange li converte in spazi, li ho rappresentati con \tsotto:

#I5aeeNTH{\?      \t\t + +3;n@"8"ea9
15}7'`--~!@<"31"LSOe.\t
 \teaww`

Penso di aver finito di aggiungere le lingue (anche se aggiungerne solo una potrebbe salvare alcuni byte in quello che già ho). Mi chiedo se sia giocabile a golf ... 65 byte per 15 lingue sono un bel salto da 32 byte per 11 lingue, e ora ho almeno un carattere inutile lì dentro per far funzionare Foo ..

Stampe retina 1

Provalo online.

Fortunatamente, la prima riga è una regex valida. Comunque quel regex ovviamente non corrisponde all'input vuoto, quindi il primo stadio (costituito dalle prime due righe) non fa nulla.

La terza riga è di per sé, quindi viene trattata come una fase di Match che, per impostazione predefinita, conta il numero di match. in ogni caso, il` è un separatore che dice a Retina che la parte davanti ad essa è una stringa di configurazione (non capita di conoscere nessuna delle opzioni fornite lì) e la parte dopo è la regex. Quindi la regex è vuota e Retina trova esattamente una corrispondenza.

Stampe stellate 2

Provalo online.

Stellato ignora tutto tranne gli spazi e +*,'`.. Ogni comando è uno di quei caratteri in congiunzione con gli spazi dall'ultimo di quei caratteri. Quindi rimuoviamo tutto il codice estraneo:

       + +'`. `

Sette spazi seguiti da +push a 2. Uno spazio seguito da un +duplicato. 'è un salto condizionale. Fa apparire la parte superiore della pila, che è veritiera (positiva), quindi salta all'etichetta corrispondente (dove le etichette sono indicate da `"mezzi" corrispondenti "con lo stesso numero di spazi iniziali"), che è la prima `..senza spazi davanti ad esso, quindi stampa la parte superiore della pila come un numero.

Stampe preludio 3

Provalo online.

Questo presuppone che l'interprete Python utilizzi un output numerico. Rimuoviamo tutte le no-op:

# 5        ?         + +3    8   9
15 7  -- !   31

La prima voce fa un sacco di cose, ma nulla di ciò che conta, perché non è possibile !stampare alcun risultato. La seconda voce spinge a 1, quindi a 5, quindi a 7. Prendiamo la differenza degli ultimi due per ottenere -2, quindi sottraggiamo quello 1per ottenere 3. !lo stampa. La terza voce non ha operazioni.

Stampe ETA 4

Provalo online.

ETA ignora tutto tranne i caratteri ETAOINSH(in ogni caso). Quindi il codice visto dall'ETA è:

IaeeNTHneaSOeea

Iprova a leggere l'input ma non ci riesce, quindi spinge -1. aspinge il numero di riga corrente più 1, che è 2. eè divmod , che sostituisce quelli con 0e 1(o -1, in realtà non lo so, ma non importa). Il prossimo esostituisce entrambi con 0.

Ora la parte interessante. NTHneè un numero di base-7 letterale. Ne esono solo i delimitatori e le tre cifre lo sono THN. Cioè 54(dove Tè cifra 1, Hè 0ed nè 5). aspinge 2ancora una volta. Slo sottrae, risultante 52e lo Oemette come carattere ( 4). Ora eprova di nuovo divmod, ma lo stack contiene due zero, quindi il programma termina con un errore (ma non inquina STDOUT mentre lo fa).

Stampe Axo 5

Provalo online.

Questa lingua era praticamente da sola responsabile della riscrittura. Non potevo avere la }prima riga perché si sarebbe bloccato per l'input in Axo (vedere la cronologia delle revisioni per quello di cui sto parlando). Per Axo, solo questa parte del codice è rilevante:

#I5aeeNTH{\

Fortunatamente, Axo ha anche delle implicite 0in fondo alla sua pila, perché #fa apparire la cima della pila (per verificare se la prossima istruzione debba essere saltata o meno). Le lettere sono tutte vietate. Quindi 5preme a 5, lo {stampa, \termina il programma. Abbastanza semplice, davvero.

Stampe a labirinto 6

Provalo online.

Sto troncando un po 'il codice, perché la metà giusta non viene mai raggiunta, e sto anche usando tal posto di \t, in modo che le colonne si allineino correttamente:

#I5aeeNTH{\
15}7'`--~!@
 teaww`

Ora che lettere, spazi e tabulazioni sono muri in Labyrinth, quindi il codice accessibile appare in questo modo:

# 5      {\
15}7'`--~!@
      `

Il puntatore alle istruzioni seguirà automaticamente quel percorso. #spinge la profondità dello stack principale ( 0) e lo 15trasforma in a 15. }lo sposta nello stack ausiliario e non lo useremo più. Ciò rende convenientemente la parte superiore dello stack zero, in modo che l'IP non giri a sinistra su 5. 7trasforma lo zero in a 7, 'è un no-op. È `una negazione unaria, quindi otteniamo -7. Ora -sottrae il -7dal implicito 0sottostante facendolo 7. Questa volta, l'IP gira a destra su `, che è una negazione unaria, quindi torniamo 7. L'IP raggiunge un vicolo cieco a una svolta. Il- fa la stessa cosa di prima, così otteniamo7ancora una volta. Poiché la parte superiore dello stack è ora positiva, l'IP gira a destra. Ce n'è un altro -che dà di -7nuovo. Quindi ~NON è bit a bit, che lo dà 6e lo !stampa. Questo è il momento giusto per farlo, perché ora lo stack è di nuovo vuoto in modo tale che l'IP non gira a sinistra sul {ma continua invece dritto nel @che termina il programma.

Stampe esagonali 7

Provalo online.

Il codice spiegato si presenta così:

     # I 5 a e
    e N T H { \
   ? + + 3 ; n @
  " 8 " e a 9 1 5
 } 7 ' - - ~ ! @ <
  " 3 1 " L S O e
   . e a w w . .
    . . . . . .
     . . . . .

Normalmente, sarebbe un terrificante programma Hexagony, ma i personaggi effettivamente in uso non sono troppi. In effetti sono praticamente uguali a quelli usati da Labyrinth e penso che il modo in cui faccio la differenza 5ed 6è abbastanza carino. :)

La riga superiore può essere praticamente ignorata. #passerebbe normalmente a un IP diverso, ma l'attuale limite di memoria è 0, quindi non lo è. Le lettere hanno appena impostato un valore di memoria fisso, ma non lo useremo. Dopo la fine della prima riga, il flusso di controllo continua nella riga centrale (a partire da }, andando a destra). Si }sposta su un altro bordo della memoria. 7imposta quel limite su 7. 'torna da dove siamo venuti. -sottrae il bordo di memoria che abbiamo appena impostato 7da un bordo di memoria inutilizzato ( 0), quindi otteniamo -7. Il prossimo -fa di nuovo la stessa cosa, quindi è una no-op. Finora, abbastanza simile a Labyrinth (a parte il layout di memoria). Ma ora~ NON è bit a bit ma negazione unaria in Esagonia. Quindi questo dà 7invece di 6. !@, come in Labyrinth stampa il valore e termina il programma.

Stampe Foo 8

Provalo online.

Come tutti sappiamo da quando il Quiz sul linguaggio di programmazione ha stampato cose abbastanza banali in Foo, anche se la maggior parte del codice è un miscuglio casuale di caratteri. Nessuno dei caratteri influisce sull'output tranne quello "8"che stampa 8. Bene, c'è il "31"successivo, ma Foo termina con un errore alla fine della prima riga. Non sono esattamente sicuro del perché ciò accada, ma richiede che 3(o qualsiasi altra cifra) nella riga superiore, che non venga utilizzata da nessun'altra parte.

Stampe Brian & Chuck 9

Provalo online.

Facciamo di nuovo questa cosa in cui rimuoviamo la terza riga (non viene mai analizzata) e sostituiamo tutti i caratteri irrilevanti (ovvero no-ops o celle che non vengono letti) con spazi:

         { ?         + +         9
  }   --   <        .

Come promemoria, ogni riga è simile a Brainfuck, il cui nastro è il codice sorgente dell'altro programma. Il flusso di controllo inizia sulla prima riga (chiamata Brian).

I {movimenti della testina del nastro fino a sinistra (dove già è), e ?le mani controllo del flusso verso Chuck (seconda riga). Lì, }sposta la testina a destra fino a quando non trova una cella zero. Ciò non accade fino alla fine del programma, quindi la testina finisce una cella dopo il 9. -decrementa quella cellula, ma è irrilevante. <sposta la testina sul 9e la .stampa. Chuck termina il programma e termina.

Gol> <> stampe 10

Testato qui.

#è un mirror, quindi l'IP salta immediatamente alla fine della prima riga (e va a sinistra). Il 9può essere ignorato. aspinge 10, espinge 14, "8"spinge il codice carattere di 8, @ruota i primi tre elementi dello stack (tirando su 10), in modo tale che nstampa 10e ;termina il programma.

Grazie a Sp3000 per aver suggerito di utilizzare @invece di !(che ha salvato un byte).

stampe malvagie 11

Grazie a Sp3000 per avermi inviato alcune liste di comandi forzate per generare numeri a una cifra.

Provalo online.

il male ignora tutto tranne le lettere minuscole, quindi il codice è simile al seguente:

aeeneaeeaww

Inoltre, ninfluisce su alcuni stati che non ci interessano, quindi ignoriamo anche quello. Ora aincrementa il registro (che inizia da 0), ed eè la magica operazione "intreccio" del male che permette i bit in un modo particolare. aeeeaeeasembra dare il valore 49che è il codice carattere di 1. wwlo stampa due volte.

Stampe di spazi bianchi 12

Provalo online.

Ok, sappiamo che Whitespace legge solo spazi, tabulazioni e avanzamenti di riga, quindi lasciamo scrivere il codice visto da Whitespace con STL:

SSSSSSTTSSLTLST

Sono due comandi:

SSSSSSTTSSL
TLST

Il primo spinge il numero 12. In particolare, SSinizia un numero letterale. Il prossimo Sè il bit di segno (positivo). Quindi tutto fino a Lè una rappresentazione binaria del numero. Ci sono un sacco di zeri iniziali, di cui abbiamo bisogno per Starry, ma non influenzano il numero. Quindi la TTSSs è 12in binario. Curiosità: se aggiungessi una 16a lingua, potrei salvare un byte qui, perché Starry potrebbe usare i quattro Snella ripetizione binaria di 16. Dubito che lo farò ...

Il TLSTsolo stampa la parte superiore della pila come un numero. ( TLcontrassegna il comando come comando I / O e STstampa i numeri.)

Stampe di fissione 13

Provalo online.

Fission vede solo questa parte del codice:

           <"31"L

Lavvia il flusso di controllo con un atomo di sinistra. "alterna modalità di stampa, in modo che 31si limita a stampare 13. Quindi l'atomo viene catturato nel cuneo di <, che termina il programma.

> <> stampe 14

Testato qui.

Distinguere tra> <> e Gol> <> non è facile come pensavo, perché Gol> <> fa quasi sempre la stessa cosa di> <> per i comandi che esistono in entrambi e quelli che esistono solo in Gol> < > cause> <> in crash. Tuttavia, @ruota in senso inverso rispetto a> <>, in modo da spingere verso il basso 7anziché verso l'alto 10, quindi 14verrà stampato anziché 10.

Stampe GolfScript 15

Provalo online.

Questo è più semplice: #commenta la prima riga. Quindi si 15spinge da solo ed }è un "super commento", che ignora l'intero resto del programma. Quindi 15viene stampato alla fine del programma.


34
Questo è davvero impressionante!
sweerpotato,

1
@YassinHajaj Grazie, corretto.
Martin Ender,

2
Niiice. Ottimo lavoro per 15 lingue!
ev3commander,

1
@SnoringFrog Bene, eccoti.
Martin Ender,

1
@Eumel Grazie, ma la generosità è specifica per le lingue "normali" elencate nella sua descrizione, quindi la generosità dovrebbe andare a tale risposta (come la soluzione molto bella di Sp3000). Penso di aver avuto abbastanza rappresentante da questo comunque. ;)
Martin Ender il

42

Python 1.x, 2.xe 3.x, 32 byte / 3 ^ 3 = 1.1851 ...

import sys
print(sys.version[0])

Stampa il primo numero della versione, che è 1in Python 1.x, 2in Python 2.xe 3in Python 3.x.

Quando avremo Python 9.x il mio punteggio sarà glorioso 0.04389!

: ~)!


10
Dalla chat: Sì, è sia economico che valido =) Questo è uno dei motivi per cui solo le versioni principali sono state considerate abbastanza uniche. Non so quante versioni di Python ci siano, ma probabilmente potresti ottenere un punteggio davvero basso usando qualcosa del genere ... È una delle poche soluzioni in cui capisco davvero cosa sta succedendo, quindi +1 da parte mia; - )
Stewie Griffin,

6
In Python 10.x (quando esiste) non verrebbe stampato 1perché è il primo carattere della stringa "10.whatever"?
ev3commander il

1
@ ev3commander Tuttavia, questa presentazione non è specificata per produrre un output corretto in python10.
Tyzoid,

Fisso! Lavorare su una versione a prova di futuro, ma Python 1.x non è facile da usare come gli altri: ~)!
sweerpotato,

1
Tutto quello che devo fare è creare un linguaggio che abbia tre versioni principali. In queste tre versioni principali, quando si esegue un file vuoto restituisce il numero di versione principale. Il risultato sarebbe 0/3 ^ 3 = 0 Perfetto.
Braden Steffaniak,

32

3 lingue, 2 byte / 27 = 0,074

1P

Bene, batte almeno metà degli invii: P

1. GolfScript

GolfScript ignora il P, producendo solo il 1. Provalo online .

2. Par

Pè 2-to-the-power-of, quindi 1P = 2^1 = 2. Provalo online .

3. Seriamente

Pdà l'ennesimo primo, zero indicizzato. Ne otteniamo 3 poiché è il secondo primo. Provalo online .


Appunti

Il mio obiettivo iniziale era quello di trovare una risposta valida in 1 byte. Il mio primo tentativo è stato quello \x12che funziona in Bubblegum e gs2 , ma la sfida richiede un minimo di tre lingue. \x13funzionerebbe se esiste una lingua in cui viene prodotto 1.

Rinunciando a una risposta di 1 byte, mi sono spostato su due byte. 3uè una chiamata ravvicinata, in uscita 1 in genera Japt , 3 in GolfScript e 4 in Seriamente, ma è stato difficile trovare un linguaggio che abbia prodotto 2 per colmare il vuoto.

Tutto ciò mi ha impiegato troppo tempo: /


20

6 lingue - 44 byte / 6 ^ 3 = 0,204 ...

Grazie a SnoringFrog per aver salvato 10 byte!

Funziona in:

  • Befunge
  • Pyth
  • Brainfuck
  • Hexagony
  • Lo spazio bianco
  • AniRad v0.2

2# "1",@"-[----->+<]>.*@@@!4<SSTST
T
ST
 >6=

Nota: prima di provarlo online, assicurati di sostituire S con spazi e T con tabulazioni o converti il ​​seguente hexdump in ASCII

32 23 20 22 31 22 2c 40 22 2d 5b 2d 2d 2d 2d 2d 3e 2b 3c 5d 3e 2e 2a 40 40 40 21 34 3c 20 20 09 20 09 0d 0a 09 0d 0a 20 09 0d 0a 20 3e 36 3d

Proverò a usare più linguaggi di programmazione :)

Befunge (stampe 1):

Provalo online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # This puts 2 onto the stack
 #                            # Skips the next op (the space)
   "1"                        # Sets the ASCII value of 1 onto the stack
      ,                       # Pop the last item (1)
       @                      # Terminate program

Pyth (stampe 2):

Provalo online

2# "1",@"-[----->+<]>.*@@@!4<
2                             # Prints 2
 #                            # Infinite while loop until an error occurs
   "1"                        # String
      ,@                      # This gives the error and terminates the program

Brainfuck (stampe 3):

Provalo online

2# "1",@"-[----->+<]>.*@@@!4<
2# "1",@"                     # Since these are not brainfuck ops, these will be ignored
         -[----->+<]>         # Puts "3" on the stack
                     .        # Prints the last item (3)     

Esagonia (stampe 4):

Provalo online

2# "1",@"-[----->+<]>.*@@@!4<   

Una versione più leggibile:

   2 # " 1       # The steps:
  " , @ " -      # 1 (2) - Hexagony starts at the top-left of the hexagon
 [ - - - - -     #       - This immediately puts 2 onto the stack
> + < ] > . *    # 2 (#) - Since the stack is 2, this makes the 2nd pointer the 
 @ @ @ ! 4 <     #       - new current pointer
  > 6 = . .      # 3 (*) - The position of the 2nd pointer is in the left-most
   . . . .       #       - position. This sets the stack to the product
                         - of the two neighbours which is zero
                 # 4 (<) - Changes the pointer direction to west
                 # 5 (4) - Sets the stack to 4
                 # 6 (!) - Outputs the decimal 4
                 # 7 (@) - Terminates the program

Spazio bianco (stampe 5):

Provalo online

Poiché gli altri personaggi vengono ignorati, ma spazi bianchi e tabulazioni, ci rimane quanto segue:

SSTST                 # This pushes 5 onto the stack
T                     # 
ST                    # This prints the decimal

AniRad versione 0.2 (stampa6 ):

In qualche modo funziona per la versione 0.2, ma dà un errore per la versione 0.4. Non ho idea del perché. Puoi trovare la versione 0.2 qui . Per eseguire questo, è possibile copiare e incollare il codice dell'interprete su repl.it ed eseguirlo. Successivamente, è sufficiente incollare il programma su STDIN ed eseguirlo.

2# "1",@"-[----->+<]>.*@@@!4<      # (#)  Starts at the hashtag (starting point)
                                   #      Direction is down
                                   # (>)  When the pointer gets to the '>', it changes
 >6=                               #      its direction
                                   # (6) Puts 6 onto the stack 
                                   # (=) Pushes the result and terminates

1
Più lingue è sicuramente la strada da percorrere credo ... il denominatore cubico è davvero generoso, quindi non dovrebbe essere troppo difficile battere il mio punteggio una volta che hai 5 o 6 lingue.
Martin Ender,

@ MartinBüttner, Sì, anche se non riesco a vedere come aggiungere una nuova lingua
Adnan,

2
@Martin sì, è generoso. Lo scopo del denominatore cubico era incoraggiare fortemente più lingue. Penso che 6 lingue in 50 byte dovrebbero valere la stessa di 5 lingue in 30 byte. :-) diventerà sicuramente più difficile più lingue utilizzerai.
Stewie Griffin,

Il tuo codice degli spazi bianchi potrebbe essere ridotto un po '(e non credo che influenzerà nessuna delle tue altre lingue. (Usando L come avanzamento di riga), invece di quello SSSSSSSSSSTTSTSTLTLSSche hai ora, puoi farlo SSSTSTLTLST. Questo spinge un letterale 5 sul stack, quindi stampa come numero intero.
SnoringFrog

@SnoringFrog Grazie! L'ho modificato
Adnan il

14

6 7 lingue, 32 37 byte, punteggio 0,148 ... 37/7 3 ≈ 0,107872 ...

#7+!"@\"6.@;n5
print(4--int(-3/2)#"
)

Brainfuck-ng

+incrementa la cella corrente, !stampa come intero, @esce. #e" sono NOP.

Python 2

La prima riga è il commento. Utilizzando la divisione intera, calcola4 - -int(-3 / 2) = 4 - -int(-2) = 4 - -(-2) = 4 - 2 = 2 e stampa il risultato.

Python 3

Come il precedente, ma con divisione float. 4 - -int(-3 / 2) = 4 - -int(-1.5) = 4 - -(-1) = 4 - 1 = 3.

Lua

--inizia un commento e #sulla prima riga c'è un commento, quindi sostanzialmente print(4).

> <>

#riflette IP, 5spinge 5, nstampa un numero ed ;esce.

Befunge

#salta sopra +, !annulla logicamente la parte superiore dello stack, "@\"spinge la stringa @\, 6spinge 6, .stampa un numero ed @esce.

Pyth

#avvia un ciclo infinito, eliminando eventuali errori. 7stampa 7, quindi segue +!"string")che in sostanza causa un errore per non avere due operandi per +, terminando il programma.


13

JavaC ++ C, 363/27 = 13.4 ....

Java stampe 1, stampe C ++ 2, stampe C 3. Non infrangere alcun record qui (perché Java), ma mi piace molto il modo intelligente e abusivo di creare un poliglotta in questi linguaggi che ho scoperto.

//\u000a/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*\u002a/
import static java.lang.System.out;
public class P{//*/
/*\u002a/public static void//*/
main(/*\u002a/String[] args//*/
){//\u000a/*
out.print=p;
//\u002a/
out.print(1);}
/*\u002a/}//*/

Questo è un casino. Ecco una ripartizione di come funziona. I letterali Unicode ( \u000a, altrimenti noti come linefeed e \u002a, altrimenti noti come *), vengono espansi dal compilatore Java nei loro caratteri effettivi. Quindi, ecco cosa vede il compilatore Java:

//
/*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/**/
import static java.lang.System.out;
public class P{//*/
/**/public static void//*/
main(/**/String[] args//*/
){//
/*
out.print=p;
//*/
out.print(1);}
/**/}//*/

Tutto ciò che all'inizio è ignorato perché è tutto racchiuso in un commento a più righe ( /* ... */). Successivamente, vediamo che mescolando i commenti a linea singola e multilinea ci consente di controllare esattamente quali parti vengono commentate in ogni lingua. Nel metodo principale, iniziamo un commento su più righe, e poi abbiamo //*/. Di solito, questo sarebbe un commento a riga singola, ma poiché siamo in un commento a più righe, il //non fa nulla, consentendo*/ di chiuderlo.

Questo è il codice Java equivalente, con i commenti rimossi:

import static java.lang.System.out;
public class P{
public static void
main(String[] args
){
out.print(1);}
}

Ecco cosa vede il compilatore C / C ++ (ho rimosso i valori letterali Unicode, dal momento che non sono espansi dal compilatore e quindi non fanno nulla):

///*
#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
//*/
/*/
import static java.lang.System.out;
public class P{//*/
/*/public static void//*/
main(/*/String[] args//*/
){//\/*
out.print=p;
///
out.print(1);}
/*/}//*/

Qui, i commenti a riga singola sovrascrivono i delimitatori di commento a più righe all'inizio, quindi tutti #definei se #includevengono elaborati in anticipo. Successivamente, i commenti su più righe vengono utilizzati per commentare il codice boiletplate per Java. Questo è il codice equivalente, con i commenti rimossi:

#include<stdio.h>
#ifdef __cplusplus
#define o "2"
#else
#define o "3"
#endif
int p(int a){printf(o);}
struct{int(*print)(int);}out;
main(
){
out.print=p;
out.print(1);}

Un trucco poliglotta C / C ++ standard (il #ifdef __cplusplus) viene utilizzato per definire un token ocome uno "2"o "3", a seconda che sia un compilatore C ++ o C che sta compilando il codice. Successivamente, definiamo una funzione pche accetta un singolo intargomento (ignorato) e chiama printf, usando il nostro otoken appena definito . Come al solito, il valore restituito è escluso, poiché non siamo in modalità rigorosa. Successivamente, definiamo a structcon un singolo membro, un puntatore a funzione la cui firma corrisponde a quella pe costruiamo una singola istanza denominata out. Nel metodo principale (tralasciamo il intsolito), l'indirizzo di pviene assegnato a out.print(quindi chiamate di out.printchiamata p) e viene chiamato.

Se C ++ non fosse incluso nelle lingue, potremmo eliminare tutto il codice del preprocessore e definire pcome int p(int a){puts("2");}. Sfortunatamente, C ++ richiede un #includeI / O da fare. Se C non fosse incluso, potremmo eliminare la definizione di pe la #ifdefmacro del preprocessore e definire direttamente una funzione membro structinvece di aver bisogno di un puntatore a funzione. Sfortunatamente, C non supporta le funzioni membro.


12

4 lingue, 28 byte / 64 = 0,4375

print((0 and 3^1or 1/2>0)+1)

1. Python 2

0è falsa ed /è divisione intera, quindi

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0 > 0) + 1 = False + 1 = 1

2. Perl (anche Python 3)

0è falsa ed /è divisione del galleggiante, quindi

(0 and 3^1 or 1/2 > 0) + 1 = (1/2 > 0) + 1 = (0.5 > 0) + 1 = 1 + 1 = 2

3. Rubino

0è vero ed ^è bit per bit, quindi

(0 and 3^1 or 1/2 > 0) + 1 = xor(3,1) + 1 = 2 + 1 = 3

4. Lua

0è vero ed ^è esponenziazione, quindi

(0 and 3^1 or 1/2 > 0) + 1 = pow(3,1) + 1 = 3 + 1 = 4

Nota che Lua e Ruby non possono aggiungere valori booleani come se fossero numeri interi, quindi il loro raggruppamento insieme. Sfortunatamente 0andnon funziona in Lua, quindi non possiamo salvare un byte lì.


Versione precedente a 17 byte che stampa 1 (Lua), 2 (Ruby), 3 (Python / Perl):

print(2^(0 or 1))

-3 byte grazie a @xnor per questa versione, rendendolo molto più ordinato :)


Funzionerebbe 2^(0 or 1)?
xnor

@xnor Ah sì, grazie :)
Sp3000,

8

BFSRS> <> funge93thon123, 73/343 ≈ 0,212827 ...

Brainfuck, Scherzi a parte ,> <>, Befunge-93, Python 1, Python 2, Python 3

# 4['.]@kX21z-[>+<-----]>--.<;n3
import sys;print(3+int(sys.version[0]))

Contiene non stampabili, hexdump (reversibile con xxd -ps -r):

2320345b272e5d406b5832317a7f2d5b3e2b3c2d2d2d2d2d5d3e2d2d2e3c
3b6e330a696d706f7274207379733b7072696e7428332b696e7428737973
2e76657273696f6e5b305d2929

Aggiungerò più lingue (e probabilmente byte) nel tempo. Le lingue nell'intestazione sono elencate in ordine di ciò che stampano. Presuppone celle di avvolgimento a 8 bit e un nastro che non si lamenterà di andare a sinistra della posizione iniziale (avvolgimento o infinito) per Brainfuck.

Brainfuck:

[.]   initial value of first cell is 0, so loop is skipped
-[>+<-----]>--  push 49 (ASCII ordinal of 1)
.     print "1"
<     move to blank cell
[0]   skip loop because cell is 0
      everything else is ignored

Scherzi a parte :

# 4['.]@  does some stuff we don't care about
kX        pop entire stack, push as list, discard (essentially the same as é, but is ASCII so we can use Python)
2         push 2
1z        pop 1 item from stack and print (used instead of . so Brainfuck doesn't print here; same as ü in this scenario, but is ASCII so we can use Python)
0x7f      terminate program
          everything else is ignored

><>:

#    mirror, reverse direction
3n;  push 3, print "3", end (reversed because IP is scanning RTL at this point)
     everything else is ignored

Befunge-93:

#     jump over the space
4['.] push 4, print 4 (brackets and ' do nothing)
@     end program
      everything else is ignored

Python 1 (grazie muddyfish):

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+1=5

Python 2 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+2=6

Python 3 :

# 4['.]@kX21z-[>+<-----]>--.<;n3         comment; ignored
import sys;print(4+int(sys.version[0]))  prints 4+3=7

Python 1 funziona anche. Vedi codegolf.stackexchange.com/a/65652/32686 . Non aggiunge alcun carattere (ma cambia 3in 4)
Blue

8

14 lingue, 73 byte, punteggio = (73/14 ^ 3) = 0.02660349854

#Y2(3`5n~thneo e        ;n@0d c
#   -[>+<"9"L-----]>+.
14  
print(int(15/2))+3

Posso aggiungere altri lang, ma penso che aggiungerò quello che ho qui.

1. Brainbool ; Provalo online!

Il codice pertinente:

    [>+<         ]>+.

               + 

Questo è davvero giusto +.+, che genera 1.

2. Jolf ; Provalo qui!

Il (carattere smette di interpretare il codice sorgente, quindi il codice relavent è:

#Y2

Ciò equivale a (in JavaScript)

var Y = []; toHex(Y); alert(2);

Quali uscite 2.

3. Elemento; Provalo online!

Il codice pertinente:

    3`

Questo lo cattura 3e lo stampa.

4. Brainfuck ; Provalo online!

Il codice rilevante è:

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

  -    -      + 

Qual è il modo standard di generare il codice char di 4 e di emetterlo, e alcune altre cose dopo di esso.

5. Reng; Provalo qui!

~ termina il programma, quindi il codice pertinente qui è:

#Y2(3`5n~

#ridefinisce Yessere la TOS, in questo caso, 0. 2spinge 2; (ruota la pila N volte, facendo scattare N dalla pila; 3`spinge -3; e infine, 5nstampe5 .

6. ETA; Provalo online!

ETA legge solo le lettere E, T, A, O, I, N, S, H, quindi il codice eseguito solo è questo:

       n thneo e         n     


  int int          

Codice super pertinente:

       n thneo

Oppure, in modo equivalente: nthne o. n...eè un valore letterale di base 7 ed thnè il numero di base 7 per 54. ogenera questo carattere. Gli errori di presentazione si esauriscono, ma non so perché.

7. Python 3

Cosa vede:

# comment
# comment
14
print(int(15/2))+3

15/2produce 7,5, così come la /divisione float. int(...)rende il numero un int, che viene quindi stampato. Il programma si spegne quando +3viene rilevato.

8. Julia

Julia vede:

# comment
# comment
14
print(int(15/2))+3

Invece di troncare 15/2, Julia arrotonda per eccesso, producendo 8. Lo stampa, quindi si imbatte in errori nell'incontrare +3.

9. Fissione; Provalo online!

Codice pertinente:

        <"9"L         

Ho avuto questa idea dalla parte di Martin Fission (più come se la rubasse). Linizia una cosa rivolta a sinistra, cattura 9e finisce con <.

10. Spazio bianco; Provalo qui!

Il codice pertinente, traducendo gli spazi in Se le schede in T:

SSSTSTS
T
ST

Spinge 10 nello stack e lo emette come numero ( T\nST).

11. Python 2

Python 2 vede questo:

# comment
# comment
14
print(int(15/2))+3

(int(15/2))+3 viene valutato come 11 e viene stampato.

12. Gol> <>; Provalo qui!

Codice pertinente:

#                      ;n@0d c

Questo usa il trucco usato nella risposta di Martin che @ruota diverse direzioni in> <> e Gol> <>. #specchi, cspinge 12, dspinge 13, 0spinge 0 e @porta cin cima alla pila, quindi viene espulso e stampato con;n .

13.> <>; Provalo online!

Codice pertinente:

#                      ;n@0d c

Anche in questo caso l'utilizzo di quella @ruota diverse direzioni in> <> e Gol> <>. #specchi, cspinge 12, dspinge 13, 0spinge 0 e @porta din cima alla pila, quindi viene espulso e stampato con ;n.

14. Golfscript; Provalo online!

Cosa vede:

# comment
# comment
    14
print(-int(-15/2))+3

Spinge 14, printcorregge ed errori. Rubato ispirato dalla risposta di Sp3000 .


7

Sottosella , Brainfuck e Fob 27 byte / 3 ^ 3 = 1

0#>&$3#<>$-[----->+<]>-.
31

Subskin

0
31

Impostiamo il puntatore dell'istruzione (qui non importa) 0e il registro di uscita su 31. Se il contenuto del registro di output è >= 0, viene emesso il valore contenuto come achar . Tutti gli altri codici vengono ignorati.

Brainfuck

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

Inserisce 3il registro, diminuisce il valore una volta con -e infine emette con. .

fob

#>&$3#<>$

Questo è un po 'più complicato, dal momento che Brainfuck legge anche le istruzioni <e >in Fob. Entriamo in modalità di esecuzione con #e incrementiamo il puntatore di Brainfuck di uno che ci semplifica in seguito. Non abbiamo ancora nulla da eseguire, quindi nulla viene eseguito.

Entriamo nella modalità accumulatore con $, gettiamo in a 3, accediamo di nuovo alla modalità di esecuzione, spingiamo il contenuto dell'accumulatore nello stack con <e infine emettiamo il contenuto con >.

Per evitare che Brainfuck si rovini con il programma entriamo di nuovo in modalità di accumulo con $.


7

7 lingue, 55/7 ^ 3 ≈ 0.16035

Funziona con PowerShell v1, v2, v3, v4 e v5, Foo e Pyth

#7.q"6""
$p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]

Le cifre 1-5 usano una logica simile alla risposta di sweerpotato . La $PSVersionTablevariabile speciale è stata introdotta in PowerShell v2 e contiene un elenco completo di build, revisioni, ecc. Ecco un esempio di output della variabile:

PS C:\Tools\Scripts> $PSVersionTable

Name                           Value                                                                                                                           
----                           -----                               
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.34209
BuildVersion                   6.3.9600.17400
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

In questo codice, lo memorizziamo prima in $pmodo che la lunghezza del codice sia più breve. Quindi, controlliamo la sua esistenza sfruttando la variabile come indice in un array a due elementi:

  • Se la variabile non esiste, PowerShell la creerà in modo dinamico e la assegnerà $NULL, il !cui è$TRUE , o 1, che corrisponde al secondo elemento dell'array, che genera1 .
  • Se la variabile esiste (come nel caso di v2 +), allora !la variabile risulta in $FALSEo0 , che si indicizza al primo elemento, che genera il numero di versione.

Usando Foo per 6, lo sfruttiamo # è un commento in PowerShell, quindi viene ignorato quando lo si esegue in un ambiente PS. Tuttavia, Foo sputerà felicemente il numero 6e quindi procederà attraverso il resto del programma, il che non fa nulla.

Usando Pyth per 7, torniamo 7, quindi usciamo immediatamente .q, quindi il ciclo while-true infinito che è iniziato con #non ha importanza. Dal momento che ci rimane qualcosa che viene stampato in modo implicito. Grazie a @ FryAmTheEggman per questa aggiunta.

Modifica - Giocato a golf una manciata di byte grazie a Mauris Edit - chiarito la spiegazione di Pyth grazie a Sp3000


Che ne dici $p=$PSVersionTable;($p.PSVersion.Major,1)[!$p]? Funziona sul mio Powershell, ma forse non su tutte le versioni precedenti.
Lynn,

7

7 lingue, 287/7 ^ 3 = 0.836

Probabilmente il punteggio più basso che arriva, comunque mi piacciono queste 3 versioni di C polyglot.

Aggiunta la noiosa soluzione Python per qualificarsi almeno per la generosità "3 lingue uniche".

Aggiunto Java abusando delle trigrafi C per diverse interpretazioni dei commenti.

Funziona in:

  • Python 1

  • Python 2

  • Python 3

  • C89

  • C99

  • C ++

  • Giava

versione golfizzata:

/*
*??/
/
#include <stdio.h>
#ifndef __cplusplus
#define true 8/*
import sys
print(sys.version[0])
'''
#*??/
/
#endif
int main(){int a=(true>1)?-6:3;printf("%d",(true//*
+a
//**??/
/+2));}
#define a \
'''
/**\u002f
public class p{public static void main(){System.out.println("7");}}
/**/

Ungolfed:

/*
*??/
/

#include <stdio.h>

#ifndef __cplusplus
#define true 8/*

import sys
print(sys.version[0])
'''
#*??/
/
#endif 

int main()
{
    int a = (true > 1) ? -6 : 3;
    printf ("%d", (true//*
    +a
    //**??/
/
    +2));
}
#define a \
'''

/**\u002f
public class p
{
    public static void main()
    {
        System.out.println("7");
    }
}
/**/

Ok, questo probabilmente sta diventando un po 'noioso e spero che le mie abilità in inglese siano abbastanza buone da spiegarlo ordinariamente.

Prima di tutto spiegherò i diversi tipi di commenti che ho usato per incapsulare le strutture linguistiche ciascuna per conto proprio.

Quindi prendiamo il primo blocco:

/*
*??/
/

Per Java questo è solo l'inizio di un commento su più righe. Ma ... in C99 / 89 / ++ questo valuta

/*
*/

Poiché ??/è una trigrafia per \mentre in C il \personaggio è in qualche modo coerente e consuma persino le interruzioni di riga nella sua funzionalità di comando. Questo fa sì che il risultato di un \nsia semplicemente "visualizzato" anziché essere interruzioni di riga. ciò significa che, dato questo array di byte che rappresenta il primo blocco: [ /] [ *] [ \n] [ *] [ ?] [ ?] [ /] [ \n] [ /] sarebbe dopo la valutazione della trigrafia: [ /] [ *] [ \n] [ *] [ \] [ \n] [ /] Laddove la funzionalità coerente dei \trigger e "consuma" \n, i rimanenti e infine in byte valutati byte sono: [ /] [ *] [ \n] [ *] [ /]

Ma su tutto questo java non sa nulla e tratta tutto ciò che segue come un commento fino a quando questo trucco non viene ripristinato.

(continua!)


7

4 lingue (Befunge-93, Microscript II, Microscript e Foo), punteggio 7/64 = 0,109

"4"1.@2

Befunge: premi 4, premi 1, stampa 1 e termina.

Microscript II: produce la stringa "4", scartala, prendi la radice quadrata di una, scartala e infine imposta x su 2. Questo viene quindi stampato implicitamente.

Microscript: spingi 52 nello stack (che non verrà mai effettivamente utilizzato per il resto del programma), incrementa il registro (inizialmente zero) di uno, quindi incrementa il registro di due. Questo viene quindi stampato implicitamente.

Foo: stampa la stringa "4", quindi premi 2


6

Python 1 | 2 | 3, 27 byte / 27 = 1

print(len("\xabc")+(1/2>0))

L'uso dei numeri di versione di @ sweerpotato mi ha fatto domandare se fosse possibile distinguere i Python in meno. Ecco il migliore che ho trovato.

Spiegazione

Per distinguere Python 3 dalle versioni precedenti, utilizziamo il trucco standard di divisione di interi e divisioni in virgola mobile. (1/2>0) == (0>0)restituisce 0 pre-Python 2.3 o Falseda Python 2.3 in poi e (1/2>0) == (0.5>0)ritorna Trueper Python 3.

Per distinguere Python 1 dal resto, prendiamo la lunghezza della stringa "\xabc", che è la lunghezza uno in Python 1 e la lunghezza due da Python 2 in poi. Perché? Perché

La fuga \ x nei letterali di stringa ora richiede esattamente 2 cifre esadecimali. In precedenza consumava tutte le cifre esadecimali seguendo la 'x' e prendeva gli 8 bit più bassi del risultato, quindi \ x123456 era equivalente a \ x56.

(Dalle novità di Python 2.0 )


6

Python 3, Ruby, Perl, C, C ++, Objective-C 202 byte / 6 ^ 3 = 0.935 ...

Questo è stato abbastanza divertente in realtà, e molto giocare con i booleani.

È possibile tutte le versioni del codice nel seguente sito , copiando e incollando il codice nell'interprete.

#include <stdio.h> /*
print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1
"""""
*/
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}/*
"""
#*/

Python 3, stampe 1

Il trucco è il seguente:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Questo stamperà 1

Rubino, stampe 2

Il codice interpretato per Ruby è:

print ((("0"+"0"==0)and 3) or (0and 2or 1));

Quindi questo stampa 2

Perl, stampe 3

Il codice interpretato per Perl è:

print ((("0"+"0"==0)and 3) or (0and 2or 1));
__DATA__ = 1

Innanzitutto, il __DATA__token indica al compilatore Perl che la compilazione è terminata. Tutto dopo viene ignorato.

print ((("0"+"0"==0)and 3) or (0and 2or 1));

E stampe 3

C, stampe 4

Il codice interpretato è abbastanza diverso dagli altri:

#include <stdio.h>
int main(){putchar(
#ifdef __OBJC__
'6'
#else
#ifdef __cplusplus
'5'
#else
'4'
#endif
#endif
);return 0;}

Questo stamperà semplicemente il carattere 4.

C ++, stampe 5

Lo stesso del codice C.

Questo stamperà il carattere 5 .

Obiettivo-C, stampe 6

Lo stesso del codice C.

Questo stamperà il carattere6 .


5

5 lingue, 18 byte / 5 ^ 3 = 0,144

Funziona a Brainbool , Mathematica , Foo , > <> e Befunge-93 .

4!<n;+Print@2"3".5

Brainbool

Brainbool è come Brainfuck, ma funziona solo su bit e il suo input e output consiste esclusivamente di 0e 1.

4!<n;+Print@2"3".5
  <                   move the pointer to the left
     +                logic not
                .     print the current cell

matematica

In Mathematica, tutto è un'espressione e ha un valore. Print@2stampa 2e restituisce il simboloNull . Successivamente, il codice esegue alcuni calcoli simbolici, ma non stampa nulla.

foo

"3" stampe 3. Non so cosa facciano le altre parti.

> <>

4!<n;+Print@2"3".5
4                     push 4
 !                    skip the next command
   n                  pop and print it as a number
    ;                 end the program

Befunge

4!<n;+Print@2"3".5
4                     push 4
 !                    logical not
  <                   makes the program counter travel to the right
 !                    logical not
4                     push 4
                 5    push 5
                .     pop and print it as a number
             "3"      push the string "3"
            2         push 2
           @          end the program

12 lingue, 35 byte / 12 ^ 3 = 0,0202546 ...

Usando il trucco di sweerpotato , economico ma potente.

Funziona con Brainbool , Mathematica 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 e 10.0 , Foo e > <> .

cn;+"11".Print@Floor@$VersionNumber


5

6 lingue, 38/6 ^ 3 = 0.17592̅5̅9̅

Spazi bianchi , Brainfuck, Ruby, Labyrinth , Foo, Seriamente

Leggenda:

£: tab

: spazio

§: 0x7f

puts•2;#4!@•-[>+<-----]>6.§"5"•£    
£
•£

Questo contiene caratteri non stampabili, quindi ecco il hexdump:

7075747320323b23342140202d5b3e2b3c2d2d2d2d2d5d3e362e7f22352220090a090a20090a

Spiegazione:

Lo spazio bianco

Provalo online. (Nota: il mio programma omette la chiusura di tre avanzamenti di riga per terminare il programma, l'ho scritto / testato su Whitelips e questo produce l'output corretto lì, ma non su Try It Online, quindi al programma collegato sono aggiunti quei due caratteri. come posso dire, alcuni interpreti ti permettono di farlo, altri rimangono bloccati in un ciclo infinito senza la terminazione esplicita)

(omettendo i caratteri ignorati)

spacespacespacetabenter: spingere un 1 sulla pila

tabenterspacetab: genera la parte superiore dello stack

Rubino

Non dovrei aver bisogno di spiegazioni. Stampa 2, considera il resto di quella riga (ergo, il programma brainfuck) come un commento, tratta il resto del file come vuoto.

Brainfuck

Provalo online.

Richiede un interprete che supporti underflow. Sottopassa la prima cella a 255 quindi usa quella per un contatore di loop per generare 51, che è il codice ASCII per 3.

Labirinto

Provalo online.

(omettendo le ultime due righe per leggibilità perché non vengono mai raggiunte)

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•                            skipped
     2                           push 2 onto stack
      ;                          pop 2 from stack
       #                         push current stack depth (0) to stack
        4                        push 4 to stack
         !                       print top of stack as integer
          @                      program terminates

foo

Provalo online.

L'unica cosa che influenza l'output è "5", che stampa 5.

Sul serio

Provalo online.

puts•2;#4!@ -[>+<-----]>6.§"5"•£
puts•2;#4!@ -[>+<-----]>           assorted stack manipulation that doesn't affect this program
                        6          push 6 to the stack
                         .         output top of the stack
                          §        (0x7f) terminate program

5

5 lingue, Chaîne , Minkolang , Foo , Brainf ** k-ng e Vitsy , 21/5 ^ 3 = 0.168

2|<«+!@"3".N+m

5N»

Brainf ** k-ng

2|<«+!@"3".N+m

5N»
  <            go left (should still be ok)
    +!         output 1
      @        halt execution

Chaîne

2|<«+!@"3".N+m

5N»
2              «add 2 to the current string»
 |<            «take off and put on the string (no op)»
   «           «comment»

  »
               «implicit output»

foo

2|<«+!@"3".N+m

5N»
       "3"     print three

Minkolang

2|<«+!@"3".N+m

5N»
2              C push 2 to the stack [2] C
 |             C mirror C
2              C push 2 to the stack [2,2] C
             m C ignored C
            +  C add top two [4] C
           N   C output C
          .    C terminate program C

Vitsy

2|<«+!@"3".N+m

5N»
2              push 2
 |             mirror
2              push 2
             m pop 2, goto line 2
5              push 5
 N             output 5
  »            ignored

Probabilmente posso aggiungere> <> o qualcosa del genere.


1
Sai, non ho mai trovato un buon uso per il mirror. xD
Addison Crump il

5

Craneflak , Brain-Flak Classic , Rain-Flak , BrainHack , Brain-Flueue , miniflak , miniHack : .1020

(([]()()()<()()()>)()()){}#{}({}())

Provalo online!

Spiegazione

La prima cosa che succede qui è che c'è una differenza nel modo in cui i commenti vengono letti tra gli interpreti BrainHack, CraneFlak e Rain-Flak. Craneflak non ha commenti, in Rain-Flak #commenta il resto della linea e in BrainHack #{...}commenta gli interni.

Quindi, ecco cosa legge ogni lingua:

Rain-Flak: (([]()()()<()()()>)()()){}         -> 3
BrainHack: (([]()()()<()()()>)()()){}({}())   -> 4
Craneflak: (([]()()()<()()()>)()()){}{}({}()) -> 1

La prossima cosa è la differenza tra le scaglie di cervello e le miniflak. Sia Rain-Flak che BrainHack supportano il miniflak, in cui tutte le operazioni extra vengono semplicemente rimosse. Ciò significa che perdono il []e<...>

Rain-Flak: (()()()()()())         -> 6
BrainHack: (()()()()()())({}())   -> 7

Successivamente abbiamo la differenza tra Brain-Flak e Brain-Flak Classic. In classico []è-1 invece l'altezza dello stack, il che significa che il nostro risultato è 1 in meno rispetto al normale Rain-Flak, rendendolo 2.

Infine abbiamo la differenza tra brain-Flak e brain-fumi. Nella fuga dei cervelli viene utilizzata una coda anziché una pila. Normalmente il cervello-flak spinge 3 poi 5 e fa esplodere il 5, tuttavia nella canna fumaria il pop si libera del 3 e non del 5.


4

Via Lattea 1.0.2 , CJam e STXTRM , 20 byte / 3 ^ 3 = 0.741

Immagino che ci sia almeno un'altra lingua che potrei aggiungere.

'2"3""1"1<<1>;;"2"3;

Spiegazione


Via Lattea ,1

Nella Via Lattea, le stringhe sono indicate solo da coppie di virgolette doppie. Una singola citazione legge l'input dalla riga di comando; se non ce n'è, spinge una stringa vuota. I segni maggiore o minore dei segni ruotano l'intero stack verso destra e verso sinistra, rispettivamente. Infine, un punto e virgola scambia i primi due elementi dello stack.

Ecco una visualizzazione dello stack (lo stack mostrato è il risultato dell'operazione elencata dopo che si è verificato):

["", 0]                                             #  default stack

["", 0, ""]                                 #   '   #  read input from command line
["", 0, "", 2]                              #   2   #  push 2 to the stack
["", 0, "", 2, "3"]                         #  "3"  #  push "3" to the stack
["", 0, "", 2, "3", "1"]                    #  "1"  #  push "1" to the stack
["", 0, "", 2, "3", "1", 1]                 #   1   #  push 1 to the stack
[0, "", 2, "3", "1", 1, ""]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0]                 #   <   #  rotate the stack leftwards
["", 2, "3", "1", 1, "", 0, 1]              #   1   #  push 1 to the stack
[1, "", 2, "3", "1", 1, "", 0]              #   >   #  rotate the stack rightward
[1, "", 2, "3", "1", 1, 0, ""]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0]              #   ;   #  swap the top two stack elements
[1, "", 2, "3", "1", 1, "", 0, "", 2]       #  "2"  #  push 2 to the stack
[1, "", 2, "3", "1", 1, "", 0, "", 2, "3"]  #   3   #  push "3" to the stack
[1, "", 2, "3", "1", 1, "", 0, "", "3", 2]  #   ;   #  swap the top two stack elements

CJam ,2

In CJam, le stringhe sono anche indicate da coppie di virgolette doppie. Una virgoletta singola inserisce il codice carattere del seguente carattere. Quando viene emesso un codice carattere, viene emesso come carattere corrispondente. I segni maggiore di e minore di agiscono come previsto, valutando l'ordine dei primi due elementi dello stack. Infine, un punto e virgola scarta l'elemento stack superiore. Al termine del programma, vengono emessi i contenuti dello stack.

Ecco una visualizzazione dello stack (lo stack mostrato è il risultato dell'operazione elencata dopo che si è verificato):

[]                         #  default stack

['2]               #  '2   #  push the character code of "2" to the stack
['2, "3"]          #  "3"  #  push "3" to the stack
['2, "3", "1"]     #  "1"  #  push "1" to the stack
['2, "3", "1", 1]  #   1   #  push 1 to the stack
['2, "3", "1"]     #   <   #  leave the greater of the top two stack elements on the stack
['2, 0]            #   <   #  leave the greater of the top two stack elements on the stack
['2, 0, 1]         #   1   #  push 1 to the stack
['2, 1]            #   >   #  leave the lesser of the top two stack elements on the stack
['2]               #   ;   #  pop the top stack value
[]                 #   ;   #  pop the top stack value
['2]               #  "2"  #  push the character code of "2" to the stack
['2, "3"]          #   3   #  push "3" to the stack
['2]               #   ;   #  pop the top stack item

STXTRM ,3

In MSM, tutto ciò che non è un operatore viene inserito nello stack come personaggio. Un punto e virgola duplica l'elemento superiore dello stack. Il programma continua fino a quando non ci sono più operatori o non c'è un singolo elemento nello stack.

Il personaggio finale in pila è 3, che è duplicato dall'operatore finale. 3è l'elemento più in alto alla fine del programma, quindi viene emesso.


4

5 lingue, 18 byte / 5 ^ 3 = 0.144

Ouroboros , Pip , QBasic, Foo e Pyth

5'"4"()"
1?3'@n()2

1. Ouroboros

Ogni riga del programma rappresenta un serpente che si mangia la coda.

Snake 1

Push 5, 'è un no-op, push 52(codice ASCII di "4"). (fa sì che il serpente faccia apparire un numero e mangi tanti personaggi della sua coda. Poiché ciò comporta la deglutizione del puntatore dell'istruzione (e dell'intero serpente), l'esecuzione si interrompe.

Snake 2

Push 1, push un numero casuale (? ), push 3, 'è una no-op. @ruota la 1parte superiore della pila e la nemette come numero, lasciando la parte 3superiore della pila. Quindi (mangia così tanti personaggi dalla fine del serpente, ingoiando il puntatore delle istruzioni e fermandosi.

Puoi eseguire questo programma online nell'interprete Stack Snippet qui .

2. Pip

Gran parte del programma consiste in espressioni che vengono valutate e scartate:

  • 5
  • '" (carattere letterale)
  • 4
  • "()"
  • 1?3'@ (espressione ternaria)
  • n (variabile, = newline)
  • () (Nil)

Infine, 2viene stampata l'ultima espressione .

3. QBasic

Tutto dopo 'è un commento. La prima riga si riduce quindi a 5un numero di riga. Sulla seconda riga, 1è un numero di riga ed ?3è una scorciatoia per PRINT 3.

(Apparentemente avere i numeri di riga fuori servizio non è un problema, anche se sarebbe facile correggerlo se lo fosse.)

4. Foo

Quasi tutto è vietato. "4"stampe 4. Le parentesi (x2) sono un ciclo che funziona fino a quando la cella dell'array corrente è zero, il che è immediatamente vero e il ciclo termina. @, quando non è seguito da un numero, assume il valore della cella dell'array corrente (inizializzato su 0) e lo inserisce nello stack.

Non sono del tutto sicuro di come "debba essere gestita la seconda, senza eguali . La versione online sembra aggiungere una nuova riga all'output, che le regole della sfida consentono.

5. Pyth

5viene emesso. Quindi si incontra il programma '"4", che tenta di leggere da un file denominato 4. Finché non esiste un file del genere, penso che questo dovrebbe terminare il programma con un errore. (La versione online dice: name 'open' is not definedsuppongo perché l'apertura dei file non è consentita online.)

Il randagio "alla fine della riga 1 garantisce che la riga 2 non causi un errore di sintassi prima dell'esecuzione.



@Dennis Grazie! La pagina Esolangs non aveva un link a quell'interprete.
DLosc

Ecco l' indice delle lingue attualmente disponibili. Se mai vuoi che ne aggiunga uno, eseguimi un ping in chat.
Dennis,

4

4 lingue, 24 byte, 24/4 ^ 3 = 0.375

print(1//0.5--1+1/2*2
);

1. PHP

PHP viene eseguito print(1); che è uguale a 1

2. Lua

Lua esegue print(1//0.5); che è uguale a 2

3. Python 2

Python 2 viene eseguito print(1//0.5--1+1/2*2); che è uguale a 3 (divisione intera)

4. Python 3

Python 3 esegue print(1//0.5--1+1/2*2);che è uguale a 4 (divisione float)


Bella risposta, mi piacciono le risposte in lingue convenzionali :-) spero che ti divertirai a giocare a golf su ppcg :-) per favore prova una qualsiasi delle mie precedenti sfide se pensi che siano interessanti :-) alcune sono un po 'complicate e altre sono più di base :-)
Stewie Griffin

Potresti essere interessato alla generosità di 100 rappresentanti aperta descritta nella sfida. Outgolf Sp3000 (28 byte, 4 lingue) utilizza solo lingue convenzionali (definite nel collegamento) ed è tuo :-) purtroppo Python 2 e 3 non sono considerati unici nella sfida di taglie.
Stewie Griffin,

3

Brainfuck-ng, Foo,> <>, 9 byte / 3 ^ 3 = 0.333 ...

#+!"2";n3

Brainfuck-ng

Gli unici personaggi che riconosce sono +e !:

+ Increment cell by one
! Print as integer

stampe 1

foo

Stampa tutto tra virgolette.

"2"

stampe 2

> <>

#Specchia il punto a sinistra, 3spinge 3 nello stack, lo nemette come numero intero, ;arresta il programma.

#      ;n3

2

3 lingue, 82 83/3 ^ 3 = 3.074 ...

Funziona in ??? , Whitespace e Beatnik . O meglio, dovrebbe funzionare in quelle lingue ma non sarò in grado di testarle per alcuni giorni. Comunque, ecco il codice:

K... Jax... Jy... Jy...   ...
My...    My...
... ...     ......................XO!

1. ???

.................................................!

??? è sostanzialmente brainfuck ma usa la punteggiatura comune come comandi invece dei caratteri tradizionali. .incrementa la cella di memoria corrente, che viene eseguita 49 volte. !prende la cella di memoria corrente e la stampa come personaggio, qui 1.

2. Spazio bianco

[Space][Space][Space][Tab][Line Feed]
[Tab][Line Feed]
[Space][Tab]

Lo spazio bianco è un linguaggio che ignora tutti i caratteri non di spazio bianco. Qui l'ho convertito in un modulo facilmente leggibile. La prima riga viene inserita 2nello stack e le seconde due righe stampano la parte superiore dello stack come un numero, qui 2.
Si noti che nel codice combinato ho sostituito le schede con quattro spazi a causa di limitazioni tecniche.

3. Beatnik

K Jax
Jy Jy
My My
XO

Beatnik è una lingua in cui ogni parola viene convertita nel suo punteggio Scrabble, quindi quei punteggi vengono interpretati come comandi. La prima riga viene inserita 17nello stack. La seconda riga duplica la sommità della pila due volte e la terza riga aggiunge all'inizio di elementi della pila insieme due volte, triplicando efficacemente 17in 51. L'ultima riga stampa il personaggio in cima alla pila, qui 3.
Nota che sto usando Beatnik su Face Value, supponendo che non ci sia un errore nelle specifiche Beatnik originali. Si noti inoltre che sto usando il sistema di punteggio Scrabble inglese nordamericano.

Se ormai non è chiaro, ognuna di queste lingue accetta solo un certo tipo di carattere (punteggiatura, spazi bianchi e lettere, rispettivamente), quindi scrivere questo poliglotta è facile come scrivere i singoli programmi. L'unico vero "trucco" è usare il codice degli spazi bianchi per separare le parole da Beatnik. Oltre a ciò, i singoli programmi non si sovrappongono affatto.


2
3 ^ 3 = 27 ==> 82/27 = 3.037037037037037 ...
AdmBorkBork

1
Il tuo codice degli spazi bianchi stampa 0, non 2. Testato qui e qui .
Dennis,

@Dennis Grazie, avevo omesso il segno.
Mike Bufardeci,

2

5 lingue, 175/5 ^ 3 = 1.4

Ho deciso di pubblicare una risposta diversa poiché la generosità sta cambiando i requisiti in un modo che mi ha fatto sentire insicuro con la mia prima risposta (ma che mi soddisfa ancora nel modo della sfida generale!)

Quindi ecco la mia soluzione che si qualifica per la sfida di taglie:

Si compila in

  • C99
  • objC90
  • C ++ 0x
  • Rubino
  • Perl
#if __cplusplus
#define x\
=begin\
=pod
#endif
int a=
#ifndef x
1//**/
+1
#else
3
#endif
;int main(){printf("%d",a);}
#ifdef f
=end
puts 5;
=begin
=cut
print"4";
=end
#endif

2

3 lingue, 15 byte, punteggio 0,555 ...

Aggiungerò altre lingue in seguito.

2//1+1#😅😨

1. Emotinomicon

Emotinomicon praticamente ignora qualsiasi testo che non sia una stringa. 😅spinge 1 per impilare ed 😨emette il TOS come numero.

2. Javascript

I commenti in Javascript iniziano con //, quindi 2viene eseguita solo la parte.

3. REPL Python 2/3

I commenti in Python iniziano con #, quindi 2//1+1viene eseguita solo la parte. //è la divisione intera in Python 3, ed è la stessa /di Python 2. 2 diviso per 1 è 2, più 1 è 3.


2

4 lingue, 97 byte, 0.37890625

s="1";s=~-3;2//2;'''/.to_s.ord;"=;print 4;
__DATA__
=1;
";#'''#";print=s=>console.log(3)
print(s)

Rubino

Questo imposta sa "1", paragona utilizzando =~contro -3in un contesto vuoto, tenta di dividere 2da /2;'''/.to_s.ordallora inizia una nuova stringa contenente =;print 4; __DATA__ =1;, colpisce un commento, allora prints sche è ancora 1.

Pitone

Imposta s a "1"come sopra, quindi imposta nuovamente per ~-3cui è 2. Eseguiamo una divisione intera di 2//2, quindi c'è una docstring contenente /.to_s.ord;"=;print 4; __DATA__ =1; ";#, seguita da un commento, infine printing s, che è ancora 2.

JavaScript

Imposta s su "1"quindi imposta nuovamente ~-3come sopra, quindi c'è 2sulla riga seguita da un commento. Quindi impostiamo la variabile __DATA__su 1. C'è una breve stringa contenente ;#'''#seguita da una definizione della funzione printche codifica l'output su 3, che viene chiamato sulla riga successiva.

Perl

Esegue una sostituzione equivalente a s/"1";s/~-3;2\/\/2;'''\/.to_s.ord;"/, prints4 ed il resto della stringa è mascherato dietro l' __DATA__identificatore.


2

QBasic, QBIC e> <>, 18 byte / 3 ^ 3 lingue = 0,66666 punti

1:?v+1'-5`
''`>3n;

Abbattersi:

1. QBasic ( Ottieni l'IDE )

1:          Line number 1
  ?         Print
   v+1      undefined var v = 0 + 1 = 1
'-5`        The rest of theis code is a QBasic comment
''`>3n;     As is this

2. QBIC ( Ottieni l'interprete )

1     inserts a 1 in the code - mostly harmless
:     Reads from the cmd line. Nothing there, creates an empty variable a
?     Print
v+1   v is initialised to 6, +1 = 7
'     Code Literal: everything till the ` is passed to QBasic without processing
 -5`  7-5 = 2

''`>3n; Code literal with the first literal being a ': comment in QBasic

3.> <> ( Provalo online )

1:  Push a 1 on the stack, duplicate stack
?   Pop top off the stack and skip next instruction if that's a 0
v   Move downwards - rest of the line is ignored

>   move to the right
3   Push 3 onto the stack
n   Print the top of the stack as a number
;   End the program

1
Penso che tu voglia cubare il numero di lingue nella tua partitura (es. 18 / (3 ^ 3))
drogato di matematica

1

JavaScript, HTML e PHP, 72 byte / 3 ^ 3 = 2.67

1<!top?2:2//><!--<?='--'.'><script>document.body.innerHTML=3</script>'?>

In HTML, questo stamperà il 1 principale, ignorerà il <!window?2:2//>tag e il resto sarà un commento HTML.

In JavaScript, valuta 1<!window?2:2e genera 2 (questo deve essere eseguito in una console) e il resto è un commento.

In PHP, dal server viene generato quanto segue: 1<!top?2:2//><!----><script>document.body.innerHTML=3</script>che sostituisce HTML 1con 3.


1
Benvenuto in PPCG.SE! Ottimo primo post! Due cose: di solito non ci piacciono le risposte basate su REPL (il programma Javascript). Inoltre, il codice PHP non sembra funzionare quando lo inserisco in un interprete online , come funziona esattamente il PHP?
GamrCorps il

Grazie! Bene, è tecnicamente PHP + HTML (cioè se questo è il codice sorgente per code.php, visitare il sito / code.php in un browser visualizza 3.
cuniculus

Provalo qui: mowbl.com/se.php .
Cuniculus,
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.