Anti-golfscript anti-golf: crie uma tarefa em que o GolfScript ou J seja superado pelo seu idioma (convencional) [fechado]


29

Você precisa fazer três coisas:

  1. Declaração de uma tarefa, T .
  2. Solução da tarefa em linguagem não tipicamente usado para jogar golfe, A .
  3. Solução da tarefa em linguagem tipicamente usado para jogar golfe, B . Não tente apenas inchar B para aumentar a pontuação; pense como se B tivesse sido escrito pelo seu concorrente.

Use o bom senso na definição typically used for golfing, tente maximizar a diversão para outros usuários.

Outros usuários podem propor Bs melhores (talvez incluindo em outros idiomas "golfe").

A pontuação é (length_in_bytes(B)+5)/(length_in_bytes(A)+5), quanto mais, melhor. (Talvez a fórmula de pontuação deva ser alterada? ..)

A idéia principal é inventar uma tarefa em que idiomas que normalmente apresentam bom desempenho no codegolf enfrentam um problema. Pode ser a força repentina de um idioma usual na tarefa especificada ou a fraqueza repentina de algum idioma de golfe.

Evite tarefas que mencionem linguagens de programação específicas, como Input a string and execute it as a Scheme code.


11
Suponho que você faça disso um concurso de popularidade em vez de um código de golfe. Caso contrário, as pessoas reclamarão que não é um "menor código ganha".
Victor Stafusa

OK, mudando para concurso de popularidade. Você também pode sugerir um título melhor ou uma pontuação melhor.
Vi.

Presumo que minha pergunta anterior se qualifique? codegolf.stackexchange.com/questions/18633/... A solução perl é de 48 caracteres, enquanto a solução é de 54 caracteres J
user12205

11
Podemos especificar lang B (desde que seja bom no golfe)? Ou alguém pode dizer "aqui está um programa no idioma <inserir nome do idioma> e possui uma solução muito curta para o comprimento <n>:"?
Justin

11
BTW, algumas linguagens como Perl podem estar no lado A e no lado B, dependendo do contexto.
Vi.

Respostas:


14

Minha pergunta anterior, Imprimir uma onda sinusoidal (verticalmente), se qualifica neste momento. Estou postando aqui como uma solução, também esperando que vocês possam apresentar algumas soluções mais curtas para a minha pergunta original.

Conforme exigido por Vi., Publicarei um resumo da pergunta.

Imprima uma onda sinusoidal contínua rolando verticalmente em um terminal. O programa não deve terminar e deve rolar a onda continuamente para baixo (exceto até SIGINT). Você pode assumir que o estouro não é um problema (ou seja, você pode usar loops infinitos com contadores crescentes ou recursão infinita).

A onda deve satisfazer as seguintes propriedades:

  • Amplitude = 20 caracteres (amplitude de pico)
  • Período = 60 a 65 linhas (inclusive)
  • A saída deve consistir apenas em espaços, nova linha e |
  • Após cada linha de saída, faça uma pausa de 50ms

Existe uma amostra de saída na minha pergunta original, mas não a estou postando aqui, porque isso tornará minha resposta ridiculamente longa. Minha pergunta original pode ser vista aqui: Imprimir uma onda sinusoidal (verticalmente)

AAtualmente, o mais curto : uma solução Perl com 48 caracteres: https://codegolf.stackexchange.com/a/18655/12205

print$"x(25+20*sin).'|
';$_+=.1;`sleep .05`;do$0

BAtualmente, o mais curto : uma solução J com 54 caracteres: https://codegolf.stackexchange.com/a/18649/12205

($:+&0.1[6!:3@]&0.05[2:1!:2~' |'#~1,~[:<.20*1+1&o.)0  




Atualmente, a pontuação desta resposta é 1.113 (uma pontuação muito baixa)


A pontuação atual de acordo com a fórmula atual é de aproximadamente 1.113
Vi.

@Vi. devo excluir esta resposta ou devo esperar um pouco e ver o que acontece? Se este último, quanto tempo devo esperar?
precisa saber é o seguinte

A instrução indica bytes, não caracteres. Convertida para UTL-8, a solução APL produziu 61 bytes (70 para UTF-16).
Vi.

2
Você está afirmando que Perl não é um idioma normalmente usado para jogar golfe, mas é o idioma que foi primeiro associado à palavra golfe ! Ruby, aos 56 anos, parece o idioma A real nas respostas atuais às suas perguntas.
Peter Taylor

8

Adicione dois números

Obtenha dois números do STDIN e adicione-os. Você precisa suportar números de ponto flutuante, portanto 0,5 + 1,5 deve ser igual a 2.

Perl 5 (com -E)

say<>+<>

GolfScript

n%'+'*'"#{
}"'n/\*~

Pontuação calculada como (24+5)/(8+2+5) = 1.9(3). -Etambém contados como bytes do programa.
Vi.

O mesmo comentário que fiz ao ás: você está afirmando que o Perl não é um idioma normalmente usado para jogar golfe, mas é o idioma que foi primeiro associado à palavra golfe !
Peter Taylor

E seu programa GolfScript não funciona. Um programa de trabalho seria n%'+'*'"#{ }"'n/\*~onde o caractere {}é uma nova linha literal (não suportada nos comentários).
Peter Taylor

@ PeterTaylor, Comparado com o GolfScript, Perl é uma linguagem "usual"; comparado com Java, é uma linguagem de "golfe".
Vi.

11
A J para isso não é muito ruim, na verdade: +/".1!:1,~1. O APL provavelmente seria ainda menor.
algorithmshark


7

Pontuação 48/37 ou 1. (297)

T: escreva um trecho de código que encerre o programa após exatamente uma hora (o mais próximo possível, como dentro de um segundo) da execução. Não se preocupe com exceções, elas podem não ser tratadas.

A: Java (32)

Thread.sleep(3600000);int a=1/0;

B: é para o Befunge 98, requer a impressão digital TIME (43)

"EMIT"4(HMS00p01p02p#;gS-!01gM-!H-!++3-!j;@

Isso leva a hora, o minuto e o segundo no momento da execução e coloca as células 02, 01 e 00. Em seguida, passa ;para a segunda parte. A segunda parte funciona da seguinte maneira:

g          get the value at 00
"EMIT"4(S) get the current time in seconds
-!         subtracts the values and changes a 0 to 1, anything else to 0

da mesma forma para o minuto e a hora.

++  sums up the values
3-! i the sum is 3, we get a 1, otherwise, we get a 0.
j   jump over the next that many cells
;   skip code execution until the next ;
@   end program

Observe que o Befunge retornará automaticamente ao início da linha quando o final de uma linha for atingido.


Como podemos ver, o Befunge não é bom quando se trata de esperar por horários específicos. No entanto, Java não é ruim.


9
APL:⎕DL 3600
marinus 17/01

14
Java geralmente lê como class Main{public static void main...
Vi.

3
@Vi. consulte "snippet de código". Basicamente, requer o código que realmente faz o trabalho, não mais do que isso.
Justin

2
Não conheço o Befunge, mas o snippet Java não "encerra o programa", conforme exigido pelas especificações. Isso exigiria um System.exit(0);ou envolver seu sono em um mainmétodo.
Peter Taylor

3
@DoorknobofSnow falha ao compilar:error: not a statement
Bob

5

Saída de um determinado arquivo de texto (498.388888 pontos)

A saída do objetivo está aqui .

O script Python 3.4.3 para imprimi-lo é de 49 bytes:

for b in dir(__builtins__):print(eval(b).__doc__)

O programa CJam ingênuo igual à saída do objetivo, envolvendo a cadeia de saída "..."e escapando a cada uma "que ocorre nela, seria 26908 bytes.


Muito inteligente, embora possa entrar em conflito com a restrição de "idiomas específicos" (que é vago, é certo).
BMac 27/08/2015

A regra mais próxima é "evite mencionar um idioma específico". Python não é mencionado, mas é claramente significado.
Vi.

Sim, essa resposta é um pouco irônica, eu meio que queria ressaltar que a regra é uma espécie de declive escorregadio. Imagine se eu tivesse "manipulado" mais a saída - digamos, pegando a soma de verificação SHA1 de cada docstring - seria muito estranho afirmar "esse monte de dígitos hexadecimais é muito específico para o idioma" :)
Lynn

Se eu quisesse dar uma resposta mais "justa", provavelmente usaria o Mathematica. Você pode fazer várias coisas extremamente específicas do domínio que exigiriam milhares de bytes de CJam / Pyth / qualquer outra coisa. Mas, infelizmente, eu não sei o idioma.
Lynn

O link para a saída está inoperante.
pppery 19/10

4

Diga "Olá, mundo!" (50/26 ~ 1,92)

Mostre uma caixa de mensagem para dizer "Olá, mundo!"

Javascript

alert('Hello world!')

Em um navegador com suporte para DOM Nível 0+.

Perl

use Win32;Win32::MsgBox('Hello world!','',48)

Executando no ActivePerl com Win32 :: GUI.


alertnão é inerentemente parte do JS, e o programa GolfScript é apenas um comentário.
Peter Taylor

Mudei a resposta para usar Perl simples.
Escova de dentes

3

Saída "Olá, mundo!" até o usuário pressionar "q", 1,842 105/44 = 2,386

  1. Imprimir "Olá, mundo!" (incluindo nova linha).
  2. O usuário pressiona uma tecla que não é ecoada na tela.
  3. Repita até que a tecla pressionada seja "q".

QBasic ( 52 39 caracteres)

1?"Hello world!":IF"q"<>INPUT$(1)THEN 1

Desde que postei minha resposta original, descobri que era possível desativar a formatação automática no QB64. : ^ D Com o número da linha e o ?atalho para PRINT, isso parece uma expressão ternária em idiomas do tipo C.

Primeira versão:

PRINT "Hello world!"
IF INPUT$(1) <> "q" THEN RUN

Perl 5 (100 caracteres)

while("q"ne$e){print"Hello world!\n";system"stty cbreak -echo";$e=getc;system"stty -cbreak echo";}

O acima funcionará apenas em sistemas UNIX (certos?) (Testado no Ubuntu 12.04). É possível que alguém possa usar várias plataformas e reduzi -lo a 91 caracteres usando o módulo Term :: ReadKey , mas não o testei:

use Term::ReadKey;while("q"ne$e){print"Hello world!\n";ReadMode 3;$e=ReadKey 0;ReadMode 0;}

1

Olá mundo (3 1/3 pontos)

Escreva um programa que produza Hello World. .

HQ9 + (1 caractere)

Esta não é a linguagem "normalmente usada para jogar golfe", então acredito que se encaixa aqui. Trabalha neste intérprete, a propósito .

H

GolfScript (15 caracteres)

Duvido que possa ficar mais curto, mesmo que seja GolfScript.

"Hello World."

8
Eu não acho que HQ9+combina como uma linguagem. Ele é projetado para truques / enigmas / diversão. Brainfuck / unlambda / outras línguas esotéricas também não parece terno como A .
Vi.

@ Vi: Mas normalmente não é usado para jogar golfe.
precisa saber é o seguinte

4
Você pode hovewer tentar usar HQ9+como B linguagem e vencê-lo por Java ou tal ...
Vi.

7
Parece que há uma hierarquia: comparado ao Java, o Perl é um golflang. Comparado ao Perl, o GolfScript é um campo de golfe. Comparado ao GolfScript, o HQ9 + é um campo de golfe ...
Vi.

@ Vi: verifiquei cuidadosamente a descrição da sua tarefa. O HQ9 + nunca é usado para jogar golfe, exceto por duas tarefas específicas - "99 garrafas" e "Olá, mundo". A menos que você possa mostrar alguma outra tarefa na qual o HQ9 + vence com qualquer outra linguagem de programação, ainda acho que ele se encaixa na definição, mesmo que a abuse (ei, é um concurso de popularidade ). O HQ9 + simplesmente não é usado para coisas de golfe não relacionadas a essas duas tarefas. Portanto, não é normalmente usado para jogar golfe. O segundo é obviamente projetado para o CodeGolf - é o GolfScript.
precisa saber é o seguinte

0

Saída "Olá, mundo!", 33/97 = 2,94

Escreva um programa que produza Hello world!

Arduino ou GML

Serial.print("Hello world!")

ou

show_message("Hello world!")

Ambos são 28 caracteres.

GTB

Eu uso muito o GTB para jogar golfe (especialmente desde que eu o criei, e é Turing completo). Infelizmente, há apenas suporte limitado para caracteres minúsculos (porque a calculadora TI-84 não pode lidar com isso). Este é provavelmente o programa GTB mais curto que pode gerar o Hello world!

S;"lower",1,1)→_~"H"+S;"expr(",1,1)+_+_+S;"cos(",2,1)+" W"+S;" or ",2,2)+_+S;" and ",4,1)+"!

92 caracteres.


A versão GTB também a envia para a porta serial?
Vi.

A versão GTB está intencionalmente inchada com vários coss e exprsou realmente não pode simplesmente produzir algo de maneira regular? Ou o "personagem na verdade não é uma string literal e está me confundindo ...
Vi.

@Vi. Não está nada inchado ... tem que retirar e de expr, dois l de baixo, o de cos, ou de ou, l de baixo, d de e.
Timtech

'Outros usuários podem propor Bs melhores (talvez incluindo em outros idiomas "golfe"). '--- deixe-me tentar o golfscript:"Hello world!"
John Dvorak

@JanDvorak Você provavelmente está certo.
Timtech
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.