La secuencia Squiggly

29

Todos los créditos a Adnan por venir con este desafío.

Mi último desafío, antes de irme de vacaciones .

Tarea

Dado un entero positivo n, si nes impar, repita /eso muchas veces; si nes par, repite \eso muchas veces.

(En serio, los casos de prueba serían mucho más claros que esta descripción, así que solo mire los casos de prueba).

Especificaciones

Casos de prueba

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Monja permeable
fuente

Respuestas:

17

Javascript, 22 bytes

n=>"\\/"[n%2].repeat(n)

Define una función anónima.

Si solo *repite cadenas en Javascript. suspiros

DanTheMan
fuente
1
Finalmente has encontrado al operador adecuado
Leaky Nun
@LeakyNun ¿De qué estás hablando?
DanTheMan
Estabas usando el operador ternario para elegir el personaje, ¿no?
Leaky Nun
@LeakyNun Inicialmente, sí, pero si miras el chat, también publiqué esto aproximadamente un minuto después.
DanTheMan
2
@Jordumus O se podría asignar la función a una variable: f=n=>..., se podría llamar directamente: (n=>...)(5). (O si está utilizando Node.js REPL, entonces podría usar this._, que representa lo último ingresado)
DanTheMan
16

Python, 20 bytes

lambda n:'\/'[n%2]*n
xnor
fuente
Genial, simple y elegante ^ _ ^
ABcDexter
9

Perl, 20 bytes

Incluye +1 para -p

Ejecutar con entrada en STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
Ton Hospel
fuente
Podría ser mi versión de Perl (todavía estoy en 5.10) pero esto arroja un error a menos que agregue un extra; hasta el final. Creo que es porque está usando el punto y coma como separador para y y necesita uno más para terminar la declaración (y necesitaría dos si tuviera más líneas de código después de esto)
theLambGoat
@theLambGoat ¿Está seguro de que está utilizando la -popción? Lo uso ;en la transliteración exactamente porque -ptiene un implícito ;al final del código para que pueda guardar 1 byte más. Esto ha funcionado desde al menos 5.6 (probablemente mientras -pexistiera la opción)
Ton Hospel
@ theLambGoat Mm, encontré un viejo sombrero rojo con perl 5.10 donde de hecho no funciona. O este es un parche redhat o de hecho no funcionó durante alrededor de 5.10 (estoy seguro de que funcionó en perls más antiguos y también funciona en perls más nuevos)
Ton Hospel
Estoy ejecutando SUSE Enterprise Server 11, así que no es solo una cosa roja. Pero creo que mientras funcione en algunas versiones, debería ser una respuesta válida. (También acabo de registrarme en 5.08, la única otra versión a la que tengo acceso en este momento y tampoco funciona allí)
theLambGoat
1
Ese truco con el ;agregado por -pes bastante impresionante, bien hecho.
Dada
7

Retina , 21

.+
$*/
T`/`\\`^(..)+$

Pruébelo en línea (se agregó la primera línea para permitir la ejecución de múltiples casos de prueba).

Trauma digital
fuente
7

C #, 42 bytes

string f(int n)=>new string("\\/"[n%2],n);

Selecciona el carácter correcto, luego crea una nueva cadena que consta de ese carácter repetidas nveces.

Scepheo
fuente
7

PHP, 38 bytes

for(;$i++<$a=$argv[1];)echo'\/'[$a%2];

(variante 38 bytes)

while($i++<$a=$argv[1])echo'\/'[$a%2];

(variante 38 bytes)

<?=str_pad('',$a=$argv[1],'\/'[$a%2]);

(variante 40 bytes)

<?=str_repeat('\/'[($a=$argv[1])%2],$a);
Cripto
fuente
6

C, 40 bytes

i;f(n){for(i=n;i--;)putchar(n%2?47:92);}

Pruébalo en Ideone

Betseg
fuente
2
putchar(92-n%2*45)es de la misma longitud
mbomb007
6

Jalea , 5 bytes

ị⁾/\x

Pruébalo en línea! o Verificar todas las cajas de prueba.

ị⁾/\x

ị⁾/\    modular-indexing into the string "/\"
    x   repeat
Monja permeable
fuente
Aunque sospecho que este desafío puede tener algo que ver con su existencia, vale la pena señalar que Ø^es un byte más corto que ⁾/\ .
Cadena no relacionada
6

J, 10 bytes

#'\/'{~2|]

Este es un verbo de seis trenes, que consiste en:

# ('\/' {~ 2 | ])

Este es un gancho entre #y ('\/' {~ 2 | ]); un gancho se (f g) yexpande a y f (g y), por lo que esto se expande a y # (... y), que, para caracteres únicos, produce una lista de ycaracteres.

La segunda parte es un tren de 5, que consiste en:

'\/' {~ 2 | ]

Esto se evalúa en dos tenedores:

'\/' {~ (2 | ])

La horquilla interna 2 | ], es el módulo dos. La horquilla exterior, por lo tanto, es:

'\/' {~ mod2

Que toma ( {~) el índice mod2 ( mod2) de la cadena /.

Luego, usando el gancho de arriba:

y # (apt char)

Esto produce lo que queremos, y hemos terminado.

Conor O'Brien
fuente
6

Haskell, 25 bytes

f n=cycle"\\/"!!n<$[1..n]

-1 byte gracias a Damien con cycle.

xnor
fuente
1
f n=cycle"\\/"!!n<$[1..n]
Damien
@Damien Wow, ¿cómo olvidé el ciclo?
xnor
No lo sé. Pero me alegro de haber tenido la oportunidad de "vencerte" una vez :)
Damien
6

Mathematica, 34 32 28 bytes

If[OddQ@#,"/","\\"]~Table~#&

Función anónima. Toma un entero como entrada y devuelve una lista de caracteres como salida.

LegionMammal978
fuente
Puedes usar ~Table~#.
Martin Ender
Creo que se agregó en 10.2.
Martin Ender
Además, creo que puedes deshacerte de él <>""y devolver una lista de personajes.
Martin Ender
1
@MartinEnder También deben haber agregado ~Do~Infinityy tal en 10.2+ también ...
LegionMammal978
5

Powershell, 30 27 bytes

Actualizar:

param($n)('\','/')[$n%2]*$n

Cambiando a param, gracias a timmyd .


"$("\/"[$args[0]%2])"*$args[0]

o un poco más legible

("\","/")[$args[0]%2]*$args[0]

Prueba:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
krontogiannis
fuente
3
Bienvenido a PPCG! Es bueno ver a otro usuario de PowerShell por aquí. Puede reducir algunos bytes tomando la entrada como en param($n)lugar de $args, como sigue, para 27 bytes:param($n)('\','/')[$n%2]*$n
AdmBorkBork
5

Mathematica, 29 bytes

"\\"["/"][[#~Mod~2]]~Table~#&

Explota cruelmente el hecho de que [[1]]devuelve el primer argumento de una función mientras [[0]]devuelve la función (cabeza) en sí, aplicada a la función extrañamente válida llamada "\\"que se está "evaluando" en "/".

Greg Martin
fuente
Es un poco menos extraño cuando considera que algo de la forma a[b]es solo una expresión genérica con head a(index 0) y element b(index 1), y las funciones son solo tipos especiales de expresión (en realidad, sería más correcto decir que las funciones no son ' t expresiones en absoluto, pero son simplemente reglas para transformar expresiones que generalmente tienen forma f[x...]). :)
Martin Ender
2
He visto muchos idiomas abusados ​​en este sitio, pero creo que este es el primer abuso de Mathematica que he visto. ¡Buen trabajo!
DanTheMan
4

Brachylog , 15 bytes

:2%:"\/"rm:?jbw

Pruébalo en línea!

Explicación

:2%                Input mod 2…
   :"\/"rm         …is the index of the element in string "\/",…
          :?j      …element that we juxtapose Input times to itself…
             bw    …and print to STDOUT after removing one slash/backslash
Fatalizar
fuente
4

CJam , 9 bytes

ri_"\/"=*

Pruébalo en línea!

Explicación

ri     e# Read input and convert to integer N.
_      e# Duplicate N.
"\/"=  e# Use N as cyclic index into "\/", giving '\ for even and '/ for odd inputs.
*      e# Repeat N times.
Martin Ender
fuente
4

> <> (Pescado), 30 Bytes

:2%?'/'o1-:?!;30.
30.  >'\'50p

La primera vez que uso este lenguaje, pero creo que al menos ahorré un poco de espacio al usar condicionalmente / como parte de la salida o un espejo para redirigir el flujo. Sin embargo, probablemente todavía sea terriblemente ineficiente, siento que probablemente podría reducirse un poco más como mínimo.

La entrada es la pila inicial, la salida es stdout

Pruébalo en línea!

Callum Kerr
fuente
¡Bienvenido a Programming Puzzles & Code Golf!
Dennis
@ Dennis Gracias! Agradezco la bienvenida.
Callum Kerr
4

Dyalog APL , 11 bytes

Requiere ⎕IO←0cuál es el predeterminado en muchos sistemas.

⊢⍴'\/'⊃⍨2|⊢

el argumento

remodela (se repite)

'\/'⊃⍨ la cadena "/" seleccionada por

2|⊢ el resto de la división cuando el argumento se divide por dos

TryAPL en línea!

Adán
fuente
¡Guay! Muy similar a J.
Conor O'Brien
@ ConorO'Brien Sí, la única diferencia es que los 2 trenes en J son ganchos, mientras que están en lo alto de Dyalog, por lo que se necesita un diente izquierdo explícito.
Adám
Ah, me preguntaba por qué la discusión estaba allí.
Conor O'Brien
1
¡Finalmente una respuesta APL con todos los caracteres representados correctamente para mí!
Cyoce
@Cyoce Sí, desearía poder especificar (e incrustar) fuentes en SE.
Adám
3

Java 7, 68 65 bytes

void c(int i){for(int x=0;x++<i;)System.out.print(i%2<1?92:'/');}

3 bytes guardados gracias a @ user902383 y @SeanBean .

Al igual que con esta respuesta , el código de golf más corto parece recorrer e imprimir. Ambos recursivos y
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
parecen ser más largos.

Ungolfed y código de prueba:

Pruébalo aquí.

class M{
  static void c(int i){
    for(int x = 0; x++ < i;){
      System.out.print(i % 2 < 1
                        ? 92
                        : '/');
    }
  }

  public static void main(String[] a){
    for(int i = 0; i < 10; i++){
      c(i);
      System.out.println();
    }
  }
}

Salida:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
Kevin Cruijssen
fuente
Hola Kevin. ¿Por qué no una expresión lambda?
Vale
@Vale Hola Vale. Porque soy un antiguo programador de Java 7. :) Si tiene una respuesta Java 8 o 9 que es ligeramente diferente a mi respuesta, no dude en publicarla.
Kevin Cruijssen
2
@Vale (es extraño así: P)
Shaun Wild
1
Creo que si cambia x=-1;++x<ia x=0;x++<iusted puede reducir en un byte
user902383
1
También puede reemplazar "\\" : "/"con 92:'/';)
Shaun Wild
3

R, 47 46 bytes

n=scan();cat(rep(c("\\","/")[n%%2+1],n),sep="")

En R, debes escapar de las barras invertidas. el argumento septambién debe especificarse por completo ya que viene después .... Por lo tanto, molestamente pocas oportunidades para guardar caracteres :(

Gracias a bouncyball por jugar golf un byte.

JDL
fuente
1
Ahorre un byte mediante la indexación:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball
3

T-SQL 50 bytes

Por supuesto que no STDINaquí, así que supongamos una INTvariable codificada como esta: DECLARE @ INTentonces la solución es:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))
S.Karras
fuente
3

Pip , 8 bytes

"\/"@aXa

Sencillo. Utiliza indexación modular para seleccionar el carácter y la repetición de cadena para multiplicarlo. Pruébalo en línea!


Esta pregunta presenta una comparación interesante entre Pip, Pyth y Jelly , cada uno de los cuales tiene una puntuación de 5 bytes. Los tres idiomas tienen una salida implícita, con operadores de un solo carácter para la indexación modular y la repetición de cadenas, y no es necesario escapar de las barras diagonales inversas en las cadenas. Sin embargo, hay dos diferencias clave:

  1. Bajo ciertas circunstancias, Pyth y Jelly solo necesitan un delimitador para definir una cadena;
  2. Pyth y Jelly tienen una sintaxis tal que la entrada no necesita ser representada explícitamente en el código (aunque por razones muy diferentes, como me explicó Maltysen ).

Es probable que ninguna de estas características aparezca en el Pip 1 (no me gusta la estética de los delimitadores desequilibrados, y la sintaxis sin puntos o los operandos implícitos parecen ser demasiado ajenos a mi analizador de expresiones infijo), pero yo Estoy de acuerdo con tocar el tercer violín. Aunque la "legibilidad" es extremadamente relativa cuando se juega al golf, diría que esos tres bytes adicionales hacen que el programa Pip sea mucho más fácil de entender de un vistazo, y en mi libro, eso es una compensación que vale la pena.

1 Aunque, las cadenas de un solo carácter en Pip usan un solo 'delimitador, inspirado en CJam y citando en Lisp.

DLosc
fuente
No estoy seguro de que la legibilidad sea una ventaja, en el código de golf? ¡No a costa de bytes !
GreenAsJade
@GreenAsJade Espero que mucha gente sienta lo mismo. Solo haría una distinción code golf:! = golflang design. Ahora bien puede argumentar que el mismo principio (más corto siempre es mejor) se aplica también al diseño del lenguaje. Solo digo que para mí, la usabilidad e incluso la estética son consideraciones.
DLosc
Consejo
pyth no tiene sintaxis libre de puntos implícita. Funciona de la misma manera que en Python, por lo que es legible pero corto. su comentario sobre los delimitadores desequilibrados, por otro lado, es bastante cierto
Maltysen
2

Pyth , 5 bytes

*@"\/

Banco de pruebas.

Indización modular en la cadena \/y luego repetir.

Monja permeable
fuente
14
¿Estás FGITW'ing su propio desafío?
xnor
1
@xnor no es exactamente mi desafío.
Leaky Nun
2

Perl 6 , 16 bytes

{<\ />[$_%2]x$_}

Uso:

for 1..6 {
  say $_, {<\ />[$_%2]x$_}( $_ )
}
1/
2\\
3///
4\\\\
5/////
6\\\\\\
Brad Gilbert b2gills
fuente
2

Julia, 20 bytes

!x="$("/\\"[x%2])"^x
Mama Fun Roll
fuente
2

SpecBAS - 28 bytes

1 INPUT n: ?"\/"(ODD(n)+1)*n

ODDdevuelve 1 si el número es impar, luego lo usa como índice para imprimir el carácter correcto n veces. Debe agregar 1 ya que las cadenas de SpecBAS comienzan en el carácter 1.

Brian
fuente
2

Java 8, 56 bytes

(i,j)->{for(j=i;j-->0;)System.out.print(i%2<1?92:'/');};

Me gustaría agradecer a @Kevin Cruijssen de antemano por jugar más al golf mi respuesta.

Programa de prueba sin golf

public static void main(String[] args) {
    BiConsumer<Integer, Integer> consumer = (i, j) -> {
        for (j = i; j-- > 0;) {
            System.out.print(i % 2 < 1 ? 92 : '/');
        }
    };

    consumer.accept(5, 0);
    consumer.accept(1, 0);
    consumer.accept(8, 0);
}
Shaun Wild
fuente
2

En realidad, 10 bytes

Sugerencias de golf bienvenidas. Pruébalo en línea!

;'\'/2(%I*

Cómo funciona

       Implicit input of n
;      Duplicate n
'\'/   The strings "/" and "\"
2(%    n mod 2
I      If n mod 2, then "/", else "\"
*      Multiply by n. Implicit print at the end.
Sherlock9
fuente