Oreo? No ... Lecca-lecca, forse?


46

Dal 2009, i nomi dei codici delle versioni di Android sono a tema dolciario. Android 1.5 è Cupcake, Android 1.6 è Ciambella, Android 2.0 è Eclair, ecc. In effetti, i nomi delle versioni sono alfabetici!

C -> Cupcake
D -> Donut
E -> Eclair
F -> Froyo
G -> Gingerbread
H -> Honeycomb
I -> Ice Cream Sandwich
J -> Jellybean
K -> Kitkat
L -> Lollipop
M -> Marshmallow
N -> Nougat
O -> Oreo

In ordine:

Cupcake, Donut, Eclair, Froyo, Gingerbread, Honeycomb, Ice Cream Sandwich, Jellybean, Kitkat, Lollipop, Marshmallow, Nougat, Oreo

Sfida

Scrivi un programma / funzione che prende una lettera da Ca Oe genera il suo rispettivo nome in codice della versione di Android.

specificazioni

  • Si applicano le regole I / O standard .
  • Sono vietate le scappatoie standard .
  • Puoi scegliere di supportare input in minuscolo o maiuscolo o anche entrambi.
  • L'output può essere in maiuscolo ( Cupcake) o in minuscolo ( eclair). Ice cream sandwichpuò essere in maiuscolo come preferisci. (Non mi aspettavo che causasse così tanta confusione ...)
  • Questa sfida non riguarda la ricerca dell'approccio più breve in tutte le lingue, ma piuttosto la ricerca dell'approccio più breve in ciascuna lingua .
  • Il tuo codice verrà assegnato un punteggio in byte , di solito nella codifica UTF-8, se non diversamente specificato.
  • Le funzioni integrate (Mathematica potrebbe avere una: P) che calcolano questa sequenza sono consentite ma è incoraggiata l'inclusione di una soluzione che non si basa su un built-in.
  • Le spiegazioni, anche per le lingue "pratiche", sono incoraggiate .

Casi test

Sono maiuscole e maiuscole.

Input   Output

F       Froyo
I       Ice Cream Sandwich
J       Jellybean
N       Nougat
G       Gingerbread
L       Lollipop

In alcuni formati migliori:

F, I, J, N, G, L
f, i, j, n, g, l

F I J N G L
f i j n g l

8
@ Mr.Xcoder Stai dicendo che non è un duplicato perché è più facile? Questo è un duplicato proprio perché è una versione più semplice di una domanda esistente. Abbiamo già fatto questo tipo di domanda a morte e questo non fornisce assolutamente nulla di nuovo o interessante al genere.
Mago del grano

2
@WheatWizard Penso che il primo sia un duplicato migliore, poiché il secondo è una fonte limitata.
Mr. Xcoder,

9
Potrebbe essere un inganno di qualche altra sfida. Ma aiutarmi a riconoscere il mio mostro sta chiedendo stringa per la conversione simbolo (che porta a soluzioni hash-based). Questo sta chiedendo il simbolo per la stringa.
Arnauld,


5
@MagicOctopusUrn Sì, l'ho visto anche io. Sfortunatamente, non include MARSHMALLOWe in seguito.
mbomb007,

Risposte:


14

Carbone , 73 byte

θ§⪪”%↖↙1¬¢/vy⁵⸿ψJPP±≔S×5Jρνξ–Gu ◧;Yx³F▶ψ;εB↥:P¹N﹪J$α✂χ✳⦄⟲*±¶Sp:ς↘V◧◧”x℅θ

Provalo online! L'I / O è in minuscolo. Basato su questa versione dettagliata . Spiegazione:

                Implicitly print:
θ               Input character
                Implicitly print:
   ”...”        Long compressed string "oneycombx...xingerbread"
  ⪪            Split on
        x       The string "x"
 §              Circularly indexed by
          ℅     Character code of
           θ    Input character

4
Io cosa? Come.
Magic Octopus Urn il

@MagicOctopusUrn Mi dispiace, ero troppo occupato per aggiungere una spiegazione al momento. Spero che questo sia sufficiente.
Neil,

1
Oh wow, non sapevo che facesse stringhe compresse!
Magic Octopus Urn il

Come il carbone batte SOGL qui è semplicemente incredibile.
Erik the Outgolfer,

Jelly lo sta ancora battendo: gioia: codegolf.stackexchange.com/a/140092/73675
Hugo H

14

Utilità Bash + Core 131 128 122 117 byte.

Lo script è codificato come Base64 perché contiene caratteri speciali (strani).

Accetta la lettera del nome in codice Android solo in minuscolo come primo parametro posizionale. Restituisce il nome in codice completo anche in minuscolo .

CiPBUeICicG5tJ8W5a0Pc/hYuw7hkNMSIYkAPjARkdgFrdbh3NJgTmB4gRPiiQDJAaOyBH4ki14C
QDeKRNQJ8IJYER411DAnx0SO4CAKYmFzZTMyICQwfHRyICdBLVo0NwonICdhLXoKICd8Z3JlcCBe
JDEK

spiegazione:

#�Q��������s�X����!�>0�������`N`x������~$�^@7�D�    ��X5�0'�D�� 
base32 $0|tr 'A-Z47
' 'a-z
 '|grep ^$1
  • Le prime due righe sono il BLOB binario con i dati (vedere la fine della risposta per ulteriori informazioni). La prima riga è vuota, per evitare problemi con Bash, poiché altrimenti potrebbe pensare che venga alimentato con un file binario.
  • base32 $0 codifica il contenuto dello script con Base32, con il ritorno a capo predefinito di 76 caratteri.
  • tr 'A-Z47\n' 'a-z\n '(nota che il carattere \nè scritto come una nuova riga letterale) renderà minuscola l'input e sostituirà rispettivamente 4 , 7 e \nby \n, space e space .
  • grep ^$1 produrrà le righe corrispondenti alla stringa fornita come primo argomento allo script.

Dati binari

Questo flusso di ottetti è stato creato in modo da non contenere newline e quando viene decodificato con Base32 secondo RFC 4648, la stringa risultante è l'elenco dei nomi in codice Android (usando 4 come delimitatore di elementi e 7 per sostituire il carattere dello spazio ). Tra le sue peculiarità, inizia con un carattere di nuova riga e un hash ( #), quindi si comporta come un commento e, quindi, non viene eseguito dall'interprete.

Inoltre, il ritorno a capo predefinito di 76 caratteri di questa implementazione Base32 mi ha aiutato un byte, poiché ho riordinato gli elementi per utilizzare l'interruzione di linea come uno degli spazi sandwich del gelato .


Inoltre, e andando un po 'off-topic, penso che Google non dovrebbe in pubblicizzare direttamente i prodotti commerciali nei nomi in codice Android.


2
Bene, questa è una risposta davvero interessante! Benvenuti nel sito :)
DJMcMayhem


1
Questa versione è difettosa, almeno sul mio sistema (bash 4.4.12, coreutils 8.27). Per f, produce due linee: una con froyoe un'altra con misterioso fgeyltmuzteibno.
MarSoft,

1
@MarSoft: grazie! Fisso. Peccato che ora ho bisogno di un byte in più.
Helio,

@MarSoft: Risolto! Ora con gli stessi byte!
Helio,

11

Python 3 , 139 byte

lambda x:x+'upcake,onut,clair,royo,ingerbread,oneycomb,ce cream sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo'.split(",")[ord(x)-67]

Provalo online!


11

Utilità Bash + Core (Grep): 132 130 byte

Semplice come potrebbe essere

grep ^$1<<<'Cupcake
Donut
Eclair
Froyo
Gingerbread
Honeycomb
Ice Cream Sandwich
Jellybean
Kitkat
Lollipop
Marshmallow
Nougat
Oreo'

1
L'input via ddè intelligente, ma potresti salvarlo come script e utilizzarlo $1invece?
Dom Hastings,

11

Gelatina , 57 byte

Oị“¡ȥọ⁴ḷæĿɱ}#n#i®ÞSỊ3ƙɼıjṁ)-⁵g7ḥjC?4ƘẠʂ+ḋ¤⁺jṣð£?v»Ḳ¤F⁾! y

Provalo online!

-5 grazie a Jonathan Allan .


Salvare quattro byte utilizzando un segnaposto per gli spazi in "sandwich gelato" e utilizzando spazi per la divisione, ad esempio:Oị“¡ḟ¤Y7bh%XO€ḥıṣẎṄṢ°ḊḞİỌĿż0Y⁷ẠỵƈƭV>tÐNY_LɠðṅẒọX?v»Ḳ¤F⁾! y
Jonathan Allan

... in realtà crea quei cinque byte (avevo usato "tana" quando "clair" è nel dizionario):Oị“¡ȥọ⁴ḷæĿɱ}#n#i®ÞSỊ3ƙɼıjṁ)-⁵g7ḥjC?4ƘẠʂ+ḋ¤⁺jṣð£?v»Ḳ¤F⁾! y
Jonathan Allan

@JonathanAllan grazie ... aspetta perché dovrei aver bisogno del F? oh è perché ricevo input come stringa non char
Erik the Outgolfer

8

C ++, 206 201 198 byte

Grazie a @sergiol per aver contribuito a salvare 3 byte!

#import<cstdio>
void f(int l){char*w[]={"upcake","onut","clair","royo","ingerbread","oneycomb","ce Cream Sandwich","ellybean","itkat","ollipop","arshmallow","ougat","reo"};printf("%c%s",l,w[l-67]);}

Provalo online!

C, 173 byte

f(l){char*w[]={"upcake","onut","clair","royo","ingerbread","oneycomb","ce Cream Sandwich","ellybean","itkat","ollipop","arshmallow","ougat","reo"};printf("%c%s",l,w[l-67]);}

Bene, è iniziato come C ++, ma ora è anche C valido e alcuni byte possono essere salvati compilandolo come C.

Provalo online!


1
Il mio tentativo fallito di accorciarlo rimuovendo la prima lettera di ogni voce: tio.run/…
sergiol

@sergiol Grazie! Sono stato in grado di salvare tre byte con quello dopo un po 'di golf.
Steadybox,

4
#importin c ++? cosa mi sto perdendo qui?
Abhinav Gauniyal,

@AbhinavGauniyal: IIRC Penso che qualche avvertimento di compilazione mi abbia consigliato di aggiungere #import <cstdio>perché la mancanza di #include <stdio.h>; o forse sbaglio
sergiol

@AbhinavGauniyal Non è C ++ standard, ma almeno GCC e MSVC ce l'hanno.
Steadybox,

7

JavaScript (ES6), 137 136 byte

Salvato 1 byte grazie a Neil

c=>'CupcakeDonutEclairFroyoGingerbreadHoneycombIce Cream SandwichJellybeanKitkatLollipopMarshmallowNougatOreo'.match(c+'([a-z]| .)+')[0]

dimostrazione


non puoi includere lo spazio nella gamma di caratteri, probabilmente con \ s? non ho usato molto JS Regex
michi7x7 il

1
@ michi7x7 Ha bisogno che la corrispondenza si fermi con una lettera maiuscola, tranne nel caso di Ice Cream Sandwich, sebbene ([a-z]| .)+(salvando 1 byte) funzionerebbe anche con Ice Cream Sandwich nel mezzo della stringa (inizierebbe a fallire quando i nomi in codice raggiungessero S anche se).
Neil,

@Neil bene, [a-z\s]+non corrisponde a lettere maiuscole. Non so se riesci a farlo in JS
michi7x7,

@ michi7x7 Quindi come funzionerebbe con Ice Cream Sandwich?
Neil,

2
Usa Ice cream sandwich, come nel caso del test (anche se questo non è il caso del titolo)
michi7x7,

5

Japt , 81 79 byte

Contiene alcuni personaggi che non verranno visualizzati qui.

U+`Æ+tfÆ÷¯kef©fclairfê $ßdfey¬mbf­ ×Äm ÑØrfÁKÞ fkfo¥ipopfÂâÚaow`qf gUc

Provalo

  • 2 byte salvati grazie a Oliver .

Spiegazione

Immissione implicita di una stringa di caratteri maiuscoli U.

Una stringa compressa (tutto tra i backtick) dei nomi, separata con una fe senza la loro prima lettera viene divisa ( q) in un array su f.

All'interno di tale array otteniamo l'elemento nell'indice ( g) del Ucodice carattere s. (Sì, avvolgimento indice!)

Aggiungiamo a Ue in modo implicito l'output della stringa risultante.


1
Bello. Puoi salvare un paio di byte se dividif invece se newline
Oliver

@Oliver: Oh, bello, grazie :) Sul mio telefono, camminando per la strada, quindi sicuramente non ce l'avrei fatta per un po '(se non del tutto).
Shaggy,

5

Excel VBA, 137 134 132 byte

Funzione finestra immediata anonima VBE che riceve l'input come tipo previsto Variant\Stringe la lunghezza 1in possesso di un capitale lettera dalla cella [A1]e uscite alla funzione finestra immediata VBE

?[A1]Split("upcake onut clair royo ingerbread oneycomb ce cream sandwich ellybean itkat ollipop arshmallow ougat reo")(Asc([A1])-67)

-5 byte per modificare gli spazi ce cream sandwichda (char 32) a  (char 160) `` (char 127) e rimuovere il delimitatore virgola nella Splitfunzione


4

SOGL V0.12 , 81 byte

]&ŗ√‰fō¶č▓'▼$»3↕█γb└a}⅟∑─b¹¦Æ:↕┘∞½Σ#gī±⅔≡≥\3Qy-7todΥ7ā‼D←εPρρ:¬c‰ƨ}f沑θ╔@ŗz,WHHw

Provalo qui!

Spiegazione:

...‘            push "cupcake donut eclair froyo gingerbread honeycomb ice_cream_sandwich jellybean kitkat lollipop marshmallow nougat oreo"
    θ           split on spaces
     ╔@ŗ        replace underscores with spaces
        z,W     find the inputs index in the lowercase alphabet
           HH   decrease by 2
             w  get that item from the array

Ora c'è una versione più corta di 80 byte , ma ho aggiunto i built-in + 2 / -2 a causa di questa sfida: p

La stringa compressa è divisa come "cup","cake"," donut eclair fro","yo gingerbread honeycomb ice","_","cream","_","sandwich jelly","bean kit","kat loll","i","pop marsh","mallow"," nougat oreo"per il massimo utilizzo delle parole inglesi (molte non erano nel dizionario SOGL), in questo momento non riesco a trovare alcun miglioramento.


4

> <> , 181 byte

!vi:od5*-0$6a*@p!
v<
 v"upcake"
 v"onut"
 v"clair"
 v"royo"
 v"ingerbread"
 v"oneycomb"
 v"ce Cream Sandwich"
 v"ellybean"
 v"itkat"
 v"ollipop"
 v"arshmallow"
 v"ougat"
 v"reo"
o<>

Provalo online!

Questo funziona modificando automaticamente il programma per posizionare un <davanti al nome corretto da stampare, la cui posizione è determinata dal valore della lettera immessa.


3

Dyalog APL, 158 143 131 byte

1 byte salvato grazie a @ Zacharý

12 byte salvati grazie a @Gil

{⍵,(⎕A⍳⍵)⊃','(1↓¨=⊂⊢)',,,upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo'}

Provalo online!

Come?

',,,upcake...' - elenco di parole

','(1↓¨=⊂⊢) - diviso per ','

(⎕A⍳⍵)⊃ - prendere dal posto dell'argomento nell'alfabeto

⍵, - e aggiungere alla lettera


Perché hai descritto come appiattire?
Zacharý,

Inoltre, {⍵,∊⍬⍬'upcake' 'onut' 'clair' 'royo' 'ingerbread' 'oneycomb' 'ce cream sandwich' 'ellybean' 'itkat' 'ollipop' 'arshmallow' 'ougat' 'reo'[⎕A⍳⍵]}funziona con 1 byte in meno!
Zacharý,

@ Zacharý perché è ... "mix". Ben fatto! perché ∊ e non ↑?
Uriel,

Perché è anche appiattito, ma in realtà appiattisce e non "mescola". ↑(1 2)(3 4)NON è piatto, mentre lo ∊(1 2)(3 4)è.
Zacharý,

@ Zacharý OP ha cambiato questo ... ANCORA.
Uriel,

3

EXCEL, 154 byte

=A1&CHOOSE(CODE(A1)-66,"upcake","onut","clair","royo","ingerbread","oneycomb","ce Cream Sandwich","ellybean","itkat","ollipop","arshmallow","ougat","reo")

Non ho mai pensato di usare Excel in questo modo. Perfetto. Ora fallo con WORD
tisaconundrum il

@tisaconundrum - non parliamo di quella cosa maledetta; Anche VBA non è riuscito a salvarlo
Taylor Scott,

3

C (gcc) , 195 192 190 byte

-2 byte grazie a @Quentin

*V[]={"upcake","onut","clair","royo","ingerbread","oneycomb","ce Cream Sandwich","ellybean","itkat","ollipop","arshmallow","ougat","reo"};main(c,v)char**v;{printf("%c%s",c,V[(c=*v[1])-67]);}

Provalo online!


3

Tcl , 158 byte

proc A s {puts $s[lindex {upcake onut clair royo ingerbread oneycomb "ce Cream Sandwich" ellybean itkat ollipop arshmallow ougat reo} [expr [scan $s %c]-67]]}

Provalo online!


2
Tcl! Non vedi troppe soluzioni Tcl qui. È un peccato.
Silvio Mayolo,

2

Haskell, 145 byte

f c=takeWhile(/=succ c)$dropWhile(/=c)"CupcakeDonutEclairFroyoGingerbreadHoneycombIce Cream SandwichJellybeanKitkatLollipopMarshmallowNougatOreo"

3
takeWhilepuò essere fst.spane di dropWhileconseguenza snd.span.
Laikoni,

2

Gaia , 110 byte

:c“reo“upcake“onut“clair“royo“ingerbread“oneycomb“ce Cream Sandwich“ellybean“itkat“ollipop“arshmallow“ougat”=+

Provalo online!

Spiegazione

:          Push two copies of the input
 c         Get the codepoint of the top one
  “...”    Push the list of version names without their first letters
       =   Modularly index the code point into the list
        +  Append to the input

2

Rubino, 127 byte

->c{c+%w[upcake onut clair royo ingerbread oneycomb ce\ Cream\ Sandwich ellybean itkat ollipop arshmallow ougat reo][c.ord-67]}

Accetta input maiuscoli. Provalo online!


2

Pyth , 117 116 byte

Port of my Python answer .

+Q@c"upcake,onut,clair,royo,ingerbread,oneycomb,ce cream sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"\,a67C

Provalo qui! oppure Dai un'occhiata alla Test Suite

Pyth , 99 byte (70 caratteri)

-15 byte grazie a @insert_name_here !

+Q@c." y|çEC#nZÙ¦Y;åê½9{ü/ãѪ#¤
ØìjX\"¦Hó¤Ê#§T£®úåâ«B'3£zÞz~Уë"\,a67C

Provalo qui!


È possibile salvare 15 byte utilizzando stringhe compresse (anche se la risposta dovrebbe contenere caratteri non stampabili).
insert_name_here il

@insert_name_here Grazie.
Mr. Xcoder,

2

Java (OpenJDK 8) , 128 byte

c->c+"upcake#onut#clair#royo#ingerbread#oneycomb#ce Cream Sandwich#ellybean#itkat#ollipop#arshmallow#ougat#reo".split("#")[c-67]

Provalo online!


Utilizzando regex, 149 byte

s->"CupcakeDonutEclairFroyoGingerbreadHoneycombIce cream sandwichJellybeanKitkatLollipopMarshmallowNougatOreo".replaceAll(".*?("+s+"[a-z ]+).*","$1")

Provalo online!

  • 4 byte salvati sulla soluzione regex grazie a Kevin Cruijssen!

1
.splitStavo per pubblicare la stessa risposta (solo con delimitatore diverso) quando ho letto la sfida e non sono riuscito a trovare una risposta Java (fino a quando non sono andato alla seconda pagina di risposte), quindi +1. Per quanto riguarda la risposta regex, ([a-z]| .)+può essere [a-z ]+, dal momento che è consentito produrre "Sandwich di gelato" (" L'output può essere in maiuscolo (Cupcake) o completamente in minuscolo (eclair). Il sandwich di gelato può essere in maiuscolo a piacere. (Non mi aspettavo che causasse così tanta confusione ...) ")
Kevin Cruijssen,

2

Cubicamente , 1047 852 830 byte

Le funzioni aiutano sicuramente a golf programmi di grandi dimensioni ...

⇒+552
⇒+551
⇒+553
⇒+55
⇒/1+52
⇒/1+53
~@7+4f5=?{:5+53@:4/1f1@:5+51@:5+2/1f4@:5+3/1f2@:2/1f2@}
+5f5=?{:3/1f1@:2/1f1@:5+53@:5+3/1f1@}
+51f5=?{:5+51@+1@:5+2/1f4@:5+1/1+551@+1@}
+52f5=?{:5+1/1f1@:3/1f1@:4/1f3@:3/1f1@}
+53f5=?{:5+1/1f2@:2/1f1@:4/1f2@:2/1f2@:5+1/1f1@:5+3/1f4@:5+1/1f1@:2/1f2@:5+2/1f4@:1/1f2@}
+53=?{:3/1f1@:2/1f1@-1@:4/1f3@:5+51@:3/1f1@:1/1f1@:5+3/1f4@}
+1f6=?{:5+51@:2/1f2@:5/1+3@:4/1+52@:5+1/1f1@:2/1f2@:5+2/1+55@:1/1f1@:5/1+3@:2/1+54@:5+2/1f4@6:2/1f1@6:1/1f2@6:2/1f3@6:5+1/1f2@6:5+51@6:5/1f2@6}
+2f6=?{:2/1f2@:5+52@@:4/1f3@:5+3/1f4@:2/1f2@:5+2/1f4@:2/1f1@}
+3f6=?{:5+1/1f2@:5+3/1f1@-1@:5+2/1f4@:5+3/1f1@}
+4f6=?{:3/1f1@:5+52@@:5+1/1f2@:4/1f1@:3/1f1@:4/1f1@}
+5f6=?{:5+2/1f4@:5+1/1f1@:5+2/1f1@:5/1f2@:1/1f1@:5+2/1f4@:5+52@@:3/1f1@:2/1f3}
+51f6=?{:3/1f1@:5+53@:4/1f2@:5+2/1f4@:5+3/1f1@}
+52f6=?{:5+1/1f1@:2/1f2@:3/1f1@}

Provalo online! Si tratta di 830 byte in SBCS di Cubically .

  • ~legge l'input, lo @stampa. (Questo si interrompe quando l'input non è valido.)
  • Ciascuno dei +.../...+...=7?6{...}paragona l'input per ciascun valore ASCII ( C, D, E, F, ecc) ed esegue il codice all'interno {...}se sono uguali.
  • Ogni blocco di codice ( {...}) stampa il resto del nome (il primo carattere è già stampato).

Grazie al traduttore ASCII di TehPers per Cubically, che è stato molto utile.


1
Sono 1060 byte
Conor O'Brien,

1

V , 125 byte

Ccupcake
donut
eclair
froyo
gingerbread
honeycomb
ice cream sandwich
jellybean
kitkat
lollipop
marshmallow
nougat
oreoÇ^"/d

Provalo online!


1

Pyke , 117 byte

Port of my Python answer .

"upcake,onut,clair,royo,ingerbread,oneycomb,ce cream sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"\,cQ.o67-@+

Provalo qui!

Codificata come codici esadecimali, la nuova tecnica del golf in Pyke, sarebbe di 116 byte :

22 75 70 63 61 6B 65 2C 6F 6E 75 74 2C 63 6C 61 69 72 2C 72 6F 79 6F 2C 69 6E 67 65 72 62 72 65 61 64 2C 6F 6E 65 79 63 6F 6D 62 2C 63 65 20 63 72 65 61 6D 20 73 61 6E 64 77 69 63 68 2C 65 6C 6C 79 62 65 61 6E 2C 69 74 6B 61 74 2C 6F 6C 6C 69 70 6F 70 2C 61 72 73 68 6D 61 6C 6C 6F 77 2C 6F 75 67 61 74 2C 72 65 6F 22 5C 2C 63 51 EF 36 37 2D 40 2B

(Incolla e controlla Use hex encoding?).


1
Pyke ha bisogno di un "Rilascio Android" integrato, giusto?
Erik the Outgolfer,

1
@EriktheOutgolfer Ha Pokemon, quindi perché no?
Mr. Xcoder,

1

C # , 147 136 129 byte


Dati

  • Input Char c La prima lettera del nome della versione
  • Output String Il nome completo della versione

golfed

// Requires the input to be uppercase.
// This is the one counting for the challange
c=>c+"upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo".Split(',')[c-67];

// Optional. Requires the input to be lowercase.
c=>c+"upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo".Split(',')[c-99];

// Optional. Works with both uppercase and lowercase with the additional cost of 10 bytes.
c=>c+"upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo".Split(',')[c-(c<99?67:99)];

Ungolfed

c =>
    c + "upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"
        .Split( ',' )[ c - 67 ];

Leggibile non golfato

// Takes a char 
c =>
    // Appends the input letter to...
    c + 

    // ... the name in the resulting index of the subtraction of the char with 67 ('C'), or with 99 ('c') for the lowercase version
    "upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"
        .Split( ',' )[ c - 67 ];

// Takes a char 
c => 
    // Appends the input letter to...
    c + 

    // ... the name in the resulting index of the subtraction of the char with 67 ('C') if the char is uppercase ( 'C' == 67, 'O' == 79 )
    //    or with 99 ('c') if the char is lowercase ( 'c' == 99, 'o' == 111 )
    "upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"
        .Split( ',' )[ c - ( c < 99 ? 67 : 99 ) ];

Codice completo

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestBench {
    public static class Program {
        private static Func<Char, String> f = c =>
            c + "upcake,onut,clair,royo,ingerbread,oneycomb,ce Cream Sandwich,ellybean,itkat,ollipop,arshmallow,ougat,reo"
                .Split( ',' )[ c - 67 ];

        static void Main( string[] args ) {
            List<Char>
                testCases = new List<Char>() {
                    'C',
                    'D',
                    'E',
                    'F',
                    'G',
                    'H',
                    'I',
                    'J',
                    'K',
                    'L',
                    'M',
                    'N',
                    'O',
                };

            foreach(Char testCase in testCases) {
                Console.WriteLine($" Input: {testCase}\nOutput: {f(testCase)}\n");
            }

            Console.ReadLine();
        }
    }
}

Uscite

  • v1.0 - 147 bytes- Soluzione iniziale.
  • v1.1 - -11 bytes- Ha preso in prestito l' idea di Olivier Grégoire .
  • v1.2 - - 7 bytes- Modificato l'input della funzione da esplicito a implicito.

Appunti

  • Nessuna

Potresti salvare qualcosa rimuovendo la prima lettera da ciascun nome e aggiungendo la stringa recuperata dall'array al carattere di input?
Shaggy,

(char c)può essere soloc
LiefdeWen

1

R, 169 155 byte

sub(paste0(".*(",scan(,""),"[^A-Z]+).*"),"\\1","CupcakeDonutEclairFroyoGingerbreadHoneycombIce cream sandwichJellybeanKitkatLollipopMarshmallowNougatOreo")

1

Dyalog APL, 125 byte

{⍵/⍨⍞=⎕A[+\⍵∊⎕A]}'ABCupcakeDonutEclairFroyoGingerbreadHonecombIce cream sandwichJellybeanKitkatLollipopMarshmallowNougatOreo'

Provalo online!

Come?

  • ⍵∊⎕A (la stringa lunga) con 1 per le lettere maiuscole, 0 per lettere minuscole / spazi.
  • +\ Raggruppa (numeri di ritorno) ⍵ con lettere maiuscole.
  • ⎕A[...] La lettera maiuscola contrassegnata da un numero
  • ⍵/⍨⍞= Il gruppo indicato da quel numero
  • {...}'...'Impostato sulla stringa lunga

Approccio intelligente.
Adám,

1

R, 131 , 126 , 123 , 112 , 178 byte

grep(paste0('^',scan(,'')),c("Cupcake","Donut","Eclair","Froyo","Gingerbread","Honeycomb","Ice Cream Sandwich","Jellybean","Kitkat","Lollipop","Marshmallow","Nougat","Oreo"),v=T)

Grazie per @Mark per aver salvato 5 + 8 + 3 byte



1

C (gcc) , 168 byte

main(){puts(memchr("Cupcake\0Donut\0Eclair\0Froyo\0Gingerbread\0Honeycomb\0Ice cream sandwich\0Jellybean\0Kitkat\0Lollipop\0Marshmallow\0Nougat\0Oreo",getchar(),117));}

Provalo online!


1

PowerShell , 136 134 byte

param($c)$c+('upcake0onut0clair0royo0ingerbread0oneycomb0ce cream sandwich0ellybean0itkat0ollipop0arshmallow0ougat0reo'-split0)[$c-99]

Provalo online!

Accetta un [char]carattere di input, in minuscolo, e output in minuscolo.

-2 grazie al suggerimento di AdmBorkBork -split0invece di -split','.


È possibile utilizzare 0come separatore e quindi -split0per salvare le virgolette.
AdmBorkBork,

@AdmBorkBork buon suggerimento, grazie!
TessellatingHeckler,
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.