O Real Programmer determinado pode escrever programas Fortran em qualquer idioma.
de programadores reais não usam Pascal
Sua tarefa é escrever o programa na sua linguagem de programação preferida, mas você pode usar apenas outra linguagem. Ou seja, jogue fora todas as convenções de codificação de um idioma e substitua-as por convenções de codificação de outro idioma. Quanto mais melhor. Faça com que seu programa pareça ter sido escrito em outro idioma.
Por exemplo, um fã de Python que odeia Java pode escrever o seguinte programa Python em Java:
void my_function() {
int i = 9 ;
while(i>0) {
System.out.println("Hello!") ;
i = i - 1 ;}}
O entusiasta de Pascal forçado a usar C poderia escrever o seguinte:
#define begin {
#define end }
#define then
#define writeln(str) puts(str)
if (i == 10) then
begin
writeln("I hate C");
end
Você tem que escrever um programa completo. O programa não precisa fazer nada de útil.
Boa sorte. Este é um concurso de popularidade, portanto o código com mais votos vence!
fonte
.litcoffee
. Isso pode ajudar.Respostas:
C em C ++
fonte
char*
vez destd::string
).char *argv[]
!montagem x86 no GNU C
Não, não usei apenas a
asm
palavra - chave, já que a pergunta estabelecida é para programadores reais ... isso deve funcionar bem no ARM.(Apenas para provar o ponto, eu não "escrevi" o assembly - é a saída produzida por
GCCClang (503.0.38) para o código comentado no topo, traduzido cegamente em macros.Isso funciona apenas no modo de 32 bits. Tudo bem, já que os programadores reais codificam para o tamanho da palavra de qualquer maneira.
Basta olhar para todos os elencos. Elenco significa que eu sou um programador mais real que o compilador, certo?
fonte
call
, em particular.for pass=1:3...next
. Executá-lo no intérprete BASIC o montou.Inglês em C
Alguma idéia para eliminar o
;
?fonte
the
duas vezes?#define . ;
Brainfuck em JavaScript
Javascript é uma linguagem difícil! Vamos usar o Brainfuck, uma linguagem mais compreensível: o)
Eu acho que escrevi um intérprete cerebral em javascript.
O exemplo acima simplesmente gera
Hello World!
e ignora a entrada (sem,
símbolo).Mas isso também funciona com entradas! Por exemplo, tente
,+>,+>,+>,+<<<.>.>.>.
e digitegolf
a caixa de diálogo. Ele exibirá os próximos caracteres na tabela ASCII:hpmg
EDIT : Breve explicação para pessoas que não conhecem o cérebro.
Imagine uma matriz infinita de números inteiros
a
inicializados como zero em qualquer lugar, um ponteiro em um elemento dessa matrizi
e uma entrada do usuáriou
.Brainfuck é realmente fácil de aprender, mas difícil de escrever:
+
incrementos para o valor atual:a[i]++
-
diminui:a[i]--
>
faz com que o ponteiro aponte o próximo elemento:i++
<
o anterior :i--
[
e]
defina um loop que quebra quando o valor atual é zero:while (a[i]) { ... }
.
imprima o elemento atual:String.fromCharCode(a[i])
,
define o elemento atual com a entrada do usuário:u.charCodeAt(...)
fonte
replace
instruções não afetam o programa?--i
mais rápido quei--
? Parece falso desde anos: jsperf.com/decrementgolf .Acho que o brilhante Lennart Augustsson já venceu isso duas vezes.
Primeiro, aqui está um exemplo de sua implementação de "hack de fim de semana" do BASIC como DSL Haskell Monadic, de 2009:
Funciona sobrecarregando o tipo de número. Os números das linhas são realmente funções que aceitam argumentos. O restante da linha são argumentos para a função. A função retorna uma representação da Abstract Syntax Tree para o intérprete do BASIC trabalhar.
Também recomendo que você verifique a entrada de Augustsson no Concurso Internacional de Ofuscação C de 2006, no qual ele conseguiu entrar em 4k:
Eles podem compartilhar o mesmo arquivo porque o código de byet é colocado nos comentários em C.
Faz alguns anos que acompanhei o trabalho de Augustsson, então pode haver outras coisas brilhantes que ele inventou desde então ...
fonte
PHP e Javascript
Este é um poliglota:
Você pode executar esse código nos dois idiomas:
O truque aqui é que o Javascript usa seqüências de escape em strings começando com
'
e"
.Por outro lado, o PHP usa apenas seqüências de escape em strings começando com
"
e<<<
.Em seguida, declaramos a função
printf
, que é semelhante a,print
mas gera uma string formatada no PHP.O PHP exige que os vars iniciem
$
, enquanto o Javascript simplesmente permite.fonte
Array(…)
em JS, e está claramentearray(…)
em PHP.[…]
seria muito melhor;)!Array()
em JS ou não: me importo de ter um poliglota VERDADEIRO . Estou cometendo um dos piores crimes de JS com esse código, mas tudo o que quero é que ele execute e faça exatamente a mesma coisa em ambos, mas parecendo JS e PHP ao mesmo tempo.[...]
é inválido no PHP <5.4.0, o que é ruim ....... Se eu jogar isso no PHP 4, 5 ou Javascript, espero que funcione, em vez de fornecer erros de sintaxe em todos os lugares.[…]
, o que parece bastante padrão em PHP e, portanto, é bom para seu objetivo. E, a propósito, PHP <5.4? Hora de atualizar, cara ...Array
é o nome DIREITO do construtor do objeto Array. Basicamente, usar[]
é o mesmo queArray()
. Não vejo nada de ruim nisso. Mas eu tenho uma pergunta simples: funciona? (btw, eu tenho de usar php 5.3.28 no trabalho.)Brainfuck em JS
fonte
><,.-
Este é um dos vencedores da IOCCC de 2005 , um programa C que, exceto por esse conjunto de definições, parece um programa java:
fonte
C ++ em C
OK, então você é um programador C ++, mas é forçado a usar C? Não tem problema, você só precisa escrever alguns cabeçalhos adicionais ausentes no C. Por exemplo, aqui está um programa válido do Hello World em C:
No arquivo de cabeçalho suplementar
iostream
, escreva:No arquivo
string
, escrevaNo arquivo
helloworld.c
(seu código C real), escrevaE ao compilar
helloworld.c
com um compilador C, instrua o compilador a também procurar por<...>
arquivos de cabeçalho onde quer que você os armazeneiostream
estring
, por exemplo, se estiver compilando com o gcc e colocando os arquivosiostream
estring
no diretório atual, compile comNota: O
volatile
cabeçalho iniostream
está lá para permitir uma compilação sem aviso, mesmo no nível máximo de aviso (uma leitura de uma variável volátil é considerada como tendo efeito).fonte
volatile
aqui e que tipo de aviso?CQL - linguagem de consulta com cafeína
(ou "SQL na cafeína")
Isso pode ter sido um pouco ambicioso demais. Aqui está uma tentativa de escrever código declarativo SQL (ish) no CoffeeScript . Isso requer o recurso Proxy do ECMAScript 6 . Você pode testá-lo no nó com
--harmony-proxies
.Vamos configurar um modelo para definir proxies. (Retirado do comentário de Benvie sobre esta questão )
Agora defina um objeto proxy e algumas variáveis e funções globais suspeitas:
Bem, isso foi bastante configurado! Mas agora podemos fazer o seguinte (entrada / saída no estilo de console):
Não é um poliglota de verdade, mas esse não é realmente o ponto. Eu sei que isso
@
é usado para variáveis no SQL, mas preciso de todos os@
s para nomes de colunas e tabelas, porque não encontrei uma maneira de proxy do objeto global (e não ficaria surpreso se realmente não for possível - e por uma boa razão).Também mudei alguns parênteses para colchetes (em particular depois
VALUES
eIN
). Infelizmente, o que eu não consegui descobrir é uma maneira de permitir condicionais normais comoyear > 2000
, porque eles seriam avaliados para um booleano imediatamente.Ainda assim, isso se parece muito com o SQL e é definitivamente mais declarativo do que imperativo / funcional / orientado a objetos; portanto, deve se qualificar bem para a pergunta. Na verdade, estou pensando que, se eu aperfeiçoasse um pouco o código e suportasse mais alguns recursos, esse poderia ser um módulo útil do CoffeeScript.
Enfim, isso foi divertido! :)
Para quem não conhece muito o CoffeeScript, as consultas SQL são compiladas com o seguinte JavaScript:
fonte
@
no SQL é usado para variáveis de sessão.@
s para nomes de colunas e tabelas.Visual Basic 6 (em JavaScript)
Também funciona em VBScript.
fonte
F # em C ++
Abuso bastante sem imaginação e desagradável do pré-processador. Eu pensei que seria divertido alterar o C ++ para parecer uma linguagem completamente diferente, em vez de usar alguns apelidos para parecer Java ou PHP. Eu realmente não estou esperando que isso receba uma tonelada de votos, é uma entrada apenas por diversão.
Experimente aqui .
Infelizmente, escrever algo para o STDOUT é tudo o que pode fazer, embora eu tenha certeza que se alguém jogou feitiçaria suficiente nele, poderia fazê-lo fazer mais.
fonte
exit 0
ou apenas0
.Python e ... ninguém vai adivinhar (editar: dc)
Aqui está um código python válido, mas na verdade o programa é escrito em uma linguagem muito diferente:
O código é executado nos dois idiomas sem erros.
A combinação é muito louca; Eu ficaria feliz em esperar um dia ou dois antes de dizer qual é o outro idioma; por favor, deixe comentários para adivinhar.
editar: o idioma era o idioma baseado em pilha do dc. Você pode ver aqui palavras-chave bem conhecidas como
for
,if
,or
,in
, mas apenas as letras importa! O,
que não tem significado em dc é transformado em um registro, porque a primeira vez que aparece é após a letras
(o mesmo para:
).fonte
O C ++ permite escrever código do tipo lisp, com a biblioteca InteLib:
cf. http://www.informatimago.com/articles/life-saver.html
fonte
C # em espaço em branco
Ok, tente primeiro um desses, então vamos ver como vai.
E, caso a formatação tenha sido complicada por ter que colocar quatro espaços na frente de cada linha, aqui está novamente. para espaço e # para tab:
fonte
HTML e CSS
Não linguagens de programação, mas… este documento é HTML e CSS válidos :
Isso funciona, porque comentários em HTML são permitidos em folhas de estilo por motivos históricos. Ah, e todo documento HTML válido também é um programa PHP válido, então também é PHP . :)
fonte
C em Scala
A camada de ponte imita uma era mais romântica quando as strings ainda eram nulos e terminavam matrizes de bytes.
fonte
"This program does not take parameters!"
enganado yased e APL
Meu chefe quer que eu escreva scripts sed, mas eu prefiro escrever APL o dia todo. No entanto, ele está muito feliz com o meu trabalho, porque esses scripts funcionam perfeitamente com sua versão do sed:
Você pode experimentá-lo no meu novo site com este link permanente . É uma versão compilada em javascript do GNU APL. O lançamento final será mais tarde com o lançamento oficial do GNU APL, v. 1.3, mas você pode usá-lo perfeitamente para seus permalinks, se você gosta do GNU APL.
fonte
C em Haskell
Obviamente, como
cmain
não faz nada comargc
ouargv
, o código de empacotamento de argumentos não tem efeito e, comocmain
sempre retorna 0, o ramo "else" da instrução "if" está morto. Mas a declaração "if" não faz nada de qualquer maneira.Todos os colchetes e ponto e vírgula são desnecessários, assim como a maioria dos parênteses e algumas das
do
palavras - chave. A declaração "se" poderia ter sido escrita comoif exitCode == 0 then exitWith ExitSuccess else exitWith (ExitFailure (fromIntegral exitCode))
.fonte
C ++ em diante
Não é a solução mais flexível, mas funciona se escrita exatamente como mostrado.
fonte
Haskell em Java
("vanilla" Java 7, não Java 8) (Sim, eu sei que o boxe arruina o desempenho; e até mesmo tentar usar funções de ordem superior fica louco detalhadamente: D)
O Java possui uma sintaxe muito rígida; portanto, em vez de alterar a sintaxe, tentei tornar o código semanticamente mais semelhante ao estilo Haskell.
Editar - adicionado aplicativo de função parcial.
(Sim, tudo o que essa loucura faz é computar
6!
)fonte
COBOL in AWK
No espírito da citação. AWK puro e não adulterado, como pode ser escrito por um programador COBOL.
A tarefa é contar os registros em um arquivo. Esta versão de desenvolvimento inicial está contando para teste. O arquivo correto será codificado posteriormente quando liberado do Teste de Unidade ...
Se eu conseguisse destacar a sintaxe para fazer verde fosforescente em preto, seria ótimo ...
Até acertamos os números das colunas nesta, são sete espaços em branco no início de cada linha (nunca feitos isso no awk antes) e quebrando as longas declarações de impressão na coluna 72.
fonte
Brainfuck (ou qualquer outra coisa) na raquete
O módulo flexível e o sistema de macro da Racket permitem implementar o suporte ao módulo para linguagens inteiramente novas, tanto para domínios específicos quanto para fins gerais. Como há suporte imediato para o Datalog e o Algol 60 , os dois programas a seguir são válidos:
Você também pode adicionar suporte para outros idiomas: por exemplo, veja a descrição de Danny Yoo sobre como implementar o suporte ao Brainfuck, que permite programas Racket, como:
E como o suporte é adicionado no nível do módulo compilado, é possível vincular módulos escritos em diferentes idiomas ou incorporar um trecho de um idioma dentro de um módulo escrito em outro.
fonte
SML em Java
Eu ainda tenho algum código antigo quando comecei a aprender Java e tentei usá-lo em um estilo funcional. Ligeiramente limpo:
fonte
Java em Perl
Pode contar como quebra de regra, mas eu não me importo. Obviamente, ele se parece com o programa Java. Imprime 20 números de Fibonacci, caso não seja óbvio.
fonte
J e ... ninguém vai adivinhar (editar: dc)
Esta é a minha segunda entrada; aqui está um trecho de código J válido, que retorna 1:
Estou aguardando um ou dois dias antes de dizer qual é o outro idioma executando o mesmo trecho de código sem erro. Apenas deixe comentários para tentar adivinhar.
edit: O outro idioma é o idioma baseado em pilha da antiga calculadora Unix dc.
fonte
.,+-<>[]
portanto seu programa é equivalente ao...[.]+
brainfuck, que é um programa válido, mas sem sentido. AFAIK, um programa de foda cerebral só pode ser inválido por incompatibilidade[]
.dc executando um arquivo PostScript
O dc pode executar o seguinte trecho de código sem erro:
fonte
ML / (Strict) Haskell em Java
Isto é de um projeto real real. Utiliza estruturas de dados imutáveis persistentes e utiliza recursão mesmo quando não é necessário. Na verdade, é mais parecido com o Kore (a linguagem que o projeto implementa) em Java, mas o estilo é basicamente o mesmo que o ML. Mas a filosofia de Kore é que o autor não deve formatar seu código, portanto, nenhum código Java também é formatado (é auto-formatado pelo eclipse).
solte n elementos de uma lista :
Em ML / Haskell, onde você combinaria padrões para extrair a cabeça e a cauda, aqui você diz
list.cons().x
elist.cons().tail
.insira um elemento em uma lista :
Lista é definida literalmente como o tipo de dados algébrico seria definido. Aqui está uma versão com o clichê gerado pelo eclipse removido:
Aqui está uma estrutura de dados do mapa implementada em termos de um trie :
Os tipos começam a ocupar tanto espaço quanto o código. Por exemplo, no método put , o método possui 302 caracteres de tipos e 343 caracteres de código (sem contar espaço / novas linhas).
fonte
BASIC em Ruby
Implementado há muito tempo. A fonte está no GitHub . Inspirado por uma coisa semelhante em Scala
Configuração
Código BASIC
fonte
Haskell em modelos C ++
Eu fiz este FizzBuzz em modelos C ++ há alguns meses atrás em uma cotovia. É praticamente uma implementação do seguinte código Haskell, tudo em modelos C ++. De fato, mesmo a aritmética inteira é reimplementada no nível do tipo --- observe que nenhum dos modelos usa parâmetros int!
O código Haskell:
e a versão de metaprogramação do modelo C ++:
fonte