Crea output due volte la lunghezza del codice


85

La sfida

Scrivere un programma completo che scriva nell'output standard il doppio dei byte rispetto alla lunghezza del programma.

Regole

  • Il programma deve scrivere caratteri ASCII nell'output standard.

  • Il contenuto dell'output non ha importanza.

  • L'output, misurato in byte, deve essere esattamente il doppio della lunghezza del programma, anch'esso misurato in byte, a meno che non si realizzi il bonus.

  • Qualsiasi nuova riga finale è inclusa nel conteggio byte dell'output.

indennità

Il tuo programma può facoltativamente prendere un numero n, come input. In tal caso, l'output deve essere esattamente di n * program lengthbyte. Puoi presumere che n sarà sempre un numero intero positivo. Se non viene fornito alcun input, il nvalore predefinito è 2.

Se lo fai, puoi sottrarre 25 byte dal tuo punteggio.

Vince il programma più breve.

restrizioni

  • Nessuna scappatoia standard.

  • Il programma deve essere lungo almeno 1 byte.

  • Non è necessario aggiungere spazi bianchi non necessari al codice sorgente per modificarne la lunghezza. Allo stesso modo, i commenti non contano.

  • A meno che non si adempia al bonus, il programma non deve accettare input. Se realizzi il bonus, l'intero deve essere l'unico input.

Il punteggio più basso (durata del programma in byte - bonus) vince.

La risposta più breve per ogni lingua vince per quella lingua .

Classifiche

Ecco uno snippet di stack per generare sia una classifica regolare che una panoramica dei vincitori per lingua.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:

# Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

# Ruby, <s>104</s> <s>101</s> 96 bytes

Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:

# Perl, 43 + 2 (-p flag) = 45 bytes

Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet della classifica:

# [><>](http://esolangs.org/wiki/Fish), 121 bytes


1
Per il bonus, l'output deve essere esattamente n * program lengthbyte o è un minimo?
xnor

2
Deve essere esatto
Daniel M.

3
Sembra che lo snippet di codice debba essere modificato per gestire i punteggi negativi.
El'endia Starman,

40
Un bonus di -25 è sostanzialmente obbligatorio per alcune lingue, poiché consente loro di ottenere un punteggio negativo. In futuro, suggerirei di utilizzare un bonus percentuale, o semplicemente fare del bonus la domanda se vuoi davvero avere delle risposte. Oppure, semplicemente non hai un bonus.
xnor

4
Per "nessun input fornito", supponiamo che la stringa vuota sia passata? Non riesco a vedere come si potrebbe gestire l'utente che non digita mai un input e il programma sta solo aspettando.
xnor

Risposte:


138

HQ9 + , 2 byte

QQ

uscite

QQQQ

Penso che non sia proibito qui.


14
Potrebbe non essere proibito, ma non è molto inter ... aspetta, come ha ottenuto otto voti?
John Dvorak,

58
@JanDvorak Per quanto non mi piaccia HQ9 +, questo per me è un uso creativo. Molto probabilmente questo utilizzo non era previsto quando è stato creato HQ9 +, che è più di quanto si possa dire della maggior parte degli altri programmi Hq9 +. +1 da me.
Trauma digitale

13
Non sapevo nemmeno che Q stampasse "il codice sorgente del programma". Ho pensato che avesse appena stampato una Q. Ben fatto per individuare la differenza cruciale!
Timwi,

7
@ LegionMammal978 Tecnicamente si tratta di una sfida di output costante, il che significa che sono consentiti linguaggi non di programmazione.
uno spaghetto il

3
Questo ha 120 voti. 1.200 rappresentanti per la digitazione QQin un interprete.
Stan Strum,

95

Shakespeare, 768

Sì, Shakespeare non è molto un linguaggio da golf. Produce 1.536 spazi.

Rosencrantz and Guildenstern: A Series of Tedious Events.

Rosencrantz, a count of extraordinary determination.
Guildenstern, a spacy character.

Act I: The Long Conversation

Scene I: A Tortured Friendship

[Enter Rosencrantz and Guildenstern]

Rosencrantz:
 You are a gentle, noble, valiant, loyal, loving companion.

Guildenstern:
 You are nothing!

Scene II: Asking the Hard Questions

Rosencrantz:
 Speak your mind.

Guildenstern:
 You are as fair as the sum of yourself and a daisy. Are you as
 daring as the sum of a big, bold, fiery, feisty, rough, rowdy,
 ham-fisted, hawk-eyed, broad-shouldered, bright-eyed lad and a
 large, yellow, vicious, hairy, wild, scary, long-tailed,
 sharp-clawed, small-eared lion?

Rosencrantz:
 If not, let us return to scene II.

Modifica: 256

Okay, lo giocherò davvero. Nota che quanto sopra non viene compilato in nessuna implementazione esistente di Shakespeare perché l'ho scritto scrupolosamente a mano (ma sono pronto a difenderne la correttezza).

Quanto segue si traduce in C con un avviso in spl-1.2.1 e genera 512 spazi:

Ummm.Ajax,1.Puck,2.Act I:I.Scene I:A.[Enter Ajax and Puck]Ajax:You old old old old old cow.Puck:You are zero!Scene II:B.Ajax:Speak thy mind.Puck:You are the sum of you and a red cat.Are you as big as the square of me?Ajax:If not, let us return to scene II.

15
Farò +1 se lo giochi davvero.
lirtosiast

1
Che tipo di whitchcraft è questo? Non sapevo nemmeno che esistesse qualcosa del genere ...
Malavos,

10
woah, hai giocato a golf. Paradisi santi.
Malavos,

2
@Malavos Stavo solo scherzando sul modo in cui hai scritto male la stregoneria, scusa - sia cosa sia che probabilmente sono ok
gatto

2
No, chiedo perdono se suonassi offensivo o difensivo. Stavo solo facendo riferimento a Futurama! :) Su una nota seria, sono ancora sorpreso da questa risposta. Abbiamo bisogno di più di quelli sul sito.
Malavos,

69

Richiama, 17 byte

................!

16 NOOP. Quindi !viene richiamato il debugger e scarica la memoria sulla console. La memoria è vuota, ma l'intestazione è lunga 34 byte:

-- STATE DUMP --
----------------

Provalo qui .


13
Questa è una delle risposte più interessanti dell'IMO.
cat


60

CJam, -17 byte

r2e|i8,*

Il codice sorgente è lungo 8 byte e si qualifica per il bonus di -25 byte .

Provalo online nell'interprete CJam .

Come funziona

r         e# Read a token from STDIN.
 2        e# Push 2.
  e|      e# Logical OR; keep the token if it's not empty, 2 otherwise.
    i     e# Cast to integer.
     8,   e# Push [0 1 2 3 4 5 6 7].
       *  e# Repeat the array the corresponding number of times.

4
Una schifezza. Molto bene.
The_Basset_Hound,

1
Come sono i byte negativi?
Nick T,

3
@NickT 8 byte (codice sorgente) - 25 byte (bonus).
Dennis,

16
È possibile salvare diversi milioni di copie se si sta esaurendo lo spazio su disco.
Robert Fraser,

No, penso che i metadati lo renderebbero positivo
CalculatorFeline

47

Python 2.6, 10

print`-.1`

Stampe -0.10000000000000001, che è di 20 caratteri.

Si noti che la stringa repr mostra più precisione. print-.1dà solo -.1e print.1/30.0333333333333solo 13 cifre di precisione.


5
Questo non funziona più in Python 2.7 o 3.1.
Anders Kaseorg,

@AndersKaseorg Quindi sostitu.it è sbagliato, allora?
mbomb007,

2
@ mbomb007 Apparentemente. GitHub suggerisce che non è l'unica cosa di cui si sbaglia. Ideone è d'accordo con CPython.
Anders Kaseorg,

Stesso commento dell'altra tua risposta: questo non stampa una nuova riga finale, che dà 21 byte di output?
Martin Ender,

1
Intendi print`+.1`?
mbomb007,

46

Seme , 10 byte

4 56111240

Questo si compila al programma Befunge (trovato dalla forza bruta)

9k.@

che produce i seguenti 20 byte durante l'esecuzione (testato in CCBI, notare lo spazio finale):

0 0 0 0 0 0 0 0 0 0 

Non avendo familiarità con Befunge 98, ho dovuto ricontrollare le specifiche alcune volte per questo:

  • k mi sembra abbastanza rotto, eseguendolo ancora una volta del previsto a causa del passaggio dell'IP nelle istruzioni ripetute
  • Le pile di Befunge 98 hanno zero infiniti in fondo
  • . genera un numero, seguito da uno spazio

18
.... Io .... solo .... non posso.
Daniel M.,

44

R, 3 2 byte

Codice

!0           # NOT FALSE

Uscite

TRUE

Caspita, finalmente R, finalmente.

Sembra che {}funzioni anche, produceNULL

Bonus 33 16 byte:

Codice

rep(1,number*16)

Uscite

# if number is not defined
> rep(1,number*16)                     
> Error: object 'number' not found     # output is 32 (or 2*16) bytes long error

# if number is defined
> number = 3                            
> rep(1,number*16)                     # output is 16*number bytes long
> 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2
Spero che usare il nome "numero" per la variabile non equivale a "aggiungere spazi bianchi non necessari al codice sorgente"
Mutador

26

Matlab, 7 5 byte

2 byte in meno grazie a @flawr!

123;3

Produzione:

inserisci qui la descrizione dell'immagine

L'output contiene , quindi 10 byte.newline ans = newline newline 3 newline


1
Speriamo che nessuno abbia format compactcome impostazione predefinita :)
Sanchises,

2
@sanchise :-) Sì, dipende da come sono state impostate le preferenze di Matlab. Ma format looseè la preferenza predefinita
Luis Mendo,

2
Che ne dici 123;4? È tre byte più breve =)
flawr

@flawr Buona idea! Pubblicalo tu stesso!
Luis Mendo,

No, troppo ispirato dalla tua risposta =)
flawr

25

JavaScript, 2 byte!

Anche più breve della soluzione a 3 byte:

!0

Ritorna truedopo l'esecuzione.


2
Si noti che questo funziona solo in un ambiente REPL
Cyoce

21

Python 2, 11

print`id`*1

Stampa la rappresentazione di stringa del built-in id, che è di 22 caratteri:

<built-in function id>

Il *1è quello di ottenere il codice a 11 caratteri. Potresti anche fare print id;00.

11 alternative più noiose sono:

print'1'*22
print 9**21

Ho giocato con numeri complessi, ma sfortunatamente print.8/-9jè un corto di caratteri
Sp3000

Questi non stampano una nuova riga finale, portando il numero di byte dell'output a 23?
Martin Ender,

1
@ MartinBüttner Quella regola è stata modificata in seguito, ma è print id,;1sufficiente cambiarla per sopprimere la nuova riga finale. Non aggiunge neanche uno spazio finale.
xnor

@xnor print 9**21non funziona. Sono 21 personaggi. print 9**23funziona però
Koishore Roy il

18

dc, 10-25 = -15

2?A*Ar^1-n

Prende una riga vuota per "nessun input".

Calcola 10 ^ (10 * n) - 1, dove n è l'input o 2 se l'input è vuoto. Stampa una stringa di 9s della lunghezza richiesta.

  • 2 spingere 2 nello stack nel caso in cui l'ingresso sia vuoto
  • ? spingere l'input nello stack
  • Aspingere 10 nello stack (dc ha scorciatoie A- Fper 10-15)
  • * pop due volte e moltiplicare (moltiplicare input per 10)
  • A spingere 10 nello stack
  • r inverti i due elementi superiori della pila
  • ^ esponente 10 ^ (10 * input)
  • 1- sottrarre 1 dalla parte superiore della pila
  • n stampa senza newline.

dang, è così intelligente. E fortunatamente con la lunghezza del codice lì :) Ma forse dovresti aggiungere una piccola spiegazione per chi non lo sapesse. E penso che Newline conta, quindi probabilmente dovresti usare ninvece di p.
daniero,

17

TI-Basic, 3 byte

1ᴇ5

Stampe 100000.


In realtà, penso che la nuova riga conterebbe, quindi puoi fare solo 0per 1 byte.
lirtosiast,

1
Che ne dici ᴇ3? E @lirtosiast, dato che TI-Basic non ha newline, sono scettico al riguardo.
Jakob,

16

Brainfuck, 14 byte

+++++++[....-]

Questo è un piccolo esercizio matematico. Indichiamo il numero di +caratteri nel codice per ae il numero di .caratteri per b.

Il codice genera a*bbyte, con valori da agiù a 1(sono byte non ASCII, ma sembra OK secondo le specifiche). La lunghezza del codice è a+b+3. Quindi abbiamo

a*b = 2 * (a+b+3)

Provando valori diversi per ae b, vediamo che a+b+3viene raggiunto il minimo per

a = 4       or       a = 7
b = 7                b = 4

Un programmatore esperto di brainfuck individuerà l' +[[>....]-<<+]opzione.
orthoplex,

@orthoplex Quando ho letto il tuo commento ho immediatamente interpretato Brainfuck e programmatore: Brainfucker
Poke

15

gs2 , -18 byte

CP437 :W↕0!↨.2

Discarica esadecimale: 57 12 30 21 17 2e 32

Wlegge i numeri da STDIN in un elenco. ↕0aggiunge un 2 all'elenco ed !estrae il primo elemento. Quindi ↨.(l'elenco [0,1,2,3,4,5,6]) viene ripetuto ( 2) molte volte.

Questo è molto simile alla risposta CJam di Dennis: gs2 combina re si itrasforma in un byte.

Nota : ho dovuto correggere un bug gs2nell'implementazione affinché funzionasse: in precedenza, ogni programma aveva una riga nascosta aggiunta al suo output, che era del tutto involontario. È emerso solo dopo che ho provato a risolvere questo programma (il linguaggio è stato progettato per il golf dell'anarchia, che ignora le nuove linee finali in tutti i problemi), e ho spinto solo una correzione per padroneggiare ora, quindi sentiti libero di prendere questa risposta con un granello di sale.


1
Ho visto la prima risposta GS2 che non ha personaggi con semi delle carte!
Cyoce,

14

Perl 5, 16 byte - 25 = -9

$_ =$]x($_*2||4)

Questo è un approccio strano al problema.

Esegui con l' -pargomento della riga di comando.

Di seguito ho visto una risposta Perl che utilizzava una variabile speciale per stampare più testo e quindi ridurre il numero di byte. Quindi ho usato una variabile speciale molto più dettagliata. Stampa 8 caratteri con un nome variabile di 2 caratteri. Pertanto, con un numero di byte di 16 (riempito con un carattere di spazio bianco per renderlo 16), stampa 2 * $], dove $]viene stampata la versione Perl 5.xxxxxx, a seconda della versione Perl. Senza input, lo stampa quattro volte, eguagliando 8*4o 32, che è il doppio del numero di byte del codice.

Adoro il Perl.


Penso che questo fallisca per input vuoto. Secondo le regole, se non viene fornito alcun input, il multiplo dovrebbe essere impostato automaticamente su 2.
Alex A.

@AlexA. Accidenti, mi è mancato. Nuovo per programmare il golf. Modifica in arrivo, ma la mia risposta ha molti personaggi ora perché non ho idea di come farlo in modo più creativo in perl :(
Codefun64

2
Ehi, qualche altro suggerimento che potrebbe esserti utile qui, di default in uno script di programma, pope shiftlavorare su @ARGV(in subquanto funzionano @_) in modo da poter fare qualcosa di simile $n=pop||2per ottenere il primo blocco di codice, e ;}alla fine hai , che può quasi sempre essere solo }per salvarne un altro. Qualcosa che potrebbe aiutarti a salvare più caratteri è l'operatore di ripetizione stringa x, considera print 1x20o qualcosa del genere ... :) Spero che ti aiuti!
Dom Hastings,

@DomHastings Man, grazie! Ho ottenuto un totale di 2 byte grazie al tuo aiuto :) Grazie mille per i tuoi suggerimenti.
Codefun64,

1
Penso che puoi accorciarlo a questo print"n"x(21*pop||42). Esegui dalla riga di comando conperl -e'print"n"x(21*pop||42)' 3 | wc -c
hmatt1

14

Pyth , 10 9 - 25 = -16

-1 di Dennis

**N9?zvz2

Stampa [input] * 9 caratteri di virgolette o 2 * 9 se l'input è vuoto.

isaacg ha una risposta più breve qui

Pyth , 1 byte

T

Stampe 10. È una variabile integrata che viene inizializzata su 10.


Sarebbe utile se .x funzionasse con errori. C'è una giustificazione per il perché no?
lirtosiast

2
La mia ipotesi migliore è che Qfa sì che Pyth valuti l'input prima che venga eseguito il codice effettivo. **N9.xvz2funziona come previsto, ma non è più breve di **N9?zvz2.
Dennis,

2
Qualsiasi newline finale è inclusa nel conteggio byte dell'output. Tuscite 10e una nuova riga. Usa d, è uno spazio a cui viene aggiunta una nuova riga
Stan Strum,

9

Maccheroni 0.0.2 , 23 caratteri

print tobase pow 32 9 2

Stampa 32 9 in binario, che risulta convenientemente lungo 46 caratteri (è 1000000000000000000000000000000000000000000000), senza una nuova riga finale.


9

JavaScript, 4 byte

~$ cat main.js
+1/0
~$ nodejs main.js
Infinity

Penso che questa sia la soluzione JS più breve possibile senza ES6: P


Quale versione di NodeJS hai? Questo non funziona con il mio.
Dennis,

1
Questo funziona anche su console Firefox.
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳,

1
La nuova riga finale deve essere inclusa nella lunghezza dell'output.
lirtosiast,

Node.js v0.10.40non stampa nulla perché non c'è alcun comando di stampa. Hai una versione diversa di Node.js o funziona solo in una shell che stampa la valutazione di una linea? (nel qual caso non credo che questa risposta sarebbe valida).
Nateowami,

4 byte? Si prega di rendere effettivamente questo, la dimensione corretta.
Star OS,

9

C, 27 25

main(){printf("%50f",0);}

Grazie @Titus per aver eliminato 2 byte


E per la mia soluzione non competitiva a 16 byte in C, vai qui: https://codegolf.stackexchange.com/a/111330/16513

^ Dico non competitivo perché il codice di errore potrebbe dipendere dal tuo compilatore, nota anche che sto usando GCC in quella soluzione. Inoltre non sono sicuro che infrange o meno la regola 1, penso che probabilmente lo faccia, quindi sono andato avanti e l'ho etichettato come non competitivo


1
Non penso che valga come un programma C valido ma funzioni main(){printf("%0.XXf",0);}.
wefwefa3,

2
@Zereges No, C ha la regola "dichiarazione implicita" che di solito ti permette di usare cose senza il giusto #include. Il compilatore emetterà un avviso e talvolta si arresterà in modo anomalo, ma di solito funzionerà .
Anatolyg,

1
@AlbertRenshaw Inoltre, non credo che funzioni qui .
Zereges,

1
Nota che 27 * 2! = 38.
mbomb007,

1
@Zereges. Questo codice non presenta comportamenti indefiniti. Le funzionalità "dichiarazione implicita" e "tipo di ritorno implicito" sono obsolete negli standard recenti, ma il loro utilizzo è ancora consentito e i risultati sono ben definiti. Ci sono circostanze nell'uso di tali funzionalità che causano comportamenti indefiniti, ma questo codice non coinvolge quelli.
Peter,

7

V , 2 byte

Questo produce

ÿÿÿÿ

Provalo online!

Spiegazione

Questa è una risposta davvero confusa e funziona abusando degli interni di V. Essenzialmente funziona come ÿun comando in V che segnala che il programma è finito e che tutti i comandi in sospeso devono essere completati. Altrimenti, alcuni finali impliciti non funzionerebbero e l'interpretazione si bloccherebbe più spesso. Questo comando viene inviato automaticamente più volte alla fine del programma e la maggior parte delle volte non ha alcun effetto sull'output.

éè un comando che inserisce un singolo carattere. Tuttavia, lo fa afferrando un byte non elaborato, quindi non interpreta ÿ"fine", lo interpreta come "questo è il carattere che devi inserire". lo fa inserire questo personaggio 4 volte invece di uno.


7

bash, 11 byte

Ecco un uso piacevolmente ironico di uno strumento di compressione dei dati :) ...

gzip -f<<<2

Ecco un dump esadecimale dell'output (22 byte) ...

0000000: 1f 8b 08 00 e3 ce 32 59 00 03 33 e2 02 00 90 af  ......2Y..3.....
0000010: 7c 4c 02 00 00 00                                |L....

Questo produce 22 byte di "ASCII esteso" (es. 8 bit per carattere). Questo sembra soddisfare la definizione di ASCII dell'OP se leggi i commenti sul post della domanda.
Wossname

Su TIO ne ho 16, ma sulla mia macchina linux ne ho 34
Stan Strum

@StanStrum, non so cosa sia TIO, ma 34 su Linux è strano. Forse hai alz gzip per utilizzare diversi switch alla normalità?
Wossname il

Non so se sia così, ma sembra strano. Lo proverò su alcuni LiveCD per vedere se ho sbagliato con uno dei miei programmi @Wossname
Stan Strum

1
Non sono quel ragazzo e non approfitterò del mio tyvm da 129 ripetuti. Vedrò se riesco a creare una versione che funziona sulla mia installazione Linux
Stan Strum,

6

dc, 19-25 = -6

2?19*[1n1-d0<l]dslx

Prende un numero (2 viene inserito nello stack come backup) e lo moltiplica per 19. Stampa un 1(nessuna nuova riga) e diminuisce il numero. Cicli mentre il numero è maggiore di 0.


6

C ++, 80 byte

#include<iostream>
int main(){int i=0;while(i<20){std::cout<<&i;i++;}return 0;}

si noti che il carattere di nuova riga è di due caratteri. (se non vuoi che sia, cambia i <20 in i <= 19 per tornare allo stesso numero di byte.)

Output del campione (cambierà ogni volta)

0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C0088FA0C

stesso indirizzo di memoria di 8 caratteri 20 volte.


Alcuni suggerimenti sul golf: un foranello è più corto di un whileanello e ti consente di rilasciare le parentesi graffe, è leggermente più economico da usare cstdioe solo printfuna stringa e non è necessario restituire nulla.
Luca,

Puoi ridurre il tuo approccio a 63 byte: #include<iostream> int main(){for(int i=10;--i;)std::cout<<&i;}ma esiste già una risposta più breve con un approccio leggermente diverso.
movatica

6

CJam, -9

q_,{i}{;2}?G*'X*

Spiegazione

  • q_,

Legge l'intero input e lo spinge, quindi spinge la lunghezza.

  • {i}{;2}?

Se la lunghezza dell'input è superiore a zero, convertirla in un numero intero. Altrimenti, inserire l'ingresso e premere 2.

  • G*

Spinge 16 (la lunghezza del programma), quindi lo moltiplica per 2 se non c'è input o per input.

  • 'X*

Spinge X e lo moltiplica per la parte superiore della pila.


@ThomasKwa Whoops. Aggiornamento in un secondo.
The_Basset_Hound il

La virgola non è necessaria, tuttavia puoi evitare "se" del tutto se fai una logica "o": q2e|iti darà il numero che desideri
aditsu,

Inoltre potresti usare S invece di 'X, l'unico problema è che l'output non sarà visibile fino a quando non lo selezioni (beh, se lo esegui offline e reindirizzi a un file, non è un problema)
aditsu,

Uh ... non importa, ho appena visto la risposta di Dennis ora: p
aditsu,

Anche con il condizionale, puoi accorciare questo. Non è necessario calcolare la lunghezza, poiché una stringa vuota è già falsa. Inoltre, non è necessario estrarre la stringa vuota dallo stack, poiché non contribuisce all'output. Ciò consente anche di evitare le parentesi graffe per il ramo else. Sono arrivato fino a questo prima ho guardato qualsiasi delle risposte: r_{i}2?SB**.
Reto Koradi,

6

> <> , 19 + 2 (-v flag) - 25 = -4 byte

l?!2f4+*v
-1o;!?::<

provalo qui!

Grazie Cole e Sp3000

Per prima cosa controlla la lunghezza dello stack, se è 0 metti 2 nello stack. Lo moltiplica per 21 (lunghezza del codice), quindi genera la rappresentazione unicode di quel numero e lo decrementa di 1, scorre fino a 0. (dovrete ispezionare l'output per vedere i caratteri, poiché il browser non li visualizza)


1
Sì, mi dispiace rovinare la tua risposta (ma è più breve della mia, se questo ti fa sentire meglio). Modifica: whoops colpito entra troppo presto, la tua voce così com'è ora non è valida per la regola "Puoi presumere che n sarà sempre un numero intero positivo. Se non viene fornito alcun input, n deve essere impostato automaticamente su 2." Penso anche che potrebbe stampare un numero eccessivo di caratteri (va da 14 a 0, ovvero 15 caratteri secondo il mio conteggio, non 14). Se ho ragione, l0=?2f6+*vcome prima riga e 1-::0=?;o>come seconda dovrebbe farlo bene.
Cole

Hm, non sono sicuro di cosa intendi. Non dovrebbe stampare 0 in nessun caso. Mettere un 2 come output di stack iniziale (EDIT: cose che non posso incollare) che, almeno usando questo contatore di caratteri , è di 28 caratteri.
Torcado,

Capisco quello che stai dicendo ora. Ho interpretato "Il tuo programma può opzionalmente prendere un numero, n, come input", il che significa che se l'input sarebbe 2. Modificherò la risposta, grazie! (anche io posso salvarne alcuni usando una stringa anziché i numeri)
torcado,

Felice di aiutarti, soprattutto se è> <>.
Cole

2
?!di solito è meglio di0=?
Sp3000 il

6

JavaScript (ES5), 68 byte - 25 bonus = 43

alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))

(nel caso in cui il tuo browser non consenta l'esecuzione dello snippet per motivi di sicurezza, prova questo violino http://jsfiddle.net/thePivottt/c3v20c9g/ )

Questo script funziona solo in un browser che segue almeno DOM3 (con Node.textContent) ed ECMAScript 5 (o forse una versione precedente). Ho provato a rendere il più standard possibile e compatibile. Presuppone inoltre che lo script sia nel primo scriptelemento del documento.

In realtà concatena più copie dello script stesso, il che è piuttosto fantastico . Si noti che lo strumento frammento su SE aggiunge spazi bianchi extra allo script. Potremmo ignorare quello spazio bianco con .trim()ma non lo trovo necessario considerando che il programma è perfetto senza l'ingerenza di SE. Basta salvare questo file HTML5 se si desidera vederlo funzionare perfettamente.

<!DOCTYPE html>
<html>
  <head>
    <title>Minimalist HTML5 page</title>
    <script>alert(Array(1+(+prompt()||2)).join(document.scripts[0].textContent))</script>
  </head>
</html>

Questo script utilizza prompte alertperché console.lognon fa parte di alcuno standard, anche se viene utilizzato dalla maggior parte dei browser moderni. Se il numero di ripetizioni passate non è un numero valido o è vuoto, il valore predefinito è 2. Se l'input è un numero decimale, il programma si arresta in modo anomalo a causa della lunghezza dell'array non valida.

Il codice utilizza alcune interessanti funzionalità di JavaScript:

  • Array(1+(+prompt()||2))

    • Array(INT) crea una matrice di celle INT.

    • +prompt()accetta un input e lo trasforma in un numero. Se passassimo l'input come stringa, la Arrayfunzione lo avvolgerebbe semplicemente in un array a un elemento.

    • +prompt()||2restituisce l'input se è vero , altrimenti restituisce 2.

    • Questo intero codice crea una matrice di N elementi vuoti, dove N è uno in più rispetto alla quantità di ripetizioni richieste.

  • .join(document.scripts[0].textContent)

    • Il join(STRING)metodo dell'array crea una stringa concatenando tutte le celle, mettendo la STRING fornita tra i valori. In questo programma, ci sono N + 1 elementi vuoti nell'array o esattamente N tra i punti. Il risultato sarà una stringa contenente N volte la STRING fornita.

    • document.scripts[o]è il primo <script>elemento del documento.

    • L' istanza di textContentof Noderestituisce l'intero testo trovato al loro interno e i relativi nodi figlio, inclusi gli script.


Nota che se usi ES6 str.repeate continui a generare il codice stesso, il punteggio scende a 26, ma è un po 'troppo noioso: P
Domino,

Ehm, non so da dove venissero quei 26, ora ne ottengo 33. Probabilmente dovrei dormire un po '.
Domino,

Tieni presente che alcune impostazioni del browser potrebbero impedire l'uso del prompt su uno snippet. Potrebbe essere necessario salvarlo per eseguirlo.
Domino,

6

JavaScript ES6, 33-25 = 8

(a=2)=>Array(a*33).fill(0).join``

Provalo online!


Non riesco a far funzionare questo codice su console. È giusto? "Uncaught SyntaxError: Unexpected token =>"
Malavos

@Malavos hai bisogno di un browser conforme a es6 come l'ultimo Firefox. Chrome non supporta gli argomenti predefiniti
afaik

Sto usando UCBrowser, ma è vero! Si basa comunque su cromo e geco. Ho provato ogni notte, ho ottenuto "00000000000000000000000000000000000000000000000000000000000000000000". Bello! Potresti spiegarmi il tuo codice? Sono un novizio.
Malavos,

2
@Malavos L'hardcoded 33è in realtà la lunghezza del codice. Crea un nuovo array di lunghezza in 33*acui ail parametro di input è impostato su 2 come da OP, lo riempie e restituisce una stringa unita.
DankMemes,

2
Creando il tuo array con un elemento in più puoi riempire con il join Arrary(1+a*<length>)ejoin`0`
Shaun H

5

Julia, 42 byte - 25 = 17

print("@"^42((r=readline())>""?int(r):2))

Questo legge una riga da STDIN usando readline(). Se è vuoto, ovvero non è stato fornito alcun input, allora n è definito come l'input convertito in un numero intero. In caso contrario, n è 2. Abbiamo poi stampiamo 42 n @ s a STDOUT.


5

Perl, 18-25 = -7

print$=x(<>*9||18)

La variabile speciale $=, aka $FORMAT_LINES_PER_PAGE, inizia la sua vita come 60, e quindi deve essere duplicata solo la metà del numero di byte necessari.


1
Ho avuto una risposta molto simile a: print$=x9x(pop||2)bello!
Dom Hastings,
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.