A sequência Squiggly

29

Todos os créditos para Adnan por ter vindo com esse desafio.

Meu último desafio, antes que eu pare .

Tarefa

Dado inteiro positivo n, se nfor ímpar, repita /isso muitas vezes; se nfor par, repita \isso várias vezes.

(Sério, os casos de teste seriam muito mais claros do que esta descrição, basta olhar para os casos de teste.)

Especificações

  • Qualquer formato de entrada / saída razoável.
  • Aplicam-se brechas padrão .

Casos de teste

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Freira Furada
fonte

Respostas:

17

Javascript, 22 bytes

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

Define uma função anônima.

Se apenas *strings repetidas em Javascript. suspiros

DanTheMan
fonte
11
Finalmente você encontrou o operador de direito
Leaky Nun
@LeakyNun Do que você está falando?
DanTheMan
Você estava usando o operador ternário para escolher o personagem, não?
Freira vazada
@LeakyNun Inicialmente, sim, mas se você olhar para o bate-papo, eu também postei isso cerca de um minuto depois.
DanTheMan
2
@Jordumus Você poderia atribuir a função a uma variável: f=n=>..., você poderia chamá-lo diretamente: (n=>...)(5). (Ou, se você estiver usando o Node.js REPL, então você poderia usar this._, que significa a última coisa que entrou)
DanTheMan
16

Python, 20 bytes

lambda n:'\/'[n%2]*n
xnor
fonte
Ótimo, simples e elegante ^ _ ^
ABcDexter
9

Perl, 20 bytes

Inclui +1 para -p

Execute com entrada no STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
Ton Hospel
fonte
Pode ser apenas a minha versão do Perl (ainda estou na 5.10), mas isso gera um erro, a menos que eu adicione um extra; até o fim. Eu acho que é porque você está usando o ponto e vírgula como um separador para y e você precisa de mais um para terminar a declaração (e precisaria de dois, se você tivesse mais linhas de código após este)
theLambGoat
@theLambGoat Tem certeza de que está usando a -popção? Eu uso ;no transliterado exatamente porque -ptem um implícito ;no final do código para que eu possa salvar mais 1 byte. Isso tem funcionado, pelo menos desde perl 5,6 (provavelmente enquanto a -popção existia de fato)
Ton Hospel
@theLambGoat Mm, eu encontrei um redhat antigo com o perl 5.10 onde de fato ele não funciona. Ou este é um patch redhat ou ele realmente não funcionou por cerca de 5,10 (estou certo que trabalhou em perls mais velhos e também funciona em perls mais recentes)
Ton Hospel
Estou executando no SUSE Enterprise Server 11, portanto, não é apenas uma coisa de redhat. Mas acho que, desde que funcione em algumas versões, ainda deve ser uma resposta válida. (Eu também verifiquei apenas em 5,08, a única outra versão que tenho acesso a no momento e ele não funciona lá também)
theLambGoat
11
Esse truque com o ;acréscimo de -pé bastante impressionante, bem feito.
Dada
7

Retina , 21

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

Experimente on-line (primeira linha adicionada para permitir a execução de vários casos de teste).

Trauma Digital
fonte
7

C #, 42 bytes

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

Seleciona o caractere correto e cria uma nova sequência que consiste nesse caractere repetidas nvezes.

Scepheo
fonte
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);
Crypto
fonte
6

C, 40 bytes

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

Experimente no Ideone

betseg
fonte
2
putchar(92-n%2*45)tem o mesmo comprimento.
Mbomb007
6

J, 10 bytes

#'\/'{~2|]

Este é um verbo de seis trens, composto por:

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

Este é um gancho entre #e ('\/' {~ 2 | ]); um gancho se (f g) yexpande para y f (g y), então isso se expande para y # (... y), o qual, para caracteres únicos, gera uma lista de ycaracteres.

A segunda parte é um trem de 5 trens, consistindo em:

'\/' {~ 2 | ]

Isso avalia dois garfos:

'\/' {~ (2 | ])

O garfo interno,, 2 | ]é o módulo dois. O garfo externo, portanto, é:

'\/' {~ mod2

Que pega ( {~) o índice mod2 ( mod2) da string /.

Em seguida, usando o gancho de cima:

y # (apt char)

Isso produz o que queremos e terminamos.

Conor O'Brien
fonte
6

Haskell, 25 bytes

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

-1 byte graças a Damien com cycle.

xnor
fonte
11
f n=cycle"\\/"!!n<$[1..n]
Damien
@ Damien Wow, como eu esqueci o ciclo.
xnor
Eu não sei. Mas estou feliz por ter tido a oportunidade de "batida" você uma vez :)
Damien
6

Mathematica, 34 32 28 bytes

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

Função anônima. Pega um número inteiro como entrada e retorna uma lista de caracteres como saída.

LegionMammal978
fonte
Você pode usar ~Table~#.
Martin Ender
Eu acho que foi adicionado na 10.2.
Martin Ender
Além disso, acho que você pode abandonar <>""e retornar uma lista de caracteres.
Martin Ender
11
@MartinEnder Eles devem também ter adicionado ~Do~Infinitye tal 10.2+ bem ...
LegionMammal978
5

Powershell, 30 27 bytes

Atualizar:

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

Mudando para param, graças a timmyd .


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

ou um pouco mais legível

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

Teste:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
krontogiannis
fonte
3
Bem-vindo ao PPCG! É bom ver outro usuário do PowerShell por aqui. Você pode raspar alguns bytes usando a entrada como em param($n)vez de $args, como segue para 27 bytesparam($n)('\','/')[$n%2]*$n
#
5

Mathematica, 29 bytes

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

Cruelmente explora o fato de que [[1]]retorna o primeiro argumento de uma função enquanto [[0]]retorna a própria função (cabeça), aplicada à função estranhamente válida chamada na "\\"qual está sendo "avaliada" em "/".

Greg Martin
fonte
É um pouco menos estranho quando você considera que algo do formulário a[b]é apenas uma expressão genérica com head a(index 0) e elemento b(index 1), e funções são apenas tipos especiais de expressão (na verdade, seria mais correto dizer que funções não são ' expressões, mas são simplesmente regras para transformar expressões que geralmente têm forma f[x...]). :)
Martin Ender
2
Vi muitos idiomas abusados ​​neste site, mas acho que esse é o primeiro abuso do Mathematica que vi. Bom trabalho!
31516 DanTheMan
4

Fourier, 27 bytes

92~SI~N%2{1}{47~S}N(Sai^~i)

Experimente online!

Beta Decay
fonte
4

Braquilog , 15 bytes

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

Experimente online!

Explicação

: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
fonte
4

CJam , 9 bytes

ri_"\/"=*

Experimente online!

Explicação

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
fonte
4

> <> (Peixe), 30 bytes

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

Primeira vez usando esse idioma, mas acho que pelo menos economizei um pouco de espaço usando condicionalmente o / como parte da saída ou um espelho para redirecionar o fluxo. Provavelmente ainda terrivelmente ineficiente, eu sinto que provavelmente poderia ser reduzido um pouco mais, pelo menos.

Entrada é a pilha inicial, saída é stdout

Experimente online!

Callum Kerr
fonte
Bem-vindo à programação de quebra-cabeças e código de golfe!
Dennis
@Dennis Thanks! Agradeço as boas vindas.
Callum Kerr #
4

Dyalog APL , 11 bytes

Requer ⎕IO←0qual é o padrão em muitos sistemas.

⊢⍴'\/'⊃⍨2|⊢

o argumento

remodelar (repetições)

'\/'⊃⍨ a sequência "/" selecionada por

2|⊢ a divisão restante quando o argumento é dividido por dois

TryAPL online!

Adão
fonte
Legal! Muito parecido com J.
Conor O'Brien
@ ConorO'Brien Sim, a única diferença é que os trens de 2 em J são ganchos, enquanto estão no topo de Dyalog, então é necessário um dente esquerdo explícito.
Adám 31/08/16
Ah, eu queria saber por que o argumento estava lá.
Conor O'Brien
11
Finalmente, uma resposta da APL com todos os caracteres renderizados corretamente para mim!
Cyoce 31/08/16
@ Cyoce Sim, eu gostaria que pudéssemos especificar (e incorporar) fontes no SE.
Adám 31/08/16
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 salvos graças a @ user902383 e @SeanBean .

Assim como nesta resposta , o código de golfe mais curto parece circular e imprimir. Recursivo e
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
parece ser mais longo.

Ungolfed & código de teste:

Experimente aqui.

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

Saída:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
Kevin Cruijssen
fonte
Oi Kevin. Por que não uma expressão lambda?
Vale
@Vale Hi Vale. Porque eu sou um programador Java 7 à moda antiga. :) Se você tiver uma resposta Java 8 ou 9 ligeiramente diferente da minha resposta, sinta-se à vontade para publicá-la.
Kevin Cruijssen
2
@Vale (ele é estranho assim: P) #
Shaun Wild
11
Acho que se você mudar x=-1;++x<ipara x=0;x++<ique você pode reduzir em um byte
user902383
11
Também você pode substituir "\\" : "/"com 92:'/';)
Shaun Wild
3

R, 47 46 bytes

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

Em R, você precisa escapar de barras invertidas. o argumento septambém precisa ser totalmente especificado, pois vem depois .... Assim, irritantemente poucas oportunidades para salvar caracteres :(

Graças ao bouncyball por jogar fora um byte.

JDL
fonte
11
Salve um byte usando a indexação:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball 31/08/16
3

T-SQL 50 bytes

Claro que não STDINaqui, então vamos assumir uma INTvariável codificada como esta: DECLARE @ INTentão a solução é:

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

Pip , 8 bytes

"\/"@aXa

Direto. Utiliza indexação modular para selecionar a repetição de caracteres e seqüências para multiplicá-lo. Experimente online!


Esta pergunta apresenta uma comparação interessante entre Pip, Pyth e Jelly , os dois últimos com 5 bytes. Todos os três idiomas têm saída implícita, com operadores de caractere único para indexação modular e repetição de cadeias, e nenhum requisito para escapar de barras invertidas nas cadeias. Existem duas diferenças principais, no entanto:

  1. Sob certas circunstâncias, Pyth e Jelly precisam de apenas um delimitador para definir uma string;
  2. Pyth e Jelly têm uma sintaxe tal que a entrada não precisa ser explicitamente representada no código (embora por razões muito diferentes, como Maltysen me explicou ).

É provável que nenhum desses recursos apareça no Pip 1 (não gosto da estética de delimitadores desequilibrados, e sintaxe sem pontos ou operandos implícitos parecem que seriam muito estranhos ao meu analisador de expressões infix), mas eu ' estou bem em tocar terceiro violino. Mesmo que a "legibilidade" seja extremamente relativa no golfe, eu argumentaria que esses três bytes extras tornam o programa Pip muito mais fácil de entender de relance - e, no meu livro, essa é uma troca interessante.

1 Embora, cadeias de caracteres únicos no Pip usem um único 'delimitador, inspirado no CJam e citando no Lisp.

DLosc
fonte
Não tenho certeza de que a legibilidade seja uma vantagem, no código golf? Não à custa de bytes !
GreenAsJade 31/08
@GreenAsJade Espero que muitas pessoas sintam o mesmo. Eu apenas faria uma distinção code golf:! = golflang design. Agora você pode argumentar que o mesmo princípio (menor é sempre melhor) também se aplica ao design da linguagem. Só estou dizendo que, para mim, usabilidade e até estética são considerações.
DLosc 31/08/16
Pro dica para fazer uma linguagem de golfe: não use infix
Cyoce
pyth não possui sintaxe implícita de pontos livres. funciona da mesma maneira que em python, tornando-o legível e curto. seu comentário sobre os delimitadores desequilibradas, por outro lado é muito verdadeiro
Maltysen
2

Pitão , 5 bytes

*@"\/

Suíte de teste.

Indexação modular na string \/e repita.

Freira Furada
fonte
14
Você está fazendo o seu próprio desafio?
Xnor
11
@ xnor não é exatamente o meu desafio.
Freira vazada
2

Perl 6 , 16 bytes

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

Uso:

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

Julia, 20 bytes

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

SpecBAS - 28 bytes

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

ODDretorna 1 se o número for ímpar e o usa como índice para imprimir o caractere correto n número de vezes. É necessário adicionar 1, pois as cadeias SpecBAS começam no caractere 1.

Brian
fonte
2

Java 8, 56 bytes

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

Gostaria de agradecer a @Kevin Cruijssen em avançado por jogar minha resposta ainda mais.

Programa de Teste Ungolfed

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
fonte
2

Na verdade, 10 bytes

Sugestões de golfe são bem-vindas. Experimente online!

;'\'/2(%I*

Como 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
fonte