Quanto dovrebbe funzionare il mio forno a microonde?


33

Ho fame. Facciamo un microonde in qualcosa. Dato un input numerico compreso tra 1 e 4 cifre, emettere il numero di secondi che il microonde dovrebbe funzionare.

Dettagli

Il trucco sta nel capire se l'utente sta inserendo secondi o una combinazione di secondi e minuti. Quelli e le decine dovrebbero essere interpretati come secondi e le centinaia e migliaia di luoghi dovrebbero essere minuti. Ad esempio, il valore 1234dovrebbe essere interpretato come 12 minuti, 34 secondi e 9876dovrebbe essere 98 minuti, 76 secondi. La digitazione 130e 90dovrebbe comportare entrambi un tempo di cottura di 90 secondi.

Ecco alcuni altri ingressi e uscite:

  • 1 = 1
  • 11 = 11
  • 111 = 71
  • 1111 = 671
  • 9 = 9
  • 99 = 99
  • 999 = 639
  • 9999 = 6039

Regole

Questo è , quindi vince il programma più breve in byte. Non sono ammesse scappatoie standard. La voce vincente deve restituire la risposta corretta quando viene fornito un input intero compreso tra 1 e 9999.


@WheatWizard, sono felice di modificare la domanda. Hai un suggerimento su cosa dovrei dire nella sezione Dettagli? Forse potrei rendere più chiara questa frase: "I luoghi e le decine dovrebbero essere interpretati come secondi e le centinaia e migliaia di luoghi dovrebbero essere minuti".
Andrew Brēza,

@WheatWizard Ho appena aggiunto più dettagli, fammi sapere se pensi che dovrei aggiungere altro.
Andrew Brēza,

Funziona con un input di 9876?
Andrew Brēza,

1
Strano, stavo per sandbox questa sfida esatta haha
FlipTack

A cosa servirebbe l'output 190?
OldBunny2800,

Risposte:



9

Japt , 6 byte

ìL ì60

Provalo online! ìLconverte in base-100 e ì60torna alla base 60, risultando in floor(n/100)*60 + n%100. Funziona anche con le ore ( 10000 -> 3600il numero di secondi in un'ora).


1
Esattamente quello che avevo :)
Shaggy,

7

C, C ++, Java, C #, D: 36 byte

D: 35 byte

C: 28 byte

La prima volta che ho una risposta così breve!

int r(int i){return i/100*60+i%100;}

D può avere un'ottimizzazione speciale grazie al sistema di template golfy:

T r(T)(T i){return i/100*60+i%100;}

C ha un'ottimizzazione speciale con l'int implicito:

r(i){return i/100*60+i%100;}

Codice da testare

In C (includere stdio.h):

int main() {
    int testArr[] = {1,11,111,1111,9,99,999,9999};
    for(int i=0;i<8; ++i) {
        printf("%d = %d\n",testArr[i],r(testArr[i]));
    }
    return 0;
}

TIO Link

In C ++ ( devi includere iostream):

int main() {
    std::initializer_list<int> testList{
        1,11,111,1111,9,99,999,9999
    };

    for (auto x : testList) {
        std::cout << r(x) << '\n';
    }
}

Provalo online!

In Java :

public class MainApp {

    int r(int i){return i/100*60+i%100;}

    public static void main(String[]a) {
        MainApp m = new MainApp();
        int testArr[] = new int[]{
                1,11,111,1111,9,99,999,9999
        };

        for (int v : testArr) {
            System.out.println(v + " = " + m.r(v));
        }
    }
}

Provalo online!

In C #

class Program {
    int r(int i){return i/100*60+i%100;}
    static void Main(string[] args) {
        var p = new Program();
        int[] testArr = new int[8]
        {
            1,11,111,1111,9,99,999,9999
        };
        foreach(int a in testArr) {
            Console.WriteLine(a + " = " + p.r(a));
        }
    }
}

In D (devo importare std.stdio) (esattamente, non ho idea di come usare le matrici in D):

void main() {
    int[] arr = [1,11,111,1111,9,9,999,9999];
    for(int i = 0; i < arr.length; i++)
        writeln(arr[i]," = ",r(arr[i]));
} 

TIO Link


Il codice del test D è il piè di pagina di questo TIO: tio.run/… e vedo che hai imparato il sistema di template :). (C'è un foreachin D, ho appena dimenticato come usarlo tristemente)
Zacharý

C può essere golfato a 28 byte usando C89 implicit-int.
pizzapants184

Dovresti pubblicare tutti questi come risposte separate.
MD XF,

6

Pyth - 9 8 byte

Converte l'input in base 100, quindi lo interpreta come un numero base 60.

ijQ*TT60

Test Suite .


6

TI-Basic (serie 83), 8 byte

Ans-40int(sub(Ans

Richiede OS versione 1.15 o successiva.


6

dc , 10 byte

?9A~r60*+p

Provalo online!

Spiegazione: in cc quando si preme sth. sullo stack va in cima

?         # read and push the input number on the stack
9A        # push 100: 9 * 10^1 + A[10] * 10^0 :D
~         # divide 2nd nr. by the top nr., push quotient, then remainder
r60*      # swap top 2 nr., then multiply the top by 60
+p        # add top 2 nr., then print result

5

Bash bc + sed, 30 28 byte

-2 byte grazie a @seshoumara .

bc<<<0`sed 's/..\?$/*60+&/'`

Provalo online!

Riceve input dallo stdin. È andato per un approccio più creativo: inserisce *60+prima delle ultime 1 o 2 cifre e antepone 0a all'inizio per tenere conto degli input con solo 1 o 2 cifre. Il risultato viene quindi passato a bc.


1
Se si rimuove -re si utilizza \?, è possibile perdere 2 byte.
seshoumara,




2

JavaScript, 21 byte

a=>(a/100^0)*60+a%100

Provalo online!


Salva 4 byte usando il trucco di ovs - a- (a / 100 ^ 0) * 40
IanF1

1
@ IanF1. Grazie, ma penso che letteralmente ruberebbe la loro idea.

Si hai ragione. Troppo entusiasta, scusa.
IanF1

3
@ThePirateBay Allora non vivi davvero fino al tuo nome;)
kamoroso94

2

J , 12 byte

-40*&<.%&100

È la soluzione Python 2 di ovs espressa in J. È composta da un gancio e una forchetta:

┌─┬───────────────────────┐
│-│┌──┬────────┬─────────┐│
│ ││40│┌─┬─┬──┐│┌─┬─┬───┐││
│ ││  ││*│&│<.│││%│&│100│││
│ ││  │└─┴─┴──┘│└─┴─┴───┘││
│ │└──┴────────┴─────────┘│
└─┴───────────────────────┘

       %&100  - divides the number by 100
   *&<.       - finds the floor of the left argument and multiplies it to the left arg.
 40           - 
-             - subtracts the result of the above fork from the input 

Provalo online!


1
Stesso numero di byte di 60#.0 100#:].
FrownyFrog,

@FrownyFrog - la tua soluzione sembra più bella, evviva!
Galen Ivanov,

2

Lotto, 23 byte

@cmd/cset/a%1-%1/100*40


2

Labirinto , 19 byte

?:_100%}#00/_60*{+!

Provalo online!

Spiegazione

?      Read input.
:      Duplicate.
_100%  Mod 100.
}      Move off to auxiliary stack.
#00/   Divide by 100, using the stack depth to get a 1, instead of _1.
_60*   Multiply by 60.
{+     Retrieve the earlier result and add it.
!      Print.

L'IP quindi raggiunge un vicolo cieco e inizia a muoversi all'indietro. Quando raggiunge /, tenta una divisione per zero che termina il programma.


2

Gelatina , 5 byte

Come collegamento monadico (grazie per l'heads-up, caird!):

b³ḅ60

Provalo online!

... O come programma completo:

bȷ2ḅ60

Questo può essere portato facilmente su 05AB1E, quindi:

05AB1E , 5 byte

тв60β

Provalo online!

Converte semplicemente il numero intero di input in base 100 e quindi converte il risultato dalla base 60 in numero intero. Quindi, equivale a Input% 100 + 60 * ⌊Input / 100⌋



@cairdcoinheringaahing Penso che intendevi questo , ma grazie comunque per l'heads-up
Mr. Xcoder,

2

Excel VBA, 29 byte

Funzione di finestra immediata VBE anonima che accetta input dalla gamma [A1]e output alla finestra immediata VBE.

?[A1]Mod 1E2+60*[Int(A1/100)]

2

APL (Dyalog) , 11 10 byte

600 100⊤⊢

Provalo online!

Come?

0 100⊤- codifica nella base 100, fermandosi al secondo LSB, producendo efficacemente n ÷ 100, n % 100.

60⊥ - decodifica in base 60


2

PARI / GP , 16 byte

semplice:

n->n\100*60+n%100

Purtroppo questo bel metodo è semplicemente troppo lungo da usare:

n->[60,1]*divrem(n,100)

2

Pushy , 10 9 byte

Kevin mi ha superato nella mia lingua ... (usando l'approccio dalla risposta di ovs )

2dH/40*-#

Provalo online!

10 byte

sjvj60*^+#

Provalo online!

s             \ Split input into digits
 jvj          \ Join the first two and the last two
    60*       \ Multiply the first by 60
       ^+     \ Add the values
         #    \ Print

11 byte

Per un byte in più possiamo usare l' Input % 100 + 60 * ⌊Input / 100⌋approccio:

H2d%}/60*+#

Provalo online!


1
9 byte creando una porta di pitone 2 risposta @ovs' : 2dH/40*-#. Mai programmato in Pushy prima, ma sembra un linguaggio piuttosto interessante. :)
Kevin Cruijssen,

1
@KevinCruijssen è un linguaggio piuttosto generico basato sullo stack, immagino che l'unica cosa leggermente diversa che porti sul tavolo sia il doppio stack ... ma grazie e grazie per il golf :)
FlipTack

1

05AB1E , 9 byte

т÷60*¹т%+

Provalo online!

Spiegazione:

т÷60*¹т%+

т         // Push number 100
 ÷        // Integer division with the input
  60      // Push number 60
    *     // Multiply with the previous result
     ¹    // Push input
      т   // Push 100 again
       %  // Modulo
        + // Add the first and the second result

Probabilmente c'è qualche trucco con le conversioni di base che può essere ottenuto in 05AB1E, ma non sono riuscito a trovarlo.



1

Retina , 11 byte

.{100}
60$*

Provalo online!

Input e output in unario . La suite di test converte da e in decimale per comodità.

Fare questo tipo di conversione di base per un massimo di due cifre è sorprendentemente semplice da fare all'unario. Abbiniamo solo le corse di 100 se le 1sostituiamo con 60 1s. Tutto ciò che rimane corrisponderebbe alle ultime due cifre nella rappresentazione decimale e rimane invariato.


1

Alice , 19 byte

/o
\i@/.'d%~'d:'<*+

Provalo online!

Spiegazione

Peccato che ho rimosso divmod dalla lingua, immagino ...

/o
\i@/...

Questo è solo il solito framework per programmi lineari con I / O decimali che funzionano esclusivamente in modalità Cardinale (aritmetica).

.     Duplicate input.
'd%   Mod 100.
~     Swap with other copy.
'd:   Divide by 100.
'<*   Multiply by 60.
+     Add.

1

Via Lattea , 10 byte

':Z/v40*-!

utilizzo: ./mw code.mwg -i 9999

Spiegazione:

code       explanation                          stack

'          push input to stack                  [input]
 :         duplicate ToS                        [input, input]
  Z        push 100                             [input, input, 100]
   /v      integer division (divide and floor)  [input, ⌊input/100⌋]
     40    push 40                              [input, ⌊input/100⌋, 40]
       *   multiply                             [input, ⌊input/100⌋*40]
        -  subtract                             [input - ⌊input/100⌋*40]
         ! print

1

R , 21 byte

x=scan();x-x%/%100*40

Provalo online!


1
Ho creato la mia soluzione in R ed era molto meno elegante di così.
Andrew Brēza,

Puoi tagliare scanpoiché la maggior parte delle risposte presuppone che la variabile sia già definita.
Andrew Brēza,

Le regole sono così incoerenti al riguardo. Una delle altre sfide è necessario disporre di una funzione o scansione per acquisire il valore.
Segna il


1

REXX, 25 byte

arg t
say t%100*60+t//100

(Solo un'altra traduzione di @ovs)


0

05AB1E , 7 byte

т‰ć60*+

Provalo online!

Spiegazione

         command                              current stack
т‰ć60*+  full program. push input implicitly  [1234]
т        push 100                             [1234] [100]
 ‰       push divmod                          [12, 34]
  ć      push head extracted (n[1:], n[0])    [34] [12]
   60*   multiply by 60                       [34] [720]
      +  add and display implicitly           [754]

0

Python simbolico , 66 byte

___=-~-~_-_
__=___*___
__=__*__*___+___*__
_=_-_/(__+__+__/___)*__

Provalo online!


Spiegazione

Symbolic Python          values

___=-~-~_-_              ___=2
__=___*___               __=2*2=4
__=__*__*___+___*__      __=4*4*2+2*4=32+8=40
_=_-_/(__+__+__/___)*__  _=_-_/(40+40+40/2)*40=_-_/100*40
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.