Değişikliğimi Say


21

Göreviniz "quarter", "dime", "nickel" ve "penny" dizelerini belirli bir sıra içerisinde ve herhangi bir sayıda, belirli bir sırayla içermeyen bir diziyi sıralamak ve bunları şu sıraya göre sıralamaktır: quarter dime nickel penny(başka bir deyişle, en düşük para değerine sahip).


kurallar

  1. Programınız, ABD paralarının adlarını içeren girdi olarak bir dizi almalı ve bunları en büyükten en az parasal değere göre sıralamalıdır.
    • ABD’den olmayan ya da değişim kullanmayanlar için ABD’nin madeni paralarının değerleri, en büyüğünden en küçüğüne kadar:
      • Çeyrek: 25 sent
      • Kuruş: 10 kuruş
      • Nikel: 5 kuruş
      • Penny: 1 kuruş
  2. Çıktı yukarıda gösterilen parasal değerler tarafından sipariş edildiği sürece, bu diziyi istediğiniz şekilde sıralayabilirsiniz.
  3. Giriş, komut satırı argümanları veya STDIN gibi, herhangi bir şekilde alınabilir.
  4. Bir giriş dizisi küçük harfli dizeler olur, buna benzer bir şey:
    • quarter dime nickel nickel quarter dime penny penny
  5. Gerçek giriş ve çıkış formatı size bağlıdır.

Test Kılıfları

"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"

Bu , bu yüzden standart kurallar ve boşluklar geçerlidir.



1
Tüm test durumları çıktı içermelidir. Cep telefonunda ikinci ve üçüncü vakalar iki satırda gösteriliyor, yani ikinci satır çıktı gibi görünüyor
Luis Mendo

4
Ben kanadalıyım, girişin parasız olmadığını varsayabilir miyim? ;)
undergroundmonorail

1
@ undergroundmonorail Ne yazık ki hayır.
ckjbgames

1
Loonies'e ve yarım dolara ne oldu?
Adám

Yanıtlar:


26

Japt , 5 3 bayt

ñg9

Çevrimiçi test edin!

açıklama

Ben de, son birkaç hafta içinde dilime bir sıralama işlevi ekledim :-) ñbir dizi alır ve bir işlevi alır ve diziyi her bir öğe o işlev üzerinden eşlenmiş gibi sıralar.

gBir ipe işlevi, bir sayı alır nve iadeler nise, sarma dizede inci kömürü nnegatif ya dizenin sonuna geçmiş. Böylece ipler aşağıdaki gibi hizalanabilir:

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

Her dizenin 9. karakteri (0 indeksli) koyu olarak vurgulanmıştır. Bunlar doğru sırada, bu yüzden tek yapmamız gereken şey ñg9. (Şimdi geriye baksam ñg5da işe yarayabilirdi ...)


Ayrıca 5 ile çalışması gerektiğini düşünüyorum.
FlipTack

@FlipTack Evet, sadece kendim farkettim. Bir fark
yaratmaz ki

Bu. Yapamam. Ol. Yenilen.
ckjbgames

1
@ckjbgames Dennis herhangi bir cevap
yazmadı

1
@ETHproductions Muhtemelen olacak. Ona bu soruyu göster.
ckjbgames

8

V , 7 bayt

ú/¨qu©¿

Çevrimiçi deneyin!

Bu, yaklaşık bir hafta önce V'ye eklediğim yeni spiffy sort komutunu kullanır ( ú). Tatlı zamanlama!

Bunun işleyişi, her satırı varsayılan sıralamaya göre sıralamaktır (ASCII değerleri), ancak belirli bir regex'in ilk eşleşmesini yok sayarak. Bu durumda, regex (qu)?ters eğik çizgi kullanmaktan kaçınmak için bazı brüt ASCII olmayan şeyler olmasına rağmen. Eğer "çeyrek" ilk iki harfini görmezden gelirseniz, 'a' ile başlar, ve sonra tüm paralar zaten alfabetik olarak sıralanmıştır.

Rekabet etmeyen sürüm, 4 bayt

ú!/.

Bu özellik zaten uygulandı, ancak henüz kapsamlı bir şekilde test etmedim, bu nedenle yalnızca bu zorluk nedeniyle farkettim. TIO bağlantısı yok çünkü TIO biraz geride.

Bu, her satırı tersten sıralayarak çalışır, ancak her satırdaki ilk karakteri görmezden gelir.


8

Python, 36 bayt

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

Listeyi, verilen anahtar işleviyle yerinde sıralayan adsız işlev.

Her para adı dilimleri daha sonra, arter, dime, ickel, ve penny- alfabetik (veya daha da önemlisi, sıra) sırayla bu bulunmaktadır.


Hata! Eğer elyanlış yoldan gidemezsem, özledim c: p
Jonathan Allan



5

PowerShell , 21 bayt

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

Çevrimiçi deneyin!

açıklama

ETHproductions'un cevabındaki algoritmayı utanmadan çaldı (temelde). Her dizgiyi 3 ile çarptım, sonra ortaya çıkan dizginin 9. karakterine göre sıraladım.


$_PowerShell'de neler var ?
ckjbgames

@ckjbgames Bir boru hattında, bir scriptblock içindeki mevcut öğeyi ifade eder. Böylece 1,2,3,4 | ForEach-Object { $_*2 }her sayı çarpı 2 gibi bir şey çıkacak; komut dosyası bloğu giriş öğesi başına bir kez çalıştırılır.
Briantist, 19

Bu mantıklı.
ckjbgames

5

Jöle , 4 bayt

6ịµÞ

Çevrimiçi deneyin! (altbilgi,ÇYdaha iyi bir baskı için satır beslemeli sonuç listesine katılır.)

Nasıl?

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’deki bir listenin Nth dizini, soldan başlayan, 1’den sayılan ve gerektiğinde tekrar başa dönen Nth öğesidir. (0) sağda, -1 solda vb. Da var).

Altıncı karakter Yani ['d','i','m','e']olan 'i'altı yana iki modülo dört uyumlu olduğunu.

Dört madalyonun altıncı karakteri sırayla ed i, r, me l, pnick , enny. Bunlar alfabetik (veya daha da önemlisi, sıralı) düzendedir.


Aynı şeyi başarmak için başka bir yol döndürülmüş olan dizeleri tarafından tür olacağını ṙ5µÞ, dizeleri yapma sağa döner, erquart, imed, lnicke, ve penny.


5

Python , 32 bayt

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

Çevrimiçi deneyin! Listeyi yerinde sıralar.

Buradaki fikir, a olmadan bir sıralama tuşu işlevi kullanmaktır lambda. İyi bir aday olduğunu x.stripdize aldığı, xve onun sol kaldırır ve doğru girişe tüm karakterlerin sınırındadır. Örneğin "abcdef".strip("faces") == "bcd",.

Yöntem "npr".stripalır:

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

sözlüksel olarak sıralanır. nprKordonu kaba kuvvetle buldum . npuve nptaynı zamanda çalışmak ve daha kısa olanı yok.


5

Bash (+ coreutils) 11 bayt

golfed

sort -rk1.2

Nasıl çalışır

İlk alanın (kelimenin) ikinci karakterinden satırın sonuna kadar "sıralama tuşu" ile sıralama işlemini tersine çevirin.

uarter
ime
ickel
enny

Ölçek

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

quarter
dime
nickel
penny

Çevrimiçi Deneyin!


4

CJam , 8 bayt

q~{5=}$p

Çevrimiçi deneyin!

açıklama

q~        Get and eval all input (array of coin names)
  {5=}$   Sort the array by the 5th index of each element (array indices loop in CJam)
       p  Print the result



3

V , 8 7 bayt

@DJMcMayhem sayesinde 1 bayt kurtarıldı

Úçq/:m0

[Çevrimiçi deneyin!]

DJMcMayhem en @ bakınız yanıt V ( 1 0 benim daha kısa bayt)

Çevrimiçi deneyin!

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

İşte 1 byte daha büyük eski bir çözüm, ama ben gerçekten hoşuma gitti.

V , 8 bayt

Ú/q
dGHP

[Çevrimiçi deneyin!]

Çevrimiçi deneyin!

açıklama

Ú        " sorts the lines

Şimdi tampon bu formatta olacak:

dimes
nickels
pennies
quarters

Şimdi yapılacak tek şey, mahalleyi zirveye çıkarmak.

/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

:m0Bir bayttan tasarruf etmek için alternatif çözümünüzü yapabilirsiniz (ve beni Úçq/:m0
bağlayın

@DJMcMayhem Teşekkürler, hakkında hakkında:move
Kritixi Lithos


1

T-SQL, 41 36 34 bayt

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

açıklama

Girişin, her değerin sıralanacak bir jeton olduğu, @adında tek bir sütunla adlandırılmış bir tablo değişkenine önceden yüklendiğini varsayalım a.

select * from @Bölüm kazan levhası 'dönüşü için tüm değerleri almak' dir. Gerçek sihir order byyan tümcesinde olur .

Aynı stratejiyi kullanarak Johnathan Allan , ben sıralama son beş karakterle (çok kısa olursa, SQL tüm dize döndürür): arter, dime, ickel, penny.


qBir sonraki harftir p, bu nedenle basit bir modun değerden qdaha az sonuç pvermesi için qasal olan bir faktör olması gerekir . Önce 1'i çıkartabilir ve sonra 7'lik bir modül işe yarar, ancak bu muhtemelen en az 113 bayt alacaktır.
Neil

@Neil Evet, ben 113 asal olmak sayımı azaltma girişimlerimi mahvettiğini fark ettim. -1 ve sonra mod 7 yapmak daha fazla bayt (gerekli parantez dahil.
Brian J

1

JavaScript (ES6), 35 33 bayt

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

Test durumları


1

Befunge, 158 bayt

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

Çevrimiçi deneyin!

Dize işleme ve sıralama genellikle Befunge'de denemek isteyeceğiniz şeyler değildir, ancak bu çözüm John Kasunich'in aslında herhangi bir şeyi sıralamamız gerekmediğine dair gözleminden faydalanmaktadır . Sadece her bir madalyonun oluşum sayısını sayarız (ilk karakterden kolayca belirlenebilir) ve daha sonra her jeton adının çoğunu uygun sıraya göre yazarız.

Hala boyut açısından diğer dillerle rekabet etmiyor, ancak bu yaklaşım en azından dize sıralama alıştırması olarak bu zorluğun üstesinden gelmeye çalışacak olmamızdan daha iyi.


1

Pyth, 3 bayt

@D5

gösteri

Dayanarak ETHproductions Japt içinde 'ın cevabı.

Açıklama:

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

1

APL (Dyalog APL) , 11 bayt

Dizelerin listesini alır ve döndürür.

{⍵[⍋↑5⌽¨⍵]}

Çevrimiçi deneyin!

{ adsız işlev:

⍵[] Tarafından savunulan argüman

 yükselen endeksler

 satırları yastıklı olan matris

5⌽ Beş adım-döndürülmüş

¨⍵ argümanın öğeleri

}



1

Kabuğu , 3 bayt

Öṙ9

Çevrimiçi deneyin!

ETHProductions'un Japt cevabını ortadan kaldıran ancak kesin bir çeviri olmayan Brachylog cevabımdan yola çıkarak, basitçe-elementine erişmek yerine rotasyon kullandığından. Orada yaptım çünkü girişin sonunu endekslemenize izin vermiyor (dilin bildirimsel niteliği nedeniyle birçok durumda muhtemelen oldukça yardımcı oluyor). Kabuk yılında ! yaptığı Japt aynı modüler sarma, etrafımızda olan, girdi sonunun size endeksi izin ñg9kullanımları, ancak özellikle bu program bir byte daha uzun olma sona ereceğini yüzden 1'den var: Ö!10.

Ö      Sort by
 ṙ     rotation by
  9    9.

0

Toplu iş, 82 bayt

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

Komut satırı argümanları olarak girdiyi alır ve STDOUT'a çıkar. Her bozuk paradaki orijinal listeyi filtrelemeden kaynaklanan listeleri birleştirerek çalışır.


0

Ruby, 34 bayt

->m{m.sort_by{|c|c[1..2]}.reverse}

dizi dizisi olarak girdi ve çıktı


0

Ruby, 31 bayt

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

Bu, her zaman "nikel" ve "dime" öğelerini doğru şekilde sıralamayacaktır.
daniero

0

Yakut, 30 bayt

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

Deneme yanılma sonucu bulunan sihirli sayılar. Biraz sakar, fakat kullanmaktan daha kısa .reverse.


0

Perl 6 ,  40 36  34 bayt

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

Dene

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

Dene

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

Dene

Expanded:

*\            # 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 bayt

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

Açıklaması

~               # 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.

Çevrimiçi deneyin!


0

Java 8, 128 112 bayt

Bu, bir lambda ifadesidir. 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: Sırasıyla 4 jetonun her biri için, girişe gidin ve o paranın kendine has karakteri için bir eşleşme olduğu zaman ortaya çıkacak paranın adını ekleyin. Sonucu bir diziye bölün ve geri gönderin.


0

Ruby, 27 bayt

->s{s.sort_by{|x|(x*2)[5]}}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.