単純な州の売上税計算機


10

米国の消費税は控えめに言っても複雑です。通常、州の売上税があります(州の売上税を徴収しないいくつかの州があります)が、郡の売上税、学区の売上税、地方自治体(市)の売上税、または首都圏消費税。都市のさまざまな部分で異なる消費税が発生する場合もあります。ただし、この課題では、州の売上税のみに焦点を当てます。

ゼロより大きい米ドル金額(小数点以下第2位までの精度)と州(氏名または2文字の略称のいずれか、選択、大文字小文字は関係ありません)を指定し、以下の売上税率のチャートを使用すると、特定の販売のために徴収する必要がある、対応する州の売上税を正確に小数点以下2桁に切り捨てて出力します。コードが丸めを処理する方法を指定してください。

編集:ワシントンの略語は、WAではなくWSとして誤ってリストされていました。それは私の間抜けだったので、回答はどちらかの略語を使用することがあります。

State          Abbr   %
Alabama         AL  4.00%
Alaska          AK  0.00%
Arizona         AZ  5.60%
Arkansas        AR  6.50%
California      CA  6.00%
Colorado        CO  2.90%
Connecticut     CT  6.35%
Delaware        DE  0.00%
Florida         FL  6.00%
Georgia         GA  4.00%
Hawaii          HI  4.00%
Idaho           ID  6.00%
Illinois        IL  6.25%
Indiana         IN  7.00%
Iowa            IA  6.00%
Kansas          KS  6.50%
Kentucky        KY  6.00%
Louisiana       LA  5.00%
Maine           ME  5.50%
Maryland        MD  6.00%
Massachusetts   MA  6.25%
Michigan        MI  6.00%
Minnesota       MN  6.875%
Mississippi     MS  7.00%
Missouri        MO  4.23%
Montana         MT  0.00%
Nebraska        NE  5.50%
Nevada          NV  4.60%
New Hampshire   NH  0.00%
New Jersey      NJ  6.88%
New Mexico      NM  5.13%
New York        NY  4.00%
North Carolina  NC  4.75%
North Dakota    ND  5.00%
Ohio            OH  5.75%
Oklahoma        OK  4.50%
Oregon          OR  0.00%
Pennsylvania    PA  6.00%
Rhode Island    RI  7.00%
South Carolina  SC  6.00%
South Dakota    SD  4.50%
Tennessee       TN  7.00%
Texas           TX  6.25%
Utah            UT  4.70%
Vermont         VT  6.00%
Virginia        VA  4.30%
Washington      WA  6.50%
West Virginia   WV  6.00%
Wisconsin       WI  5.00%
Wyoming         WY  4.00%

カリフォルニア州の州消費税6%の例-

CA
1025.00

61.50

6.875%のミネソタの例-

MN
123.45

8.49

14
inb4 Mathematicaビルトイン。
James

Minnesota MN 6.875%-.005%は、実はたくさんあるからです。
Magic Octopus Urn

1
ああ...そうだ...これは所得税ではない。
Magic Octopus Urn

2
@Shaggyいいえ、大文字小文字は関係ありません。
AdmBorkBork 2017

2
ペダントリー:ワシントンの州の略語はWSではなくWAです。
マイケルSeifert 2017

回答:


15

Mathematicaの、112の 103 77 76 66バイト

Mathematicaにはすべての機能が組み込まれています

NumberForm[Interpreter["USState"][#]@"StateSalesTaxRate"#2,{9,2}]&

州名(任意の形式、省略形またはフルネーム)と金額を受け取ります。

Wolfram Sandboxでお試しください

使用法

f = NumberForm[Interpreter["USState"][#]@"StateSalesTaxRate"#2,{9,2}]&

 

f["CA", 1025.00]

61.50

f["miNnNesToA", 123.45]

8.49

説明

Interpreter["USState"][#]

入力を米国の州名として解釈し、を生成しEntityます。

... @"StateSalesTaxRate"

消費税率を取得します。

... #2

これに2番目の入力を掛けます。

NumberForm[..., {9,2}]

結果を10進数の左側に9桁、右側に2桁の数値にフォーマットします。


6
Mathematica。もちろん...
Ven

8
これは今、ばかげています!
シャギー

142番目のプロパティを取得するために文字列である限り、なぜAPIを使用する必要があるのですか?
Neil

11
ここには半真面目な注意点があります。Mathematicaが絶えず更新するデータストアから実際の単語データを調達しているとすると、特定の州の税率が変化するとどうなりますか?質問で指定された仕様に関して、この回答は無効になりませんか?
ymbirtt 2017

4
@ymbirttは、このメタディスカッションで問題ないはずです。
JungHwan Min

5

R219 212バイト

function(S,m)sprintf("%.2f",c(4,0,5.6,6.5,6,2.9,6.35,0,6,4,4,6,6.25,7,6,6.5,6,5,5.5,6,6.25,6,6.875,7,4.23,0,5.5,4.6,0,6.88,5.13,4,4.75,5,5.75,4.5,0,6,7,6,4.5,7,6.25,4.7,6,4.3,6.5,6,5,4)[match(S,state.abb)]*m/100)

州を省略形(すべて大文字)として使用します。

state.abb は、州の略語をアルファベット順に並べた組み込みのRデータです。したがって、消費税をハードコードし、州のインデックスを見つけ、消費税を計算し、小数点以下2桁にフォーマットします(文字列として出力)。

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


5

05AB1E、134バイト

.•2=Šλ₁ÙH ’€9¿FîβïLT_s€¤Ôтαxì8ÜuK8º'DιÒ—pcλ¯øÒÔ\’þü€ŒβÞéΣŽZê•#.å1kUX0‹i6*т/ëX•Ž½ì∞в’±₃C¸wiα·¥žYÉúžĆƵ˜šŸ‰Ê‡†Σgλ&/ûjDĆв₆•hR„AB„ .‡#è*т/}

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


RIP Mathematicaが勝利しました。


これにより、次の文字列が圧縮されます。

AKDEMTNHOR CO ALGANYHIWY MO VA SDOK NV UT NC LANDWI NM MENE AZ OH ILMATX CT ARKSWS MN NJ INMSRITN

そして:

0 2.9 4 4.23 4.3 4.5 4.6 4.7 4.75 5 5.13 5.5 5.6 5.75 6.25 6.35 6.5 6.875 6.88 7

次に、入力状態のインデックスを使用してレートのインデックスを決定します。デフォルトは6で、6%の状態が非常に多いためです。


他の人が消費するもの:

AKDEMTNHOR 0
CO         2.9
ALGANYHIWY 4
MO         4.23
VA         4.3
SDOK       4.5
NV         4.6
UT         4.7
NC         4.75
LANDWI     5
NM         5.13
MENE       5.5
AZ         5.6
OH         5.75
CAFLIDIAKYMDMIPASCVTWV 6
ILMATX     6.25
CT         6.35
ARKSWS     6.5
MN         6.875
NJ         6.88

私は2つのステートのない交差点が異なる状態EG(作成していないと述べているが、このような注文したので、これはのみ動作しますOHIN含まれている[OH,IN,HI]のに対してINOHのみ含まれているが[IN,OH]


このためのアイデアのほとんどは、以前の州ベースのエントリからのものです。


TIOリンクに-dフラグがある
H.PWiz 2017

@ H.PWizこれはスタックを視覚化するためのものです。削除すると、プログラムの通常の出力が表示されます。
Xcoder氏2017

@ H.PWizこれは視覚化のみを目的としており、コマンドごとに実行され、プログラムが機能する理由を確認できます。
Magic Octopus Urn

ああ、間違って置いてあったと思いました。
H.PWiz 2017

3

Pyth、270 258 233 219バイト

*c@[6Z5.75K6.25 5.5 5 4Z7 6.5J6 7J6.875 7 4J6.35Z6 7 5 4.75 4 4.23J5J5.13 4.6JJ4J4 4.3 4.5Z5.6J.5 4.7K4.5KZ6.5 6.88 5.5J2.9)xc."AZ-íâFT34r7²¨cK'ÉT?Ú5Ï)}4Që7ËÅÖpuªXTiÖ¶7×ì­Éͨ."2w100

次のようにパラメータを渡す必要があります:

1025
CA

説明:

*c@[...)xc."..."2w100
          ."..."       Decompress the string
         c      2      Cut the string in chunks of size 2 (states abbreviations)
        x        w     Get the index of the second parameter in that string
  @[    )              Index into the tax array
 c                100  Generate a percentage
*                      Multiply that with the implicit input at the end
Alas, `.Z` makes this longer. Maybe there's a way to write the array more efficiently, by repeating the keys, but I havn't found one yet.

@ Mr.Xcoderに感謝します。




しか.Z利用できないと思った。ありがとうございました ;-)。
ベン

3

Java(OpenJDK 8)594 + 19 592 580 575 412バイト

s->a->{float[]r={0};java.util.Arrays.asList("AL4`AK0`AZ5.6`AR6.5`CA6`CO2.9`CT6.35`DE0`FL6`GA4`HI4`ID6`IL6.25`IN7`IA6`KS6.5`KY6`LA5`ME5.5`MD6`MA6.25`MI6`MN6.875`MS7`MO4.23`MT0`NE5.5`NV4.6`NH0`NJ6.88`NM5.13`NY4`NC4.75`ND5`OH5.75`OK4.5`OR0`PA6`RI7`SC6`SD4.5`TN7`TX6.25`UT4.7`VT6`VA4.3`WS6.5`WV6`WI5`WY4".split("`")).forEach(e->{if(e.contains(s))r[0]=a/100*new Float(e.substring(2));});return s.format("%.2f",r[0]);}

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


1
Arraysとして直接アドレス指定しjava.util.Arrays、インポートステートメントを取り除くことで、9バイトを節約できます。TIOリンクを含めますが、長すぎます。:P
完全に人間的な2017

を削除するとfinal、さらに数バイトを節約できます。に変更doublefloatます。に変更Double.parseDoublenew Floatます。カレーを使ってに変更(s,a)->s->a->ます。以下は、TIOリンクです。
Kevin Cruijssen 2017

1
ああ、あなたはまた、すべてのカンマと末尾のゼロと変更を削除することができますsubstring(3)するsubstring(2)TIO 415バイト。それは私のJavaの回答より短いです。);)
Kevin Cruijssen

3

Java 8、486 467 309 299 290 289バイト

s->a->{float r=6;for(String x:"AKDENHORMT0 CO2.9 ALGANYHIWY4 MO4.23 VA4.3 SDOK4.5 NV4.6 UT4.7 NC4.75 LANDWI5 NM5.13 MENE5.5 AZ5.6 OH5.75 ILMATX6.25 CT6.35 ARKSWS6.5 MN6.875 NJ6.88 MSRINTN7".split(" "))if(x.contains(s))r=new Float(x.replaceAll("[A-Z]",""));return s.format("%.2f",a*r/100);}

セミコロンを削除することによる@MagicOctopusUrnのおかげで-19バイト。

説明:

ここで試してください。

s->a->                    // Method with String and float parameters and String return-type
  float r=6;              //  Float starting at 6 (most states had 6.00 as tax)
  for(String x:"...".split(" "))
                          //  Loop over all states + amounts
    if(x.contains(s))     //   If the input-state is found in String `x`:
      r=new Float(x.replaceAll("[A-Z]",""));
                          //    Set float `r` to the amount of this state
                          //  End of loop (implicit / single-line body)
  return s.format("%.2f", //  Return result rounded to 2 decimal points:
     a*r/100);            //   Float input multiplied by `r` divided by 100
}                         // End of method

1
私の回答の順序付けを使用する場合、文字列内のすべてのセミコロンを削除できます。
Magic Octopus Urn

HI;NYそして MT;NH、現在、すべてのセミコロンを削除してからあなたを停止し、あなたのコード内で唯一のものです。両方の順序を逆にすると、20バイトほど節約できます。
マジックタコの壷

1
@MagicOctopusUrnありがとう、編集!ところで、の状態7も回答に追加したい場合があります(ただしTN、の現在の順序に干渉し0ます)。
Kevin Cruijssen 2017

@MagicOctopusUrn INMSRITN 7.00AKDENHORMT 0.00は、他のものと競合することなく可能です。
Kevin Cruijssen 2017

2

Perl 6、341バイト

my%a=((<ME NE>X=>5.5),CO=>2.9,MO=>4.23,MN=>6.875,NJ=>6.88,(<LA ND WI>X=>5),(<AK DE MT NH OR>X=>0),(<IN MS RI TN>X=>7),(<AR KS WS>X=>6.5),AZ=>5.6,(<AL GA HI NY WY>X=>4),VA=>4.3,UT=>4.7,(<IL MA TX>X=>6.25),(<CA FL ID IA KY MD MI PA SC VT WV>X=>6),(<OK SD>X=>4.5),NV=>4.6,NM=>5.13,CT=>6.35,OH=>5.75,NC=>4.75).flat;{round $^a*(%a{$^b}/100),0.01}

だから、ハァッ。これはかなり工夫されていると思います。これはX=>X(クロス積)と組み合わされた、Perl 6のメタ演算子を使用し=>ます。

その手段<ME NE> X=> 5.5<ME NE>手段('ME', 'NE'))を取得し=> 5.5得、配列の各要素に適用されますME => 5.5, NE => 5.5。括弧は優先順位のためにここにあります...


ゴルファー(えーと...)として、私は明らかに(実際の機能を除いて)手書きではありません。だから私は最も効率的な組み合わせを生成するためにメタゴルファを書きました!

my %values;
my %simple;
for lines() {
  my $abb = m/<[A .. Z]> ** 2/.Str;
  my $val = m/\d\.\d+/.Str;
  %values{$val}.push: $abb;
  %simple{$abb} = $val;
}

say "(", (join ',', do for %values.kv -> $key, @vals {
  my $int-key = +$key;
  if @vals > 1 {
    "(<{@vals}>X=>$int-key)"
  } else {
    "{@vals}=>$int-key"
  }
}), ").flat";

say();

say join ',', do for %simple.kv -> $key, $val {
  "$key=>" ~ +$val
}

X=>ケースとより単純なケースの両方が生成され(それぞれが列挙されます)、私は最短のケース(前者)を選択しました。


2

JavaScript(ES6)、227 224バイト

構文カリー化で入力を受け取りsが状態で、vは金額です。床の丸めを使用します。(s)(v)

s=>v=>(v*(p=s=>parseInt(s,36))('3344bk50k4mo28k4we4tm5eg3uw48s5az39i3js5b43yi3ny4fq3h03mk3bg'.substr(p('k039017k00038f00030022h00g000j00k600k080k707h30706800ba0030305ic0303303930460000e00d2'[p(s)*84%943%85])*3,3))/1e3|0)/100

デモ


1

Kotlin、444バイト

val S="0|AK|DE|MT|NH|OR#2.9|CO#4|AL|GA|HI|NY|WY#4.23|MO#4.3|VA#4.5|OK|SD#4.6|NV#4.7|UT#4.75|NC#5|LA|ND|WI#5.13|NM#5.5|ME|NE#5.6|AZ#5.75|OH#6|CA|FL|ID|IA|KY|MD|MI|PA|SC|VT|WV#6.25|IL|MA|TX#6.35|CT#6.5|AR|KS|WS#6.875|MN#6.88|NJ#7|IN|MS|RI|TN"
fun c(t:String,d:Double){
val m=mutableMapOf<String,Double>()
S.split("#").map{val s=it.split("|")
for (item in s.subList(1, s.size))m.put(item, s[0].toDouble())}
System.out.printf("%.2f", m[t]!!*d*.01)}

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

美化

// Tax rate followed by states with that rate separated by pipes, with hashes in between
val STATES="0|AK|DE|MT|NH|OR#2.9|CO#4|AL|GA|HI|NY|WY#4.23|MO#4.3|VA#4.5|OK|SD#4.6|NV#4.7|UT#4.75|NC#5|LA|ND|WI#5.13|NM#5.5|ME|NE#5.6|AZ#5.75|OH#6|CA|FL|ID|IA|KY|MD|MI|PA|SC|VT|WV#6.25|IL|MA|TX#6.35|CT#6.5|AR|KS|WS#6.875|MN#6.88|NJ#7|IN|MS|RI|TN"

fun function(targetState: String, amount: Double) {
    // Stores data
    val m = mutableMapOf<String, Double>()
    // For each rate
    STATES.split("#").map {
        // Split the data out
        val rateData = it.split("|")
        // For each state with that rate
        for (stateCode in rateData.subList(1, rateData.size)) {
            // Put it in the dataset
            m.put(stateCode, rateData[0].toDouble())
        }
    }

    // Print out the tax rate
    System.out.printf("%.2f", m[targetState]!! * amount * .01)
}

1

Python 3、303バイト

import re
t=re.split("(\d+)","AL4AK0AZ56AR65CA6CO29CT635DE0FL6GA4HI4ID6IL625IN7IA6KS65KY6LA5ME55MD6MA625MI6MN6875MS7MO423MT0NE55NV46NH0NJ688NM513NY4NC475ND5OH575OK45OR0PA6RI7SC6SD45TN7TX625UT47VT6VA43WS65WV6WI5WY4")
f=lambda s,a:"%.2f"%({t[i-1]:float(t[i])/10**-~len(t[i])for i in range(1,len(t),2)}[s]*a)

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

非常にシンプル:データは2文字+数字のリストとして保存されます。すべてのパーセンテージは10未満なので、整数部(1桁)+小数部(0 -...数字)として保存できます。


1

C#318 309バイト


データ

  • 入力 String s州の大文字の2文字の略語。
  • 入力 Double v
  • 出力 String徴収される税額は小数点第2位で四捨五入されます。

ゴルフ

(s,v)=>{for(int i=0;i<21;i++)if("NHAKDEMTOR,CO,ALHIGANYWY,MO,VA,SDOK,NV,UT,NC,NDLAWI,NM,MENE,AZ,OH,KYCAFLIDIAMDMIPASCVTWV,ILMATX,CT,ARKSWA,MN,NJ,MSINRITN".Split(',')[i].Contains(s))return $"{v*(new[]{0,2.9,4,4.23,4.3,4.5,4.6,4.7,4.75,5,5.13,5.5,5.6,5.75,6,6.25,6.35,6.5,6.875,6.88,7}[i]/100):F2}";return "";};

未ゴルフ

( s, v ) => {
    for( int i = 0; i < 21; i++ )
        if( "NHAKDEMTOR,CO,ALHIGANYWY,MO,VA,SDOK,NV,UT,NC,NDLAWI,NM,MENE,AZ,OH,KYCAFLIDIAMDMIPASCVTWV,ILMATX,CT,ARKSWA,MN,NJ,MSINRITN".Split( ',' )[ i ].Contains( s ) )
            return $"{v * ( new[] { 0, 2.9, 4, 4.23, 4.3, 4.5, 4.6, 4.7, 4.75, 5, 5.13, 5.5, 5.6, 5.75, 6, 6.25, 6.35, 6.5, 6.875, 6.88, 7 }[ i ] / 100 ):F2}";
    return "";
};

読みにくい

// Takes a 2 letter abbreviation state ( 's' ) and a value ( 'v' )
( s, v ) => {

    // Cycles through an array with the states grouped by tax value
    for( int i = 0; i < 21; i++ )

        // Checks if the state group at the current index contains the state 's'
        if( "NHAKDEMTOR,CO,ALHIGANYWY,MO,VA,SDOK,NV,UT,NC,NDLAWI,NM,MENE,AZ,OH,KYCAFLIDIAMDMIPASCVTWV,ILMATX,CT,ARKSWA,MN,NJ,MSINRITN".Split( ',' )[ i ].Contains( s ) )

            // Returns the value 'v' * the corresponding state percentage divided by 100
            return $"{v * ( new[] { 0, 2.9, 4, 4.23, 4.3, 4.5, 4.6, 4.7, 4.75, 5, 5.13, 5.5, 5.6, 5.75, 6, 6.25, 6.35, 6.5, 6.875, 6.88, 7 }[ i ] / 100 ):F2}";

    // If the state isn't found, return an empty string
    return "";
};

完全なコード

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TestBench {
    public static class Program {
        private static Func<String, Double, String> f = ( s, v ) => {
            for( int i = 0; i < 21; i++ )
                if( "NHAKDEMTOR,CO,ALHIGANYWY,MO,VA,SDOK,NV,UT,NC,NDLAWI,NM,MENE,AZ,OH,KYCAFLIDIAMDMIPASCVTWV,ILMATX,CT,ARKSWA,MN,NJ,MSINRITN".Split( ',' )[ i ].Contains( s ) )
                    return $"{v * ( new[] { 0, 2.9, 4, 4.23, 4.3, 4.5, 4.6, 4.7, 4.75, 5, 5.13, 5.5, 5.6, 5.75, 6, 6.25, 6.35, 6.5, 6.875, 6.88, 7 }[ i ] / 100 ):F2}";
            return "";
        };

        static void Main( string[] args ) {
            List<KeyValuePair<String, Double>>
                testCases = new List<KeyValuePair<String, Double>>() {
                    new KeyValuePair<String, Double>( "CA", 1025.0d ),
                    new KeyValuePair<String, Double>( "MN", 123.45d ),
                };

            foreach( KeyValuePair<String, Double> testCase in testCases ) {
                Console.WriteLine( $" STATE: {testCase.Key}\n VALUE: {testCase.Value}\nOUTPUT: {f( testCase.Key, testCase.Value )}\n" );
            }

            Console.ReadLine();
        }
    }
}

リリース

  • v1.0の - 318 bytes-初期ソリューション。
  • V1.1 - - 9 bytes-変更.ToString("F2")の補間文字列への最初の復帰に使用します。

ノート

  • 無し

0

AWK、277バイト

{split("LANDWI 5 VA 4.3 IACAFLIDKYMDMIPASCVTWV 6 SDOK 4.5 MO 4.23 CO 2.9 NM 5.13 NV 4.6 UT 4.7 NJ 6.88 MENE 5.5 AZ 5.6 ARKSWA 6.5 MN 6.875 MSINRITN 7 ILMATX 6.25 NC 4.75 CT 6.35 ALGANYWYHI 4 OH 5.75 AKDEMTORNH 0",T)
for(i in T)if(T[i]~s=".*"$1".*")printf"%.2f\n",$2*T[i+1]*.01}

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

かなりのスコアですが、Mathematicaの近くにはありません。各チェックの後に改行を印刷することで2バイトを追加しましたが、その方がきれいだと思います:)

(うまくいけば、入力は州の略称と1行の値であるべきです。)

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