Die schnörkellose Sequenz

29

Wir danken Adnan für diese Herausforderung.

Meine letzte Herausforderung, bevor ich in die Pause gehe .

Aufgabe

Angesichts positive ganze Zahl n, wenn nungerade ist, wiederholen , /dass viele Male; Wenn ngerade, wiederholen Sie \das viele Male.

(Im Ernst, die Testfälle wären viel klarer als diese Beschreibung, schauen Sie sich also einfach die Testfälle an.)

Technische Daten

Testfälle

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\
Undichte Nonne
quelle

Antworten:

17

Javascript, 22 Bytes

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

Definiert eine anonyme Funktion.

Wenn nur *wiederholte Zeichenfolgen in Javascript. seufzt

DanTheMan
quelle
1
Endlich haben Sie den richtigen Betreiber gefunden
Leaky Nun
@LeakyNun Wovon redest du?
DanTheMan
Sie haben den ternären Operator verwendet, um den Charakter auszuwählen, nein?
Undichte Nonne
@LeakyNun Anfangs ja, aber wenn Sie sich den Chat ansehen, habe ich diesen auch ungefähr eine Minute später gepostet.
DanTheMan
2
@Jordumus Sie entweder die Funktion einer Variablen zuweisen können: f=n=>..., können Sie es direkt anrufen: (n=>...)(5). (Oder wenn Sie die Node.js REPL verwenden, dann könnten Sie verwenden this._, was für das zuletzt eingegebene steht)
DanTheMan
16

Python, 20 Bytes

lambda n:'\/'[n%2]*n
xnor
quelle
Großartig, einfach und elegant ^ _ ^
ABcDexter
9

Perl, 20 Bytes

Beinhaltet +1 für -p

Mit Eingabe auf STDIN ausführen:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/
Tonne Hospel
quelle
Es könnte nur meine Version von Perl sein (ich bin immer noch auf 5.10), aber dies löst einen Fehler aus, es sei denn, ich füge ein Extra hinzu; bis zum Ende. Ich denke, es liegt daran, dass Sie das Semikolon als Trennzeichen für y verwenden und zum Beenden der Anweisung noch eines benötigen (und zwei benötigen würden, wenn Sie danach mehr Codezeilen hätten)
theLambGoat
@theLambGoat Sind Sie sicher, dass Sie die -pOption verwenden? Ich benutze ;im Transliterat genau das, weil am Ende des Codes -pein impliziter ;Code steht, damit ich 1 Byte mehr sparen kann. Dies hat seit mindestens Perl 5.6 funktioniert (wahrscheinlich, solange die -pOption tatsächlich bestand)
Ton Hospel
@theLambGoat Mm, ich habe einen alten Red Hat mit Perl 5.10 gefunden, wo es in der Tat nicht funktioniert. Entweder ist dies ein Redhat-Patch oder es hat in der Tat nicht für ca. 5.10 funktioniert (ich bin sicher, es hat in älteren Perls funktioniert und es funktioniert auch in neueren Perls)
Ton Hospel
Ich arbeite mit SUSE Enterprise Server 11, es ist also nicht nur eine Redhat-Sache. Aber ich denke, solange es in einigen Versionen funktioniert, sollte es immer noch eine gültige Antwort sein. (Ich habe auch gerade 5.08 eingecheckt, die einzige andere Version, auf die ich momentan Zugriff habe und die dort auch nicht funktioniert)
theLambGoat
1
Dieser Trick mit dem ;hinzugefügten von -pist ziemlich klasse, gut gemacht.
Dada
7

C #, 42 Bytes

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

Wählt das richtige Zeichen aus und erstellt dann eine neue Zeichenfolge, die dieses Zeichen wiederholt enthält n.

Scepheo
quelle
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);
Krypto
quelle
6

C 40 Bytes

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

Probieren Sie es auf Ideone

betseg
quelle
2
putchar(92-n%2*45)ist die gleiche Länge.
mbomb007
6

J, 10 Bytes

#'\/'{~2|]

Dies ist ein Verb mit sechs Zügen, bestehend aus:

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

Dies ist ein Haken zwischen #und ('\/' {~ 2 | ]); Ein Haken wird auf (f g) yerweitert y f (g y), sodass dieser auf erweitert y # (... y)wird. Bei Einzelzeichen wird eine Liste von yZeichen angezeigt.

Der zweite Teil ist ein 5-Zug, bestehend aus:

'\/' {~ 2 | ]

Dies ergibt zwei Gabeln:

'\/' {~ (2 | ])

Die innere Gabel 2 | ]ist Modul zwei. Die äußere Gabel ist daher:

'\/' {~ mod2

Welches nimmt ( {~) den Mod2-Index ( mod2) aus dem String /.

Dann mit dem Haken von oben:

y # (apt char)

Dies ergibt, was wir wollen, und wir sind fertig.

Conor O'Brien
quelle
6

Haskell, 25 Bytes

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

-1 Byte danke an Damien mit cycle.

xnor
quelle
1
f n=cycle"\\/"!!n<$[1..n]
Damien
@ Damien Wow, wie habe ich den Zyklus vergessen.
Xnor
Ich weiß es nicht. Aber ich bin froh, die Gelegenheit gehabt zu haben, Sie einmal zu "schlagen" :)
Damien
6

Mathematica, 34 32 28 Bytes

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

Anonyme Funktion. Nimmt eine Ganzzahl als Eingabe und gibt eine Liste von Zeichen als Ausgabe zurück.

LegionMammal978
quelle
Sie können verwenden ~Table~#.
Martin Ender
Ich denke, es wurde in 10.2 hinzugefügt.
Martin Ender
Außerdem denke ich, dass Sie das wegwerfen <>""und eine Liste von Zeichen zurückgeben können.
Martin Ender
1
@ MartinEnder Sie müssen auch hinzugefügt haben ~Do~Infinityund solche in 10.2+ als gut ...
LegionMammal978
5

Powershell, 30 27 Bytes

Aktualisieren:

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

Wechseln zu param, dank Timmyd .


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

oder etwas besser lesbar

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

Prüfung:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\
krontogiannis
quelle
3
Willkommen bei PPCG! Schön, dass hier ein anderer PowerShell-Benutzer zu sehen ist. Sie können ein paar Bytes rasieren, indem Sie param($n)statt $argswie folgt 27 Bytes param($n)('\','/')[$n%2]*$n
eingeben.
5

Mathematica, 29 Bytes

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

Grausam nutzt die Tatsache aus, dass [[1]]das erste Argument einer Funktion zurückgegeben wird, während [[0]]die Funktion (head) selbst zurückgegeben wird, die auf die seltsam gültige Funktion namens angewendet "\\"wird, bei der "ausgewertet" wird "/".

Greg Martin
quelle
Es ist etwas weniger seltsam, wenn man bedenkt, dass etwas in der Form a[b]nur ein generischer Ausdruck mit head a(Index 0) und element b(Index 1) ist und Funktionen nur spezielle Ausdrucksarten sind (eigentlich wäre es richtiger zu sagen, dass Funktionen nicht ' t Ausdrücke überhaupt, sondern sind lediglich Regeln für die Transformation von Ausdrücken, die normalerweise eine Form haben f[x...]. :)
Martin Ender
2
Ich habe viele Sprachen gesehen, die auf dieser Site missbraucht wurden, aber ich denke, dies ist der erste Missbrauch von Mathematica, den ich gesehen habe. Gut gemacht!
DanTheMan
4

Brachylog , 15 Bytes

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

Probieren Sie es online!

Erläuterung

: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
Tödlich
quelle
4

CJam , 9 Bytes

ri_"\/"=*

Probieren Sie es online!

Erläuterung

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

> <> (Fisch), 30 Bytes

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

Ich habe diese Sprache zum ersten Mal verwendet, aber ich glaube, ich habe zumindest ein wenig Platz gespart, indem ich das / bedingt entweder als Teil der Ausgabe oder als Spiegel verwendet habe, um den Fluss umzuleiten. Wahrscheinlich immer noch schrecklich ineffizient, aber ich glaube, es könnte zumindest ein bisschen mehr gekürzt werden.

Eingabe ist der Anfangsstapel, Ausgabe ist stdout

Probieren Sie es online!

Callum Kerr
quelle
Willkommen bei Programming Puzzles & Code Golf!
Dennis
@ Tennis Danke! Ich freue mich über den Empfang.
Callum Kerr
4

Dyalog APL , 11 Bytes

Benötigt, ⎕IO←0was auf vielen Systemen Standard ist.

⊢⍴'\/'⊃⍨2|⊢

das Argument

Umformen (Wiederholungen)

'\/'⊃⍨ die von ausgewählte Zeichenfolge "/"

2|⊢ der Rest der Division, wenn das Argument durch zwei geteilt wird

TryAPL online!

Adam
quelle
Cool! Sehr ähnlich wie J.
Conor O'Brien
@ ConorO'Brien Ja, der einzige Unterschied ist, dass 2-Züge in J Haken sind, während sie in Dyalog Spitze sind, so dass eine explizite Linkspause erforderlich ist.
Adám
Ah, ich habe mich gefragt, warum das Argument da war.
Conor O'Brien
1
Endlich eine APL-Antwort mit allen für mich richtig gerenderten Zeichen!
Cyoce
@Cyoce Ja, ich wünschte, wir könnten Schriften in SE angeben (und einbetten).
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 gespart dank @ user902383 und @SeanBean .

Genau wie bei dieser Antwort scheint sich das kürzeste Code-Golf zu wiederholen und auszudrucken. Beides rekursiv und
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
scheint länger zu sein.

Ungolfed & Testcode:

Probieren Sie es hier aus.

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

Ausgabe:

/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
Kevin Cruijssen
quelle
Hallo Kevin. Warum kein Lambda-Ausdruck?
Vale
@Vale Hallo Vale. Weil ich ein altmodischer Java 7-Programmierer bin. :) Wenn Sie eine Java 8- oder 9-Antwort haben, die leicht von meiner Antwort abweicht, können Sie sie gerne posten.
Kevin Cruijssen
2
@Vale (er ist seltsam wie das: P)
Shaun Wild
1
Ich denke, wenn Sie ändern x=-1;++x<i, können x=0;x++<iSie um ein Byte reduzieren
user902383
1
Sie können auch ersetzen "\\" : "/"mit 92:'/';)
Shaun Wilde
3

R, 47 46 Bytes

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

In R müssen Sie Backslashes umgehen. Das Argument sepmuss auch vollständig angegeben werden, da es danach kommt .... Also ärgerlich wenig Möglichkeiten um Zeichen zu sparen :(

Vielen Dank an Bouncyball für das Abschlagen eines Bytes.

JDL
quelle
1
Speichern Sie ein Byte mit der Indizierung:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
Bouncyball
3

T-SQL 50 Bytes

Natürlich nicht STDINhier, also nehmen wir eine fest codierte INTVariable wie diese an: DECLARE @ INTdann lautet die Lösung:

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

Pip , 8 Bytes

"\/"@aXa

Einfach. Verwendet die modulare Indizierung, um die Zeichen- und Zeichenfolgenwiederholung zum Multiplizieren auszuwählen. Probieren Sie es online!


Diese Frage bietet einen interessanten Vergleich zwischen Pip, Pyth und Jelly , wobei die beiden letzteren jeweils 5 Bytes erreicht haben. Alle drei Sprachen haben eine implizite Ausgabe mit einzelnen Zeichenoperatoren für die modulare Indizierung und die Wiederholung von Zeichenfolgen und müssen keine umgekehrten Schrägstriche in Zeichenfolgen enthalten. Es gibt jedoch zwei wesentliche Unterschiede:

  1. Unter bestimmten Umständen benötigen Pyth und Jelly nur einen Begrenzer, um eine Zeichenfolge zu definieren.
  2. Pyth und Jelly haben eine solche Syntax, dass die Eingabe nicht explizit im Code dargestellt werden muss (allerdings aus sehr unterschiedlichen Gründen, wie z Maltysen mir erklärt hat ).

Keines dieser Features wird wahrscheinlich in Pip 1 angezeigt (ich mag die Ästhetik von unsymmetrischen Begrenzern nicht, und eine punktfreie Syntax oder implizite Operanden scheinen meinem Parser für Infix-Ausdrücke zu fremd zu sein), aber ich Ich kann die dritte Geige spielen. Auch wenn "Lesbarkeit" beim Golfen extrem relativ ist, würde ich behaupten, dass diese drei zusätzlichen Bytes das Pip-Programm auf einen Blick viel leichter verständlich machen - und in meinem Buch ist das ein lohnender Kompromiss.

1 Einzelne Zeichenfolgen in Pip verwenden jedoch ein einzelnes 'Trennzeichen, das von CJam inspiriert und in Lisp zitiert wurde.

DLosc
quelle
Ich bin mir nicht sicher, ob Lesbarkeit im Code-Golf ein Plus ist. Nicht auf Kosten von Bytes !
GreenAsJade
@ GreenAsJade Ich gehe davon aus, dass es vielen Menschen genauso geht. Ich würde nur einen Unterschied machen code golf:! = golflang design. Nun können Sie durchaus argumentieren, dass das gleiche Prinzip (kürzer ist immer besser) auch für das Sprachdesign gilt. Ich sage nur , dass für mich, Benutzerfreundlichkeit und auch Ästhetik sind Überlegungen.
DLosc
Profi-Tipp für die Erstellung einer
Golfsprache
Pyth hat keine implizite Punkt-freie Syntax. Es funktioniert so ziemlich genauso wie in Python und ist lesbar, aber kurz. Ihr Kommentar zu den unsymmetrischen Begrenzern ist dagegen ziemlich wahr
Maltysen
2

Pyth , 5 Bytes

*@"\/

Testsuite.

Modulare Indizierung in den String \/und dann wiederholen.

Undichte Nonne
quelle
14
Sie sind FGITW'ing Ihre eigene Herausforderung?
xnor
1
@ Xnor es ist nicht genau meine Herausforderung.
Undichte Nonne
2

Perl 6 , 16 Bytes

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

Verwendung:

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

Julia, 20 Bytes

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

SpecBAS - 28 Bytes

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

ODDGibt 1 zurück, wenn die Zahl ungerade ist, und verwendet diese als Index, um das richtige Zeichen n-mal zu drucken. Es muss 1 hinzugefügt werden, da SpecBAS-Zeichenfolgen bei Zeichen 1 beginnen.

Brian
quelle
2

Java 8, 56 Bytes

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

Ich möchte mich bei Kevin Cruijssen in Advanced für das weitere Golfspielen bedanken.

Ungolfed-Testprogramm

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

Eigentlich 10 Bytes

Golfvorschläge sind willkommen. Probieren Sie es online!

;'\'/2(%I*

Wie es funktioniert

       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
quelle