De quebra-cabeças de programação ao Code Golf


74

Sua tarefa é escrever um programa que produza a sequência exataProgramming Puzzles (à direita da nova linha opcional), mas quando todos os espaços, tabulações e novas linhas são removidas, ela sai Code Golf(à direita da nova linha opcional).

Sua contagem de bytes é a contagem do primeiro programa, com espaços ainda lá.

Notas

  • Os espaços Code Golf e Programming Puzzles serão removidos como parte da remoção, portanto, planeje adequadamente.

  • Nas codificações em que 0x09, 0x0A e 0x20 não são tabulações, novas linhas ou espaços, respectivamente, esses caracteres serão removidos.

  • Se o seu código é

    42  $@ rw$
    @42
    

    então isso deve gerar Programming Puzzles. Além disso, no mesmo idioma,

    42$@rw$@42
    

    deve produzir Code Golf.

Isso é , então o código mais curto em bytes vence! Boa sorte!


3
o espaço Code Golftambém será removido, e o que está dentro Programming Puzzles.
colsw

2
Isso será impossível em pelo menos Whirl and Whitespace .
Engenheiro Toast

13
Quais são os votos próximos?
OldBunny2800

12
@ OldBunny2800 boa pergunta. Eu continuo perguntando isso, mas o comentário é removido ...
programmer5000

12
Os votos próximos são pela falta de entradas e saídas e restrição na formatação de entradas e saídas. 100% se você tivesse uma seção chamada "regras" com uma lista de itens que considera óbvios sobre o desafio, você teria 0 voto próximo. É tudo sobre apresentação com o pessoal do CompSci, se pudermos pensar em uma pergunta aparentemente idiota para perguntar, que pode nos economizar um byte ou, tentaremos combater essa idiotice e você será um ótimo escritor de perguntas.
Magic Octopus Urn

Respostas:


65

Python 2 , 50 bytes

print["Code\40Golf","Programming Puzzles"][" ">""]

Experimente online!

Com todos os espaços removidos:

print["Code\40Golf","ProgrammingPuzzles"]["">""]

Experimente isso online!

Obrigado a Stephen S por 3 bytes e a Erik, o Outgolfer, por 1


2
Maldito, ninja! Eu estava prestes a clicar em Postar resposta! 1
HyperNeutrino

1
Eu acho que você acabou de quebrar o cérebro do meu amigo. Como isso funciona?
Stevoisiak 28/04

11
@StevenVascellaro É realmente simples. No primeiro caso, " ">""retorna True, pois, lexicograficamente, um espaço é maior que a sequência vazia. No segundo caso, "">""retorna False, pois nada pode ser maior que ele próprio. Truee Falsesão realmente apenas 1e 0respectivamente, apenas no booltipo de dados em vez de intou long. No primeiro caso, os espaços são preservados, portanto, o item no índice 1 "Programming Puzzles", é retornado literalmente. No segundo caso, os espaços se foram, daí \x20o item no índice 0 "Code\x20Golf"para preservar um espaço.
Erik o Outgolfer

9
@StephenS Não, porque, diferentemente do JavaScript, o Python não tem obsessão com a conversão implícita.
Mego

1
Se achar perturbadora a falta de obsessão do Python.
John Dvorak


22

05AB1E , 15 bytes

”ƒËŠˆ”" "v”–±ÇÀ

Experimente online!

Explicação

”ƒËŠˆ”           # push "Code Golf"
      " "v       # for each character in the string " " do
          ”–±ÇÀ  # push "Programming Puzzles"
                 # implicitly output top of stack

... Eu simplesmente não entendo. Isso usa compactação de dicionário ou algo assim?
precisa saber é o seguinte

@ LegionMammal978 Tenho certeza que sim.
NoOneIsHere

@ LegionMammal978: De fato, usa compressão de dicionário.
Emigna

5
@Emigna Ok, porque última vez que verifiquei, nenhuma dessas cordas poderia se encaixar em 4 bytes: p
LegionMammal978

1
@ Draco18s: Kevin escreveu um bom tutorial na página de dicas que você pode usar para ter uma idéia melhor de como usá-lo.
Emigna 9/01


16

CJam , 38 bytes

" ""Programming Puzzles""Dpef!Hpmg":(?

Experimente online! ou com espaços removidos

Explicação

" "                    e# Push this string.
"Programming Puzzles"  e# Push "Programming Puzzles".
"Dpef!Hpmg":(          e# Push "Dpef!Hpmg" and decrement each char, giving "Code Golf".
?                      e# If the first string is true (non-empty) return the second string,
                       e#   else return the third.

Se os espaços estão no programa ou não, determina se a primeira string é verdadeira ou falsa.


27
Seu código está triste:(
Roman Gräf 28/04

14
Se você deseja usar os não imprimíveis, "Bncd\x19Fnke":)é um código feliz (substitua \x19).
precisa saber é o seguinte

15

Geléia , 18 bytes

“½ċṭ6Ỵ»ḷ
“Ñ1ɦ+£)G»

Experimente online!

Explicação

No programa, como está escrito, a primeira linha é uma função auxiliar que nunca é executada. A segunda linha (a última do programa) é o programa principal e é a representação compactada da sequência "Programming Puzzles"(que é impressa implicitamente).

Se você remover a nova linha, tudo se tornará um programa grande. “½ċṭ6Ỵ»é a representação compactada da sequência "Code Golf". avalia, mas ignora seu argumento da mão direita, deixando o mesmo valor de antes da execução; ele pode ser usado para avaliar funções para seus efeitos colaterais (algo que eu fiz antes), mas também pode ser usado, como aqui, para comentar efetivamente o código.

Curiosamente, a lógica real aqui é mais curta que a entrada 05AB1E, mas o código como um todo sai mais tempo porque o compressor de string é menos bom em compactar essas strings em particular.


Isso acaba sendo válido.
precisa saber é o seguinte

Que eu saiba, alguns desses caracteres podem ser salvos usando um byte, assumindo codificações conhecidas. em UTF-8, obtenho 36 bytes ... Estou errado?
Steffen

@steffen: Jelly usa sua própria codificação de caracteres , na qual todos os 256 caracteres diferentes usados ​​podem ser armazenados em um único byte. (O único motivo para fazer isso, em vez de usar uma codificação pré-existente, é a legibilidade (!); Você pode escrever trivialmente o programa codificado na, digamos, na página de código 437, e ele seria executado no interpretador Jelly, mas normalmente seria muito mais difícil de ler.)

13

Geléia , 17 bytes

“Ñ1ɦ+£)G“½ċṭ6 Ỵ»Ṃ

Experimente online!

Como funciona

Como na outra resposta Jelly, Ñ1ɦ+£)Ge ½ċṭ6Ỵcodificar as cordas Programação Puzzles e Código Golf . inicia um literal de string e separa um string de outro, enquanto »seleciona o tipo de literal (compactação baseada em dicionário), portanto, isso gera

["Programming Puzzles", "Code Golf"]

então leva o mínimo, produzindo o código Golf .

No entanto, adicionando um espaço entre ½ċṭ6e , obtemos uma segunda sequência completamente diferente, e o literal é avaliado como

["Programming Puzzles", "caird coinheringaahing"]

Como o caird coinheringaahing é lexicograficamente maior que os Puzzles de programação , seleciona a primeira corda.


Apenas fiz o mesmo com“½ċṭ6Ỵ“Ñ1ɦ +£)G»Ṁ
Jonathan Allan

Que eu saiba, nenhum desses caracteres pode ser salvo usando um byte, assumindo codificações conhecidas. em UTF-8, obtenho 34 bytes ... Estou errado?
Steffen

O @steffen Jelly usa uma página de código personalizada que codifica cada um dos 256 caracteres que entende como um único byte.
Dennis19

@ Dennis obrigado por esclarecer.
steffen

13

Javascript, 46 43 42 bytes

x=>" "?"Programming Puzzles":"Code\40Golf"

console.log((x=>" "?"Programming Puzzles":"Code\40Golf")())
console.log((x=>""?"ProgrammingPuzzles":"Code\40Golf")())


5
Você pode substituir o \x20na primeira cadeia por um espaço.
Shaggy

Vença-me, bem feito. Isso precisa de uma trilha ;?
Ricdesi

@ricdesi não, não.

3
@ricdesi, já que este é um codegolf; se o programa for executado, ele funcionará. ;s às vezes não são necessários em JavaScript.
Stephen

2
Você pode substituir \x20por \40para salvar um byte :-)
ETHproductions

10

Idioma Wolfram, 62 bytes

"Programming Puzzles"[ToExpression@"\"Code\\.20Golf\""][[0 1]]

O espaço em [[0 1]]é multiplicação implícita, portanto é equivalente a [[0]]. Sem espaço, 01é justo 1. As partes 0 e 1 desta expressão são as strings que queremos.

Outra solução de validade questionável (44 bytes, 2 salvos por Kelly Lowder):

"Programming Puzzles"["Code\.20Golf"][[0 1]]

O \.20é substituído por um espaço imediatamente quando digitado em um ambiente Mathematica, portanto, não está claro se ele é removido junto com os outros espaços…


1
Assim que você colar (ou digitar) isso no Mathematica, (com base na nuvem ou não), a sequência de escape se \:0020transformará em um espaço e, portanto, será removida, portanto, não tenho certeza se isso se qualifica. Também \.20é mais curto. Por dois caracteres. "Programming Puzzles"["Code"<>FromCharacterCode@32<>"Golf"][[01]]vai funcionar.
Kelly Lowder

1
@KellyLowder, hmm, esse é um bom argumento. Eu adicionei outra solução que deve evitar esse problema. (Obrigado pela \.20sugestão - como você achou que eu pensei que tinha limpado toda a documentação ...)
Não uma árvore

1
Eu encontrei o \.20erro de digitação. Parece funcionar apenas para códigos de caracteres de dois dígitos. Eu não acho que esteja na documentação.
Kelly Lowder #

8

Excel - 56 bytes

=IF(""=" ","Code"&CHAR(32)&"Golf","Programming Puzzles")

Muito parecido com a maioria das outras respostas ... nada de especial aqui.


8

Haskell, 48 bytes

a _="Programming Puzzles";a4="Code\32Golf";f=a 4
a_="ProgrammingPuzzles";a4="Code\32Golf";f=a4

Define a função fque retorna a string correspondente.

Para referência, a versão antiga é:

Haskell, 49/47 bytes

f""="Code\32Golf";f(_)="Programming Puzzles";f" "

com espaços removidos

f""="Code\32Golf";f(_)="ProgrammingPuzzles";f""

Duas correspondências de padrão simples. (_)corresponde a todos os padrões. Você pode melhorar a versão sem espaços em um byte, definindo o segundo padrão como f" "=/ f""=, mas isso fornece um aviso "A correspondência de padrões é redundante".

Solução alternativa com a mesma contagem de bytes:

last$"Code\32Golf":["Programming Puzzles"|" ">""]
last$"Code\32Golf":["ProgrammingPuzzles"|"">""]

7

Ohm , 33 32 bytes

Usa a codificação CP437.

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀
▀4>~H├MS░l╬δ

Experimente online! ou tente sem espaço em branco

Explicação

Com espaço em branco:

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀    Main wire

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀    Push "Programming Puzzles" (compressed string)
                       Implicitly output the top stack element


▀4>~H├MS░l╬δ           Helper wire (never called)

Sem espaço em branco:

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀▀4>~H├MS░l╬δ    Main wire

▀Bn¬i≈╣Ü╝Rb╡°╧S½uÇ▀                Push "Programming Puzzles" (compressed string)
                   ▀4>~H├MS░l╬δ    Push "Code Golf" (compressed string)
                                   Implicitly output top stack element

Estou tão feliz que finalmente terminei a compactação de cordas!
Nick Clifford

1
@NickClifford O curioso que notei foi que Code Golfficou mais tempo quando comprimido. Eu acho que é por causa das capitais? De qualquer forma, ainda é mais curto do que escrevê-lo normalmente, porque não posso usar um espaço literal aqui.
Business Cat

Sim, Smaz é meio estranho assim.
Nick Clifford

Para sua informação, sinta-se à vontade para entrar em contato comigo no bate-papo, se tiver alguma dúvida ou solicitação de recurso para Ohm.
Nick Clifford

7

Japonês , 29 bytes

Com espaços:

`Co¸{S}Golf`r `PžgŸmÚÁ Puzz¤s

Experimente online!

Sem espaços:

`Co¸{S}Golf`r`PžgŸmÚÁPuzz¤s

Experimente online!


Isso tira proveito do fato de que no Japt, um espaço fecha uma chamada de método. Com espaços, o código é aproximadamente equivalente a este código JavaScript:

("Code"+(S)+"Golf").r(),"Programming Puzzles"

Isso é avaliado como JavaScript e o resultado é enviado para STDOUT. Como a última expressão é "Programming Puzzles", essa sequência é impressa.

Sem espaços, o código é aproximadamente equivalente a:

("Code"+(S)+"Golf").r("ProgrammingPuzzles")

(Se você ainda não descobriu, a Svariável é um espaço único.) O .r()método em uma string, se receber um argumento, remove todas as instâncias desse argumento da string. Como "Code Golf"não contém "ProgrammingPuzzles", ele retorna "Code Golf"inalterado, que é então enviado para STDOUT.


Eu nem pensei em usar substituir. Agradável!
Tom

Que eu saiba, alguns desses caracteres podem ser salvos usando um byte, assumindo codificações conhecidas. em UTF-8, obtenho 36 bytes ... Estou errado?
Steffen

@steffen Japt usa a codificação ISO-8859-1, na qual cada caractere representa um byte. Mas alguns dos caracteres seria impublicável neste programa, então eu usei a codificação Windows-1252 aqui (na verdade, foi gerada automaticamente pelo TIO )
ETHproductions

6

Braquilog , 44 bytes

" "Ṣ∧"Programming Puzzles"w|"Code"wṢw"Golf"w

Experimente online!

Explicação

" "Ṣ                                           If " " = Ṣ (which is itself " ")
    ∧"Programming Puzzles"w                    Write "Programming Puzzles"
                           |                   Else
                            "Code"w            Write "Code"
                                   Ṣw          Write " "
                                     "Golf"w   Write "Golf"

1
Riscado 44 ainda é 44 :( Editar em &nbsp;em ambos os lados para fixar :)
HyperNeutrino

@HyperNeutrino Não está riscado, 44 ​​é o comprimento com espaços e 42 sem.
Fatalize

Oh. Ops. Bem, é muito parecido, então eu não poderia dizer sem olhar para a margem, entrando em edição. Não importa: P
HyperNeutrino

5

Alice , 44 bytes

/"floG!"t"edoC"#
 /"selzzuP gnimmargorP"d&o@

Experimente online!

Sem espaço em branco:

/"floG!"t"edoC"#/"selzzuPgnimmargorP"d&o@

Experimente online!

Explicação

No primeiro programa, os dois espelhos /redirecionam o ponteiro de instruções para a segunda linha. "selzzuP gnimmargorP"empurra os pontos de código necessários em ordem de reverência, dempurra a profundidade da pilha e &oimprime quantos bytes. @finaliza o programa.

Sem o espaço em branco, o programa é todo em uma única linha. Nesse caso, o ponteiro de instruções não pode se mover no modo Ordinal; portanto, ele /se torna efetivamente não operacional (tecnicamente, o IP simplesmente não se move por uma etapa, o mesmo /é executado novamente e o IP reflete novamente no modo Cardinal). ) Portanto, se retirarmos os do programa, fica assim:

"floG!"t"edoC"#"selzzuPgnimmargorP"d&o@

Para incluir o espaço Code Golf, usamos um ponto de exclamação e o diminuímos t. Depois que tivermos todos os pontos de código na pilha, #pule o próximo comando, que é a segunda sequência inteira. d&odepois imprime a pilha novamente e @finaliza o programa.


Você deve jogar este (riscado 44 é 44)
MilkyWay90

5

PHP, 44 bytes

operador ternário

<?=" "?"Programming Puzzles":"Code\x20Golf";

PHP, 51 bytes

Comente

<?=/** /"Code\x20Golf"/*/"Programming Puzzles"/**/;

PHP, 57 bytes

interruptor de matriz

<?=["Code\x20Golf","Programming Puzzles"][(ord("
")/10)];


4

C # 88 81 70 63 bytes

Func<string>@a=()=>" "==""?"Code\x20Golf":"Programming Puzzles";

Com espaço em branco despojado:

Func<string>@a=()=>""==""?"Code\x20Golf":"ProgrammingPuzzles";

Agradeço ao BrianJ por me mostrar como não há espaço entre um tipo de retorno de método e o nome do método, PeterTaylor por salvar 7 18 bytes e Patrick Huizinga por salvar 7 bytes.

Mesmo método que todo mundo realmente, tecnicamente isso pode ser considerado inválido porque o método não especifica um tipo de retorno para o método, mas deve haver um espaço em branco entre o tipo de retorno e o nome do método.


1
você pode prefixar o nome da função com um @, por isso, então você tem void@a...e evitar a "nenhum tipo de retorno" erro de compilação (também adiciona bytes, embora :()
Brian J

.Length<1salva um byte; \u0020salva seis se contei corretamente; e você pode fazer uma resposta válida (e salvar alguns bytes ao mesmo tempo) enviando uma lambda em vez de uma função de nível superior. Func<string>a=()=>...
Peter Taylor

@BrianJ Hmm, não sabia disso, pergunto-me por que isso funciona do ponto de vista do compilador. De qualquer forma, ele pode perder bytes, mas também tecnicamente torna essa resposta não competitiva, por isso vale a pena. Obrigado!
precisa saber é o seguinte

O @Mayube @é usado principalmente se você precisar usar uma palavra reservada como nome de variável (o equivalente está []no VB.NET (e no MS SQL Server)).
Brian J

1
Sim, isso requer retornar a string; mas se você usar em =>vez de returnnão precisar de espaços. (E mesmo se você usar return, você pode return(...)).
Peter Taylor

4

Lisp comum (SBCL), 52 bytes

(format`,t"~[Programming Puzzles~;Code~@TGolf~]"0 1)

Impressões Programming Puzzles

(format`,t"~[ProgrammingPuzzles~;Code~@TGolf~]"01)

Impressões Code Golf

Ungolfed:

(format t "~[Programming Puzzles~;Code Golf~]" 0 1)

Explicação:

O truque vem basicamente de como #'formatfunciona o Common Lisp.

No CL, a maioria dos espaços em branco pode ser omitida, desde que não haja ambiguidade sobre onde os tokens começam ou terminam. O primeiro truque foi separar os símbolos formate t. Eu tive que terminar inequivocamente o formatsímbolo sem alterar como tfoi interpretado. Felizmente, `no CL termina o token anterior antes de ser processado e ,cancela o efeito de` (`é usado para implementar o modelo, onde a próxima expressão a seguir é" citada ", mas qualquer subexpressão prefixada com a ,é avaliada e o resultado incluído no modelo, então `, é quase um no-op).

O terceiro argumento para formaté a sequência do modelo. formaté semelhante ao printf em C, mas possui diretivas de formatação muito mais poderosas e usa ~ para indicá-las em vez de%. ~ [e ~] permitem selecionar entre várias opções para impressão, com ~; separando-os. Um argumento adicional é fornecido para formatar - o índice numérico do qual você deseja imprimir. Para garantir que o "" no Code Golf sobreviva, usei a diretiva de tabulação ~ T, usada para inserir espaços em branco, geralmente para alinhar o texto em colunas. ~ @ T é uma variação que apenas insere um determinado número de espaços, assumindo o padrão 1.

Finalmente, existem dois argumentos para formatar 0 e 1. Antes de remover o espaço em branco, o 0 é usado por ~ [~; ~] para selecionar "Quebra-cabeças de Programação" e o argumento de formato extra (o 1) é descartado (eu estou não tenho certeza do quão padrão é o descarte de argumentos de formato extra, mas isso funciona no Steel Bank Common Lisp). Após a remoção do espaço em branco, existe apenas um argumento (01) que seleciona "Code Golf".


1
+1, apenas uma coisa: "mas qualquer subexpressão prefixada com a ,é avaliada e emendada em" Não é ,@necessário para emendar?

"emendado" é um termo ruim para isso, é certo. Tecnicamente, ,avalia a próxima expressão e inclui o resultado no modelo, enquanto ,@assume que a expressão será avaliada em uma lista e inclui diretamente o conteúdo dessa lista no modelo. Tradicionalmente, na comunidade lisp, ,@é chamada de "emenda", mas não tenho certeza de que seja a escolha mais óbvia. Vou tentar reformular um pouco.
djeis 3/17/17

4

Java 8, 74 50 48 bytes

()=>" "==""?"Code\040Golf":"Programming Puzzles"

@NonlinearFruit você está certo, eu mudei esse para não
Khaled

1
Não acho que a impressão seja um requisito, então você pode simplesmente devolver a string. Eu não testei, mas o ==operador também deve funcionar,()=>""==""?"Code\u00A0Golf":"Programming Puzzles"
NonlinearFruit

1
\u00A0-> \040para uma economia de 2 bytes.
puxão





3

dc , 50

[pq]sm[Programming Puzzles]dZ19=m[Code]n32P[Golf]p

Experimente online .

[ ]define uma string - Zmede seu comprimento. Se o comprimento for 19, ele conterá um espaço e a macro armazenada no registro m será chamada, que será impressa Programming Puzzlese encerrada. Caso contrário, Code Golfé impresso.


Você poderia vincular ao interpretador dc / docs / github?
programmer5000

@ programmer5000 Basta escolher dc no TIO e clicar no nome do idioma.
Dennis

@Dennis obrigado, eu nem sabia que o TIO faz isso!
programmer5000


3

T-SQL, 96 82 81 67 bytes

print+iif(len(' x')=2,'Programming Puzzles','Code'+char(32)+'Golf')

Experimente online | Sem espaços

Versão antiga (96 bytes):

select(case'x'when(replace(' ',' ','x'))then'Programming Puzzles'else'Code'+nchar(32)+'Golf'end)

Bom trabalho, você pode chegar a 67 por perder os parênteses exteriores e mudar a condição deiif(len(' x')=2
BradC

@BradC Close, mas o paren externo evita a necessidade de um espaço depois print. Eu usei um em +vez disso e funcionou.
mbomb007

Deve ter colado e contado o errado. E eu também não sabia, mas o plus foi o primeiro personagem que tentei e funcionou.
mbomb007

3

Perl 5 , 43 41 bytes

say" "?"Programming Puzzles":Code.$".Golf

Experimente online!

Usa o fato de ' 'verdadeiro em perl e ''falso. A $"variável é configurada para um espaço por padrão.

Obrigado a @NahuelFouilleul por remover dois bytes.


talvez atrasado, mas "Code$\"Golf"é mais curto e Code.$".Golftambém
Nahuel Fouilleul 09/01

@NahuelFouilleul Sim, eu era muito novo quando escrevi esta resposta. Obrigado embora!
Chris


2

Befunge , 76 bytes

" "0`#v_"floG"84*"edoC",,,,,,,,,@
,,,,,@>"selzzuP gnimmargorP",,,,,,,,,,,,,,

Experimente online!

Não é a solução mais compacta, mas escrever código Befunge sem espaço em branco é bastante difícil.

No início, ele compara um caractere de espaço com 0. Se for maior, vai para a linha inferior. Caso contrário, o que acontece quando você substitui o espaço por nada, ele permanece na primeira linha.


O que os ,s fazem?
programmer5000

@ programmer5000 Cada um imprime um caractere.
Martin Ender

Uma dica para imprimir um grande número de personagens até chegar a 0 é fazer >:#,_que poderia poupar-lhe um monte de bytes
MildlyMilquetoast
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.