Oreo? Нет ... Леденец, может быть?


46

С 2009 года кодовые имена версий Android были оформлены на кондитерские изделия. Android 1.5 - это Cupcake, Android 1.6 - это Donut, Android 2.0 - это Eclair и т. Д. На самом деле названия версий в алфавитном порядке!

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

Для того, чтобы:

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

Вызов

Написать программу / функцию , которая принимает письмо от Cдо Oи выводит его соответствующий Android название версии кода.

Характеристики

  • Применяются стандартные правила ввода / вывода .
  • Стандартные лазейки будут запрещены .
  • Вы можете выбрать либо поддержку ввода в нижнем регистре, либо ввода в верхнем регистре, либо даже и то и другое.
  • Вывод может быть в заголовке case ( Cupcake) или полностью в нижнем регистре ( eclair). Ice cream sandwichможет быть заглавной, как вам нравится. (Я не ожидал, что это вызовет столько путаницы ...)
  • Эта задача не в том, чтобы найти кратчайший подход на всех языках, а в том, чтобы найти кратчайший подход на каждом языке .
  • Ваш код будет оцениваться в байтах , обычно в кодировке UTF-8, если не указано иное.
  • Разрешены встроенные функции (Mathematica может иметь одну: P), которые вычисляют эту последовательность, но приветствуется включение решения, не основанного на встроенных функциях .
  • Пояснения, даже для «практических» языков, приветствуются .

Контрольные примеры

Это прописные и заглавные буквы.

Input   Output

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

В нескольких лучших форматах:

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 Вы говорите, что это не обман, потому что это проще? Это обман просто потому, что это более простая версия существующего вопроса. Мы уже задавали этот вопрос до смерти, и этот вопрос не дает абсолютно ничего нового или интересного для жанра.
Пшеничный волшебник

2
@WheatWizard Я думаю, что первый лучше обмануть, так как последний является ограниченным источником.
г-н Xcoder

9
Это может быть обманом какой-то другой проблемы. Но Помогите мне распознать, что мой монстр просит преобразования строк в символы (что приводит к решениям на основе хешей). Этот просит символ для строки.
Арно


5
@MagicOctopusUrn Да, я тоже это видел. К сожалению, это не включает MARSHMALLOWи позже.
mbomb007

Ответы:


14

Древесный уголь , 73 байта

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

Попробуйте онлайн! Ввод / вывод в нижнем регистре. На основании этой многословной версии . Объяснение:

                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


@MagicOctopusUrn Извините, я был слишком занят, чтобы добавить объяснение в то время. Надеюсь, этого достаточно.
Нил

1
Ух ты, я не знал, что это сжатые строки!
Волшебная Урна Осьминога

Как уголь бьет SOGL здесь просто невероятно.
Эрик Outgolfer

Джелли все еще бьет его: joy: codegolf.stackexchange.com/a/140092/73675
Хьюго Х

14

Bash + Core Utils 131 128 122 117 байт.

Сценарий закодирован как Base64, потому что он содержит специальные (странные) символы.

Принимает букву Android под кодовым именем только в нижнем регистре в качестве первого позиционного параметра. Возвращает полное кодовое имя также в нижнем регистре .

CiPBUeICicG5tJ8W5a0Pc/hYuw7hkNMSIYkAPjARkdgFrdbh3NJgTmB4gRPiiQDJAaOyBH4ki14C
QDeKRNQJ8IJYER411DAnx0SO4CAKYmFzZTMyICQwfHRyICdBLVo0NwonICdhLXoKICd8Z3JlcCBe
JDEK

Explaination:

#�Q��������s�X����!�>0�������`N`x������~$�^@7�D�    ��X5�0'�D�� 
base32 $0|tr 'A-Z47
' 'a-z
 '|grep ^$1
  • Первые две строки представляют собой двоичный двоичный объект с данными (дополнительную информацию см. В конце ответа). Первая строка пуста, чтобы избежать проблем с Bash, так как в противном случае может показаться, что он загружается двоичным файлом.
  • base32 $0 кодирует содержимое скрипта с помощью Base32 с переносом строки по умолчанию из 76 символов.
  • tr 'A-Z47\n' 'a-z\n '(обратите внимание , что \nзаписывается в виде буквального перевода строки) будет в нижнем регистре входа и заменить 4 , 7 и с \nпомощью \n, пространства и пространства соответственно.
  • grep ^$1 выведет строки, соответствующие строке, указанной в качестве первого аргумента скрипта.

Двоичные данные

Этот поток октетов был подделан, поэтому он не содержит символов новой строки, и когда он декодируется с помощью Base32 в соответствии с RFC 4648, полученная строка представляет собой список кодовых имен Android (с использованием 4 в качестве разделителя элементов и 7 для замены символа пробела ). Среди его особенностей он начинается с символа новой строки и hash ( #), поэтому он ведет себя как комментарий и, следовательно, не выполняется интерпретатором.

Кроме того, перенос строки по умолчанию в 76 символов этой реализации Base32 помог мне в байте, так как я переупорядочил элементы, чтобы использовать разрыв строки в качестве одного из пробелов сэндвича с мороженым .


Кроме того , и идти немного не по теме, я думаю , что Google не в непосредственно рекламировать коммерческие продукты в Android кодовых.


2
Хорошо, это действительно крутой ответ! Добро пожаловать на сайт :)
DJMcMayhem

Другой Bash Ответ: codegolf.stackexchange.com/a/140147/41835
Helio

1
Эта версия содержит ошибки, по крайней мере, в моей системе (bash 4.4.12, coreutils 8.27). Ведь fон выводит две строки: одну froyoс загадочной, а другую - загадочную fgeyltmuzteibno.
MarSoft

1
@MarSoft: Спасибо! Исправлена. Жаль только, что мне нужен еще байт.
Helio

@MarSoft: решено! Теперь с теми же байтами!
Helio


11

Bash + Core Utils (Grep): 132 130 байт

Просто, как могло бы быть

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

1
Ввод через ddумный, но вы могли бы сохранить как скрипт и использовать $1вместо этого?
Дом Гастингс

11

Желе , 57 байт

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

Попробуйте онлайн!

-5 спасибо Джонатану Аллану .


Сохраните четыре байта, используя заполнитель для пробелов в «сэндвич с мороженым» и используя пробелы для разбиения, например:Oị“¡ḟ¤Y7bh%XO€ḥıṣẎṄṢ°ḊḞİỌĿż0Y⁷ẠỵƈƭV>tÐNY_LɠðṅẒọX?v»Ḳ¤F⁾! y
Джонатан Аллан

... фактически сделать эти пять байтов (я использовал "логово", когда "словарь" есть в словаре):Oị“¡ȥọ⁴ḷæĿɱ}#n#i®ÞSỊ3ƙɼıjṁ)-⁵g7ḥjC?4ƘẠʂ+ḋ¤⁺jṣð£?v»Ḳ¤F⁾! y
Джонатан Аллан

@JonathanAllan спасибо ... подожди, зачем мне это нужно F? о, это потому, что я получаю входные данные в виде строки, а не символа
Эрик Outgolfer

8

C ++, 206 201 198 байтов

Спасибо @sergiol за помощь в сохранении 3 байтов!

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

Попробуйте онлайн!

C 173 байта

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

Ну, это началось как C ++, но теперь это также допустимый C, и некоторые байты можно сохранить, скомпилировав его как C.

Попробуйте онлайн!


1
Моя неудачная попытка сократить его, удалив первую букву в каждой записи: tio.run/…
sergiol

@sergiol Спасибо! Я смог сэкономить три байта после небольшой игры в гольф.
Steadybox

4
#importв с ++? что мне здесь не хватает?
Абхинав Гауниал

@AbhinavGauniyal: IIRC Я думаю, что некоторые предупреждения компиляции посоветовали мне также добавить, #import <cstdio>потому что отсутствие #include <stdio.h>; или, может быть, я ошибаюсь
sergiol

@AbhinavGauniyal Это не стандартный C ++, но, по крайней мере, GCC и MSVC имеют его.
Steadybox

7

JavaScript (ES6), 137 136 байт

Сохранено 1 байт благодаря Нейлу

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

демонстрация


Вы не можете включить пробел в диапазон символов, вероятно, с помощью \ s? не использовал много JS Regex
michi7x7

1
@ michi7x7 Ему нужно, чтобы совпадение заканчивалось заглавной буквой, за исключением случая с Ice Cream Sandwich, хотя ([a-z]| .)+(с сохранением 1 байта) сработало бы даже с Ice Cream Sandwich в середине строки (оно начинало сбоить, когда кодовые имена достигали S хотя).
Нил

@ Хорошо, [a-z\s]+не совпадает с заглавными буквами. Я просто не знаю, сможете ли вы сделать это в JS
michi7x7

@ michi7x7 Так как же это будет работать с Ice Cream Sandwich?
Нил

2
Используйте Ice cream sandwich, как в тестовом примере (хотя это не
заглавный

5

Japt , 81 79 байт

Содержит несколько символов, которые здесь не отображаются.

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

Проверь это


объяснение

Неявный ввод строки символов в верхнем регистре U.

Сжатая строка (все, что находится между обратными чертами) имен, разделенных fпервой буквой и без нее, разделяется ( q) на массив f.

Внутри этого массива мы получаем элемент в index ( g) из Uкода символа s. (Ух, индексная упаковка!)

Мы добавляем это к Uи неявно выводим полученную строку.


1
Приятно. Вы можете сохранить пару байтов, если fвместо этого разделите их на новые
Оливер

@ Оливер: О, хорошо, спасибо :) По моему телефону, иду по улице, так что определенно не получил бы это некоторое время (если вообще).
Лохматый

5

Excel VBA, 137 134 132 байт

Анонимная функция непосредственного окна VBE, которая принимает входные данные в виде ожидаемого типа Variant\Stringи длины, 1содержащие заглавную букву из ячейки, [A1]и выводит их в функцию непосредственного окна VBE

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

-5 байт для изменения пространства в ce cream sandwichс (полукокса 32) , чтобы  (полукокс 160) `` (127) полукокса и удаления запятой разделителя в Splitфункции


4

SOGL V0.12 , 81 байт

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

Попробуй здесь!

Объяснение:

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

Теперь есть более короткая 80-байтовая версия, но я добавил встроенные модули + 2 / -2 из-за этой проблемы: p

Сжатая строка разбита как "cup","cake"," donut eclair fro","yo gingerbread honeycomb ice","_","cream","_","sandwich jelly","bean kit","kat loll","i","pop marsh","mallow"," nougat oreo"для максимального использования английских слов (многие не были в словаре SOGL), сейчас я не могу найти никаких улучшений.


4

> <> , 181 байт

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

Попробуйте онлайн!

Это работает путем автоматической модификации программы, чтобы поместить <перед правильным именем для печати, положение которого определяется значением введенной буквы.


3

Dyalog APL, 158 143 131 байт

1 байт сохранен благодаря @ Zacharý

12 байтов сохранено благодаря @Gil

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

Попробуйте онлайн!

Как?

',,,upcake...' - список слов

','(1↓¨=⊂⊢) - разделить на ','

(⎕A⍳⍵)⊃ - взять с места аргумента в алфавите

⍵, - и приложить к письму


Почему вы описали как сплющить?
Захари

Также {⍵,∊⍬⍬'upcake' 'onut' 'clair' 'royo' 'ingerbread' 'oneycomb' 'ce cream sandwich' 'ellybean' 'itkat' 'ollipop' 'arshmallow' 'ougat' 'reo'[⎕A⍳⍵]}работает на 1 байт меньше!
Захари

@ Zacharý, потому что это ... "микс". хороший! почему ∊, а не ↑?
Уриэль

Потому что тоже сглаживается, но на самом деле сглаживается, а не «смешивается». ↑(1 2)(3 4)НЕ плоский, пока ∊(1 2)(3 4)есть.
Захари

@ Zacharý OP изменил это ... СНОВА.
Уриэль

3

EXCEL, 154 байта

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

Я никогда не думал об использовании Excel таким образом. Отлично. Теперь сделайте это с WORD
tisaconundrum

@tisaconundrum - мы не говорим об этой проклятой вещице; Даже VBA не смог его спасти
Тейлор Скотт

3

C (gcc) , 195 192 190 байтов

-2 байта благодаря @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]);}

Попробуйте онлайн!



2

Haskell, 145 байт

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

3
takeWhileможно fst.spanи dropWhileсоответственно snd.span.
Лайкони

2

Gaia , 110 байт

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

Попробуйте онлайн!

объяснение

:          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

Pyth , 117 116 байтов

Порт моего Python ответа .

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

Попробуй это здесь! или проверить набор тестов

Pyth , 99 байт (70 символов)

-15 байт благодаря @insert_name_here !

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

Попробуй это здесь!


Вы можете сохранить 15 байтов, используя сжатые строки (хотя тогда ответ должен содержать непечатаемые символы).
insert_name_here

@insert_name_here Спасибо.
г-н Xcoder

2

Java (OpenJDK 8) , 128 байт

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

Попробуйте онлайн!


Используя регулярные выражения, 149 байт

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

Попробуйте онлайн!

  • 4 байта сэкономлено на решении регулярных выражений благодаря Кевину Круйссену!

1
Собирался опубликовать один и тот же .splitответ (только с другим разделителем), когда я прочитал задание и не смог найти ответ Java (пока я не перешел на вторую страницу ответов), так что +1. Что касается ответа регулярного выражения, ([a-z]| .)+может быть [a-z ]+, так как вам разрешено выводить «Сэндвич с мороженым» (« Вывод может быть в заглавном регистре (Cupcake) или полностью в нижнем регистре (эклер). Сэндвич с мороженым может быть заглавным, как вам нравится». (Я не ожидал, что это вызовет столько путаницы ...) ")
Кевин Круйссен

2

Кубически , 1047 852 830 байт

Функции, безусловно, помогают гольфу большие программы ...

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

Попробуйте онлайн! Это 830 байтов в SBCS Куба .

  • ~читает ввод, @печатает его. (Это прерывается, когда ввод неверен.)
  • Каждый из +.../...+...=7?6{...}сравнивает входной сигнал с каждым значением ASCII ( C, D, E, Fи т.д.) и выполняет код внутри , {...}если они равны.
  • Каждый блок кода ( {...}) печатает оставшуюся часть имени (первый символ уже напечатан).

Спасибо ASCII от TehPers Кубическому переводчику, что было очень полезно.


1
Это 1060 байт
Конор О'Брайен,


1

Пайк , 117 байт

Порт моего Python ответа .

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

Попробуй это здесь!

Закодированный в виде шестнадцатеричных кодов, новой техники игры в гольф в Pyke, он будет 116 байтов :

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

(Вставьте и проверьте Use hex encoding?).


1
Пайку нужен встроенный Android-релиз, верно?
Эрик Outgolfer

1
@EriktheOutgolfer У него есть покемоны, так почему бы и нет?
мистер Xcoder

1

C # , 147 136 129 байт


Данные

  • Ввод Char c Первая буква названия версии
  • Выходные данные String Полное название версии

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

Ungolfed читаемый

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

Полный код

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

релизы

  • v1.0 - 147 bytes- Исходное решение.
  • v1.1 - -11 bytes- Заимствовал идею Оливье Грегуара .
  • v1.2 - - 7 bytes- Изменен ввод функции с явного на неявный.

Примечания

  • Никто

Можете ли вы что-нибудь сохранить, удалив первую букву из каждого имени и добавив полученную строку из массива к входному символу?
Лохматый

(char c)может быть простоc
LiefdeWen

1

R 169 155 байт

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

1

Dyalog APL, 125 байт

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

Попробуйте онлайн!

Как?

  • ⍵∊⎕A (длинная строка) с 1 для заглавных букв, 0 для строчных / пробелов.
  • +\ Группа (возвращающие числа) ⍵ заглавными буквами.
  • ⎕A[...] Прописная буква, обозначенная цифрой
  • ⍵/⍨⍞= Группа, обозначенная этим номером
  • {...}'...'Установить на длинную строку

Умный подход.
Адам

1

R, 131 , 126 , 123 , 112 , 178 байтов

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

Спасибо за @Mark за сохранение 5 + 8 + 3 байта




1

PowerShell , 136 134 байта

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

Попробуйте онлайн!

Принимает [char]входной символ в нижнем регистре и выводит в нижнем регистре.

-2 благодаря предложению AdmBorkBork -split0вместо -split','.


Вы можете использовать 0в качестве разделителя, а затем -split0сохранить кавычки.
AdmBorkBork

@ AdmBorkBork хорошее предложение, спасибо!
TessellatingHeckler
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.