Орео? Ні ... Льодяник, можливо?


46

З 2009 року кодові назви версій Android мають кондитерські теми. Android 1.5 - це кекс, Android 1.6 - пончик, 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 назва версії коду.

Технічні умови

  • Застосовуються стандартні правила вводу / виводу .
  • Стандартні лазівки будуть заборонені .
  • Ви можете вибрати або підтримувати введення з малих літер, або вводити великі регістри, або навіть обидва.
  • Вихід може бути в титульному регістрі ( 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 тут просто неймовірно.
Ерік Аутгольфер

Джеллі все ще б’є це: радість: codegolf.stackexchange.com/a/140092/73675
Хьюго

14

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

Сценарій кодується як Base64, оскільки містить спеціальні (дивні) символи.

Приймає букву кодового імені Android лише в малій літераті як її перший позиційний параметр. Повертає повне кодове ім'я також у малому регістрі .

CiPBUeICicG5tJ8W5a0Pc/hYuw7hkNMSIYkAPjARkdgFrdbh3NJgTmB4gRPiiQDJAaOyBH4ki14C
QDeKRNQJ8IJYER411DAnx0SO4CAKYmFzZTMyICQwfHRyICdBLVo0NwonICdhLXoKICd8Z3JlcCBe
JDEK

Пояснення:

#�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 для заміни символу пробілу ). Серед його особливостей, він починається з символу нового рядка та хеша ( #), тому він веде себе як коментар і, отже, не виконується інтерпретатором.

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


Крім того , і йти трохи не по темі, я думаю , що Google не в безпосередньо рекламувати комерційні продукти в Android кодових.


2
Приємно, це дійсно класна відповідь! Ласкаво просимо на сайт :)
DJMcMayhem

Ще одна відповідь Баша: codegolf.stackexchange.com/a/140147/41835
Геліо

1
Ця версія є помилковою, принаймні в моїй системі (bash 4.4.12, coreutils 8.27). Бо fвін виводить два рядки: один з froyoта інший із загадковим fgeyltmuzteibno.
MarSoft

1
@MarSoft: Дякую! Виправлено. Шкода, що зараз мені потрібно більше байта.
Геліо

@MarSoft: Вирішено! Тепер з тими ж байтами!
Геліо


11

Bash + Core Utils (греп): 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
Джонатан Аллан

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

@JonathanAllan дякую ... зачекайте, навіщо мені це потрібно F? о, це тому, що я отримую введення як строка не char
Erik the 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в c ++? чого я тут пропускаю?
Абхінав Гауніял

@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 Йому потрібно, щоб матч зупинився на великій літери, за винятком випадків у сендвічах з морозивом, хоча ([a-z]| .)+(збереження 1 байта) буде працювати навіть із сендвічами з морозивом у середині рядка (він почне виходити з ладу, коли кодові імена досягнуть S хоча).
Ніл

@Neil добре, [a-z\s]+не відповідає великим літерам. Я просто не знаю, чи можна це зробити в JS
michi7x7

@ michi7x7 Так як би це працювало з морозивом з морозивом?
Ніл

2
Використовуйте Ice cream sandwich, як у тестовій справі (хоча це не Заголовок справи)
michi7x7

5

Japt , 81 79 байт

Містить кілька символів, які тут не відображатимуться.

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

Перевірте це


Пояснення

Неявне введення великого рядка символів U.

Стислий рядок (все між задніми позначками) імен, відокремлений fпершою літерою без і не розділяється ( q) на масив на f.

Всередині цього масиву ми отримуємо елемент у коді символів s index ( g) U. (Так, індексація!)

Ми додаємо це до Uта неявно виводимо отриманий рядок.


1
Приємно. Ви можете зберегти пару байт, якщо fзамість них розділити, якщо нові рядки: ethproductions.github.io/japt/…
Олівер

@Oliver: О, приємно, дякую :) По моєму телефону, так безумовно, не пішов би по вулиці (якби взагалі).
Кудлатий

5

Excel VBA, 137 134 132 байт

Anonymous 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з (char 32) до  (char 160) `` (char 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

Діялог 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⍳⍵)⊃ - взяти з місця аргументу в алфавіті

⍵, - і додати до листа


Чому ви назвали це згладженим?
Zacharý

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

@ Zacharý, тому що це ... "змішати". хороший! чому ∊, а не ↑?
Уріель

Тому що також сплющується, але насправді сплющується і не «змішується». ↑(1 2)(3 4)НЕ плоский, поки ∊(1 2)(3 4)є.
Zacharý

@ 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 не міг її врятувати
Тейлор Скотт



2

Haskell, 145 байт

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

3
takeWhileможе бути fst.spanі dropWhileвідповідно snd.span.
Лайконі

2

Гая , 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 від TechPers для кубічного перекладача, що було дуже корисно.


1
Це 1060 байт
Conor O'Brien


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 версії, чи не так?
Ерік Аутгольфер

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

1

C # , 147 136 129 байт


Дані

  • Введення Char c Перша літера назви версії
  • Вихід String Повна назва версії

Гольф

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

Безумовно

c =>
    c + "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'), 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

Діалог 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.