Desde programación de rompecabezas hasta Code Golf


74

Su tarea es escribir un programa que genere la cadena exactaProgramming Puzzles (nueva línea opcional), pero cuando se eliminan todos los espacios, pestañas y nuevas líneas, se genera Code Golf(nueva línea opcional).

Su recuento de bytes es el recuento del primer programa, con espacios aún allí.

Notas

  • Los espacios en Code Golf y Programming Puzzles serán eliminados como parte de la eliminación, así que planifique en consecuencia.

  • En las codificaciones donde 0x09, 0x0A y 0x20 no son pestañas, líneas nuevas o espacios respectivamente, esos caracteres se eliminarán.

  • Si tu código es

    42  $@ rw$
    @42
    

    entonces eso debe salir Programming Puzzles. Además, en el mismo idioma,

    42$@rw$@42
    

    debe salir Code Golf.

Este es el , por lo que gana el código más corto en bytes. ¡Buena suerte!


3
Code Golftambién se eliminará el espacio , ¿qué pasa con el que está adentro Programming Puzzles?
colsw

2
Esto será imposible al menos en Whirl y Whitespace .
Engineer Toast el

13
¿Para qué son los votos cerrados?
OldBunny2800

12
@ OldBunny2800 buena pregunta. Sigo preguntando eso, pero el comentario se elimina ...
programmer5000

12
Los votos cerrados son por la falta de entradas y salidas y la restricción en el formato de las entradas y salidas. 100% si tuvieras una sección etiquetada como "reglas" con una lista de cosas que consideras obvias sobre el desafío, tendrías 0 votos cerrados. Se trata de una presentación con amigos de CompSci, si podemos pensar en una pregunta aparentemente idiota para hacer que nos ahorre un byte o, intentaremos contrarrestar esa idiotez y serás un gran escritor de preguntas.
Urna mágica de pulpo

Respuestas:


65

Python 2 , 50 bytes

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

Pruébalo en línea!

Con todos los espacios eliminados:

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

Prueba eso en línea!

Gracias a Stephen S por 3 bytes, y Erik the Outgolfer por 1


2
¡Maldición, ninja! ¡Estaba a punto de hacer clic en Publicar respuesta! +1
HyperNeutrino

1
Creo que acabas de romper el cerebro de mi amigo. ¿Cómo funciona esto?
Stevoisiak

11
@StevenVascellaro Es realmente simple. En el primer caso, " ">""devuelve True, ya que, lexicográficamente, un espacio es mayor que la cadena vacía. En el segundo caso, "">""retorna False, ya que nada puede ser mayor que sí mismo. Truey en Falserealidad son justos 1y 0respectivamente, solo en el booltipo de datos en lugar de into long. En el primer caso, los espacios se conservan, por lo tanto, el elemento en el índice 1 "Programming Puzzles", se devuelve textualmente. En el segundo caso, los espacios se han ido, por lo tanto, \x20en el elemento en el índice 0 "Code\x20Golf"para preservar un espacio.
Erik the Outgolfer

9
@StephenS No, porque a diferencia de JavaScript, Python no tiene una obsesión con el casting implícito.
Mego

1
Si la falta de obsesión de Python le resulta inquietante.
John Dvorak


22

05AB1E , 15 bytes

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

Pruébalo en línea!

Explicación

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

...Simplemente no entiendo. ¿Utiliza esto compresión de diccionario o algo así?
LegionMammal978

@ LegionMammal978 Estoy bastante seguro de que sí.
NoOneIsHere

@ LegionMammal978: De hecho, utiliza compresión de diccionario.
Emigna

55
@Emigna Bien, porque la última vez que lo verifiqué, ninguna de esas cadenas podría caber en 4 bytes: p
LegionMammal978

1
@ Draco18s: Kevin ha escrito un buen tutorial en la página de consejos que puede usar para tener una mejor idea de cómo usarlo.
Emigna


16

CJam , 38 bytes

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

Pruébalo en línea! o con espacios eliminados

Explicación

" "                    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.

Si los espacios están en el programa o no, determina si la primera cadena es verdadera o falsa.


27
Su código es triste:(
Roman Gräf

14
Si está dispuesto a usar no imprimibles, "Bncd\x19Fnke":)es un código feliz en su lugar (reemplazar \x19).
Erik the Outgolfer

15

Jalea , 18 bytes

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

Pruébalo en línea!

Explicación

En el programa tal como está escrito, la primera línea es una función auxiliar que nunca se ejecuta. La segunda línea (la última en el programa) es el programa principal y es la representación comprimida de la cadena "Programming Puzzles"(que luego se imprime implícitamente).

Si elimina la nueva línea, todo se convierte en un gran programa. “½ċṭ6Ỵ»es la representación comprimida de la cadena "Code Golf". evalúa pero ignora su argumento de la mano derecha, dejando el mismo valor que antes de ejecutarse; se puede usar para evaluar las funciones de sus efectos secundarios (algo que he hecho antes), pero también se puede usar, como aquí, para comentar efectivamente el código.

Curiosamente, la lógica real aquí es más corta que la entrada 05AB1E, pero el código en su conjunto sale más tiempo porque el compresor de cadenas es menos bueno para comprimir estas cadenas particulares.


Esto resulta ser válido.
Erik the Outgolfer

Que yo sepa, algunos de esos caracteres se pueden guardar usando un byte, asumiendo codificaciones bien conocidas. en UTF-8 obtengo 36 bytes ... ¿Me equivoco?
steffen

@steffen: Jelly usa su propia codificación de caracteres , en la que todos los 256 caracteres diferentes que usa se pueden almacenar en un solo byte. (La única razón por la que hace esto en lugar de usar una codificación preexistente es para facilitar la lectura (!); Podría escribir trivialmente el programa codificado en, por ejemplo, la página de códigos 437, y se ejecutaría en el intérprete Jelly, pero normalmente sería mucho más difícil de leer.)

13

Jalea , 17 bytes

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

Pruébalo en línea!

Cómo funciona

Al igual que en la otra respuesta jalea, Ñ1ɦ+£)Gy ½ċṭ6Ỵcodificar las cadenas de programación Puzzles y Código de golf . comienza un literal de cadena y separa una cadena de otra, mientras »selecciona el tipo de literal (compresión basada en diccionario), por lo que esto produce

["Programming Puzzles", "Code Golf"]

luego toma el mínimo, produciendo Code Golf .

Sin embargo, al agregar un espacio entre ½ċṭ6y , obtenemos una segunda cadena completamente diferente, y el literal se evalúa como

["Programming Puzzles", "caird coinheringaahing"]

Dado que caird coinheringaahing es lexicográficamente más grande que Programming Puzzles , selecciona la primera cadena en su lugar.


Sólo hizo lo mismo con“½ċṭ6Ỵ“Ñ1ɦ +£)G»Ṁ
Jonathan Allan

Que yo sepa, ninguno de esos caracteres se puede guardar utilizando un byte, suponiendo codificaciones bien conocidas. en UTF-8 obtengo 34 bytes ... ¿Me equivoco?
steffen

@steffen Jelly utiliza una página de códigos personalizada que codifica cada uno de los 256 caracteres que entiende como un solo byte.
Dennis

@ Dennis gracias por aclarar.
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")())


55
Puede reemplazar el \x20en la primera cadena con un espacio.
Shaggy

Golpéame, bien hecho. ¿Esto necesita un seguimiento ;?
ricdesi

@ricdesi no, no lo hace.

3
@ricdesi ya que esto es codegolf, si el programa se ejecuta, funciona. ;a veces no se requieren en JavaScript.
Stephen

2
Puede reemplazar \x20con \40para guardar un byte :-)
ETHproductions

10

Wolfram idioma, 62 bytes

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

El espacio en [[0 1]]es multiplicación implícita, por lo que es equivalente a [[0]]. Sin espacio, 01es justo 1. Las partes 0 y 1 de esta expresión son las cadenas que queremos.

Otra solución de validez cuestionable (44 bytes, 2 guardados por Kelly Lowder):

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

El \.20se reemplaza por un espacio inmediatamente cuando se escribe en un entorno de Mathematica, por lo que no está claro si se elimina junto con los otros espacios ...


1
Tan pronto como pegue (o escriba) esto en Mathematica, (basado en la nube o no) la secuencia de escape, se \:0020convierte en un espacio y, por lo tanto, se eliminaría, por lo que no estoy seguro de que esto califique. También \.20es más corto. Por dos caracteres. "Programming Puzzles"["Code"<>FromCharacterCode@32<>"Golf"][[01]]trabajará.
Kelly Lowder

1
@KellyLowder, hmm, ese es un buen punto. He agregado otra solución que debería evitar ese problema. (Gracias por la \.20sugerencia, ¿cómo encontraste eso? Pensé que había revisado toda la documentación ...)
No es un árbol el

1
Encontré el \.20haciendo un error tipográfico. Parece que solo funciona para códigos de caracteres de dos dígitos. No creo que esté en la documentación.
Kelly Lowder

8

Excel - 56 bytes

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

Muy similar a la mayoría de las otras respuestas ... nada lujoso aquí.


8

Haskell, 48 bytes

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

Define la función fque devuelve la cadena correspondiente.

Como referencia, la versión anterior es:

Haskell, 49/47 bytes

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

con espacios eliminados

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

Dos coincidencias de patrones simples. (_)coincide con todos los patrones. Puede mejorar la versión sin espacios en un byte definiendo el segundo patrón como f" "=/ f""=, pero esto genera una advertencia de "La coincidencia de patrones es redundante".

Solución alternativa con el mismo número de bytes:

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

7

Ohm , 33 32 bytes

Utiliza la codificación CP437.

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

Pruébalo en línea! o intente sin espacios en blanco

Explicación

Con espacios en blanco:

▀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)

Sin espacios en blanco:

▀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

¡Estoy tan contento de haber terminado finalmente la compresión de cuerdas!
Nick Clifford

1
@NickClifford Lo curioso que noté fue que Code Golfse alargó cuando se comprimió. Supongo que es por las capitales? De cualquier manera, todavía es más corto que escribirlo normalmente porque no puedo usar un espacio literal aquí.
Business Cat

Sí, Smaz es algo así de raro.
Nick Clifford

Para su información, siéntase libre de hacerme ping en el chat si tiene alguna pregunta o solicitud de características para Ohm.
Nick Clifford

7

Japt , 29 bytes

Con espacios:

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

Pruébalo en línea!

Sin espacios:

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

Pruébalo en línea!


Esto aprovecha el hecho de que en Japt, un espacio cierra una llamada al método. Con espacios, el código es más o menos equivalente a este código JavaScript:

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

Esto se evalúa como JavaScript y el resultado se envía a STDOUT. Como la última expresión es "Programming Puzzles", esa cadena se imprime.

Sin espacios, el código es más o menos equivalente a:

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

(Si aún no lo ha descubierto, la Svariable es un espacio único). El .r()método en una cadena, si se le da un argumento, elimina todas las instancias de ese argumento de la cadena. Como "Code Golf"no contiene "ProgrammingPuzzles", devuelve "Code Golf"sin cambios, que luego se envía a STDOUT.


Ni siquiera pensé en usar reemplazar. ¡Buena esa!
Tom

Que yo sepa, algunos de esos caracteres se pueden guardar usando un byte, asumiendo codificaciones bien conocidas. en UTF-8 obtengo 36 bytes ... ¿Me equivoco?
steffen

@steffen Japt utiliza la codificación ISO-8859-1, en la que cada carácter representa un byte. Pero algunos de los caracteres no podrían imprimirse en este programa, así que usé la codificación de Windows-1252 aquí (en realidad, fue autogenerada por TIO )
ETHproductions

6

Brachylog , 44 bytes

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

Pruébalo en línea!

Explicación

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

1
Tachado 44 sigue siendo 44 :( Editar en &nbsp;ambos lados para arreglar :)
HyperNeutrino

@HyperNeutrino No está tachado, 44 ​​es la longitud con espacios y 42 sin.
Fatalize

Oh. Whoops Bueno, es demasiado similar, así que no podría decirlo sin mirar la rebaja yendo a editar. No importa: P
HyperNeutrino

5

Alice , 44 bytes

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

Pruébalo en línea!

Sin espacios en blanco:

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

Pruébalo en línea!

Explicación

En el primer programa, los dos espejos /redirigen el puntero de instrucciones a la segunda línea. "selzzuP gnimmargorP"empuja los puntos de código requeridos en orden de reverencia, dempuja la profundidad de la pila e &oimprime esa cantidad de bytes. @termina el programa

Sin el espacio en blanco, el programa está todo en una sola línea. En ese caso, el puntero de instrucciones no puede moverse en modo Ordinal, por lo que /efectivamente se convierten en no-ops (técnicamente, la IP simplemente no se mueve en un paso, lo mismo /se ejecuta nuevamente, y la IP se refleja nuevamente en el modo Cardinal ) Entonces, si los eliminamos del programa, se verá así:

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

Para incluir el espacio Code Golf, usamos un signo de exclamación y lo decrementamos con t. Después de tener todos los puntos de código en la pila, #omite el siguiente comando, que es la segunda cadena completa. d&oluego imprime la pila nuevamente y @finaliza el programa.


Debe jugar golf (tachado 44 es 44)
MilkyWay90

5

PHP, 44 bytes

operador ternario

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

PHP, 51 bytes

comentario

<?=/** /"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";

Con espacios en blanco despojados:

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

Gracias a BrianJ por mostrarme cómo no hay espacio entre un tipo de retorno de método y el nombre del método, PeterTaylor por guardar 7 18 bytes y Patrick Huizinga por guardar 7 bytes.

Mismo método que todos los demás en realidad, técnicamente esto podría ser considerado válido porque el método no especifica un tipo de retorno para el método, pero no tiene que ser un espacio en blanco entre el tipo de retorno y el nombre del método.


1
se puede prefijar el nombre de la función con una @, por lo que entonces usted tiene void@a...y evitar el error de compilación "ningún tipo de retorno" (también añade bytes, aunque :()
Brian J

.Length<1guarda un byte; \u0020ahorra seis si he contado correctamente; y puede hacer una respuesta válida (y guardar algunos bytes al mismo tiempo) enviando una lambda en lugar de una función de nivel superior. Func<string>a=()=>...
Peter Taylor

@BrianJ Hmm, no lo sabía, me pregunto por qué eso funciona desde el punto de vista del compilador. De todos modos, puede perder bytes, pero técnicamente también hace que esta respuesta no sea competitiva, por lo que vale la pena. ¡Gracias!
Skidsdev

@Mayube the @se usa principalmente si necesita usar una palabra reservada como nombre de variable (el equivalente está rodeado por []VB.NET (y MS SQL Server)).
Brian J

1
Sí, requiere devolver la cadena; pero si usa en =>lugar de returnno necesita espacios. (E incluso si lo usas return, puedes return(...)).
Peter Taylor

4

Common Lisp (SBCL), 52 bytes

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

Huellas dactilares Programming Puzzles

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

Huellas dactilares Code Golf

Sin golf:

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

Explicación:

El truco proviene básicamente de cómo #'formatfunciona en Common Lisp.

En CL, se puede omitir la mayoría de los espacios en blanco siempre que no haya ambigüedad sobre dónde comienzan o terminan los tokens. El primer truco fue separar los símbolos formaty t. Tuve que terminar sin ambigüedades el formatsímbolo sin cambiar cómo tse interpretó. Afortunadamente, `en CL finaliza el token anterior antes de que se procese y ,cancela el efecto de` (`se usa para implementar plantillas, donde la siguiente expresión que sigue se" cita ", pero ,se evalúa cualquier sub-expresión prefijada con a y el resultado incluido en la plantilla, por lo que `, es casi un no-op).

El tercer argumento formates la cadena de plantilla. formates similar a printf en C, pero tiene directivas de formato mucho más potentes y usa ~ para indicarlas en lugar de%. ~ [y ~] le permiten seleccionar entre múltiples opciones de impresión, con ~; separándolos. Se proporciona un argumento adicional para formatear: el índice numérico del que desea imprimir. Para asegurar que el "" en Code Golf sobreviva, utilicé la directiva de tabulación ~ T, que se utiliza para insertar espacios en blanco, generalmente para alinear el texto en columnas. ~ @ T es una variación que solo inserta un número dado de espacios, por defecto a 1.

Finalmente, hay dos argumentos para formatear: 0 y 1. Antes de que se elimine el espacio en blanco, ~ [~; ~] utiliza el 0 para seleccionar "Rompecabezas de programación" y el argumento de formato adicional (el 1) se descarta (estoy no estoy seguro de qué tan estándar es la eliminación de argumentos de formato extra, pero esto funciona en Steel Bank Common Lisp). Después de eliminar el espacio en blanco, solo hay un argumento (01) que selecciona "Code Golf" en su lugar.


1
+1, solo una cosa: "pero cualquier sub-expresión con el prefijo a ,se evalúa y se empalma" ¿No es ,@necesario para empalmar?

"empalmado" es un término pobre para eso, es cierto. Técnicamente, ,evalúa la siguiente expresión e incluye el resultado en la plantilla, mientras ,@supone que la expresión evaluará a una lista e incluye los contenidos de esa lista en la plantilla directamente. Tradicionalmente en la comunidad lisp, ,@se llama "empalme", ​​pero no estoy seguro de que sea la opción más obvia. Intentaré reformularlo un poco.
djeis

4

Java 8, 74 50 48 bytes

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

@NonlinearFruit tienes razón, lo he cambiado para que no
Khaled.K

1
No creo que la impresión sea un requisito, por lo que podría devolver la cadena. No lo he probado, pero el ==operador también debería funcionar,()=>""==""?"Code\u00A0Golf":"Programming Puzzles"
NonlinearFruit

1
\u00A0-> \040para un ahorro de 2 bytes.
Poke





3

dc , 50

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

Pruébalo en línea .

[ ]define una cadena - Zmide su longitud. Si la longitud es 19, entonces contiene un espacio y se llama a la macro almacenada en el registro m, que imprime Programming Puzzlesy se cierra. De Code Golflo contrario se imprime.


¿Podría vincular al intérprete de cc / docs / github?
programmer5000

@ programmer5000 Simplemente elija dc en TIO, luego haga clic en el nombre del idioma.
Dennis

@ Dennis gracias, ¡ni siquiera sabía que TIO hace eso!
programmer5000


3

T-SQL, 96 82 81 67 bytes

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

Pruébalo en línea |Sin espacios

Versión anterior (96 bytes):

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

Buen trabajo, puede llegar a 67 perdiendo los padres externos y cambiando la condición aiif(len(' x')=2
BradC

@BradC Cerrar, pero el par exterior evita que se necesite un espacio después print. Usé un +en su lugar y funcionó.
mbomb007

Debe haber pegado y contado el incorrecto. Y yo tampoco lo sabía, pero la ventaja fue el primer personaje que probé y funcionó.
mbomb007

3

Perl 5 , 43 41 bytes

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

Pruébalo en línea!

Utiliza el hecho de que ' 'es verdadero en Perl y ''es falso. La $"variable se establece en un espacio de forma predeterminada.

Gracias a @NahuelFouilleul por eliminar dos bytes.


tal vez tarde, pero "Code$\"Golf"es más corta y Code.$".Golfdemasiado
Nahuel FOUILLEUL

@NahuelFouilleul Sí, era bastante nuevo cuando escribí esta respuesta. Gracias sin embargo!
Chris


2

Befunge , 76 bytes

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

Pruébalo en línea!

No es la solución más compacta, pero volver a escribir código Befunge sin espacios en blanco es bastante difícil.

Al principio, compara un carácter de espacio con 0. Si es mayor, va a la fila inferior. Si no es así, que es lo que sucede cuando reemplaza el espacio con nada, permanece en la primera fila.


¿Qué hacen los ,s?
programmer5000

@ programmer5000 Cada uno imprime un carácter.
Martin Ender

Una sugerencia para imprimir una gran cantidad de caracteres hasta llegar a 0 es hacer lo >:#,_que podría ahorrarle muchos bytes
MildlyMilquetoast
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.