The Squiggly Sequence


29

Tutti i crediti per Adnan per aver affrontato questa sfida.

La mia ultima sfida, prima di andare in pausa .

Compito

Dato un numero intero positivo n, se nè dispari, ripeterlo /più volte; se nè pari, ripeterlo \più volte.

(Seriamente, i testcase sarebbero molto più chiari di questa descrizione, quindi basta guardare i testcase.)

Specifiche

Casi test

n output
1 /
2 \\
3 ///
4 \\\\
5 /////
6 \\\\\\

Risposte:


17

Javascript, 22 byte

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

Definisce una funzione anonima.

Se solo *ripetesse stringhe in Javascript. sospiri


1
Finalmente hai trovato l'operatore giusto
Leaky Nun,

@LeakyNun Di cosa stai parlando?
DanTheMan,

Stavi usando l'operatore ternario per scegliere il personaggio, no?
Leaky Nun,

@LeakyNun Inizialmente sì, ma se guardi la chat, l'ho postato circa un minuto dopo.
DanTheMan,

2
@Jordumus Si potrebbe assegnare sia la funzione a una variabile: f=n=>..., si potrebbe chiamare direttamente esso: (n=>...)(5). (O se stai usando il REPL di Node.js, allora potresti usarlo this._, che rappresenta l'ultima cosa inserita)
DanTheMan



9

Perl, 20 byte

Include +1 per -p

Esegui con input su STDIN:

squigly.pl <<< 6

squigly.pl

#!/usr/bin/perl -p
$_=$_%2x$_;y;01;\\/

Potrebbe essere solo la mia versione di Perl (sono ancora su 5.10) ma questo genera un errore a meno che non aggiunga un extra; all'estremità. Penso che sia perché stai usando il punto e virgola come separatore per y e ne hai bisogno di uno in più per completare l'affermazione (e ne avresti bisogno due se avessi più righe di codice dopo questo)
theLambGoat

@theLambGoat Sei sicuro di utilizzare l' -popzione? Uso ;esattamente il traslitterato perché -pha un implicito ;alla fine del codice in modo da poter salvare 1 byte in più. Questo ha funzionato da almeno perl 5.6 (probabilmente fintanto che -pesisteva l' opzione in realtà)
Ton Hospel

@theLambGoat Mm, ho trovato un vecchio redhat con perl 5.10 dove in effetti non funziona. O questa è una patch redhat o in effetti non ha funzionato per circa 5,10 (sono sicuro che ha funzionato in perls più vecchi e funziona anche in perls più recenti)
Ton Hospel

Sono in esecuzione su SUSE Enterprise Server 11, quindi non è solo una cosa redhat. Ma penso che fino a quando funziona in alcune versioni, dovrebbe essere comunque una risposta valida. (Ho anche controllato in 5.08, l'unica altra versione a cui ho accesso al momento e non funziona neanche lì)
theLambGoat

1
Quel trucco con l' ;aggiunta di -pè abbastanza stupendo, ben fatto.
Dada,


7

C #, 42 byte

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

Seleziona il carattere corretto, quindi crea una nuova stringa composta da quel carattere ripetuto più nvolte.


7

PHP, 38 byte

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

(variante 38 byte)

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

(variante 38 byte)

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

(variante 40 byte)

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



6

J, 10 byte

#'\/'{~2|]

Questo è un verbo a sei treni, composto da:

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

Questo è un gancio tra #e ('\/' {~ 2 | ]); un hook si (f g) yespande a y f (g y), quindi questo si espande a y # (... y), che, per i singoli caratteri, produce un elenco di ycaratteri.

La seconda parte è un treno 5, composto da:

'\/' {~ 2 | ]

Questo valuta due forcelle:

'\/' {~ (2 | ])

La forcella interna 2 | ], è il modulo due. La forcella esterna, quindi, è:

'\/' {~ mod2

Che prende ( {~) l'indice mod2 ( mod2) dalla stringa /.

Quindi, utilizzando il gancio dall'alto:

y # (apt char)

Questo produce ciò che vogliamo e abbiamo finito.


6

Haskell, 25 byte

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

-1 byte grazie a Damien con cycle.


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

@Damien Wow, come ho dimenticato il ciclo.
xnor

Non lo so. Ma sono felice di aver avuto l'opportunità di "picchiarti" una volta :)
Damien il

6

Mathematica, 34 32 28 byte

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

Funzione anonima. Accetta un numero intero come input e restituisce un elenco di caratteri come output.


È possibile utilizzare ~Table~#.
Martin Ender,

Penso che sia stato aggiunto in 10.2.
Martin Ender,

Inoltre, penso che puoi abbandonare <>""e restituire un elenco di personaggi.
Martin Ender,

1
@MartinEnder Devono anche aver aggiunto ~Do~Infinitye simili anche in 10.2+ ...
LegionMammal978

5

Powershell, 30 27 byte

Aggiornare:

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

Passare a param, grazie a timmyd .


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

o leggermente più leggibile

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

Test:

> 1..10 | % { ./run.ps1 $_ }
/
\\
///
\\\\
/////
\\\\\\
///////
\\\\\\\\
/////////
\\\\\\\\\\

3
Benvenuti in PPCG! Bello vedere un altro utente di PowerShell qui. Puoi radere alcuni byte prendendo input come param($n)invece di $args, come segue per 27 byte -param($n)('\','/')[$n%2]*$n
AdmBorkBork

5

Mathematica, 29 byte

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

Crudelmente sfrutta il fatto che [[1]]restituisce il primo argomento di una funzione mentre [[0]]restituisce la funzione (head) stessa, applicata alla funzione stranamente valida denominata "\\"che viene "valutata" in "/".


È leggermente meno strano se si considera che qualcosa del modulo a[b]è solo un'espressione generica con head a(indice 0) ed elemento b(indice 1), e le funzioni sono solo tipi speciali di espressione (in realtà, sarebbe più corretto dire che le funzioni non sono ' t espressioni, ma sono semplicemente regole per trasformare espressioni che di solito hanno forma f[x...]). :)
Martin Ender

2
Ho visto molte lingue abusate su questo sito, ma penso che questo sia il primo abuso di Mathematica che ho visto. Buon lavoro!
DanTheMan,



4

Brachylog , 15 byte

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

Provalo online!

Spiegazione

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

ri_"\/"=*

Provalo online!

Spiegazione

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

> <> (Pesce), 30 byte

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

La prima volta che utilizzo questo linguaggio, ma penso di aver almeno salvato un po 'di spazio usando condizionalmente / come parte dell'output o come mirror per reindirizzare il flusso. Probabilmente, comunque, terribilmente inefficiente, mi sembra che probabilmente potrebbe essere ridotto un po 'di più.

L'input è lo stack iniziale, l'output è stdout

Provalo online!


Benvenuto in Programmazione di puzzle e codice golf!
Dennis,

@Dennis Grazie! Apprezzo il benvenuto.
Callum Kerr,

4

Dyalog APL , 11 byte

Richiede il ⎕IO←0valore predefinito su molti sistemi.

⊢⍴'\/'⊃⍨2|⊢

l'argomento

rimodella (ripetizioni)

'\/'⊃⍨ la stringa "/" selezionata da

2|⊢ il resto della divisione quando l'argomento è diviso per due

ProvaAPL online!


Freddo! Molto simile a J.
Conor O'Brien il

@ ConorO'Brien Sì, l'unica differenza è che i 2 treni in J sono ganci, mentre sono in cima a Dyalog, quindi è necessario un dente sinistro esplicito.
Adám,

Ah, mi chiedevo perché la discussione fosse lì.
Conor O'Brien,

1
Finalmente una risposta APL con tutti i personaggi resi correttamente per me!
Cyoce,

@Cyoce Sì, vorrei poter specificare (e incorporare) i caratteri su SE.
Adám,

3

Java 7, 68 65 byte

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

3 byte salvati grazie a @ user902383 e @SeanBean .

Proprio come con questa risposta , il codice-golf più breve sembra essere ripetuto e stampato. Entrambi ricorsivi e
void c(int i){System.out.print(new String(new char[i]).replace("\0",i%2<1?"\\":"/"));}
sembrano essere più lunghi.

Codice non testato e test:

Provalo qui.

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

Produzione:

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

Ciao Kevin Perché non un'espressione Lambda?
Vale

@Vale Hi Vale. Perché sono un programmatore Java 7 vecchio stile. :) Se hai una risposta Java 8 o 9 leggermente diversa dalla mia, sentiti libero di pubblicarla.
Kevin Cruijssen,

2
@Vale (è strano così: P)
Shaun Wild

1
penso che se x=-1;++x<ix=0;x++<i
passi

1
Inoltre puoi sostituire "\\" : "/"con 92:'/';)
Shaun Wild

3

R, 47 46 byte

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

In R, devi sfuggire alle barre rovesciate. l'argomento sepdeve anche essere completamente specificato poiché viene dopo .... Quindi fastidiosamente poche opportunità per salvare i caratteri :(

Grazie a bouncyball per giocare a golf con un byte.


1
Salvare un byte utilizzando l'indicizzazione:n=scan();cat(rep(c('\\','/')[n%%2+1],n),sep='')
bouncyball

3

T-SQL 50 byte

Ovviamente no STDINqui, quindi supponiamo una INTvariabile hardcoded come questa: DECLARE @ INTquindi la soluzione è:

PRINT IIF(@%2=0,REPLICATE('\',@),REPLICATE('/',@))

3

Pip , 8 byte

"\/"@aXa

Semplice. Utilizza l'indicizzazione modulare per selezionare la ripetizione di caratteri e stringhe per moltiplicarla. Provalo online!


Questa domanda presenta un interessante confronto tra Pip, Pyth e Jelly , i cui ultimi due hanno segnato 5 byte ciascuno. Tutti e tre i linguaggi hanno un output implicito, con operatori a carattere singolo per l'indicizzazione modulare e la ripetizione delle stringhe, e non è necessario evitare le barre rovesciate nelle stringhe. Esistono due differenze chiave, tuttavia:

  1. In determinate circostanze, Pyth e Jelly necessitano di un solo delimitatore per definire una stringa;
  2. Pyth e Jelly hanno una sintassi tale che l'input non ha bisogno di essere esplicitamente rappresentato nel codice (anche se per ragioni molto diverse, come mi ha spiegato Maltysen ).

Nessuna di queste funzionalità è probabile che appaia in Pip 1 (non mi piace l'estetica dei delimitatori sbilanciati, e la sintassi senza punti o operandi impliciti sembrano essere troppo estranei al mio parser di espressioni infix), ma io ' va bene suonare il terzo violino. Anche se la "leggibilità" è estremamente relativa quando si gioca a golf, direi che quei tre byte extra rendono il programma Pip molto più facile da capire a colpo d'occhio - e nel mio libro, questo è un compromesso utile.

1 Sebbene le stringhe a carattere singolo in Pip utilizzino un unico 'delimitatore, ispirato a CJam e citando in Lisp.


Non sono sicuro che la leggibilità sia un vantaggio, nel code golf? Non a costo di byte !
GreenAsJade,

@GreenAsJade Mi aspetto che molte persone provino lo stesso. Vorrei solo fare una distinzione code golf:! = golflang design. Ora potresti benissimo sostenere che lo stesso principio (più breve è sempre meglio) si applica anche al design del linguaggio. Sto solo dicendo che per me l'usabilità e persino l'estetica sono considerazioni.
DLosc

Pro tip for making a golfing language: don't use infix
Cyoce


pyth non ha sintassi implicita senza punti. funziona più o meno allo stesso modo di Python, rendendolo leggibile ma breve. il tuo commento sui delimitatori sbilanciati invece è abbastanza vero
Maltysen




2

SpecBAS - 28 byte

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

ODDrestituisce 1 se il numero è dispari, quindi lo utilizza come indice per stampare il carattere corretto n numero di volte. È necessario aggiungere 1 poiché le stringhe SpecBAS iniziano dal carattere 1.


2

Java 8, 56 byte

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

Vorrei ringraziare @Kevin Cruijssen in anticipo per aver golf ulteriormente la mia risposta.

Programma di prova non golfato

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

In realtà, 10 byte

Suggerimenti di golf benvenuti. Provalo online!

;'\'/2(%I*

Come funziona

       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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.