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.

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 \
   . ; . . \
    . . . .

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


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


10
Felicidades por 100k
Insane


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.


5

Python, 21 bytes

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

Ideone it!


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 '='.


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+"(:)-";};

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


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.


'=×"ÿ(:)-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)+"(:)-"

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)+"(:)-";

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.


3

GolfScript, 11 10 bytes

~"="*"(:)-"

Multiplica "=" por entrada y agrega encabezado.

-1 gracias a Leaky Nun


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.


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 )


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%


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*~'(:)-';
==========(:)-
(:)- =(:)- ==(:)- ===(:)- ====(:)- =====(:)-

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)


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
=============================================================================(:)-

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!


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.


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

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"

¿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$_."(:)-"'

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.

1

Befunge-98, 24 bytes

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

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

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.

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.