Scrivi un programma in incognito [chiuso]


14

La sfida è creare un programma che risolva i problemi di HQ9 + e che assomigli ad un'altra lingua.

Nota : questa non è una sfida di golf.

Regole:

  • Il programma deve eseguire una delle seguenti attività quando eseguito.
    • Stampa "Ciao, mondo!"
    • Stampa la sua intera fonte.
    • Stampa il testo di "99 Bottles of Beer on the Wall" (come mostrato qui ).
  • A prima vista il programma dovrebbe apparire come un'altra lingua.

grading

  • Programma di lavoro che soddisfa le regole. +3
  • Punti bonus se è possibile eseguire l '"altra lingua" (sintassi valida). +1
  • Ancora più punti se l '"altra lingua" può fare qualcosa di utile. +3
  • Molti punti bonus per il programma sono validi (e utili) in ancora più lingue. +5 per ogni lingua superiore a 2.

1
Come vengono classificati? Hai bisogno di un criterio oggettivo. Controlla qui: codegolf.stackexchange.com/help/on-topic
MrZander

Ok, sto aggiungendo un sistema di punti.
Kevin Cox,

1
Quindi ... stai cercando un poliglotta ?
Iszi,

Sì. Ma con l'accento sul "nascondere" le caratteristiche di tutte le lingue tranne una in una certa misura.
Kevin Cox,

4
print ("Hello, World");di per sé verrà eseguito in molte lingue
Marin il

Risposte:



18

Rubino + C + Spazio bianco.

Questo programma è C ma sembra (e funziona come) Ruby. Sono anche riuscito a buttare dentro degli spazi bianchi.

C stampa la propria fonte (purtroppo non proprio una quinta). Ruby stampa 99 bottiglie di birra e gli spazi bianchi salutano.

#include <stdio.h>  
#define def int          
#define beer main(int i){char b[1024];          
#define print(v) print(int v){            
#define end ;}                
#define if(x) fputs(b,stdout); fgets(b,1024,f); if(x){               
#define else ;} else{                       
#define puts                    
#define print        
#define open(fn) FILE *f = fopen(fn,"r");             
#define while(x) fgets(b,1024,f); while(!feof(f)){                      


def beer                
    # define beer      

    open("test.c")

   i=100;


    while ( i >= 0 )
        if ( i > 0 )
            print "#{i} bottle#{i==1&&''||'s'} of beer on the wall, "
            puts  "#{i} bottle#{i==1&&''||'s'} of beer."
            print "Take one down and pass it around, "
            puts  "#{i-1} bottle#{i==2&&''||'s'} of beer on the wall."
            puts
        else
            puts "No more bottles of beer on the wall, no more bottles of beer."
            puts "Go to the store and buy some more, 99 bottles of beer on the wall."
        end
        i -= 1
    end

    return 0      
end

beer

E dal momento che SO non è molto carino per noi ecco un link .


15

Golfscript / HQ9 +

9

Un quine Golfscript che funge anche da programma HQ9 + che stampa i testi su 99 bottiglie di birra.

So che questa non è una sfida di golf, ma non ho resistito al desiderio di rispondere con un personaggio.


1
Ed ero abbastanza sciocco da presumere che HQ9 + non potesse assomigliare ad un'altra lingua: D
Kevin Cox,

5
Sì! E follemente sembra risiedere il numero "9".
Pierre Arlaud,

7

Perl, 7 punti

99 <?php
for($i='no more',$_="`\2l\";7hF'`-{9\17p\t\2ZY\14fE\25T\133J`\35l\"76~\x3";
99>${2}="$i bottle".(${$i+=1}<'))'?+s?:s:!'((').' of beer';
${3}="
Take one down and pass it around, ${1}.

".ucfirst("${1}, ${2}.${3}"))${1}=$i||${2}?"${2} on the wall":'?;\'';
print substr("${1}, ${2}.${3}".
($_^"jE\3\2OXH2O\5\15\10M$_").", ${2} on the wall.",3,13*$i*$i);

Questo è un programma Perl che stampa Hello, World!.

Analisi del punteggio:

  • Segue tutte le regole: +3
  • Sintassi valida in un'altra lingua: +1
  • Fa qualcosa di interessante nell'altra lingua: +3

Nota a margine:

Una volta che sai cosa fa, può sembrare "ovvio" dove è in giro, ma questo è un inganno.

Il seguente:

$_="`\2l\";7hF'`-{9\17p\t\2ZY\14fE\25T\133J`\35l\"76~\x3";
print$_^"jE\3\2OXH2O\5\15\10M$_"

produrrà:

Go to the store and buy some moreET[J`l"76~

7

JavaScript, 7 punti

<!--
h='Hello, World!'
-->

/******<br>

<b>Hello, World!</b><br>

*******<br>

This is my <i>awesome</i> Hello World page<br>

*******<br>

Look I can make images I'm so good at HTML:<br>
<img src='http://pieisgood.org/images/slice.jpg' alt='awwww you cannot see my amazing image' /><br>
<hr>

These are the things this page has:<br>
<ul>
<li>Bold</li>
<li>Italics</li>
<li>Images</li>
<li>Lists</li>
</ul><br>

I like random characters! That's what this page will finish with:<br>
;37!&$89]"]0(!)89^!&8*/81+-0;h

Quando eseguito in JavaScript, produce "Hello, World!"

Se visto come HTML, si presenta così:

immagine dello schermo

punteggio

  • Programma di lavoro che soddisfa le regole +3
  • La sintassi di un'altra lingua è valida +1
  • L'altra lingua fa qualcosa di utile (puoi inserire qualsiasi HTML tu voglia) +3

Delicato! Ciò presuppone tuttavia che l'implementazione che lo sta valutando stdout stampi su stdout il valore di completamento dell'ultima istruzione.
FireFly,

@FireFly sì, ecco cosa fanno evaltutte le console.
Maniglia della porta

evalnon lo stampa su stdout; lo restituisce come risultato dell'espressione della chiamata di funzione. Ma sì, sto solo scherzando; spiacente. : p
FireFly,

6

C ++ / Python

#include <iostream>

#define print(a) int main() {std::cout << a << std::endl;}

print("Hello, World!")

Verrà eseguito in Python (entrambi 2.xe 3.x) e compilato in C ++ per la stampa (con ritorno a capo):

Ciao mondo!


5

Quanto segue stampa "Hello, World" (e una tabella casuale) in HTML e "Hello, World!" nello spazio bianco .

<html>             
<head>  
<title>                     
Hello,World!    
</title>                      
<body>  
<p>                       
Hello,World!    
</p>                            
<table> 
<caption>                 
Summary 
</caption>           
<tbody> 
<tr>                            
<th>Year</th>   
<th>Revenue</th>                            
</tr>   
<tr>                     
<td>2012</td>   
<td>$100,000</td>                     
</tr>   
</tbody>                  
</table>    
<footer>                
HTML5!  
</footer>  
<!--Comment-->
</html>

Puoi trovare una versione di "99 Bottiglie" qui 99-bottles-of-beer.net/language-whitespace-154.html
Davio

5

PHP, HQ9 +, Brainfuck e Bash (23 punti, credo)

Sembra PHP, ma ...

Abuso di reindirizzamento e virgolette STDERR.

what the >&_@ is a "<?php
//Boring, really ( ;[ ). This just prints Hello World!"
echo "Hello, World!"; //]&> are random characters that I like putting in"
?>" program?

Questo funziona e fa cose in tutte le lingue elencate, ma sembra un codice PHP (leggermente strano).

In Bash, stampa semplicemente "Ciao, mondo!" (creando file spazzatura lungo la strada).

In HQ9 +, stampa Hello World alcune volte (una volta per ogni occorrenza di Ho h).

In Brainfuck, è un "programma cat": legge dallo standard input e trasmette il suo input allo standard output ( ><,[.,]>>).

In PHP, stampa del testo:

che cosa> & _ @ è un "Ciao, mondo!" programma?

Spiegazione Bash

>&_@è mascherato da un testo innocuo che sostituisce una maledizione, ma in realtà è un reindirizzamento di STDERR al file _@, in modo che Bash non si lamenti del fatto che whatnon sia un programma valido. Mangia anche il is a <?phpbit e il primo commento.

Il primo commento ha una citazione alla fine (le virgolette sono lì per impedire <?phpl'esecuzione). echo "Hello, World!";funziona normalmente in entrambe le lingue. Il prossimo commento serve a nascondere un'altra citazione e c'è un reindirizzamento dell'output da STDERR al file are, per utilizzare il messaggio "//: Is a directory".

Poiché la chiusura ?>è tra virgolette, non viene eseguita e viene mangiata insieme al secondo commento e al bit successivo.


4

JavaScript, 3p

<!--
$res = Array();
$ks  = Array("", "", "");

function convert($x) { return $x["toString"](36); }
for ($i=0; $i < 1000000; $i++) {
  this[convert($i)] = $i;

  if ($i == 626 || $i == 777 || $i == 865 || $i == 1176 || $i == 35761)
    $res[$res.length] = convert($i);

  if ($i == 381  || $i == 19145) $ks[0] += convert($i);
  if ($i == 19   || $i == 31775) $ks[1] += convert($i);
  if ($i == 1033 || $i == 27893) $ks[2] += convert($i);
}
this[$ks[0]]($res[$ks[1]]("")[$ks[2]](1)[$ks[1]](" "));
-->

yay

<h1>hi</h1>   /// heading
<p>lol</p>    /// content

Maschera l'output di un server Web non configurato correttamente, come (qualcosa che a prima vista sembra) disordine PHP + HTML .

Questo è iniziato in piccolo ma è diventato più grande mentre ho cercato di rendere meno ovvio ciò che fa (quando valutato come JS) ... potrebbe essere diventato più offuscato del compito previsto, mi dispiace per quello. Comunque, la cosa principale che volevo includere era il mio trucco per incorporare (un sottoinsieme di) HTML in modo che fosse anche un codice JavaScript valido, che è quello che vedi alla fine del codice.

Modifica: oh, dovrei menzionare, quando eseguito in un contesto di un sito Web, il codice avvisa "ciao mondo" .


Ah, adoro il simbolo del dollaro. Anche l'html javascript è davvero fantastico.
Kevin Cox,

Hehe, il trucco con HTML javascript è che <e> sono confronti, /.../ è un regex letterale (quindi le triple barre per i commenti ..) e JS non si preoccupa un po 'dei tipi.
FireFly,

2

Python / PHP / Lua / Perl / Perl 6 / Ruby / JavaScript / HQ9 + (37 punti)

print("Hello, World!")

Sembra "Hello, World" in Python, ma in realtà è un quine scritto in PHP. Funziona anche in JavaScript (SpiderMonkey), Lua, HQ9 +, Perl, Perl 6 e Ruby, per ottenere punti bonus.


2

JavaScript / Python 3 / PHP / Lua / Brainfuck / bash

Sembra ... Umm ... PHP offuscato?

#!,[.,]
echo = --[[0] ] [0][0] //1#>/dev/null;echo Hello, World!;exit # ]]0
--[[0] ] [0][0] //1#<?php for ($i = 99; $i > 1;) { printf("%d bottles of beer on the wall, %d bottles of beer.\nTake one down and pass it around. %d bottle%s of beer on the wall.\n\n", $i, $i, --$i, ($i != 1 ? "s" : "")); } print("1 bottle of beer on the wall, 1 bottle of beer.\nTake on e down and pass it around. No more bottles of beer on the wall.\n\nNo more bottles of beer on the wall, no more bottles of beer.\nGo to the store and buy some more. 99 bottles of beer on the wall.\n"); die(); ?>
2//2; print("Hello world!"); exit();"""
console.log("Hello, World!");/*]]
f = io.open(arg[0])
print(f:read("*a"))
--[[*///]]--"""
  • Se lo esegui in bash, JavaScript o Python, verrà stampato "Hello, World!"
  • Se lo esegui in Lua, stamperà il codice sorgente dello script (se fornito come primo argomento a lua ).
  • Se lo esegui in PHP stamperà i testi di 99 bottiglie di birra
  • Se lo esegui come Brainfuck, funzionerà come cat.

Punteggio: 27

  • Segue le regole: 3
  • È possibile eseguire un'altra lingua: 1
  • Fa qualcosa di utile: 3 (programma cat)
  • Funziona anche in JS / Python 3 / Lua / bash: 20

Spero di non piegare troppo le regole :)


0

Java scritto in C ++

#include <stdio.h>

typedef char* String;

class P{
public:
    static void println(String s){
        puts(s);
    }
};

class S{
public:
    P out;
};


int main()
{
    S System;
    System.out.println("Hello world!");
    return 0;
}

Ottieni 3 punti.


0
print`open(__file__).read()`, 1000 // len('''
/* Calculate code conciseness score for some random JavaScript */

function print() {
    console.log('Hello, world!');
}

<!--''') # ASCII submarine

Sembra Python 2 e funziona come Python 2, stampando la propria fonte in forma letterale di stringa Python, nonché un punteggio di concisione del codice di qualche tipo! Quando eseguito come ES6, tuttavia, stampa "Ciao, mondo!".

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.