Шлях поєднання карток вигнання


10

У цьому питанні буде представлений механік із гри "Шлях до вигнання". У цій грі є речі, які називаються КАРТИ - це предмети, які ви можете використовувати для відкриття областей високого рівня, також ви можете комбінувати 3 з них, щоб отримати оновлений, який буде завдання цього виклику. Комбінації оновлень такі:

A Crypt Map 68 -> Sewer Map
E Dungeon Map 68 -> Channel Map
I Grotto Map 68 -> Thicket Map
O Dunes Map 68 -> Mountain Ledge Map
U Pit Map 68 -> Cemetery Map
T Tropical Island Map 68 -> Arcade Map
N Desert Map 68 -> Wharf Map
S Sewer Map 69 -> Ghetto Map
H Channel Map 69 -> Spider Lair Map
R Thicket Map 69 -> Vaal Pyramid Map
D Mountain Ledge Map 69 -> Reef Map
L Cemetery Map 69 -> Quarry Map
C Arcade Map 69 -> Mud Geyser Map
M Wharf Map 69 -> Museum Map
W Ghetto Map 70 -> Arena Map
F Spider Lair Map 70 -> Overgrown Shrine Map
G Vaal Pyramid Map 70 -> Tunnel Map 
Y Reef Map 70 -> Shore Map
P Quarry Map 70 -> Spider Forest Map
B Mud Geyser Map 70 -> Promenade Map
V Museum Map 70 -> Arena Map
K Arena Map 71 -> Underground Sea Map 
J Overgrown Shrine Map 71 -> Pier Map
X Tunnel Map 71 -> Bog Map
Q Shore Map 71 -> Graveyard Map
Z Spider Forest Map 71 -> Coves Map
Ó Promenade Map 71 -> Villa Map 
É Underground Sea Map 72 -> Temple Map
Á Pier Map 72 -> Arachnid Nest Map
Í Bog Map 72 -> Strand Map
Ú Graveyard Map 72 -> Dry Woods Map
Ü Coves Map 72 -> Colonnade Map
Ö Villa Map 72 -> Catacomb Map
Ä Temple Map 73 -> Torture Chamber Map
Ë Arachnid Nest Map 73 -> Waste Pool Map
Ï Strand Map 73 -> Mine Map
Æ Dry Woods Map 73 -> Jungle Valley Map
Œ Colonnade Map 73 -> Labyrinth Map
Ñ Catacomb Map 73 -> Torture Chamber Map
Ÿ Torture Chamber Map 74 -> Cells Map
1 Waste Pool Map 74 -> Canyon Map
2 Mine Map 74 -> Dark Forest
3 Jungle Valley Map 74 -> Dry Peninsula Map
4 Labyrinth Map 74 -> Orchard Map
5 Cells Map 75 -> Underground River Map
6 Canyon Map 75 -> Arid Lake Map
7 Dark Forest Map 75 -> Gorge Map
8 Dry Peninsula Map 75 -> Residence Map
9 Orchard Map 75 -> Underground River Map
0 Underground River Map 76 -> Necropolis Map
? Arid Lake Map 76 -> Plateau Map
! Gorge Map 76 -> Bazaar Map
( Residence Map 76 -> Volcano Map
) Necropolis Map 77 -> Crematorium Map
- Plateau Map 77 -> Precinct Map
/ Bazaar Map 77 -> Academy Map
\ Volcano Map 77 -> Springs Map
| Crematorium Map 78 -> Shipyard Map
= Precinct Map 78 -> Overgrown Ruin Map
* Academy Map 78 -> Village Ruin Map
† Springs Map 78 -> Arsenal Map
‡ Shipyard Map 79 -> Wasteland Map
§ Overgrown Ruin Map 79 -> Courtyard Map
[ Village Ruin Map 79 -> Excavation Map
] Arsenal Map 79 -> Waterways Map
_ Wasteland Map 80 -> Palace Map
~ Courtyard Map 80 -> Shrine Map
{ Excavation Map 80 -> Maze Map
} Waterways Map 80 -> Palace Map
© Palace Map 81 -> Abyss Map
€ Shrine Map 81 -> Abyss Map
< Maze Map 81 -> Colosseum Map 
> Vaal Temple Map 81 -> Colosseum Map
µ Abyss Map 82
» Colosseum Map 82

Ці лінії слідують за цією схемою:

Symbol of the map | Name of the map | Level of the map | Map received from combining

Зауважте, що карта прірви та колосею не поєднуються у вищі рівні, оскільки вони є найвищим рівнем.

ВХОД:
Вашим вкладом буде рядок Символів, які відповідають символам карти, наприклад, AAAEE, що означатиме 3-х криптовалютну карту та 2-х карту підземелля.

ВИХІД:
Вихід буде знову рядком символів, який би представляв максимально можливу комбінацію вхідних карт. Будь-яка комбінація виводу дозволена до тих пір, поки вона містить кожну карту.

ПРИКЛАДИ:

INPUT: A
OUTPUT: A

INPUT: AAA
OUTPUT: S

INPUT: AAAEEEIII
OUTPUT: SHR or HRS or RHS or SRH 

INPUT: AAAAAAAAAE
OUTPUT: WE or EW

INPUT: »»»»»
OUTPUT: »»»»»

БЕЗКОШТОВНО:
Ваш рахунок буде розрахований за цією формулою, яка також фактично використовується в грі для обчислення зменшення шкоди:

POINTS = 1000 - (ByteCount / (ByteCount + 1000) * 1000);

БОНУСНІ БУНКИ:

  1. Якщо ви додасте кодування бігової тривалості як на вхід, так і на вихід, помножте свої точки на 1,2, наприклад 3A введення замість AAA. Ви можете опустити стандартне введення, якщо ваша відповідь це підтримає.

  2. Якщо ваша програма дозволить фактичним іменам карт як введення / виводу, то помножте ваші бали на 1,5, ви можете опустити "map" частину назви карти, так як приклад введення " crypt crypt crypt ", а вихід " kanawer " - це нормально. Ваш сценарій також більше не повинен розуміти стандартне введення, якщо ви використовуєте цей метод. Цей метод також вимагає пробілу між іменами і вхідними, і вихідними.

  3. Якщо ваш вихідний рядок переходить від карти найнижчого рівня до найвищого, то помножте очки на 1,08, карти з тим самим рівнем не потрібно сортувати будь-яким певним чином.

Ви можете об'єднати всі 3 бонусні бали.

ВІДПОВІДЬ З НАЙБІЛЬШИМИ ВИНАГАМИ!


Чи можна припустити, що на вході один і той же тип карти буде розташований поруч? Наприклад, у тестовому випадку 3 нам не доводиться мати справу з чимось подібним AEIAEIAEI?
Сок

Жоден вклад не буде випадковим, я підпилюю бонусні бали за цю частину тепер, коли я думаю про це
Ваджура

1
Знайдіть власний шлях у глиб країни, вигнання! : ^ P
FryAmTheEggman

Якщо вхід випадковий, то як працює бонус на пробіг? Можемо чи ми отримати входи як 2AEAдля AAEA? Або це буде 3AE?
Фаталізувати

Так, я не розумію.
OverCoder

Відповіді:


5

Haskell, 306 байт, пункти = 766 * 1,2 * 1,08 = 992,343

import Control.Arrow;main=print=<<(\x->unwords.map(\(x,y)->show x++[y]).filter((>0).fst).g=<<(read***head)<$>(lex=<<words x))<$>getLine;g z@(x,y)|x<3=[z]|1<2=maybe[z](\w->(x`mod`3,y):g(x`div`3,w)).lookup y$words"ASWKÉÄŸ50)|‡_©µ EHFJÁË16?-=§~€µ IRGXÍÏ27!/*[{<» ULPZÜŒ490 TCBÓÖÑŸ NMVK >»">>= \x->zip x$tail x

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

Haskell, 284 байти, пункти = 779 * 1,2 * 1,08 = 1009,346

import Control.Arrow;main=interact$show.(\x->unwords[show a++[b]|(a,b)<-g=<<second head<$>(reads=<<words x),a>0]);g z@(x,y)|x<3=[z]|1<2=maybe[z](\w->(x`mod`3,y):g(x`div`3,w)).lookup y$words"ASWKÉÄŸ50)|‡_©µ EHFJÁË16?-=§~€µ IRGXÍÏ27!/*[{<» ULPZÜŒ490 TCBÓÖÑŸ NMVK >»">>=(flip zip=<<tail)

Я видавив ще кілька байтів незалежно.

Haskell, 248 байт, пункти = 801 * 1,2 * 1,08 = 1038,462

main=interact$ \x->unwords[show a++b|(a,b)<-(reads=<<words x)>>=g,a>0];g z@(x,y)|x<3=[z]|1<2=maybe[z](\w->(x`mod`3,y):g(x`div`3,w))$pure<$>lookup(head y)(zip<*>tail=<<words"ASWKÉÄŸ50)|‡_©µ EHFJÁË16?-=§~€µ IRGXÍÏ27!/*[{<» ULPZÜŒ490 TCBÓÖÑŸ NMVK >»")

Я також залишаю кілька таблиць, які я зробив для використання іншими:

68   AS EH IR OD UL TC NM
69   SW HF RG DY LP CB MV
70   WK FJ GX YQ PZ BÓ VK
71   KÉ JÁ XÍ QÚ ZÜ ÓÖ
72   ÉÄ ÁË ÍÏ ÚÆ ÜŒ ÖÑ
73   ÄŸ Ë1 Ï2 Æ3 Œ4 ÑŸ
74   Ÿ5 16 27 38 49
75   50 6? 7! 8( 90
76   0) ?- !/ (\
77   )| -= /* \†
78   |‡ =§ *[ †]
79   ‡_ §~ [{ ]}
80   _© ~€ {< }©
81   ©µ €µ <»
82   µ  µ  »

     >»

Ви читаєте це зверху вниз, дві букви одночасно (або ігноруєте непарні стовпці). Три A складають S, Три S-es робить W і так далі. Ланцюжки, які закінчуються, просто загортаються до першого стовпця в наступному рядку. Немає трьох карт робить>.

Ось ланцюги карт, які можна зробити без повторів:

ASWKÉÄŸ50)|‡_©µ
EHFJÁË16?-=§~€µ
IRGXÍÏ27!/*[{<»
ULPZ܌490
TCBÓÖÑŸ
NMVK
>»

4

C #, 364 361 байт, пункти = 734,754 х 1,08 = 793,534

Можливо, так само, щоб м'яч котився з великим ...

string F(string s){var m=@"AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/\|=*†‡§[]_~{}©€<>µ»";var g=new int[75];foreach(int a in s.Select(c=>m.IndexOf(c)))g[a]++;int i=0;for(;i<73;){g[m.IndexOf(@"SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/\|=*†‡§[]_~{}©€<©µµ»»"[i])]+=g[i]/3;g[i++]%=3;}return string.Join("",g.Zip(m,(x,l)=>"".PadLeft(x,l)));}

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

Це реалізує бонусну функцію 3 завдяки методу групування, який дає мені круті 58 балів.

Редагувати: Перезаписати вихідний цикл у join / zip


2

SWI-Prolog, 354 байти, бали = 738,552 * 1,08 = 797,64

a(A,Z):-msort(A,S),b(S,[],B),(msort(B,S),string_codes(Z,S);a(B,Z)).
b(X,R,Z):-(X=[A,A,A|T],nth0(I,`AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/\\|=*†‡§[]_~{}©€<>`,A),nth0(I,`SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/\\|=*†‡§[]_~{}©€<©µµ»»`,B),b(T,[B|R],Z);X=[A|T],b(T,[A|R],Z);Z=R).

Чекає входів в вигляді кодів рядків, наприклад , a(`AAAEEEIII`,Z).вихід буде Z = "SRH".

Я побачу, що я можу зробити щодо двох інших бонусів ...


2

Javascript, 432 байти, точки = 698,32 * 1,08 * 1,2 = 905,02

function g(r){for(var n="AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/|=*†‡§[]_~{}©€<>",t="SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/|=*†‡§[]_~{}©€<©µµ»»",a=/([^»µ])\1{2}/,c=/\d+/,e=/\d+(.)/,f=0;0!==(f=r.match(c)-0);)r=r.replace(c,Array(f).join(r.match(e)[1]));for(;null!==(f=r.match(a));)r=r.replace(a,t.charAt(n.search(f[1])));return r.split("").sort(function(r,t){return n.indexOf(r)-n.indexOf(t)}).join("")}

ECMAScript 6, 417 байт, пункти = 705,72 * 1,08 * 1,2 = 914,61

Немає онлайн-версії minifier: (остання версія була передана через мініфікатор )

let F=s=>{for(var m="AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/\|=*†‡§[]_~{}©€<>",r="SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/\|=*†‡§[]_~{}©€<©µµ»»",x=/([^»µ])\1{2}/,y=/\d+/,z=/\d+(.)/,p=0;(p=s.match(y)-0)!==0;)s=s.replace(y,Array(p).join(s.match(z)[1]));for(;(p=s.match(x))!==null;)s=s.replace(x,r.charAt(m.search(p[1])));return s.split('').sort((a,b)=>m.indexOf(a)-m.indexOf(b)).join('');};

Біжи з Бабелем


Тестується за допомогою наступних даних:

  1. AAA
  2. AAAEEEIII
  3. 3A3E3I
  4. »»»»»

Загальне рішення

В основному, використовуючи регулярний вираз, коли це можливо

var m = "AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/\|=*†‡§[]_~{}©€<>";
var r = "SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/\|=*†‡§[]_~{}©€<©µµ»»";
var x = /([^»µ])\1{2}/;

while((p=s.match(x))!==null){
    s=s.replace(x,r.charAt(m.search(p[1])));
}

Тут нічого фантазії, просто замінимо відповідність відповідного виходу.

За бонус 1,2

Повторне введення цифр та наступного букви, читабельний код виглядає так:

// variable 's' is the input string

var y = /\d+/;
var z = /\d+(.)/;

var p = 0;

while((p=s.match(y)-0) !== 0) {
    s=s.replace(y,Array(p).join(s.match(z)[1]));
}

Як бачимо, s.match(y) - 0збігається рядок віднімається 0, це змушує синтаксичний аналіз синтаксису без фактичного виклику parseInt().

Також в Array(p).join(s.match(z)[1])основному приєднується до масиву p порожніх елементів із символом, знайденим у матчі, це простий спосіб надрукувати лист (скажімо E) pкількість разів.

За бонус 1,08

Алгоритм сортування:

s.split('').sort(function(a,b) {
    return m.indexOf(a) - m.indexOf(b);
}).join('');

Я не бачу, як можна отримати базовий бал 999,999 з 432 байтами. Я отримую 698.324 із заданою формулою.
Фаталізувати

Моє погано, я, мабуть, неправильно набрав формулу, я виправлю її
Крістофер Франциско

2

Javascript (ES6), 389 байт, точки = 719.942 * 1,08 * 1.2 = 933.045

Попереду, принаймні поки що ...

a=>{a=a.replace(/(\d)(.)/g,(m,A,B)=>B.repeat(A)),x='AEIOUTNSHRDLCMWFGYPBVKJXQZÓÉÁÍÚÜÖÄËÏÆŒÑŸ1234567890?!()-/\\|=*†‡§[]_~{}©€<>',y='SHRDLCMWFGYPBVKJXQZÓKÉÁÍÚÜÖÄËÏÆŒÑŸ1234Ÿ567890?!(0)-/\\|=*†‡§[]_~{}©€<©µµ»»',s=_=>(a=[...a].sort((a,b)=>x[I='indexOf'](a)-x[I](b)).join``);s();for(i=0;i<x.length;i++){a=a.replace(new RegExp(`[${('\\|'[I](h=x[i])<0?'':'\\')+h}]{3}`,'g'),y[i]);s()}return a}

Спробуйте тут:

Бонус 1,2 трохи складний у своєму форматуванні. Якщо ви хочете ввести звичайне число, поставте а1 перед ним.

В основному, це сканує через кожного персонажа, який має оновлення (усі, крім µі »), потім знаходить усі набори з цього символу та замінює їх оновленим знаком. Сортування після кожного.replace було найкращим способом переконатися, що це завжди працює належним чином, так що це був автоматичний бонус. Бонус 1,2 був трохи складніше, але я його розібрав у 45 байт. Бонус 1,5 просто не коштує цього взагалі, оскільки він вимагає тонни більше кодування і принаймні збільшить довжину.

Як завжди, пропозиції дуже вітаються!

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