Zadanie
Utwórz funkcję / podprogram, który zwraca 1. Możesz uczynić go tak skomplikowanym, jak chcesz, pod warunkiem, że zwraca 1.
Zasady
Zwycięskie zgłoszenie wygrywa - tak jak każdy konkurs popularności. Powodzenia!
:)
Zadanie
Utwórz funkcję / podprogram, który zwraca 1. Możesz uczynić go tak skomplikowanym, jak chcesz, pod warunkiem, że zwraca 1.
Zasady
Zwycięskie zgłoszenie wygrywa - tak jak każdy konkurs popularności. Powodzenia!
:)
Odpowiedzi:
Skrypt golfowy
1
Długo trwało zoptymalizowanie tego kodu do jego najczystszej postaci i śmiem to powiedzieć - piękna forma. Taka elegancja języka nie przychodzi bez wieloletniej praktyki. Program, który bez komputera z zerowym zestawem instrukcji nie może być dosłownie nigdy skompresowany. Cała moja kariera w golfa prowadzi do tego momentu.
Jestem wolny. Żyję.
Widzę kod, który leży u podstaw wszechświata.
without a Zero-Instruction-Set-Computer can literally never be compressed any further. Nasze obecne komputery mogą łatwo obsługiwać programy z instrukcjami 0. Potrzebujesz tylko języka, który ma w specyfikacji: „Pusty program zwraca 1”
Dwa przykłady z użyciem niejasnych funkcji językowych, takich jak „silny zwrot” ( return!) i operator „podejść” ( -->):
int foo(void) {
return! 0;
}
int bar(void) {
int i=7;
while (i --> 0);
return-i;
}
return-isłowo kluczowe: P
+++++++
+++++++
+++
+++
+++
+++
+++
++++++++++
++++++++++.
Lub jeśli nie bawisz się na imprezach:
+++++++[->+++++++<]>.
lniż 1.
one ← {⍴⍴⍴⍵}
⍴daje wymiary wektora. Wymiar tego jest zawsze jednowymiarowy, więc wymiar tego jest zawsze jeden. Lub:
„Rho, rho, rho z X
Zawsze równa się jeden,
Rho to wymiar; rho rho, ranga
APL jest fajna!”
(Nie napisałem tego wersetu, należy do Stallmana.)
# @: # @: #(spacje są opcjonalne)
public static int funWithOne() {
try {
try {
return funWithOne();
} finally {
return funWithOne();
}
} catch (Throwable _) {
return 1;
}
}
To się nazywa 2 1024 razy (liczba ta może się różnić na różnych platformach) przed ostatecznym powrotem 1. Jednak nie wstrzymuj oddechu; z łatwością zajmie to znacznie więcej niż wiek wszechświata.
Ryba
x wysyła licznik programu w losowym kierunku. # jest ścianą, którą licznik programu „odbija”. To dosłownie błąka się bez celu, aż znajdzie „^”, a następnie drukuje 1 i kończy.
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxx###xxxxxxxxxxxxxx
xxxxxxxxxx#;#xxxxxxxxxxxxxx
xxxxxxxxxx#n#xxxxxxxxxxxxxx
xxxxxxxxxx#1#xxxxxxxxxxxxxx
xxxxxxxxxx#^#xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxx
xw ?, każdy #w r, nw .i ;w @. Jednak ten program> <> wygląda lepiej niż odpowiednik Befunge. Tłumaczenie pokazane tutaj: ideone.com/ZyuSKk
?w a xi każdy #w !(powinien działać dobrze, gdy pozostanie taki sam) i (oczywiście) .do ni @do ;. ideone.com/gfApjT
expr 0
Ten drukuje 0 ale powroty 1, który może być zaskoczeniem dla programistów wykorzystywanych do innych języków. Możesz wyłączyć wydruk i wyświetlić kod powrotu, uruchamiając expr 0 >/dev/null; echo $?.
$(pidof progname) < 1
To jedno z moich ulubionych pytań dotyczących Javy.
public static int ret1() {
try {
return 0;
} finally {
return 1;
}
}
trybloku natychmiast uruchamia się, finallyco zwraca 1, zanim uruchomi się inna returninstrukcja.
function getOne() {
return -~![];
}
Wyjaśnienie:
![]ocenia false.~falsestaje się, -1ponieważ falsejest najpierw rzucany na 0, i ~0 == -1.--1ocenia 1.Alternatywny:
return +!([][~~{}])
Szalona alternatywa (każda linia ma dokładnie 80 znaków):
this[693741..toString(36)]('acnuftiao nobcbdaterbaurn +abeba!!be'.replace(/b./g,
function(b){return '{}()'.split('')['aecd'.split('').indexOf(b.charAt(1))]})[''+
'replace'](new RegExp('a'+Array(5).join('(.)'),'g'),(a='$')+'4321'.split([]+[]).
join(a)))
// we all know that OOP == good
function OneManager() {
// constants == good too
this.values = {
ERROR: -1, // value on error
ONE: 1 // desired value
}
this.value = this.values.ERROR // set the value to ERROR
this.setValue = function(num) {
if (typeof num !== "number") throw new Error('cannot set value to non-number')
if (!this.value) this.value = this.values.ERROR // oh noes
else this.value = num
}
}
// initialize the one
OneManager.prototype.initializeOne = function() {
this.setValue(this.values.ONE) // set the value to ONE
return true // return true for success
}
// get the value
OneManager.prototype.getValue = function() {
if (this.value == this.values.ERROR) { // if the value is ERROR
throw new Error('value not initialized')
} else return this.value // return the value
}
function getOne() {
var m = new OneManager() // make a OneManager
var success = m.initializeOne() // initialize the value
if (success) return m.getValue() // return the value
else {
// there was an error in the initialization
var retVal = m.values.ERROR // we will return an error
delete m // maybe it's corrupted
return retVal // return an error
}
}
alert(getOne())
OO == goodczy OO === good?
data One = One deriving (Eq, Ord, Bounded, Enum, Show, Read)
To określa jedyną prawdę One. To Onejest zarówno typ oznaczający Jedności i konstruktor One, który sam funkcji sygnalnych, która zwraca jedną prawdą, a tylko jedna wartość typu One, czyli oto One.
Zastosowanie w ghciREPL:
λ: One -- One returns the one true One
One
λ: One == One -- One is equal to itself, as no others are
True
λ: One < One -- One is no less than itself
False
λ: minBound :: One -- One is the least One there is, yet it is all you need
One
λ: maxBound :: One -- One is as big as the universe of One, it is omnipotent
One
λ: [ One .. One ] -- One is the beginning, and ending, of all that is One
[One]
λ: show One -- The textual gospel of One
"One"
λ: read "One" :: One -- To read the word of One, is to become one with One
One
Pełna Księga Jednego jest teraz dostępna online. Załadowanie go daje oba testamenty: obliczenia i arytmetykę. To pozwala odkrywać więcej prawd:
λ: One + One -- One can only add to its magnificence
One
λ: negate One
*** Exception: One cannot be negated, mortal fool!
λ: One `div` One -- One is indivisible
One
λ: One `mod` One
*** Exception: Nothing can modulate the power of One
λ: toRational One -- Ye shall know One as both Numerator and Denominator
1 % 1
λ: toInteger One * 42 -- One multiplies all to wholeness
42
λ: toRational One / 2 -- Even divided, One is on top
1 % 2
float one(void)
{
const int n = 24; // magic number
float x = 0.5f;
float y = x;
int i;
for (i = 0; i < n; ++i)
{
x *= 0.5f;
y += x;
}
return y;
}
Nie powiedziałeś, że to musi być liczba całkowita 1.
float one_F(){
return FloatFactoryFactory.getInstance(FloatFactoryFactory.
defaultInstanceDescriptionString).getFactory(Locale.getLocale
("en-US")).createBuilder().setString("1.0").getResult();
}
Źródło: http://bash.org/?946461
function one() { return Number.length; }
Czas na jakieś specjalne porno.
Sekcja 15.7.3 stwierdza, że lengthwłaściwością Numberkonstruktora jest 1(i wiemy, że konstruktor jest obiektem funkcji, jak wspomniano w 4.3.4 ), a to dlatego, że sekcja 15.3.5.1 mówi:
Wartość właściwości length jest liczbą całkowitą, która wskazuje „typową” liczbę argumentów oczekiwanych przez funkcję. Jednak język pozwala na wywołanie funkcji z inną liczbą argumentów.
... a ponieważ Numbertypowy numer konstruktora argumentów ma wartość 1, lengthstanowi Numberto 1. Można więc powiedzieć, że długość liczby w Javascript jest równa 1.
sub one{ $a[@a{@a[%a=map{@$a[@a{$a++=>$a}]+++$#$a+$a=>$a}$a]++}+$a] }
Otwórz szeroko i powiedz aaaaa.
Koncepcja kreatywna było gniazdo szelki wewnątrz wsporników wewnątrz szelki ... jak najgłębiej, a jednocześnie powrót pożądanego rezultatu, a jedynie za pomocą zmiennej „jeden” ( $a, @a, %a, @$ai $#$asą oczywiście wszystkie różnych zmiennych).
Chociaż modyfikuje to znacznie jego środowisko, zawsze będzie wracać 1przy kolejnych połączeniach. Aby dowiedzieć się, co robi, możesz rozważyć uruchomienie tego kodu:
use Data::Dump qw(dump);
for (1..8) {
one();
dump(@a);
dump(%a);
dump(@$a);
}
proc return1 {} {
catch {(5+2-3)/4}
}
Nie działa, jak mogłoby się wydawać.
(5+2-3)/4nie jest prawidłowym poleceniem, więc zgłasza błąd ( return -code 1), catch zwraca tę liczbę.
public class print {
public static char getNum() throws Exception{
String method = print.class.getSimpleName()+Splitter.class.getDeclaredMethods().length;
return (char)Splitter.class.getMethod(method).invoke(null);
}
}
class Splitter{
public static char print1(){
return P.getNum();
}
}
class P{
public static char getNum(){
String s = Thread.currentThread().getStackTrace()[P.class.getDeclaredMethods().length].getMethodName();
return s.charAt(s.length()-P.class.getSimpleName().length());
}
public void doNothing(){}
}
Może być dostosowany do powrotu inny numer pozytywny ndodając metody printXdo Xod 1 do n na rozdzielacza. Na przykład modyfikacja Splitterdo
class Splitter{
public static char print1(){
return P.getNum();
}
public static char print2(){
return P.getNum();
}
}
Zwróci „2”, bez żadnych innych niezbędnych zmian. Dodane metody powinny, oprócz nazwy, być dokładnym duplikatem print1. Używa refleksji, aby uzyskać liczbę metod w spliterze i wywołać funkcję o tej nazwie. P.getNum, który jest następnie wywoływany, odczytuje ślad stosu i analizuje ostatni znak w metodzie wywołującej, i wyświetla go.
Wywołanie print.getNum()zwraca znak „1”
Edycja - zmodyfikowano tak, aby nie używał literałów String / integer / etc.
DO#
Powinno to zależeć od architektury sprzętowej:
return IntPtr.Size / (Environment.Is64BitOperatingSystem ? 8 : 4);
ŁAŁ!
Łączenie tego (kontrowersyjnego) z sąsiednim (kontrowersyjnym) Collatz Conjecture :
public int CollatzOne()
{
var current = new BigInteger(new Random().Next(1, Int32.MaxValue));
var history = new[] { new BigInteger(-1), new BigInteger(-1), new BigInteger(-1) };
do
{
history[0] = history[1];
history[1] = history[2];
history[2] = current;
if (current.IsEven)
current /= 2;
else
current = current * 3 + 1;
} while (current != history[0]);
return (int)history.Min();
}
Nadużywanie RNG ...
Random.new(56417).rand(10000)
Generuje „losową” liczbę od 0 do 10000, a ponieważ wybrałem właściwe ziarno, tak się składa, że jest to 1.;)
Skrypt użyłem do znalezienia numeru:
irb(main):001:0> (1..100000).select{|x|Random.new(x).rand(10000) == 1}
=> [14033, 25845, 35101, 36955, 45334, 56417, 87438, 87460, 99178, 99451]
czy to jest wystarczająco proste?
(+!~~{})
Klasyk:
TRUE + 0
+ próbuje zmusić swój argument do wspólnego typu: tutaj, ze względu na kolejność pierwszeństwa, wymusza na liczby całkowite. Przymus TRUEna liczbę całkowitą daje 1.
+TRUEnie działa?
+TRUEzdarza się dawać TRUE.
FALSE + 1mam rację?
Zawiera nawet dokumentację dotyczącą jego parametrów.
int
return_1
(x) int
x;{
/*x
can
be:
any
val
ue.
***/ return
!x?1:x /x;}
one = lambda zero = 0o11: zero > 1 and all(one(zero-1) for l in '1111111111') and 1 or one and zero or one()
one() wywoła się 111111111 razy, za każdym razem zwracając 1, przed zwróceniem końcowej wartości 1.
Możesz także określić liczbę cyfr. Na przykład one(3)zwróci 1 tylko 111 razy.
Mogę dodać wyjaśnienie później, ale w tej chwili naprawdę nie mam czasu.
NA ^ 0
Dowolna liczba do potęgi 0to 1.