Rozwiń ten stan australijski

9

Istnieje 8 stanów i terytoriów australijskich, każdy z 2 lub 3 literowym skrótem:

  • AKT: Australijskie Terytorium Stołeczne
  • NSW: Nowa Południowa Walia
  • NT: Terytorium Północne
  • QLD: Queensland
  • SA: Australia Południowa
  • TAS: Tasmania
  • VIC: Victoria
  • WA: Australia Zachodnia

Twoim zadaniem jest napisanie funkcji / programu, który przyjmuje prawidłowy skrót nazwy australijskiej dużymi literami i zwraca poprawną pełną nazwę (rozróżnia wielkie i małe litery jak wyżej).

Żadne dodatkowe białe znaki nie są dozwolone, poza pojedynczym końcowym znakiem nowej linii, gdy jest to nieunikniony efekt uboczny każdego programu w tym języku.

Na przykład:

f("TAS") => "Tasmania"

Standard obowiązują zasady (wygrywa najkrótszy kod w bajtach!) i luki.

Steve Bennett
źródło
6
Myślę, że w tym momencie musimy utworzyć tag [ state-abbreviation ].
Cyoce
Co z „Nową Południową (Daleką) Walią”? (Dla tych, którzy nie zdają sobie sprawy, jest to „NSFW”)
NoOneIsHere
3
kiedy bawiłem się rozwiązaniem, NSW rozwijało się do „nowych południowo-zachodnich piw”, które całkiem mi się podobały :)
Steve Bennett
Dziwne. Utworzyłem tag i dodałem go, ale ktoś go ponownie usunął.
Steve Bennett,
skrót stanu może być zbyt szczegółowy. może zrób tag w skrótach / akronimach?
Sparr

Odpowiedzi:

9

Siatkówka , 135 121 bajtów

13 bajtów golfowych dzięki @Neil przy użyciu sprytnych taktyk wstawiania przestrzeni, które zainspirowały jeszcze jeden bajt

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

Wypróbuj online!

Zwróć uwagę na końcowe spacje w czwartym i ostatnim wierszu.

user41805
źródło
Jeśli zastąpi ASsię asmanianajpierw, a następnie można wymienić wszystkie pozostałe Asz Australia.
Neil
Możesz także wykazać się kreatywnością dzięki wstawianiu spacji, coś takiego: Wypróbuj online!
Neil
(Ale do \B[A-Z]tego zaoszczędziłby ci dwa bajty.)
Neil
@Neil Dzięki za wskazówki, wykorzystałem twoje sugestie, aby zagrać w jeszcze jeden bajt.
user41805
5

Galaretka , 56 bajtów

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

Monadyczny link pobierający i zwracający listy znaków.

Zobacz wszystkie przypadki w Wypróbuj online!

Uwaga: Ponowne użycie słów „Australia” i „Terytorium” nie pomaga zmniejszyć liczby bajtów.

W jaki sposób?

Biorąc sumę rzędnych ośmiu skrótów stanu modulo 15 daje 8 unikalnych wartości. Biorąc wyniki tych modulo 9 zachowuje wyjątkowość.

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)
Jonathan Allan
źródło
Smutne, że ponowne użycie Australii i terytorium nie pomaga: /
Steve Bennett
5

Haskell, 193 192 bajty

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"

Trochę naiwne rozwiązanie, ale po raz pierwszy chciałem podjąć dość proste wyzwanie. Nie jestem nawet pewien, czy w Haskell jest możliwe lepsze.

Zapisano bajt, przesuwając spację do t

Ziemniak44
źródło
1
Witamy w PPCG!
L3viathan
3

Mathematica, 177 bajtów

Oczywiste rozwiązanie: (199 bajtów)

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

Ulepszone rozwiązanie: (182 bajty, można uruchomić tylko na moim komputerze Wolfram Mathematica 10.2)

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

Najlepsze rozwiązanie:

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

Niestety powtórzenie " Territory"może zapisać tylko 0 bajtów.

Wygląda na to, że domyślna funkcja skrótu Mathematica zmienia się w zależności od wersji. Ale dodanie metody spowoduje wydłużenie kodu. Korzystanie z domyślnej funkcji skrótu w piaskownicy Mathematica może teraz skrócić kod o około 9 bajtów.

Mathematica (piaskownica - teraz - wersja 11), 168 bajtów

{a="Australia","Western "<>a,,,,"South "<>a,,a<>"n Capital Territory",,,,"Tasmania","Northern Territory",,,,"New South Wales","Victoria","Queensland"}[[Hash@#~Mod~20]]&
użytkownik202729
źródło
Cholera, tylko 21 bajtów lepsza niż banalna odpowiedź.
Steve Bennett
5
Czekaj, więc Mathematica nie ma na to wbudowanego?
Neil
@ Nee, powinienem był o tym pomyśleć.
user202729,
2

Python, 181 bajtów

1 bajt zapisany dzięki @Jonathan Allan

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]

Wypróbuj online!

Uriel
źródło
t=' Territory'powinien uratować bajt.
Jonathan Allan
2

Sed, 167 157 bajtów

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 /
Toby Speight
źródło
Pierwotnie odłożyłem ern , ale to kosztowało więcej niż zaoszczędziłem tylko na dwa zastosowania.
Toby Speight,
1

PHP, 148 143 bajtów

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

Zaoszczędź 5 bajtów dzięki Jörgowi Hülsermannowi .

użytkownik63956
źródło
0

C # , 289 bajtów


Dane

  • Wejście String s Skrót stanu.
  • Dane wyjściowe String Rozwinięta nazwa stanu

Grał w golfa

(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];};

Nie golfił

( 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 ];
};

Nieczytelny czytelny

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

Pełny kod

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();
      }
   }
}

Wydawnictwa

  • v1.0 - 289 bytes- Wstępne rozwiązanie.

Notatki

  • Żaden
auhmaan
źródło
(string s)może po prostu być. sMożesz użyć niejawnego zwrotu: s=>new System....i możesz usunąć końcowy średnik.
TheLethalCoder
0

Rexx (Regina) , 148 147 bajtów

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)

Wypróbuj online!

theblitz
źródło
Wydaje się, że dane wyjściowe są pisane wielkimi literami?
Steve Bennett,
0

JavaScript (ES6), 167 bajtów

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
źródło