내 변화를 센다


21

당신의 임무는 문자열 "quarter", "dime", "nickel"및 "penny"를 포함하는 배열을 특정 순서로 여러 번 정렬하고 순서대로 정렬하는 것입니다 quarter dime nickel penny(즉, 가장 큰 금전적 가치).


규칙

  1. 프로그램은 미국 동전의 이름을 포함하는 입력 값으로 배열을 가져 와서 가장 큰 값에서 가장 작은 값으로 정렬해야합니다.
    • 미국 출신이 아니거나 변경을 사용하지 않는 사람들의 경우 미국 동전의 가치는 다음과 같습니다.
      • 분기 : 25 센트
      • 다임 : 10 센트
      • 니켈 : 5 센트
      • 페니 : 1 센트
  2. 출력이 위에 표시된 통화 값으로 정렬되는 한 원하는 방식으로이 배열을 정렬 할 수 있습니다.
  3. 명령 행 인수 또는 STDIN이든 어떤 식 으로든 입력 할 수 있습니다.
  4. 입력 배열은 모두 다음과 같은 소문자 문자열입니다.
    • quarter dime nickel nickel quarter dime penny penny
  5. 입력 및 출력의 실제 형식은 사용자에게 달려 있습니다.

테스트 사례

"penny nickel dime quarter" 
-> "quarter dime nickel penny"

"nickel penny penny quarter quarter quarter dime dime dime dime"
-> "quarter quarter quarter dime dime dime dime nickel penny penny"

"quarter dime nickel nickel quarter dime penny penny"
-> "quarter quarter dime dime nickel nickel penny penny"

이것은 이므로 표준 규칙 및 허점이 적용됩니다.



1
모든 테스트 사례에는 출력이 포함되어야합니다. 이동국에서, 두 번째 및 세 번째 경우는 두 번째 라인이 출력된다 것처럼 보이도록, 두 개의 라인에 도시되어있다
루이스 Mendo에게

4
나는 캐나다 사람입니다, 입력에 동전이 없다고 가정 할 수 있습니까? ;)
undergroundmonorail

1
@undergroundmonorail 슬프게도, 아닙니다.
ckjbgames 2013

1
루니와 반 달러는 어떻게 되었습니까?
Adám

답변:


26

Japt , 5 3 바이트

ñg9

온라인으로 테스트하십시오!

설명

나도 지난 몇 주 동안 내 언어에 정렬 기능을 추가했습니다. :-) ñ배열과 함수를 가져 와서 각 항목이 해당 함수를 통해 매핑 된 것처럼 배열을 정렬합니다.

g문자열 의 함수는 숫자를 가져 와서 음수이거나 문자열 끝을 지나면 줄 바꿈하여 문자열 nnth 문자를 반환 n합니다. 따라서 문자열을 다음과 같이 정렬 할 수 있습니다.

quarterquarter...
dimedimedimedi...
nickelnickelni...
pennypennypenn...

각 문자열의 9 번째 문자 (0 색인)는 굵게 강조되어 있습니다. 이것들은 올바른 순서로되어 있으므로 우리가해야 할 일은입니다 ñg9. (지금까지 되돌아 보았지만 ñg5잘 작동합니다 ...)


그것은 5와 함께 작동해야한다고 생각합니다.
FlipTack

@FlipTack 그래, 나 자신을 알아 차렸다. 그것이 차이를 만드는 것은 아닙니다 ;-)
ETHproductions

이. 할 수 없습니다. 있다. 패배.
ckjbgames 2016 년

1
@ckjbgames Dennis 님이 답변을 게시하지 않았습니다 ;-)
ETHproductions

1
@ETHproductions 그는 아마 것입니다. 그에게이 질문을 보여주세요.
ckjbgames

8

V , 7 바이트

ú/¨qu©¿

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

이것은 일주일 전 V에 추가 한 새로운 정렬 명령을 사용합니다 ( ú). 달콤한 타이밍!

이것이 작동하는 방식은 기본 정렬 (ASCII 값)에 따라 모든 줄을 정렬하지만 특정 정규식의 첫 번째 일치를 무시하는 것입니다. 이 경우 정규 표현식은 (qu)?입니다. 백 슬래시 사용을 피하기 위해 총 ASCII가 아닌 것들이 있습니다. "quarter"의 처음 두 글자를 무시하면 'a'로 시작하고 모든 동전은 이미 알파벳 순서로되어 있습니다.

비경쟁 버전, 4 바이트

ú!/.

이 기능은 이미 구현되었지만 아직 광범위하게 테스트하지 않았기 때문에이 문제로 인해서 만 실현 된 버그가있었습니다. TIO가 약간 뒤에 있기 때문에 TIO 링크가 없습니다.

이것은 모든 줄을 역으로 정렬하지만 각 줄의 첫 번째 문자는 무시하여 작동합니다.


8

파이썬, 36 바이트

lambda a:a.sort(key=lambda x:x[-5:])

이름이 지정된 함수는 주어진 키 함수에 의해 내부 목록을 정렬합니다.

각 동전 이름의 조각은 그 다음이다, arter, dime, ickel,와 penny- 알파벳 (또는 더 중요한 순서) 순서로하는 수 있습니다.


오 죄송합니다-내가 el틀린 길을 찾지 못하면 c: p
Allan



5

PowerShell , 21 바이트

$args|sort{($_*3)[9]}

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

설명

ETHproductions의 답변 에서 알고리즘을 뻔뻔 스럽게 훔쳤습니다 (기본적으로). 각 문자열에 3을 곱한 다음 결과 문자열의 9 번째 문자를 기준으로 정렬합니다.


$_PowerShell에 무엇입니까 ?
ckjbgames 2012

@ckjbgames 스크립트 블록 내의 파이프 라인에서 현재 항목을 나타냅니다. 따라서 1,2,3,4 | ForEach-Object { $_*2 }각 숫자에 2를 곱한 값이 출력됩니다. 스크립트 블록은 입력 항목마다 한 번씩 실행됩니다.
briantist

말이 되네요
ckjbgames 2012

5

젤리 , 4 바이트

6ịµÞ

온라인으로 사용해보십시오! 바닥 글ÇY은 결과 목록을 더 예쁘게 인쇄하기 위해 줄 바꿈과 결합합니다.

방법?

6ịµÞ - Main link: list of strings
  µ  - monadic chain separation
   Þ - sort the list of strings by the monadic function:
6ị   - the sixth index - Jelly indexing is modular and 1-based

Jelly에있는 목록의 N 번째 색인은 왼쪽에서 시작하여 1부터 세고 필요할 때 시작으로 반복되는 N 번째 항목입니다. (0은 오른쪽에 있고, -1은 왼쪽에 있습니다.)

의 여섯 번째 캐릭터가 그래서 ['d','i','m','e']입니다 'i'여섯 때문에 두 개의 모듈로 4 개의 합동입니다.

네 개의 동전 중 여섯 번째 문자는 쿼터 er, d ime, nicke l, penny입니다. 이들은 알파벳순 (또는 더 중요한 서수) 순서로되어 있습니다.


같은 일을 달성하는 또 다른 방법은 회전과 문자열을 기준으로 정렬하는 것 ṙ5µÞ, 문자열을 오른쪽으로 회전, erquart, imed, lnicke,와 penny.


5

파이썬 , 32 바이트

lambda s:s.sort(key="npr".strip)

온라인으로 사용해보십시오! 목록을 제자리에 정렬합니다.

아이디어는을 사용하지 않고 정렬 키 기능을 사용하는 것 lambda입니다. 좋은 후보는 x.strip문자열을 가져 와서 x입력의 모든 문자를 왼쪽과 오른쪽 가장자리에서 제거했습니다. 예를 들면 다음과 같습니다 "abcdef".strip("faces") == "bcd".

이 방법 "npr".strip은 다음을 수행합니다.

quarter ->  np
dime    ->  npr
nickel  ->  pr
penny   ->  r

사전 순으로 정렬되어 있습니다. 나는 npr무차별적인 힘으로 줄 을 찾았다 . npunpt도 작동하고, 아무도 짧은있다.


5

배쉬 (+ coreutils) 11 바이트

골프

sort -rk1.2

작동 원리

첫 번째 필드 (워드)의 두 번째 문자에서 줄 끝까지 "정렬 키"를 사용하여 역 정렬 :

uarter
ime
ickel
enny

테스트

>echo penny nickel dime quarter|tr ' ' '\n'|sort -rk1.2

quarter
dime
nickel
penny

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





3

V , 8 7 바이트

@DJMcMayhem 덕분에 1 바이트 절약

Úçq/:m0

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

V에서 @DJMcMayhem의 답변 보기 ( 1 바이트는 내 것보다 짧음)

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

Ú                    " sort all lines "
 ç                   " globally "
  q/                 "  where there a q is matched, "
    :m0              "  move it to the top of the buffer "

여기에 1 바이트 더 큰 이전 솔루션이 있지만 정말 마음에 듭니다.

V , 8 바이트

Ú/q
dGHP

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

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

설명

Ú        " sorts the lines

이제 버퍼의 형식은 다음과 같습니다.

dimes
nickels
pennies
quarters

이제 남은 것은 분기를 맨 위로 이동하는 것입니다.

/q      " search for a q "
dG      " delete everything from the first quarter to the end of buffer "
HP      " and paste it at the top of the buffer

당신은 할 수있는 :m0대체 솔루션 바이트를 저장 (나 넥타이)에Úçq/:m0
DJMcMayhem

@DJMcMayhem 감사, TIL에 대한:move
Kritixi LITHOS


1

T-SQL, 41 36 34 바이트

select*from @ order by right(a,5)

설명

입력이 이름이 지정된 @단일 열과 함께 이름이 지정된 테이블 변수에 사전로드되어 있다고 가정합니다 a. 여기서 각 값은 정렬 할 하나의 코인입니다.

select * from @부분은 보일러 플레이트이며 '모든 값을 돌려줍니다'. 실제 마술은 order by절 에서 발생합니다 .

같은 전략을 사용 조나단 앨런 , 나는 일종의 마지막 다섯 개 문자로 (너무 짧다 경우 SQL이 전체 문자열을 반환합니다) : arter, dime, ickel, penny.


q뒤에 오는 다음 문자 p이므로 값 을 q작게 하는 간단한 모드 p의 경우 q,의 인수가되어야합니다. 먼저 1을 빼면 모듈러스가 7이 될 수 있지만 아마도 113만큼 바이트가 필요할 것입니다.
Neil

@Neil 그래, 나는 113이 소수라는 사실이 카운트를 줄이려는 시도를 망친다는 것을 깨달았다. -1을 수행 한 다음 mod 7을 사용하면 더 많은 바이트가 필요합니다 (필요한 괄호 포함)
Brian J '

1

자바 스크립트 (ES6), 35 33 바이트

a=>a.sort(([,...a],[,...b])=>b>a)

테스트 사례


1

펀드, 158 바이트

~:0`v0v4<~_
9:%8_^>8*`^1p9\+1g
$:!#@_1-0" ynnep">:#,_>
1-0" lekcin">:#,_>$:!#^_
" emid">:#,_>$:!#^_1-0
>:#,_$1>-:!#^_0" retrauq"
*84g9< ^*84g91-*84g94-*84g96-

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

문자열 처리 및 정렬은 Befunge에서 일반적으로 시도하려는 종류의 것이 아니지만이 솔루션은 실제로 아무것도 정렬 할 필요가 없다는 John Kasunich의 관찰 을 활용 합니다. 우리는 각 코인의 발생 횟수를 세고 (첫 번째 문자에서 쉽게 결정할 수 있음) 각 코인 이름의 많은 수를 적절한 순서로 출력합니다.

여전히 크기 측면에서 다른 언어와 경쟁하지는 않지만이 방법은 문자열 정렬 연습으로 도전을 처리하려고 시도했을 때보 다 적어도 더 좋습니다.


1

Pyth, 3 바이트

@D5

데모

를 기반으로 ETHproductions JAPT에서의 대답.

설명:

@D5
@D5Q    Variable introduction
 D Q    Sort the input by
@ 5     Its fifth character

1

APL (Dyalog APL) , 11 바이트

문자열 목록을 가져 와서 반환합니다.

{⍵[⍋↑5⌽¨⍵]}

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

{ 익명의 기능 :

⍵[] 에 의해 색인 된 인수

 오름차순 지수

 행이 채워지는 행렬

5⌽ 5 단계 회전

¨⍵ 논쟁의 항목

}



1

껍질 , 3 바이트

Öṙ9

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

내 Brachylog 답변에서 포팅되었습니다 .ETH 프로덕션의 Japt 답변을 없애지 만 n 번째 요소에 액세스하는 대신 회전을 사용하기 때문에 정확한 번역이 아닙니다. 거기에서 나는 입력의 끝을지나 색인을 생성 할 수 없기 때문에 그것을했습니다 (언어의 선언적 특성으로 인해 많은 상황에서 상당히 도움이 될 것입니다). 껍질에서 ! 수행 JAPT의 그 같은 모듈 형 포장 주위에, 입력의 끝을지나 당신에게 인덱스를하게 ñg9사용하지만, 특히이 프로그램은 한 바이트 이상 끝나게 것이다 그래서는 1이다 : Ö!10.

Ö      Sort by
 ṙ     rotation by
  9    9.

0

배치, 82 바이트

@for %%c in (quarter dime nickel penny)do @for %%a in (%*)do @if %%a==%%c echo %%c

입력을 명령 행 인수로 사용하고 STDOUT에 출력합니다. 각 코인의 원래 목록을 필터링하여 생성 된 목록을 연결하여 작동합니다.



0

루비, 31 바이트

->s{s.sort_by{|i|i[1]}.reverse}

항상 "니켈"과 "다임"을 올바르게 정렬하지는 않습니다.
daniero

0

루비, 30 바이트

->m{m.sort_by{|s|s[3].ord^16}}

시행 착오에 의해 발견 된 마법의 숫자. 약간 어색하지만을 사용하는 것보다 짧습니다 .reverse.


0

펄 6 ,  40 36  34 바이트

*.sort: {(<q d n p>Zxx 1..*).Bag{~m/./}}

시도 해봐

*.sort: {%(<q d n p>Z=>1..*){~m/./}}

시도 해봐

*.sort: {%(<q d n p>Z=>^4){~m/./}}

시도 해봐

넓히는:

*\            # WhateverCode lambda ( this is the parameter )

.sort:        # sort using the following code block

{             # bare block lambda with implicit parameter 「$_」

  %(          # treat this list as a hash

    <q d n p> # list of first characters
    Z[=>]     # zipped using pair constructor
    ^4        # Range from 0 up-to 4 ( excludes 4 )

  ){          # get the value associated with this key

    ~m/./     # regex which gets the first character ( implicitly from 「$_」 )

  }

}


0

RProgN , 18 바이트

~{3mtt¢\3mtt¢>}$

설명

~               # Zero Space Segment
 {            } # Anonymous Function
  3m            # Repeat the inputted string 3 times
    tt¢         # And take the tenth character of that
       \3mtt¢   # Do the same for the entry underneith
             >  # Compare the ascii value of the two
               $# Sort the input by the anonymous function.

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


0

자바 8, 128112 바이트

이것은 람다 식입니다. java.util.function.Function<String[],String[]>

s->{String r="";for(String k:"q d c p".split(" "))for(String t:s)if(t.contains(k))r+=" "+t;return r.split(" ");}

Explantion : 4 개의 코인 각각을 순서대로 입력하고 해당 코인의 고유 한 캐릭터와 일치 할 때마다 코인의 이름을 결과에 추가합니다. 결과를 배열로 나누고 반환합니다.


0

루비, 27 바이트

->s{s.sort_by{|x|(x*2)[5]}}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.