Puzzle a quattro zampe


21

Il puzzle a quattro zampe è un popolare puzzle matematico ricreativo che prevede l'utilizzo esattamente di quattro 4 (e nessun altro numero) e una serie definita di operazioni per raggiungere ogni numero da 0 a un massimo dato.

In questa versione sono consentiti i seguenti operatori:

  • È possibile utilizzare qualsiasi simbolo di raggruppamento
  • Addizione ( +), Sottrazione ( -), Moltiplicazione ( *), Divisione ( /)
  • Fattoriale ( !), funzione gamma ( Γ)
  • Exponentiation ( ^), radice quadrata ( )
  • Concatenazione (ad es. 44È di due 4secondi)
  • Punto decimale (ad es. 4.4È di due 4s), Overbar (ad es. .4~ = 4/9)

Si applica l'ordine delle operazioni standard.

Il tuo programma dovrebbe generare, dato un input compreso tra 0 e 100 inclusi, una soluzione corretta per quell'input. Se il programma genera una soluzione non valida per qualsiasi input, quel programma non è valido.

Ad esempio, con un input di 0, il tuo programma potrebbe generare 44-44.

L'uso di moduli esterni non è consentito. È _.4~consentito solo per l'operatore overbar, ovvero solo uno 4può essere dietro il punto decimale.

Questo è il golf del codice, quindi vince la soluzione più breve.


Modifica : per essere più chiari, il programma deve generare un set di operazioni sopra descritte esattamente a quattro 4s - niente di più, niente di meno. Inoltre, .4 = 4/10è un termine valido e conta come utilizzarne solo uno 4.


nessuna operazione di arrotondamento? :-(
John Dvorak,

@JanDvorak err, no, non sarebbe permesso.
Volatilità,

gamma e fattoriale sono entrambi ammessi?
John Dvorak,

@JanDvorak tutto ciò che è elencato (ma solo le cose che sono elencate) può essere usato.
Volatilità,

siamo autorizzati a produrre fattoriale come una funzione prefisso ( !(4)piuttosto che (4)!)?
John Dvorak,

Risposte:


6

GolfScript (129 caratteri *)

[4.`2'√4'24'4!'6'Γ4'1'Γ√4'120'ΓΓ4']2/:F{.F=[[44.`]]*\{`{+{'+*-'1/{:^;.[~@[\]{'()'1/*}%^*@@^~\]\}/}:|~2/~\+|;}+F/}%+}3*\{\0==}+?1=

Il tempo di esecuzione è dell'ordine di 4 minuti sul mio PC. Una moderata accelerazione può essere ottenuta al costo di due caratteri aggiungendo un'operazione di unicità .&immediatamente dopo il %+.

Io uso le espressioni pre-codificati per 1, 2, 4, 6, 24, 120, e 44, e costruire il resto fino da quelli che usano solo +, *e -. In questo modo non ho bisogno di fare alcuna aritmetica non intera nel programma stesso. Ho cercato di ottenere espressioni più semplici posizionando all'inizio i valori precodificati più semplici.

Tutti questi valori sono richiesti ed è necessario supportare entrambe le direzioni di sottrazione ( complex_expression - simple_expressione viceversa). È anche necessario includere alcune operazioni che richiedono parentesi (in particolare, a*(b-c)), quindi racchiudo indiscriminatamente tutte le sottoespressioni.

* Sto contando i punti di codice Unicode supponendo che il programma sia codificato UTF-8, e spazzolando sotto il tappeto il fatto che, a meno che tu non stia usando una versione recente di Ruby per eseguire l'interprete, lo tratta davvero come caratteri ASCII. Se sei molto preoccupato per questo, usa Gper Gamma e vper sqrt.

Bene, potrei rigorosamente rimuovere 44in cambio di 11come 44/4e 71come √(Γ√4+(ΓΓ4+Γ√4)!), ma non è un buon compromesso.


7

Python 155 byte

h={4:'4',24:'4!',6:'â4',.4:'.4',1:'âû4',4/9.:'.4~'}
f={}
def g(r,s='24',y='4!'):f[eval(s)]=y;[g(r-1,s+o+`k`,y+o+h[k])for k in h for o in'/*-+'if r]
g(3)

I primi tre byte ( \xEF\xBB\xBF) sono il segno di ordine dei byte UTF-8, sebbene il file debba essere salvato in un formato ANSI. Il ûe âsarà interpretato come e Γrispettivamente in cp437 e cp850 , che dovrebbero funzionare praticamente su qualsiasi box di Windows.

Il tempo di esecuzione è di circa 0,4 secondi sul mio computer.

Esempio di utilizzo (denominare il file four_fours.py):

$ python
>>> from four_fours import f
>>> f[39]
'4!+4!/.4/4'
>>> f[87]
'4!*4-4/.4~'
>>> for i in range(101): print i, f[i]
0 4!+4!-4!-4!
1 4!+4!/4!-4!
2 4!-4!+Γ4-4
3 4!-4!+4-Γ√4
4 4!+4!/Γ4-4!
.
.
.
96 4!+4!+4!+4!
97 4!*4!/Γ4+Γ√4
98 4!*4+Γ4-4
99 4!*4+4-Γ√4
100 4!*4!/Γ4+4

Risultati per 0..100 . A causa del modo in cui l'hash è iterato, preferisce usarlo il 4!più spesso possibile.

Modifica: salvato un numero di byte aggiungendo Γ√4 = 1, il che elimina la necessità di eventuali raggruppamenti e rimuovendo √4 = 2, che non era più necessario.


4

J, 175 161 caratteri

   f=.')',~'(',;@((<;._2'+ - * % .4 .4~ g(r(4)) r(4) 4 g(4) 4! ( ) '){~(143402 A.i.9)
      /:~(12,11,0,6$0 4 4)+(9$4 7 7)#:((,@(+/,-/,*/,%/)~)^:2,0.4 4r9 1 2 4 6 24)&i.)

   f 1
(.4+.4)+(.4%r(4))

   f 42
(r(4)+4)+(g(4)*g(4))

   f 100
(r(4)+r(4))+(4*4!)

Il formato controllato è (v op v) op (v op v)dove v={0.4 4/9 1 2 4 6 24}eop={+ - * /}

pieno 0..100 risultati


Non credo .4sia un numero valido per questo gioco.
John Dvorak,

@JanDvorak lo è - forse avrei dovuto renderlo più chiaro
Volatilità
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.