そのオーストラリアの州を拡大する


9

オーストラリアの州と準州は8つあり、それぞれ2文字または3文字の略語が使用されています。

  • ACT:オーストラリア首都特別地域
  • NSW:ニューサウスウェールズ州
  • NT:ノーザンテリトリー
  • QLD:クイーンズランド
  • SA:南オーストラリア
  • TAS:タスマニア
  • VIC:ビクトリア
  • WA:西オーストラリア

あなたの仕事は、大文字で有効なオーストラリアの州の省略形を取り、正しいフルネーム(上記のように大文字と小文字を区別する)を返す関数/プログラムを書くことです。

これはその言語のすべてのプログラムの避けられない副作用である単一の末尾の改行を除いて、余分な空白は許可されません。

例えば:

f("TAS") => "Tasmania"

標準の規則(バイト単位の最短コードが優先されます!)と抜け穴が適用されます。


6
この時点で[ state-abbreviation ]タグを作成する必要があると思います。
Cyoce

「ニューサウス(ファー)ウェールズ」はどうですか?(気づかない人のために、それは「NSFW」です)
NoOneIsHere

3
私が解決策を試している間、NSWはかなり気に入った "New South Western ales"に拡大していました:)
Steve Bennett

変だ。タグを作成して追加しましたが、誰かが再び削除しました。
スティーブベネット2017年

州略語は具体的すぎる場合があります。たぶん、タグを略語/頭字語について何かしますか?
Sparr

回答:


9

Retina135 121バイト

巧妙なスペース挿入戦術を使用することにより、@ Neilのおかげで13バイトがゴルフされました。

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

オンラインでお試しください!

4行目と最後の行の末尾のスペースに注意してください。


最初にと置き換えるASasmania、残りAのすべてのをと置き換えることができますAustralia
Neil

次のようなスペース挿入を使ってクリエイティブにすることもできます。オンラインでお試しください!
Neil

(しかし、\B[A-Z]
Neil

@ニールヒントをありがとう、私はあなたの提案を使ってもう1バイトゴルフをしました。
user41805

5

ゼリー、56 バイト

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

文字のリストを受け取って返すモナディックリンク。

すべてのケースをオンライン試してみてください!

注:「オーストラリア」および「テリトリー」という単語を再利用しても、バイト数は減りません。

どうやって?

15を法とする8つの州の略語の序数の和を取ると、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"

多少素朴な解決策ですが、私は最初はかなり単純な挑戦をしたいと思いました。Haskellでもっと良いことができるかどうかさえ私にはわかりません。

スペースをtに移動して1バイトを保存しました


1
PPCGへようこそ!
L3viathan 2017

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のデフォルトのハッシュ関数はバージョンによって変わるようです。ただし、メソッドを追加するとコードが長くなります。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]]&

くそー、ささいな答えよりも21バイトだけ良い。
スティーブベネット2017年

5
Mathematicaにはこれが組み込まれていないので待ってください。
Neil

@ニール私は最初にそれについて考えるべきだった。
user202729 2017年


2

Sed、167157バイト

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 、2回の使用で節約した以上のコストがかかりました。
Toby Speight 2017年


0

C#、289バイト


データ

  • 入力 String s州の略語。
  • 出力 String拡張状態名

ゴルフ

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

未ゴルフ

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

読みにくい

// 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-初期ソリューション。

ノート

  • 無し

(string s)だけsにすることができます。暗黙のreturnを使用できますs=>new System....。末尾のセミコロンを削除できます。
TheLethalCoder 2017年


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]])

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.