Расширить этот австралийский штат

9

Есть 8 австралийских штатов и территорий, каждый с 2 ​​или 3 буквенными сокращениями:

  • ACT: Австралийская столичная территория
  • Новый Южный Уэльс: Новый Южный Уэльс
  • NT: Северная территория
  • QLD: Квинсленд
  • SA: Южная Австралия
  • ТАС: Тасмания
  • ВИК: Виктория
  • WA: Западная Австралия

Ваша задача - написать функцию / программу, которая принимает действительную аббревиатуру штата Австралия в верхнем регистре и возвращает правильное полное имя (с учетом регистра, как указано выше).

Не допускается никаких дополнительных пробелов, кроме одного завершающего символа новой строки, где это является неизбежным побочным эффектом каждой программы на этом языке.

Например:

f("TAS") => "Tasmania"

стандарт применяются правила (самый короткий код в байтах!) и лазейки.

Стив Беннетт
источник
6
Я думаю, что нам нужно создать тег [ state-abbreviation ] на этом этапе.
Cyoce
А как насчет "Нового Южного (Дальнего) Уэльса"? (Для тех, кто не понимает, это "NSFW")
NoOneIsHere
3
в то время как я играл с решением, NSW расширялся до "Нового юго-западного эля", который мне очень понравился :)
Стив Беннетт
Weird. Я создал тег и добавил его, но кто-то снова удалил его.
Стив Беннетт
Сокращение штата может быть слишком конкретным. Может быть, сделать тег что-то об аббревиатурах / аббревиатурах?
Спарр

Ответы:

9

Сетчатка , 135 121 байт

13 байтов играли в гольф благодаря @Neil, используя хитроумную тактику вставки пробела, которая вдохновила на игру еще один байт

AS
asmania
^W
Western 
NT
NorthernT
T$
 Territory
A
Australia
aC
an Capital
IC
ictoria
LD
ueensland
SW
ew SWales
S
South 

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

Обратите внимание на пробелы в четвертой и последней строках.

user41805
источник
Если вы замените ASна asmaniafirst, то вы можете заменить все оставшиеся As на Australia.
Нил
Вы также можете проявить творческий подход, вставив пробел, например, так: попробуйте онлайн!
Нил
(Но для этого, вы \B[A-Z]бы сэкономили два байта.)
Нил
@Neil Спасибо за советы, я использовал твои предложения, чтобы сыграть в гольф еще один байт.
user41805
5

Желе , 56 байт

OS%15ị“ÞÑṿ“ıÐṁṾṗ“¡ʋẹḢ⁾ḅ“¢T¡ż¶““msẒw²ẉṪP“ØÑĊ“©$Ḅ3ẊḳƓ“ÇH°»

Монадическая ссылка, берущая и возвращающая списки символов.

См. Все случаи в Попробуй это онлайн!

Примечание. Повторное использование слов «Австралия» и «Территория» не помогает уменьшить количество байтов.

Как?

Взяв сумму ординалов восьми сокращений штатов по модулю 15, получаем 8 уникальных значений. Взятие результатов этих по модулю 9 сохраняет уникальность.

OS%15ị“ ... » - Main link: list of characters a
O             - cast to ordinals
 S            - sum
  %15         - modulo 15
      “ ... » - list of compressed strings:
              -   "Victoria"
              -   "Western Australia"
              -   "Northern Territory"
              -   "South Australia"
              -   ""
              -   "Australian Capital Territory"
              -   "Tasmania"
              -   "New South Wales"
              -   "Queensland"
     ị        - index into (1-indexed and modular - hence the single empty entry)
Джонатан Аллан
источник
Печально, что повторное использование Австралии и Территории не помогает: /
Стив Беннетт
5

Haskell, 193 192 байта

f"NSW"="New South Wales"
f"QLD"="Queensland"
f"ACT"=a++"n Capital"++t
f"VIC"="Victoria"
f"TAS"="Tasmania"
f"SA"="South "++a
f"NT"="Northern"++t
f"WA"="Western "++a
a="Australia"
t=" Territory"

Несколько наивное решение, но я хотел сделать довольно простой вызов для своего первого. Я даже не уверен, возможно ли лучшее в Хаскеле.

Сохранение байта путем перемещения пространства в т

Potato44
источник
1
Добро пожаловать в PPCG!
L3viathan
3

Mathematica, 177 байтов

Очевидное решение: (199 байт)

<|"ACT"->"Australian Capital Territory","NSW"->"New South Wales","NT"->"Northern Territory","QLD"->"Queensland","SA"->"South Australia","TAS"->"Tasmania","VIC"->"Victoria","WA"->"Western Australia"|>

Улучшенное решение: (182 байта, работает только на моем компьютере Wolfram Mathematica 10.2)

{,"Northern Territory","Queensland",,,,,"Australian Capital Territory","New South Wales",,,"Tasmania",,,"Western Australia","Victoria",,,,,,,,,,,,"South Australia"}[[Hash@#~Mod~29]]&

Лучшее решение:

{,"Northern Territory","Queensland",a="Australia",,,,a<>"n Capital Territory","New South Wales",,,"Tasmania",,,"Western "<>a,"Victoria",,,,,,,,,,,,"South "<>a}[[Hash@#~Mod~29]]&

К сожалению повторюсь " Territory" может сохранить только 0 байтов.

Кажется, что стандартная хеш-функция Mathematica меняется на версии. Но добавление метода сделает код длиннее. Использование функции Hash по умолчанию в изолированной программной среде Mathematica теперь позволяет сократить код примерно на 9 байт.

Mathematica (песочница - сейчас - версия 11), 168 байт

{a="Australia","Western "<>a,,,,"South "<>a,,a<>"n Capital Territory",,,,"Tasmania","Northern Territory",,,,"New South Wales","Victoria","Queensland"}[[Hash@#~Mod~20]]&
user202729
источник
Блин, только на 21 байт лучше, чем банальный ответ.
Стив Беннетт
5
Подожди, а у Mathematica нет для этого встроенных функций?
Нил
@ Нил, я должен был подумать об этом первым.
user202729
2

Python, 181 байт

1 байт сохранен благодаря Джонатану Аллану

lambda a,s='Australia',t=' Territory':[s+'n Capital'+t,'New South Wales','Northern'+t,'Queensland','South '+s,'Tasmania','Victoria','Western '+s]['ACNSNTQLSATAVIWA'.index(a[:2])//2]

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

Уриэль
источник
t=' Territory'должен сохранить байт я думаю.
Джонатан Аллан
2

Sed, 167 157 байт

s/T$/ Territory/
s/N /Northern /
s/AS/asmania/
s/IC/ictoria/
s/LD/ueensland/
s/W$/Wales/
s/A/Australia/
s/C/n Capital/
s/NS/New S/
s/^W/Western /
s/S/South /
Тоби Спейт
источник
Первоначально я отложил ern , но это стоило больше, чем сэкономило всего за два раза.
Тоби Спейт
1

PHP, 148 143 байта

<?=strtr(["0n Capital 3",Victoria,Queensland,West20,10,Tasmania,North23,"New 1 Wales"][md5(hj.$argn)%8],[Australia,"South ","ern ",Territory]);

Сохранено 5 байтов благодаря Jörg Hülsermann .

user63956
источник
0

C # , 289 байт


Данные

  • Входные данные String s Сокращение штата.
  • Выходные данные String Расширенное имя состояния

Golfed

(string s)=>{return new System.Collections.Generic.Dictionary<string,string>(){{"ACT","Australian Capital Territory"},{"NSW","New South Wales"},{"NT","Northern Territory"},{"QLD","Queensland"},{"SA","South Australia"},{"TAS","Tasmania"},{"VIC","Victoria"},{"WA","Western Australia"}}[s];};

Ungolfed

( string s ) => {
    return new System.Collections.Generic.Dictionary<string, string>() {
        { "ACT", "Australian Capital Territory" },
        { "NSW", "New South Wales" },
        { "QLD", "Queensland" },
        { "TAS", "Tasmania" },
        { "VIC", "Victoria" },
        { "NT", "Northern Territory" },
        { "SA", "South Australia" },
        { "WA", "Western Australia" }
    }[ s ];
};

Ungolfed читабельный

// Takes a state name abbreviated 
( string s ) => {

    // Creates a dictionary with the state name abbreviated and the full state name and returns the one that match
    return new System.Collections.Generic.Dictionary<string, string>() {
        { "ACT", "Australian Capital Territory" },
        { "NSW", "New South Wales" },
        { "QLD", "Queensland" },
        { "TAS", "Tasmania" },
        { "VIC", "Victoria" },
        { "NT", "Northern Territory" },
        { "SA", "South Australia" },
        { "WA", "Western Australia" }
    }[ s ];
};

Полный код

using System;
using System.Collections.Generic;

namespace Namespace {
   class Program {
      static void Main( String[] args ) {
         Func<String, String> f = ( string s ) => {
             return new System.Collections.Generic.Dictionary<string, string>() {
                 { "ACT", "Australian Capital Territory" },
                 { "NSW", "New South Wales" },
                 { "QLD", "Queensland" },
                 { "TAS", "Tasmania" },
                 { "VIC", "Victoria" },
                 { "NT", "Northern Territory" },
                 { "SA", "South Australia" },
                 { "WA", "Western Australia" }
             }[ s ];
         };

         List<String>
             testCases = new List<String>() {
                 "ACT",
                 "NSW",
                 "QLD",
                 "TAS",
                 "VIC",
                 "NT",
                 "SA",
                 "WA",
             };

         foreach( String testCase in testCases ) {
             Console.WriteLine( $"Input: {testCase}\nOutput: {f( testCase )}\n");
         }

         Console.ReadLine();
      }
   }
}

релизы

  • v1.0 - 289 bytes- Исходное решение.

Ноты

  • Никто
auhmaan
источник
(string s)может быть просто s, вы можете использовать неявный возврат: s=>new System....и вы можете удалить конечную точку с запятой.
TheLethalCoder
0

Rexx (Regina) , 148 147 байт

a=Australia
t=Territory
s=South
ac=a'n' Capital t
ns=New s Wales
nt=Northern t
qs=Queensland
sa=s a
ta=Tasmania
vi=Victoria
wa=Western a
arg x 3
say value(x)

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

theblitz
источник
Кажется, вывод в верхнем регистре?
Стив Беннетт
0

JavaScript (ES6), 167 байт

s=>({A:`${A='Australia'}n Capital ${T='Territory'}`,N:s[2]?'New South Wales':'Northern '+T,T:'Tasmania',Q:'Queensland',S:'South '+A,V:'Victoria',W:'Western '+A}[s[0]])

darrylyeo
источник