Serpientes por todas partes

12

Desafío

El desafío es simple: imprimir una serpiente .
Obtendrá la longitud de la serpiente como entrada.
Una serpiente de longitud 2 se ve así:

==(:)-

Una serpiente de longitud 7 se ve así:

=======(:)-

En otras palabras, la longitud de una serpiente es cuántos signos iguales hay antes de la cabeza .

Uso

Digamos que hice una implementación de C ++ y la compilé ./getsnake.
Podría ejecutarlo así:

$ ./getsnake 10
==========(:)-

Aclaraciones

  • Las lagunas estándar no están permitidas.
  • Puede obtener entrada y salida de cualquier manera aceptable.
  • Puede suponer que todas las entradas dadas son enteros positivos.
  • Puede escribir una función en lugar de un programa normal.
InitializeSahib
fuente
8
Es inútil dejar un desafío en el Sandbox por solo media hora. Recibió algunos comentarios, pero generalmente es mejor dejarlos en el Sandbox durante 24-72 horas. (Además, deberías desarrollar la parte de "Orígenes" o eliminarla.)
El'endia Starman
¿Es suficiente una función o quieres un programa completo?
betseg
La función @betseg es suficiente
InitializeSahib
44
Me temo que todas las respuestas de Mi lámpara Squiggly son fáciles de transportar .
manatwork el
3
Los enteros negativos deberían hacer que la serpiente se trague.
GuitarPicker

Respuestas:

18

Hexagonía , 33 bytes.

No va a ganar, pero sigue siendo genial. Podría ser capaz de jugar más al golf.

Pruébalo en línea!

Golfizado:

61}?.$)@$j;(3<./;.}l/.400;5\j;.'\

Formateado:

    6 1 } ?
   . $ ) @ $
  j ; ( 3 < .
 / ; . } l / .
  4 0 0 ; 5 \
   j ; . ' \
    . . . .

Coloreado (Hecho con el Coloreador de Hexagonía de Timwi )

¡Has encontrado un secreto snek!  ======= (:) -

Explicación:

Bucle, imprima "=" hasta que el contador llegue a 0.

    6 1 } ?
   . $ . . $
  . . ( . . .
 / . . } . . .
  . . . ; . .
   . . . ' .
    . . . .

Impresión "("

    . . . .
   . . . . .
  . . . . . .
 / ; . . . . .
  4 . . . . .
   j . . . .
    . . . .

Impresión ":"

    . . . .
   . . . . .
  . ; ( 3 < .
 . . . } l / .
  . . . . . .
   . . . . .
    . . . .

Impresión ")"

    . . . .
   . . . . .
  j . . . . .
 . . . . . . .
  . . . ; 5 \
   . . . . \
    . . . .

Los valores anteriores se generaron usando un simple script de python. Sin embargo, me quedé sin espacio para el "-". Entonces, tuve que recurrir a trucos más avanzados.

Cuando el programa imprime ")", el valor de la celda no es 41, es 1065. La hexagonía simplemente modifica el valor al imprimir. Como resultado, (1065 * 1000 + 4)% 256 = 44, a solo uno de 45, el valor ascii para "-". Luego, simplemente incremento, imprimo e inserto una @ en algún lugar después de imprimir.

    . . . .
   . $ ) @ $
  j . . 3 . .
 / . . } . . .
  4 0 0 . 5 \
   . ; . . \
    . . . .
Azul
fuente
¿Cómo puede llamarse un lenguaje de programación cuando .j4 /; es ... Imprimir "(" ??? ¿Qué parte de .j4 /; es la impresión y qué parte es la cadena para imprimir?
Fogmeister
2
@Fogmeister [Parte 1/2] En Hexagony, cualquier carácter alfabético establece el valor de la celda de memoria actual en el valor ascii de ese carácter. "j" tiene un valor ascii de 106, por lo que la memoria está configurada para eso. Además, y los caracteres numéricos multiplican el valor de la celda actual por 10, luego se suman (esto permite una fácil construcción de números, como el 61 al principio.
Azul
3
[Parte 2/2] Entonces, j4 establece la celda de memoria en 1064. Cuando la IP alcanza el "/", se refleja en ";", que imprime el carácter ascii correspondiente a la celda de memoria actual% 256. 1064% 256 = 40, el valor ASCII para "(". Espero que esto responda a su pregunta.
Azul
Gracias. Sí lo hace. Supongo que este es más un lenguaje para usar como una forma de probar tu cerebro. ¿En lugar de una forma de escribir programas entonces? Interesante.
Fogmeister
@Fogmeister hay muchos lenguajes de programación esotéricos que son más ejercicios de torsión cerebral que útiles para hacer un trabajo real, aunque PUEDEN hacer un trabajo real si te esfuerzas lo suficiente.
Sparr
12

Chicle de canela, 7 bytes

0000000: 7043 dc95 6d4f ce                        pC..mO.

Pruébalo en línea.

Hubiera sido de 6 bytes con la psintaxis anterior: /

Explicación

Al descomprimirse p~=~(:)-, la petapa simplemente lee la entrada y repite las =n veces.

un espagueti
fuente
¿Puedes vincular a las especificaciones de idioma para esto?
Robert Fraser
@RobertFraser No tengo una especificación formal o documentación actualmente, pero puedes consultar la fuente en el repositorio de GitHub: github.com/quartata/cinnamon-gum
un spaghetto el
12

Brian y Chuck , 31 bytes

,{-?>}-):(=?
#}<<.{?_<.<.<.<.<.

Entrada en forma de un valor de byte , por ejemplo, la entrada !da una serpiente de longitud 33.

Pruébalo en línea!

Ha sido un tiempo...

Explicación

Un manual rápido de Brian y Chuck:

  • La primera línea del programa es Brian, la segunda es Chuck.
  • Brian y Chuck son dos ejemplos parecidos a Brainfuck. El problema principal es que el programa de Chuck es la cinta de Brian y viceversa. Los cabezales de cinta / punteros de instrucción comienzan en la primera celda de cada cinta y la ejecución comienza en Brian.
  • En cuanto a los comandos, hay algunas diferencias. Solo Brian puede usar ,(entrada) y solo Chuck puede usar .(salida). Además de <y >hay {y }que mueven el cabezal de la cinta hacia la siguiente celda cero (o en el caso del {extremo izquierdo de la cinta si no hay ninguna celda cero en el camino). En lugar de [...], el único flujo de control es el ?que cambia el control a la otra instancia si la celda actual no es cero. La primera instrucción ejecutada en la otra celda es la que sigue a la condición. Y finalmente, _es solo un alias para bytes nulos, por conveniencia.

Ahora el código. Brian comienza con esto:

,{-?

Esto lee la entrada en la primera celda de Chuck, luego mueve el cabezal de la cinta hacia la izquierda con {(no hace nada en este momento) y disminuye la entrada -antes de cambiar el control de Chuck si el valor aún no es cero. Esto comienza el ciclo principal. Chuck luego ejecuta este bit:

}<<.{?

Esto mueve la cabeza de la cinta en Brian hasta el final, mueve dos celdas a la izquierda =e imprime antes de la cabeza de la cinta completamente a la izquierda y cambia el control de nuevo a Brian. Así es como los bucles generalmente funcionan en B&C.

Una vez que la entrada se ha reducido a cero, la ?cinta de Brian no hará nada. Entonces Brian ejecuta esta parte:

>}-):(=?

No ):(=hay operaciones, por lo que el código real es justo >}-?. Nos movemos fuera de la celda cero con >, subimos a _con }, decrementamos para que no sea cero y cambiamos a Chuck con ?. Luego se ejecuta el último bit de Chuck:

<.<.<.<.<.

Esto simplemente imprime los cinco caracteres frente a Chuck, es decir =(:)-. Tenga en cuenta que necesitamos imprimir otro =ya que el bucle principal solo se ejecuta N-1veces para la entrada N.

Martin Ender
fuente
10
Felicidades por 100k
Insane
10

V , 8 bytes

Àé=A(:)-

Pruébalo en línea!

V usa la codificación "Latin1".

Explicación:

À        "Arg1 times:
 é=      "Insert an '='
   A(:)- "Append the head
James
fuente
2
@zwei ve mi edición.
James
¡Entendido! Eso es mejor.
Zwei
6

Retina , 10 bytes

.+
$*=(:)-

Pruébalo en línea!

Esta es una simple sustitución de expresiones regulares.

Coincide con lo .+que coincide con toda la entrada, y luego lo sustituye con $*=(;)-.

Esta $*es una característica única en Retina: es el operador especial de repetición de caracteres.

Por ejemplo, 5$*xse convertiría xxxxx.

En el caso de que el argumento anterior esté ausente, toda la coincidencia se utiliza como argumento predeterminado.

Monja permeable
fuente
5

Python, 21 bytes

lambda n:"="*n+"(:)-"

Ideone it!

Monja permeable
fuente
Puede cortar 3 bytes haciendo:"="*input()+"(:)-"
gowrath
@gowrath Entonces no se imprimirá nada
Leaky Nun
Lo emitirá si estás en el intérprete no? Op dijo que puede obtener salida de cualquier manera.
Gowrath
@gowrath No puedes asumir que estamos en REPL
Leaky Nun
¿Es esa una regla general para el golf de código? Nuevo aquí :)
gowrath
5

Haskell, 25 bytes

f n=('='<$[1..n])++"(:)-"

'='<$[1..n]es equivalente a replicate n '='.

Michael Klein
fuente
5

Java 8, 52 bytes

n->new String(new char[n]).replace("\0","=")+"(:)-";

Banco de pruebas. (Compilar> Ejecutar)

Créditos .

la forma tradicional, 61 54 53 bytes

7 bytes gracias a Kevin Cruijssen.

1 byte gracias a Dom Hastings.

n->{String s="";for(;n-->0;)s+="=";return s+"(:)-";};
Monja permeable
fuente
+1 Oh, y para el tradicional: for(int i=0;i<n;i++)se puede jugar golf for(;n>0;n--), ya que de todos modos no necesita la entrada para nada más que el bucle for.
Kevin Cruijssen
@KevinCruijssen Gracias, editado
Leaky Nun
Al probar a través del enlace que proporcionó, parece que puede cambiar el bucle for a: ¡ for(;n-->0;)para guardar otro byte!
Dom Hastings
@DomHastings editado con agradecimiento
Leaky Nun
4

C, 38

f(n){for(;n--;printf(n?"=":"=(:)-"));}

Pruébalo con ideone.

owacoder
fuente
1
No es más corto, pero más frío: f(n){~-printf(n?"=":"=(:)-")||f(~-n);}.
orlp
f(n){for(;n;printf(n--?"=":"(:)-"));}para 1.
Erik the Outgolfer
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ - Eso no genera la cabeza.
owacoder
@owacoder Bueno, C no es mi idioma principal ...
Erik the Outgolfer
1
@ EʀɪᴋᴛʜᴇGᴏʟғᴇʀ Y es por eso que no debe publicar sugerencias de golf no probadas (especialmente si le hubiera tomado 5 segundos probar su sugerencia con el enlace proporcionado en la respuesta).
Martin Ender
4

05AB1E, 10 9 bytes

'=×"ÿ(:)-

Explicación

'=         # push equal-sign
  ×        # repeat input nr of times
   "ÿ(:)-  # interpolate snake body with head as a string
           # implicitly display

Pruébalo en línea

1 byte guardado gracias a Adnan.

Emigna
fuente
'=×"ÿ(:)-por 9 bytes :). Esto utiliza la interpolación de cadenas.
Adnan
1
@Adnan: Aaah, eso es lo que ÿhace :)
Emigna
4

Javascript, 23 bytes

n=>"=".repeat(n)+"(:)-"
eithed
fuente
1
¡Estaba a punto de publicar exactamente ese código! ¡Golpéame! Tener un
voto a favor
Hoy aprendí sobre las funciones de flecha . Gracias. No sabía que era una cosa
bobkingof12vs
¿Cómo se llama a esa instancia de la función? Acabo de intentar n(3)y recibí un Uncaught ReferenceError: n is not definederror ...
WallyWest
@WallyWest - intentex=n=>"=".repeat(n)+"(:)-"; x(7);
eliminado el
@eithedog Entonces, ¿no debería la respuesta tener la inicial x=y cambiarse a 25 caracteres?
WallyWest
4

C #, 28 bytes

n=>new string('=',n)+"(:)-";
TheLethalCoder
fuente
Siempre estoy interesado por los fragmentos de lambda. ¿Cómo puedes ejecutar esto?
downrep_nation
@downrep_nation toma un int y devuelve automáticamente la cadena porque es solo una declaración
TheLethalCoder
La respuesta debe ser un programa completo o una función, no solo un fragmento. Entonces esta respuesta parece incompleta.
raznagul
@raznagul Esta es una función anónima, por lo tanto, está completa
TheLethalCoder
@TheLethalCoder: Quizás intente un enlace en línea para entenderlo ( csharppad.com )
raznagul
4

Python , 24 bytes.

print"="*input()+"(:)-"

input() obtiene entrada del usuario

*, cuando se usa en cadenas y un entero, crea una nueva cadena, que está hecha de copias unidas del original. Por ejemplo: "hello "*3salidas hello hello hello.

Al multiplicar =y input(), obtiene una cadena de =la longitud que especifica el usuario.

El uso +une dos cuerdas, en este caso, nuestro cuerpo "=…="con nuestra cabeza, "(:)-"para hacer la serpiente.

print da salida al resultado.

yo..
fuente
3

GolfScript, 11 10 bytes

~"="*"(:)-"

Multiplica "=" por entrada y agrega encabezado.

-1 gracias a Leaky Nun

No hay nadie aquí
fuente
3

Mathematica, 21 20 bytes

"="~Table~#<>"(:)-"&

Función anónima. Toma un número n como entrada y devuelve una serpiente de longitud n como salida. "="~Table~#genera una lista {"=", "=", ..., "="}de longitud n , y <>"(:)-"concatena los elementos de la lista y se agrega "(:)-"a la cadena resultante.

LegionMammal978
fuente
1
golfable por un byte más:"="~Table~#<>"(:)-"&
LLlAMnYP
3

R, 32 27 bytes

Esta solución es bastante sencilla, la repfunción repite el primer elemento ( "=") scan()veces, que de hecho es la entrada del usuario.

a=scan();cat(rep("=",a),"(:)-")

EDITAR :

cat(rep("=",scan()),"(:)-")

Respuesta ligeramente más corta, usando scan()directamente.

Alternativamente,

cat(rep("=",scan()),"(:)-",sep="")

para una serpiente no picada ( 34 bytes )

Frédéric
fuente
Yo diría que el sep=""que se necesita aquí, de lo contrario su apariencia de serpientes como la que atraviesa la vía férrea: = = = (:)-.
manatwork el
La serpiente producida aquí está un poco picada, pero las consignaciones de OP solo indican que la longitud de la serpiente es el número de signos iguales antes de la cabeza. sepSin embargo, agregaré el como nota al margen;)
Frédéric
3

Lote, 68 bytes

@set h=(:)-
@for /l %%i in (1,1,%1)do @call set h==%%h%%
@echo %h%
Neil
fuente
2

CJam, 13 11 bytes

qi'=*"(:)-"

Pruébalo aquí.

-2 bytes gracias a quartata

acrolito
fuente
Puedes hacer en '=*lugar de {'=}*.
un espagueti
2

Perl 6 ,  16 15  12 bytes

{"{'='x$_}(:)-"}
{'='x$_~'(:)-'}
'='x*~'(:)-'

Explicación:

'=' x * # 「=」 string repeated by the only parameter 「*」
~        # concatenated with
'(:)-'   # the head

Uso:

# store it in the lexical namespace
my &snake = '='x*~'(:)-';

put snake 10;

# put ^5 .map: &snake;
put ^5 .map: '='x*~'(:)-';
==========(:)-
(:)- =(:)- ==(:)- ===(:)- ====(:)- =====(:)-
Brad Gilbert b2gills
fuente
2

JAISBaL , 9 bytes

t=*Qb(:)-

Verboso:

# \# enable verbose parsing #\
push1 =        \# push = onto the stack #\
mul            \# multiply the top two values of the stack #\
popout         \# pop the top value of a stack and print it #\
print4 (:)-    \# print (:)- #\

Probado con JAISBaL-0.0.7 (El .jar compilado se acaba de enviar, pero la fuente ha estado en git durante un tiempo)

Fénix Socrático
fuente
Use un #antes del nombre del idioma para que se vea como el de todos los demás.
Michael Klein
@MichaelKlein está bien
Socrático Phoenix
2

PowerShell v2 +, 19 bytes

'='*$args[0]+'(:)-'

Programa completo Toma datos $args[0], usa la multiplicación de cuerdas para construir el cuerpo, luego la concatenación de cuerdas para pegar en la cabeza.

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 7
=======(:)-

PS C:\Tools\Scripts\golfing> .\snakes-all-around.ps1 77
=============================================================================(:)-
AdmBorkBork
fuente
Felicitaciones a ustedes, llegué a 26:"$("="*[int]$args[0])(:)-"
Chirishman
2

C, 46 45 43 bytes

ahorrado 2 bytes gracias a owacoder! ahorrado 3 bytes gracias a rici!

f(n){while(4-printf("=\0(:)-"+2*!n--));}

Pruébalo en Ideone!

Betseg
fuente
3
El -->operador misterioso ataca de nuevo.
Leaky Nun
@LeakyNun La versión de 46 bytes estaba sin el operador de va a, de lo que recordaba el operador de ir a;)
betseg
1
Puede eliminar >0y guardar dos bytes.
owacoder
Ligeramente más corto:f(n){while(4-printf("=\0(:)-"+2*!n--));}
rici
2

Cheddar, 15 bytes (sin competencia)

n->'='*n+'(:)-'

Una respuesta directa.

Deimos
fuente
1

Sesos , 11 bytes

Hexdump:

0000000: aaaa5e a0f7b4 ed4cee 5d3b                         ..^....L.];

Pruébalo en línea!

Ensamblador:

set numin
add 61
fwd 1
get
jmp,sub 1,rwd 1,put,fwd 1,jnz
add 40,put
rwd 1,sub 3,put
fwd 1,add 1,put
add 4,put
Monja permeable
fuente
1

K, 17 bytes

{,[x#"=";"(:)-"]}

Ejemplo;

f:{,[x#"=";"(:)-"]}
-1(f'!10);          /print out the result of calling f where x is 0 1 2 3 4 5....
(:)-
=(:)-
==(:)-
===(:)-
====(:)-
=====(:)-
======(:)-
=======(:)-
========(:)-
=========(:)-

Explicación;

{}                 /function x is implicit and is an int
x#"="              /take (#) x of "=" --> so 3#"=" gives "==="
,[x#"=";"(:)-"]    /comma is a join that takes 2 args --> ,[x;y] gives the concatination of x and y --> "a","abc" is the same as ,["a";"abc"] and gives "aabc"
Chromozorz
fuente
¿Qué es -1(... );?
Adám
Guardar un byte:{(x#"="),"(:)-"}
Adám
Gracias Adam -1 Imprime en la consola. -1 "Hola"; imprimirá Hello
Chromozorz el
¿Pero no está implícita la impresión?
Adám
Sí, pero incluye las comillas dobles ... "==== (:) -" en lugar de; ===== (
:)
1

Perl, 16 + 1 (-p bandera) = 17 bytes

$_="="x$_."(:)-"

Necesita -pbandera, así que corre con:

perl -pe '$_="="x$_."(:)-"'
Dada
fuente
1

Minkolang 0.15 , 12 bytes

"=(:)-"nD$O.

Pruébalo aquí!

Explicación

"=(:)-"         Push this to the stack in reverse order - ["-",")",":","(","="]
       n        Take number from input
        D       Pop k and duplicate top of stack (the "=") k times
         $O.    Output whole stack as characters and stop.
El'endia Starman
fuente
1

Befunge-98, 24 bytes

Toma datos numéricos del usuario, luego imprime la serpiente.

'=&:00pk:00gk,"-):("4k,@
owacoder
fuente
1

Matlab / Octave, 22 bytes

@(n)[~(1:n)+61 '(:)-']

Esta es una función anónima.

Pruébalo en Ideone .

Explicación

Asumir n= 5 .

1:n produce el vector fila [1 2 3 4 5] .

~(1:n) niega cada entrada, por lo que da [0 0 0 0 0] .

...+61agrega 61a cada entrada, por lo que da [61 61 61 61 61]. 61es el valor ASCII del caracter =.

[... '(:)-']concatena eso con la cadena '(:)-'. Esto se convierte automáticamente [61 61 61 61 61]en la cadena '====='antes de la concatenación.

Luis Mendo
fuente