Nessuna stringa (o numero) allegata


71

Se ti piace, considera di partecipare a:


Crea 12 snippet / espressioni , nella stessa lingua, che generano rispettivamente i numeri da 0 a 10 e 42, ma senza scrivere alcun dato letterale numerico, stringa o carattere.

I dati incorporati , come PI()e ALPHABET(), vanno bene, così come le costanti U, X, Y, Z e A di CJam e BLEND, CHORD, CENTER, BREAK e LINES di Processing.

Ogni frammento deve essere in grado di resistere da solo, cioè potrebbe non essere interdipendente. Tuttavia, all'interno di un singolo frammento, è possibile assegnare una variabile e utilizzarla liberamente, purché si faccia riferimento ad essa direttamente per nome e non tramite una stringa contenente il suo nome.

Tutti i frammenti devono essere validi sul computer del mittente al momento dell'invio (come riportato da SE), ma potrebbero non fare affidamento su condizioni locali insolite come il numero di file in una directory, la data o l'ora esatta o l'input specifico dell'utente .

Esempi di frammenti validi

3: INT(LOG10(YEAR(TODAY()))) perché rimane vero nel prossimo futuro
4: CUBICROOT(LEN(CHARACTERSET())) perché un set di caratteri di 256 lettere è molto comune
8: SQRT(SYSTEMTYPE()) perché i sistemi a 64 bit sono molto comuni

Esempi di frammenti non validi

5: LEN(USERNAME()) perché la maggior parte delle persone non usa "Admin" come login :-)
9: LOG10(SYSTEMMEMORY()) perché funziona solo su sistemi con esattamente 1 GB di memoria
42: CODE("*") perché contiene una stringa / carattere letterale

Il risultato di ciascun frammento deve risultare in un numero effettivo (valore, int, float, ecc.) Che può essere utilizzato per ulteriori calcoli utilizzando la stessa lingua dello snippet, ovvero non una stringa di testo che rappresenta quel numero.

Sono ammesse solo le lingue basate sui caratteri.

Il punteggio è il conteggio totale dei byte di tutti i 12 frammenti combinati. Le newline che separano i frammenti non vengono conteggiate.

Si noti che le regole di cui sopra potrebbero impedire la partecipazione di alcune lingue, anche se sono complete.

FAQ

D I programmi possono accettare input?
A Sì, ma potresti non solo chiedere un input e inserire il numero corrispondente.

D Sono consentite cifre fisiche (non dati)?
A Sì, ad es LOG10().

D I simboli in Ruby contano come letterali?
A Sì.

D Il punteggio include nuove righe tra ogni frammento?
Un no

D TI-BASIC è "basato sui caratteri" abbastanza per essere valido?
A Sì.

D Falso e vero contano come letterali numerici?
A No, sono accettabili.

D Possiamo usare un numero letterale per chiamare una funzione se questo è l'unico modo e il numero non influenza l'output della funzione?
A Sì, se questo è il modo normale di scrivere il codice nella tua lingua.

D La mia lingua presuppone che ci sia un [qualcosa] all'inizio di ogni programma / espressione. Devo includerlo o i miei frammenti dovrebbero funzionare solo se inseriti nel mezzo di un programma / espressione?
A Dovrebbero funzionare solo nel mezzo di un programma / espressione.

D Che dire dei letterali regex?
A Proibito, ad eccezione delle lingue che fanno solo regex.

D È accettabile un pezzo di codice in grado di stampare tutti i numeri specificati?
A No, devono essere separati e reciprocamente indipendenti.

D Posso assumere una caldaia simile int main() {}...o equivalente?
A Sì.

D Quali tipi di dati di output sono consentiti?
A Qualsiasi tipo di dati numerico, come int, float, ecc.

D Devo stampare il risultato di ogni frammento?
A No, è sufficiente rendere il risultato disponibile per l'uso successivo.

D Sono consentite le variabili preimpostate?
A Sì, e vengono ripristinati (se modificati) per ogni frammento.

D π ed e sono considerati numeri letterali?
A No, puoi usarli.

D Posso restituire 4 e 2 in celle diverse per 42?
A No, devono essere collegati come un numero.

Q Byte o caratteri?
A Byte, ma è possibile scegliere qualsiasi tabella codici desiderata.

D È possibile utilizzare funzioni costanti e variabili preimpostate come J's 9:, Actually 9e Pretzel 9?
A Sì, se il vocabolario è finito (19 per J, 10 per Actually e Pretzel).


Se 0-9 non sono letterali numerici ma sono variabili precompilate, sarebbero un gioco equo?
Cyoce,

@Cyoce Quindi 10 è {1, 0} e non 2 × 5?
Adám,

no, esiste semplicemente un'altra sintassi per i letterali che non è base-10, quindi 0-9 non sono letterali. Hanno il valore di 0-9, ma sono considerati variabili
Cyoce

@Cyoce Allora va bene. Che lingua è?
Adám,

pretzel (una lingua su cui sto lavorando).
Cyoce,

Risposte:


15

Esagonia , 13 byte

1
2
3
4
5
6
7
8
9
10
42

Provalo online!

In Hexagony, 0through 9sono funzioni che moltiplicano la memoria corrente per 10 e quindi aggiungono il numero rappresentato dal nome della funzione. Pertanto, il primo frammento è vuoto quando i ricordi iniziano come 0.

Ad esempio, se la memoria corrente è 65, l'esecuzione della funzione 3renderà la memoria corrente 653.

(Ai votanti: vota tutto ciò che vuoi; sono pronto.)


Subdolo, ma ottiene il mio voto e spunta.
Adám,

49

Funciton , 1222 byte

Oltre ai letterali numerici, ci sono due modi in cui posso produrre un valore (qualsiasi valore) in Funciton: espressioni stdin e lambda. Stdin è una casella singola mentre un'espressione lambda completa richiede più sintassi, quindi vado con stdin. Tuttavia, sebbene stdin possa essere qualsiasi cosa, tutte le seguenti operazioni funzionano indipendentemente dall'input fornito.

Tutte le funzioni di libreria utilizzate qui esistevano prima della pubblicazione della sfida.

0 (40 byte in UTF-16)

╔╗┌┐
║╟┤└┼┬┐
╚╝└─┘└┘

Questo utilizza la sintassi non elaborata per minore di. Un valore non è mai inferiore a se stesso, quindi il risultato è 0.

1 (52 byte in UTF-16)

╔╗┌─╖┌─╖
║╟┤⌑╟┤ɕ╟
╚╝╘═╝╘═╝

restituisce una sequenza pigra contenente un singolo elemento e ɕconta il numero di elementi. (La sequenza pigra è abbastanza pigra che questo frammento in realtà non valuta affatto lo stdin!)

2 (70 byte in UTF-16)

╔╗┌─╖┌─╖┌─╖
║╟┤⌑╟┤ʂ╟┤ɕ╟
╚╝╘═╝╘═╝╘═╝

= 2¹. ʂgenera tutte le sottosequenze di una sequenza e quindi trasforma una sequenza di n elementi in uno con 2ⁿ.

3 (88 byte in UTF-16)

╔╗┌─╖┌─╖┌─╖┌─╖
║╟┤⌑╟┤ʂ╟┤ɕ╟┤♯╟
╚╝╘═╝╘═╝╘═╝╘═╝

= 2 + 1. incrementa un valore di 1.

4 (88 byte in UTF-16)

╔╗┌─╖┌─╖┌─╖┌─╖
║╟┤⌑╟┤ʂ╟┤ʂ╟┤ɕ╟
╚╝╘═╝╘═╝╘═╝╘═╝

= 2².

5 (106 byte in UTF-16)

╔╗┌─╖┌─╖┌─╖┌─╖┌─╖
║╟┤⌑╟┤ʂ╟┤ʂ╟┤ɕ╟┤♯╟
╚╝╘═╝╘═╝╘═╝╘═╝╘═╝

= 4 + 1.

6 (106 byte in UTF-16)

╔╗┌─╖┌─╖┌─╖┌─╖┌─╖
║╟┤⌑╟┤ʂ╟┤ɕ╟┤♯╟┤!╟
╚╝╘═╝╘═╝╘═╝╘═╝╘═╝

= 3 fattoriale.

7 (110 byte in UTF-16)

┌───┐┌─╖┌─╖┌─╖╔╗
│┌─╖├┤ɕ╟┤ʂ╟┤⌑╟╢║
└┤A╟┘╘═╝╘═╝╘═╝╚╝
 ╘╤╝

= A (2, 2) (funzione di Ackermann).

8 (118 byte in UTF-16)

┌────┐┌─╖┌─╖┌─╖╔╗
│┌──╖├┤ɕ╟┤ʂ╟┤⌑╟╢║
└┤<<╟┘╘═╝╘═╝╘═╝╚╝
 ╘╤═╝

= 2 << 2 (maiusc-sinistra).

9 (128 byte in UTF-16)

┌───┐┌─╖┌─╖┌─╖┌─╖╔╗
│┌─╖├┤♯╟┤ɕ╟┤ʂ╟┤⌑╟╢║
└┤×╟┘╘═╝╘═╝╘═╝╘═╝╚╝
 ╘╤╝

= 3 × 3.

10 (146 byte in UTF-16)

┌───┐┌─╖┌─╖┌─╖┌─╖┌─╖╔╗
│┌─╖├┤♯╟┤ɕ╟┤ʂ╟┤ʂ╟┤⌑╟╢║
└┤+╟┘╘═╝╘═╝╘═╝╘═╝╘═╝╚╝
 ╘╤╝

= 5 + 5.

42 (170 byte in UTF-16)

┌──────┐┌─╖┌─╖┌─╖┌─╖┌─╖╔╗
│┌─╖┌─╖├┤!╟┤♯╟┤ɕ╟┤ʂ╟┤⌑╟╢║
└┤♯╟┤×╟┘╘═╝╘═╝╘═╝╘═╝╘═╝╚╝
 ╘═╝╘╤╝

= 6 × (6 + 1).



4
Vorrei poter votare più di una volta ...
ev3commander il

26

JavaScript, 144 141 140 138 132 125 123 byte

Con l'aiuto di @ edc65 , @Sjoerd Job Postmus , @DocMax , @usandfriends , @Charlie Wynn e @ Mwr247 !

result.textContent = [

+[]                          ,// 0  (3 bytes)
-~[]                         ,// 1  (4 bytes)
-~-~[]                       ,// 2  (6 bytes)
-~-~-~[]                     ,// 3  (8 bytes)
-~Math.PI                    ,// 4  (9 bytes)
-~-~Math.PI                  ,// 5  (11 bytes)
-~-~-~Math.PI                ,// 6  (13 bytes)
Date.length                  ,// 7  (11 bytes)
(a=-~-~[])<<a                ,// 8  (13 bytes) = (2 << 2)
(a=~Math.E)*a                ,// 9  (13 bytes) = (-3 * -3)
(a=-~-~[])<<a|a              ,// 10 (15 bytes) = ((2 << 2) | 2)
(a=Date.length)*--a           // 42 (19 bytes) = (7 * 6)

];
<pre id="result"></pre>


Prova 4: - ~ Math.PI
edc65, il

@ edc65 Grazie! Ho pensato che ci sarebbe stato qualcosa che avrei potuto fare con PI. :)
user81655

Per 5, 6 è anche possibile utilizzare -~-~Math.PIe -~-~-~Math.PIsalvare un altro byte (due volte).
Sjoerd Job Postmus,

1
Salvane uno su 42 con (escape+NaN).length. PS Oggi ho imparato che JavaScript è davvero strano ...
Mwr247

1
Stavo per dire che NaNconta come un numero, ma è letteralmente Non un numero: P
ETHproductions

17

Mouse-2002 , 27 26 17 14 byte

I primi frammenti spingono 0-10, e ZR+spinge 25quindi 17ed 25 17 + 42 =è 1.

A
B
C
D
E
F
G
H
I
J
K
ZR+

Dice "uno snippet o un'espressione" in modo da poter rimuovere tutti!! S
ev3commander

3
@cat Non posso parlare per l'interrogante, ma penso che significhi essere indipendenti l'uno dall'altro - non definire una funzione in una, quindi usarla in un'altra. Tuttavia, ogni frammento non deve necessariamente essere un intero programma, può assumere l' int main() {}...equivalente del bollettino che lo farà funzionare.
Tessellating Heckler,

15

CJam, 27 24 byte

U    e# 0
X    e# 1
Y    e# 2
Z    e# 3
Z)   e# 3 + 1
YZ+  e# 2 + 3
ZZ+  e# 3 + 3
AZ-  e# 10 - 3
YZ#  e# 2³
A(   e# 10 - 1
A    e# 10
EZ*  e# 14 × 3

Grazie a @ MartinBüttner per -1 byte!

Provalo online!


12

Brainfuck, 70 byte

+
++
+++
++++
+++++
++++++
+++++++
++++++++
+++++++++
++++++++++
--[>+<++++++]>-

Ogni riga deve essere eseguita singolarmente.

I primi 10 sono autoesplicativi: incrementiamo il valore della cella tramite ogni plus.

Il 42 è molto più complesso. Si basa sul fatto che l'interprete più brainfuck usa celle a 8 bit, il che significa che tutte le operazioni su di esso sono eseguite modulo 256. Il --set di celle da 0 a 254. Quindi entriamo in un ciclo che funziona fino a quando la cella # 0 è 0. Ogni iterazione aggiunge 1 alla cella # 1 e aggiunge 6 alla cella # 0. Questo loop viene eseguito 43 volte, quindi la cella n. 1 è 43. Infine, sottraggiamo 1 dalla cella n. 1 per renderlo 42.

Ho ottenuto i 42 più efficienti mai trovati da http://esolangs.org/wiki/Brainfuck_constants


1
@someonewithpc 4 e 2 è diverso da 42: l'OP indica che il risultato di ogni frammento deve generare un numero effettivo che può essere utilizzato per ulteriori calcoli utilizzando la stessa lingua dello frammento, ovvero non una stringa di testo che rappresenta quel numero . Puoi fare calcoli direttamente su 42, ma non è lo stesso per 4 e 2 in celle separate.
p1xel,

Oh va bene. Mi ero perso quel ..
qualcuno con il

12

Oscurità , 339 303 byte

Qui è dove l'oscurità brilla davvero . Prendilo? : ~)!

Senza stampa (sostituito lo spazio con \snella prima riga poiché non mostrerà diversamente):

\s

█ 

██ 

███ 

████ 

█████ 

██████ 

███████ 

████████ 

█████████ 

██████████ 

██████████████████████████████████████████ 

Con la stampa:

■ 

█■ 

██■ 

███■ 

████■ 

█████■ 

██████■ 

███████■ 

████████■ 

█████████■ 

██████████■ 

██████████████████████████████████████████■ 

Ogni riga deve essere eseguita singolarmente in questo caso poiché il programma termina alla luce (uno spazio). Tuttavia, è possibile scrivere questo su una o più righe nello stesso programma.

L'oscurità regolare (█) incrementa un registro di 1 e l'istruzione ■ (una sorta di mini-oscurità) genera il contenuto del registro.


Non penso che questo richieda programmi completi, solo frammenti.
Erik the Outgolfer,

12

Perl 5, 86 75 71 66 byte

Tutti gli ^Fs sono caratteri di controllo letterali (0x06 in ASCII) e quindi un singolo byte.

$[          # array start index, defaults to 0                                  2
!$[         # !0 is 1                                                           3
$^F         # max sys file descriptor number, 2 on all sane systems             2
++$^F       # 2 + 1                                                             4
~-$]        # 5 - 1                                                             4
int$]       # $] is Perl version, int truncates                                 5
length$~    # 1 + 5                                                             8
~~exp$^F    # floor(e^2)                                                        7
$^F<<$^F    # 2 bitshift-right 2                                                6
-!$[+ord$/  # -1 + 10                                                          10
ord$/       # input record separator, newline by default, ord gets ASCII val    5
ord($"^$/)  # 32 + 10                                                          10

Grazie a msh210 per il salvataggio di 11 byte e Dom Hastings per 9 byte!



downgoated perché "numero massimo del descrittore di file sys, 2 su tutti i sistemi sani = 3" ma ho 65+
cat

(Sto solo scherzando, ho votato ovviamente)
cat

1
Hai mai letto i commenti su un post di SE e pensi "wow, che idiota l'ha scritto"? Sono io adesso, a me stesso.
gatto

!$[+ord$/ # -1 + 10- Non capisco. Nella riga 2 dici che !$[ti dà 1, non −1, quindi questo frammento dà 11.
Timwi

10

MATL, 30 byte

O
l
H
I
K
Kl+
HI*
KYq
HK*
IH^
K:s
IH^:sI-

H, Ie Ksono costanti predefinite per 2, 3 e 4 (come pi). Oe lsono funzioni che restituiscono una matrice di zeri ( O) o uni ( l), la dimensione predefinita è 1x1. :crea un vettore e lo ssomma, quindi K:screa un vettore da 1 a 4 e lo somma per ottenere 10. Yqè la funzione n-esima per primo, così KYqcome la quarta perfezione, 7.


Quella Yqfunzione (e la sua implementazione) è stata un tuo suggerimento molto bello :-)
Luis Mendo il

IK+funzionerebbe altrettanto bene per 7, ma è un po 'troppo noioso: P
David

10

Prolog, 113 99 byte

Frammenti:

e-e              % 0.0
e/e              % 1.0
e/e+e/e          % 2.0
ceil(e)          % 3
ceil(pi)         % 4
ceil(e*e-e)      % 5
ceil(e+e)        % 6
floor(e*e)       % 7
ceil(e*e)        % 8
ceil(pi*e)       % 9
ceil(pi*pi)      % 10
ceil(e^e*e)      % 42

Combina le costanti matematiche e e pi in diversi modi convertiti in int.

Modifica: salvato 14 byte utilizzando float per 0-2.


1
qualcosa di sbagliato in e / e = 1?
Level River St,

@steveverrill: diventerà un float (1.0). Ho interpretato la descrizione della sfida nel senso che i numeri dovrebbero essere numeri interi. La maggior parte di questi, se non tutti, potrebbero essere abbreviati altrimenti.
Emigna il

1
@steveverrill I float vanno bene. Abbiamo solo bisogno del giusto valore .
Adám,

9

PHP, 157 145 91 byte

Pubblicando per la prima volta su Code Golf, ho pensato di provarci. Alla fine migliorerò: P Se vedi dei punti (per te) ovvi in ​​cui potrei salvare i personaggi, fammi sapere.

EDIT: realizzato che non avevo bisogno dei punti e virgola, poiché questi sono solo frammenti.

EDIT2: Grazie a Blackhole per molti suggerimenti!

LC_ALL
DNS_A
~~M_E
~~M_PI
LOCK_NB 
LC_TIME
LOG_INFO
INI_ALL
IMG_WBMP
SQL_DATE
SQL_TIME
LOG_INFO*INI_ALL

5
PHP ha molte estensioni, e quindi molte costanti predefinite molto meglio di quelle matematiche per questa sfida;). LC_ALLper 0 (-1 byte), DNS_Aper 1 (-3 byte), LOCK_NBper 4 (-3 byte), LC_TIMEper 5 (-7 byte), LOG_INFOper 6 (-8 byte), INI_ALLper 7 (-5 byte), ...
Blackhole,

5
IMG_WBMPPer 8 (-4 byte), SQL_DATEper 9 (-9 byte), SQL_TIMEper 10 (-3 byte) e LOG_INFO*INI_ALLper 42 (-11 byte). Quindi un totale di 51 byte salvati! Queste costanti sono valide almeno in PHP 5.6.1 su Windows.
Blackhole,

@Blackhole non è LC_ALLuna cosa dipendente dalle impostazioni locali?
cat

@cat È davvero una costante usata setlocale()per cambiare tutte le categorie di locali. Ma il valore della costante stessa è ovviamente indipendente dalla locale :).
Blackhole,

@Blackhole ah, capisco!
cat

9

Python 2, 191 159 158 157 156 149 146 byte

La mia prima presentazione in assoluto, spero di aver fatto tutto bene! Sulla base del tempo che ho trascorso su questo, credo che ce ne sia sicuramente uno migliore per alcuni di loro.

# 0 | Bytes : 5
int()

# 1 | Bytes : 5
+True

# 2 | Bytes : 6
-~True

# 3 | Bytes : 8
-~-~True

# 4 | Bytes : 10
-~-~-~True

# 5 | Bytes : 12
-~-~-~-~True

# 6 | Bytes : 14
-~-~-~-~-~True

# 7 | Bytes : 16
-~-~-~-~-~-~True

# 8 | Bytes : 15
a=True;a<<a+a+a

# 9 | Bytes : 19
a=True;(a<<a+a+a)+a

# 10 | Bytes : 20
int(`+True`+`int()`)

# 42 | Bytes : 16
~-len(`license`)
# Especially proud of this one !

Total byte count: 146

Mille grazie a FryAmTheEggman!


Benvenuto in PPCG :) Non sono sicuro al 100% di questa sfida, ma penso che usare Truecome idioma per 1 dovrebbe essere accettabile, in quanto non so quando non sono equivalenti come frammenti.
FryAmTheEggman,

Oh, hai ragione! Non usarlo per l'1 stesso, perché True is not 1ma per tutto il calcolo basato su 1, aiuta! Modifica ora.
Joachim Jablon,

1
Usa #8 len(`id(id)`). Quindi 8, 9 e 10 saranno più brevi. Inoltre, forse aggiungi un collegamento ipertestuale per provarlo online .
mbomb007,

Puoi ottenere 9 con len(`{()}`)per 11 byte, e questo ti da 7 a 10 in meno.
xnor

9

C #, nessun utilizzo, 234 byte

new int()                       // 0
-~new int()                     // 1
-~-~new int()                   // 2
-~-~-~new int()                 // 3
-~-~-~-~new int()               // 4
-~-~-~-~-~new int()             // 5
-~-~-~-~-~-~new int()           // 6
-~-~-~-~-~-~-~new int()         // 7
-~-~-~-~-~-~-~-~new int()       // 8
(int)System.ConsoleKey.Tab      // 9
(int)System.TypeCode.UInt32     // 10
(int)System.ConsoleKey.Print    // 42

Questo è molto più noioso di quanto pensassi inizialmente. Ho avuto le idee abbastanza diverse, come ad esempio new[]{true}.Lengthe true.GetHashCode()ed typeof(int).Name.Lengthe uint.MinValuecosì via, ma new int()batterli tutti.


Le regole ti permetterebbero di fare qualcosa di simile var a = new int();e quindi utilizzarlo ain ogni frammento?
ldam,

@LoganDam: lo trovo più interessante se ogni espressione deve essere autonoma. Questo è anche il motivo per cui non ho usato alcuna usingdichiarazione.
Timwi,

Whoa cosa sono quelli per il 9/10/42: Oo
ev3commander

@ ev3commander: sono semplicemente i valori enum con il nome più breve definiti in mscorlib che hanno il valore intero necessario. Per ConsoleKey.Tab, il valore 9 non è sorprendente (9 è anche l'ASCII del carattere di tabulazione). Gli altri sono probabilmente arbitrari.
Timwi,

Uno più corto per 8:int a=-~-~new int();a<<a
LegionMammal978,

9

PowerShell, 147 byte

Usano +implicitamente il cast di cose in numeri interi. I numeri successivi usano Enum dalle dissociazioni .Net Framework di PowerShell che hanno i valori giusti.

+$a                          #0, 3 bytes (unset vars are $null, +$null == 0)
+$?                          #1, 3 bytes (bool previous result, default $true, +$true == 1)
$?+$?                        #2, 5 bytes (same as #1, twice)
$?+$?+$?                     #3, 8 bytes (beats [Int][Math]::E)
$?+$?-shl$?                  #4, 11 bytes (-shl is shift-left)
$?+$?+$?+$?+$?               #5, 14 bytes
$?+$?+$?-shl$?               #6, 14 bytes (enum value, + casts to integer)
+[TypeCode]::Int16           #7, 18 bytes
$?+$?-shl$?+$?               #8, 14 bytes
+[consolekey]::tab           #9, 18 bytes
+[TypeCode]::UInt32          #10, 19 bytes
+[consolekey]::Print         #42, 20 bytes

#Total:                      147 bytes

  • -~-~-~usato nelle risposte JavaScript, C # e PHP sarebbe - -bnot - -bnot - -bnotin PowerShell.

  • x^yesponenziale usato nelle risposte Perl, o x**yin Python o JavaScript ES7, sarebbe[Math]::Pow($x,$y)

  • costanti e e Pi sono il carattere pesante [Math]::Ee[Math]::PI


x^yè xor in JavaScript. JavaScript (ES7) ha **per esponenti. Fonte
mbomb007,

@ mbomb007 Ah, grazie - ho aggiornato la mia nota a riguardo.
Tessellating Heckler

@ mbomb007 Penso ancora che sia un po 'sciocco
SuperJedi224

@ SuperJedi224 Perché? Ecco come lo fa Python. E xor è un operatore importante.
mbomb007,

8

DC , 35 byte

K
KZ
IZ
Iv
EI-
FI-
IZd*
IIZ/
Ivd+
IIv-
IIZ-
IKZ-
I
EdE++

Per testare gli snippet aggiungi a fper stampare lo stack e passare quella stringa a dc:

$ echo 'EdE++f' | dc
42

Credo che Ee Fqui ci siano cifre (anche quando sono maggiori della radix di input). La prova di ciò è che si combinano come cifre; es. F0-> 150. Puoi vedere lo stesso comportamento con le cifre decimali una volta cambiate radix di input e output.
Toby Speight

Ci sono molte altre risposte usando cose simili ... perché dovrei essere l'unico in cui questo non va bene?
yeti,

Non dovresti - se ci sono altre soluzioni che usano le cifre, allora non sono neanche risposte valide.
Toby Speight

1
Non mi interessa più! Codegolf accetta anche un programma di set di mandelbrot grafico come soluzione all'attività di scrivere un programma di mandelbrot ascii art ... codegolf ha bisogno di un grande reset e quando riavviato potrei o non potermi più preoccupare delle regole ...: -Þ
yeti

7

TI-BASIC, 41 byte

0 ~ 10:

X
cosh(X
int(e
int(π
-int(-π
int(√(π³
int(π+π
int(e²
int(eπ
int(π²
Xmax

42:

int(π²/ecosh(π

In TI-BASIC, tutte le variabili non inizializzate a lettera singola iniziano da 0 e Xmax (il limite della finestra destra della schermata del grafico) inizia da 10.

La costante matematica πè un byte , ma eè due byte.


Π non è considerato un dato numerico?
vsz

@vsz forse, ma non è un numero letterale. L'op lo dice anche.
SuperJedi224,

@NBZ ottimo punto. Colpa mia.
GamrCorps il

6

Python 2, 306 275 274 byte

Ho usato il fatto che per ogni x (intero e non 0) l'espressione è x/xuguale a 1 e ho giocato con alcune operazioni bit per bit.

Ho modificato gli snippet in modo che soddisfino ancora i requisiti (grazie a @nimi questo mi ha salvato 24 byte), ma devi testarli manualmente. Ecco il codice e i conteggi dei singoli byte:

zero.py Bytes: 7
len({})
--------------------------
one.py  Bytes: 12
r=id(id)
r/r
--------------------------
two.py  Bytes: 17
r=id(id)
-(~r/r)
--------------------------
three.py    Bytes: 20
r=id(id)
-(~r/r)|r/r
--------------------------
four.py Bytes: 20
r=~id(id)/id(id)
r*r
--------------------------
five.py Bytes: 26
r=~id(id)/id(id)
(r*r)|r/r
--------------------------
six.py  Bytes: 25
r=~id(id)/id(id)
(r*r)|-r
--------------------------
seven.py    Bytes: 27
r=~id(id)/id(id)
-~(r*r|-r)
--------------------------
eight.py    Bytes: 24
r=-(~id(id)/id(id))
r<<r
--------------------------
nine.py Bytes: 29
r=-(~id(id)/id(id))
r-~(r<<r)
--------------------------
ten.py  Bytes: 31
r=~id(id)/id(id)
-r*((r*r)|r/r)
--------------------------
answer.py   Bytes: 37
r=-(~id(id)/id(id))
(r<<r*r)|(r<<r)|r
--------------------------
Total byte count: 274

Puoi salvare byte coni=id(id);r=~i/i
Cyoce,

6

Math ++, 92 byte in totale

0 (1 byte): a

1 (2 byte):!a

2 (3 byte):_$e

3 (4 byte): _$pi

4 (7 byte): _$e+_$e

5 (8 byte): _($e+$e)

6 (9 byte): _$pi+_$pi

7 (8 byte): _($e*$e)

8 (9 byte): _($e*$pi)

9 (10 byte): _($pi*$pi)

10 (12 byte): _$e*_($e+$e)

42 (19 byte): _($pi+$pi)*_($e*$e)


5

Javascript (Browser Env), 155 136 130 byte

+[]
-~[]
-~-~[]
-~-~-~[]
-~-~-~-~[]
-~-~-~-~-~[]
-~-~-~[]<<-~[]
-~-~-~-~-~-~-~[]
-~[]<<-~-~-~[]
~(~[]+[]+-[])
-~[]+[]+-[]
-~(top+top.s).length // Requires browser environment

Grazie a:
@Ismael Miguel : 155 -> 136 -> 130 byte


1
Puoi usare -~[]+[]+-[]per produrre 10. Restituirà una stringa, ma è comunque utilizzabile come numero. Inoltre, puoi utilizzare -~(top+top.s).lengthper calcolare 42(-8 byte) e rilasciare la tua dipendenza da Google Chrome. Per salvare più 3 byte, utilizzare (P=Math.PI)*P>>+[]per calcolare 9.
Ismael Miguel,

1
Scusa, ho dimenticato qualche byte che puoi radere. Puoi usare ~(~[]+[]+-[])per generare 9. Ciò dovrebbe ridurre alcuni byte in più.
Ismael Miguel,

curiosamente, +[12]12e +[1, 2]NaN. Odio JS
cat

2
@cat È a causa dello strano sistema di cast di JavaScript. Le matrici vengono lanciate su stringhe come [1,2,3]=> "1,2,3"e stringhe su numeri come "12"=> 12ma se nella stringa sono presenti caratteri non numerici, il cast restituisce NaN. +[1,2]lancia una stringa quindi un numero ma la stringa contiene una virgola così "1,2"diventa NaN.
user81655

@ user81655 quello. è. HORRID.
cat

5

Scherzi a parte, 39 33 byte

Le cose tra parentesi sono le spiegazioni:

 (single space, pushes size of stack, which is 0 at program start)
 u (space pushes 0, u adds 1 (1))
 ⌐ (space pushes 0, ⌐ adds 2 (2))
 u⌐ (space pushes 0, u adds 1 (1), ⌐ adds 2 (3))
 ⌐⌐ (space pushes 0, ⌐⌐ adds 2 twice (4))
 ⌐P (space pushes 0, ⌐ adds 2 (2), P pushes the 2nd prime (5))
Hl▓ (H pushes "Hello, World!", l pushes length (13), ▓ pushes pi(13) (6))
QlP (Q pushes "QlP", l pushes length (3), P pushes the 3rd prime (7))
Ql╙ (Q pushes "QlP", l pushes length (3), ╙ pushes 2**3 (8))
úl▓ (ú pushes the lowercase English alphabet, l pushes length (26), ▓ pushes pi(26) (9))
 u╤ (space pushes 0, u adds 1 (1), ╤ pushes 10**1 (10))
HlPD (H pushes "Hello, World!", l pushes length (13), P pushes the 13th prime (43), D subtracts 1 (42))

Hexdump di programmi:

20
2075
20a9
2075a9
20a9a9
20a950
486cb2
516c50
516cd3
a36cb2
2075d1
486c5044

Grazie a quintopia per 6 byte!


1
Suppongo che usi seriamente una tabella codici 256 caratteri che include caratteri pseudo grafici?
Adám,

2
@NBZ CP437
Mego

Puoi salvare un byte su 6 con Hl▓
quintopia il

La stessa idea con ú salva un byte il 9
quintopia il

HlPDsalva 2 byte su 42 e QlPsalva un byte su 7, Qlªsalva un byte su 9 e Ql╙salva un byte su 8. Penso che scenda seriamente fino a 33 byte, detto tutto, legando Pyth.
Quintopia,

5

dc, 42 byte

K
zz
OZ
zzz+
OZd*
OdZ/
zzzz*
Ozz+-
OdZ-
Oz-
O
Od+dz++

risultati

0
1
2
3
4
5
6
7
8
9
10
42

Non ci sono molti modi per generare nuovi numeri con dc. Uso O: base di output, inizialmente 10; K: precisione, inizialmente 0; zprofondità dello stack, inizialmente 0; Zcifre significative dell'operando. Li combiniamo con i soliti operatori aritmetici.

Programma di test

#!/bin/bash

progs=(                                         \
    "K"                                         \
    "zz"                                        \
    "OZ"                                        \
    "zzz+"                                      \
    "OZd*"                                      \
    "OdZ/"                                      \
    "zzzz*"                                     \
    "Ozz+-"                                     \
    "OdZ-"                                      \
    "Oz-"                                       \
    "O"                                         \
    "Od+dz++"                                   \
)

a=0
results=()
for i in "${progs[@]}"
do
    results+=($(dc -e "${i}p"))
    (( a+=${#i} ))
done

echo "#dc, $a bytes"
echo
printf '    %s\n' "${progs[@]}"
echo
echo '##Results'
echo
printf '    %s\n' "${results[@]}"

4

Mathematica, 101 byte

a-a
a/a
⌊E⌋
⌈E⌉
⌈π⌉
⌊E+E⌋
⌈E+E⌉
⌊E*E⌋
⌈E*E⌉
⌈E*π⌉
⌈π*π⌉
⌊π*π^π/E⌋

Sono abbastanza sicuro che alcuni di questi non siano ottimali. Quelle staffe di arrotondamento sono davvero costose.

Per coerenza, anche i primi due potrebbero essere E-Ee E/E, ovviamente, ma ho pensato che fosse abbastanza ingegnoso ottenere 0e 1da un calcolo con variabili indefinite.


@NBZ Siamo spiacenti, dimenticato 0. Se aottiene il valore in 0seguito, non è un problema, purché non venga utilizzato quando a/aviene valutato.
Martin Ender,

@NBZ Il conteggio dei byte è semplicemente il conteggio dei byte UTF-8.
Martin Ender,

4

Japt , 34 33 30 byte

1 byte salvato grazie a @ThomasKwa

T
°T
C-A
D-A
E-A
F-A
G-A
°G-A
Iq
´A
A
H+A

Ecco cosa significa ciascuno dei diversi caratteri:

T    0
A    10
B    11
C    12
D    13
E    14
F    15
G    16
H    32
I    64
q    sqrt on numbers
°    ++
´    --

Japt accetta i numeri esadecimali per impostazione predefinita? Se è così, allora da A a F sarebbero letterali numerici ...
Adám,

@NBZ A-Isono variabili che, per impostazione predefinita, sono assegnate a vari numeri, come mostrato sopra. A-Fsono assegnati a 10-15. Questo invalida queste variabili?
ETHproductions

No. Mi stavo chiedendo se, per esempio, 12AB3 era valido. Ora so che non lo è. Nessun letterale qui, vai avanti. :-)
Adám

4

Marbelous , 98 byte

Non terribilmente eccitante, si basa sui ?ndispositivi che trasformano qualsiasi marmo in un valore casuale nell'intervallo 0..n (incluso) un effetto collaterale di questo che ?0trasforma qualsiasi marmo in uno 0 indipendentemente dall'input. Penso che l'uso dei letterali sia permesso perché il valore non influenza il risultato e non c'è altro modo di chiamare una funzione una volta in Marbelous.

0:

00  # A hexadicemal literal: value 0
?0  # Turn any marble into a random value from the range 0..0 (inclusive)

1:

00
?0
+1  # increment by one

...

9:

00
?0
+9

10:

00
?0
+A  # increment by 10

42:

00
?0
+L  # increment by 21
+L

Sembra che 0 ... L siano letterali numerici.
Adám,

2
@NBZ Non lo sono, non puoi usarli indipendentemente. Da +0 a + Z sono come funzioni integrate. È noioso ma valido.
overactor

4

> <> , 86 byte

  • 0: ln;
  • 1: lln;
  • 2: llln;
  • 3: lll+n;
  • 4: lll:+n;
  • 5: llll+n;
  • 6: llll++n;ollll:+n;
  • 7: lllll+n;
  • 8: lllll:+n;
  • 9: lllll++n;ollllll+n;
  • 10: llll+:+n;olll:l+*n;
  • 42: llll*ll+*n;

Si affida alle dimensioni dello stack per ottenere i suoi valori letterali.


Probabilmente puoi rimuoverlo nsu ciascuno perché le funzioni in linguaggi basati su stack possono lasciare l'output nello stack per -11 byte.
redstarcoder,

@redstarcoder quindi potrei anche rimuovere il ;per un totale di 22 byte e considerare la fine della funzione raggiunta alla fine della linea, ma è un po 'ambigua dal momento ><>che non ha funzioni predefinite.
Aaron,

Tecnicamente, se vuoi che ><>le funzioni siano attive, le tue funzioni devono accettare una posizione di ritorno (x & y) nello stack oltre ai loro parametri, assicurati che non siano di ostacolo mentre esegui i calcoli ( [utile in quel contesto), quindi saltare alla posizione di ritorno dopo aver terminato l'esecuzione. Avevo fatto un POC qualche tempo fa, controlla se sei interessato
Aaron

In realtà ho già visto il tuo post e buon lavoro! Ho fatto un meta post sulle ambiguità delle funzioni . Quello che sto dicendo è che questo è generalmente permesso, con il ;. Il motivo per cui dico di lasciarlo ;è perché altrimenti non c'è modo di indicare quando la funzione termina senza a .. La maggior parte della gente sembra considerarla giusta, ma potrei provare a scrivere un meta post specifico qui se sei preoccupato.
redstarcoder,

1
@redstarcoder grazie per le informazioni! Sento che il suffisso dei ><>frammenti .sarebbe il modo migliore per attenersi alla definizione di funzione descritta nella risposta più votata del meta post, tuttavia sono d'accordo che ;sia una buona alternativa che richiede meno spiegazioni.
Aaron,

4

Formule MS Excel, 163 151 150 143 byte

Non esattamente un linguaggio di programmazione, ma qui va ...

0:  -Z9                         (03 bytes)
1:  N(TRUE)                     (07 bytes)
2:  TYPE(T(Z9))                 (11 bytes)
3:  TRUNC(PI())                 (11 bytes)
4:  TYPE(TRUE)                  (10 bytes)
5:  ODD(PI())                   (09 bytes)
6:  FACT(PI())                  (10 bytes)
7:  ODD(PI()+PI())              (14 bytes)
8:  EVEN(PI()+PI())             (15 bytes)
9:  TRUNC(PI()*PI())            (16 bytes)
10: EVEN(PI()*PI())             (15 bytes)
42: EVEN(CODE(-PI())-PI())      (22 bytes)

PI()viene utilizzato nella maggior parte dei casi in quanto è il modo più breve (di cui sono a conoscenza) di introdurre un valore numerico senza utilizzare un numero o una stringa letterale. Nconverte varie cose (compresi i booleani) in numeri e Tconverte varie cose in testo. TYPErestituisce 2 per un argomento di testo e 4 per un argomento booleano. TRUNCscarta la parte frazionaria (ovvero arrotonda i numeri positivi verso il basso), EVENarrotonda per eccesso al prossimo numero pari e ODDarrotonda per eccesso al prossimo numero dispari. CODE(-PI())è il codice ASCII del primo carattere della conversione in testo di -π, ovvero 45 (per "-").

EDIT: Rimossi segni uguali dal conteggio dei byte (-12!) - come sottolineato da Nᴮᶻ nei commenti, non dovrebbero essere inclusi.

EDIT 2: Supponendo che il resto del foglio di lavoro sia vuoto, è possibile utilizzare un riferimento a una cella vuota come zero (di nuovo, suggerito da Nᴮᶻ) a condizione che includiamo un segno meno (o usarlo in un'altra espressione numerica) per risolvere digitare ambiguità.


0=Z9
Adám

Rimossa la =s, grazie. Per quanto riguarda il tuo suggerimento, ho evitato di proposito i riferimenti di cella, per assicurarmi che le formule siano indipendenti dal contenuto della tabella - se Z9contiene un testo, =Z9non restituirà più zero. Ho deciso di non assumere nulla sul tavolo.
dnep

comunque, mi hai fatto saccheggiare di nuovo, e mi sono reso conto che avrei potuto almeno salvare 1 byte usando a 0 la stessa logica che avevo usato per 1 ...
dnep

Ma alcune lingue hanno tutte le variabili impostate su 0 se non sono impostate su qualcos'altro. In questo contesto, vedrei Excel come un linguaggio con celle di memoria (teoricamente infinite) A1: ZZZ ..: 999 ... e nessuna distinzione tra codice del programma e dati (cioè può essere auto-modificante). Poiché ogni frammento è indipendente dagli altri, suppongo che sia in A1 e il resto del foglio sia vuoto. (Per i programmi, avrei un'intera dichiarazione in ogni cella A1, A2, ecc.)
Adám

Vedo il tuo punto ... ma c'è un ulteriore problema con i riferimenti di cella: Z9su un foglio vuoto c'è un valore vuoto che viene convertito 0in molti casi, ma può essere convertito in ""(stringa vuota) se usato in alcune espressioni - molto simile una variante VBA non inizializzata - quindi non è strettamente equivalente a 0. Ad esempio, = 0&"a" viene valutato "0a"ma viene = Z9&"a"valutato "a". Questo può essere risolto, tuttavia aggiungendo un unario -al riferimento (costringendolo così ad essere numerico - di nuovo, proprio come in VBA). Quindi -Z9 può essere usato come zero. Ho appena aggiornato la risposta. Grazie ancora.
dnep

4

DUP , 68 byte

[
 [
  [
[)]!
[ )]!
[  )]!
[)~_]!
[ )~_]!
[  )~_]!
[   )~_]!
[)$+]!
[ )$+~_$+]!

Try it here.

Ci sono MOLTI modi per farlo, ma sto abusando dello stack di ritorno per questo.

Spiegazione

Per capirlo appieno, è necessario comprendere il comportamento di DUP nei confronti dei lambda. Invece di spingere lo lambda stesso nello stack, in realtà spinge l'IP corrente nello stack quando viene rilevato lo lambda. Questo può spiegare i primi 3 frammenti, che coinvolgono lambda.

I frammenti successivi usano lo stack di ritorno. Quando !viene eseguito, l'IP corrente viene inviato allo stack di ritorno e la parte superiore dello stack viene impostata come nuovo IP per avviare l'esecuzione lambda. )fa apparire un numero dallo stack di ritorno nello stack di dati.

È abbastanza per spiegare il resto dei frammenti. Se ancora non lo capisci, tieni presente che il Steppulsante è abbastanza utile!


4

05AB1E, 40 38 24 byte

¾
X
Y
XÌ
Y·
T;
T;>
T;Ì
TÍ
T<
T
žwT+
  • Push counter_variable
  • Premere 1
  • Premere 2
  • Premere 1 + 2
  • Premere 2 * 2
  • Premere 10/2
  • Premere (10/2) +1
  • Premere (10/2) +2
  • Spingere 10-2
  • Spingere 10-1
  • Premere 10
  • Premere 32, 10, aggiungere

1
è più stack pulita rispetto Yx, Xpuò essere usato al posto di ºqui (il default è 1, ºvuol dire len(stack)>1, in modo che non di default a nulla). Inoltre, il numero di byte è 24, non 35 (CP-1252, le nuove righe non contano se sono frammenti separati).
Erik the Outgolfer,

So che non era ancora possibile al momento della pubblicazione, ma ₆tora 6 può essere (push 36, radice quadrata) per salvare un byte ( Provalo online ).
Kevin Cruijssen,

3

D1ffe7e45e , 112

0
02
020
0202
02020
020202
0202020
02020202
020202020
0202020202
02020202020
202020202020202020202020202020202020202020

Ogni riga è un frammento diverso.

I numeri nel programma non contano come numeri letterali poiché sono usati solo come comandi.

L'ultimo può sicuramente essere giocato a golf di più.

EDIT: ho fatto funzionare l'interprete e tutti gli snippet funzionano. Se desideri testare te stesso, aggiungi 0f0falla fine dello snippet in modo che il programma termini.


6
Quelli sicuramente mi sembrano letterali. Inoltre, non pubblicare codice che non hai testato.
Mego

2
Puoi spiegare come funzionano?
Adám,

@NBZ D1ffe7e45e funziona in base alla differenza tra due numeri esadecimali. Tale differenza viene quindi interpretata in un comando. Ad esempio, la differenza tra 0 e 2 è 2, che viene interpretata come il comando di incremento (come +in Brainf ** k). Ho pensato che dal momento che vengono utilizzati come comandi e non come numeri letterali, ha comunque contato. In caso contrario eliminerò la risposta.
ASCIIThenANSI,

@Mego ho fatto funzionare l'interprete e il mio codice funziona. Vedi il commento sopra per il motivo per cui penso che non siano letterali.
ASCIIThenANSI,

1
Non credo che nessuno di questi sia letterale. Tuttavia, non credo che dovresti stampare i numeri, poiché il risultato di ogni frammento deve risultare in un numero effettivo che può essere utilizzato per ulteriori calcoli .
Dennis,

3

Pyth, 35 34 33 byte

-1 byte di @Mimarik

Esistono numerose possibilità per alcuni programmi.

0, 1 byte

Z

1, 2 byte

hZ
!Z

2, 3 byte

hhZ
eCG
eCd
lyd
lyb
lyN

3, 3 byte

l`d

4, 3 byte

l`b
eCN

5, 4 byte

hl`b
telG

6, 3 byte

elG

7, 4 byte

tttT
helG

8, 3 byte

ttT

9, 2 byte

tT

10, 1 byte

T

42, 4 byte

yhyT

Tutti questi coinvolgono comandi double ( y), +1 ( h) e -1 ( t) di base o l(lunghezza di una stringa). La variabile Z viene inizializzata su zero.

Per 5, bviene inizializzato su un carattere di nuova riga. Backtick dà"\n" (comprese le virgolette e la lunghezza di quella stringa è 4.

Provali qui !


L'utente Mimarik ha suggerito di salvare un byte su 42 con yhyT. (Ho rifiutato la modifica come da meta.codegolf.stackexchange.com/questions/1615/… )
Martin Ender il
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.