Listeyi son bir sayıya küçültme


9

Girdiler

Numaraların bir listesi (dizi) veya bu daha kolay hale gelirse sayısal dizeler. Listede her zaman en az iki öğe olacağını ve her öğenin doğal bir sayı olacağını (sıfırdan büyük tam sayı) olacağını varsayabilirsiniz.

çıktılar

Tek bir sayı veya yine sayısal bir dize.

Sorun

Fikir, listenin o andaki aşamasında en büyük sayının son basamağını kaldırarak sayı listesini azaltmak ve sonunda bir sayı ile bitmek (birden fazla örnek olsa bile sadece bir sayı döndürülmelidir)

Misal

[123,343,121,76,465,786] -- The last digit in 786 is dropped, so it becomes 78
[123,343,121,76,465,78]  -- New largest number is 465, so the 5 is dropped, making it 46
[123,343,121,76,46,78]   -- Repeat until left with one number
[123,34,121,76,46,78]
[12,34,121,76,46,78]
[12,34,12,76,46,78]
[12,34,12,76,46,7]
[12,34,12,7,46,7]
[12,34,12,7,4,7]
[12,3,12,7,4,7]
[1,3,1,7,4,7]            -- If there are multiple max numbers, you **must** remove the last digit from all of them
[1,3,1,4]
[1,3,1]
[1,1]                    -- You have your answer when there is one number, or multiple numbers that are equal
1                        -- Result

boşluklar

Standart boşluklar geçerlidir

Diğer kısıtlamalar

Programınız gerekir (elbette mâkul) rasgele sayı herhangi listesi için çalışmak

Test Durumları

[24,72,4]
[24,7,4]
[2,7,4]
[2,4]
[2]
2

[14, 7]
[1, 7]
[1]
1

[1278,232,98273,2334]
[1278,232,9827,2334]
[1278,232,982,2334]
[1278,232,982,233]
[127,232,982,233]
[127,232,98,233]
[127,232,98,23]
[127,23,98,23]
[12,23,98,23]
[12,23,9,23]
[12,2,9,2]
[1,2,9,2]
[1,2,2]
[1]
1

puanlama

Bu , her dilde çok kısa bir cevap kazanır!


1
Bir şey kaçırırsam lütfen bize bildirin. İlk soru.
Henry

14
Değiştirmek için çok geç olursa, ama her aşamayı çıkarmak zorunda kalsaydık soru daha iyi olabilirdi . Bence cevaplar oldukça basit olacak.
DLosc

8
Başka hiç kimse bundan bahsetmediği için, bu genellikle kum havuzuna sık sık yakalanacak bir şeydir .
James

1
Cevabın listedeki ilk girişin ilk basamağı olmadığı test senaryoları ekleyebilir misiniz?
JAD

5
Bu soruyu cevaplamamın [12, 123, 124]yolu 12, gönderilen her yanıtı yanlış yapar .
Ørjan Johansen

Yanıtlar:






3

Japt , 8 6 5 bayt

@Shaggy sayesinde -1 bayt

n g g

Girdiyi sayısal dizeler dizisi olarak alır. Çevrimiçi deneyin!

açıklama

        // implicit input: array of strings
n       // sort the array
  g     // get the first element
    g   // get the first character
        // implicit output

5 bayt : Diziyi sıralar, ilk elemanı alır, ilk karakteri alır.
Shaggy

@Shaggy Oh duh, bunu tamamen karmaşık hale getirdim. Teşekkürler!
Justin Mariner

Sorun değil :) n v g5 bayt için de çalışır. Bu arada Japt'e hoş geldiniz.
Shaggy



2

V , 11 , 5 bayt

ÚxV}p

Çevrimiçi deneyin!

Bu vahyi gerçekte olduğundan daha karmaşık yapıyordum . Bu yanıt her satırı ASCII değerlerine göre sıralar ve ardından ilk karakteri döndürür. Bu nazik veya sıkıcı bir cevap olduğu için, aslında başlangıçta açıklanan algoritmayı uygulayan daha ilginç bir cevap:

V , 11 bayt

òún
/äîä
Lx

Çevrimiçi deneyin!


Soruyu sorduğumda da öyleydim. Orijinal cevabınız en çok beklediğim şeydi. Aylak.
Henry

2

Jöle ,  3  2 bayt

ṂḢ

Karakterlerin (dize) listelerini içeren ve sonucu basan tam bir program.

Çevrimiçi deneyin!

Nasıl?

Sadece en küçük lider rakamını döndürmemiz gerekiyor ...

ṂḢ - Main link: list of lists of characters
Ṃ  - minimum (lexicographical ordering ensures this will start with the minimal digit)
 Ḣ - head (get that first digit character)

Sorun değil, olur.
Jonathan Allan

2

JavaScript (ES6), 17 bayt

Girdiyi dizeler dizisi olarak alır.

a=>a.sort()[0][0]

Dene

Virgülle ayrılmış bir sayı listesi girin.

o.innerText=(f=
a=>a.sort()[0][0]
)((i.value="1278,232,98273,2334").split`,`);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


1

,,,, 3 bayt

⫰1⊣

açıklama

⫰1⊣

⫰    pop the whole stack and push the minimum element
 1   push 1
  ⊣  pop the minimum and 1 and push the first character of it

1

Braingolf , 17 bayt

VVR{Mvd<M&$_R}vvx

Çevrimiçi deneyin!

açıklama

VVR{Mvd<M&$_R}vvx  Implicit input from commandline args
VVR                Create stack2 and stack3, return to stack1
   {.........}     Foreach item in stack..
    M              ..Move item to next stack
     v             ..Switch to next stack
      d            ..Split item into digits
       <M          ..Move first item to next stack
         &$_       ..Clear stack
            R      ..Return to stack1
              vv   Switch to stack3
                x  Reduce to lowest value
                   Implicit output of last item on stack

Başka bir deyişle, her öğenin yalnızca ilk basamağından oluşan bir yığın oluşturur, ardından en düşük çıktıyı verir.

Bu zorluk bana Braingolf'a eklemek için yerleşikler için bir sürü yararlı fikir verdi ve şimdi "özel" foreach döngüsünün eklenmesi sayesinde Braingolf bunu 5 baytta yapabilir:

Braingolf , 5 bayt [rakip olmayan]

(d<)x

açıklama

(d<)x  Implicit input from commandline args
(..)   Special foreach loop, iterates over the stack, moving each item to a special
       Sandboxed stack environment, and prepends the last item of the sandboxed
       stack to the real stack at the end of each iteration
 d<    Split into digits, move first digit to end of stack
    x  Reduce to lowest value
       Implicit output of last item on stack

Çevrimiçi deneyin!

Normalde sadece bir meydan okumayı tamamlamak için yerleşikleri eklemeye karşıyım , ancak yeni (...)foreach döngüsü için çok sayıda kullanım görüyorum , bu yüzden sadece bu meydan okuma için bir özellik eklediğini düşünmüyorum.


İçin başarısız [12,23,12]. Beklenen çıktı, 2geri döndünüz 1.
Olivier Grégoire

@ OlivierGrégoire Bunun beklenen çıktısı 1:[12,23,12] > [12,2,12] > [1,2,1] > [1,1]
Skidsdev

Benim hatam, yanlış okudum. Önceki yoruma bakın .
Olivier Grégoire


0

Pip , 5 bayt

Girdi sayılarının listesini komut satırı bağımsız değişkenleri olarak alır.

@@SSg

Çevrimiçi deneyin!

Alternatif:

MN@Zg

Çevrimiçi deneyin!

açıklamalar

Her iki programda gda komut satırı argümanlarının listesi.

@@SSg

SSdize karşılaştırmasını kullanarak sıralar, böylece büyüklüklerine bakılmaksızın ilk olarak en küçük ilk basamaklı sayıları yerleştirir. Unary @, bir listenin veya skalerin ilk öğesini verir. Sıralamadan sonra ilk sayının ilk basamağını almak için iki kez uygularız.

    g  [24 72 491]
  SS   [24 491 72]
 @     24
@      2

Alternatif:

MN@Zg

Zzip; tekli sürümü bir listeyi aktarmak için kullanılabilir. Aktarılan listenin ilk öğesi, tüm sayıların ilk basamaklarının listesidir. @rakamların listesini alır; MNasgari alır.

    g  [24 72 491]
   Z   [[2 7 4] [4 2 9]]
  @    [2 7 4]
MN     2

0

PHP, 27 bayt

<?=substr(max($_GET),0,-1);

(Vay, soruyu tamamen yanlış anladı. Bu işe yaramıyor. Daha sonra düzenleyecek.)


0

Pyth , 9 7 bayt

hSmsh`d

Çevrimiçi deneyin!

açıklama

Bu, temel olarak en küçük öndeki rakamı döndürür.

       Q    # Implicit input
  msh`d     # For each number in Q, convert to string, take the first character, convert to integer
hS          # Return the minimum

0

Python 3 , 33 bayt

lambda l:min(str(x)[0]for x in l)

Çevrimiçi deneyin!

@DJMcMayhem ve @totallyhuman daha iyi çözümlere sahipler, ancak benimki dize yerine sayısal girdi varsayar.


0

Pyth, 3 bayt

hhS

Girdi, sayıların dizgi gösterimlerinin listesidir.

Çevrimiçi Deneyin

Açıklama:

hhS
    # Q=input
  S # Sort Q
 h  # First Element of sorted list
h   # First element of string
    # Implicitly print result
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.