Zwycięzca: odpowiedź Bash Professorfisha ! Całe 9 bajtów! Łał!
Możesz kontynuować przesyłanie odpowiedzi, jednak nie możesz już wygrać. Oryginalny post zachowany dla potomności:
Twoim celem jest przekonwertowanie liczby całkowitej od 1 do 9 na słowo, które reprezentuje.
- Nie będziesz musiał się martwić o ułamki dziesiętne
- Użytkownik wprowadzi liczbę. Załóż, że nigdy nie wejdą w nic 10 lub wyższego
- Użytkownik musi w pewnym momencie wpisać liczbę, jednak metoda odczytywana przez program nie ma znaczenia. Może to być standardowe wejście, czytanie pliku tekstowego itp., Jednak użytkownik musi w pewnym momencie nacisnąć przycisk 9 na klawiaturze (na przykład)
- Nie jest rozróżniana wielkość liter (tzn. „Jeden”, „jeden”, „oNe”, „OnE” itp. Są dopuszczalne)
- Żądania HTTP / etc są dozwolone, jednak każdy kod wykonywany przez serwer, który jest wysyłany, jest wliczany do liczby bajtów twojego końcowego kodu (np. Gdybym miał program C ++ wysyłający żądanie HTTP, liczy się kod PHP użyty w żądaniu HTTP )
- Wszystko, co można skompilować i uruchomić, jest dopuszczalne
- Konkurs zakończył się 27 czerwca 2014 r. (7 dni od opublikowania).
- To jest golf golfowy , więc wygrywa najkrótszy kod
one
) Są dopuszczalne?3
, nie możesz wyprowadzać danych wyjściowych,one two three four five six seven eight nine
nawet jeśli dane techniczne są generowanethree
. Podobnie, nie można wyprowadzaćthree seven
itp.Odpowiedzi:
Bash (z bsdgames), 9
Odczytuje ze standardowego wejścia.
Nie wiem, dlaczego jest na to narzędzie, ale cokolwiek.
źródło
Python 2, 64
Oto jak wygląda ciąg znaków z dodatkowymi spacjami (spróbuj czytać w pionie):
Jak wyjaśniono w komentarzach poniżej,
[input()::9]
zaczyna się od podanego indeksu i wybiera co dziewiąty kolejny znak.źródło
input()::9
to zakres odinput()
do końca łańcucha w krokach9
, takich jak1,10,19,28,37
lub3,12,21,30,39
, które są dokładnie wskaźnikami, przy których znajdują się litery odpowiadającego słowa.Common Lisp - 22 bajty
Oto ogólny (nie tylko jeden-dziesięć):
Och, chcesz porządek (pierwszy, drugi, ... trzysta setny ...)? Dobrze!
źródło
BASH 51
Więc zrobiłem inny, korzystając z mojego drugiego pomysłu i pomocy innych:
Gdzie „X” to liczba, którą chcesz.
BASH 48 (67)
67 z
\n
podziałem liniiNie jestem pewien, czy to się liczy, ponieważ czyta z pliku, ale:
sed -n Xp a
Gdzie „X” to dane wejściowe, a gdzie
a
plik:Plik ma 36 znaków, a polecenie bash to 13.
Jak to działa:
źródło
a
.'
cytaty. Możesz także spróbować użyć ciąg tutaj zamiast zewnętrznego pliku. Ale naprawdę powinieneś policzyć podział wiersza w swoim pliku.C # - 127 (86/46)
Jeśli bierzesz tylko część wykonywalną ...
a jeśli
HourOfDay
byłby częścią przestrzeni nazw Systemu, potrzebowałbyś 46 znaków. Niestety siedzi, wSystem.DirectoryServices.ActiveDirectory
którym sprawia, że 86 ... inny hałas psuje go.Można to skompilować i uruchomić z wiersza poleceń (127 znaków):
jeśli zostanie zapisany w pliku o nazwie cg2.cs
Jak to działa?
HourOfDay
jest typem enum, więc możemy używać nazw zamiast magicznych stałych. Typy wyliczeń mają implementację ToString (), która podaje nazwę wartości . Możesz rzucić int na wyliczenie. Console.Read () odczytuje znak ze strumienia wejściowego reprezentowanego jako liczba całkowita. wpisanie „1” daje 49 , odejmowanie 48, aby uzyskać 1, rzut / pole,HourOfDay
aby zwrócić „Jeden”.Spójrz na wersję Powershell tej samej sztuczki
źródło
-48
tutaj robi?Befunge 98,
116105103 bajtówBefunge nie został stworzony do tego ...
Wyjaśnienie:
źródło
char[][]
, miejx
iy
lokalizację, a następnie wykonać znak w tym miejscu. Najtrudniejsze byłoby zdefiniowanie operacji dla każdej możliwej postaci.&1-
.JavaScript 68
Atob / btoa może być narzędziem do kompresji biedaka
(ale jeśli chcesz wypróbować to w konsoli, nie możesz kopiować ze sformatowanego tekstu, który widzisz od razu. Przejdź do „edycji” i skopiuj z panelu źródłowego)Edytor Markdown nie lubi niektórych postaci w tej odpowiedzi: niektóre postacie gubią się podczas zapisywania. Mimo to myślę, że to problem redaktora, a nie mój. Zagubione znaki są doskonale poprawnymi 8-bitowymi znakami Unicode.
(W przeciwnym razie się mylę, jeśli ten problem był już omawiany w meta, daj mi znać). Oto wersja z obrażonymi znakami, każda sekwencja \ xNN powinna liczyć 1
Prosty test
W konsoli Firefox:
źródło
Tree
iEightF
.JavaScript 73
69
źródło
alert('0one0two0three0four0five0six0seven0eight0nine'.split(0)[#])
byłoby to samo, ale zaoszczędzisz 8 bajtów? Użytkownik wciąż wprowadzaPerl, 55
Jest uruchamiany z opcją
-p
(bajt +1), np .:Dane wejściowe są oczekiwane w STDIN, a dane wyjściowe są zapisywane w STDOUT.
Kod po prostu generuje tablicę i wybiera odpowiedni element. Opcja
-p
dba o odczytanie linii wejściowej$_
i wypisuje wynik$_
.Wariacje:
Z końcową nową linią (+3):
lub (ta sama liczba bajtów):
Aktualizacja:
Używanie nagich słów zamiast
qw[...]
(dzięki Zaid).Indeks ujemny zapisuje bajt (dzięki aragaer).
źródło
$_=(one,two,three,four,five,six,seven,eight,nine)[$_-1]
use strict
).$_=(nine,eight,seven,six,five,four,three,two,one)[-$_]
- jeden znak krótszy.Oracle SQL - 46
Demonstracja
Przyznaję, że obejmuje to standardową lukę , ale SQL jest krótszy niż Golfscript; Nie mogłem się oprzeć!
Działa według (ab) przy użyciu modeli formatu daty / godziny Oracle .
TO_DATE(n, 'j')
konwertuje liczbę na dzień juliański , liczbę dni od 1 stycznia 4712 pneTO_CHAR(<date>, 'jsp')
konwertuje to z powrotem na liczbę całkowitą (choć jako ciąg).sp
, Jest elementem przyrostek Format że czary numer. To faktycznie będzie działać z całkiem dużą liczbą liczb.Jest
&1
to zmienna podstawienia, która będzie działać tylko z klientami, którzy ją akceptują, na przykład SQL * Plus.źródło
CJam,
4543 bajtówPowyższe używa notacji ^ i M, ponieważ niektóre znaki są niedrukowalne.
Kosztem kolejnych 9 bajtów można uniknąć znaków niedrukowalnych:
Wypróbuj online.
Jak to działa
Przykład
źródło
IgGMOPiMFVMfl3LyoDHzA0j82AhFLPGF8TQiMjU2YmFzZSAyMGJhc2V7MTAxK30lIiIr
GolfScript, 51 bajtów
To prosta tabela przeglądowa. Dane wejściowe są oceniane (
~
), tworzona jest tablica wartości i znaleziony indeks.Wypróbuj tutaj
źródło
Try it here
link ma inny kod niż wklejony kod.Try it here
różnica Link w kodzie jest fakt, że strona internetowa nie obsługuje dane wprowadzone przez użytkownika. Zmień ciąg po;
, jest to identyczne z danymi wprowadzonymi przez użytkownika.Perl, 60 bajtów
Wymaga
-p
przełącznika (dwa bajty).Przykład
Jak to działa
-p
odczytuje ze STDIN i zapisuje wynik w$_
.=~/.[a-z]*/g
dzieli poprzednie słowo na podciągi jednej (dużej) litery, po której następuje dowolna liczba małych liter.(…)
zbiera podciągi do tablicy.[$_]
pobiera podciąg odpowiadający wprowadzonemu przez użytkownika.$_=…
zapisuje wynik w$_
.-p
wypisuje wartość$_
.źródło
Partia DOS - 162 znaki (łącznie z podziałami linii)
Ta odpowiedź została zainspirowana odpowiedzią Python @ grc, chociaż miałem na myśli coś podobnego.
Stosowanie:
[Nazwa pliku] [numer]
Na przykład, jeśli kod znajduje się w pliku o nazwie speak.bat, a chcesz zobaczyć liczbę „pięć”, uruchom go jako:
speak 5
Ponadto wyjście jest od góry do dołu, a nie od lewej do prawej! Więc zamiast
zobaczysz
źródło
Bash + coreutils, 64
Niekonkurencyjna koncepcja kompresji
Niektóre z egzotycznych znaków tutaj mogą nie wyświetlać się dobrze, więc ten skrypt można zrekonstruować z jego reprezentacji base64:
Przykładowe dane wyjściowe
Wyjaśnienie
Przyszło mi do głowy, że ciąg
one two three four five six seven eight nine
zawiera tylko literyefghinorstuvwx
i separator spacji - łącznie 15 znaków. Zatem każdy znak może być potencjalnie reprezentowany w 4 bitach lub 2 znakach na 1 bajt. Możemy użyć szesnastkowej reprezentacji bajtu jako łatwego sposobu podzielenia każdego bajtu na dwie cyfry szesnastkowe. Następnie możemy przekształcić cyfry szesnastkowe z powrotem w litery, których potrzebujemy, używająctr
podobnych znaków . Na szczęście,rstuvwx
są kolejne, więc można wyrazić cor-x
dotr
. Kodowanie jest umieszczony tak, żee
if
pozostaje tak jak jest oraz że słowa końca linii oddzielone, tak można użyćsed
do ouptut tylko linię potrzebujemy.Ten proces dekodowania kończy się z wykorzystaniem dużej ilości dodatkowej przestrzeni, więc ta odpowiedź jest niekonkurencyjna jako odpowiedź w stylu skryptu powłoki, ale może być użyteczną koncepcją w innych językach.
źródło
(czysty) Bash, 64
Bierze dane wejściowe jako pierwszy argument, przy założeniu poprawności danych wejściowych.
Tworzy tablicę
v
, a następnie uzyskuje dostęp do elementu określonego na wejściu. Ponieważ tablice są indeksowane od zera, musiałem dodać 0 element jako symbol zastępczy. Alternatywnie (dzięki @DennisWilliamson za wskazanie tego):źródło
v=(one two three four five six seven eight nine)
iecho ${v[$1-1]}
Python 2.x -
6564Nie tak dobra jak odpowiedź @grc, ale z pewnością bardziej czytelna :-)
O jeden mniej char, dzięki @flornquake
źródło
'nine eight seven six five four three two one'.split()[-input()]
Java 7 - 185
źródło
C 111
Długość tutaj jest starannie zaprojektowany, aby można było interpretować jako binarne i przekonwertować że do przecinku. Przy zaledwie 7 postaciach jestem pewien, że mam zwycięzcę!
źródło
#include
imain()
jest zwracany typ. Także trochę refactoring swojej wypowiedzi:main(){printf("%.5s","one two threefour five six seveneightnine"+5*getchar()-245);}
. 86 znaków według mojej liczby.111
jako binarne, to zamieniamy je7
na dziesiętne.powiedz bash (OS X):
38„Twoim celem jest przekonwertowanie liczby całkowitej z zakresu od 1 do 9 na słowo, które reprezentuje”
Kiedy ostatnio sprawdzałem, wypowiadane słowa również są słowami. Poprzednia próba (nie przyjmuje danych wejściowych)
say 4
Edycja, musi być w stanie odczytać dane wejściowe:
Wpisz dowolny numer, a pojawi się słowo. Wiem, że data końcowa jest zbliżona, ale moim zdaniem powinienem był wygrać konkurs.
Przykładowy plik audio: four.aiff
źródło
VBScript
988075źródło
J -
68 lub 6057 lub 53 bajtówWersja interaktywna (stdin):
Wersja funkcji:
Wyjaśnienie:
".(1!:1)1
odczytuje ciąg znaków i konwertuje go na liczbę całkowitąźródło
(;:'one two blah')>@{~<:
), a kolejny sześć, używając gerundaone`two`blah
zamiast;:
.>one`two`three`four`five`six`seven`eight`nine{~<:".1!:1]1
jest on o 3 znaki krótszy.Perl 36 (58 samodzielny)
Lub bez dodatkowych modułów:
źródło
Can't locate Number/Spell.pm in @INC (@INC contains: /Library/Perl/5.16/darwin-thread-multi-2level /Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16 /Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16 /System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at toto.pl line 1.
BEGIN failed--compilation aborted at toto.pl line 1.
syntax error at titi.pl line 1, near "say qw(one two three four five six seven eight nine)"
Execution of titi.pl aborted due to compilation errors.
W AppleScript; 123 znaki.
Ten skrypt pobiera dane wejściowe w oknie dialogowym. Następnie daje wynik w wynikach AppleScript .
Przykład:
6
"six"
Oto ładniejsza wersja:
Ta wersja wyświetla dane wyjściowe w ładnym oknie dialogowym.
Przykład:
9
nine
[Odpowiedź zredagowana; nieznacznie poprawiono okno dialogowe dla danych wejściowych; wciąż 124 znaki. Odpowiedź edytowana ponownie; teraz 1 char mniej! ]
źródło
set n to text returned of
... Łał.PowerShell -
9174Dowiedz się, jak przesłać, aby usunąć połączenie Enum i ToObject:
Jak to działa?
HourOfDay jest rodzajem enum, więc możemy używać nazw zamiast magicznych stałych. Typy wyliczeń mają implementację ToString (), która podaje nazwę stałej wartości. Możesz rzucić int na wyliczenie. Console.Read () odczytuje znak ze strumienia wejściowego reprezentowanego jako liczba całkowita. wpisanie „1” daje 49, odejmowanie 48, aby uzyskać 1, i przesłać na HourOfDay, aby zwrócić „Jeden”.
Ponieważ PowerShell wykonuje ToString na wszystkich obiektach zapisywanych do strumienia wyjściowego i nie potrzebuje puchu, aby zamienić to w plik wykonywalny, to wszystko, co jest potrzebne oprócz PowerShell ...
źródło
CJam - 50
To jest proste rozwiązanie ASCII, które wykorzystuje żądania HTTP (jest to dozwolone w pytaniu):
Na serwerze znajduje się 9 plików tekstowych o nazwach 1, 2, ..., 9, z których każdy zawiera odpowiednie słowo.
Całkowity rozmiar: 14 + 3 („jeden”) + 3 („dwa”) + 5 + 4 + 4 + 3 + 5 + 5 + 4 = 50.
Można grać w golfa więcej, używając krótszej domeny.
Tłumacz online nie obsługuje żądań HTTP, więc program musi być uruchamiany przy użyciu interpretera Java .
źródło
Partia - 86
Zdecydowanie krótszy niż druga odpowiedź na zestaw i faktycznie zaskakująco konkurencyjny.
Używany jako
filename.bat number
, a wynik jest w postaci pliku o nazwie poprawnej liczby.źródło
Ruby 64
źródło
9-1
po co pisać, skoro możesz po prostu powiedzieć8
? Oczywiście oba9-1
i8
są złe; ten skrypt wypisuje „dziewięć” przez cały czas i ignoruje dane wejściowe.BASH 9
bezwstydna replika linuksa odpowiedzi kuzyna
mówi jeden
źródło
GolfScript, 50 bajtów
Chciałem sprawdzić, czy uda mi się pokonać 51-bajtowe samodzielne rozwiązanie GolfScript firmy Quincunx . Okazuje się, że przy wystarczającej liczbie lew, tak, mogę - jednym bajtem.
Ponieważ jedną ze sztuczek, których używam, jest użycie bajtów spoza zakresu drukowalnego ASCII, wynikowego programu nie można tutaj wkleić bezpośrednio. Zamiast tego dostarczam zrzut heksowy; użytkownicy systemów Unixish mogą użyć
xxd -r
do zrekonstruowania rzeczywistego 50-bajtowego programu GolfScript z zrzutu heksadecymalnego:Podstawowa sztuczka użyta do wygenerowania tego programu jest prosta: kompresuję długi ciąg literału, który stanowi większość kodu Quincunx, odejmując 99 (kod ASCII litery
c
) od wartości znaków, interpretując uzyskane wartości jako liczbę w podstawie 22 (wystarczająco, aby zakodować litery dox
), a następnie ponownie zakodować wynikową liczbę w bazie 255, aby wygenerować niedrukowalny ciąg bajtów, który stanowi większość pierwszej połowy mojego programu. Reszta programu następnie odwraca ten proces, dekodując ciąg z powrotem do czegoś, co można wydrukować.(Ponieważ najniższa litera faktycznie obecna w nazwach liczb to
e
, mógłbym jeszcze bardziej skrócić ciąg bajtów, odejmując 101 od kodów ASCII i używając podstawy 20. Jednak odjęcie 101 spowodowałoby odwzorowanie literyo
na nowy wiersz, który ja używam jako separatora liczb, ponieważ jest on dogodnie dostępny jako wbudowana stałan
w GolfScript. Obejście tego kosztowałoby mnie więcej niż jeden bajt, który oszczędziłby użycie dolnej podstawy. Korzystanie z przesunięcia 99 pozostawia nową linię odpowiadającą literzem
, który jest dogodnie nieobecny w nazwach numerów).Oto wersja programu bez golfa:
źródło