간단한 주 판매 세 계산기


10

미국의 판매 세는 가장 복잡합니다. 일반적으로 주 판매 세 (주 판매 세를 징수하지 않는 소수의 주가 있음)가 있지만 카운티 판매 세, 학군 판매 세,시 (시) 판매 세 또는 대도시 지역 판매 세. 도시마다 다른 판매 세가있을 수도 있습니다. 그러나이 문제를 해결하기 위해 주 판매 세에만 초점을 맞출 것입니다.

미국 달러 금액이 0보다 크거나 (소수점 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 내장.
제임스

Minnesota MN 6.875%-.005 %가 실제로 많기 때문입니다.
Magic Octopus Urn

1
아 .. 맞아요. 이것은 소득세가 아닙니다.
Magic Octopus Urn

2
@Shaggy 아니요, 사례는 중요하지 않습니다.
AdmBorkBork

2
Pedantry : 워싱턴의 주 약자는 WS가 아닌 WA입니다.
Michael Seifert

답변:


15

매쓰, 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

두 번째 입력에 곱하십시오.

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

결과를 소수점 왼쪽에 9 자리, 오른쪽에 2 자리의 숫자로 형식화하십시오.


6
수학. 물론 ...
Ven

8
이것은 지금 바보 짓입니다!
얽히고 설킨

142nd 속성을 얻기 위해 문자열을 사용하는 한 API를 사용해야하는 이유는 무엇입니까?
Neil

11
여기에 반의 심한 논점이 있습니다. Mathematica가 지속적으로 업데이트되는 데이터 저장소에서 실제 데이터를 제공한다고 가정하면 특정 주 세율이 변경되면 어떻게됩니까? 그러면이 답변이 질문에 지정된 사양과 관련하여 유효하지 않습니까?
ymbirtt

4
이 메타 토론에 대해서는 @ymbirtt가 좋을 것 입니다 .
JungHwan Min

5

R , 219212 바이트

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

@ H.PWiz 스택을 시각화하기위한 것입니다. 제거하면 프로그램의 일반 출력이 표시됩니다.
Mr. Xcoder

@ H.PWiz 시각화 목적으로 만 사용되며 명령별로 가져 와서 프로그램이 작동하는 이유를 확인할 수 있습니다.
Magic Octopus Urn

아, 나는 그것이 실수로 남아 있다고 생각했다.
H.PWiz

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사용할 수 있다고 생각했다 . 다시 감사합니다 ;-).
Ven

3

자바 (오픈 JDK 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
직접 해결하여 9 바이트를 저장할 수 Arraysjava.util.Arrays및 import 문 치우는. TIO 링크를 포함 시키지만 너무 깁니다. : P
완전히 인간적인

제거하여 몇 바이트를 더 절약 할 수 있습니다 final. 변화 doublefloat; 변화 Double.parseDoublenew Float; 카레를 사용하여로 변경 (s,a)->합니다 s->a->. 방법을 보려면 TIO 링크가 있습니다.
Kevin Cruijssen

1
또한 쉼표와 후행 0을 모두 제거하고 다음 substring(3)으로 변경할 수 있습니다 substring(2). TIO 415 bytes . 내 Java 답변보다 짧습니다 ..;)
Kevin Cruijssen

3

자바 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 바이트가 절약됩니다.
Magic Octopus Urn

1
@MagicOctopusUrn 감사합니다, 편집했습니다! Btw, 당신은 7답변에 대한 상태를 추가하고 싶을 수도 있습니다 (그러나TN 현재 순서를 방해합니다 0).
Kevin Cruijssen

@MagicOctopusUrn INMSRITN 7.00& AKDENHORMT 0.00는 다른 것과 충돌하지 않고 가능합니다.
Kevin Cruijssen

2

펄 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. 괄호는 단순히 여기에 우선합니다 ...


골퍼로서 (erm ...), 나는 (실제 기능을 제외하고) 손으로 직접 작성하지 않았습니다. 그래서 가장 효율적인 조합을 생성하기 위해 메타 골퍼를 작성했습니다!

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=>케이스 (각 열거되면서)보다 단순한 경우에, I 및 최단 온 (전자)를 들었다.


2

자바 스크립트 (ES6), 227 224 바이트

태닝 구문 입력을 받아 상태이고 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

코 틀린 , 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

파이썬 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)

온라인으로 사용해보십시오!

매우 간단합니다. 데이터는 두 문자 + 자릿수로 저장됩니다. 모든 백분율은 10보다 작으므로 정수 부분 (1 자리) + 소수 부분 (0 -... 자리)으로 저장할 수 있습니다.


1

C # , 318309 바이트


데이터

  • 입력 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- 초기 솔루션입니다.
  • 1.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 바이트를 추가했지만 그 방법이 더 예쁘다고 생각합니다. :)

(입력이 상태 약어와 한 줄의 값이어야 함이 분명합니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.