Порахуйте сірники


20

Більшість людей тут знайомі із семи сегментними дисплеями, які також використовуються у головоломках. Нижче наведені цифри 0через 9та листи aчерез z, за винятком того k,m,t,v,w, написані в цьому форматі.

 _        _   _         _    _    _    _    _
| |   |   _|  _|  |_|  |_   |_     |  |_|  |_|
|_|   |  |_   _|    |   _|  |_|    |  |_|   _|

 _       _      _  _  _                        _   _      _               _
|_| |_  |   _| |_ |_ |   |_  |   | |   _   _  |_| |_|  _ |_      |_| |_|  _|
| | |_| |_ |_| |_ |  |_| | | | |_| |_ | | |_| |     | |   _| |_| | |   | |_

Завдання тут проста. З огляду на рядок введення, виведіть кількість відповідних рядків, необхідних для представлення цього рядка. Якщо рядок містить символ поза вищевказаним поданням, проігноруйте його (порахуйте його як 0).

Наприклад, для введення 53потрібна загальна кількість 10сірників, 5для 5і 5для 3, тому вихід є 10.

Для введення helloнеобхідні загальні 19сірники h (4), e (5), l (3), l (3), o (4), тому вихід є 19.

Для наочності, ось такі сірники, необхідні для створення кожного символу:

0 -> 6
1 -> 2
2 -> 5
3 -> 5
4 -> 4
5 -> 5
6 -> 6
7 -> 3
8 -> 7
9 -> 6
a -> 6
b -> 5
c -> 4
d -> 5
e -> 5
f -> 4
g -> 5
h -> 4
i -> 2
j -> 4
l -> 3
n -> 3
o -> 4
p -> 5
q -> 5
r -> 2
s -> 5
u -> 3
x -> 5
y -> 4
z -> 5

Тепер для повороту, і їх два.

  • Перший полягає в тому, що вхід вважається чутливим до регістру. Тобто, Aі aобидва повинні розраховувати на 6сірники, хоча візуальне зображення виглядає як великі регістри A.
  • Ваш бал - це ваш вихідний код, виконаний за цим алгоритмом, плюс довжина вихідного коду в байтах, чим нижче, тим краще. Наприклад, якби ваш вихідний код був abc123, ваш результат буде 6+5+4+2+5+5 = 27 + 6 = 33. Якщо ваш вихідний код був #&@()*, ваш рахунок буде 0 + 6 = 6.

Приклади введення / виводу

0    -> 6
53   -> 10
111  -> 6
112  -> 9
8888 -> 28
hello -> 19
PPCG  -> 19
Programming Puzzles & Code Golf -> 99
#&()mt!!~ -> 0
*DḌƤÆE%Ḅċ0 -> 16

Правила

  • Якщо можливо, ви можете припустити, що введення / вихід відповідатиме вашому рідному типу Integer.
  • Введення та вихід можуть бути задані будь-яким зручним способом .
  • Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
  • Стандартні лазівки заборонені.

2
T зазвичай пишеться як |_\n|_(малі t)
12Me21

@ 12Me21 Я думав зробити щось подібне, але не відчував, що це виглядає досить близько до листа, тому я його покинув.
AdmBorkBork

Що з вашою літерою X (H)? (ну, я не має значення, коли є відповідь.)
12Me21,

Для знаків на вулиці [0-9a-z], чи слід рахувати 0 сірників? Це те, що я розумію з Вашого рахунку - це ваш вихідний код, що працює за цим алгоритмом , плюс довжина вашого вихідного коду в байтах .
Ерік Аутгольфер

@EriktheOutgolfer Так, це правильно.
AdmBorkBork

Відповіді:


8

Python 2 , 97 байт + 237 збігів = 334

lambda w:sum(map(('1ir'*2+'7lnu'*3+'4cfhjoy'*4+'235bdegpqsxz'*5+'069a'*6+'8'*7).count,w.lower()))

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

Це працює, генеруючи рядок, де кожен символ, що може будуватись, відображає однакову кількість матриць, необхідних для створення цього символу


+'069a8'*6+'8')Замість одного символу можна зберегти один символ +'069a'*6+'8'*7).
xbarbie

@xbarbie дійсно, але це буде рости відлік матчу, в результаті чого +3 бали
штанга

6

Perl 5 с -pF, 95 байт + 14, 109

eval~"Û£Ô„…ÊÏÉÎÍÍÊÌÊËËÊÊÉÉÈÌÇÈÆÉžÉʜ˛ʚʙ˘ʗ˖͕˓̑ÌËÊŽÊ͌ʊ̇ʆËÂÐÑИ‚ÒÁ„Ô“œ‚™¿¹"}{

Це еквівалентно:

$\+={z506122535445566738796a6b5c4d5e5f4g5h4i2j4l3n3o4p5q5r2s5u3x5y4=~/./g}->{+lc}for@F

але за допомогою ~оператора ми можемо використовувати високобайтові символи і уникати безлічі символів, не втрачаючи дійсно байтів.

І все-таки досить далеко за рахунок Тона, навіть за сприяння!

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

Це рішення містить недруковані файли, тому ось зворотний шістнадцятковий дамп, щоб перевірити кількість байтів:

00000000: 6576 616c 7e22 dba3 d4c2 8485 cacf c9ce  eval~"..........
00000010: cdcd cacc cacb cbca cac9 c9c8 ccc7 c8c6  ................
00000020: c99e c99d ca9c cb9b ca9a ca99 cb98 ca97  ................
00000030: cb96 cd95 cb93 cc91 cc90 cb8f ca8e ca8d  ................
00000040: cd8c ca8a cc87 ca86 cbc2 81d0 d1d0 9882  ................
00000050: d2c1 84d4 939c 8299 908d bfb9 227d 7b    ............"}{

Чому }{? Відкиньте його і -nваріант. Також ви забудете +lcзамість lc():-)
Тон Євангелія

@TonHospel Goddammit! Я навіть переглянув обидва наші дописи, і я не міг згадати, на якому дописі я його бачив і +не одразу приходить у голову! Мені потрібно nна своїй машині і забути, я можу її скинути!
Дом Гастінгс

Вибачте, я пропустив помилку. Я мав на увазі "кинь }{і -p" (і заміни його на те, -nякщо твоя перла все ще потрібна. На сьогодні це все одно не
рахується

@TonHospel Я не оновлював свій код до останнього, ой ...
Дом Хастінгс

6

JavaScript (ES6), 198 (102 байти + 96 сірників)

Збережено 5 балів завдяки @ l4m2

v=>[...v].map(w=>t+=('{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'[parseInt(w,36)]+v).charCodeAt()%9,t=+[])|t

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

Як?

Ми використовуємо код ASCII по модулю 9 символів, який не додає жодного штрафу для кодування чисел відповідних рядків.

 char. | code | modulo 9
-------+------+-----------------
   ~   |  126 |   0
   v   |  118 |   1  (not used)
   w   |  119 |   2
   ]   |   93 |   3
   ^   |   94 |   4
   _   |   95 |   5
   {   |  123 |   6
   |   |  124 |   7

Ми не повинні турбуватися про цю справу, оскільки parseInt()це нечутливе до регістру.

Для символів, які не відповідають [0-9A-Za-z] , parseInt()повернення NaNта пошук рядків призводять до undefined. Після примушування до рядка "undefined".charCodeAt()повертає код ASCII "u", який дорівнює 117 . Зручно, 117 модуль 9 дає 0, як очікувалося.


v=>[...v].map(w=>t+='~{w__^_{]|{{_^__^_^w^~]~]^__w_~]~~_^_'.charCodeAt(1+parseInt(w,36))%9,t=+[])|tНа 1 менше
l4m2

5

Желе , 42 байти + 0 сірників = 42 бали

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’×/ṚṚæ.ċЀØW$

Дякуємо @JonathanAllan за -2 бали!

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

Як це працює

“ṄḟṭkɗØæ⁶ṡ“£ƈṠ¤żȥṬ}ė$t¿ƬⱮȷ|çƓ’

Літерали, які починаються і закінчуються розщепленням , замінюють решта символів їхніми індексами на кодовій сторінці Jelly, потім перетворюють з біективної бази 250 в ціле число.

Цей конкретний буквальний код

[3096734725226860846495, 211369264881118657055472842435156679693648].

×/ зменшується шляхом множення, врожайності

654554542403034552503005456545545424030345525030054562554563760

(Кодування цього цілого числа безпосередньо дозволить заощадити 6 байтів, але коштуватиме 28 матчів.)

ṚṚперевертається двічі; перший дзвінок просуває ціле число до його цифрового масиву. Це дає

[6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 5, 4, 5, 5, 4, 5, 4, 2, 4, 0, 3, 0, 3, 4, 5, 5, 2, 5, 0, 3, 0, 0, 5, 4, 5, 6, 2, 5, 5, 4, 5, 6, 3, 7, 6, 0]

ċЀØW$підраховує ( ċ) виникнення кожного ( Ѐ) символу "A ... Za ... z0 ... 9_" ( ØW) у вхідному рядку.

Нарешті æ.береться крапковий добуток, помноживши кожну кількість символів на відповідну вартість у сірниках, а потім взявши суму.


Використовуйте факторизацію великої кількості, щоб зберегти один байт і декомпресію бази та модуль, а Dне зберегти інший. Спробуйте в Інтернеті
Джонатан Аллан

байт ... помилка точка :)
Джонатан Аллан

1
І ще один с Ɗ. Спасибі!
Денніс

3

Perl 5 -p , 90 64 код + 9 eval джгутів + ​​14 сірників = 87

Замініть шістнадцяткові коди їх буквальним 1-байтним варіантом ( не UTF-8, як намагається TIO) на заявлений рахунок

eval~"\xdb\xa3\xd4\xc2\x86\xd0\xcf\xd2\xc6\x9e\xd2\x85\xd0\xc9\xcd\xca\xca\xcb\xca\xc9\xcc\xc8\xc9\xc9\xca\xcb\xca\xca\xcb\xca\xcb\xcd\xcb\xcf\xcc\xcf\xcc\xcb\xca\xca\xcd\xca\xcf\xcc\xcf\xcf\xca\xcb\xca\xd0\x8d\x99\x90\x8d\xdf\x93\x9c\xc2\x81\xd0\xd1\xc0\xd0\x98"}{

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

Код всередині доповненого рядка:

$\+=y/0-9a-z/625545637665455454240303455250300545/rfor lc=~/.?/g

3

Желе , 34 байти + 3 сірники = 37

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ

Монадічне посилання, що приймає список символів і повертає ціле число.

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

Як?

Працює подібно до відповіді Дженніса «Желе», але вклав достатньо зусиль, і я вважаю, що це вимагає ще однієї відповіді. Основна відмінність полягає в тому, що в нижньому регістрі вхід коштує три матчі ( Œlмістить an l), що дозволяє використовувати набагато меншу кількість для створення масиву витрат. Хитрий біт знаходив спосіб побудувати це число без збігів, залишаючись лаконічним.

ØWурожайність, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"тому підрахунок вхідних випадків із нижчим регістром завжди починається з 26 нулів. Ми можемо змінити це і виконати крапковий добуток із масивом довжиною 37 замість довжини 63.

⁽[ɱד®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’‘ḤṚæ.ŒlċЀØWṚƊ - Link: list of characters
⁽[ɱ                                - literal                                     23913
    “®-&]Ṙṙ£⁺ÐĊṂⱮɼ ’               - literal         136861653160003879166772353166783
   ×                               - multiply  = 3272772712015172762515027281277281879
                    ‘              - increment = 3272772712015172762515027281277281880
                     Ḥ             - double    = 6545545424030345525030054562554563760
                      Ṛ            - reverse (implicit decimal list) -> [0,6,7,3,6,5,4,5,5,2,6,5,4,5,0,0,3,0,5,2,5,5,4,3,0,3,0,4,2,4,5,4,5,5,4,5,6]
                                   -                     (to align with: _ 9 8 7 6 5 4 3 2 1 0 z y x w v u t s r q p o n m l k j i h g f e d c b a)
                                 Ɗ - last four links as a monad:
                         Œl        -   lower-case (the input)
                              ØW   -   word -> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"
                            Ѐ     -   map across right:
                           ċ       -     count (right character in lower-cased input)
                                Ṛ  -   reverse (to align with the values as shown above)
                       æ.          - dot-product




1

Ruby , 125 байт + 87 сірників = 212

->m{v=->w,k{w.scan(/./).map &k};v[m,->t{v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&",->k{k.ord%11}][t.to_i 36].to_i+(t==?0?6:0)}].sum}

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

Сильно натхненний відповіддю Javascript від Арнольда .

Зазвичай вартість декларування лямбда, що використовується лише двічі, не вартує, але вагу сірника " scanap" в цьому .scan(/./).mapзмінилося. Це було веселим викликом!

->m{
  v=->w,k{w.scan(/./).map &k};                # v is a lambda taking a string and a block
  v[m,->t{                                    # Transform each char t of the input:
    v["!#&&;&=$(==&;&&;&;#;!$!$;&&#&!$!!&;&", # Transform each char of this magic string
      ->k{k.ord%11}                           #  into a matchstick count ([0,2,5,5,4,5...])
    ][t.to_i 36]+                             # Parse t as a base 36 index into the counts
    (t==?0?6:0)                               # If t was "0", add 6 matchsticks
  }].sum                                      # Add the counts for all characters
}


1

R, 112 байт + 319 матчів = 431 бал

sum(strtoi(el(strsplit(chartr("0-9a-z","625545637665455454240303455250300545",tolower(scan(,""))),""))),na.rm=T)

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

Кудо Джузеппе, який придумав це вдосконалення.

Стара версія, 143 байти + 454 збігів = 597 балів

b=el(strsplit(chartr("0123456789abcdefghijlnopqrsuxyz","6255456376654554542433455253545",tolower(readline())),""))
sum(as.numeric(b[b%in%0:9]))

Щоб el()функція працювала на TIO, вам потрібно скористатися library(methods).

Gosh bag it, is R verbose!


TIO з будь-якої причини автоматично не завантажує methodsпакунок, але, оскільки це baseпакет, я завжди засунув його в заголовок і не вважаю його за кількість байтів. readlineтакож не буде працювати над TIO, оскільки це не інтерактивна сесія. Це, безумовно, гольф.
Джузеппе


^ хоча потрібні лапки навколо введення, що містить пробіли.
Джузеппе

Крім того, я щойно розпочав чат для R гольфу! ! Останнім часом я багато бачив відповідей у ​​R, що дуже обнадійливо :)
Джузеппе

@Giuseppe Я думаю, що ви повинні опублікувати свою відповідь окремо. Вона принципово відрізняється і набагато перевершує мою.
Андрей Костирка

1

Perl 6 , 87 байт + 26 сірників = 113

{+[+] (~'򘮉򛫡񯌞𺪯񯉒񉘁'.ords~~m:g/\w/)[m:g/<[/..{]-[\W_]>/>>.&{:٣٦(~$_)}]}

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

Використовує деякі символи Unicode, що не є ASCII. Таблиця пошуку кодується у рядку Unicode:

say '򘮉򛫡񯌞𺪯񯉒񉘁'.ords;
# (625545 637665 455454 240303 455250 300545)

Символи перетворюються в індекси з перетворенням базової 36 за допомогою арабсько-індійських цифр:

:٣٦('z'); # is equivalent to
:36('z');

1

sed, 367 (байти вихідного коду) + 532 (кількість відповідних рядків для вихідного коду) = 899

s/[^0-9a-jln-suxyz]//Ig;/^$/{s/.*/0/;b};s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/;:1;s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I;/ ;/!b1;s/;.+//;s/^/,;/;:2;s/(;[^%]*)(%+)/\2\1/;:3;s/,%{10}/%,/;s/^%/,&/;/%{10}/b3;/;.*%/b2;:4;s/,[;,]/,0,/;/,[;,]/b4;s/%{9}/9/g;s/%{8}/8/g;s/%{7}/7/g;s/%{6}/6/g;s/%{5}/5/g;s/%%%%/4/g;s/%%%/3/g;s/%%/2/g;s/%/1/g;s/[^0-9]//g

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

Багаторядкова версія:

s/[^0-9a-jln-suxyz]//Ig
/^$/{s/.*/0/;b}
s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/
:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1
s/;.+//
s/^/,;/
:2
s/(;[^%]*)(%+)/\2\1/
:3
s/,%{10}/%,/
s/^%/,&/
/%{10}/b3
/;.*%/b2
:4
s/,[;,]/,0,/
/,[;,]/b4
s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g
s/[^0-9]//g

Пояснення:

Наведений вище сценарій зчитує стандартний рядок введення за рядком (у простір шаблонів - звичайний "sed спосіб"), і для кожного рядка він виводить кількість відповідних таблиць, необхідних для представлення всіх символів, що можуть бути представлені у відповідності. Розрахунки для кожного рядка введення відбуваються наступним чином:


s/[^0-9a-jln-suxyz]//Ig

По-перше, ми видаляємо кожен символ, для якого у нас немає відповідного подання відповідника (як зазначено в питанні) з простору шаблонів. Тобто, ми видаляємо кожен символ, який не є ані цифрою від "0" до "9", а буквою від "a" до "j", "n" до "s", "l", "u", "x", "y" або "z". Великі і малі літери трактуються однаково.

/^$/{s/.*/0/;b}

Якщо ми закінчимося порожнім простором шаблону, ми надрукуємо 0 (автоматично супроводжується новим рядком, як це завжди робиться sed, якщо ви не передасте йому спеціальний прапор), пропустимо всі задні рядки сценарію та переходимо до наступного «циклу sed» ( тобто прочитайте наступний рядок введення та повторіть обробку заново з першої команди, поки не буде більше рядків введення для обробки).

s/.+/&; %1ir %%7lnu %%%4cfhjoy %%%%235bdegpqsxz %%%%%069a %%%%%%8/

В іншому випадку, якщо простір шаблону не порожній, ми тепер ділимо його на два "підпробіли", розділені крапкою з комою: спочатку надходить простір введення , який спочатку формується всіма символами, які не були вилучені з простору шаблону після виконання рядка 1; далі йде крапка з комою, а за нею - пробіл карт .

Простір на карті повідомляє нам, скільки сірників поруч із 1 потрібно для відображення кожного відповідного буквено-цифрового символу. Якщо ми хочемо знати, скільки сірників потрібно для відображення будь-якого буквено-цифрового символу в просторі карти, ми шукаємо першу послідовність суміжних% s зліва від цього символу, і відповідь буде числом% s у що послідовність плюс 1. Так, наприклад, кількість сірників, необхідних для представлення "b", становить 4 + 1 = 5; представляти "4", 3 + 1 = 4, представляти "y", 3 + 1 = 4; і так далі.

:1
s/([^% ])(.+ (%+)[^ ]*\1)/%\3 \2/I
/ ;/!b1

Це петля. Тепер ми замінимо кожен символ у вхідному просторі на (повну) послідовність% s, кількість яких вказує на необхідну кількість відповідних позначень для представлення цього символу, і послідуємо за цією послідовністю символом пробілу (знову ж, великі та малі літери - це призначається однакове лікування). Критерієм для визначення того, чи повинен цикл закінчуватися, слід перевірити, чи є символ білого пробілу зліва від крапки з комою в просторі шаблону: якщо ця умова виконується, ми припиняємо цикл і продовжуємо переходити до наступного рядка.

s/;.+//
s/^/,;/

Ці два рядки видаляють крапку з комою та все, що знаходиться після неї, з простору шаблону, а потім вставляють кому та крапку з комою в початок простору візерунка. Тепер у нас простір шаблонів ще раз розділено на два нові підпростори: аналоговий простір результатів перед крапкою з комою та аналоговий вхідний простір після нього.

Аналоговий вхідний простір - це саме те, що ми раніше називали "вхідним простором", але в іншій формі: тепер він містить послідовності% s, розділені пробілом. Загальна кількість таких% в аналоговому вхідному просторі є такою ж кількістю контрольних рядків, необхідних для представлення початкового рядка вхідних символів, тобто це число є результатом. Але ми повинні надрукувати цей результат у десятковій нотації, а не як послідовність знаків відсотків. Метою аналогового простору результатів є проведення аналогового подання кожної цифри результату, тоді як ми обчислюємо цей результат шляхом підсумовування кожної суміжної послідовності% s в аналоговому вхідному просторі по черзі. Наступний цикл виконує цю суму:

:2
s/(;[^%]*)(%+)/\2\1/
    :3
    s/,%{10}/%,/
    s/^%/,&/
    /%{10}/b3
/;.*%/b2
  1. По-перше, після мітки 2 , ми переміщуємо наступну суміжну послідовність% s після крапки з комою з аналогового вхідного простору в ліву частину крапки з комою, в аналоговий простір результатів;

  2. Далі ми переходимо до суб-циклу (мітка 3 ), який виконує такі обчислення:

    • Якщо в аналоговому просторі результатів є послідовна послідовність десяти% після коми, ми видаляємо ці% та відразу ж кладемо один% зліва від коми. Простіше кажучи, це вказує на те, що одне з десяткових знаків у результаті набрало більше 9 одиниць, тому ми відбираємо 10 одиниць від цього десяткового знаку і додаємо 1 одиницю до наступного більшого десяткового знаку;

    • Якщо "%" є першим символом у просторі шаблону, ми вставляємо нову кому безпосередньо перед ним. Це вказує на те, що сума досягла значення, десяткове подання якого має ще одне десяткове місце зліва, ніж попереднє значення;

    • Якщо в аналоговому просторі результатів є якась суміжна послідовність десяти%, ми повертаємося до мітки 3 і повторюємо цей процес. В іншому випадку ми виходимо з цього підкліпа і переходимо до наступного рядка.

  3. Тепер, якщо в аналоговому вхідному просторі (тобто після крапки з комою) ще є якийсь "%", це означає, що до загальної суми потрібно додати деяку кількість відповідних крапок - тому ми повернемося до мітки 2 .

Після завершення суми ми переходимо до остаточного циклу коду:

:4
s/,[;,]/,0,/
/,[;,]/b4

Тут ми перевіряємо кожну пару символів, утворену комою зліва та крапкою з комою або комою праворуч. Всі такі пари символів замінюємо на "0" всередині двох коми.

s/%{9}/9/g
s/%{8}/8/g
s/%{7}/7/g
s/%{6}/6/g
s/%{5}/5/g
s/%%%%/4/g
s/%%%/3/g
s/%%/2/g
s/%/1/g

Вищенаведений фрагмент коду досить простий: ми замінюємо кожну суміжну послідовність% s в аналоговому просторі результатами на десятковий цифр, який відповідає кількості% s у кожній конкретній послідовності.

s/[^0-9]//g

Нарешті, ми видаляємо кожен нечисловий символ із простору шаблону, а останнє - кінцевий результат у знайомому десятковому позначенні. Це значення друкується на стандартному виході і починається наступний цикл sed, якщо є ще якісь вхідні рядки для обробки.




1

Ява 10, 452 432 416 404 оцінка (145 байт + 259 матчів)

k->{int m=0,t;for(var w:k)for(t=m-m;t<'';)m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++].contains((char)(w|32)+"")?-~t:t-t;return m;}

Пояснення:

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

k->{                   // Method with character-array parameter and int return-type
  int m=0,             //  Result-integer, starting at 0
      t;               //  Index-integer
  for(var w:k)         //  Loop over the input String-array
    for(t=m-m;t<'';)   //   Inner loop over the parts array with index [0,6)
      m+="1ir 7lnu 4cfhjoy 235bdegpqsxz 069a 8".split(" ")[t++]
                       //     If the current part ordered by amount of matches (2-8)
         .contains((char)(w|32)+"")?
                       //     contains the current (lowercase) letter
          -~t          //      Increase the result by the index + 2
         :             //     Else:
          t-t;         //      The result remains the same by adding 0
  return m;}           //  Return the result
  • Імена змінних $ραετвикористовуються замість літер. EDIT: Імена змінних kmtvwзараз використовуються замість них, оскільки вони не можуть бути сформовані відповідниками відповідно до опису виклику.
  • ''(недрукований) використовується замість 6.
  • m-mі t-tвикористовуються замість 0.
  • (char)(w|32)+""з введенням масиву символів, що використовується замість введення w.toLowerCase()рядкового масиву.

0

AutoHotkey , 148 байт + 345 сірників = 493

Це було трохи проблемою скоротити.

n:=["1ir","7lnu","4cfhjoy","235bdegpqsxz","09a5",7+1]
Loop Parse,i
{r:=A_LoopField
Loop % n.Length()
{l:=A_Index
if InStr(n[l],r)
u+=l+1
}}
send % u

0

Python 3 , 123 байти + 65 збігів = 188

lambda w,m='',t='',k=ord:sum(~-k((m+t+m+''+t)[k(v)%77])*('/'<v<'{')for v in w)

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

Містить безліч символів, які не можна роздрукувати (зокрема, байт від одного до восьми).

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


0

Деревне вугілля , 48 байт + 3 = 51

IΣEθ⎇№α↥ιI§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι∧№IX²φιI§”)⧴u↑$◨”Iι

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

IΣEθ

Проведіть петлю над символами введення, обчислюючи кількість відповідних рядків кожного, потім підсумовуйте результат, перетворюйте на рядок та друкуйте неявно.

⎇№α↥ι

Якщо це лист ...

I§”)➙⊞←!Σw➙⊙↘⁴↘”⌕α↥ι

Знайдіть кількість сірників у стисненому рядку 65455454240303455250300545.

∧№IX²φι

В іншому випадку, якщо вона відображається у значенні 2 ** 1000...

I§”)⧴u↑$◨”Iι

Знайдіть кількість сірників у стисненому рядку 6255456376.


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