Conta i fiammiferi


20

La maggior parte delle persone qui ha familiarità con i display a sette segmenti, che vengono utilizzati anche nei puzzle matchstick. Di seguito sono elencate le cifre 0attraverso 9e le lettere aattraverso z, ad eccezione k,m,t,v,w, scritti in questo formato.

 _        _   _         _    _    _    _    _
| |   |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|   |  |_   _|    |   _|  |_|    |  |_|   _|

 _       _      _  _  _                        _   _      _               _
|_| |_  |   _| |_ |_ |   |_  |   | |   _   _  |_| |_|  _ |_      |_| |_|  _|
| | |_| |_ |_| |_ |  |_| | | | |_| |_ | | |_| |     | |   _| |_| | |   | |_

La sfida qui è semplice. Data una stringa di input, genera il numero di fiammiferi necessari per rappresentare quella stringa. Se la stringa contiene un carattere esterno alla rappresentazione sopra, ignoralo (contalo come 0).

Ad esempio, per l'input 53, 10sono necessari un totale di fiammiferi, 5per 5e 5per il 3, quindi l'output è 10.

Per l'input sono necessari helloun totale di 19fiammiferi h (4), e (5), l (3), l (3), o (4), quindi l'output è 19.

Per chiarezza, ecco i matchsticks richiesti per costruire ogni personaggio:

0 -> 6
1 -> 2
2 -> 5
3 -> 5
4 -> 4
5 -> 5
6 -> 6
7 -> 3
8 -> 7
9 -> 6
a -> 6
b -> 5
c -> 4
d -> 5
e -> 5
f -> 4
g -> 5
h -> 4
i -> 2
j -> 4
l -> 3
n -> 3
o -> 4
p -> 5
q -> 5
r -> 2
s -> 5
u -> 3
x -> 5
y -> 4
z -> 5

Ora per il colpo di scena, e ce ne sono due.

  • Il primo è che l'input è considerato sensibile al maiuscolo / minuscolo. Cioè, Ae aentrambi dovrebbero contare per i 6fiammiferi, anche se la rappresentazione visiva sembra maiuscola A.
  • Il tuo punteggio è il codice sorgente eseguito attraverso questo algoritmo, più la lunghezza del codice sorgente in byte, più basso è meglio. Ad esempio, se il tuo codice sorgente fosse abc123, il tuo punteggio sarebbe 6+5+4+2+5+5 = 27 + 6 = 33. Se il tuo codice sorgente fosse #&@()*, il tuo punteggio sarebbe 0 + 6 = 6.

Esempi di input / output

0    -> 6
53   -> 10
111  -> 6
112  -> 9
8888 -> 28
hello -> 19
PPCG  -> 19
Programming Puzzles & Code Golf -> 99
#&()mt!!~ -> 0
*DḌƤÆE%Ḅċ0 -> 16

Regole

  • Se applicabile, puoi supporre che l'input / output si adatti al tipo intero nativo della tua lingua.
  • L'input e l'output possono essere forniti con qualsiasi metodo conveniente .
  • È accettabile un programma completo o una funzione. Se una funzione, è possibile restituire l'output anziché stamparlo.
  • Sono vietate le scappatoie standard .

2
T è comunemente scritto come |_\n|_(minuscolo t)
12Me21

@ 12Me21 Avevo pensato di fare qualcosa del genere, ma non mi sembrava che fosse abbastanza vicino alla lettera, quindi l'ho lasciato fuori.
AdmBorkBork

E la tua lettera X (H)? (beh, non importa ora che ci sia una risposta.)
12

Per i caratteri all'esterno [0-9a-z], dovremmo contare 0 fiammiferi? Questo è quello che ho capito dal tuo punteggio è che il tuo codice sorgente scorre attraverso questo algoritmo , più la lunghezza del tuo codice sorgente in byte .
Erik the Outgolfer,

@EriktheOutgolfer Sì, è corretto.
AdmBorkBork,

Risposte:


8

Python 2 , 97 byte + 237 corrispondenze = 334

lambda w:sum(map(('1ir'*2+'7lnu'*3+'4cfhjoy'*4+'235bdegpqsxz'*5+'069a'*6+'8'*7).count,w.lower()))

Provalo online!

Funziona generando una stringa in cui ogni personaggio costruibile appare la stessa quantità di fiammiferi necessari per costruire quel personaggio


Un personaggio può essere salvato con +'069a8'*6+'8')invece di +'069a'*6+'8'*7).
xbarbie,

@xbarbie in effetti, ma ciò aumenterebbe il conteggio delle partite, portando a +3 punti
Rod

6

Perl 5 con -pF, 95 byte + 14, 109

eval~"Û£Ô„…ÊÏÉÎÍÍÊÌÊËËÊÊÉÉÈÌÇÈÆÉžÉʜ˛ʚʙ˘ʗ˖͕˓̑ÌËÊŽÊ͌ʊ̇ʆËÂÐÑИ‚ÒÁ„Ô“œ‚™¿¹"}{

Ciò equivale a:

$\+={z506122535445566738796a6b5c4d5e5f4g5h4i2j4l3n3o4p5q5r2s5u3x5y4=~/./g}->{+lc}for@F

ma usando l' ~operatore possiamo usare caratteri a byte alto ed evitare molti caratteri senza sacrificare veramente i byte.

Ancora abbastanza lontano dal punteggio di Ton, anche con assistenza!

Provalo online!

Questa soluzione contiene non stampabili, quindi ecco un dump esadecimale reversibile per verificare il conteggio dei byte:

00000000: 6576 616c 7e22 dba3 d4c2 8485 cacf c9ce  eval~"..........
00000010: cdcd cacc cacb cbca cac9 c9c8 ccc7 c8c6  ................
00000020: c99e c99d ca9c cb9b ca9a ca99 cb98 ca97  ................
00000030: cb96 cd95 cb93 cc91 cc90 cb8f ca8e ca8d  ................
00000040: cd8c ca8a cc87 ca86 cbc2 81d0 d1d0 9882  ................
00000050: d2c1 84d4 939c 8299 908d bfb9 227d 7b    ............"}{

Perché il }{? Rilascialo e l' -nopzione. Inoltre continui a dimenticare +lcinvece di lc():-)
Ton Hospel il

@TonHospel Goddammit! Ho anche controllato entrambi i nostri post e non riuscivo a ricordare su quale post lo avevo visto e +non mi viene subito in mente! Ho bisogno nsulla mia macchina e dimentico che posso lasciarlo cadere!
Dom Hastings,

Mi dispiace, ho sbagliato. Intendevo "rilasciare il }{e -p" (e sostituirlo con -nse il tuo perl ne ha ancora bisogno. Oggi non conta comunque)
Ton Hospel

@TonHospel Non avevo aggiornato il mio codice all'ultimo, oops ...
Dom Hastings

6

JavaScript (ES6), 198 (102 byte + 96 fiammiferi)

Risparmiato 5 punti grazie a @ l4m2

v=>[...v].map(w=>t+=('{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'[parseInt(w,36)]+v).charCodeAt()%9,t=+[])|t

Provalo online!

Come?

Usiamo il codice ASCII modulo 9 di caratteri che non aggiunge alcuna penalità per codificare il numero di fiammiferi.

 char. | code | modulo 9
-------+------+-----------------
   ~   |  126 |   0
   v   |  118 |   1  (not used)
   w   |  119 |   2
   ]   |   93 |   3
   ^   |   94 |   4
   _   |   95 |   5
   {   |  123 |   6
   |   |  124 |   7

Non dobbiamo preoccuparci del caso perché non parseInt()distingue tra maiuscole e minuscole.

Per i caratteri che non corrispondono a [0-9A-Za-z] , vengono parseInt()restituiti NaNe si ottiene la ricerca della stringa undefined. Una volta costretto a una stringa, "undefined".charCodeAt()restituisce il codice ASCII di "u", che è 117 . Convenientemente, 117 modulo 90 come previsto.


v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|t1 in meno
l4m2

5

Gelatina , 42 byte + 0 fiammiferi = 42 punti

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’×/ṚṚæ.ċЀØW$

Grazie a @JonathanAllan per -2 punti!

Provalo online!

Come funziona

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’

I letterali che iniziano con e finiscono con la divisione in , sostituiscono i caratteri rimanenti con i loro indici basati su 1 nella tabella codici di Jelly, quindi convertono dalla base biiettiva 250 in numero intero.

Questo particolare letterale codifica

[3096734725226860846495, 211369264881118657055472842435156679693648].

×/ riduce per moltiplicazione, cedendo

654554542403034552503005456545545424030345525030054562554563760

(La codifica diretta di questo numero intero risparmierebbe 6 byte, ma costa 28 matchstick.)

ṚṚinverte due volte; la prima chiamata promuove un numero intero nella sua matrice di cifre. Questo cede

[6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 0]

ċЀØW$conta ( ċ) le occorrenze di ciascun Ѐcarattere ( ) di "A ... Za ... z0 ... 9_" ( ØW) nella stringa di input.

Infine æ.prende il prodotto punto, moltiplicando il conteggio di ciascun personaggio per il costo corrispondente in fiammiferi, quindi prendendo la somma.


Utilizzare una fattorizzazione del numero grande per salvare un byte e decompressione base e modulo invece di Dsalvarne un altro. Provalo online
Jonathan Allan,

byte ... err point :)
Jonathan Allan,

1
E ancora uno con Ɗ. Grazie!
Dennis,

3

Perl 5 -p , codice 90 64 + 9 imbrago eval + 14 fiammiferi = 87

Sostituisci i codici esadecimali con la loro variante letterale da 1 byte ( non UTF-8 come TIO tenta di) per il punteggio richiesto

eval~"\xdb\xa3\xd4\xc2\x86\xd0\xcf\xd2\xc6\x9e\xd2\x85\xd0\xc9\xcd\xca\xca\xcb\xca\xc9\xcc\xc8\xc9\xc9\xca\xcb\xca\xca\xcb\xca\xcb\xcd\xcb\xcf\xcc\xcf\xcc\xcb\xca\xca\xcd\xca\xcf\xcc\xcf\xcf\xca\xcb\xca\xd0\x8d\x99\x90\x8d\xdf\x93\x9c\xc2\x81\xd0\xd1\xc0\xd0\x98"}{

Provalo online!

Codice All'interno della stringa integrata:

$\+=y/0-9a-z/625545637665455454240303455250300545/rfor lc=~/.?/g

3

Gelatina , 34 byte + 3 corrispondenze = 37

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ

Un collegamento monadico che accetta un elenco di caratteri e restituisce un numero intero.

Provalo online!

Come?

Funziona in modo simile alla risposta Jelly di Dennis, ma ha fatto uno sforzo sufficiente da ritenere che meriti un'altra risposta. La differenza principale è che inserisce in lettere minuscole l'input per un costo di tre corrispondenze ( Œlcontiene un l) che consente quindi di utilizzare un numero molto più piccolo per creare l'array di costi. Il trucco era trovare un modo per costruire quel numero senza corrispondenze rimanendo conciso.

ØWi rendimenti in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"modo che il conteggio delle occorrenze di input minuscole inizia sempre con 26 zeri. Possiamo invertire questo ed eseguire un prodotto punto con un array di lunghezza 37 anziché uno di lunghezza 63.

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ - Link: list of characters
⁽[ɱ                                - literal                                     23913
    “®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’               - literal         136861653160003879166772353166783
   ×                               - multiply  = 3272772712015172762515027281277281879
                    ‘              - increment = 3272772712015172762515027281277281880
                     Ḥ             - double    = 6545545424030345525030054562554563760
                      Ṛ            - reverse (implicit decimal list) -> [0,6,7,3,6,5,4,5,5,2,6,5,4,5,0,0,3,0,5,2,5,5,4,3,0,3,0,4,2,4,5,4,5,5,4,5,6]
                                   -                     (to align with: _ 9 8 7 6 5 4 3 2 1 0 z y x w v u t s r q p o n m l k j i h g f e d c b a)
                                 Ɗ - last four links as a monad:
                         Œl        -   lower-case (the input)
                              ØW   -   word -> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
                            Ѐ     -   map across right:
                           ċ       -     count (right character in lower-cased input)
                                Ṛ  -   reverse (to align with the values as shown above)
                       æ.          - dot-product

2

PHP 176 byte = 397 punti

<?$n="6255456376";$l="065455454240303455250300545";$a=strtolower($argv[1]);for($i=0;$i<strlen($a);$i++)$t+=(is_numeric($a[$i])?$n[$a[$i]]:$l[max((ord($a[$i])-96),0)]);echo$t;

Provalo online!


1
Benvenuti in PPCG!
AdmBorkBork,


1

Python 3 , 138 + 265 = 403 byte

k='0123456789abcdefghijlnopqrsuxyz'
m=lambda t:sum([ord(''[k.index(v)])if v in k else 0for v in t.lower()])

Provalo online!


1

Rubino , 125 byte + 87 fiammiferi = 212

->m{v=->w,k{w.scan(/./).map &k};v[m,->t{v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&",->k{k.ord%11}][t.to_i 36].to_i+(t==?0?6:0)}].sum}

Provalo online!

Fortemente ispirato dalla risposta Javascript di Arnauld .

Normalmente il costo di dichiarare un lambda da usare solo due volte non ne vale la pena, ma il peso del matchstick di " scanap" è .scan(/./).mapcambiato. Questa è stata una sfida divertente!

->m{
  v=->w,k{w.scan(/./).map &k};                # v is a lambda taking a string and a block
  v[m,->t{                                    # Transform each char t of the input:
    v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&", # Transform each char of this magic string
      ->k{k.ord%11}                           #  into a matchstick count ([0,2,5,5,4,5...])
    ][t.to_i 36]+                             # Parse t as a base 36 index into the counts
    (t==?0?6:0)                               # If t was "0", add 6 matchsticks
  }].sum                                      # Add the counts for all characters
}

1

MATL , punteggio 166 156

Lunghezza del codice 41 + output per il codice utilizzato come input 115.

'%p#21jgyDT7o?pe}['TIW:qZajk4Y22Y2h&mXz)s

Provalo online!


1

R, 112 byte + 319 corrispondenze = 431 punti

sum(strtoi(el(strsplit(chartr("0-9a-z","625545637665455454240303455250300545",tolower(scan(,""))),""))),na.rm=T)

Provalo online!

Complimenti a Giuseppe che ha escogitato questo miglioramento.

Vecchia versione, 143 byte + 454 partite = 597 punti

b=el(strsplit(chartr("0123456789abcdefghijlnopqrsuxyz","6255456376654554542433455253545",tolower(readline())),""))
sum(as.numeric(b[b%in%0:9]))

Per far el()funzionare la funzione su TIO, è necessario utilizzare library(methods).

Gosh Dang esso, è R verbose!


TIO, per qualsiasi motivo, non carica automaticamente il methodspacchetto, ma poiché è un basepacchetto, l'ho sempre inserito nell'intestazione e non lo conto per il conteggio dei byte. readlineinoltre non funzionerà su TIO poiché non è una sessione interattiva. Questo è sicuramente golfabile, però.
Giuseppe,


^ necessita però di virgolette intorno all'input contenente spazi.
Giuseppe,

Inoltre, ho appena avviato una chat room per il golf R! ! Ultimamente ho visto molte risposte in R da molti utenti diversi, il che è abbastanza incoraggiante :)
Giuseppe

@Giuseppe Penso che dovresti pubblicare la tua risposta separatamente. È diverso in linea di principio e molto superiore al mio.
Andreï Kostyrka,

1

Perl 6 , 87 byte + 26 fiammiferi = 113

{+[+] (~'򘮉򛫡񯌞𺪯񯉒񉘁'.ords~~m:g/\w/)[m:g/<[/..{]-[\W_]>/>>.&{:٣٦(~$_)}]}

Provalo online!

Utilizza alcuni caratteri Unicode non ASCII. La tabella di ricerca è codificata in una stringa Unicode:

say '򘮉򛫡񯌞𺪯񯉒񉘁'.ords;
# (625545 637665 455454 240303 455250 300545)

I caratteri vengono convertiti in indici con conversione base-36 usando numeri arabi-Indici:

:٣٦('z'); # is equivalent to
:36('z');

1

sed, 367 (byte del codice sorgente) + 532 (quantità di fiammiferi per il codice sorgente) = 899

s/[^0-9a-jln-suxyz]//Ig;/^$/{s/.*/0/;b};s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/;:1;s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I;/ ;/!b1;s/;.+//;s/^/,;/;:2;s/(;[^%]*)(%+)/\2\1/;:3;s/,%{10}/%,/;s/^%/,&/;/%{10}/b3;/;.*%/b2;:4;s/,[;,]/,0,/;/,[;,]/b4;s/%{9}/9/g;s/%{8}/8/g;s/%{7}/7/g;s/%{6}/6/g;s/%{5}/5/g;s/%%%%/4/g;s/%%%/3/g;s/%%/2/g;s/%/1/g;s/[^0-9]//g

Provalo online

Versione multilinea:

s/[^0-9a-jln-suxyz]//Ig
/^$/{s/.*/0/;b}
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
s/;.+//
s/^/,;/
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
:4
s/,[;,]/,0,/
/,[;,]/b4
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
s/[^0-9]//g

Spiegazione:

Lo script sopra legge l'input standard riga per riga (nello spazio del modello - il solito "modo sed") e, per ogni riga, genera la quantità di fiammiferi necessari per rappresentare tutti i caratteri rappresentabili del fiammifero in quella linea. I calcoli per ciascuna riga di input avvengono come segue:


s/[^0-9a-jln-suxyz]//Ig

Innanzitutto, rimuoviamo tutti i personaggi per i quali non abbiamo una corrispondente rappresentazione del fiammifero (come indicato nella domanda) dallo spazio del motivo. Ovvero, rimuoviamo ogni carattere che non sia un numero compreso tra "0" e "9", una lettera da "a" a "j", "n" a "s", "l", "u", "x", "y" o "z". Le lettere maiuscole e minuscole sono trattate allo stesso modo.

/^$/{s/.*/0/;b}

Se finiamo con uno spazio modello vuoto, stampiamo 0 (seguito automaticamente da una nuova riga, come sed fa sempre a meno che non ci passi una bandiera speciale), saltiamo tutte le linee posteriori dello script e procediamo al successivo "ciclo sed" ( cioè, leggere la riga successiva di input e ripetere nuovamente l'elaborazione dal primo comando fino a quando non ci sono più righe di input da elaborare).

s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/

Altrimenti, se lo spazio del modello non è vuoto, ora lo dividiamo in due "spazi secondari" separati da un punto e virgola: prima arriva lo spazio di input , che inizialmente è formato da tutti i caratteri che non sono stati rimossi dallo spazio del modello dopo il esecuzione della linea 1; poi arriva il punto e virgola, e successivamente lo spazio della mappa .

Lo spazio della mappa ci dice quanti fiammiferi accanto a 1 sono necessari per rappresentare ciascun carattere alfanumerico rilevante. Se vogliamo sapere quanti fiammiferi sono necessari per rappresentare qualsiasi carattere alfanumerico nello spazio della mappa, cerchiamo la prima sequenza di% contigue sulla sinistra di quel carattere e la risposta sarà il numero di% in quella sequenza più 1. Quindi, ad esempio, il numero di fiammiferi necessari per rappresentare una "b" è 4 + 1 = 5; per rappresentare un "4", 3 + 1 = 4, per rappresentare un "y", 3 + 1 = 4; e così via.

:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1

Questo è un ciclo. Ora sostituiremo ogni carattere nello spazio di input con la sequenza (completa) di% 'il cui numero indica la quantità necessaria di fiammiferi per rappresentare quel carattere, e seguiremo quella sequenza con un carattere di spazio bianco (di nuovo, le lettere maiuscole e minuscole sono dato lo stesso trattamento). Il criterio per determinare se il ciclo deve terminare è verificare se c'è un carattere di spazio bianco nell'immediata sinistra del punto e virgola nello spazio modello: se tale condizione è valida, terminiamo il ciclo e proseguiamo con la riga successiva.

s/;.+//
s/^/,;/

Queste due righe rimuovono il punto e virgola e tutto il resto dallo spazio del motivo e quindi inseriscono una virgola e un punto e virgola all'inizio dello spazio del motivo. Ora abbiamo di nuovo lo spazio del motivo diviso in due nuovi spazi secondari: lo spazio del risultato analogico prima del punto e virgola e lo spazio di input analogico dopo di esso.

Lo spazio di input analogico è proprio quello che in precedenza abbiamo chiamato "spazio di input", ma in una forma diversa: ora contiene sequenze di% 's separate da spazio bianco. Il numero totale di tali% nello spazio di input analogico è lo stesso numero di fiammiferi necessari per rappresentare la stringa di caratteri di input iniziale, ovvero quel numero è il risultato. Ma dobbiamo stampare quel risultato in notazione decimale, non come una sequenza di segni di percentuale. Lo scopo dello spazio del risultato analogico è di contenere una rappresentazione analogica di ogni cifra del risultato mentre calcoliamo quel risultato sommando una per una ogni sequenza contigua di% nello spazio di input analogico. Il ciclo successivo esegue quella somma:

:2
s/(;[^%]*)(%+)/\2\1/
    :3
    s/,%{10}/%,/
    s/^%/,&/
    /%{10}/b3
/;.*%/b2
  1. Innanzitutto, dopo l'etichetta 2 , spostiamo la successiva sequenza contigua di% 's dopo il punto e virgola dallo spazio di input analogico nell'immediata sinistra del punto e virgola, nello spazio del risultato analogico;

  2. Successivamente, entriamo in un sotto-ciclo (etichetta 3 ) che esegue i seguenti calcoli:

    • Se esiste una sequenza contigua di dieci% dopo una virgola nello spazio dei risultati analogici, rimuoviamo tali% e inseriamo immediatamente una singola% a sinistra della virgola. Per dirla semplicemente, questo indica che una delle posizioni decimali nel risultato ha acquisito più di 9 unità, quindi prendiamo 10 unità di distanza da quella posizione decimale e aggiungiamo 1 unità alla successiva posizione decimale più grande;

    • Se "%" è il primo carattere nello spazio del motivo, inseriamo una nuova virgola immediatamente prima di essa. Ciò indica che la somma ha raggiunto un valore la cui rappresentazione decimale ha una posizione decimale in più a sinistra rispetto al valore precedente;

    • Se esiste ancora una sequenza contigua di dieci% nello spazio dei risultati analogici, torniamo all'etichetta 3 e ripetiamo questo processo. Altrimenti, usciamo da questo sotto-ciclo e passiamo alla riga successiva.

  3. Ora, se c'è ancora un "%" nello spazio di input analogico (cioè dopo il punto e virgola), significa che c'è ancora un certo numero di matchstick da aggiungere alla somma totale - quindi torniamo all'etichetta 2 .

Una volta che la somma è completa, entriamo nel ciclo finale del codice:

:4
s/,[;,]/,0,/
/,[;,]/b4

Qui, controlliamo ogni coppia di caratteri formata da una virgola a sinistra e un punto e virgola o una virgola a destra. Sostituiamo tutte queste coppie di caratteri con uno "0" all'interno di due virgole.

s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g

Il codice sopra riportato è abbastanza semplice: sostituiamo ogni sequenza contigua di% 's nello spazio del risultato analogico con un carattere decimale che corrisponde al numero di%' s in ciascuna sequenza particolare.

s/[^0-9]//g

Infine, rimuoviamo ogni carattere non numerico dallo spazio del motivo e ciò che rimane è il risultato finale nella notazione decimale familiare. Tale valore viene stampato sull'output standard e inizia il successivo ciclo sed, se ci sono altre linee di input da elaborare.


1

C (gcc) , 134 byte + 38 fiammiferi = 172

v(t,w)char*t;{t=(w=*t++)?v(t)+(isalnum(w|=w>'@'&w<'['?' ':!w)?")%(('()&*))('(('('%'#&#&'((%(#&##('("[w-=w>'`'?'W':'_'-'/']-'#':!w):w;}

Provalo online!



1

Punteggio Java 10, 452 432 416 404 (145 byte + 259 partite)

k->{int m=0,t;for(var w:k)for(t=m-m;t<'';)m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++].contains((char)(w|32)+"")?-~t:t-t;return m;}

Spiegazione:

Provalo online.

k->{                   // Method with character-array parameter and int return-type
  int m=0,             //  Result-integer, starting at 0
      t;               //  Index-integer
  for(var w:k)         //  Loop over the input String-array
    for(t=m-m;t<'';)   //   Inner loop over the parts array with index [0,6)
      m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++]
                       //     If the current part ordered by amount of matches (2-8)
         .contains((char)(w|32)+"")?
                       //     contains the current (lowercase) letter
          -~t          //      Increase the result by the index + 2
         :             //     Else:
          t-t;         //      The result remains the same by adding 0
  return m;}           //  Return the result
  • Nomi delle variabili $ραετ vengono utilizzati al posto delle lettere. EDIT: kmtvwora vengono utilizzati i nomi delle variabili , poiché non possono essere formati da corrispondenze in base alla descrizione della sfida.
  • ''(non stampabile) viene utilizzato al posto di 6.
  • m-m e t-t sono usati al posto di 0.
  • (char)(w|32)+""con input di array di caratteri utilizzato anziché w.toLowerCase()con input di array di stringhe.

0

AutoHotkey , 148 byte + 345 fiammiferi = 493

Questo è stato un po 'una sfida da abbreviare.

n:=["1ir","7lnu","4cfhjoy","235bdegpqsxz","09a5",7+1]
Loop Parse,i
{r:=A_LoopField
Loop % n.Length()
{l:=A_Index
if InStr(n[l],r)
u+=l+1
}}
send % u

0

Python 3 , 123 byte + 65 corrispondenze = 188

lambda w,m='',t='',k=ord:sum(~-k((m+t+m+''+t)[k(v)%77])*('/'<v<'{')for v in w)

Una funzione senza nome che accetta una stringa e restituisce un numero intero.

Contiene molti caratteri non stampabili (in particolare byte da uno a otto).

Provalo online!


0

Carbone , 48 byte + 3 = 51

IΣEθ⎇№α↥ιI§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι∧№IX²φιI§”)⧴u↑$◨”Iι

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

IΣEθ

Passa sopra i caratteri dell'input, calcolando il numero di fiammiferi di ciascuno, quindi somma il risultato, converti in stringa e stampa implicitamente.

⎇№α↥ι

Se è una lettera ...

I§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι

Cerca il numero di fiammiferi nella stringa compressa 65455454240303455250300545.

∧№IX²φι

Altrimenti se appare nel valore di 2 ** 1000...

I§”)⧴u↑$◨”Iι

Cerca il numero di fiammiferi nella stringa compressa 6255456376.


0

PHP, 98 + 253 = 351

for(;$k=ord($argn[$v++]);)$m+=$k>64?_65455454240303455250300545[$k&31]:_6255456376[$k-47];print$m;

Esegui come pipe -nro provalo online .

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.