Oreo? No ... Lollipop, tal vez?


46

Desde 2009, los nombres de los códigos de la versión de Android tienen temas de confitería. Android 1.5 es Cupcake, Android 1.6 es Donut, Android 2.0 es Eclair, etc. De hecho, ¡los nombres de las versiones son alfabéticos!

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

En orden:

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

Desafío

Escribir un programa / función que toma una carta de Ca Oy da salida a su respectivo nombre de código de la versión de Android.

Especificaciones

  • Normas estándar de E / S se aplican .
  • Las lagunas estándar están prohibidas .
  • Puede optar por admitir la entrada en minúscula o en mayúscula o incluso ambas.
  • El resultado puede estar en mayúsculas Cupcakeo minúsculas ( ) o en minúsculas ( eclair). Ice cream sandwichpuede escribirse en mayúsculas como quieras. (No esperaba que causara tanta confusión ...)
  • Este desafío no se trata de encontrar el enfoque más corto en todos los idiomas, sino de encontrar el enfoque más corto en cada idioma .
  • Su código se puntuará en bytes , generalmente en la codificación UTF-8, a menos que se especifique lo contrario.
  • Las funciones integradas (Mathematica podría tener una: P) que calculan esta secuencia están permitidas, pero se recomienda incluir una solución que no se base en una función integrada.
  • Se alientan las explicaciones, incluso para los idiomas "prácticos" .

Casos de prueba

Estos son mayúsculas y mayúsculas.

Input   Output

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

En algunos formatos mejores:

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 ¿Estás diciendo que no es un tonto porque es más fácil? Esto es un engaño precisamente porque es una versión más fácil de una pregunta existente. Ya hemos hecho este tipo de preguntas hasta la muerte y esta no proporciona absolutamente nada nuevo o interesante para el género.
Wheat Wizard

2
@WheatWizard Creo que el primero es un mejor engañado, ya que el segundo es una fuente restringida.
Sr. Xcoder

99
Podría ser un engaño de algún otro desafío. Pero ayúdame a reconocer que mi monstruo está pidiendo conversión de cadena a símbolo (lo que lleva a soluciones basadas en hash). Este está pidiendo un símbolo para encadenar.
Arnauld


55
@MagicOctopusUrn Sí, yo también vi eso. Lamentablemente, no incluye MARSHMALLOWy más tarde.
mbomb007

Respuestas:


14

Carbón , 73 bytes

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

Pruébalo en línea! I / O está en minúsculas. Basado en esta versión detallada . Explicación:

                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

44
¿Yo que? Cómo.
Urna mágica del pulpo

@MagicOctopusUrn Lo siento, estaba demasiado ocupado para agregar una explicación en ese momento. Espero que este sea suficiente.
Neil

1
¡Vaya, no sabía que hacía cuerdas comprimidas!
Urna mágica de pulpo

Cómo el carbón supera a SOGL aquí es simplemente increíble.
Erik the Outgolfer

Jelly todavía lo está superando: alegría: codegolf.stackexchange.com/a/140092/73675
Hugo H

14

Bash + Utilidades Core 131 128 122 117 bytes.

El script está codificado como Base64 porque contiene caracteres especiales (extraños).

Acepta la letra de nombre de código de Android solo en minúsculas como su primer parámetro posicional. Devuelve el nombre en clave completo también en minúsculas .

CiPBUeICicG5tJ8W5a0Pc/hYuw7hkNMSIYkAPjARkdgFrdbh3NJgTmB4gRPiiQDJAaOyBH4ki14C
QDeKRNQJ8IJYER411DAnx0SO4CAKYmFzZTMyICQwfHRyICdBLVo0NwonICdhLXoKICd8Z3JlcCBe
JDEK

Explicación:

#�Q��������s�X����!�>0�������`N`x������~$�^@7�D�    ��X5�0'�D�� 
base32 $0|tr 'A-Z47
' 'a-z
 '|grep ^$1
  • Las primeras dos líneas son el blob binario con los datos (ver al final de la respuesta para más información). La primera línea está vacía, para evitar problemas con Bash, ya que de lo contrario puede pensar que se está alimentando con un archivo binario.
  • base32 $0 codifica el contenido del script con Base32, con el ajuste de línea predeterminado de 76 caracteres.
  • tr 'A-Z47\n' 'a-z\n '(tenga en cuenta que \nse escribe como una nueva línea literal) en minúscula la entrada y reemplazará 4 , 7 y \nby \n, espacio y espacio respectivamente.
  • grep ^$1 generará las líneas que coinciden con la cadena proporcionada como primer argumento para el script.

Datos binarios

Esta secuencia de octetos se falsificó para que no contenga nuevas líneas y cuando se decodifica con Base32 según RFC 4648, la cadena resultante es la lista de nombres de código de Android (usando 4 como delimitador de elementos y 7 para reemplazar el carácter de espacio ). Entre sus peculiaridades, comienza con un carácter de nueva línea y un hash ( #) para que se comporte como un comentario y, por lo tanto, no sea ejecutado por el intérprete.

Además, el ajuste de línea predeterminado a 76 caracteres de esta implementación de Base32 me ayudó un byte, ya que reordené los elementos para usar el salto de línea como uno de los espacios de sándwich de helado .


También, y yendo un poco fuera de tema, creo que Google no debería de hacer publicidad directa de productos comerciales en los nombres clave de Android.


2
Bien, esta es una respuesta genial. Bienvenido al sitio :)
DJMcMayhem


1
Esta versión tiene errores, al menos en mi sistema (bash 4.4.12, coreutils 8.27). Para f, genera dos líneas: una con froyoy otra con misterioso fgeyltmuzteibno.
MarSoft

1
@MarSoft: ¡Gracias! Fijo. La pena es que ahora necesito un byte más.
Helio

@MarSoft: ¡Resuelto! ¡Ahora con los mismos bytes!
Helio


11

Bash + Core Utils (Grep): 132 130 Bytes

Tan simple como podría ser

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

1
La entrada vía ddes inteligente, pero ¿podría guardarla como un script y usarla $1en su lugar?
Dom Hastings

11

Jalea , 57 bytes

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

Pruébalo en línea!

-5 gracias a Jonathan Allan .


Ahorre cuatro bytes utilizando un marcador de posición para los espacios en "sandwich de helado" y utilizando espacios para dividir, por ejemplo:Oị“¡ḟ¤Y7bh%XO€ḥıṣẎṄṢ°ḊḞİỌĿż0Y⁷ẠỵƈƭV>tÐNY_LɠðṅẒọX?v»Ḳ¤F⁾! y
Jonathan Allan

... en realidad hacen esos cinco bytes (había usado "guarida" cuando "clair" está en el diccionario):Oị“¡ȥọ⁴ḷæĿɱ}#n#i®ÞSỊ3ƙɼıjṁ)-⁵g7ḥjC?4ƘẠʂ+ḋ¤⁺jṣð£?v»Ḳ¤F⁾! y
Jonathan Allan

@ JonathanAllan gracias ... espera ¿por qué necesitaría el F? oh es porque recibo una entrada como una cadena no char
Erik the Outgolfer

8

C ++, 206 201 198 bytes

¡Gracias a @sergiol por ayudar a ahorrar 3 bytes!

#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]);}

Pruébalo en línea!

C, 173 bytes

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]);}

Bueno, comenzó como C ++, pero ahora también es válido C, y algunos bytes se pueden guardar compilándolo como C.

Pruébalo en línea!


1
Mi intento fallido de acortarlo
sergiol

@sergiol Gracias! Pude guardar tres bytes con eso después de un poco de golf.
Steadybox

44
#importen c ++? ¿que me estoy perdiendo aqui?
Abhinav Gauniyal el

@AbhinavGauniyal: IIRC Creo que algunas advertencias de compilación me aconsejaron también agregar #import <cstdio>porque la falta de #include <stdio.h>; o puede ser que me equivoque
sergiol

@AbhinavGauniyal No es C ++ estándar, pero al menos GCC y MSVC lo tienen.
Steadybox

7

JavaScript (ES6), 137 136 bytes

Guardado 1 byte gracias a Neil

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

Manifestación


¿no puedes incluir el espacio en el rango de caracteres, probablemente con \ s? no he usado mucho JS Regex
michi7x7

1
@ michi7x7 Hes necesita que el partido se detenga en una letra mayúscula, excepto en el caso de Ice Cream Sandwich, aunque ([a-z]| .)+(guardar 1 byte) funcionaría incluso con Ice Cream Sandwich en el medio de la cadena (comenzaría a fallar cuando los nombres de código llegaran a S aunque).
Neil

@Neil bien, [a-z\s]+no coincide con letras mayúsculas. Simplemente no sé si puedes hacer eso en JS
michi7x7

@ michi7x7 Entonces, ¿cómo funcionaría con Ice Cream Sandwich?
Neil

2
Uso Ice cream sandwich, como en el caso de prueba (aunque este no es el caso del título)
michi7x7

5

Japt , 81 79 bytes

Contiene algunos caracteres que no se mostrarán aquí.

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

Pruébalo

  • 2 bytes guardados gracias a Oliver .

Explicación

Entrada implícita de cadena de caracteres en mayúscula U.

Una cadena comprimida (todo entre las teclas de retroceso) de los nombres, separada con fy sin su primera letra se divide ( q) en una matriz f.

Dentro de esa matriz obtenemos el elemento en el índice ( g) del Ucódigo de caracteres s. (¡Sí, ajuste de índice!)

Anexamos eso Ue imprimimos implícitamente la cadena resultante.


1
Agradable. Puede guardar un par de bytes si se divide en fsu lugar si los saltos de línea: ethproductions.github.io/japt/...
Oliver

@ Oliver: Oh, bien, gracias :) En mi teléfono, caminar por la calle, así que definitivamente no lo habría conseguido por un tiempo (si es que lo hubiera hecho).
Shaggy

5

Excel VBA, 137 134 132 Bytes

Función de ventana inmediata Anónimo VBE que toma la entrada como tipo esperado Variant\Stringy duración de 1la celebración de un capital de carta de celular [A1]y salidas de la función de ventana inmediata VBE

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

-5 bytes para cambiar los espacios ce cream sandwichde (char 32) a  (char 160) `` (char 127) y eliminar el delimitador de coma en la Splitfunción


4

SOGL V0.12 , 81 bytes

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

Pruébalo aquí!

Explicación:

...‘            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

Ahora hay una versión más corta de 80 bytes , pero agregué los + 2 / -2 incorporados debido a este desafío: p

La cadena comprimida se divide como "cup","cake"," donut eclair fro","yo gingerbread honeycomb ice","_","cream","_","sandwich jelly","bean kit","kat loll","i","pop marsh","mallow"," nougat oreo"para el uso máximo de palabras en inglés (muchas no estaban en el diccionario SOGL), en este momento no puedo encontrar ninguna mejora.


4

> <> , 181 bytes

!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<>

Pruébalo en línea!

Esto funciona modificando automáticamente el programa para colocar un <frente al nombre correcto para imprimir, cuya posición está determinada por el valor de la letra ingresada.


3

Dyalog APL, 158 143 131 bytes

1 byte guardado gracias a @ Zacharý

12 bytes guardados gracias a @Gil

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

Pruébalo en línea!

¿Cómo?

',,,upcake...' - lista de palabras

','(1↓¨=⊂⊢) - dividido por ','

(⎕A⍳⍵)⊃ - tomar del lugar del argumento en el alfabeto

⍵, - y anexar a la carta


¿Por qué lo describiste como aplanar?
Zacharý

Además, {⍵,∊⍬⍬'upcake' 'onut' 'clair' 'royo' 'ingerbread' 'oneycomb' 'ce cream sandwich' 'ellybean' 'itkat' 'ollipop' 'arshmallow' 'ougat' 'reo'[⎕A⍳⍵]}funciona por 1 byte menos!
Zacharý

@ Zacharý porque es ... "mezclar". ¡Buena esa! ¿Por qué ∊ y no ↑?
Uriel

Porque también se aplana, pero en realidad se aplana y no se "mezcla". ↑(1 2)(3 4)NO es plano, mientras que ∊(1 2)(3 4)es.
Zacharý

@ Zacharý OP cambió eso ... OTRA VEZ.
Uriel

3

EXCEL, 154 bytes

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

Nunca he pensado en usar Excel de esta manera. Perfecto. Ahora hazlo con WORD
tisaconundrum

@tisaconundrum: no hablamos de esa maldita cosa; Incluso VBA no pudo salvarlo
Taylor Scott

3

C (gcc) , 195 192 190 bytes

-2 bytes gracias 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]);}

Pruébalo en línea!


3

Tcl , 158 bytes

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]]}

Pruébalo en línea!


2
Tcl! No ves demasiadas soluciones Tcl aquí. Es una pena.
Silvio Mayolo

2

Haskell, 145 bytes

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

3
takeWhilepuede ser fst.spany en dropWhileconsecuencia snd.span.
Laikoni

2

Gaia , 110 bytes

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

Pruébalo en línea!

Explicación

:          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

Rubí, 127 bytes

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

Toma entrada en mayúscula. Pruébalo en línea!


2

Pyth , 117 116 bytes

Puerto de mi respuesta de Python .

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

Pruébalo aquí! o echa un vistazo a Test Suite

Pyth , 99 bytes (70 caracteres)

-15 bytes gracias a @insert_name_here !

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

Pruébalo aquí!


Podría guardar 15 bytes utilizando cadenas comprimidas (aunque la respuesta tendría que contener caracteres no imprimibles en ese momento).
insert_name_here

@ inserción_nombre_aquí Gracias.
Sr. Xcoder

2

Java (OpenJDK 8) , 128 bytes

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

Pruébalo en línea!


Usando expresiones regulares, 149 bytes

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

Pruébalo en línea!

  • ¡4 bytes guardados en la solución regex gracias a Kevin Cruijssen!

1
Estaba a punto de publicar la misma .splitrespuesta (solo con un delimitador diferente) cuando leí el desafío y no pude encontrar una respuesta Java (hasta que fui a la segunda página de respuestas), entonces +1. En cuanto a la respuesta regex, ([a-z]| .)+puede serlo [a-z ]+, ya que puede emitir "Sandwich de helado" (" El resultado puede estar en mayúsculas (Cupcake) o en minúsculas (eclair). El sándwich de helados puede escribirse en mayúsculas como desee. (No esperaba que causara tanta confusión ...) ")
Kevin Cruijssen

2

Cúbicamente , 1047 852 830 bytes

Las funciones seguramente ayudan a los grandes programas de golf ...

⇒+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@}

Pruébalo en línea! Esto es 830 bytes en SBCS de Cubically .

  • ~lee la entrada, la @imprime. (Esto se rompe cuando la entrada no es válida).
  • Cada uno de los +.../...+...=7?6{...}compara la entrada a cada valor ASCII ( C, D, E, F, etc) y ejecuta el código dentro de {...}si son iguales.
  • Cada bloque de código ( {...}) imprime el resto del nombre (el primer carácter ya está impreso).

Gracias al traductor ASCII a Cubically de TehPers que fue muy útil.


1
Eso es 1060 bytes
Conor O'Brien


1

Pyke , 117 bytes

Puerto de mi respuesta de Python .

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

Pruébalo aquí!

Codificado como códigos hexadecimales, la nueva técnica de golf en Pyke, sería de 116 bytes :

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

(Pegar y verificar Use hex encoding?).


1
Pyke necesita un "lanzamiento de Android" incorporado ¿verdad?
Erik the Outgolfer

1
@EriktheOutgolfer Tiene Pokémon, entonces ¿por qué no?
Sr. Xcoder

1

C # , 147 136 129 bytes


Datos

  • Entrada Char c La primera letra del nombre de la versión
  • Salida String El nombre completo de la versión

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)];

Sin golf

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

Legible sin golf

// 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 ) ];

Código 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();
        }
    }
}

Lanzamientos

  • v1.0 - 147 bytes- Solución inicial.
  • v1.1 - -11 bytes- Prestó la idea de Olivier Grégoire .
  • v1.2 - - 7 bytes- Cambió la entrada de la función de explícito a implícito.

Notas

  • Ninguna

¿Podría guardar algo eliminando la primera letra de cada nombre y agregando la cadena que recupera de la matriz al carácter de entrada?
Shaggy

(char c)puede serc
LiefdeWen

1

R, 169155 bytes

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

1

Dyalog APL, 125 bytes

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

Pruébalo en línea!

¿Cómo?

  • ⍵∊⎕A (la cadena larga) con 1 para mayúsculas, 0 para minúsculas / espacios.
  • +\ Agrupe (números de retorno) ⍵ por letras mayúsculas.
  • ⎕A[...] La letra mayúscula significada por un número
  • ⍵/⍨⍞= El grupo indicado por ese número
  • {...}'...'Establecer en la cadena larga

Enfoque inteligente.
Adám el

1

R, 131 , 126 , 123 , 112 , 178 bytes

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

Gracias por @Mark por guardar 5 + 8 + 3 bytes



1

C (gcc) , 168 bytes

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

Pruébalo en línea!


1

PowerShell , 136134 bytes

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

Pruébalo en línea!

Toma un [char]carácter de entrada, en minúsculas, y las salidas en minúsculas.

-2 gracias a la sugerencia de AdmBorkBork de en -split0lugar de -split','.


Puede usarlo 0como separador y luego -split0guardar las comillas.
AdmBorkBork

@AdmBorkBork buena sugerencia, gracias!
TessellatingHeckler
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.