Stampa stringhe senza condividere caratteri


15

Modifica: permesso di riutilizzare gli spazi bianchi.

Il tuo compito è scrivere n programmi (o funzioni, o corpi di funzioni senza usare parametri o nomi di funzioni) nella stessa lingua. Il k programma dovrebbe produrre il numero (cardinale) k in inglese standard in minuscolo (con una nuova riga finale facoltativa). Quindi il primo programma dovrebbe essere emesso one, il secondo dovrebbe essere emesso two, ecc. Per un numero che ha due parti, dovrebbero essere separati da un trattino come twenty-one.

Ma non ci sono due programmi nella tua presentazione in grado di condividere caratteri non bianchi o bianchi facendo lavori utili. Ad esempio, se il tuo primo programma è giusto "one", allora nessuno di" o n e epuò essere riutilizzato negli altri programmi.

È possibile utilizzare caratteri di spazi bianchi (spazi, righe e righe) in due o più programmi, se servono solo come separatori o rientri e non fanno nulla da soli. Quindi non puoi riutilizzarli nella lingua degli spazi bianchi e non puoi usarli nelle stringhe in più di un programma.

È possibile utilizzare solo caratteri ASCII stampabili, schede e nuove righe (inclusi CR e LF). Ogni programma deve contenere almeno 1 carattere.

Il tuo punteggio è la somma di 1 / dimensione del programma ^ 1.5. Il punteggio più alto vince. Puoi utilizzare questo frammento di stack ( o questo codice CJam ) per calcolare il tuo punteggio:

function updatescore(a){var l=a.value.split("\n"),s=0;for(var i=0;i<l.length;i++){var t=l[i].length;t-=t&&l[i][t-1]=="\r";if(t)s+=Math.pow(t,-1.5);}document.getElementById('result').textContent=s;}
<textarea id="input" placeholder="Put your code here, one per line." style="width:100%;height:150px;box-sizing:border-box" oninput="updatescore(this)" onpropertychange="updatescore(this)"></textarea><div>Your score: <span id="result">0</span></div>


Una regola di punteggio migliore può essere la somma di 1 / (dimensione del programma + c) ^ 1.5, dove c è una costante. Ma penso che probabilmente è troppo tardi per cambiarlo.
jimmy23013,

Possiamo aggiungere un moltiplicatore per arrivare a un numero cardinale più alto, poiché quello sembra essere l'obiettivo? Sono arrivato a dodici, più in alto di tutti gli altri, ma sto ancora perdendo.
mbomb007,

@ mbomb007 Ci scusiamo per aver deliberatamente assegnato a Headsecks un punteggio più basso. Ma se Headsecks ha un punteggio simile agli altri, immagino che Glypho vincerà troppo (per non dire Lenguage).
jimmy23013,

Voglio farlo negli spazi bianchi :(
YoYoYonnY

1
@ mbomb007 Se sto ponendo di nuovo una domanda simile, probabilmente aggiungerò una piccola costante alle dimensioni del programma nella partitura. Ma è troppo arbitrario per cambiare in questa domanda.
jimmy23013,

Risposte:


6

gs2 , 0.38669200758867045

Rimuovi gli spazi bianchi da tutti questi programmi, ma tre , è solo per la (tosse) leggibilità. uno e sei sono programmi gs2 che si arrestano in modo anomalo (sottoproducendo lo stack), il che li rende convenientemente quines .

uno (3 byte)

one

due (1384 byte)

A?"A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0
A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0000000000000
000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000A?"A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A
"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"00000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000A?"A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"0A"
0A"0A"0A"0A"000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000
0000

tre (92 byte)

0a 21 2c 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 21 20 21 20 21 20 21 20 21 20 21 20 21
20 21 20 2f 20 0a 21 28 3c 0a 21 2c 21 20 21 20
21 20 21 20 2f 20 0a 21 28 3c 45 21 20 21 20 21
2f 20 0a 21 28 3c 0a 21 2c 21 20 2f 20 0a 21 28
3c 0a 21 2c 21 20 2f 20 0a 21 28 3c

Un sacco di spazi bianchi significativi, quindi ecco una discarica esadecimale. Ha un carattere di avanzamento a riga singola all'inizio:


!,! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! / 
!(<
!,! ! ! ! / 
!(<E! ! !/ 
!(<
!,! / 
!(<
!,! / 
!(<

quattro (276 byte)

f$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$
31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f$f$31f
$f$31f$f$31Mf$f$f$31f$f$31f$f$31f$f$31f$f$31Mf$f$f$31f$f$31f
$f$31f$f$31f$f$31f$f$31f$f$31f$f$31M

cinque (178 byte)

hd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&
&&&&&&&Khd+++&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&K

sei (3 byte)

six

Non ho visto questo requisito: esaminerò e risolverò le soluzioni intermedie.
Lynn,

Posso usare 20attraverso 7E, 09(tab), 0A(LF) e 0D(CR), giusto?
Lynn,

Sì. Modificato per consentire esplicitamente CR.
jimmy23013,

L' 1in cinque è stato un errore di battitura; Sono andato e l'ho rimosso. Ne riparerò tre ora.
Lynn,

2
I programmi uno e sei sono essenzialmente errori di sintassi che scaricano il codice sorgente su STDOUT e mostrano un errore su STDERR. Il consenso sembra essere che va bene (quindi complimenti) ma dovresti menzionarlo nella tua risposta.
Dennis,

13

CJam, 0.24075

programmi

BA1]100cf|
"two"
{hree}`W<7a.-
N)92+_9+_6+_2~+
S(84^I^U$F^X$G^Y$(
's'i'x

Grazie a @ user23013 per il suo suggerimento da usare 'per sei .

Output, lunghezza, punteggio, caratteri usati

one    10  0.03162          01       AB         ]    c f         |  
two     5  0.08944  "                                     o  tw     
three  13  0.02133        -.     7  <        W     `a e h  r    { } 
four   15  0.01721      )+    2 6  9      N       _                ~
five   18  0.01309   $ (       4  8    FGI SU XY ^                  
six     6  0.06804    '                                  i  s  x

Verifica tu stesso i risultati nell'interprete CJam .


6

Insonnia , 0,100688383057110116

Solo per iniziare. È molto improbabile che questo vincerà. Secondo l'attuale schema di punteggio, qualsiasi lingua in grado di stampare onein 5 o meno caratteri ha un enorme vantaggio.

uno (8 byte, 0,04419417382415922)

uuyp>~p~

due (9 byte, 0,037037037037037035)

oeoojdoLj

tre (21 byte, 0,010391328106475828)

*FFFFF
=
=z"
n=nnFzzB

quattro (23 byte, 0,009065844089438033)

)HGGGkGGGtGkGk<GGh$HGGt

4

Headsecks , 0.044623631135793776

Generato qui

Questo linguaggio è una semplice sostituzione BF in cui l'unica cosa che conta è il valore del carattere modulo 8.

Sfortunatamente, i programmi più lunghi danno un punteggio peggiore, nonostante siano in grado di arrivare a dodici ! (Potrei aumentare se potessi usare ASCII non stampabile e Unicode.)

uno

##%%%%%%%&##$%&#&%&%%%%%%%%%&

Due

--------+--.+++,-..+++.--------.

tre

5555555535563334566555555555555633333333336555555555555566

quattro

==;=====>;<=>>;;;;;;;;;>;;;;;;>===>

cinque

EECEEEEEFCDEFFCCCFCEFCCCCCCDEFFCCEFCCCDEFF

sei

KKMMMMMMMMMNKKLMNKNMMMMMMMMMMNMKMMMNKLMNN

Sette

SSUUUUUUUUUVSSTUVSVSSSSSUVSSSTUVVSUUUVSTUVUVSSUVSSSTUVVSSSSSSSSSV

otto

]][]]]]]^[\]^]^[[[[^]]^[^[[[[[[[[[[[[^

nove

cceeeeeeefccdeffeeeeefcccccfeeeeeeeeef

dieci

mmmmmmmmkmmnkkklmnnkkkkmnkkklmnnkkkkkkkkkn

undici

uusuuuuuvstuvuvsssssssvuuuuuuuvsuuuvstuvuvssuvssstuvvsssssssssv

dodici

}}}}}}}}{}}~{{{|}~~{{{~{}~{{{|}~~{{{{{{{~{{{{{{{{{{~{{}~{{{|}~~

È possibile utilizzare solo caratteri ASCII stampabili, schede e nuove righe.
jimmy23013,

@ user23013 Ho fatto il maggior numero possibile e sono arrivato a 12.
mbomb007,

2

/// , 0.19245008972987526

one

Questa risposta è ispirata dalla risposta di @ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳, in cui ha detto

In base all'attuale schema di punteggio, qualsiasi lingua in grado di stampare one in 5 o meno caratteri ha un enorme vantaggio.


OK, l'algoritmo di punteggio sembra avere una scappatoia. Ben fatto.
Dennis,

Bene, questa domanda è in sandbox così a lungo solo per ottenere un metodo di punteggio migliore. E ancora non ha funzionato bene ... Funziona anche in PHP, ASP, ecc.
jimmy23013,

0

SmileBASIC, .10062

"uno"

?"one

"Due"

PRINT MID$(@two,1,3)

La mia altra risposta è più interessante, ma questa ottiene un punteggio più alto.

Una strategia importante per ottenere la catena più lunga consiste nell'utilizzare PIÙ caratteri per risparmiare sui caratteri UNICI (ad esempio, usando x - -x nel programma 2 per salvare y + yper il programma 3)

Il problema con il sistema di punteggio è che segna 2 programmi brevi meglio di 3 programmi lunghi, quindi non c'è motivo di salvare i caratteri per i programmi successivi se allunga il programma corrente.

Inoltre, valorizza i singoli programmi brevi più alti di una dimensione TOTALE più piccola. Se cambio ?ePRINT nella mia risposta posso salvare 1 carattere, ma il mio punteggio è MEZZO.

Penso che sarebbe stato meglio basarlo solo sul numero di programmi, con la dimensione totale come tiebreaker.


3
Penso che entrambi i programmi condividano un o...
JayCe
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.