Crea un RNG perso


17

Lost è un linguaggio di programmazione 2D in cui la posizione iniziale e la direzione dell'ip sono completamente casuali.

Ciò rende molto difficile realizzare programmi Lost deterministici. Tuttavia oggi non stiamo scrivendo un programma deterministico, stiamo scrivendo un RNG.

Scrivi un programma Lost che non accetta input e genera una singola cifra (0,1,2,3,4,5,6,7,8 o 9), con tutte le cifre che hanno la stessa probabilità di essere emesse. Poiché la posizione e la direzione di partenza di Lost sono l'unica fonte di casualità, l'unico modo per farlo è avere ogni posizione nella tua fonte in uscita un numero diverso da 0 a 9 con un numero uguale che emette ogni cifra.

Puoi calcolare la probabilità di ogni cifra usando il -Qflag e eseguendo il piping in questo script Python

import sys
a=sys.stdin.read().split()[:-1]
for x in range(10):print x,':',a.count(`x`)
print[x for x in a if x not in list("1234567890")]

Provalo online!

Questo è quindi le risposte verranno classificate in byte con meno byte migliori.


Una panoramica di Lost

Lost è un implicito linguaggio IO 2D implicito che prende molto dallo stampo di Klein. Ecco un breve cheat di cosa fanno i comandi persi

  • \, /, |Specchi l'ip

  • <, ^, >, vPunti l'ip in una direzione

  • [Riflette l'ip se si sta spostando verso est; diventa ]se l'ip si muove in orizzontale

  • ]Riflette l'ip se si sta spostando verso ovest; diventa [se l'ip si muove in orizzontale

  • ! Salta l'operazione successiva

  • ? Esce dalla parte superiore dello stack e salta se non zero

  • : Duplica la parte superiore della pila

  • $ Scambia i primi due oggetti della pila

  • ( Esce dallo stack e passa all'ambito

  • ) Viene estratto dall'ambito e viene inserito nello stack

  • 0- 9spinge n in cima alla pila

  • "Inizia e termina una stringa letterale. Durante una stringa i comandi letterali non vengono eseguiti e invece i loro valori di carattere vengono inseriti nello stack.

  • + Aggiunge i primi due numeri

  • * Moltiplica i primi due numeri

  • - Moltiplica la parte superiore per -1

  • % Disattiva la sicurezza

  • # Attiva la sicurezza

  • @ Termina l'esecuzione se la sicurezza è disattivata (inizia attivata)


Cosa succede se si tenta di scambiare due valori dallo stack ma esiste un solo valore o si tenta di eseguire il pop da uno stack vuoto?
pepery

@ppperry Lo stack è riempito con zeri impliciti.
Post Rock Garf Hunter,

1
Informazioni troppo basse sulla lingua. Avvolge? Cosa significa "sicurezza"? La descrizione dei braccialetti è fuorviante? Come viene utilizzato l'ambito?
Dead Possum,

@DeadPossum Ho provato a mantenerlo conciso. Avvolge. La sicurezza è già spiegata nella domanda. Non so cosa intendi per parentesi. []agire come porte, <>puntare in direzioni e ()memorizzare e richiamare dal campo di applicazione. L'ambito viene utilizzato per memorizzare i valori.
Post Rock Garf Hunter,

@WheatWizard Quindi la sicurezza è solo condizione @o ha altri casi d'uso? A proposito di staffe, non capisco questa parte: becomes ] if the ip is moving horizontally. Anche spostarsi verso est è orizzontale, no?
Dead Possum,

Risposte:


12

81 101 byte

Questo potrebbe essere ulteriormente golfabile ...

>%(0@>%(1@>%(2@>%(3@>%(4@>%(5@>%(6@>%(7@>%(8@>%(9@
^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<^<<<<

Provalo online!


1
Approccio interessante! Non ci avevo pensato
Post Rock Garf Hunter il

1
101 byte che corregge la doppia stampa. Ho appena aggiunto uno stack pop prima che la sicurezza sia disattivata, quindi se colpisci il numero all'inizio, può farlo scoppiare, spingerlo di nuovo, quindi morire. Non so se questo sia ancora tecnicamente un caso uniforme ...
Arnold Palmer,

1
Ho
avuto

1
Il tuo output non è uniforme. 0ha una possibilità 7/101 di essere stampata (una delle <o^ sotto il suo blocco, più il simbolo >e %), 1- 8ha una possibilità 10/101 e 9ha una possibilità 11/101. Quindi sembra che ci possa essere una possibilità che continui per sempre.
Arnold Palmer,

1
Deve essere completato, altrimenti ciò terminerebbe quando inizia sulla riga superiore salendo.
pepery

9

Perso , 54 byte

>%(0@>%(1@
@>%(2@>%(3
5@>%(4@>%(
(7@>%(6@>%
%(9@>%(8@>

Provalo online!

Ho appena copiato dalla risposta di Pppery e fai delle cose a caso. Non so nulla di Lost language. E non so nemmeno cosa stia succedendo per i codici sopra. Questo lavoro è? (Non lo so)


Il tuo codice produce la metà dell'output di quello di Ppperry, immagino sia a causa di come -Qfunziona? L'output sembra normalmente distribuito comunque. Sarebbe stato bello avere una specifica completa della lingua collegata nella domanda.
Aaron,

@Aaron Avrei dovuto spiegare come -Qfunziona. Poiché la lingua è casuale, la verifica viene eseguita eseguendo tutte le possibilità. -Qfa questo e stampa tutti i risultati. Più breve è il programma, minori sono le possibilità e meno uscite provengono -Q.
Post Rock Garf Hunter,
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.