Oreo? Não ... pirulito, talvez?


46

Desde 2009, os nomes de código das versões do Android têm o tema de confeitaria. Android 1.5 é Cupcake, Android 1.6 é Donut, Android 2.0 é Eclair, etc. Na verdade, os nomes das versões são em ordem alfabética!

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

Em ordem:

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

Desafio

Escreva um programa / função que leve uma carta de CparaO e envia o seu respectivo nome de código da versão Android.

Especificações

  • Aplicam- se as regras de E / S padrão .
  • As brechas padrão são proibidas .
  • Você pode optar por oferecer suporte a entrada em minúsculas ou maiúsculas ou mesmo a ambos.
  • A saída pode estar em maiúsculas ( Cupcake) ou em minúsculas ( eclair).Ice cream sandwichpode ser capitalizado da maneira que desejar. (Eu não esperava que causasse tanta confusão ...)
  • Esse desafio não é encontrar a abordagem mais curta em todos os idiomas, mas sim encontrar a abordagem mais curta em cada idioma. .
  • Seu código será pontuado em bytes , geralmente na codificação UTF-8, a menos que especificado de outra forma.
  • Funções internas (o Mathematica pode ter uma: P) que calculam essa sequência são permitidas, mas é recomendável incluir uma solução que não dependa de uma embutida.
  • Explicações, mesmo para idiomas "práticos", são incentivadas .

Casos de teste

São maiúsculas e maiúsculas.

Input   Output

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

Em alguns formatos melhores:

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 Você está dizendo que não é um tolo, porque é mais fácil? Este é um truque precisamente porque é uma versão mais fácil de uma pergunta existente. Já fizemos esse tipo de pergunta até a morte e essa não fornece absolutamente nada de novo ou interessante para o gênero.
Wheat Wizard

2
@ WheatWizard Eu acho que o primeiro é um idiota melhor, já que o último é uma fonte restrita.
Sr. Xcoder

9
Pode ser um engano de algum outro desafio. Mas ajude-me a reconhecer que meu monstro está solicitando a conversão de string em símbolo (o que leva a soluções baseadas em hash). Este está pedindo símbolo para string.
Arnauld


5
@MagicOctopusUrn Sim, eu também vi isso. Infelizmente, não inclui MARSHMALLOWe mais tarde.
mbomb007

Respostas:


14

Carvão , 73 bytes

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

Experimente online! E / S está em minúsculas. Com base nesta versão detalhada . Explicação:

                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
Eu o quê? Como.
Magic Octopus Urn

@MagicOctopusUrn Desculpe, eu estava muito ocupado para adicionar uma explicação no momento. Espero que este seja o suficiente.
Neil

1
Oh uau, eu não sabia que fazia cordas compactadas!
Magic Octopus Urn

Como o carvão supera o SOGL aqui é simplesmente inacreditável.
Erik the Outgolfer 23/08/19

Jelly ainda está vencendo: alegria: codegolf.stackexchange.com/a/140092/73675
Hugo H

14

Utilitários Bash + Core 131 128 122 117 bytes.

O script é codificado como Base64 porque contém caracteres especiais (estranhos).

Aceita a letra do codinome Android apenas em minúsculas como seu primeiro parâmetro posicional. Retorna o nome de código completo também em minúsculas .

CiPBUeICicG5tJ8W5a0Pc/hYuw7hkNMSIYkAPjARkdgFrdbh3NJgTmB4gRPiiQDJAaOyBH4ki14C
QDeKRNQJ8IJYER411DAnx0SO4CAKYmFzZTMyICQwfHRyICdBLVo0NwonICdhLXoKICd8Z3JlcCBe
JDEK

Explicação:

#�Q��������s�X����!�>0�������`N`x������~$�^@7�D�    ��X5�0'�D�� 
base32 $0|tr 'A-Z47
' 'a-z
 '|grep ^$1
  • As duas primeiras linhas são o blob binário com os dados (consulte o final da resposta para obter mais informações). A primeira linha está vazia, para evitar problemas com o Bash, caso contrário, pode parecer que está sendo alimentado com um arquivo binário.
  • base32 $0 codifica o conteúdo do script com Base32, com a quebra de linha padrão de 76 caracteres.
  • tr 'A-Z47\n' 'a-z\n '(observe que \nestá escrito como uma nova linha literal) irá minúscula a entrada e substituirá 4 , 7 e \npor \n, espaço e espaço respectivamente.
  • grep ^$1 produzirá as linhas correspondentes à sequência fornecida como primeiro argumento para o script.

Dados binários

Esse fluxo de octetos foi forjado para não conter novas linhas e quando é decodificado com Base32 conforme RFC 4648, a sequência resultante é a lista de codinomes do Android (usando 4 como delimitador de item e 7 para substituir o caractere de espaço ). Entre suas peculiaridades, começa com um caractere de nova linha e um hash (# ), por isso se comporta como um comentário e, portanto, não é executado pelo intérprete.

Além disso, a quebra de linha padrão com 76 caracteres dessa implementação da Base32 me ajudou em um byte, conforme reordenei os itens para usar a quebra de linha como um dos espaços de sanduíche de sorvete .


Além disso, e indo um pouco off-topic, eu acho que o Google não deve em anunciar diretamente produtos comerciais nos codinomes Android.


2
Bom, esta é uma resposta muito legal! Bem-vindo ao site :)
DJMcMayhem


1
Esta versão é de buggy, pelo menos no meu sistema (bash 4.4.12, coreutils 8.27). Pois f, ele produz duas linhas: uma com froyoe outra com misterioso fgeyltmuzteibno.
MarSoft

1
@MarSoft: Obrigado! Fixo. A pena é que agora eu preciso de mais um byte.
Helio

@MarSoft: Resolvido! Agora com os mesmos bytes!
Helio


11

Bash + Core Utils (Grep): 132 130 bytes

Simples como poderia ser

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

1
A entrada via ddé inteligente, mas você poderia salvar como um script e usar $1?
Dom Hastings

11

Geléia , 57 bytes

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

Experimente online!

-5 graças a Jonathan Allan .


Salve quatro bytes usando um espaço reservado para os espaços em "sanduíche de sorvete" e usando espaços para divisão, por exemplo:Oị“¡ḟ¤Y7bh%XO€ḥıṣẎṄṢ°ḊḞİỌĿż0Y⁷ẠỵƈƭV>tÐNY_LɠðṅẒọX?v»Ḳ¤F⁾! y
Jonathan Allan

... na verdade, crie esses cinco bytes (eu usei "covil" quando "clair" está no dicionário):Oị“¡ȥọ⁴ḷæĿɱ}#n#i®ÞSỊ3ƙɼıjṁ)-⁵g7ḥjC?4ƘẠʂ+ḋ¤⁺jṣð£?v»Ḳ¤F⁾! y
Jonathan Allan

@ JonathanAllan obrigado ... espere, por que eu precisaria do F? oh que é porque eu começar a entrada como uma string não caractere
Erik o Outgolfer

8

C ++, 206 201 198 bytes

Agradecemos a @sergiol por ajudar a economizar 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]);}

Experimente online!

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

Bem, ele começou como C ++, mas agora também é C válido e alguns bytes podem ser salvos compilando-o como C.

Experimente online!


1
Minha tentativa fracassada de transformá-lo mais curto, removendo a primeira letra de cada entrada: tio.run/...
sergiol

@sergiol Obrigado! Consegui salvar três bytes com isso depois de um pouco de golfe.
Steadybox

4
#importem c ++? O que estou perdendo aqui?
Abhinav Gauniyal 23/08

@AbhinavGauniyal: IIRC Acho que alguns avisos de compilação também me aconselharam a acrescentar #import <cstdio>por falta de #include <stdio.h>; ou pode estar errado
sergiol 23/08

@AbhinavGauniyal Não é C ++ padrão, mas pelo menos o GCC e o MSVC o possuem.
Steadybox

7

JavaScript (ES6), 137 136 bytes

Guardado 1 byte graças a Neil

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

Demo


você não pode incluir o espaço no intervalo de caracteres, provavelmente com \ s? não usei muito JS Regex
michi7x7

1
@ michi7x7 Ele precisa que a correspondência pare com uma letra maiúscula, exceto no caso do Ice Cream Sandwich, embora ([a-z]| .)+(economizando 1 byte) funcione mesmo com o Ice Cream Sandwich no meio da string (ele começará a falhar quando os nomes dos códigos chegarem a S Apesar).
Neil

@ Neil bem, [a-z\s]+não corresponde a letras maiúsculas. Eu só não sei se você pode fazer isso em JS
michi7x7

@ michi7x7 Então, como isso funcionaria com o Ice Cream Sandwich?
Neil

2
Use Ice cream sandwich, como no caso de teste (embora este não é maiúscula)
michi7x7

5

Japonês , 81 79 bytes

Contém alguns caracteres que não serão exibidos aqui.

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

Teste-o

  • 2 bytes salvos graças a Oliver .

Explicação

Entrada implícita da cadeia de caracteres em maiúsculas U.

Uma string compactada (tudo entre os backticks) dos nomes, separados por fe sem a primeira letra, é dividida ( q) em uma matriz f.

Dentro desse array, obtemos o elemento no index ( g) do Ucódigo de caractere s. (Yay, quebra de índice!)

Anexamos isso Ue produzimos implicitamente a string resultante.


1
Agradável. Você pode salvar alguns bytes se dividir em fvez disso, se houver novas linhas: ethproductions.github.io/japt/… #
Oliver Oliver

@ Oliver: Oh, legal, obrigado :) No meu telefone, andando na rua, então definitivamente não teria entendido isso por um tempo (se é que havia).
Shaggy

5

Excel VBA, 137 134 132 bytes

Função de janela imediata VBE anônima que recebe entrada como tipo Variant\Stringe comprimento esperados, 1mantendo uma letra maiúscula da célula [A1]e sai para a função de janela imediata VBE

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

-5 Bytes para alterar os espaços ce cream sandwichde (caractere 32) para  (caractere 160) `` (caractere 127) e remover o delimitador de vírgula na Splitfunção


4

SOGL V0.12 , 81 bytes

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

Experimente aqui!

Explicação:

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

Agora há uma versão mais curta de 80 bytes , mas adicionei os + 2 / -2 internos por causa deste desafio: p

A string compactada é dividida como "cup","cake"," donut eclair fro","yo gingerbread honeycomb ice","_","cream","_","sandwich jelly","bean kit","kat loll","i","pop marsh","mallow"," nougat oreo"para uso máximo de palavras em inglês (muitas não estavam no dicionário SOGLs), no momento não consigo encontrar nenhuma melhoria.


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

Experimente online!

Isso funciona modificando o programa automaticamente para colocar um <na frente do nome correto a ser impresso, cuja posição é determinada pelo valor da letra inserida.


3

Dyalog APL, 158 143 131 bytes

1 byte salvo graças a @ Zacharý

12 bytes salvos graças a @Gil

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

Experimente online!

Quão?

',,,upcake...' - lista de palavras

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

(⎕A⍳⍵)⊃ - tire do lugar do argumento no alfabeto

⍵, - e acrescente à carta


Por que você descreveu como achatar?
`` Zacharý

Além disso, {⍵,∊⍬⍬'upcake' 'onut' 'clair' 'royo' 'ingerbread' 'oneycomb' 'ce cream sandwich' 'ellybean' 'itkat' 'ollipop' 'arshmallow' 'ougat' 'reo'[⎕A⍳⍵]}funciona por 1 byte a menos!
`` Zacharý

@ Zacharý porque é ... "mix". Agradável! por que ∊ e não ↑?
Uriel

Porque é achatado também, mas na verdade achatado e não "misturado". ↑(1 2)(3 4)NÃO é plano, enquanto ∊(1 2)(3 4)é.
`` Zacharý

@ Zacharý OP mudou isso ... NOVAMENTE.
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")

Eu nunca pensei em usar o Excel dessa maneira. Perfeito. Agora faça isso com WORD
tisaconundrum

@tisaconundrum - não falamos dessa coisa amaldiçoada; Mesmo VBA não poderia salvá-lo
Taylor Scott

3

C (gcc) , 195 192 190 bytes

-2 bytes graças 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]);}

Experimente online!


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

Experimente online!


2
Tcl! Você não vê muitas soluções Tcl aqui. É uma vergonha.
Silvio Mayolo 23/08

2

Haskell, 145 bytes

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

3
takeWhilepode ser fst.spane de dropWhileacordo snd.span.
Laikoni 22/08/19

2

Gaia , 110 bytes

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

Experimente online!

Explicação

:          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

Ruby, 127 bytes

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

Recebe entrada em maiúsculas. Experimente online!


2

Pitão , 117 116 bytes

Porta da minha resposta Python .

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

Experimente aqui! ou Confira o Conjunto de Testes

Pitão , 99 bytes (70 caracteres)

-15 bytes graças a @inserir_name_here !

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

Experimente aqui!


Você pode salvar 15 bytes usando seqüências de caracteres compactadas (embora a resposta deva conter caracteres não imprimíveis).
insert_name_here 23/08

@insert_name_here Thanks.
Mr. 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]

Experimente online!


Usando regexes, 149 bytes

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

Experimente online!

  • 4 bytes salvos na solução regex graças a Kevin Cruijssen!

1
Estava prestes a postar a mesma .splitresposta (apenas com delimitador diferente) quando li o desafio e não consegui encontrar uma resposta Java (até a segunda página de respostas), então +1. Quanto à resposta regex, ([a-z]| .)+pode ser [a-z ]+, já que você tem permissão para produzir "Sanduíche de sorvete" (" A saída pode estar em maiúsculas (Cupcake) ou em letras minúsculas (eclair)). O sanduíche de sorvete pode ser maiúsculo do jeito que você quiser. (Eu não esperava que isso causasse tanta confusão ...) ")
Kevin Cruijssen

2

Cubicamente , 1047 852 830 bytes

As funções certamente ajudam a golfe em grandes programas ...

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

Experimente online! São 830 bytes no SBCS do Cubically .

  • ~lê entrada, @imprime. (Isso interrompe quando a entrada é inválida.)
  • Cada um dos +.../...+...=7?6{...}compara a entrada para cada valor ASCII ( C, D, E, F, etc) e executa o código dentro {...}se eles são iguais.
  • Cada bloco de código ( {...}) imprime o restante do nome (o primeiro caractere já está impresso).

Obrigado ao tradutor ASCII to Cubically do TehPers, que foi muito útil.


1
Isso é 1060 bytes
Conor O'Brien


1

Pyke , 117 bytes

Porta da minha resposta Python .

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

Experimente aqui!

Codificado como códigos hexadecimais, a nova técnica de golfe em Pyke, seria 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

(Cole e verifique Use hex encoding?).


1
O Pyke precisa de um "lançamento para Android", certo?
Erik the Outgolfer

1
@EriktheOutgolfer Tem Pokemons, então por que não?
Mr. Xcoder

1

C # , 147 136 129 bytes


Dados

  • Entrada Char c A primeira letra do nome da versão
  • Saída String O nome completo da versão

Golfe

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

Ungolfed legible

// 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();
        }
    }
}

Lançamentos

  • v1.0 - 147 bytes- Solução inicial.
  • v1.1 - -11 bytes- Emprestada a idéia de Olivier Grégoire .
  • v1.2 - - 7 bytes- Alterada a entrada da função de explícita para implícita.

Notas

  • Nenhum

Você poderia salvar alguma coisa removendo a primeira letra de cada nome e anexando a string que você recupera da matriz ao caractere de entrada?
Shaggy

(char c)pode apenas serc
LiefdeWen

1

R, 169 155 bytes

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

1

Dyalog APL, 125 bytes

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

Experimente online!

Quão?

  • ⍵∊⎕A (a cadeia longa) com 1 para letras maiúsculas, 0 para letras minúsculas / espaços.
  • +\ Agrupe (retornando números) ⍵ por letras maiúsculas.
  • ⎕A[...] A letra maiúscula representada por um número
  • ⍵/⍨⍞= O grupo representado por esse número
  • {...}'...'Definido para a sequência longa

Abordagem inteligente.
Adám 23/08/19

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)

Obrigado pelo @Mark por salvar 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));}

Experimente online!


1

PowerShell , 136 134 bytes

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

Experimente online!

Pega um [char]caractere de entrada, em minúsculas, e produz em minúsculas.

-2 graças à sugestão de AdmBorkBork para em -split0vez de -split','.


Você pode usar 0como separador e -split0salvar as aspas.
AdmBorkBork 29/08

@AdmBorkBork boa sugestão, obrigado!
TessellatingHeckler
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.