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

Respuestas:


17

Javascript, 22 bytes

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

Define una función anónima.

Si solo *repite cadenas en Javascript. suspiros


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



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

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

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.


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



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.


6

Haskell, 25 bytes

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

-1 byte gracias a Damien con cycle.


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.


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 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

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


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

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.

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!


¡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!


¡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:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////

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.


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('/',@))

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.


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



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

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.


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);
}

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