Emetti il ​​tuo punteggio!


54

Sfida:

Il concetto è abbastanza semplice: scrivere un programma completo per ottenere il proprio punteggio di golf in codice!

L'output dovrebbe essere solo il conteggio dei byte del programma e un trailing bytes.

MA ASPETTA ..... c'è una limitazione:

  • Il codice sorgente non può includere nessuna delle cifre del conteggio dei byte
  • Quindi, se il tuo punteggio è 186 bytes, il programma non può contenere i caratteri 1, 6o8

Esempio di output:

315 bytes
27 Bytes
49 BYTES

Regole aggiuntive:

  • Caratteri, spazi e nuove righe non necessari sono vietati nel codice sorgente, tuttavia gli spazi finali e le nuove righe sono perfettamente accettabili nell'output
  • Dovrebbe esserci un solo spazio tra il numero e bytesnell'output
  • Le lettere non fanno distinzione tra maiuscole e minuscole
  • Nessuna autoispezione o lettura del codice sorgente
  • le scappatoie standard non sono ammesse

  • questo è , quindi

Vince il codice più corto in byte!


6
È necessario il tag Quine o il codice può essere autoispezionato?
Adám,

3
@Dat, data la formattazione della parola bytessospetto che l'intenzione sia che il conteggio includa i byte necessari per stampare il testo:bytes
Jeff Schaller

2
Gli spazi iniziali nell'output sono accettabili?
rafa11111

3
Se il mio codice è lungo 1 byte, devo emettere 1 byteso 1 byte? (tieni presente che ci sono già 41 risposte, anche se non credo che ne siano colpite)
Erik the Outgolfer

1
@JoKing Beh, non ho affrontato il caso nelle regole, ma se in qualche modo l'uso delle lettere maiuscole riduce il tuo punteggio, allora mi piacerebbe vedere cosa ti è venuto in mente. Dico provaci!
X1M4L

Risposte:


41

JavaScript, 19 byte

Octal è stato inventato per due scopi:

  • impostazione delle autorizzazioni per i file in Linux
  • rispondere a questa sfida

alert(023+' bytes')

Provalo online!


Questo conta come un programma completo?
ericw31415

1
@ ericw31415 Questo è un programma browser , come definito in questa meta risposta .
Arnauld,

5
+1 perché finalmente mi chiarisco perché l'ottale non è completamente inutile!
sergiol,

34

Perl 5 , 16 byte

Ci sono molti altri modi per ottenere, 16ma questo è mio

say afpbytes^PPP

Provalo online!


1
Come funziona?
caird coinheringaahing

9
@cairdcoinheringaahing In perl puoi tralasciare le virgolette sulle stringhe se sembrano letterali e non sono in conflitto con una parola chiave (ed è molto deprecata ma non ci interessa nel golf), operatori binari & | ^e ~possono anche essere applicate a stringhe e lavorare su di esse come in un elenco di valori ASCII (se e solo se entrambe le parti sono stringhe). Per |e ^funziona come se la stringa shorte fosse estesa con \0. Dopo di che è un semplice esercizio per trovare combinazioni di lettere che raggiungono l'output desiderato,
Ton Hospel

26

7 , 23 caratteri, 9 byte

54340045141332401057403

Provalo online!

Questa è una sfida abbastanza difficile in una lingua che consiste interamente di cifre, ma l'ho gestita ...

Sono solo 9 byte nella codifica di 7. (A rigor di termini, sono 8⅜ byte (23 × ⅜ - ¼ perché gli ultimi due bit finali 1 possono essere omessi), ma per la prima volta, il requisito di PPCG di arrotondare per eccesso a un numero intero di byte è in realtà un vantaggio perché significa che i bit di trascinamento extra 1 sono necessari e quindi non vietati dalla domanda.) Una discarica esadecimale reversibile:

00000000: b1c0 2530 b6a0 22f8 1f                   ..%0.."..

La sfida principale di scrivere questo programma in 7 era giocare a golf con meno di 10 byte (come scrivere 7 senza usare 0o 1è piuttosto difficile.) Questo usa la stessa struttura del programma standard "Hello world":

5434004514133240105 7 403
5434004514133240105 comandi 0-5 aggiungono valori letterali allo spazio dati
                   7      avvia una nuova sezione di spazio dati
                    403 un altro letterale aggiunto allo spazio dati
                         {implicito: valuta l'ultima sezione come comandi}
                    4     scambia la 1a e la 2a sezione con una sezione vuota tra
                      6    ricostruisci i comandi che creerebbero l'   output della 1a sezione
                       3 (+ alcuni altri effetti che non ci interessano)

In altre parole, iniziamo creando due sezioni dello spazio dati; abbiamo due letterali, ognuno dei quali invia una sequenza di comandi lì. La seconda sezione (sono spinti in stile stack quindi primo push = ultimo pop) è una sequenza di comandi abbastanza arbitraria ma è spinta usando la sequenza di comandi 5434004514133240105(producendo così la sequenza di dati 5434664574733246765; quando parlo di 7 nel testo, normalmente uso un carattere normale per un comando che spinge un valore letterale e grassetto per il valore letterale risultante corrispondente). La prima sezione viene spinta usando la sequenza di comandi 403, producendo 463. Quindi la prima sezione viene copiata nuovamente nel programma (un comportamento implicito di 7).

Il 463è ora composto di comandi (in grassetto) che fanno subito qualcosa, piuttosto che (non in grassetto) comandi che solo letterali push. 4riorganizza le sezioni per ottenere il nostro "string letterale" nella prima sezione. Quindi 0esegue l'operazione per cui 7 è più noto: prendere una sezione dello spazio dati e ricostruire la sequenza di comandi che molto probabilmente l'ha creata. Nel caso in cui la sequenza di comandi originale fosse tutta 0- 5, questo è accurato al 100% (non sorprende, poiché quei comandi trasmettono puramente i dati e quindi lasciano evidenti prove di ciò che hanno fatto), e quindi otteniamo la nostra sequenza originale 5434004514133240105. Alla fine, lo 3stampa.

Quindi la cosa rimanente da guardare qui è la codifica della stringa. Questo ha il suo linguaggio specifico del dominio:

5434004514133240105
5                    change encoding: 6 bits per character
 43                  select character set: digits and common symbols
   40                '9'
     04              space
       51            select character set: uppercase letters
         4133240105  'B' 'Y' 'T' 'E' 'S'

(Non esiste un "set di caratteri selezionato: lettere minuscole" nel set di caratteri "cifre e simboli comuni" - devi prima passare con un set di caratteri diverso - quindi ho dovuto usare maiuscole per giocare a golf così brevemente da inserirle sotto l'effettivo 10 -byte limit.)


15

Tela , 8 byte

8 bytes+

Provalo qui!

Una soluzione più interessante di 20 byte:

bytecount.innerText#

Provalo qui!


3
OK, è abbastanza intelligente.
Adám,

Si noti che una delle restrizioni è "Il codice sorgente non può includere nessuna delle cifre dal conteggio dei byte", quindi la prima soluzione non è valida in questo caso =)
ciclico

1
@Cyclonecode Quel "8" non esiste un normale ASCII 8 però - è un carattere a larghezza intera 8 in questa versione unicode del codice, anche se in realtà è il byte 0xD5, che è completamente estraneo a qualsiasi 8s
dzaima



8

PHP più vecchio di 7.2 , 13 byte

Presuppone le impostazioni predefinite (avvisi E_NOTICE disabilitati) e la versione di PHP precedente alla 7.2.

Deve essere decodificato xxd -r

00000000: 3c3f 3d7e cecc df9d 868b 9a8c 3b         <?=~........;

O se preferisci Base64

PD89fs7M352Gi5qMOw==

Provalo online!


6

Stax , 5 byte

╗↑╞ô╝

Esegui ed esegui il debug

Disimballato, sembra così. La modalità sorgente compressa rende questo tipo di banale e poco interessante.

5p     print 5 with no line break
`5l@   print the compressed string " bytes"

Se non si desidera utilizzare la modalità sorgente compressa, 6^p`5l@funziona per 7 byte.


1
Ho ridimensionato questa risposta, perché penso che l'uso della modalità impaccata, sebbene sia un modo intelligente di salvare byte, mi sembra di imbrogliare (cosa che non è) nel peggiore dei casi e non creativo nel migliore dei casi. Piuttosto che andare in folle downvote di tutte le risposte Stax a fonte limitata , lascerò questo downvote per coprire tutte queste risposte simili.
caird coinheringaahing l'

1
Sono certamente d'accordo che non sia creativo. Ma penso che la colpa sia del concetto restricted-source, non del linguaggio. Questo è in realtà il modo più diretto di produrre "5 bytes"usando Stax.
ricorsivo l'

Sono d'accordo che c'è un problema con la sfida (da qui il motivo per cui ho downvoted esso ), ma ho ancora piace questa risposta. Per favore non cancellarlo (solo cautela preventiva), non c'è nulla di sbagliato in esso.
caird coinheringaahing l'

6

R , 16 byte

cat(4*4,"bytes")

Provalo online!


Non è 17 a causa del tuo spazio mancante?
PmanAce

@PmanAce "L'output dovrebbe essere solo il conteggio dei byte del programma e un trailing bytes". Il programma è di 16 byte.
Giuseppe,

catper impostazione predefinita aggiunge uno spazio tra i suoi input.
Giuseppe,

object.sizeoutput nel formato corretto (con bytesincluso per impostazione predefinita). Fastidiosamente, la più breve che ho trovato è 17: object.size(0)-39. TIO
Robin Ryder,

1
Apparentemente, nella versione di Hadley, un vettore 1-lunghezza è di lunghezza 48, quindi deve esistere una versione di R in cui funziona questo codice a 16-byte: object.size(0)/3.
Robin Ryder,



5

Bash, 21 byte

"Leggi il tuo codice sorgente" non è chiaramente il vincitore qui, ma nessun altro ha inviato uno, quindi che diamine.

echo `wc -c<$0` bytes

Provalo online!


5

Retina , 15 byte


 bytes
*>w`..+

Questo programma conta il numero di sottostringhe con almeno due caratteri nella stringa "byte", quindi stampa questo conteggio e la stringa stessa.

Provalo online!


5

PHP + HTML, 16 byte

&#49;&#54; bytes

Sì, questo si sta avvicinando abbastanza all'abuso di scappatoia, ma ho sentito che doveva essere pubblicato. E l'uso di PHP significa che questa risposta è tecnicamente scritta in un linguaggio di programmazione completo di Turing. Naturalmente, qualsiasi altro linguaggio di template HTML simile funzionerebbe altrettanto bene.

Demo live (senza PHP):

&#49;&#54; bytes


Sconfiggimi! E il ; di solito può essere omesso!
wedstrom,

Ahh, ma sarebbero 14/15 byte
wedstrom,


4

MATL , 13 byte

'57$f}xiw'4-c

Provalo online!

Questo spinge la stringa '57 $ f} xiw 'e sottrae 4, per ottenere 13 bytes. Questo viene convertito in caratteri usando c.


6EV' bytes'hha 12 anni (stavo per pubblicarlo)
Giuseppe

1
anche se è lo stesso approccio noioso: P
Giuseppe


4

Ottava , 23 byte

printf('%i bytes',9+14)

Provalo online!

E questo:

disp(['','67$f}xiw'-4])

Provalo online!


Le prime risposte sembrano buone, ma ... come funziona la seconda? oO
rafa11111

2
@ rafa11111 Sottraendo 4da (i codici ASCII di) si '67$f}xiw'ottengono i codici ASCII di '23 bytes'. Quindi, concatenando con la stringa vuota '' converte i codici ASCII in caratteri
Luis Mendo

2
@Luis Mendo Abbastanza intelligente! Grazie per il chiarimento!
rafa11111

4

Petit Computer BASIC, 11 byte

?9+2,"bytes

L'uso di una virgola in un'istruzione di stampa sposta il cursore sul multiplo successivo della dimensione della scheda corrente. In SmileBASIC, che è 4 per impostazione predefinita, quindi questo produrrebbe 11 bytes(2 spazi) ma PTC BASIC usava invece 3, quindi l'output ha la spaziatura corretta.


4

APL (Dyalog Unicode) , 12 byte

Programma completo che stampa implicitamente su STDOUT.

'bytes',⍨3×4

Provalo online!

,⍨ Aggiunge la stringa al risultato della moltiplicazione. La visualizzazione predefinita di APL di dati di tipo misto inserisce uno spazio tra un numero e il testo successivo.


Potrei sbagliarmi, ma non hai un 2 nel conteggio dei byte e nel programma? 3 * 4 dovrebbe andare bene però
fyrepenguin

@fyrepenguin Heh, certo che lo sei, ovviamente. Che sciocco sono.
Adám,

4

Brain-Flak , 100 BYTES

((((((<>))))))(((()[[]]((((()()((((([][]){}){}())[()]))[[][]])()){})()[][]))[()()[]])[]){({}<>)<>}<>

Provalo online!

Emette la bytesparte in maiuscolo. Qualcuno che abbia familiarità con Brain-Flak potrebbe essere davvero confuso con tutto ((<>))all'inizio, ma state tranquilli, sono lì solo per abusare dell'altezza della pila nilad ( []) e nessuna delle 0s che producono sono stampate.



4

Spazio bianco , 112 byte

Solo perché nessuno lo ha ancora fatto:

   			    
	
 	   
   	 	  		
   	   	 	
   	 	 	  
   	 		  	
   	    	 
   	     

  
	
   
 
	  

 


   




Provalo online!

Stampa "BYTES" in maiuscolo, poiché le lettere maiuscole hanno codici ASCII binari più corti. I comandi nel programma, nella mia notazione inventata, sono:

Push 112
PrintNum
Push 0
Push 0x53
Push 0x45
Push 0x54
Push 0x59
Push 0x42
Push 0x20
Label _
PrintChr
Dup
JumpZ S
Jump _
Label S
End

Ah, non ho notato che c'era già una risposta agli spazi bianchi. Eccone una più breve ( 104 byte ). . Elimina di nuovo il mio. Ecco lo stesso con l'evidenziazione e la spiegazione aggiunte.
Kevin Cruijssen,

Oh, hmm Immagino che il testo sia abbastanza breve che l'implementazione del ciclo in realtà fa più male che ripetere semplicemente PrintChar. (E lo so, posso sempre eliminare l'NNN finale, ma mi piace davvero non avere errori.)
aschepler

4

Java 5 o 6, 44 byte (programma completo)

enum A{A;{System.out.print(0x2C+" bytes");}}

Nessun collegamento TIO, perché Java 5/6 è vecchio .. In Java 5/6 era possibile avere un enum con codice anziché il mainmetodo obbligatorio , rendendolo più breve per le sfide complete del programma.

Anche errori con java.lang.NoSuchMethodError: main\nException in thread "main"STDERR dopo la stampa su STDOUT, che va bene secondo il meta (ma se la sfida non avrebbe consentito ulteriori errori a STDERR, è System.exit(0);possibile aggiungere (e i numeri ottali devono essere aggiornati) per evitare l'errore.

Suggerito da @ OlivierGrégoire (e il suo suggerimento Java pertinente ).

Java 8+, 74 byte (programma completo)

interface M{static void main(String[]a){System.out.print(0112+" bytes");}}

Provalo online.

Java 8+, 16 15 byte (funzione lambda)

v->0xF+" bytes"

-1 byte grazie a @ OliverGégoire .

Provalo online.


2
Tecnicamente non è un programma completo :)
OOBalance

@OOBalance Oops .. in qualche modo letto oltre, grazie per la correzione. Ecco il mio punteggio .. XD
Kevin Cruijssen,

1
37*2contiene un 7, quindi non è valido. La tua soluzione alternativa va bene però.
OOBalance

1
v->0xE+"bytes"oppure v->0xF+" bytes". Impossibile eseguire il test ma dovrebbe funzionare comunque. Nulla dice che il punteggio e i "byte" debbano essere separati.
Olivier Grégoire,

1
@ OlivierGrégoire Lo so, lo so. ;) Quando ho pubblicato il programma completo, dubitavo di rispondere come enum pensando alla tua risposta . Conosci qualche compilatore online che lo supporta ancora? Preferisco avere un collegamento con il codice di prova per le mie risposte ..
Kevin Cruijssen,


4

Applescript, 15 byte

Sì, ci vado.

9+6&”bytes”

1
Ma ...Your source code can not include any of the digits from your byte count
Nicea

@nicael Dang, hai ragione. Un secondo poi ...
DonielF

Correggimi se sbaglio, ma non è un carattere multibyte (3 byte in Unicode se ricordo bene), quindi questo è più di 11 byte?
caird coinheringaahing

@cairdcoinheringaahing ... Spara. Hai ragione - “è di 2 byte, aumentando questo a 15.
DonielF

questo non stampa ancora 11?
Destructible Lemon



3

Lotto, 32 byte

@@echo %COMSPEC:~-10,-010% bytes

COMSPECè di solito %WINDIR%\system32\cmd.exequindi estraggo la sottostringa da 10 a 8 caratteri dalla fine. Vecchia versione autoreferenziale a 16 byte:

@echo %~z0 bytes

Fortunatamente il conteggio dei byte non era un multiplo di 10.


@manatwork OK, non l'avevo visto, ecco una nuova versione.
Neil,

3

JavaScript, 16 15 byte

x=>0xf+' bytes'

_=>5*3+' bytes'
Neil,

@Neil Sia il codice che il conteggio dei byte contengono un 5in quel caso ..
Kevin Cruijssen

@KevinCruijssen Bah, non posso credere di averlo ignorato.
Neil,

Gli invii devono essere programmi completi " scrivere un programma completo per ottenere il proprio punteggio di golf in codice!"
Kritixi Lithos,
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.