The Squiggly Sequence

29

Tous les crédits à Adnan pour avoir relevé ce défi.

Mon dernier défi, avant de partir en pause .

Tâche

Étant donné un entier positif n, s'il nest impair, répétez /cela plusieurs fois; si nc'est pair, répétez \cela plusieurs fois.

(Sérieusement, les cas de test seraient beaucoup plus clairs que cette description, alors regardez simplement les cas de test.)

Spécifications

Cas de test

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Leaky Nun
la source

Réponses:

17

Javascript, 22 octets

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

Définit une fonction anonyme.

Si seulement *des chaînes répétées en Javascript. soupire

DanTheMan
la source
1
Enfin, vous avez trouvé le bon opérateur
Leaky Nun
@LeakyNun De quoi parlez-vous?
DanTheMan
Vous utilisiez l'opérateur ternaire pour choisir le personnage, non?
Leaky Nun
@LeakyNun Initialement, oui, mais si vous regardez le chat, je l'ai également posté environ une minute plus tard.
DanTheMan
2
@Jordumus Vous pouvez soit assigner la fonction à une variable: f=n=>..., vous pouvez appeler directement le: (n=>...)(5). (Ou si vous utilisez le Node.js REPL, alors vous pouvez utiliser this._, ce qui représente la dernière chose entrée)
DanTheMan
16

Python, 20 octets

lambda n:'\/'[n%2]*n
xnor
la source
Grand, simple et élégant ^ _ ^
ABcDexter
9

Perl, 20 octets

Comprend +1 pour -p

Exécuter avec entrée sur STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
Ton Hospel
la source
Il s'agit peut-être de ma version de Perl (je suis toujours sur 5.10) mais cela génère une erreur à moins que j'ajoute un supplément; jusqu'à la fin. Je pense que c'est parce que vous utilisez le point-virgule comme séparateur pour y et vous en avez besoin d'un de plus pour terminer la déclaration (et en auriez besoin de deux si vous aviez plus de lignes de code après cela)
theLambGoat
@theLambGoat Êtes-vous sûr que vous utilisez l' -poption? J'utilise ;dans la translittération exactement parce qu'il y -pa un implicite ;à la fin du code pour que je puisse économiser 1 octet de plus. Cela fonctionne depuis au moins Perl 5.6 (probablement aussi longtemps que l' -poption existe)
Ton Hospel
@theLambGoat Mm, j'ai trouvé un vieux redhat avec perl 5.10 où en effet ça ne marche pas. Soit il s'agit d'un correctif redhat, soit il n'a en effet pas fonctionné pour environ 5.10 (je suis sûr qu'il fonctionnait dans les anciennes perles et il fonctionne également dans les nouvelles perles)
Ton Hospel
J'exécute sur SUSE Enterprise Server 11, ce n'est donc pas seulement une chose redhat. Mais je pense que tant que cela fonctionne dans certaines versions, cela devrait toujours être une réponse valide. (Je viens également de m'enregistrer en 5.08, la seule autre version à laquelle j'ai accès en ce moment et cela ne fonctionne pas non plus)
theLambGoat
1
Cette astuce avec l' ;ajout par -pest assez géniale, bien faite.
Dada
7

C #, 42 octets

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

Sélectionne le caractère correct, puis crée une nouvelle chaîne composée de ce caractère répété plusieurs nfois.

Scepheo
la source
7

PHP, 38 octets

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

(variante 38 octets)

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

(variante 38 octets)

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

(variante 40 octets)

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

C, 40 octets

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

Essayez-le sur Ideone

betseg
la source
2
putchar(92-n%2*45)est de la même longueur.
mbomb007
6

Gelée , 5 octets

ị⁾/\x

Essayez-le en ligne! ou Vérifiez tous les cas de test.

ị⁾/\x

ị⁾/\    modular-indexing into the string "/\"
    x   repeat
Leaky Nun
la source
Bien que je soupçonne que ce défi peut avoir quelque chose à voir avec son existence, il convient de noter que Ø^c'est un octet plus court que ⁾/\ .
Chaîne indépendante
6

J, 10 octets

#'\/'{~2|]

Il s'agit d'un verbe à six trains, composé de:

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

Ceci est un crochet entre #et ('\/' {~ 2 | ]); un crochet se (f g) ydéveloppe en y f (g y), donc cela se développe en y # (... y), ce qui, pour les caractères uniques, produit une liste de ycaractères.

La deuxième partie est un 5 trains, composé de:

'\/' {~ 2 | ]

Cela équivaut à deux fourches:

'\/' {~ (2 | ])

La fourche intérieure,, 2 | ]est le module deux. La fourche extérieure est donc:

'\/' {~ mod2

Qui prend ( {~) l'index mod2 ( mod2) de la chaîne /.

Ensuite, en utilisant le crochet d'en haut:

y # (apt char)

Cela donne ce que nous voulons, et nous avons terminé.

Conor O'Brien
la source
6

Haskell, 25 octets

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

-1 octet merci à Damien avec cycle.

xnor
la source
1
f n=cycle"\\/"!!n<$[1..n]
Damien
@Damien Wow, comment ai-je oublié le cycle.
xnor
Je ne sais pas. Mais je suis content d'avoir eu l'occasion de vous "battre" une fois :)
Damien
6

Mathematica, 34 32 28 octets

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

Fonction anonyme. Prend un entier en entrée et renvoie une liste de caractères en sortie.

LegionMammal978
la source
Vous pouvez utiliser ~Table~#.
Martin Ender
Je pense qu'il a été ajouté en 10.2.
Martin Ender
De plus, je pense que vous pouvez abandonner le <>""et renvoyer une liste de personnages.
Martin Ender
1
@MartinEnder Ils doivent également avoir ajouté ~Do~Infinityet tels dans 10.2+ aussi ...
LegionMammal978
5

Powershell, 30 27 octets

Mise à jour:

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

Passer à param, grâce à timmyd .


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

ou légèrement plus lisible

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

Tester:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
krontogiannis
la source
3
Bienvenue chez PPCG! Ravi de voir un autre utilisateur PowerShell ici. Vous pouvez raser quelques octets en prenant l'entrée comme param($n)au lieu de $args, comme suit pour 27 octets -param($n)('\','/')[$n%2]*$n
AdmBorkBork
5

Mathematica, 29 octets

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

Cruelly exploite le fait que [[1]]renvoie le premier argument d'une fonction tandis que [[0]]renvoie la fonction (head) elle-même, appliquée à la fonction étrangement valide nommée "\\"qui est "évaluée" à "/".

Greg Martin
la source
C'est un peu moins bizarre quand on considère que quelque chose de la forme a[b]n'est qu'une expression générique avec head a(index 0) et element b(index 1), et les fonctions ne sont que des types spéciaux d'expression (en fait, il serait plus correct de dire que les fonctions ne sont pas '' t expressions, mais ne sont que des règles pour transformer des expressions qui ont généralement une forme f[x...]). :)
Martin Ender
2
J'ai vu de nombreuses langues abusées sur ce site, mais je pense que c'est le premier abus de Mathematica que j'ai vu. Bon travail!
DanTheMan
4

Brachylog , 15 octets

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

Essayez-le en ligne!

Explication

: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
Fatalize
la source
4

CJam , 9 octets

ri_"\/"=*

Essayez-le en ligne!

Explication

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
la source
4

> <> (Poisson), 30 octets

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

Première utilisation de ce langage, mais je pense qu'au moins j'ai économisé un peu de place en utilisant conditionnellement le / comme partie de la sortie ou un miroir pour rediriger le flux. Probablement encore horriblement inefficace, j'ai l'impression que cela pourrait probablement être réduit un peu plus au moins.

L'entrée est la pile initiale, la sortie est stdout

Essayez-le en ligne!

Callum Kerr
la source
Bienvenue sur Programmation Puzzles & Code Golf!
Dennis
@Dennis Merci! J'apprécie l'accueil.
Callum Kerr
4

Dyalog APL , 11 octets

Requiert ⎕IO←0ce qui est par défaut sur de nombreux systèmes.

⊢⍴'\/'⊃⍨2|⊢

l'argument

remodèle (répète)

'\/'⊃⍨ la chaîne "/" sélectionnée par

2|⊢ le reste de la division lorsque l'argument est divisé par deux

TryAPL en ligne!

Adam
la source
Cool! Très similaire à J.
Conor O'Brien
@ ConorO'Brien Oui, la seule différence est que les 2 trains en J sont des crochets, alors qu'ils sont au sommet de Dyalog, donc une dent gauche explicite est nécessaire.
Adám
Ah, je me demandais pourquoi l'argument était là.
Conor O'Brien
1
Enfin une réponse APL avec tous les caractères rendus correctement pour moi!
Cyoce
@Cyoce Oui, je souhaite que nous puissions spécifier (et intégrer) des polices sur SE.
Adám
3

Java 7, 68 65 octets

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

3 octets enregistrés grâce à @ user902383 et @SeanBean .

Tout comme avec cette réponse , le code-golf le plus court semble boucler et s'imprimer. Les deux récursifs et
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
semblent être plus longs.

Code non testé et testé:

Essayez-le ici.

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

Sortie:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
Kevin Cruijssen
la source
Salut Kevin. Pourquoi pas une expression Lambda?
Vale
@Vale Salut Vale. Parce que je suis un programmeur Java 7 à l'ancienne mode. :) Si vous avez une réponse Java 8 ou 9 légèrement différente de ma réponse, n'hésitez pas à la poster.
Kevin Cruijssen
2
@Vale (il est bizarre comme ça: P)
Shaun Wild
1
je pense que si vous passez x=-1;++x<ià x=0;x++<ivous pouvez réduire d'un octet
user902383
1
Vous pouvez également remplacer "\\" : "/"par 92:'/';)
Shaun Wild
3

R, 47 46 octets

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

Dans R, vous devez échapper aux barres obliques inverses. l'argument sepdoit également être entièrement spécifié car il vient après .... Ainsi, peu d'occasions de sauver les caractères :(

Merci à bouncyball d'avoir joué un octet au golf.

JDL
la source
1
Économisez un octet en utilisant l'indexation:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball
3

T-SQL 50 octets

Bien sûr que non STDINici, supposons donc une INTvariable codée en dur comme ceci: DECLARE @ INTalors la solution est:

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

Pip , 8 octets

"\/"@aXa

Simple. Utilise l'indexation modulaire pour sélectionner le caractère et la répétition de chaîne pour le multiplier. Essayez-le en ligne!


Cette question présente une comparaison intéressante entre Pip, Pyth et Jelly , les deux derniers ayant chacun marqué 5 octets. Les trois langues ont une sortie implicite, avec des opérateurs à caractère unique pour l'indexation modulaire et la répétition de chaînes, et aucune obligation d'échapper les barres obliques inverses dans les chaînes. Il existe cependant deux différences clés:

  1. Dans certaines circonstances, Pyth et Jelly n'ont besoin que d'un délimiteur pour définir une chaîne;
  2. Pyth et Jelly ont une syntaxe telle que l'entrée n'a pas besoin d'être explicitement représentée dans le code (bien que pour des raisons très différentes, comme Maltysen me l'a expliqué ).

Aucune de ces fonctionnalités ne devrait apparaître dans Pip 1 (je n'aime pas l'esthétique des délimiteurs non équilibrés, et la syntaxe sans point ou les opérandes implicites semblent être trop étrangers à mon analyseur d'expression d'infixe), mais je '' m d'accord avec jouer le troisième violon. Même si la "lisibilité" est extrêmement relative lors du golf, je dirais que ces trois octets supplémentaires rendent le programme Pip beaucoup plus facile à comprendre en un coup d'œil - et dans mon livre, c'est un compromis valable.

1 Bien que les chaînes à caractère unique dans Pip utilisent un seul 'délimiteur, inspiré de CJam et des citations en Lisp.

DLosc
la source
Je ne suis pas sûr que la lisibilité soit un plus, en code golf? Pas au prix d' octets !
GreenAsJade
@GreenAsJade Je m'attends à ce que beaucoup de gens ressentent la même chose. Je ferais juste une distinction code golf:! = golflang design. Vous pouvez maintenant affirmer que le même principe (plus court est toujours meilleur) s'applique également à la conception de langage. Je dis juste que pour moi, l'utilisabilité et même l'esthétique sont des considérations.
DLosc
Astuce de
pyth n'a pas de syntaxe implicite sans points. il fonctionne à peu près de la même manière qu'en python, ce qui le rend lisible mais court. votre commentaire sur les délimiteurs déséquilibrés d'autre part est assez vrai
Maltysen
2

Pyth , 5 octets

*@"\/

Suite de tests.

Indexation modulaire dans la chaîne \/, puis répétez.

Leaky Nun
la source
14
Vous relevez votre propre défi FGITW?
xnor
1
@xnor ce n'est pas exactement mon défi.
Leaky Nun
2

Perl 6 , 16 octets

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

Usage:

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

Julia, 20 octets

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

SpecBAS - 28 octets

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

ODDretourne 1 si le nombre est impair, puis l'utilise comme index pour imprimer le bon caractère n nombre de fois. Vous devez ajouter 1 car les chaînes SpecBAS commencent au caractère 1.

Brian
la source
2

Java 8, 56 octets

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

Je voudrais remercier @Kevin Cruijssen à l'avance pour avoir approfondi ma réponse.

Programme de test non 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
la source
2

En fait, 10 octets

Suggestions de golf bienvenues. Essayez-le en ligne!

;'\'/2(%I*

Comment ça marche

       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
la source