Яка карта?


30

Вступ

Давно, коли я кодував карткові ігри зі звичайними гральними картами, я вказував номер для кожної карти та закликав функцію з деяким номером, щоб отримати карту. Це дещо надихнуло мене на цей виклик.

Тож для людей, які не знають про гральні карти, колоди карт складаються з 52 карт (по 13 у кожному з чотирьох костюмів, тобто серця, діамантів, піки, клубів). У кожному костюмі є 13 карт - спочатку картки пронумеровані від 2-10, потім Джек (J), Королева (Q), Кінг (К) та Туз (А). Це наказ

Виклик

Завдання полягає в тому, щоб взяти ціле число між 1-52 як вхід і відобразити карту в цій позиції. Але результат повинен бути на словах. Крім того, потрібно підтримувати порядок, тобто спочатку 13 карток будуть Hearts, потім Diamonds, потім Spades та нарешті Clubs.

Наприклад, якщо хтось обирає номер 30. Картка тоді належала б до третього костюму, тобто "Піки". Крім того, це була б четверта картка в костюмі, що означає цифру 5. Отже, ваш висновок у словах повинен бути: five of spadesі він повинен завжди дотримуватися цього формату , тобто спочатку картки, а потім ofі назви костюма на кінець, з необхідними проміжками між ними.

Вхід і вихід

Вхід буде цілим числом між 1-52 (обидва включно). Зауважте, що тут підрахунок починається з 1. Ви можете почати з 0 . Однак ви повинні підтримувати порядок карт, про який було сказано вище. Вашим висновком має бути картка в цій позиції, записана словами. Вам не потрібно обробляти недійсні введення. Крім того, ваш результат може бути великим чи великим регістром.

Нижче наведено перелік усіх можливих входів та їх виходів:

1 -> two of hearts
2 -> three of hearts
3 -> four of hearts
4 -> five of hearts
5 -> six of hearts
6 -> seven of hearts
7 -> eight of hearts
8 -> nine of hearts
9 -> ten of hearts
10 -> jack of hearts
11 -> queen of hearts
12 -> king of hearts
13 -> ace of hearts
14 -> two of diamonds
15 -> three of diamonds
16 -> four of diamonds
17 -> five of diamonds
18 -> six of diamonds
19 -> seven of diamonds
20 -> eight of diamonds
21 -> nine of diamonds
22 -> ten of diamonds
23 -> jack of diamonds
24 -> queen of diamonds
25 -> king of diamonds
26 -> ace of diamonds
27 -> two of spades
28 -> three of spades
29 -> four of spades
30 -> five of spades
31 -> six of spades
32 -> seven of spades
33 -> eight of spades
34 -> nine of spades
35 -> ten of spades
36 -> jack of spades
37 -> queen of spades
38 -> king of spades
39 -> ace of spades
40 -> two of clubs
41 -> three of clubs
42 -> four of clubs
43 -> five of clubs
44 -> six of clubs
45 -> seven of clubs
46 -> eight of clubs
47 -> nine of clubs
48 -> ten of clubs
49 -> jack of clubs
50 -> queen of clubs
51 -> king of clubs
52 -> ace of clubs

Оцінка балів

Це , тому виграє найкоротший код.


1
Чи не за замовчуванням порядок костюмів зазвичай серця, пробіли, алмази, клуби (червоний, чорний, червоний, чорний). Не те, що це важливо для виклику, просто цікавилося, чому це в такому порядку.
Кевін Кройсейсен

3
Він варіюється від гри до гри. Різні ігри дотримуються різних порядків. Також, кажучи про карти, деякі ігри навіть мають туз як найнижчу карту в костюмі.
Маніш Кунду

Чи можу я вивести, two\s\s\sof\sheartsде \sстоїть пробіл? (Зверніть увагу на два додаткових місця.)
абсолютнолюдський

2
@totallyhuman вибачте, але між ними має бути рівно 1 пробіл
Manish Kundu

Відповіді:


31

Python 3 ,  115  90 байт

from unicodedata import*
lambda n:name(chr(n%13+n%13//11+[6,0,4,2][-n//13]*8+127137))[13:]

Безіменна функція, що повертає рядок у верхньому регістрі.

Спробуйте в Інтернеті!

Як?

У символів Unicode є імена. Назви деяких із них схожі на "ГРУНТУВАННЯ КАРТИ ДВА ДОДАТИ", отже, ми можемо отримати символи символу Unicode, що представляють потрібну карту, і зняти перші 13 символів, щоб отримати наш вихід.

Цікаві символи Unicode знаходяться в такому блоці:

            0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
U+1F0Ax     x   As  2s  3s  4s  5s  6s  7s  8s  9s  Ts  Js  x   Qs  Ks  x
U+1F0Bx     x   Ah  2h  3h  4h  5h  6h  7h  8h  9h  Th  Jh  x   Qh  Kh  x
U+1F0Cx     x   Ad  2d  3d  4d  5d  6d  7d  8d  9d  Td  Jd  x   Qd  Kd  x
U+1F0Dx     x   Ac  2c  3c  4c  5c  6c  7c  8c  9c  Tc  Jc  x   Qc  Kc  x                           

Там, де xми не є символами, за якими ми переслідуємо (четверо в Cстовпці - "лицарі"; три F- "жартівники"; один в 0- загальний; решта - зарезервовані символи).

Як такий, ми можемо додати деяку цінність до 0x1F0A1 = 127137 (As), щоб знайти потрібну нам карту.

Додане значення ускладнюється лише трьома речами:

  1. Нам потрібно змінити порядок костюмів (від s, h, d, c до h, d, s, c)
  2. Нам потрібно змінити порядок з рангів (A, 2, ..., K до 2, ..., K, A)
  3. Нам потрібно уникати стовпців без цікавих карток.

Використання опції одноіндексації дозволяє використовувати від'ємне ціле поділ для індексації у масив зсувних рядків для повторного впорядкування масті за допомогою [6,0,4,2][-n//13]*8+(ефективно [48,0,32,16][-n//13]), ми також можемо розмістити тузи в потрібних місцях, n%13+а потім уникнути лицарі в колонці Cз n%13//11+(ефективно (n%13>10)+).


Тільки що я починав відповідь, як це (я впевнений, що моє було б довше), я зазирнув і побачив вашу відповідь. Хороший.
mbomb007

... і ще один байт був там для гри в гольф :)
Джонатан Аллан

13

Perl6 / Rakudo 70 байт

Індекс 0

Використання perl6 -peта без стиснення словника:

chr('🂱🃁🂡🃑'.ords[$_/13]+($_+1)%13*1.091).uniname.substr(13)

Він просто шукає карту в Unicode (починаючи з туза), запитує ім'я та використовує це. Це схожий маршрут (хоча я його тоді не знав!) ​​До відповіді Джонатана Ейткена на Python - тільки я індексую з усіх 4 тузів, а не 4 компенсації від туза піки, і я помножую на 1.091, щоб зробити індекс круглий від лицарського входу в Юнікоді.

Переглянути всі вихідні дані (для вхідних значень від 0 до 51) https://glot.io/snippets/ez5v2gkx83

Відредаговано, щоб впоратися з лицарями в колоді Unicode, тому що Unicode.

Perl6 ♥ Unicode


@JonathanAllan: Він встановлює порядок за допомогою 4-х базових карток (вони знаходяться в необхідному порядку масті), але добре помічений на лицарях - я цього не помічав. Виправлено ціною ще кількох символів.
Філ Х

@JonathanAllan: Існує деяка неточність підрахунку інших відповідей - всі кажуть "байти", коли мають на увазі символи. Ті, хто стискаються, є найбільш кричущими правопорушниками.
Філ Х

3
Я думаю, ви побачите, що ті, у яких є рядки стиснення, що містять те, що представлено як Unicode, насправді мають свої кодові сторінки (це, безумовно, стосується Jelly, Husk, Charcoal & 05AB1E).
Джонатан Аллан

Дякую, я взагалі цього не оцінив.
Філ Х

@PhilH Якщо ви сумніваєтеся, що кількість байтів правильна, ви можете попросити їх надати шістнадцятковий.
користувач202729

9

05AB1E , 54 байти

0-індексований

“»€Å‹¡Šdesž…“#“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí" of "ýsè

Спробуйте в Інтернеті!

Пояснення

“»€Å‹¡Šdesž…“#                                          # push list of suits
              “‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#             # push list of ranks
                                           â            # cartesian product
                                            í           # reverse each
                                             " of "ý    # join on " of "
                                                    sè  # index into cardlist with input

@PhilH 05AB1E використовує кодову сторінку , як і більшість відповідей на мовах для гольфу тут на PPCG
dzaima

Вибачте, не зрозумів, що це так часто.
Філ Х

@PhilH так, багато хто зробив точно так само, думаючи, що показаний унікод - це фактично оцінка подання. Однак я хотів би, якби тут було завжди завжди посилатися на кодову сторінку в заголовку (як на мою відповідь SOGL)
dzaima

@dzaima: Я робив це на деякий час, але все ж отримав коментарі, тому я зупинився. Але я згоден, було б непогано, якби він був включений до шаблону TIO.
Емінья

LOL, я не дивився на цю відповідь ... “»€Å‹ spadesž…“#"of "ì“‚•„í†ìˆÈŒšï¿Ÿ¯¥Š—¿—ÉŸÄ‹ŒÁà“#âí»- 54 байтів!
Чарівний восьминога Урна

6

Python 2 , 167 148 байт

n=input();print 'two three four five six seven eight nine ten jack queen king ace'.split()[n%13]+' of '+['hearts','diamonds','spades','clubs'][n/13]

Нульова індексація.

Спробуйте в Інтернеті!

РЕДАКТУВАННЯ: Бубблер зробив велику точку, використовуючи метод розділення (і надавши коротшу відповідь). На другому блоці за допомогою split () виходить однакове число байтів.


Ласкаво просимо! За замовчуванням подання має обробляти вхід і вихід; див . підсумок правил Python .
xnor

Зрозумів, дякую за вказівку!
PHC

1
141 байт з лямбда і спліт. Спробував переплутати символи заради [n%13::13]чи чогось, але не пощастило.
Бубон

Дякую за те, що я зрозумів, що спліт може врятувати кілька байт. Ще один байт відходить із цілим поділом за замовчуванням Python2.
PHC

4
140 байт, використовуючи відсоткові позначення для виділення s; xnor вказав на це у чаті.
Бубон

6

R , 154 байти

paste(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),"of",rep(c("Hearts","Diamonds","Spades","Clubs"),e=13))[scan()]

Спробуйте в Інтернеті!

Бере вхід (1-індексований) від STDIN і з source(...,echo=T)друкує результат на консоль.

Це не дуже, Але воно в 2 байти коротше, ніж найкраще рішення, яке я міг би використовувати outer(представлений нижче), тому нехай це буде нагадуванням для вивчення іншого підходу!

paste(                          # concatenate together, separating by spaces,
                                # and recycling each arg to match the length of the longest
el(strsplit("Two,...",",")),    # split on commas and take the first element
"of",                           # 
 rep(c("Hearts",...),           # replicate the suits (shorter as a vector than using strsplit
               e=13)            # each 13 times
                    )[scan()]   # and take the input'th index.

R , 156 байт

outer(el(strsplit("Two,Three,Four,Five,Six,Seven,Eight,Nine,Ten,Jack,Queen,King,Ace",",")),c("Hearts","Diamonds","Spades","Clubs"),paste,sep=" of ")[scan()]

Спробуйте в Інтернеті!

По суті такий же, як і вище; однак, outerбуде виконувати переробку належним чином, але потрібно встановити sep=" of "для pasteзробленого це просто волосся довше.


6

Emojicode , 202 байти

🍇i🚂😀🍪🍺🐽🔫🔤two.three.four.five.six.seven.eight.nine.ten.jack.queen.king.ace🔤🔤.🔤🚮i 13🔤 of 🔤🍺🐽🔫🔤hearts.diamonds.spades.clubs🔤🔤.🔤➗i 13🍪🍉

0 індексовано. Спробуйте в Інтернеті!

Пояснення :

🍇		start of the closure block
  i🚂		 closure takes an integer argument i
  😀		 print:
    🍪		  concatenate these strings:
      🍺🐽🔫🔤...🔤🔤.🔤🚮i 13  [a]
      🔤 of 🔤
      🍺🐽🔫🔤...🔤🔤.🔤➗i 13  [b]
    🍪
🍉

[a]:
🍺		tell Emojicode to dereference without checking
🐽		 get the nth element of the following array
  🔫		  create an array using the following string and separator
    🔤...🔤
    🔤.🔤
  🚮 i 13	n, i mod 13

[b]
🍺🐽🔫🔤...🔤🔤.🔤➗i 13
same but with ⌊i÷13⌋

10
Якось правильно здається, що "перенаправлення без перевірки" - це кухоль пива.
maxathousand

6

Excel, 156 байт

=TRIM(MID("two  threefour five six  seveneightnine ten  jack queenking ace",1+MOD(A1,13)*5,5))&" of "&CHOOSE(1+(A1/13),"hearts","diamonds","spades","clubs")

Картки від 0-51. На жаль, у Excel немає функції перетворення 1на "one"...

Використання TRIMі MIDкоротше, ніж використання CHOOSEдля номінальних значень, але довше, ніж використання CHOOSEдля костюма.


Розумно зі MID()словами та поєднанням!
BruceWayne

5

Java 8, 141 байт

n->"two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]+" of "+"hearts;diamonds;spades;clubs".split(";")[n/13]

Вхід 0-індексований.

Пояснення:

Спробуйте в Інтернеті.

n->         // Method with integer parameter and String return-type
  "two;three;four;five;six;seven;eight;nine;ten;jack;queen;king;ace".split(";")[n%13]
            //  Take `n` modulo-13 as 0-indexed card value
   +" of "  //  append " of "
   +"hearts;diamonds;spades;clubs".split(";")[n/13]
            //  append `n` integer-divided by 13 as 0-indexed suit

4

Котлін , 154 152 140 байт

i->"two,three,four,five,six,seven,eight,nine,ten,jack,queen,king,ace".split(',')[i%13]+" of ${"heart,diamond,spade,club".split(',')[i/13]}s"

Спробуйте в Інтернеті!

Оновлено, щоб використовувати лише лямбда-вираз.


Це зовсім чудово.
Нісса

2
Ласкаво просимо до PPCG! Спочатку мене відштовхували мови гри в гольф, але потім десь хтось сказав мені "Це справді найкраща відповідь на кожну перемогу на кожній мові ", і я зрозумів, що це змагання проти інших (ваших язиків тут) гольфістів. Продовжуйте це, і я сподіваюся, що вам сподобається тут час.
Джузеппе

У лямбдів у Котліні (на відміну від Java) завжди є провідна {та остання}. То, можливо, ви повинні включити їх і порахувати у своєму рішенні?
Роланд Шмітц

3

JavaScript ES6, 124 118 байт, 0-індекс

F= x=>(h=btoa`O
?NÞ{ñhº¿Å÷¿J,IëÞñ"6)Þý7§üô.yéÿ*)àüÿÿÿæ«·÷bjj'wû)i׿r[`.split`/`)[x%13]+` of ${h[x/13|16]}s`

console.log (F(51))

Версія Base64

eD0+KGg9YnRvYWBPCj9OGt578Wi6v8WK979KLH9J696f8SKCG382Kd79N6f8lpyT9C556f8qKeD8Bx7///+F5qu392Jqaid3+ylp179yW5tgLnNwbGl0YC9gKVt4JTEzXStgIG9mICR7aFt4LzEzfDE2XX1zYA==

онлайн-тест здається розбитим
l4m2

не працює в хромі
Luis felipe De jesus Munoz

працює над Firefox @Luis felipe De
jesus

Ваша версія 118 байт розміром 107 символів 136 байт тут: mothereff.in/byte-counter
Phil H

1
@PhilH, якщо ви декодуєте заданий base64 коду до списку байтів (наприклад, використовуючи цей ), ви побачите, що він фактично призводить до згаданих 118 байт.
dzaima

3

Стакс , 58 57 56 байт

î↑à■?R╢8«E▄¡╔ÿ•L╫<<⌠ï∞∟⌡♪Ös1"TàLα╥▀¢¡◄└%≈δñM;;}'░o=⌡»╬í√

Запустіть і налагоджуйте його

Ось коментоване представлення тієї самої програми, яке прокоментувало. Він сильно використовує стиснуті літерали Стакса. Вхід 0-індексований. Це алгоритм 05AB1E Emigna.

`SsUI'S~pTU5T@T^Ez+`j   suits
`fV:l7eTkQtL*L2!CZb6u[&YNO4>cNHn;9(`j   ranks
|*  cross-product
@   index with input
r   reverse pair
`%+(`*  join with " of "

Виконати цей


3

Bash, 133 байт

V=(two three four five six seven eight nine ten jack queen king ace hearts diamonds spades clubs)
echo ${V[$1%13]} of ${V[$1/13+13]}

Вибір використання 0 відповідно до заданої опції, що підтримує 0 (два серця) до 51 (туз клубів)


Ласкаво просимо до PPCG!
Мартін Ендер

3

Лушпиння , 52 байти

;↔!Πmw¶¨×‼sÿẋδẎ₆ṡ⁷Ḃ6‰fωθ»&⌈θƒV₆x⁵▼Ëġ`nıEṅ'jĊk⁸"eïkÄc

Спробуйте в Інтернеті!

Я завжди радий демонструвати систему стиснення струнних струсів Хука: D

Пояснення

Більшість програми ( ¨відтепер) - це, очевидно, стислий рядок. Коли не стиснений, він перетворюється на:

hearts diamonds spades clubs
of
two three four five six seven eight nine ten jack queen king ace

Програма тоді:

;↔!Πmw¶¨…
       ¨…    The previous string
      ¶      Split on lines
    mw       Split each line into words
             - we now have a list of lists of words
   Π         Cartesian product of the three lists
             - with this we obtain all possible combinations of suits and values
               with "of" between the two (e.g. ["spades","of","king"])
  !          Pick the combination at the index corresponding to the input
 ↔           Reverse it, so words are in the correct order
;            Wrap it in a list. Result: [["king","of","spades"]]

Для пояснення залишилося кілька речей:

  • Ми будуємо картки з костюмами перед значеннями через те, як працює декартовий продукт Π: якби ми це зробили навпаки, список карток був би впорядкований за значенням (тобто два сердечка, два алмази, дві піки, дві клуби, три серця ...). Як наслідок, ми маємо змінити результат.

  • Результат програми - двовимірна матриця рядків. Це автоматично надруковується Husk у вигляді єдиного рядка, побудованого шляхом з'єднання рядків матриці з новими рядками та комірок з пробілами. Причина, по якій ми будуємо цю матрицю замість того, щоб використовувати більш просту w(об'єднати список слів з пробілами), полягає в тому, що якщо використовується wтип inferencer, то вказується на іншу інтерпретацію програми, що дає інший результат.


2

mIRCScript , 157 байт

c echo $token(ace two three four five six seven eight nine ten jack queen king,$calc(1+$1% 13),32) of $token(clubs spades diamonds hearts,$calc(-$1// 13),32)

Завантажте в якості псевдоніма, а потім використовувати: /c N. mIRC є 1-індексованим, тому поділ підлоги (//) на від'ємне значення вхідного сигналу виробляє від -1 до -4, як потрібно.



2

Haskell , 132 байти

(!!)[v++" of "++s|s<-words"hearts diamonds spades clubs",v<-words"two three four five six seven eight nine ten jack queen king ace"]

Спробуйте в Інтернеті!

Анонімна функція, що використовує розуміння списку для побудови всіх комбінацій масті та значення та індексацію в отриманий список із введенням.


2

F #, 174 168 байт

Видалено пробіл, як зазначив Маніш Кунду. Спасибі!

let c x=["two";"three";"four";"five";"six";"seven";"eight";"nine";"ten";"jack";"queen";"king";"ace"].[(x-1)%13]+" of "+["hearts";"diamonds";"spades";"clubs"].[(x-1)/13]

Спробуйте в Інтернеті!

Буду чесно - я новачок у коді гольфу, тому не знаю, чи доцільніше відповідати з такою чистою функцією, як ця (з параметрами, але без вводу-виводу) або з робочим блоком коду з користувачем I / O.


1
-4 байти , видаливши лише непотрібні пробіли
Маніш Кунду

Пробіл повністю пройшов повз мене. Добре помічений! Дуже дякую!
Ciaran_McCarthy

2

Октава , 155 153 151 150 байт

@(x)[strsplit(' of ,s,heart,diamond,spade,club,ace,two,three,four,five,six,seven,eight,nine,ten,jack,queen,king',','){[mod(x,13)+7,1,ceil(2+x/13),2]}]

Спробуйте в Інтернеті!

Це створює рядок, починаючи з ' of 'і 's', потім всі костюми, за якими слідують усі звання. Цей рядок розділяється комами на окремі рядки. Костюми стоять перед званнями, оскільки, оскільки це економить байт при створенні індексів. Після цього ми індексуємо його за допомогою квадратних дужок із такими показниками:

{[mod(x,13)+7,1,ceil(2+x/13),2]}

що є званням, за ним йде перший елемент ' of ', за ним йде костюм, за яким 's'.

Прийняття 's'як частини костюмів ( hearts,diamonds,spades,clubs) замість окремої струни - це точно така ж довжина, але менш весело.

Розбиття на роздільник за замовчуванням дозволить заощадити 4 байти в strsplit-call, але пробіли навколо ' of 'буде видалено, і їх потрібно буде додати вручну, коштуючи більше байтів.


2

V , 154 147 144 142 байт

-7 байт завдяки DJMcMayhem

13i1heart
2diamond
3spade
4club
ÚGxCtwo
three
four
five
six
seven
eight
nine
ten
jack
queen
king
aceH$A of 012j$d4ñ13jPñÍ «/ 
{ÀjYHVGpAs

Спробуйте в Інтернеті!

Hexdump:

00000000: 3133 6931 6865 6172 740a 3264 6961 6d6f  13i1heart.2diamo
00000010: 6e64 0a33 7370 6164 650a 3463 6c75 620a  nd.3spade.4club.
00000020: 1bda 1647 7843 7477 6f0a 7468 7265 650a  ...GxCtwo.three.
00000030: 666f 7572 0a66 6976 650a 7369 780a 7365  four.five.six.se
00000040: 7665 6e0a 6569 6768 740a 6e69 6e65 0a74  ven.eight.nine.t
00000050: 656e 0a6a 6163 6b0a 7175 6565 6e0a 6b69  en.jack.queen.ki
00000060: 6e67 0a61 6365 1b16 4824 4120 6f66 201b  ng.ace..H$A of .
00000070: 3016 3132 6a24 6434 f131 336a 50f1 cd20  0.12j$d4.13jP.. 
00000080: ab2f 200a 7bc0 6a59 4856 4770 4173       ./ .{.jYHVGpAs

Ось ярлик для сортування: Спробуйте його в Інтернеті! Завжди радий бачити когось нового, використовуючи V :)
DJMcMayhem

Ось кілька порад: 1) « == \+2)12dj == 13D
DJMcMayhem

Спасибі! :) А як мені користуватися ò? Я намагався ò13j0Pòзамість цього 4ñ13j0Pñ, але це не закінчилось
октюполь

Насправді я теж спробував це. Я не впевнений, чому це не припиняється. Можливо, це тому, що він не потрапляє до дна, тому що Pдодає нові рядки? Також ви впевнені, що вам потрібно 0в цій частині? Мені здається, що це, мабуть, спрацювало б і без
DJMcMayhem

О, це справді так. І ти маєш рацію, то 0непотрібне
октюполь

2

C # , 219 207 202 197 байт (0 індексовано)

static string O(int i){string[]s={"two","three","four","five","six","seven","eight","nine","ten","jack","queen","king","ace","hearts","diamonds","spades","clubs"};return s[i%13]+" of "+s[i/14+13];}

завдяки публікаціям від @Ciaran_McCarthy та @raznagul

Бере вхід int I, віднімає 1, щоб відповідати 0 індексації рядкового масиву і виводить число на основі I mod 13 та масті на основі i / 14 + 13.

працює досить добре для мого гольфу другого коду, просто цікаво, чи не можу я скоротити його за допомогою LINQ чи чогось іншого.


2
Вниз до 200 , видаливши i--; а замість цього - ii в індексі першого масиву (я зменшується перед модулем, і залишається таким для наступного поділу), видаляючи масив, "з" (це не потрібно?) та видаляючи дужки навколо заяву повернення та додавання пробілу між поверненням та s [...
Ciaran_McCarthy

1
Завдання дозволяє вводити вхід 0-індексувати, щоб його i++можна було повністю видалити. Перетворивши функцію на лямбда, я знизив її до 178 байт .
raznagul

2
Початково я придумав відповідь на 163 байти (див. Посилання вище). Я вирішив не публікувати його, оскільки відповідь на Java від 1 до 1 @KevinCruijssen з Java ще буде коротшою. Можливо, пізніше я спробую придумати відповідь Linq лише заради того, щоб мати її. Але я сумніваюся, що це буде коротше. Тим більше, що Linq починає з 18-байтного дефіциту для using-Statement. Все одно +1 від мене.
raznagul

Дякуючи обом Ciaran_McCarthy, який розгалужив ваш внесок, отримавши його до 202 зараз, повідомте мені, якщо ви бачите щось інше, що може бути додатково поле для гольфу
James m

1
У вас все ще є зайве "of"в масиві.
raznagul

2

PowerShell , 207 192 182 174 165 163 161 157 байт

0-індексовано

$args|%{(-split'two three four five six seven eight nine ten jack queen king ace')[$_%13]+' of '+('hearts','diamonds','spades','clubs')[$_/13-replace'\..*']}

Спробуйте в Інтернеті!

4 байти збережено завдяки AdmBorkBork в коментарях


Ви можете ввімкнути -splitпробіл, щоб зберегти 6 байт -split'two three four five six seven eight nine ten jack queen king ace'та інший байт, використовуючи вбудовану заміну замість підлоги $_/13-replace'\..*'
AdmBorkBork

@AdmBorkBork Дякую за поради! Як ви отримуєте 6 байт із зміни -split? Я бачу лише економію 3 байти. Здається, що ще потрібні круглі дужки, тому я просто видаляю "," і повторно замовляю решту.
Нік Вайс

Я не впевнений, як я придумав 6, це справді лише економія 3, хаха.
AdmBorkBork






1

Javascript 149 143 140 байт

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]

-3 біта завдяки @rick hitchcock

a=_=>"two three four five six seven eight nine ten jack queen king ace".split` `[_%13]+' of '+["hearts","diamonds","spades","clubs"][_/13|0]
console.log(a(14))
console.log(a(34))
console.log(a(51))
console.log(a(8))
console.log(a(24))


1
Збережіть 3 байти, не розбиваючи другий масив і не індексуючи його [_/13|0]. Наприклад: ["hearts","diamonds","spades","clubs"][_/13|0]
Рік Хічкок

Я не думаю, що вам це потрібно, a=оскільки ваша функція не є рекурсивною.
Олівер


1

Japt , 91 86 байт

0-індексований.

Я використовував інструмент, написаний @Shaggy для створення стислих списків.

`{`twodÈ(‚fÆfivÀ£xç P ightdÍÂdȈjackdquÁÈkˆg»­`qd gU}  {`Ê#tsk¹aÚˆäi£kclubs`qk gUzD

Спробуйте в Інтернеті!

Пояснення:

Перший стислий рядок містить значення карт, розділених на d. Другий стислий рядок містить ранги картки, розмежовані на k.

Ці знаки були вибрані за допомогою інструмента Shaggy, який генерує рядок, обмежений знаком, який оптимально стискається за допомогою shoco (стиснення, яке використовує Japt). Це дозволяє нам створити список значень карт та рангів.

`Для декомпресії цих рядків ми використовуємо backticks , потім розділяємо рядок за допомогою qнаступного знака для поділу на.

Після того як у нас є списки, ми відображаємо значення карт, потім отримуємо індекс введення. Важливо зауважити, що Japt обертає свої індекси, тому нам не потрібно модулювати на 13.

На кожному елементі ми прокручуємо ряди карт. Індекс ми отримуємо, поділивши вхід на 13.

Після того, як у нас є обидва елементи, ми з'єднуємо їх " of ", що створює заключний рядок.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.